@apollo/client
Version:
A fully-featured caching GraphQL client.
82 lines (77 loc) • 2.74 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var optimism = require('optimism');
var graphql = require('graphql');
var core = require('../core');
var utilities = require('../../utilities');
var KEEP = "__KEEP";
function removeTypenameFromVariables(options) {
if (options === void 0) { options = Object.create(null); }
return new core.ApolloLink(function (operation, forward) {
var except = options.except;
var query = operation.query, variables = operation.variables;
if (variables) {
operation.variables = except
? maybeStripTypenameUsingConfig(query, variables, except)
: utilities.stripTypename(variables);
}
return forward(operation);
});
}
function maybeStripTypenameUsingConfig(query, variables, config) {
var variableDefinitions = getVariableDefinitions(query);
return Object.fromEntries(Object.entries(variables).map(function (keyVal) {
var key = keyVal[0], value = keyVal[1];
var typename = variableDefinitions[key];
var typenameConfig = config[typename];
keyVal[1] = typenameConfig
? maybeStripTypename(value, typenameConfig)
: utilities.stripTypename(value);
return keyVal;
}));
}
function maybeStripTypename(value, config) {
if (config === KEEP) {
return value;
}
if (Array.isArray(value)) {
return value.map(function (item) { return maybeStripTypename(item, config); });
}
if (utilities.isPlainObject(value)) {
var modified_1 = {};
Object.keys(value).forEach(function (key) {
var child = value[key];
if (key === "__typename") {
return;
}
var fieldConfig = config[key];
modified_1[key] = fieldConfig
? maybeStripTypename(child, fieldConfig)
: utilities.stripTypename(child);
});
return modified_1;
}
return value;
}
var getVariableDefinitions = optimism.wrap(function (document) {
var definitions = {};
graphql.visit(document, {
VariableDefinition: function (node) {
definitions[node.variable.name.value] = unwrapType(node.type);
},
});
return definitions;
});
function unwrapType(node) {
switch (node.kind) {
case graphql.Kind.NON_NULL_TYPE:
return unwrapType(node.type);
case graphql.Kind.LIST_TYPE:
return unwrapType(node.type);
case graphql.Kind.NAMED_TYPE:
return node.name.value;
}
}
exports.KEEP = KEEP;
exports.removeTypenameFromVariables = removeTypenameFromVariables;
//# sourceMappingURL=remove-typename.cjs.map