@graphql-hive/core
Version:
84 lines (83 loc) • 3.87 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.normalizeOperation = normalizeOperation;
const tslib_1 = require("tslib");
const graphql_1 = require("graphql");
const lodash_sortby_1 = tslib_1.__importDefault(require("lodash.sortby"));
function normalizeOperation({ document, operationName, hideLiterals = true, removeAliases = true, }) {
var _a, _b;
return (0, graphql_1.stripIgnoredCharacters)((0, graphql_1.print)((0, graphql_1.visit)(dropUnusedDefinitions(document, operationName !== null && operationName !== void 0 ? operationName : (_b = (_a = document.definitions.find(isOperationDef)) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.value), {
// hide literals
IntValue(node) {
return hideLiterals ? Object.assign(Object.assign({}, node), { value: '0' }) : node;
},
FloatValue(node) {
return hideLiterals ? Object.assign(Object.assign({}, node), { value: '0' }) : node;
},
StringValue(node) {
return hideLiterals ? Object.assign(Object.assign({}, node), { value: '', block: false }) : node;
},
Field(node) {
return Object.assign(Object.assign({}, node), {
// remove aliases
alias: removeAliases ? undefined : node.alias,
// sort arguments
arguments: sortNodes(node.arguments) });
},
Document(node) {
return Object.assign(Object.assign({}, node), { definitions: sortNodes(node.definitions) });
},
OperationDefinition(node) {
return Object.assign(Object.assign({}, node), { variableDefinitions: sortNodes(node.variableDefinitions) });
},
SelectionSet(node) {
return Object.assign(Object.assign({}, node), { selections: sortNodes(node.selections) });
},
FragmentSpread(node) {
return Object.assign(Object.assign({}, node), { directives: sortNodes(node.directives) });
},
InlineFragment(node) {
return Object.assign(Object.assign({}, node), { directives: sortNodes(node.directives) });
},
FragmentDefinition(node) {
return Object.assign(Object.assign({}, node), { directives: sortNodes(node.directives), variableDefinitions: sortNodes(node.variableDefinitions) });
},
Directive(node) {
return Object.assign(Object.assign({}, node), { arguments: sortNodes(node.arguments) });
},
})));
}
function sortNodes(nodes) {
if (nodes) {
if (nodes.length === 0) {
return [];
}
if (isOfKindList(nodes, graphql_1.Kind.DIRECTIVE)) {
return (0, lodash_sortby_1.default)(nodes, 'name.value');
}
if (isOfKindList(nodes, graphql_1.Kind.VARIABLE_DEFINITION)) {
return (0, lodash_sortby_1.default)(nodes, 'variable.name.value');
}
if (isOfKindList(nodes, graphql_1.Kind.ARGUMENT)) {
return (0, lodash_sortby_1.default)(nodes, 'name.value');
}
if (isOfKindList(nodes, [graphql_1.Kind.FIELD, graphql_1.Kind.FRAGMENT_SPREAD, graphql_1.Kind.INLINE_FRAGMENT])) {
return (0, lodash_sortby_1.default)(nodes, 'kind', 'name.value');
}
return (0, lodash_sortby_1.default)(nodes, 'kind', 'name.value');
}
return;
}
function isOfKindList(nodes, kind) {
return typeof kind === 'string' ? nodes[0].kind === kind : kind.includes(nodes[0].kind);
}
function isOperationDef(def) {
return def.kind === graphql_1.Kind.OPERATION_DEFINITION;
}
function dropUnusedDefinitions(doc, operationName) {
var _a;
if (!operationName) {
return doc;
}
return (_a = (0, graphql_1.separateOperations)(doc)[operationName]) !== null && _a !== void 0 ? _a : doc;
}
;