@gqlts/cli
Version:
Generate a client sdk from your GraphQl API
151 lines • 8.07 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());
});
};
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
;