UNPKG

@apollo/client

Version:

A fully-featured caching GraphQL client.

1,451 lines (1,411 loc) 341 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib = require('tslib'); var tsInvariant = require('ts-invariant'); var equal = require('@wry/equality'); var graphql = require('graphql'); var zenObservableTs = require('zen-observable-ts'); require('symbol-observable'); var optimism = require('optimism'); var context = require('@wry/context'); var trie = require('@wry/trie'); var graphqlTag = require('graphql-tag'); var React = require('react'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { for (var k in e) { n[k] = e[k]; } } n["default"] = e; return Object.freeze(n); } var equal__default = /*#__PURE__*/_interopDefaultLegacy(equal); var React__namespace = /*#__PURE__*/_interopNamespace(React); var version = "3.8.4"; function maybe(thunk) { try { return thunk(); } catch (_a) { } } var global$1 = (maybe(function () { return globalThis; }) || maybe(function () { return window; }) || maybe(function () { return self; }) || maybe(function () { return global; }) || maybe(function () { return maybe.constructor("return this")(); })); var prefixCounts = new Map(); function makeUniqueId(prefix) { var count = prefixCounts.get(prefix) || 1; prefixCounts.set(prefix, count + 1); return "".concat(prefix, ":").concat(count, ":").concat(Math.random().toString(36).slice(2)); } function stringifyForDisplay(value, space) { if (space === void 0) { space = 0; } var undefId = makeUniqueId("stringifyForDisplay"); return JSON.stringify(value, function (key, value) { return value === void 0 ? undefId : value; }, space) .split(JSON.stringify(undefId)) .join("<undefined>"); } function wrap(fn) { return function (message) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } if (typeof message === "number") { fn(getErrorMsg(message, args)); } else { fn.apply(void 0, tslib.__spreadArray([message], args, false)); } }; } var invariant = Object.assign(function invariant(condition, message) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } if (!condition) { tsInvariant.invariant(condition, getErrorMsg(message, args)); } }, { debug: wrap(tsInvariant.invariant.debug), log: wrap(tsInvariant.invariant.log), warn: wrap(tsInvariant.invariant.warn), error: wrap(tsInvariant.invariant.error), }); function newInvariantError(message) { var optionalParams = []; for (var _i = 1; _i < arguments.length; _i++) { optionalParams[_i - 1] = arguments[_i]; } return new tsInvariant.InvariantError(getErrorMsg(message, optionalParams)); } var ApolloErrorMessageHandler = Symbol.for("ApolloErrorMessageHandler_" + version); function getErrorMsg(message, messageArgs) { if (messageArgs === void 0) { messageArgs = []; } if (!message) return; var args = messageArgs.map(function (arg) { return typeof arg == "string" ? arg : stringifyForDisplay(arg, 2).slice(0, 1000); }); return ((global$1[ApolloErrorMessageHandler] && global$1[ApolloErrorMessageHandler](message, args)) || "An error occurred! For more details, see the full error text at https://go.apollo.dev/c/err#".concat(encodeURIComponent(JSON.stringify({ version: version, message: message, args: args, })))); } function shouldInclude(_a, variables) { var directives = _a.directives; if (!directives || !directives.length) { return true; } return getInclusionDirectives(directives).every(function (_a) { var directive = _a.directive, ifArgument = _a.ifArgument; var evaledValue = false; if (ifArgument.value.kind === "Variable") { evaledValue = variables && variables[ifArgument.value.name.value]; invariant(evaledValue !== void 0, 64, directive.name.value); } else { evaledValue = ifArgument.value.value; } return directive.name.value === "skip" ? !evaledValue : evaledValue; }); } function hasDirectives(names, root, all) { var nameSet = new Set(names); var uniqueCount = nameSet.size; graphql.visit(root, { Directive: function (node) { if (nameSet.delete(node.name.value) && (!all || !nameSet.size)) { return graphql.BREAK; } }, }); return all ? !nameSet.size : nameSet.size < uniqueCount; } function hasClientExports(document) { return document && hasDirectives(["client", "export"], document, true); } function isInclusionDirective(_a) { var value = _a.name.value; return value === "skip" || value === "include"; } function getInclusionDirectives(directives) { var result = []; if (directives && directives.length) { directives.forEach(function (directive) { if (!isInclusionDirective(directive)) return; var directiveArguments = directive.arguments; var directiveName = directive.name.value; invariant(directiveArguments && directiveArguments.length === 1, 65, directiveName); var ifArgument = directiveArguments[0]; invariant(ifArgument.name && ifArgument.name.value === "if", 66, directiveName); var ifValue = ifArgument.value; invariant(ifValue && (ifValue.kind === "Variable" || ifValue.kind === "BooleanValue"), 67, directiveName); result.push({ directive: directive, ifArgument: ifArgument }); }); } return result; } var canUseWeakMap = typeof WeakMap === "function" && maybe(function () { return navigator.product; }) !== "ReactNative"; var canUseWeakSet = typeof WeakSet === "function"; var canUseSymbol = typeof Symbol === "function" && typeof Symbol.for === "function"; var canUseAsyncIteratorSymbol = canUseSymbol && Symbol.asyncIterator; var canUseDOM = typeof maybe(function () { return window.document.createElement; }) === "function"; var usingJSDOM = maybe(function () { return navigator.userAgent.indexOf("jsdom") >= 0; }) || false; var canUseLayoutEffect = canUseDOM && !usingJSDOM; function isNonNullObject(obj) { return obj !== null && typeof obj === "object"; } function getFragmentQueryDocument(document, fragmentName) { var actualFragmentName = fragmentName; var fragments = []; document.definitions.forEach(function (definition) { if (definition.kind === "OperationDefinition") { throw newInvariantError( 68, definition.operation, definition.name ? " named '".concat(definition.name.value, "'") : "" ); } if (definition.kind === "FragmentDefinition") { fragments.push(definition); } }); if (typeof actualFragmentName === "undefined") { invariant(fragments.length === 1, 69, fragments.length); actualFragmentName = fragments[0].name.value; } var query = tslib.__assign(tslib.__assign({}, document), { definitions: tslib.__spreadArray([ { kind: "OperationDefinition", operation: "query", selectionSet: { kind: "SelectionSet", selections: [ { kind: "FragmentSpread", name: { kind: "Name", value: actualFragmentName, }, }, ], }, } ], document.definitions, true) }); return query; } function createFragmentMap(fragments) { if (fragments === void 0) { fragments = []; } var symTable = {}; fragments.forEach(function (fragment) { symTable[fragment.name.value] = fragment; }); return symTable; } function getFragmentFromSelection(selection, fragmentMap) { switch (selection.kind) { case "InlineFragment": return selection; case "FragmentSpread": { var fragmentName = selection.name.value; if (typeof fragmentMap === "function") { return fragmentMap(fragmentName); } var fragment = fragmentMap && fragmentMap[fragmentName]; invariant(fragment, 70, fragmentName); return fragment || null; } default: return null; } } function makeReference(id) { return { __ref: String(id) }; } function isReference(obj) { return Boolean(obj && typeof obj === "object" && typeof obj.__ref === "string"); } 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"; } 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 newInvariantError(79, name.value, value.kind); } } 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", "nonreactive", ]; 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; } 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; } function resultKeyNameFromField(field) { return field.alias ? field.alias.value : field.name.value; } function getTypenameFromResult(result, selectionSet, fragmentMap) { var fragments; 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 if (fragments) { fragments.push(selection); } else { fragments = [selection]; } } if (typeof result.__typename === "string") { return result.__typename; } if (fragments) { for (var _b = 0, fragments_1 = fragments; _b < fragments_1.length; _b++) { var selection = fragments_1[_b]; var typename = getTypenameFromResult(result, getFragmentFromSelection(selection, fragmentMap).selectionSet, fragmentMap); if (typeof typename === "string") { return typename; } } } } function isField(selection) { return selection.kind === "Field"; } function isInlineFragment(selection) { return selection.kind === "InlineFragment"; } function checkDocument(doc) { invariant(doc && doc.kind === "Document", 71); var operations = doc.definitions .filter(function (d) { return d.kind !== "FragmentDefinition"; }) .map(function (definition) { if (definition.kind !== "OperationDefinition") { throw newInvariantError(72, definition.kind); } return definition; }); invariant(operations.length <= 1, 73, operations.length); return doc; } function getOperationDefinition(doc) { checkDocument(doc); return doc.definitions.filter(function (definition) { return definition.kind === "OperationDefinition"; })[0]; } function getOperationName(doc) { return (doc.definitions .filter(function (definition) { return definition.kind === "OperationDefinition" && !!definition.name; }) .map(function (x) { return x.name.value; })[0] || null); } function getFragmentDefinitions(doc) { return doc.definitions.filter(function (definition) { return definition.kind === "FragmentDefinition"; }); } function getQueryDefinition(doc) { var queryDef = getOperationDefinition(doc); invariant(queryDef && queryDef.operation === "query", 74); return queryDef; } function getFragmentDefinition(doc) { invariant(doc.kind === "Document", 75); invariant(doc.definitions.length <= 1, 76); var fragmentDef = doc.definitions[0]; invariant(fragmentDef.kind === "FragmentDefinition", 77); return fragmentDef; } function getMainDefinition(queryDoc) { checkDocument(queryDoc); var fragmentDefinition; for (var _i = 0, _a = queryDoc.definitions; _i < _a.length; _i++) { var definition = _a[_i]; if (definition.kind === "OperationDefinition") { var operation = definition.operation; if (operation === "query" || operation === "mutation" || operation === "subscription") { return definition; } } if (definition.kind === "FragmentDefinition" && !fragmentDefinition) { fragmentDefinition = definition; } } if (fragmentDefinition) { return fragmentDefinition; } throw newInvariantError(78); } function getDefaultValues(definition) { var defaultValues = Object.create(null); var defs = definition && definition.variableDefinitions; if (defs && defs.length) { defs.forEach(function (def) { if (def.defaultValue) { valueToObjectRepresentation(defaultValues, def.variable.name, def.defaultValue); } }); } return defaultValues; } function identity(document) { return document; } var DocumentTransform = (function () { function DocumentTransform(transform, options) { if (options === void 0) { options = Object.create(null); } this.resultCache = canUseWeakSet ? new WeakSet() : new Set(); this.transform = transform; if (options.getCacheKey) { this.getCacheKey = options.getCacheKey; } if (options.cache !== false) { this.stableCacheKeys = new trie.Trie(canUseWeakMap, function (key) { return ({ key: key }); }); } } DocumentTransform.prototype.getCacheKey = function (document) { return [document]; }; DocumentTransform.identity = function () { return new DocumentTransform(identity, { cache: false }); }; DocumentTransform.split = function (predicate, left, right) { if (right === void 0) { right = DocumentTransform.identity(); } return new DocumentTransform(function (document) { var documentTransform = predicate(document) ? left : right; return documentTransform.transformDocument(document); }, { cache: false }); }; DocumentTransform.prototype.transformDocument = function (document) { if (this.resultCache.has(document)) { return document; } var cacheEntry = this.getStableCacheEntry(document); if (cacheEntry && cacheEntry.value) { return cacheEntry.value; } checkDocument(document); var transformedDocument = this.transform(document); this.resultCache.add(transformedDocument); if (cacheEntry) { cacheEntry.value = transformedDocument; } return transformedDocument; }; DocumentTransform.prototype.concat = function (otherTransform) { var _this = this; return new DocumentTransform(function (document) { return otherTransform.transformDocument(_this.transformDocument(document)); }, { cache: false }); }; DocumentTransform.prototype.getStableCacheEntry = function (document) { if (!this.stableCacheKeys) return; var cacheKeys = this.getCacheKey(document); if (cacheKeys) { invariant(Array.isArray(cacheKeys), 63); return this.stableCacheKeys.lookupArray(cacheKeys); } }; return DocumentTransform; }()); var printCache = canUseWeakMap ? new WeakMap() : undefined; var print = function (ast) { var result; result = printCache === null || printCache === void 0 ? void 0 : printCache.get(ast); if (!result) { result = graphql.print(ast); printCache === null || printCache === void 0 ? void 0 : printCache.set(ast, result); } return result; }; var isArray = Array.isArray; function isNonEmptyArray(value) { return Array.isArray(value) && value.length > 0; } var TYPENAME_FIELD = { kind: graphql.Kind.FIELD, name: { kind: graphql.Kind.NAME, value: "__typename", }, }; function isEmpty(op, fragmentMap) { return (!op || op.selectionSet.selections.every(function (selection) { return selection.kind === graphql.Kind.FRAGMENT_SPREAD && isEmpty(fragmentMap[selection.name.value], fragmentMap); })); } function nullIfDocIsEmpty(doc) { return isEmpty(getOperationDefinition(doc) || getFragmentDefinition(doc), createFragmentMap(getFragmentDefinitions(doc))) ? null : doc; } function getDirectiveMatcher(configs) { var names = new Map(); var tests = new Map(); configs.forEach(function (directive) { if (directive) { if (directive.name) { names.set(directive.name, directive); } else if (directive.test) { tests.set(directive.test, directive); } } }); return function (directive) { var config = names.get(directive.name.value); if (!config && tests.size) { tests.forEach(function (testConfig, test) { if (test(directive)) { config = testConfig; } }); } return config; }; } function makeInUseGetterFunction(defaultKey) { var map = new Map(); return function inUseGetterFunction(key) { if (key === void 0) { key = defaultKey; } var inUse = map.get(key); if (!inUse) { map.set(key, (inUse = { variables: new Set(), fragmentSpreads: new Set(), })); } return inUse; }; } function removeDirectivesFromDocument(directives, doc) { checkDocument(doc); var getInUseByOperationName = makeInUseGetterFunction(""); var getInUseByFragmentName = makeInUseGetterFunction(""); var getInUse = function (ancestors) { for (var p = 0, ancestor = void 0; p < ancestors.length && (ancestor = ancestors[p]); ++p) { if (isArray(ancestor)) continue; if (ancestor.kind === graphql.Kind.OPERATION_DEFINITION) { return getInUseByOperationName(ancestor.name && ancestor.name.value); } if (ancestor.kind === graphql.Kind.FRAGMENT_DEFINITION) { return getInUseByFragmentName(ancestor.name.value); } } globalThis.__DEV__ !== false && invariant.error(80); return null; }; var operationCount = 0; for (var i = doc.definitions.length - 1; i >= 0; --i) { if (doc.definitions[i].kind === graphql.Kind.OPERATION_DEFINITION) { ++operationCount; } } var directiveMatcher = getDirectiveMatcher(directives); var shouldRemoveField = function (nodeDirectives) { return isNonEmptyArray(nodeDirectives) && nodeDirectives .map(directiveMatcher) .some(function (config) { return config && config.remove; }); }; var originalFragmentDefsByPath = new Map(); var firstVisitMadeChanges = false; var fieldOrInlineFragmentVisitor = { enter: function (node) { if (shouldRemoveField(node.directives)) { firstVisitMadeChanges = true; return null; } }, }; var docWithoutDirectiveSubtrees = graphql.visit(doc, { Field: fieldOrInlineFragmentVisitor, InlineFragment: fieldOrInlineFragmentVisitor, VariableDefinition: { enter: function () { return false; }, }, Variable: { enter: function (node, _key, _parent, _path, ancestors) { var inUse = getInUse(ancestors); if (inUse) { inUse.variables.add(node.name.value); } }, }, FragmentSpread: { enter: function (node, _key, _parent, _path, ancestors) { if (shouldRemoveField(node.directives)) { firstVisitMadeChanges = true; return null; } var inUse = getInUse(ancestors); if (inUse) { inUse.fragmentSpreads.add(node.name.value); } }, }, FragmentDefinition: { enter: function (node, _key, _parent, path) { originalFragmentDefsByPath.set(JSON.stringify(path), node); }, leave: function (node, _key, _parent, path) { var originalNode = originalFragmentDefsByPath.get(JSON.stringify(path)); if (node === originalNode) { return node; } if (operationCount > 0 && node.selectionSet.selections.every(function (selection) { return selection.kind === graphql.Kind.FIELD && selection.name.value === "__typename"; })) { getInUseByFragmentName(node.name.value).removed = true; firstVisitMadeChanges = true; return null; } }, }, Directive: { leave: function (node) { if (directiveMatcher(node)) { firstVisitMadeChanges = true; return null; } }, }, }); if (!firstVisitMadeChanges) { return doc; } var populateTransitiveVars = function (inUse) { if (!inUse.transitiveVars) { inUse.transitiveVars = new Set(inUse.variables); if (!inUse.removed) { inUse.fragmentSpreads.forEach(function (childFragmentName) { populateTransitiveVars(getInUseByFragmentName(childFragmentName)).transitiveVars.forEach(function (varName) { inUse.transitiveVars.add(varName); }); }); } } return inUse; }; var allFragmentNamesUsed = new Set(); docWithoutDirectiveSubtrees.definitions.forEach(function (def) { if (def.kind === graphql.Kind.OPERATION_DEFINITION) { populateTransitiveVars(getInUseByOperationName(def.name && def.name.value)).fragmentSpreads.forEach(function (childFragmentName) { allFragmentNamesUsed.add(childFragmentName); }); } else if (def.kind === graphql.Kind.FRAGMENT_DEFINITION && operationCount === 0 && !getInUseByFragmentName(def.name.value).removed) { allFragmentNamesUsed.add(def.name.value); } }); allFragmentNamesUsed.forEach(function (fragmentName) { populateTransitiveVars(getInUseByFragmentName(fragmentName)).fragmentSpreads.forEach(function (childFragmentName) { allFragmentNamesUsed.add(childFragmentName); }); }); var fragmentWillBeRemoved = function (fragmentName) { return !!((!allFragmentNamesUsed.has(fragmentName) || getInUseByFragmentName(fragmentName).removed)); }; var enterVisitor = { enter: function (node) { if (fragmentWillBeRemoved(node.name.value)) { return null; } }, }; return nullIfDocIsEmpty(graphql.visit(docWithoutDirectiveSubtrees, { FragmentSpread: enterVisitor, FragmentDefinition: enterVisitor, OperationDefinition: { leave: function (node) { if (node.variableDefinitions) { var usedVariableNames_1 = populateTransitiveVars(getInUseByOperationName(node.name && node.name.value)).transitiveVars; if (usedVariableNames_1.size < node.variableDefinitions.length) { return tslib.__assign(tslib.__assign({}, node), { variableDefinitions: node.variableDefinitions.filter(function (varDef) { return usedVariableNames_1.has(varDef.variable.name.value); }) }); } } }, }, })); } var addTypenameToDocument = Object.assign(function (doc) { return graphql.visit(doc, { SelectionSet: { enter: function (node, _key, parent) { if (parent && parent.kind === graphql.Kind.OPERATION_DEFINITION) { return; } var selections = node.selections; if (!selections) { return; } var skip = selections.some(function (selection) { return (isField(selection) && (selection.name.value === "__typename" || selection.name.value.lastIndexOf("__", 0) === 0)); }); if (skip) { return; } var field = parent; if (isField(field) && field.directives && field.directives.some(function (d) { return d.name.value === "export"; })) { return; } return tslib.__assign(tslib.__assign({}, node), { selections: tslib.__spreadArray(tslib.__spreadArray([], selections, true), [TYPENAME_FIELD], false) }); }, }, }); }, { added: function (field) { return field === TYPENAME_FIELD; }, }); function buildQueryFromSelectionSet(document) { var definition = getMainDefinition(document); var definitionOperation = definition.operation; if (definitionOperation === "query") { return document; } var modifiedDoc = graphql.visit(document, { OperationDefinition: { enter: function (node) { return tslib.__assign(tslib.__assign({}, node), { operation: "query" }); }, }, }); return modifiedDoc; } function removeClientSetsFromDocument(document) { checkDocument(document); var modifiedDoc = removeDirectivesFromDocument([ { test: function (directive) { return directive.name.value === "client"; }, remove: true, }, ], document); return modifiedDoc; } var hasOwnProperty$4 = Object.prototype.hasOwnProperty; function mergeDeep() { var sources = []; for (var _i = 0; _i < arguments.length; _i++) { sources[_i] = arguments[_i]; } return mergeDeepArray(sources); } function mergeDeepArray(sources) { var target = sources[0] || {}; var count = sources.length; if (count > 1) { var merger = new DeepMerger(); for (var i = 1; i < count; ++i) { target = merger.merge(target, sources[i]); } } return target; } var defaultReconciler = function (target, source, property) { return this.merge(target[property], source[property]); }; var DeepMerger = (function () { function DeepMerger(reconciler) { if (reconciler === void 0) { reconciler = defaultReconciler; } this.reconciler = reconciler; this.isObject = isNonNullObject; this.pastCopies = new Set(); } DeepMerger.prototype.merge = function (target, source) { var _this = this; var context = []; for (var _i = 2; _i < arguments.length; _i++) { context[_i - 2] = arguments[_i]; } if (isNonNullObject(source) && isNonNullObject(target)) { Object.keys(source).forEach(function (sourceKey) { if (hasOwnProperty$4.call(target, sourceKey)) { var targetValue = target[sourceKey]; if (source[sourceKey] !== targetValue) { var result = _this.reconciler.apply(_this, tslib.__spreadArray([target, source, sourceKey], context, false)); if (result !== targetValue) { target = _this.shallowCopyForMerge(target); target[sourceKey] = result; } } } else { target = _this.shallowCopyForMerge(target); target[sourceKey] = source[sourceKey]; } }); return target; } return source; }; DeepMerger.prototype.shallowCopyForMerge = function (value) { if (isNonNullObject(value)) { if (!this.pastCopies.has(value)) { if (Array.isArray(value)) { value = value.slice(0); } else { value = tslib.__assign({ __proto__: Object.getPrototypeOf(value) }, value); } this.pastCopies.add(value); } } return value; }; return DeepMerger; }()); function createFulfilledPromise(value) { var promise = Promise.resolve(value); promise.status = "fulfilled"; promise.value = value; return promise; } function createRejectedPromise(reason) { var promise = Promise.reject(reason); promise.catch(function () { }); promise.status = "rejected"; promise.reason = reason; return promise; } function isStatefulPromise(promise) { return "status" in promise; } function wrapPromiseWithState(promise) { if (isStatefulPromise(promise)) { return promise; } var pendingPromise = promise; pendingPromise.status = "pending"; pendingPromise.then(function (value) { if (pendingPromise.status === "pending") { var fulfilledPromise = pendingPromise; fulfilledPromise.status = "fulfilled"; fulfilledPromise.value = value; } }, function (reason) { if (pendingPromise.status === "pending") { var rejectedPromise = pendingPromise; rejectedPromise.status = "rejected"; rejectedPromise.reason = reason; } }); return promise; } var toString = Object.prototype.toString; function cloneDeep(value) { return cloneDeepHelper(value); } function cloneDeepHelper(val, seen) { switch (toString.call(val)) { case "[object Array]": { seen = seen || new Map(); if (seen.has(val)) return seen.get(val); var copy_1 = val.slice(0); seen.set(val, copy_1); copy_1.forEach(function (child, i) { copy_1[i] = cloneDeepHelper(child, seen); }); return copy_1; } case "[object Object]": { seen = seen || new Map(); if (seen.has(val)) return seen.get(val); var copy_2 = Object.create(Object.getPrototypeOf(val)); seen.set(val, copy_2); Object.keys(val).forEach(function (key) { copy_2[key] = cloneDeepHelper(val[key], seen); }); return copy_2; } default: return val; } } function deepFreeze(value) { var workSet = new Set([value]); workSet.forEach(function (obj) { if (isNonNullObject(obj) && shallowFreeze(obj) === obj) { Object.getOwnPropertyNames(obj).forEach(function (name) { if (isNonNullObject(obj[name])) workSet.add(obj[name]); }); } }); return value; } function shallowFreeze(obj) { if (globalThis.__DEV__ !== false && !Object.isFrozen(obj)) { try { Object.freeze(obj); } catch (e) { if (e instanceof TypeError) return null; throw e; } } return obj; } function maybeDeepFreeze(obj) { if (globalThis.__DEV__ !== false) { deepFreeze(obj); } return obj; } function iterateObserversSafely(observers, method, argument) { var observersWithMethod = []; observers.forEach(function (obs) { return obs[method] && observersWithMethod.push(obs); }); observersWithMethod.forEach(function (obs) { return obs[method](argument); }); } function asyncMap(observable, mapFn, catchFn) { return new zenObservableTs.Observable(function (observer) { var next = observer.next, error = observer.error, complete = observer.complete; var activeCallbackCount = 0; var completed = false; var promiseQueue = { then: function (callback) { return new Promise(function (resolve) { return resolve(callback()); }); }, }; function makeCallback(examiner, delegate) { if (examiner) { return function (arg) { ++activeCallbackCount; var both = function () { return examiner(arg); }; promiseQueue = promiseQueue .then(both, both) .then(function (result) { --activeCallbackCount; next && next.call(observer, result); if (completed) { handler.complete(); } }, function (error) { --activeCallbackCount; throw error; }) .catch(function (caught) { error && error.call(observer, caught); }); }; } else { return function (arg) { return delegate && delegate.call(observer, arg); }; } } var handler = { next: makeCallback(mapFn, next), error: makeCallback(catchFn, error), complete: function () { completed = true; if (!activeCallbackCount) { complete && complete.call(observer); } }, }; var sub = observable.subscribe(handler); return function () { return sub.unsubscribe(); }; }); } function fixObservableSubclass(subclass) { function set(key) { Object.defineProperty(subclass, key, { value: zenObservableTs.Observable }); } if (canUseSymbol && Symbol.species) { set(Symbol.species); } set("@@species"); return subclass; } function isPromiseLike(value) { return value && typeof value.then === "function"; } var Concast = (function (_super) { tslib.__extends(Concast, _super); function Concast(sources) { var _this = _super.call(this, function (observer) { _this.addObserver(observer); return function () { return _this.removeObserver(observer); }; }) || this; _this.observers = new Set(); _this.promise = new Promise(function (resolve, reject) { _this.resolve = resolve; _this.reject = reject; }); _this.handlers = { next: function (result) { if (_this.sub !== null) { _this.latest = ["next", result]; _this.notify("next", result); iterateObserversSafely(_this.observers, "next", result); } }, error: function (error) { var sub = _this.sub; if (sub !== null) { if (sub) setTimeout(function () { return sub.unsubscribe(); }); _this.sub = null; _this.latest = ["error", error]; _this.reject(error); _this.notify("error", error); iterateObserversSafely(_this.observers, "error", error); } }, complete: function () { var _a = _this, sub = _a.sub, _b = _a.sources, sources = _b === void 0 ? [] : _b; if (sub !== null) { var value = sources.shift(); if (!value) { if (sub) setTimeout(function () { return sub.unsubscribe(); }); _this.sub = null; if (_this.latest && _this.latest[0] === "next") { _this.resolve(_this.latest[1]); } else { _this.resolve(); } _this.notify("complete"); iterateObserversSafely(_this.observers, "complete"); } else if (isPromiseLike(value)) { value.then(function (obs) { return (_this.sub = obs.subscribe(_this.handlers)); }); } else { _this.sub = value.subscribe(_this.handlers); } } }, }; _this.nextResultListeners = new Set(); _this.cancel = function (reason) { _this.reject(reason); _this.sources = []; _this.handlers.complete(); }; _this.promise.catch(function (_) { }); if (typeof sources === "function") { sources = [new zenObservableTs.Observable(sources)]; } if (isPromiseLike(sources)) { sources.then(function (iterable) { return _this.start(iterable); }, _this.handlers.error); } else { _this.start(sources); } return _this; } Concast.prototype.start = function (sources) { if (this.sub !== void 0) return; this.sources = Array.from(sources); this.handlers.complete(); }; Concast.prototype.deliverLastMessage = function (observer) { if (this.latest) { var nextOrError = this.latest[0]; var method = observer[nextOrError]; if (method) { method.call(observer, this.latest[1]); } if (this.sub === null && nextOrError === "next" && observer.complete) { observer.complete(); } } }; Concast.prototype.addObserver = function (observer) { if (!this.observers.has(observer)) { this.deliverLastMessage(observer); this.observers.add(observer); } }; Concast.prototype.removeObserver = function (observer) { if (this.observers.delete(observer) && this.observers.size < 1) { this.handlers.complete(); } }; Concast.prototype.notify = function (method, arg) { var nextResultListeners = this.nextResultListeners; if (nextResultListeners.size) { this.nextResultListeners = new Set(); nextResultListeners.forEach(function (listener) { return listener(method, arg); }); } }; Concast.prototype.beforeNext = function (callback) { var called = false; this.nextResultListeners.add(function (method, arg) { if (!called) { called = true; callback(method, arg); } }); }; return Concast; }(zenObservableTs.Observable)); fixObservableSubclass(Concast); function isExecutionPatchIncrementalResult(value) { return "incremental" in value; } function isExecutionPatchInitialResult(value) { return "hasNext" in value && "data" in value; } function isExecutionPatchResult(value) { return (isExecutionPatchIncrementalResult(value) || isExecutionPatchInitialResult(value)); } function isApolloPayloadResult(value) { return isNonNullObject(value) && "payload" in value; } function mergeIncrementalData(prevResult, result) { var mergedData = prevResult; var merger = new DeepMerger(); if (isExecutionPatchIncrementalResult(result) && isNonEmptyArray(result.incremental)) { result.incremental.forEach(function (_a) { var data = _a.data, path = _a.path; for (var i = path.length - 1; i >= 0; --i) { var key = path[i]; var isNumericKey = !isNaN(+key); var parent_1 = isNumericKey ? [] : {}; parent_1[key] = data; data = parent_1; } mergedData = merger.merge(mergedData, data); }); } return mergedData; } function graphQLResultHasError(result) { var errors = getGraphQLErrorsFromResult(result); return isNonEmptyArray(errors); } function getGraphQLErrorsFromResult(result) { var graphQLErrors = isNonEmptyArray(result.errors) ? result.errors.slice(0) : []; if (isExecutionPatchIncrementalResult(result) && isNonEmptyArray(result.incremental)) { result.incremental.forEach(function (incrementalResult) { if (incrementalResult.errors) { graphQLErrors.push.apply(graphQLErrors, incrementalResult.errors); } }); } return graphQLErrors; } function compact() { var objects = []; for (var _i = 0; _i < arguments.length; _i++) { objects[_i] = arguments[_i]; } var result = Object.create(null); objects.forEach(function (obj) { if (!obj) return; Object.keys(obj).forEach(function (key) { var value = obj[key]; if (value !== void 0) { result[key] = value; } }); }); return result; } function mergeOptions(defaults, options) { return compact(defaults, options, options.variables && { variables: compact(tslib.__assign(tslib.__assign({}, (defaults && defaults.variables)), options.variables)), }); } function fromError(errorValue) { return new zenObservableTs.Observable(function (observer) { observer.error(errorValue); }); } function toPromise(observable) { var completed = false; return new Promise(function (resolve, reject) { observable.subscribe({ next: function (data) { if (completed) { globalThis.__DEV__ !== false && invariant.warn(40); } else { completed = true; resolve(data); } }, error: reject, }); }); } function fromPromise(promise) { return new zenObservableTs.Observable(function (observer) { promise .then(function (value) { observer.next(value); observer.complete(); }) .catch(observer.error.bind(observer)); }); } var throwServerError = function (response, result, message) { var error = new Error(message); error.name = "ServerError"; error.response = response; error.statusCode = response.status; error.result = result; throw error; }; function validateOperation(operation) { var OPERATION_FIELDS = [ "query", "operationName", "variables", "extensions", "context", ]; for (var _i = 0, _a = Object.keys(operation); _i < _a.length; _i++) { var key = _a[_i]; if (OPERATION_FIELDS.indexOf(key) < 0) { throw newInvariantError(41, key); } } return operation; } function createOperation(starting, operation) { var context = tslib.__assign({}, starting); var setContext = function (next) { if (typeof next === "function") { context = tslib.__assign(tslib.__assign({}, context), next(context)); } else { context = tslib.__assign(tslib.__assign({}, context), next); } }; var getContext = function () { return (tslib.__assign({}, context)); }; Object.defineProperty(operation, "setContext", { enumerable: false, value: setContext, }); Object.defineProperty(operation, "getContext", { enumerable: false, value: getContext, }); return operation; } function transformOperation(operation) { var transformedOperation = { variables: operation.variables || {}, extensions: operation.extensions || {}, operationName: operation.operationName, query: operation.query, }; if (!transformedOperation.operationName) { transformedOperation.operation