UNPKG

@graphql-hive/core

Version:
84 lines (83 loc) 3.87 kB
"use strict"; 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; }