UNPKG

@gqlts/cli

Version:

Generate a client sdk from your GraphQl API

151 lines 8.07 kB
"use strict"; 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.clientTasks = clientTasks; const files_1 = require("../helpers/files"); const renderClient_1 = require("../render/client/renderClient"); const renderClientDefinition_1 = require("../render/client/renderClientDefinition"); const RenderContext_1 = require("../render/common/RenderContext"); const renderRequestTypes_1 = require("../render/requestTypes/renderRequestTypes"); const renderResponseTypes_1 = require("../render/responseTypes/renderResponseTypes"); const renderSchema_1 = require("../render/schema/renderSchema"); const renderTypeGuards_1 = require("../render/typeGuards/renderTypeGuards"); const renderTypeMap_1 = require("../render/typeMap/renderTypeMap"); const browserify_1 = __importDefault(require("browserify")); const fs_1 = require("fs"); const listr_1 = __importDefault(require("listr")); const path_1 = require("path"); const terser_1 = require("terser"); const schemaGqlFile = 'schema.graphql'; const schemaTypesFile = 'schema.ts'; const guardsFileCjs = 'guards.cjs.js'; const guardsFileEsm = 'guards.esm.js'; const typeMapFileCjs = 'types.cjs.js'; const typeMapFileEsm = 'types.esm.js'; const clientFileCjs = 'index.js'; const clientTypesFile = 'index.d.ts'; function clientTasks(config) { const clientFileEsm = config.onlyEsModules ? 'index.js' : 'index.esm.js'; if (!config.output) throw new Error('`output` must be defined in the config'); const output = config.output; const tasks = [ { title: `writing ${schemaGqlFile}`, task: (ctx) => __awaiter(this, void 0, void 0, function* () { const renderCtx = new RenderContext_1.RenderContext(ctx.schema, config); (0, renderSchema_1.renderSchema)(ctx.schema, renderCtx); yield (0, files_1.writeFileToPath)([output, schemaGqlFile], yield renderCtx.toCode('graphql')); }), }, { title: `writing ${schemaTypesFile}`, task: (ctx) => __awaiter(this, void 0, void 0, function* () { const renderCtx = new RenderContext_1.RenderContext(ctx.schema, config); (0, renderResponseTypes_1.renderResponseTypes)(ctx.schema, renderCtx); (0, renderRequestTypes_1.renderRequestTypes)(ctx.schema, renderCtx); (0, renderTypeGuards_1.renderTypeGuards)(ctx.schema, renderCtx); yield (0, files_1.writeFileToPath)([output, schemaTypesFile], yield renderCtx.toCode('typescript')); }), }, !config.onlyCJSModules && { title: `writing ${guardsFileEsm}`, task: (ctx) => __awaiter(this, void 0, void 0, function* () { const renderCtx = new RenderContext_1.RenderContext(ctx.schema, config); (0, renderTypeGuards_1.renderTypeGuards)(ctx.schema, renderCtx, 'esm'); yield (0, files_1.writeFileToPath)([output, guardsFileEsm], yield renderCtx.toCode('typescript')); }), }, !config.onlyEsModules && { title: `writing ${guardsFileCjs}`, task: (ctx) => __awaiter(this, void 0, void 0, function* () { const renderCtx = new RenderContext_1.RenderContext(ctx.schema, config); (0, renderTypeGuards_1.renderTypeGuards)(ctx.schema, renderCtx, 'cjs'); yield (0, files_1.writeFileToPath)([output, guardsFileCjs], yield renderCtx.toCode('typescript')); }), }, { title: `writing types`, task: (ctx) => __awaiter(this, void 0, void 0, function* () { const renderCtx = new RenderContext_1.RenderContext(ctx.schema, config); (0, renderTypeMap_1.renderTypeMap)(ctx.schema, renderCtx); if (!config.onlyEsModules) { yield (0, files_1.writeFileToPath)([output, typeMapFileCjs], `module.exports = ${yield renderCtx.toCode()}`); } if (!config.onlyCJSModules) { yield (0, files_1.writeFileToPath)([output, typeMapFileEsm], `export default ${yield renderCtx.toCode()}`); } }), }, !config.onlyEsModules && { title: `writing ${clientFileCjs}`, task: (ctx) => __awaiter(this, void 0, void 0, function* () { const renderCtx = new RenderContext_1.RenderContext(ctx.schema, config); (0, renderClient_1.renderClientCjs)(ctx.schema, renderCtx); yield (0, files_1.writeFileToPath)([output, clientFileCjs], yield renderCtx.toCode('typescript')); }), }, !config.onlyCJSModules && { title: `writing ${clientFileEsm}`, task: (ctx) => __awaiter(this, void 0, void 0, function* () { const renderCtx = new RenderContext_1.RenderContext(ctx.schema, config); (0, renderClient_1.renderClientEsm)(ctx.schema, renderCtx); yield (0, files_1.writeFileToPath)([output, clientFileEsm], yield renderCtx.toCode('typescript')); }), }, { title: `writing ${clientTypesFile}`, task: (ctx) => __awaiter(this, void 0, void 0, function* () { const renderCtx = new RenderContext_1.RenderContext(ctx.schema, config); (0, renderClientDefinition_1.renderClientDefinition)(ctx.schema, renderCtx); yield (0, files_1.writeFileToPath)([output, clientTypesFile], yield renderCtx.toCode('typescript')); }), }, !!(config === null || config === void 0 ? void 0 : config['standalone-name']) && { title: `writing UMD`, task: (ctx) => __awaiter(this, void 0, void 0, function* () { const b = (0, browserify_1.default)({ standalone: config['standalone-name'], }); const inFile = (0, path_1.resolve)(output, clientFileCjs); const outFile = (0, path_1.resolve)(output, 'standalone.js'); b.plugin(require('esmify')); b.add(inFile); b.bundle() .pipe((0, fs_1.createWriteStream)(outFile)) .on('finish', () => __awaiter(this, void 0, void 0, function* () { var _a; if (!config['standalone-compress']) { return; } const result = yield (0, terser_1.minify)((0, fs_1.readFileSync)(outFile).toString(), { compress: config['standalone-compress'], }); yield (0, fs_1.writeFileSync)(outFile, (_a = result === null || result === void 0 ? void 0 : result.code) !== null && _a !== void 0 ? _a : ''); })); }), }, ]; return [ { title: 'preparing client directory', task: () => (0, files_1.ensurePath)([output], true), }, { title: `writing files`, task: () => new listr_1.default(tasks.filter((x) => Boolean(x)), { concurrent: true }), }, ]; } //# sourceMappingURL=clientTasks.js.map