UNPKG

@graphql-codegen/near-operation-file-preset

Version:

GraphQL Code Generator preset for generating operation code near the operation file

45 lines (44 loc) 2.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.defineFilepathSubfolder = defineFilepathSubfolder; exports.appendFileNameToFilePath = appendFileNameToFilePath; exports.extractExternalFragmentsInUse = extractExternalFragmentsInUse; const tslib_1 = require("tslib"); const path_1 = require("path"); const parse_filepath_1 = tslib_1.__importDefault(require("parse-filepath")); const plugin_helpers_1 = require("@graphql-codegen/plugin-helpers"); function defineFilepathSubfolder(baseFilePath, folder) { const parsedPath = (0, parse_filepath_1.default)(baseFilePath); return (0, path_1.join)(parsedPath.dir, folder, parsedPath.base).replace(/\\/g, '/'); } function appendFileNameToFilePath(baseFilePath, fileName, extension) { const parsedPath = (0, parse_filepath_1.default)(baseFilePath); const name = fileName || parsedPath.name; return (0, path_1.join)(parsedPath.dir, name + extension).replace(/\\/g, '/'); } function extractExternalFragmentsInUse(documentNode, fragmentNameToFile, result = {}, level = 0) { const ignoreList = new Set(); // First, take all fragments definition from the current file, and mark them as ignored (0, plugin_helpers_1.oldVisit)(documentNode, { enter: { FragmentDefinition: (node) => { ignoreList.add(node.name.value); }, }, }); // Then, look for all used fragments in this document (0, plugin_helpers_1.oldVisit)(documentNode, { enter: { FragmentSpread: (node) => { if (!ignoreList.has(node.name.value) && (result[node.name.value] === undefined || level < result[node.name.value])) { result[node.name.value] = level; if (fragmentNameToFile[node.name.value]) { extractExternalFragmentsInUse(fragmentNameToFile[node.name.value].node, fragmentNameToFile, result, level + 1); } } }, }, }); return result; }