@gqlts/cli
Version:
Generate a client sdk from your GraphQl API
67 lines • 3.17 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.toClientSchema = toClientSchema;
exports.schemaRenderTest = schemaRenderTest;
exports.typeRenderTest = typeRenderTest;
exports.typeRenderTestCase = typeRenderTestCase;
const files_1 = require("../helpers/files");
const RenderContext_1 = require("../render/common/RenderContext");
const graphql_1 = require("graphql");
function toClientSchema(schemaGql) {
return __awaiter(this, void 0, void 0, function* () {
const schema = (0, graphql_1.buildSchema)(schemaGql);
const introspectionResponse = yield (0, graphql_1.graphql)({ schema, source: (0, graphql_1.getIntrospectionQuery)() });
if (!introspectionResponse.data) {
throw new Error(JSON.stringify(introspectionResponse.errors));
}
return (0, graphql_1.buildClientSchema)(introspectionResponse.data);
});
}
function schemaRenderTest(schemaGql, renderer, parser) {
return __awaiter(this, void 0, void 0, function* () {
const schema = yield toClientSchema(schemaGql);
const ctx = new RenderContext_1.RenderContext(schema);
renderer(schema, ctx);
return ctx.toCode(parser, true);
});
}
function typeRenderTest(schemaGql, renderer, typeNames, parser) {
return __awaiter(this, void 0, void 0, function* () {
const schema = yield toClientSchema(schemaGql);
const ctx = new RenderContext_1.RenderContext(schema);
typeNames.forEach((typeName) => {
const type = schema.getType(typeName);
if (!type) {
throw new Error(`type ${typeName} is not defined in the schema`);
}
renderer(type, ctx);
});
return ctx.toCode(parser, true);
});
}
function typeRenderTestCase(dirName_1, file_1, renderer_1, typeNames_1) {
return __awaiter(this, arguments, void 0, function* (dirName, file, renderer, typeNames, output = false) {
const [gql, ts] = yield Promise.all([
(0, files_1.readFileFromPath)([dirName, `cases/${file}.graphql`]),
(0, files_1.readFileFromPath)([dirName, `cases/${file}.case.ts`]),
]);
const actualTs = yield typeRenderTest(gql, renderer, typeNames, 'typescript');
if (output) {
console.log(actualTs);
throw new Error('test case did not run');
}
else {
expect(actualTs).toBe(ts);
}
});
}
//# sourceMappingURL=render.js.map
;