UNPKG

@graphql-mesh/compose-cli

Version:
72 lines (71 loc) 3.53 kB
"use strict"; 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: ['/', '|', '\\', '--'] }, }); async function runComposeCLI(processExit = (exitCode) => process.exit(exitCode)) { exports.spinnies.add('main', { text: 'Starting Mesh Compose CLI' }); const meshComposeCLIConfigFileName = process.env.MESH_DEV_CONFIG_FILE_NAME || 'mesh.config.ts'; const meshComposeCLIConfigFilePath = process.env.MESH_DEV_CONFIG_FILE_PATH || (0, path_1.join)(process.cwd(), meshComposeCLIConfigFileName); exports.spinnies.add('config', { text: `Loading Mesh Compose CLI 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: `Mesh Compose CLI Config was not found in ${meshComposeCLIConfigFilePath}`, }); return processExit(1); } exports.spinnies.succeed('config', { text: `Loaded Mesh Compose CLI 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 || './fusiongraph.graphql'; 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 Mesh Compose CLI' }); } exports.runComposeCLI = runComposeCLI;