@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
JavaScript
;
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;
}