@graphql-mesh/compose-cli
Version:
74 lines (73 loc) • 3.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.runComposeCLI = exports.spinnies = void 0;
const tslib_1 = require("tslib");
/* eslint-disable import/no-nodejs-modules */
const fs_1 = require("fs");
const path_1 = require("path");
const graphql_1 = require("graphql");
const spinnies_1 = tslib_1.__importDefault(require("spinnies"));
const utils_1 = require("@graphql-tools/utils");
const getComposedSchemaFromConfig_js_1 = require("./getComposedSchemaFromConfig.js");
exports.spinnies = new spinnies_1.default({
color: 'white',
succeedColor: 'white',
failColor: 'red',
succeedPrefix: '✔',
failPrefix: '💥',
spinner: { interval: 80, frames: ['/', '|', '\\', '--'] },
});
const defaultProcessExit = (exitCode) => process.exit(exitCode);
async function runComposeCLI({ defaultConfigFileName = 'mesh.config.ts', defaultConfigFilePath = process.cwd(), defaultFusiongraphFileName = 'fusiongraph.graphql', productName = 'Mesh Compose CLI', processExit = defaultProcessExit, } = {}) {
exports.spinnies.add('main', { text: 'Starting ' + productName });
const meshComposeCLIConfigFileName = process.env.MESH_COMPOSE_CONFIG_FILE_NAME || defaultConfigFileName;
const meshComposeCLIConfigFilePath = process.env.MESH_COMPOSE_CONFIG_FILE_PATH ||
(0, path_1.join)(defaultConfigFilePath, meshComposeCLIConfigFileName);
exports.spinnies.add('config', {
text: `Loading ${productName} Config from ${meshComposeCLIConfigFilePath}`,
});
const loadedConfig = await Promise.resolve(`${meshComposeCLIConfigFilePath}`).then(s => tslib_1.__importStar(require(s)));
const meshComposeCLIConfig = loadedConfig.composeConfig;
if (!meshComposeCLIConfig) {
exports.spinnies.fail('config', {
text: `${productName} Config was not found in ${meshComposeCLIConfigFilePath}`,
});
return processExit(1);
}
exports.spinnies.succeed('config', {
text: `Loaded ${productName} Config from ${meshComposeCLIConfigFilePath}`,
});
const composedSchema = await (0, getComposedSchemaFromConfig_js_1.getComposedSchemaFromConfig)(meshComposeCLIConfig, exports.spinnies);
exports.spinnies.add('write', { text: `Writing Fusiongraph` });
const printedSupergraph = (0, utils_1.printSchemaWithDirectives)(composedSchema);
const fusiongraphFileName = meshComposeCLIConfig.target || defaultFusiongraphFileName;
const fusiongraphPath = (0, path_1.isAbsolute)(fusiongraphFileName)
? (0, path_1.join)(process.cwd(), fusiongraphFileName)
: fusiongraphFileName;
let writtenData;
if (fusiongraphPath.endsWith('.json')) {
writtenData = JSON.stringify((0, graphql_1.parse)(writtenData, { noLocation: true }), null, 2);
}
else if (fusiongraphPath.endsWith('.graphql') ||
fusiongraphPath.endsWith('.gql') ||
fusiongraphPath.endsWith('.graphqls') ||
fusiongraphPath.endsWith('.gqls')) {
writtenData = printedSupergraph;
}
else if (fusiongraphPath.endsWith('.ts') ||
fusiongraphPath.endsWith('.cts') ||
fusiongraphPath.endsWith('.mts') ||
fusiongraphPath.endsWith('.js') ||
fusiongraphPath.endsWith('.cjs') ||
fusiongraphPath.endsWith('.mjs')) {
writtenData = `export default ${JSON.stringify(printedSupergraph)}`;
}
else {
console.error(`Unsupported file extension for ${fusiongraphPath}`);
return processExit(1);
}
await fs_1.promises.writeFile(fusiongraphPath, writtenData, 'utf8');
exports.spinnies.succeed('write', { text: `Written fusiongraph to ${fusiongraphPath}` });
exports.spinnies.succeed('main', { text: 'Finished ' + productName });
}
exports.runComposeCLI = runComposeCLI;