UNPKG

@apollo/client

Version:

A fully-featured caching GraphQL client.

208 lines 7.12 kB
import { InvariantError } from "../globals/index.js"; import { isNonNullObject } from "../common/objects.js"; import { getFragmentFromSelection } from "./fragments.js"; export function makeReference(id) { return { __ref: String(id) }; } export function isReference(obj) { return Boolean(obj && typeof obj === 'object' && typeof obj.__ref === 'string'); } export function isDocumentNode(value) { return (isNonNullObject(value) && value.kind === "Document" && Array.isArray(value.definitions)); } function isStringValue(value) { return value.kind === 'StringValue'; } function isBooleanValue(value) { return value.kind === 'BooleanValue'; } function isIntValue(value) { return value.kind === 'IntValue'; } function isFloatValue(value) { return value.kind === 'FloatValue'; } function isVariable(value) { return value.kind === 'Variable'; } function isObjectValue(value) { return value.kind === 'ObjectValue'; } function isListValue(value) { return value.kind === 'ListValue'; } function isEnumValue(value) { return value.kind === 'EnumValue'; } function isNullValue(value) { return value.kind === 'NullValue'; } export function valueToObjectRepresentation(argObj, name, value, variables) { if (isIntValue(value) || isFloatValue(value)) { argObj[name.value] = Number(value.value); } else if (isBooleanValue(value) || isStringValue(value)) { argObj[name.value] = value.value; } else if (isObjectValue(value)) { var nestedArgObj_1 = {}; value.fields.map(function (obj) { return valueToObjectRepresentation(nestedArgObj_1, obj.name, obj.value, variables); }); argObj[name.value] = nestedArgObj_1; } else if (isVariable(value)) { var variableValue = (variables || {})[value.name.value]; argObj[name.value] = variableValue; } else if (isListValue(value)) { argObj[name.value] = value.values.map(function (listValue) { var nestedArgArrayObj = {}; valueToObjectRepresentation(nestedArgArrayObj, name, listValue, variables); return nestedArgArrayObj[name.value]; }); } else if (isEnumValue(value)) { argObj[name.value] = value.value; } else if (isNullValue(value)) { argObj[name.value] = null; } else { throw __DEV__ ? new InvariantError("The inline argument \"".concat(name.value, "\" of kind \"").concat(value.kind, "\"") + 'is not supported. Use variables instead of inline arguments to ' + 'overcome this limitation.') : new InvariantError(55); } } export function storeKeyNameFromField(field, variables) { var directivesObj = null; if (field.directives) { directivesObj = {}; field.directives.forEach(function (directive) { directivesObj[directive.name.value] = {}; if (directive.arguments) { directive.arguments.forEach(function (_a) { var name = _a.name, value = _a.value; return valueToObjectRepresentation(directivesObj[directive.name.value], name, value, variables); }); } }); } var argObj = null; if (field.arguments && field.arguments.length) { argObj = {}; field.arguments.forEach(function (_a) { var name = _a.name, value = _a.value; return valueToObjectRepresentation(argObj, name, value, variables); }); } return getStoreKeyName(field.name.value, argObj, directivesObj); } var KNOWN_DIRECTIVES = [ 'connection', 'include', 'skip', 'client', 'rest', 'export', ]; export var getStoreKeyName = Object.assign(function (fieldName, args, directives) { if (args && directives && directives['connection'] && directives['connection']['key']) { if (directives['connection']['filter'] && directives['connection']['filter'].length > 0) { var filterKeys = directives['connection']['filter'] ? directives['connection']['filter'] : []; filterKeys.sort(); var filteredArgs_1 = {}; filterKeys.forEach(function (key) { filteredArgs_1[key] = args[key]; }); return "".concat(directives['connection']['key'], "(").concat(stringify(filteredArgs_1), ")"); } else { return directives['connection']['key']; } } var completeFieldName = fieldName; if (args) { var stringifiedArgs = stringify(args); completeFieldName += "(".concat(stringifiedArgs, ")"); } if (directives) { Object.keys(directives).forEach(function (key) { if (KNOWN_DIRECTIVES.indexOf(key) !== -1) return; if (directives[key] && Object.keys(directives[key]).length) { completeFieldName += "@".concat(key, "(").concat(stringify(directives[key]), ")"); } else { completeFieldName += "@".concat(key); } }); } return completeFieldName; }, { setStringify: function (s) { var previous = stringify; stringify = s; return previous; }, }); var stringify = function defaultStringify(value) { return JSON.stringify(value, stringifyReplacer); }; function stringifyReplacer(_key, value) { if (isNonNullObject(value) && !Array.isArray(value)) { value = Object.keys(value).sort().reduce(function (copy, key) { copy[key] = value[key]; return copy; }, {}); } return value; } export function argumentsObjectFromField(field, variables) { if (field.arguments && field.arguments.length) { var argObj_1 = {}; field.arguments.forEach(function (_a) { var name = _a.name, value = _a.value; return valueToObjectRepresentation(argObj_1, name, value, variables); }); return argObj_1; } return null; } export function resultKeyNameFromField(field) { return field.alias ? field.alias.value : field.name.value; } export function getTypenameFromResult(result, selectionSet, fragmentMap) { if (typeof result.__typename === 'string') { return result.__typename; } for (var _i = 0, _a = selectionSet.selections; _i < _a.length; _i++) { var selection = _a[_i]; if (isField(selection)) { if (selection.name.value === '__typename') { return result[resultKeyNameFromField(selection)]; } } else { var typename = getTypenameFromResult(result, getFragmentFromSelection(selection, fragmentMap).selectionSet, fragmentMap); if (typeof typename === 'string') { return typename; } } } } export function isField(selection) { return selection.kind === 'Field'; } export function isInlineFragment(selection) { return selection.kind === 'InlineFragment'; } //# sourceMappingURL=storeUtils.js.map