UNPKG

apollo-cache-inmemory

Version:

Core abstract of Caching layer for Apollo Client

96 lines 4.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var apollo_utilities_1 = require("apollo-utilities"); var ts_invariant_1 = require("ts-invariant"); var haveWarned = false; function shouldWarn() { var answer = !haveWarned; if (!apollo_utilities_1.isTest()) { haveWarned = true; } return answer; } var HeuristicFragmentMatcher = (function () { function HeuristicFragmentMatcher() { } HeuristicFragmentMatcher.prototype.ensureReady = function () { return Promise.resolve(); }; HeuristicFragmentMatcher.prototype.canBypassInit = function () { return true; }; HeuristicFragmentMatcher.prototype.match = function (idValue, typeCondition, context) { var obj = context.store.get(idValue.id); var isRootQuery = idValue.id === 'ROOT_QUERY'; if (!obj) { return isRootQuery; } var _a = obj.__typename, __typename = _a === void 0 ? isRootQuery && 'Query' : _a; if (!__typename) { if (shouldWarn()) { ts_invariant_1.invariant.warn("You're using fragments in your queries, but either don't have the addTypename:\n true option set in Apollo Client, or you are trying to write a fragment to the store without the __typename.\n Please turn on the addTypename option and include __typename when writing fragments so that Apollo Client\n can accurately match fragments."); ts_invariant_1.invariant.warn('Could not find __typename on Fragment ', typeCondition, obj); ts_invariant_1.invariant.warn("DEPRECATION WARNING: using fragments without __typename is unsupported behavior " + "and will be removed in future versions of Apollo client. You should fix this and set addTypename to true now."); } return 'heuristic'; } if (__typename === typeCondition) { return true; } if (shouldWarn()) { ts_invariant_1.invariant.error('You are using the simple (heuristic) fragment matcher, but your ' + 'queries contain union or interface types. Apollo Client will not be ' + 'able to accurately map fragments. To make this error go away, use ' + 'the `IntrospectionFragmentMatcher` as described in the docs: ' + 'https://www.apollographql.com/docs/react/advanced/fragments.html#fragment-matcher'); } return 'heuristic'; }; return HeuristicFragmentMatcher; }()); exports.HeuristicFragmentMatcher = HeuristicFragmentMatcher; var IntrospectionFragmentMatcher = (function () { function IntrospectionFragmentMatcher(options) { if (options && options.introspectionQueryResultData) { this.possibleTypesMap = this.parseIntrospectionResult(options.introspectionQueryResultData); this.isReady = true; } else { this.isReady = false; } this.match = this.match.bind(this); } IntrospectionFragmentMatcher.prototype.match = function (idValue, typeCondition, context) { ts_invariant_1.invariant(this.isReady, 'FragmentMatcher.match() was called before FragmentMatcher.init()'); var obj = context.store.get(idValue.id); var isRootQuery = idValue.id === 'ROOT_QUERY'; if (!obj) { return isRootQuery; } var _a = obj.__typename, __typename = _a === void 0 ? isRootQuery && 'Query' : _a; ts_invariant_1.invariant(__typename, "Cannot match fragment because __typename property is missing: " + JSON.stringify(obj)); if (__typename === typeCondition) { return true; } var implementingTypes = this.possibleTypesMap[typeCondition]; if (__typename && implementingTypes && implementingTypes.indexOf(__typename) > -1) { return true; } return false; }; IntrospectionFragmentMatcher.prototype.parseIntrospectionResult = function (introspectionResultData) { var typeMap = {}; introspectionResultData.__schema.types.forEach(function (type) { if (type.kind === 'UNION' || type.kind === 'INTERFACE') { typeMap[type.name] = type.possibleTypes.map(function (implementingType) { return implementingType.name; }); } }); return typeMap; }; return IntrospectionFragmentMatcher; }()); exports.IntrospectionFragmentMatcher = IntrospectionFragmentMatcher; //# sourceMappingURL=fragmentMatcher.js.map