@apollo/client 3.3.7 → 3.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -0
  3. package/apollo-client.cjs.js +66 -52
  4. package/apollo-client.cjs.js.map +1 -1
  5. package/apollo-client.cjs.min.js +1 -1
  6. package/cache/cache.cjs.js +27 -24
  7. package/cache/cache.cjs.js.map +1 -1
  8. package/cache/inmemory/inMemoryCache.d.ts.map +1 -1
  9. package/cache/inmemory/inMemoryCache.js +4 -1
  10. package/cache/inmemory/inMemoryCache.js.map +1 -1
  11. package/cache/inmemory/reactiveVars.d.ts +1 -0
  12. package/cache/inmemory/reactiveVars.d.ts.map +1 -1
  13. package/cache/inmemory/reactiveVars.js +25 -25
  14. package/cache/inmemory/reactiveVars.js.map +1 -1
  15. package/core/ObservableQuery.d.ts.map +1 -1
  16. package/core/ObservableQuery.js +2 -2
  17. package/core/ObservableQuery.js.map +1 -1
  18. package/core/QueryInfo.d.ts +1 -0
  19. package/core/QueryInfo.d.ts.map +1 -1
  20. package/core/QueryInfo.js +8 -3
  21. package/core/QueryInfo.js.map +1 -1
  22. package/core/core.cjs.js +10 -5
  23. package/core/core.cjs.js.map +1 -1
  24. package/core/index.d.ts +1 -1
  25. package/core/index.d.ts.map +1 -1
  26. package/invariantErrorCodes.js +1 -1
  27. package/package.json +9 -10
  28. package/react/data/MutationData.d.ts +1 -1
  29. package/react/data/MutationData.d.ts.map +1 -1
  30. package/react/data/MutationData.js.map +1 -1
  31. package/react/data/QueryData.d.ts +2 -2
  32. package/react/data/QueryData.d.ts.map +1 -1
  33. package/react/data/QueryData.js.map +1 -1
  34. package/react/hooks/hooks.cjs.js +14 -18
  35. package/react/hooks/hooks.cjs.js.map +1 -1
  36. package/react/hooks/useReactiveVar.d.ts.map +1 -1
  37. package/react/hooks/useReactiveVar.js +3 -0
  38. package/react/hooks/useReactiveVar.js.map +1 -1
  39. package/react/hooks/utils/useBaseQuery.d.ts.map +1 -1
  40. package/react/hooks/utils/useBaseQuery.js +11 -18
  41. package/react/hooks/utils/useBaseQuery.js.map +1 -1
  42. package/utilities/graphql/transform.js.map +1 -1
  43. package/utilities/index.d.ts +1 -0
  44. package/utilities/index.d.ts.map +1 -1
  45. package/utilities/index.js +1 -0
  46. package/utilities/index.js.map +1 -1
  47. package/utilities/observables/Concast.d.ts +2 -2
  48. package/utilities/observables/Concast.d.ts.map +1 -1
  49. package/utilities/observables/Concast.js +5 -5
  50. package/utilities/observables/Concast.js.map +1 -1
  51. package/utilities/observables/Observable.d.ts +1 -0
  52. package/utilities/observables/Observable.d.ts.map +1 -1
  53. package/utilities/observables/Observable.js.map +1 -1
  54. package/utilities/observables/subclassing.d.ts +4 -0
  55. package/utilities/observables/subclassing.d.ts.map +1 -0
  56. package/utilities/observables/subclassing.js +12 -0
  57. package/utilities/observables/subclassing.js.map +1 -0
  58. package/utilities/utilities.cjs.js +16 -5
  59. package/utilities/utilities.cjs.js.map +1 -1
  60. package/version.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"inMemoryCache.d.ts","sourceRoot":"","sources":["../../../src/cache/inmemory/inMemoryCache.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAEL,WAAW,EACX,SAAS,EAEV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,OAAO,EAAe,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAEL,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AASD,qBAAa,aAAc,SAAQ,WAAW,CAAC,qBAAqB,CAAC;IACnE,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,cAAc,CAAc;IAEpC,SAAS,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACtC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,WAAW,CAAU;IAE7B,OAAO,CAAC,qBAAqB,CAAyC;IACtE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAc;IAKjC,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IAEnC,SAAgB,OAAO,iBAAW;gBAEtB,MAAM,GAAE,mBAAwB;IAoCrC,OAAO,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK1C,OAAO,CAAC,UAAU,GAAE,OAAe,GAAG,qBAAqB;IAI3D,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI;IAiC7C,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,GAAG,SAAS,GAAG,SAAS;IAiBzD,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO;IA0B7C,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAWxD,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,IAAI;IAqB5C,EAAE;IAWF,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM;IASpD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM;IAUrD,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;IAK7D,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,GAAG,OAAO;IAuB3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAQ1C,OAAO,CAAC,OAAO,CAAK;IAEb,kBAAkB,CACvB,WAAW,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,EAC1C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IA0CvB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY;IAgB9D,SAAS,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE,OAAO;IAM9D,OAAO,CAAC,mBAAmB,CAyBxB;IAEH,OAAO,CAAC,QAAQ,CAA6B;IAQ7C,OAAO,CAAC,cAAc;CAiCvB"}
1
+ {"version":3,"file":"inMemoryCache.d.ts","sourceRoot":"","sources":["../../../src/cache/inmemory/inMemoryCache.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAEL,WAAW,EACX,SAAS,EAEV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,OAAO,EAA4B,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAEL,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AASD,qBAAa,aAAc,SAAQ,WAAW,CAAC,qBAAqB,CAAC;IACnE,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,cAAc,CAAc;IAEpC,SAAS,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACtC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,WAAW,CAAU;IAE7B,OAAO,CAAC,qBAAqB,CAAyC;IACtE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAc;IAKjC,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IAEnC,SAAgB,OAAO,iBAAW;gBAEtB,MAAM,GAAE,mBAAwB;IAoCrC,OAAO,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK1C,OAAO,CAAC,UAAU,GAAE,OAAe,GAAG,qBAAqB;IAI3D,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI;IAiC7C,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,GAAG,SAAS,GAAG,SAAS;IAiBzD,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO;IA0B7C,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAWxD,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,IAAI;IAkC5C,EAAE;IAWF,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM;IASpD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM;IAUrD,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;IAK7D,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,GAAG,OAAO;IAuB3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAQ1C,OAAO,CAAC,OAAO,CAAK;IAEb,kBAAkB,CACvB,WAAW,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,EAC1C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IA0CvB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY;IAgB9D,SAAS,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE,OAAO;IAM9D,OAAO,CAAC,mBAAmB,CAyBxB;IAEH,OAAO,CAAC,QAAQ,CAA6B;IAQ7C,OAAO,CAAC,cAAc;CAiCvB"}
@@ -7,7 +7,7 @@ import { addTypenameToDocument, isReference, } from "../../utilities/index.js";
7
7
  import { StoreReader } from "./readFromStore.js";
8
8
  import { StoreWriter } from "./writeToStore.js";
9
9
  import { EntityStore, supportsResultCaching } from "./entityStore.js";
10
- import { makeVar, forgetCache } from "./reactiveVars.js";
10
+ import { makeVar, forgetCache, recallCache } from "./reactiveVars.js";
11
11
  import { defaultDataIdFromObject, Policies, } from "./policies.js";
12
12
  import { hasOwn } from "./helpers.js";
13
13
  var defaultConfig = {
@@ -130,6 +130,9 @@ var InMemoryCache = (function (_super) {
130
130
  };
131
131
  InMemoryCache.prototype.watch = function (watch) {
132
132
  var _this = this;
133
+ if (!this.watches.size) {
134
+ recallCache(this);
135
+ }
133
136
  this.watches.add(watch);
134
137
  if (watch.immediate) {
135
138
  this.maybeBroadcastWatch(watch);
@@ -1 +1 @@
1
- {"version":3,"file":"inMemoryCache.js","sourceRoot":"","sources":["../../../src/cache/inmemory/inMemoryCache.ts"],"names":[],"mappings":"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","sourcesContent":["// Make builtins like Map and Set safe to use with non-extensible objects.\nimport './fixPolyfills';\n\nimport { DocumentNode } from 'graphql';\nimport { dep, wrap } from 'optimism';\n\nimport { ApolloCache } from '../core/cache';\nimport { Cache } from '../core/types/Cache';\nimport { MissingFieldError } from '../core/types/common';\nimport {\n addTypenameToDocument,\n StoreObject,\n Reference,\n isReference,\n} from '../../utilities';\nimport {\n ApolloReducerConfig,\n NormalizedCacheObject,\n} from './types';\nimport { StoreReader } from './readFromStore';\nimport { StoreWriter } from './writeToStore';\nimport { EntityStore, supportsResultCaching } from './entityStore';\nimport { makeVar, forgetCache } from './reactiveVars';\nimport {\n defaultDataIdFromObject,\n PossibleTypesMap,\n Policies,\n TypePolicies,\n} from './policies';\nimport { hasOwn } from './helpers';\n\nexport interface InMemoryCacheConfig extends ApolloReducerConfig {\n resultCaching?: boolean;\n possibleTypes?: PossibleTypesMap;\n typePolicies?: TypePolicies;\n}\n\nconst defaultConfig: InMemoryCacheConfig = {\n dataIdFromObject: defaultDataIdFromObject,\n addTypename: true,\n resultCaching: true,\n typePolicies: {},\n};\n\nexport class InMemoryCache extends ApolloCache<NormalizedCacheObject> {\n private data: EntityStore;\n private optimisticData: EntityStore;\n\n protected config: InMemoryCacheConfig;\n private watches = new Set<Cache.WatchOptions>();\n private addTypename: boolean;\n\n private typenameDocumentCache = new Map<DocumentNode, DocumentNode>();\n private storeReader: StoreReader;\n private storeWriter: StoreWriter;\n\n // Dynamically imported code can augment existing typePolicies or\n // possibleTypes by calling cache.policies.addTypePolicies or\n // cache.policies.addPossibletypes.\n public readonly policies: Policies;\n\n public readonly makeVar = makeVar;\n\n constructor(config: InMemoryCacheConfig = {}) {\n super();\n this.config = { ...defaultConfig, ...config };\n this.addTypename = !!this.config.addTypename;\n\n this.policies = new Policies({\n cache: this,\n dataIdFromObject: this.config.dataIdFromObject,\n possibleTypes: this.config.possibleTypes,\n typePolicies: this.config.typePolicies,\n });\n\n // Passing { resultCaching: false } in the InMemoryCache constructor options\n // will completely disable dependency tracking, which will improve memory\n // usage but worsen the performance of repeated reads.\n this.data = new EntityStore.Root({\n policies: this.policies,\n resultCaching: this.config.resultCaching,\n });\n\n // When no optimistic writes are currently active, cache.optimisticData ===\n // cache.data, so there are no additional layers on top of the actual data.\n // When an optimistic update happens, this.optimisticData will become a\n // linked list of OptimisticCacheLayer objects that terminates with the\n // original this.data cache object.\n this.optimisticData = this.data;\n\n this.storeWriter = new StoreWriter(\n this,\n this.storeReader = new StoreReader({\n cache: this,\n addTypename: this.addTypename,\n }),\n );\n }\n\n public restore(data: NormalizedCacheObject): this {\n if (data) this.data.replace(data);\n return this;\n }\n\n public extract(optimistic: boolean = false): NormalizedCacheObject {\n return (optimistic ? this.optimisticData : this.data).extract();\n }\n\n public read<T>(options: Cache.ReadOptions): T | null {\n const {\n // Since read returns data or null, without any additional metadata\n // about whether/where there might have been missing fields, the\n // default behavior cannot be returnPartialData = true (like it is\n // for the diff method), since defaulting to true would violate the\n // integrity of the T in the return type. However, partial data may\n // be useful in some cases, so returnPartialData:true may be\n // specified explicitly.\n returnPartialData = false,\n } = options;\n try {\n return this.storeReader.diffQueryAgainstStore<T>({\n store: options.optimistic ? this.optimisticData : this.data,\n query: options.query,\n variables: options.variables,\n rootId: options.rootId,\n config: this.config,\n returnPartialData,\n }).result || null;\n } catch (e) {\n if (e instanceof MissingFieldError) {\n // Swallow MissingFieldError and return null, so callers do not\n // need to worry about catching \"normal\" exceptions resulting from\n // incomplete cache data. Unexpected errors will be re-thrown. If\n // you need more information about which fields were missing, use\n // cache.diff instead, and examine diffResult.missing.\n return null;\n }\n throw e;\n }\n }\n\n public write(options: Cache.WriteOptions): Reference | undefined {\n try {\n ++this.txCount;\n return this.storeWriter.writeToStore({\n store: this.data,\n query: options.query,\n result: options.result,\n dataId: options.dataId,\n variables: options.variables,\n });\n } finally {\n if (!--this.txCount && options.broadcast !== false) {\n this.broadcastWatches();\n }\n }\n }\n\n public modify(options: Cache.ModifyOptions): boolean {\n if (hasOwn.call(options, \"id\") && !options.id) {\n // To my knowledge, TypeScript does not currently provide a way to\n // enforce that an optional property?:type must *not* be undefined\n // when present. That ability would be useful here, because we want\n // options.id to default to ROOT_QUERY only when no options.id was\n // provided. If the caller attempts to pass options.id with a\n // falsy/undefined value (perhaps because cache.identify failed), we\n // should not assume the goal was to modify the ROOT_QUERY object.\n // We could throw, but it seems natural to return false to indicate\n // that nothing was modified.\n return false;\n }\n const store = options.optimistic // Defaults to false.\n ? this.optimisticData\n : this.data;\n try {\n ++this.txCount;\n return store.modify(options.id || \"ROOT_QUERY\", options.fields);\n } finally {\n if (!--this.txCount && options.broadcast !== false) {\n this.broadcastWatches();\n }\n }\n }\n\n public diff<T>(options: Cache.DiffOptions): Cache.DiffResult<T> {\n return this.storeReader.diffQueryAgainstStore({\n store: options.optimistic ? this.optimisticData : this.data,\n rootId: options.id || \"ROOT_QUERY\",\n query: options.query,\n variables: options.variables,\n returnPartialData: options.returnPartialData,\n config: this.config,\n });\n }\n\n public watch(watch: Cache.WatchOptions): () => void {\n this.watches.add(watch);\n if (watch.immediate) {\n this.maybeBroadcastWatch(watch);\n }\n return () => {\n // Once we remove the last watch from this.watches, cache.broadcastWatches\n // no longer does anything, so we preemptively tell the reactive variable\n // system to exclude this cache from future broadcasts.\n if (this.watches.delete(watch) && !this.watches.size) {\n forgetCache(this);\n }\n this.watchDep.dirty(watch);\n // Remove this watch from the LRU cache managed by the\n // maybeBroadcastWatch OptimisticWrapperFunction, to prevent memory\n // leaks involving the closure of watch.callback.\n this.maybeBroadcastWatch.forget(watch);\n };\n }\n\n // Request garbage collection of unreachable normalized entities.\n public gc() {\n return this.optimisticData.gc();\n }\n\n // Call this method to ensure the given root ID remains in the cache after\n // garbage collection, along with its transitive child entities. Note that\n // the cache automatically retains all directly written entities. By default,\n // the retainment persists after optimistic updates are removed. Pass true\n // for the optimistic argument if you would prefer for the retainment to be\n // discarded when the top-most optimistic layer is removed. Returns the\n // resulting (non-negative) retainment count.\n public retain(rootId: string, optimistic?: boolean): number {\n return (optimistic ? this.optimisticData : this.data).retain(rootId);\n }\n\n // Call this method to undo the effect of the retain method, above. Once the\n // retainment count falls to zero, the given ID will no longer be preserved\n // during garbage collection, though it may still be preserved by other safe\n // entities that refer to it. Returns the resulting (non-negative) retainment\n // count, in case that's useful.\n public release(rootId: string, optimistic?: boolean): number {\n return (optimistic ? this.optimisticData : this.data).release(rootId);\n }\n\n // Returns the canonical ID for a given StoreObject, obeying typePolicies\n // and keyFields (and dataIdFromObject, if you still use that). At minimum,\n // the object must contain a __typename and any primary key fields required\n // to identify entities of that type. If you pass a query result object, be\n // sure that none of the primary key fields have been renamed by aliasing.\n // If you pass a Reference object, its __ref ID string will be returned.\n public identify(object: StoreObject | Reference): string | undefined {\n return isReference(object) ? object.__ref :\n this.policies.identify(object)[0];\n }\n\n public evict(options: Cache.EvictOptions): boolean {\n if (!options.id) {\n if (hasOwn.call(options, \"id\")) {\n // See comment in modify method about why we return false when\n // options.id exists but is falsy/undefined.\n return false;\n }\n options = { ...options, id: \"ROOT_QUERY\" };\n }\n try {\n // It's unlikely that the eviction will end up invoking any other\n // cache update operations while it's running, but {in,de}crementing\n // this.txCount still seems like a good idea, for uniformity with\n // the other update methods.\n ++this.txCount;\n return this.optimisticData.evict(options);\n } finally {\n if (!--this.txCount && options.broadcast !== false) {\n this.broadcastWatches();\n }\n }\n }\n\n public reset(): Promise<void> {\n this.data.clear();\n this.optimisticData = this.data;\n this.broadcastWatches();\n return Promise.resolve();\n }\n\n public removeOptimistic(idToRemove: string) {\n const newOptimisticData = this.optimisticData.removeLayer(idToRemove);\n if (newOptimisticData !== this.optimisticData) {\n this.optimisticData = newOptimisticData;\n this.broadcastWatches();\n }\n }\n\n private txCount = 0;\n\n public performTransaction(\n transaction: (cache: InMemoryCache) => any,\n optimisticId?: string | null,\n ) {\n const perform = (layer?: EntityStore) => {\n const { data, optimisticData } = this;\n ++this.txCount;\n if (layer) {\n this.data = this.optimisticData = layer;\n }\n try {\n transaction(this);\n } finally {\n --this.txCount;\n this.data = data;\n this.optimisticData = optimisticData;\n }\n };\n\n let fromOptimisticTransaction = false;\n\n if (typeof optimisticId === 'string') {\n // Note that there can be multiple layers with the same optimisticId.\n // When removeOptimistic(id) is called for that id, all matching layers\n // will be removed, and the remaining layers will be reapplied.\n this.optimisticData = this.optimisticData.addLayer(optimisticId, perform);\n fromOptimisticTransaction = true;\n } else if (optimisticId === null) {\n // Ensure both this.data and this.optimisticData refer to the root\n // (non-optimistic) layer of the cache during the transaction. Note\n // that this.data could be a Layer if we are currently executing an\n // optimistic transaction function, but otherwise will always be an\n // EntityStore.Root instance.\n perform(this.data);\n } else {\n // Otherwise, leave this.data and this.optimisticData unchanged and\n // run the transaction with broadcast batching.\n perform();\n }\n\n // This broadcast does nothing if this.txCount > 0.\n this.broadcastWatches(fromOptimisticTransaction);\n }\n\n public transformDocument(document: DocumentNode): DocumentNode {\n if (this.addTypename) {\n let result = this.typenameDocumentCache.get(document);\n if (!result) {\n result = addTypenameToDocument(document);\n this.typenameDocumentCache.set(document, result);\n // If someone calls transformDocument and then mistakenly passes the\n // result back into an API that also calls transformDocument, make sure\n // we don't keep creating new query documents.\n this.typenameDocumentCache.set(result, result);\n }\n return result;\n }\n return document;\n }\n\n protected broadcastWatches(fromOptimisticTransaction?: boolean) {\n if (!this.txCount) {\n this.watches.forEach(c => this.maybeBroadcastWatch(c, fromOptimisticTransaction));\n }\n }\n\n private maybeBroadcastWatch = wrap((\n c: Cache.WatchOptions,\n fromOptimisticTransaction?: boolean,\n ) => {\n return this.broadcastWatch.call(this, c, !!fromOptimisticTransaction);\n }, {\n makeCacheKey: (c: Cache.WatchOptions) => {\n // Return a cache key (thus enabling result caching) only if we're\n // currently using a data store that can track cache dependencies.\n const store = c.optimistic ? this.optimisticData : this.data;\n if (supportsResultCaching(store)) {\n const { optimistic, rootId, variables } = c;\n return store.makeCacheKey(\n c.query,\n // Different watches can have the same query, optimistic\n // status, rootId, and variables, but if their callbacks are\n // different, the (identical) result needs to be delivered to\n // each distinct callback. The easiest way to achieve that\n // separation is to include c.callback in the cache key for\n // maybeBroadcastWatch calls. See issue #5733.\n c.callback,\n JSON.stringify({ optimistic, rootId, variables }),\n );\n }\n }\n });\n\n private watchDep = dep<Cache.WatchOptions>();\n\n // This method is wrapped by maybeBroadcastWatch, which is called by\n // broadcastWatches, so that we compute and broadcast results only when\n // the data that would be broadcast might have changed. It would be\n // simpler to check for changes after recomputing a result but before\n // broadcasting it, but this wrapping approach allows us to skip both\n // the recomputation and the broadcast, in most cases.\n private broadcastWatch(\n c: Cache.WatchOptions,\n fromOptimisticTransaction: boolean,\n ) {\n // First, invalidate any other maybeBroadcastWatch wrapper functions\n // currently depending on this Cache.WatchOptions object (including\n // the one currently calling broadcastWatch), so they will be included\n // in the next broadcast, even if the result they receive is the same\n // as the previous result they received. This is important because we\n // are about to deliver a different result to c.callback, so any\n // previous results should have a chance to be redelivered.\n this.watchDep.dirty(c);\n\n // Next, re-depend on this.watchDep for just this invocation of\n // maybeBroadcastWatch (this is a no-op if broadcastWatch was not\n // called by maybeBroadcastWatch). This allows only the most recent\n // maybeBroadcastWatch invocation for this watcher to remain cached,\n // enabling re-broadcast of previous results even if they have not\n // changed since they were previously delivered.\n this.watchDep(c);\n\n const diff = this.diff<any>({\n query: c.query,\n variables: c.variables,\n optimistic: c.optimistic,\n });\n\n if (c.optimistic && fromOptimisticTransaction) {\n diff.fromOptimisticTransaction = true;\n }\n\n c.callback(diff);\n }\n}\n"]}
1
+ {"version":3,"file":"inMemoryCache.js","sourceRoot":"","sources":["../../../src/cache/inmemory/inMemoryCache.ts"],"names":[],"mappings":"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","sourcesContent":["// Make builtins like Map and Set safe to use with non-extensible objects.\nimport './fixPolyfills';\n\nimport { DocumentNode } from 'graphql';\nimport { dep, wrap } from 'optimism';\n\nimport { ApolloCache } from '../core/cache';\nimport { Cache } from '../core/types/Cache';\nimport { MissingFieldError } from '../core/types/common';\nimport {\n addTypenameToDocument,\n StoreObject,\n Reference,\n isReference,\n} from '../../utilities';\nimport {\n ApolloReducerConfig,\n NormalizedCacheObject,\n} from './types';\nimport { StoreReader } from './readFromStore';\nimport { StoreWriter } from './writeToStore';\nimport { EntityStore, supportsResultCaching } from './entityStore';\nimport { makeVar, forgetCache, recallCache } from './reactiveVars';\nimport {\n defaultDataIdFromObject,\n PossibleTypesMap,\n Policies,\n TypePolicies,\n} from './policies';\nimport { hasOwn } from './helpers';\n\nexport interface InMemoryCacheConfig extends ApolloReducerConfig {\n resultCaching?: boolean;\n possibleTypes?: PossibleTypesMap;\n typePolicies?: TypePolicies;\n}\n\nconst defaultConfig: InMemoryCacheConfig = {\n dataIdFromObject: defaultDataIdFromObject,\n addTypename: true,\n resultCaching: true,\n typePolicies: {},\n};\n\nexport class InMemoryCache extends ApolloCache<NormalizedCacheObject> {\n private data: EntityStore;\n private optimisticData: EntityStore;\n\n protected config: InMemoryCacheConfig;\n private watches = new Set<Cache.WatchOptions>();\n private addTypename: boolean;\n\n private typenameDocumentCache = new Map<DocumentNode, DocumentNode>();\n private storeReader: StoreReader;\n private storeWriter: StoreWriter;\n\n // Dynamically imported code can augment existing typePolicies or\n // possibleTypes by calling cache.policies.addTypePolicies or\n // cache.policies.addPossibletypes.\n public readonly policies: Policies;\n\n public readonly makeVar = makeVar;\n\n constructor(config: InMemoryCacheConfig = {}) {\n super();\n this.config = { ...defaultConfig, ...config };\n this.addTypename = !!this.config.addTypename;\n\n this.policies = new Policies({\n cache: this,\n dataIdFromObject: this.config.dataIdFromObject,\n possibleTypes: this.config.possibleTypes,\n typePolicies: this.config.typePolicies,\n });\n\n // Passing { resultCaching: false } in the InMemoryCache constructor options\n // will completely disable dependency tracking, which will improve memory\n // usage but worsen the performance of repeated reads.\n this.data = new EntityStore.Root({\n policies: this.policies,\n resultCaching: this.config.resultCaching,\n });\n\n // When no optimistic writes are currently active, cache.optimisticData ===\n // cache.data, so there are no additional layers on top of the actual data.\n // When an optimistic update happens, this.optimisticData will become a\n // linked list of OptimisticCacheLayer objects that terminates with the\n // original this.data cache object.\n this.optimisticData = this.data;\n\n this.storeWriter = new StoreWriter(\n this,\n this.storeReader = new StoreReader({\n cache: this,\n addTypename: this.addTypename,\n }),\n );\n }\n\n public restore(data: NormalizedCacheObject): this {\n if (data) this.data.replace(data);\n return this;\n }\n\n public extract(optimistic: boolean = false): NormalizedCacheObject {\n return (optimistic ? this.optimisticData : this.data).extract();\n }\n\n public read<T>(options: Cache.ReadOptions): T | null {\n const {\n // Since read returns data or null, without any additional metadata\n // about whether/where there might have been missing fields, the\n // default behavior cannot be returnPartialData = true (like it is\n // for the diff method), since defaulting to true would violate the\n // integrity of the T in the return type. However, partial data may\n // be useful in some cases, so returnPartialData:true may be\n // specified explicitly.\n returnPartialData = false,\n } = options;\n try {\n return this.storeReader.diffQueryAgainstStore<T>({\n store: options.optimistic ? this.optimisticData : this.data,\n query: options.query,\n variables: options.variables,\n rootId: options.rootId,\n config: this.config,\n returnPartialData,\n }).result || null;\n } catch (e) {\n if (e instanceof MissingFieldError) {\n // Swallow MissingFieldError and return null, so callers do not\n // need to worry about catching \"normal\" exceptions resulting from\n // incomplete cache data. Unexpected errors will be re-thrown. If\n // you need more information about which fields were missing, use\n // cache.diff instead, and examine diffResult.missing.\n return null;\n }\n throw e;\n }\n }\n\n public write(options: Cache.WriteOptions): Reference | undefined {\n try {\n ++this.txCount;\n return this.storeWriter.writeToStore({\n store: this.data,\n query: options.query,\n result: options.result,\n dataId: options.dataId,\n variables: options.variables,\n });\n } finally {\n if (!--this.txCount && options.broadcast !== false) {\n this.broadcastWatches();\n }\n }\n }\n\n public modify(options: Cache.ModifyOptions): boolean {\n if (hasOwn.call(options, \"id\") && !options.id) {\n // To my knowledge, TypeScript does not currently provide a way to\n // enforce that an optional property?:type must *not* be undefined\n // when present. That ability would be useful here, because we want\n // options.id to default to ROOT_QUERY only when no options.id was\n // provided. If the caller attempts to pass options.id with a\n // falsy/undefined value (perhaps because cache.identify failed), we\n // should not assume the goal was to modify the ROOT_QUERY object.\n // We could throw, but it seems natural to return false to indicate\n // that nothing was modified.\n return false;\n }\n const store = options.optimistic // Defaults to false.\n ? this.optimisticData\n : this.data;\n try {\n ++this.txCount;\n return store.modify(options.id || \"ROOT_QUERY\", options.fields);\n } finally {\n if (!--this.txCount && options.broadcast !== false) {\n this.broadcastWatches();\n }\n }\n }\n\n public diff<T>(options: Cache.DiffOptions): Cache.DiffResult<T> {\n return this.storeReader.diffQueryAgainstStore({\n store: options.optimistic ? this.optimisticData : this.data,\n rootId: options.id || \"ROOT_QUERY\",\n query: options.query,\n variables: options.variables,\n returnPartialData: options.returnPartialData,\n config: this.config,\n });\n }\n\n public watch(watch: Cache.WatchOptions): () => void {\n if (!this.watches.size) {\n // In case we previously called forgetCache(this) because\n // this.watches became empty (see below), reattach this cache to any\n // reactive variables on which it previously depended. It might seem\n // paradoxical that we're able to recall something we supposedly\n // forgot, but the point of calling forgetCache(this) is to silence\n // useless broadcasts while this.watches is empty, and to allow the\n // cache to be garbage collected. If, however, we manage to call\n // recallCache(this) here, this cache object must not have been\n // garbage collected yet, and should resume receiving updates from\n // reactive variables, now that it has a watcher to notify.\n recallCache(this);\n }\n this.watches.add(watch);\n if (watch.immediate) {\n this.maybeBroadcastWatch(watch);\n }\n return () => {\n // Once we remove the last watch from this.watches, cache.broadcastWatches\n // no longer does anything, so we preemptively tell the reactive variable\n // system to exclude this cache from future broadcasts.\n if (this.watches.delete(watch) && !this.watches.size) {\n forgetCache(this);\n }\n this.watchDep.dirty(watch);\n // Remove this watch from the LRU cache managed by the\n // maybeBroadcastWatch OptimisticWrapperFunction, to prevent memory\n // leaks involving the closure of watch.callback.\n this.maybeBroadcastWatch.forget(watch);\n };\n }\n\n // Request garbage collection of unreachable normalized entities.\n public gc() {\n return this.optimisticData.gc();\n }\n\n // Call this method to ensure the given root ID remains in the cache after\n // garbage collection, along with its transitive child entities. Note that\n // the cache automatically retains all directly written entities. By default,\n // the retainment persists after optimistic updates are removed. Pass true\n // for the optimistic argument if you would prefer for the retainment to be\n // discarded when the top-most optimistic layer is removed. Returns the\n // resulting (non-negative) retainment count.\n public retain(rootId: string, optimistic?: boolean): number {\n return (optimistic ? this.optimisticData : this.data).retain(rootId);\n }\n\n // Call this method to undo the effect of the retain method, above. Once the\n // retainment count falls to zero, the given ID will no longer be preserved\n // during garbage collection, though it may still be preserved by other safe\n // entities that refer to it. Returns the resulting (non-negative) retainment\n // count, in case that's useful.\n public release(rootId: string, optimistic?: boolean): number {\n return (optimistic ? this.optimisticData : this.data).release(rootId);\n }\n\n // Returns the canonical ID for a given StoreObject, obeying typePolicies\n // and keyFields (and dataIdFromObject, if you still use that). At minimum,\n // the object must contain a __typename and any primary key fields required\n // to identify entities of that type. If you pass a query result object, be\n // sure that none of the primary key fields have been renamed by aliasing.\n // If you pass a Reference object, its __ref ID string will be returned.\n public identify(object: StoreObject | Reference): string | undefined {\n return isReference(object) ? object.__ref :\n this.policies.identify(object)[0];\n }\n\n public evict(options: Cache.EvictOptions): boolean {\n if (!options.id) {\n if (hasOwn.call(options, \"id\")) {\n // See comment in modify method about why we return false when\n // options.id exists but is falsy/undefined.\n return false;\n }\n options = { ...options, id: \"ROOT_QUERY\" };\n }\n try {\n // It's unlikely that the eviction will end up invoking any other\n // cache update operations while it's running, but {in,de}crementing\n // this.txCount still seems like a good idea, for uniformity with\n // the other update methods.\n ++this.txCount;\n return this.optimisticData.evict(options);\n } finally {\n if (!--this.txCount && options.broadcast !== false) {\n this.broadcastWatches();\n }\n }\n }\n\n public reset(): Promise<void> {\n this.data.clear();\n this.optimisticData = this.data;\n this.broadcastWatches();\n return Promise.resolve();\n }\n\n public removeOptimistic(idToRemove: string) {\n const newOptimisticData = this.optimisticData.removeLayer(idToRemove);\n if (newOptimisticData !== this.optimisticData) {\n this.optimisticData = newOptimisticData;\n this.broadcastWatches();\n }\n }\n\n private txCount = 0;\n\n public performTransaction(\n transaction: (cache: InMemoryCache) => any,\n optimisticId?: string | null,\n ) {\n const perform = (layer?: EntityStore) => {\n const { data, optimisticData } = this;\n ++this.txCount;\n if (layer) {\n this.data = this.optimisticData = layer;\n }\n try {\n transaction(this);\n } finally {\n --this.txCount;\n this.data = data;\n this.optimisticData = optimisticData;\n }\n };\n\n let fromOptimisticTransaction = false;\n\n if (typeof optimisticId === 'string') {\n // Note that there can be multiple layers with the same optimisticId.\n // When removeOptimistic(id) is called for that id, all matching layers\n // will be removed, and the remaining layers will be reapplied.\n this.optimisticData = this.optimisticData.addLayer(optimisticId, perform);\n fromOptimisticTransaction = true;\n } else if (optimisticId === null) {\n // Ensure both this.data and this.optimisticData refer to the root\n // (non-optimistic) layer of the cache during the transaction. Note\n // that this.data could be a Layer if we are currently executing an\n // optimistic transaction function, but otherwise will always be an\n // EntityStore.Root instance.\n perform(this.data);\n } else {\n // Otherwise, leave this.data and this.optimisticData unchanged and\n // run the transaction with broadcast batching.\n perform();\n }\n\n // This broadcast does nothing if this.txCount > 0.\n this.broadcastWatches(fromOptimisticTransaction);\n }\n\n public transformDocument(document: DocumentNode): DocumentNode {\n if (this.addTypename) {\n let result = this.typenameDocumentCache.get(document);\n if (!result) {\n result = addTypenameToDocument(document);\n this.typenameDocumentCache.set(document, result);\n // If someone calls transformDocument and then mistakenly passes the\n // result back into an API that also calls transformDocument, make sure\n // we don't keep creating new query documents.\n this.typenameDocumentCache.set(result, result);\n }\n return result;\n }\n return document;\n }\n\n protected broadcastWatches(fromOptimisticTransaction?: boolean) {\n if (!this.txCount) {\n this.watches.forEach(c => this.maybeBroadcastWatch(c, fromOptimisticTransaction));\n }\n }\n\n private maybeBroadcastWatch = wrap((\n c: Cache.WatchOptions,\n fromOptimisticTransaction?: boolean,\n ) => {\n return this.broadcastWatch.call(this, c, !!fromOptimisticTransaction);\n }, {\n makeCacheKey: (c: Cache.WatchOptions) => {\n // Return a cache key (thus enabling result caching) only if we're\n // currently using a data store that can track cache dependencies.\n const store = c.optimistic ? this.optimisticData : this.data;\n if (supportsResultCaching(store)) {\n const { optimistic, rootId, variables } = c;\n return store.makeCacheKey(\n c.query,\n // Different watches can have the same query, optimistic\n // status, rootId, and variables, but if their callbacks are\n // different, the (identical) result needs to be delivered to\n // each distinct callback. The easiest way to achieve that\n // separation is to include c.callback in the cache key for\n // maybeBroadcastWatch calls. See issue #5733.\n c.callback,\n JSON.stringify({ optimistic, rootId, variables }),\n );\n }\n }\n });\n\n private watchDep = dep<Cache.WatchOptions>();\n\n // This method is wrapped by maybeBroadcastWatch, which is called by\n // broadcastWatches, so that we compute and broadcast results only when\n // the data that would be broadcast might have changed. It would be\n // simpler to check for changes after recomputing a result but before\n // broadcasting it, but this wrapping approach allows us to skip both\n // the recomputation and the broadcast, in most cases.\n private broadcastWatch(\n c: Cache.WatchOptions,\n fromOptimisticTransaction: boolean,\n ) {\n // First, invalidate any other maybeBroadcastWatch wrapper functions\n // currently depending on this Cache.WatchOptions object (including\n // the one currently calling broadcastWatch), so they will be included\n // in the next broadcast, even if the result they receive is the same\n // as the previous result they received. This is important because we\n // are about to deliver a different result to c.callback, so any\n // previous results should have a chance to be redelivered.\n this.watchDep.dirty(c);\n\n // Next, re-depend on this.watchDep for just this invocation of\n // maybeBroadcastWatch (this is a no-op if broadcastWatch was not\n // called by maybeBroadcastWatch). This allows only the most recent\n // maybeBroadcastWatch invocation for this watcher to remain cached,\n // enabling re-broadcast of previous results even if they have not\n // changed since they were previously delivered.\n this.watchDep(c);\n\n const diff = this.diff<any>({\n query: c.query,\n variables: c.variables,\n optimistic: c.optimistic,\n });\n\n if (c.optimistic && fromOptimisticTransaction) {\n diff.fromOptimisticTransaction = true;\n }\n\n c.callback(diff);\n }\n}\n"]}
@@ -13,5 +13,6 @@ export declare const cacheSlot: {
13
13
  withValue<TResult, TArgs extends any[], TThis = any>(value: ApolloCache<any>, callback: (this: TThis, ...args: TArgs) => TResult, args?: TArgs | undefined, thisArg?: TThis | undefined): TResult;
14
14
  };
15
15
  export declare function forgetCache(cache: ApolloCache<any>): void;
16
+ export declare function recallCache(cache: ApolloCache<any>): void;
16
17
  export declare function makeVar<T>(value: T): ReactiveVar<T>;
17
18
  //# sourceMappingURL=reactiveVars.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactiveVars.d.ts","sourceRoot":"","sources":["../../../src/cache/inmemory/reactiveVars.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAClB,YAAY,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IACxD,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAC3C,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;CAC/C;AAED,oBAAY,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC;AAMpD,eAAO,MAAM,SAAS;;;;;CAA+B,CAAC;AAiBtD,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,QAMlD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAuDnD"}
1
+ {"version":3,"file":"reactiveVars.d.ts","sourceRoot":"","sources":["../../../src/cache/inmemory/reactiveVars.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAClB,YAAY,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IACxD,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAC3C,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;CAC/C;AAED,oBAAY,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC;AAIpD,eAAO,MAAM,SAAS;;;;;CAA+B,CAAC;AA+BtD,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,QAElD;AAUD,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,QAElD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAkDnD"}
@@ -1,6 +1,5 @@
1
- import { Slot } from "@wry/context";
2
1
  import { dep } from "optimism";
3
- var varDep = dep();
2
+ import { Slot } from "@wry/context";
4
3
  export var cacheSlot = new Slot();
5
4
  function consumeAndIterate(set, callback) {
6
5
  if (set.size) {
@@ -10,13 +9,22 @@ function consumeAndIterate(set, callback) {
10
9
  items_1.forEach(callback);
11
10
  }
12
11
  }
13
- var varsByCache = new WeakMap();
14
- export function forgetCache(cache) {
15
- var vars = varsByCache.get(cache);
16
- if (vars) {
17
- consumeAndIterate(vars, function (rv) { return rv.forgetCache(cache); });
18
- varsByCache.delete(cache);
12
+ var cacheInfoMap = new WeakMap();
13
+ function getCacheInfo(cache) {
14
+ var info = cacheInfoMap.get(cache);
15
+ if (!info) {
16
+ cacheInfoMap.set(cache, info = {
17
+ vars: new Set,
18
+ dep: dep(),
19
+ });
19
20
  }
21
+ return info;
22
+ }
23
+ export function forgetCache(cache) {
24
+ getCacheInfo(cache).vars.forEach(function (rv) { return rv.forgetCache(cache); });
25
+ }
26
+ export function recallCache(cache) {
27
+ getCacheInfo(cache).vars.forEach(function (rv) { return rv.attachCache(cache); });
20
28
  }
21
29
  export function makeVar(value) {
22
30
  var caches = new Set();
@@ -25,16 +33,19 @@ export function makeVar(value) {
25
33
  if (arguments.length > 0) {
26
34
  if (value !== newValue) {
27
35
  value = newValue;
28
- varDep.dirty(rv);
29
- caches.forEach(broadcast);
36
+ caches.forEach(function (cache) {
37
+ getCacheInfo(cache).dep.dirty(rv);
38
+ broadcast(cache);
39
+ });
30
40
  consumeAndIterate(listeners, function (listener) { return listener(value); });
31
41
  }
32
42
  }
33
43
  else {
34
44
  var cache = cacheSlot.getValue();
35
- if (cache)
45
+ if (cache) {
36
46
  attach(cache);
37
- varDep(rv);
47
+ getCacheInfo(cache).dep(rv);
48
+ }
38
49
  }
39
50
  return value;
40
51
  };
@@ -46,21 +57,10 @@ export function makeVar(value) {
46
57
  };
47
58
  var attach = rv.attachCache = function (cache) {
48
59
  caches.add(cache);
49
- var vars = varsByCache.get(cache);
50
- if (!vars)
51
- varsByCache.set(cache, vars = new Set);
52
- vars.add(rv);
60
+ getCacheInfo(cache).vars.add(rv);
53
61
  return rv;
54
62
  };
55
- rv.forgetCache = function (cache) {
56
- var deleted = caches.delete(cache);
57
- if (deleted) {
58
- var vars = varsByCache.get(cache);
59
- if (vars)
60
- vars.delete(rv);
61
- }
62
- return deleted;
63
- };
63
+ rv.forgetCache = function (cache) { return caches.delete(cache); };
64
64
  return rv;
65
65
  }
66
66
  function broadcast(cache) {
@@ -1 +1 @@
1
- {"version":3,"file":"reactiveVars.js","sourceRoot":"","sources":["../../../src/cache/inmemory/reactiveVars.ts"],"names":[],"mappings":"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","sourcesContent":["import { Slot } from \"@wry/context\";\nimport { dep } from \"optimism\";\nimport { InMemoryCache } from \"./inMemoryCache\";\nimport { ApolloCache } from '../../core';\n\nexport interface ReactiveVar<T> {\n (newValue?: T): T;\n onNextChange(listener: ReactiveListener<T>): () => void;\n attachCache(cache: ApolloCache<any>): this;\n forgetCache(cache: ApolloCache<any>): boolean;\n}\n\nexport type ReactiveListener<T> = (value: T) => any;\n\nconst varDep = dep<ReactiveVar<any>>();\n\n// Contextual Slot that acquires its value when custom read functions are\n// called in Policies#readField.\nexport const cacheSlot = new Slot<ApolloCache<any>>();\n\n// A listener function could in theory cause another listener to be added\n// to the set while we're iterating over it, so it's important to commit\n// to the original elements of the set before we begin iterating. See\n// iterateObserversSafely for another example of this pattern.\nfunction consumeAndIterate<T>(set: Set<T>, callback: (item: T) => any) {\n if (set.size) {\n const items: T[] = [];\n set.forEach(item => items.push(item));\n set.clear();\n items.forEach(callback);\n }\n}\n\nconst varsByCache = new WeakMap<ApolloCache<any>, Set<ReactiveVar<any>>>();\n\nexport function forgetCache(cache: ApolloCache<any>) {\n const vars = varsByCache.get(cache);\n if (vars) {\n consumeAndIterate(vars, rv => rv.forgetCache(cache));\n varsByCache.delete(cache);\n }\n}\n\nexport function makeVar<T>(value: T): ReactiveVar<T> {\n const caches = new Set<ApolloCache<any>>();\n const listeners = new Set<ReactiveListener<T>>();\n\n const rv: ReactiveVar<T> = function (newValue) {\n if (arguments.length > 0) {\n if (value !== newValue) {\n value = newValue!;\n // First, invalidate any fields with custom read functions that\n // consumed this variable, so query results involving those fields\n // will be recomputed the next time we read them.\n varDep.dirty(rv);\n // Next, broadcast changes to any caches that have previously read\n // from this variable.\n caches.forEach(broadcast);\n // Finally, notify any listeners added via rv.onNextChange.\n consumeAndIterate(listeners, listener => listener(value));\n }\n } else {\n // When reading from the variable, obtain the current cache from\n // context via cacheSlot. This isn't entirely foolproof, but it's\n // the same system that powers varDep.\n const cache = cacheSlot.getValue();\n if (cache) attach(cache);\n varDep(rv);\n }\n\n return value;\n };\n\n rv.onNextChange = listener => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n };\n\n const attach = rv.attachCache = cache => {\n caches.add(cache);\n let vars = varsByCache.get(cache)!;\n if (!vars) varsByCache.set(cache, vars = new Set);\n vars.add(rv);\n return rv;\n };\n\n rv.forgetCache = cache => {\n const deleted = caches.delete(cache);\n if (deleted) {\n const vars = varsByCache.get(cache);\n if (vars) vars.delete(rv);\n }\n return deleted;\n };\n\n return rv;\n}\n\ntype Broadcastable = ApolloCache<any> & {\n // This method is protected in InMemoryCache, which we are ignoring, but\n // we still want some semblance of type safety when we call it.\n broadcastWatches?: InMemoryCache[\"broadcastWatches\"];\n};\n\nfunction broadcast(cache: Broadcastable) {\n if (cache.broadcastWatches) {\n cache.broadcastWatches();\n }\n}\n"]}
1
+ {"version":3,"file":"reactiveVars.js","sourceRoot":"","sources":["../../../src/cache/inmemory/reactiveVars.ts"],"names":[],"mappings":"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","sourcesContent":["import { dep, OptimisticDependencyFunction } from \"optimism\";\nimport { Slot } from \"@wry/context\";\nimport { InMemoryCache } from \"./inMemoryCache\";\nimport { ApolloCache } from '../../core';\n\nexport interface ReactiveVar<T> {\n (newValue?: T): T;\n onNextChange(listener: ReactiveListener<T>): () => void;\n attachCache(cache: ApolloCache<any>): this;\n forgetCache(cache: ApolloCache<any>): boolean;\n}\n\nexport type ReactiveListener<T> = (value: T) => any;\n\n// Contextual Slot that acquires its value when custom read functions are\n// called in Policies#readField.\nexport const cacheSlot = new Slot<ApolloCache<any>>();\n\n// A listener function could in theory cause another listener to be added\n// to the set while we're iterating over it, so it's important to commit\n// to the original elements of the set before we begin iterating. See\n// iterateObserversSafely for another example of this pattern.\nfunction consumeAndIterate<T>(set: Set<T>, callback: (item: T) => any) {\n if (set.size) {\n const items: T[] = [];\n set.forEach(item => items.push(item));\n set.clear();\n items.forEach(callback);\n }\n}\n\nconst cacheInfoMap = new WeakMap<ApolloCache<any>, {\n vars: Set<ReactiveVar<any>>;\n dep: OptimisticDependencyFunction<ReactiveVar<any>>;\n}>();\n\nfunction getCacheInfo(cache: ApolloCache<any>) {\n let info = cacheInfoMap.get(cache)!;\n if (!info) {\n cacheInfoMap.set(cache, info = {\n vars: new Set,\n dep: dep(),\n });\n }\n return info;\n}\n\nexport function forgetCache(cache: ApolloCache<any>) {\n getCacheInfo(cache).vars.forEach(rv => rv.forgetCache(cache));\n}\n\n// Calling forgetCache(cache) serves to silence broadcasts and allows the\n// cache to be garbage collected. However, the varsByCache WeakMap\n// preserves the set of reactive variables that were previously associated\n// with this cache, which makes it possible to \"recall\" the cache at a\n// later time, by reattaching it to those variables. If the cache has been\n// garbage collected in the meantime, because it is no longer reachable,\n// you won't be able to call recallCache(cache), and the cache will\n// automatically disappear from the varsByCache WeakMap.\nexport function recallCache(cache: ApolloCache<any>) {\n getCacheInfo(cache).vars.forEach(rv => rv.attachCache(cache));\n}\n\nexport function makeVar<T>(value: T): ReactiveVar<T> {\n const caches = new Set<ApolloCache<any>>();\n const listeners = new Set<ReactiveListener<T>>();\n\n const rv: ReactiveVar<T> = function (newValue) {\n if (arguments.length > 0) {\n if (value !== newValue) {\n value = newValue!;\n caches.forEach(cache => {\n // Invalidate any fields with custom read functions that\n // consumed this variable, so query results involving those\n // fields will be recomputed the next time we read them.\n getCacheInfo(cache).dep.dirty(rv);\n // Broadcast changes to any caches that have previously read\n // from this variable.\n broadcast(cache);\n });\n // Finally, notify any listeners added via rv.onNextChange.\n consumeAndIterate(listeners, listener => listener(value));\n }\n } else {\n // When reading from the variable, obtain the current cache from\n // context via cacheSlot. This isn't entirely foolproof, but it's\n // the same system that powers varDep.\n const cache = cacheSlot.getValue();\n if (cache) {\n attach(cache);\n getCacheInfo(cache).dep(rv);\n }\n }\n\n return value;\n };\n\n rv.onNextChange = listener => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n };\n\n const attach = rv.attachCache = cache => {\n caches.add(cache);\n getCacheInfo(cache).vars.add(rv);\n return rv;\n };\n\n rv.forgetCache = cache => caches.delete(cache);\n\n return rv;\n}\n\ntype Broadcastable = ApolloCache<any> & {\n // This method is protected in InMemoryCache, which we are ignoring, but\n // we still want some semblance of type safety when we call it.\n broadcastWatches?: InMemoryCache[\"broadcastWatches\"];\n};\n\nfunction broadcast(cache: Broadcastable) {\n if (cache.broadcastWatches) {\n cache.broadcastWatches();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableQuery.d.ts","sourceRoot":"","sources":["../../src/core/ObservableQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObservableQuery.d.ts","sourceRoot":"","sources":["../../src/core/ObservableQuery.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { __assign, __extends } from "tslib";
2
2
  import { invariant } from 'ts-invariant';
3
3
  import { equal } from '@wry/equality';
4
4
  import { NetworkStatus, isNetworkRequestInFlight } from "./networkStatus.js";
5
- import { cloneDeep, getOperationDefinition, Observable, iterateObserversSafely, isNonEmptyArray, } from "../utilities/index.js";
5
+ import { cloneDeep, getOperationDefinition, Observable, iterateObserversSafely, isNonEmptyArray, fixObservableSubclass, } from "../utilities/index.js";
6
6
  import { Reobserver } from "./Reobserver.js";
7
7
  var warnedAboutUpdateQuery = false;
8
8
  var ObservableQuery = (function (_super) {
@@ -329,7 +329,6 @@ var ObservableQuery = (function (_super) {
329
329
  this.reobserver.stop();
330
330
  delete this.reobserver;
331
331
  }
332
- delete this.options.context;
333
332
  this.subscriptions.forEach(function (sub) { return sub.unsubscribe(); });
334
333
  this.subscriptions.clear();
335
334
  this.queryManager.stopQuery(this.queryId);
@@ -339,6 +338,7 @@ var ObservableQuery = (function (_super) {
339
338
  return ObservableQuery;
340
339
  }(Observable));
341
340
  export { ObservableQuery };
341
+ fixObservableSubclass(ObservableQuery);
342
342
  function defaultSubscriptionObserverErrorCallback(error) {
343
343
  process.env.NODE_ENV === "production" || invariant.error('Unhandled error', error.message, error.stack);
344
344
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableQuery.js","sourceRoot":"","sources":["../../src/core/ObservableQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from 'ts-invariant';\nimport { equal } from '@wry/equality';\n\nimport { NetworkStatus, isNetworkRequestInFlight } from './networkStatus';\nimport {\n cloneDeep,\n getOperationDefinition,\n Observable,\n Observer,\n ObservableSubscription,\n iterateObserversSafely,\n isNonEmptyArray,\n} from '../utilities';\nimport { ApolloError } from '../errors';\nimport { QueryManager } from './QueryManager';\nimport { ApolloQueryResult, OperationVariables } from './types';\nimport {\n WatchQueryOptions,\n FetchMoreQueryOptions,\n SubscribeToMoreOptions,\n} from './watchQueryOptions';\nimport { Reobserver } from './Reobserver';\nimport { QueryInfo } from './QueryInfo';\n\nexport interface FetchMoreOptions<\n TData = any,\n TVariables = OperationVariables\n> {\n updateQuery?: (\n previousQueryResult: TData,\n options: {\n fetchMoreResult?: TData;\n variables?: TVariables;\n },\n ) => TData;\n}\n\nexport interface UpdateQueryOptions<TVariables> {\n variables?: TVariables;\n}\n\nlet warnedAboutUpdateQuery = false;\n\nexport class ObservableQuery<\n TData = any,\n TVariables = OperationVariables\n> extends Observable<ApolloQueryResult<TData>> {\n public readonly options: WatchQueryOptions<TVariables, TData>;\n public readonly queryId: string;\n public readonly queryName?: string;\n\n // Computed shorthand for this.options.variables, preserved for\n // backwards compatibility.\n public get variables(): TVariables | undefined {\n return this.options.variables;\n }\n\n private isTornDown: boolean;\n private queryManager: QueryManager<any>;\n private observers = new Set<Observer<ApolloQueryResult<TData>>>();\n private subscriptions = new Set<ObservableSubscription>();\n\n private lastResult: ApolloQueryResult<TData>;\n private lastResultSnapshot: ApolloQueryResult<TData>;\n private lastError: ApolloError;\n private queryInfo: QueryInfo;\n\n constructor({\n queryManager,\n queryInfo,\n options,\n }: {\n queryManager: QueryManager<any>;\n queryInfo: QueryInfo;\n options: WatchQueryOptions<TVariables, TData>;\n }) {\n super((observer: Observer<ApolloQueryResult<TData>>) =>\n this.onSubscribe(observer),\n );\n\n // active state\n this.isTornDown = false;\n\n // query information\n this.options = options;\n this.queryId = queryManager.generateQueryId();\n\n const opDef = getOperationDefinition(options.query);\n this.queryName = opDef && opDef.name && opDef.name.value;\n\n // related classes\n this.queryManager = queryManager;\n\n this.queryInfo = queryInfo;\n }\n\n public result(): Promise<ApolloQueryResult<TData>> {\n return new Promise((resolve, reject) => {\n const observer: Observer<ApolloQueryResult<TData>> = {\n next: (result: ApolloQueryResult<TData>) => {\n resolve(result);\n\n // Stop the query within the QueryManager if we can before\n // this function returns.\n //\n // We do this in order to prevent observers piling up within\n // the QueryManager. Notice that we only fully unsubscribe\n // from the subscription in a setTimeout(..., 0) call. This call can\n // actually be handled by the browser at a much later time. If queries\n // are fired in the meantime, observers that should have been removed\n // from the QueryManager will continue to fire, causing an unnecessary\n // performance hit.\n this.observers.delete(observer);\n if (!this.observers.size) {\n this.queryManager.removeQuery(this.queryId);\n }\n\n setTimeout(() => {\n subscription.unsubscribe();\n }, 0);\n },\n error: reject,\n };\n const subscription = this.subscribe(observer);\n });\n }\n\n public getCurrentResult(saveAsLastResult = true): ApolloQueryResult<TData> {\n const { lastResult } = this;\n\n const networkStatus =\n this.queryInfo.networkStatus ||\n (lastResult && lastResult.networkStatus) ||\n NetworkStatus.ready;\n\n const result: ApolloQueryResult<TData> = {\n ...lastResult,\n loading: isNetworkRequestInFlight(networkStatus),\n networkStatus,\n };\n\n if (this.isTornDown) {\n return result;\n }\n\n const { fetchPolicy = 'cache-first' } = this.options;\n if (fetchPolicy === 'no-cache' ||\n fetchPolicy === 'network-only') {\n // Similar to setting result.partial to false, but taking advantage\n // of the falsiness of missing fields.\n delete result.partial;\n } else if (\n !result.data ||\n // If this.options.query has @client(always: true) fields, we cannot\n // trust result.data, since it was read from the cache without\n // running local resolvers (and it's too late to run resolvers now,\n // since we must return a result synchronously). TODO In the future\n // (after Apollo Client 3.0), we should find a way to trust\n // this.lastResult in more cases, and read from the cache only in\n // cases when no result has been received yet.\n !this.queryManager.transform(this.options.query).hasForcedResolvers\n ) {\n const diff = this.queryInfo.getDiff();\n result.data = (\n diff.complete ||\n this.options.returnPartialData\n ) ? diff.result : void 0;\n if (diff.complete) {\n // If the diff is complete, and we're using a FetchPolicy that\n // terminates after a complete cache read, we can assume the next\n // result we receive will have NetworkStatus.ready and !loading.\n if (result.networkStatus === NetworkStatus.loading &&\n (fetchPolicy === 'cache-first' ||\n fetchPolicy === 'cache-only')) {\n result.networkStatus = NetworkStatus.ready;\n result.loading = false;\n }\n delete result.partial;\n } else {\n result.partial = true;\n }\n }\n\n if (saveAsLastResult) {\n this.updateLastResult(result);\n }\n\n return result;\n }\n\n // Compares newResult to the snapshot we took of this.lastResult when it was\n // first received.\n public isDifferentFromLastResult(newResult: ApolloQueryResult<TData>) {\n return !equal(this.lastResultSnapshot, newResult);\n }\n\n // Returns the last result that observer.next was called with. This is not the same as\n // getCurrentResult! If you're not sure which you need, then you probably need getCurrentResult.\n public getLastResult(): ApolloQueryResult<TData> {\n return this.lastResult;\n }\n\n public getLastError(): ApolloError {\n return this.lastError;\n }\n\n public resetLastResults(): void {\n delete this.lastResult;\n delete this.lastResultSnapshot;\n delete this.lastError;\n this.isTornDown = false;\n }\n\n public resetQueryStoreErrors() {\n this.queryManager.resetErrors(this.queryId);\n }\n\n /**\n * Update the variables of this observable query, and fetch the new results.\n * This method should be preferred over `setVariables` in most use cases.\n *\n * @param variables: The new set of variables. If there are missing variables,\n * the previous values of those variables will be used.\n */\n public refetch(variables?: Partial<TVariables>): Promise<ApolloQueryResult<TData>> {\n const reobserveOptions: Partial<WatchQueryOptions<TVariables, TData>> = {\n // Always disable polling for refetches.\n pollInterval: 0,\n };\n\n // Unless the provided fetchPolicy always consults the network\n // (no-cache, network-only, or cache-and-network), override it with\n // network-only to force the refetch for this fetchQuery call.\n const { fetchPolicy } = this.options;\n if (fetchPolicy !== 'no-cache' &&\n fetchPolicy !== 'cache-and-network') {\n reobserveOptions.fetchPolicy = 'network-only';\n // Go back to the original options.fetchPolicy after this refetch.\n reobserveOptions.nextFetchPolicy = fetchPolicy || \"cache-first\";\n }\n\n if (variables && !equal(this.options.variables, variables)) {\n // Update the existing options with new variables\n reobserveOptions.variables = this.options.variables = {\n ...this.options.variables,\n ...variables,\n } as TVariables;\n }\n\n return this.newReobserver(false).reobserve(\n reobserveOptions,\n NetworkStatus.refetch,\n );\n }\n\n public fetchMore<K extends keyof TVariables>(\n fetchMoreOptions: FetchMoreQueryOptions<TVariables, K, TData> &\n FetchMoreOptions<TData, TVariables>,\n ): Promise<ApolloQueryResult<TData>> {\n const combinedOptions = {\n ...(fetchMoreOptions.query ? fetchMoreOptions : {\n ...this.options,\n ...fetchMoreOptions,\n variables: {\n ...this.options.variables,\n ...fetchMoreOptions.variables,\n },\n }),\n // The fetchMore request goes immediately to the network and does\n // not automatically write its result to the cache (hence no-cache\n // instead of network-only), because we allow the caller of\n // fetchMore to provide an updateQuery callback that determines how\n // the data gets written to the cache.\n fetchPolicy: \"no-cache\",\n } as WatchQueryOptions;\n\n const qid = this.queryManager.generateQueryId();\n\n // Simulate a loading result for the original query with\n // result.networkStatus === NetworkStatus.fetchMore.\n if (combinedOptions.notifyOnNetworkStatusChange) {\n this.queryInfo.networkStatus = NetworkStatus.fetchMore;\n this.observe();\n }\n\n return this.queryManager.fetchQuery(\n qid,\n combinedOptions,\n NetworkStatus.fetchMore,\n ).then(fetchMoreResult => {\n const data = fetchMoreResult.data as TData;\n const { updateQuery } = fetchMoreOptions;\n\n if (updateQuery) {\n if (process.env.NODE_ENV !== \"production\" &&\n !warnedAboutUpdateQuery) {\n invariant.warn(\n`The updateQuery callback for fetchMore is deprecated, and will be removed\nin the next major version of Apollo Client.\n\nPlease convert updateQuery functions to field policies with appropriate\nread and merge functions, or use/adapt a helper function (such as\nconcatPagination, offsetLimitPagination, or relayStylePagination) from\n@apollo/client/utilities.\n\nThe field policy system handles pagination more effectively than a\nhand-written updateQuery function, and you only need to define the policy\nonce, rather than every time you call fetchMore.`);\n warnedAboutUpdateQuery = true;\n }\n this.updateQuery(previous => updateQuery(previous, {\n fetchMoreResult: data,\n variables: combinedOptions.variables as TVariables,\n }));\n } else {\n // If we're using a field policy instead of updateQuery, the only\n // thing we need to do is write the new data to the cache using\n // combinedOptions.variables (instead of this.variables, which is\n // what this.updateQuery uses, because it works by abusing the\n // original field value, keyed by the original variables).\n this.queryManager.cache.writeQuery({\n query: combinedOptions.query,\n variables: combinedOptions.variables,\n data,\n });\n }\n\n return fetchMoreResult as ApolloQueryResult<TData>;\n\n }).finally(() => {\n this.queryManager.stopQuery(qid);\n this.reobserve();\n });\n }\n\n // XXX the subscription variables are separate from the query variables.\n // if you want to update subscription variables, right now you have to do that separately,\n // and you can only do it by stopping the subscription and then subscribing again with new variables.\n public subscribeToMore<\n TSubscriptionData = TData,\n TSubscriptionVariables = TVariables\n >(\n options: SubscribeToMoreOptions<\n TData,\n TSubscriptionVariables,\n TSubscriptionData\n >,\n ) {\n const subscription = this.queryManager\n .startGraphQLSubscription({\n query: options.document,\n variables: options.variables,\n context: options.context,\n })\n .subscribe({\n next: (subscriptionData: { data: TSubscriptionData }) => {\n const { updateQuery } = options;\n if (updateQuery) {\n this.updateQuery<TSubscriptionVariables>(\n (previous, { variables }) =>\n updateQuery(previous, {\n subscriptionData,\n variables,\n }),\n );\n }\n },\n error: (err: any) => {\n if (options.onError) {\n options.onError(err);\n return;\n }\n invariant.error('Unhandled GraphQL subscription error', err);\n },\n });\n\n this.subscriptions.add(subscription);\n\n return () => {\n if (this.subscriptions.delete(subscription)) {\n subscription.unsubscribe();\n }\n };\n }\n\n public setOptions(\n newOptions: Partial<WatchQueryOptions<TVariables, TData>>,\n ): Promise<ApolloQueryResult<TData>> {\n return this.reobserve(newOptions);\n }\n\n /**\n * This is for *internal* use only. Most users should instead use `refetch`\n * in order to be properly notified of results even when they come from cache.\n *\n * Update the variables of this observable query, and fetch the new results\n * if they've changed. If you want to force new results, use `refetch`.\n *\n * Note: the `next` callback will *not* fire if the variables have not changed\n * or if the result is coming from cache.\n *\n * Note: the promise will return the old results immediately if the variables\n * have not changed.\n *\n * Note: the promise will return null immediately if the query is not active\n * (there are no subscribers).\n *\n * @private\n *\n * @param variables: The new set of variables. If there are missing variables,\n * the previous values of those variables will be used.\n *\n * @param tryFetch: Try and fetch new results even if the variables haven't\n * changed (we may still just hit the store, but if there's nothing in there\n * this will refetch)\n */\n public setVariables(\n variables: TVariables,\n ): Promise<ApolloQueryResult<TData> | void> {\n if (equal(this.variables, variables)) {\n // If we have no observers, then we don't actually want to make a network\n // request. As soon as someone observes the query, the request will kick\n // off. For now, we just store any changes. (See #1077)\n return this.observers.size\n ? this.result()\n : Promise.resolve();\n }\n\n this.options.variables = variables;\n\n // See comment above\n if (!this.observers.size) {\n return Promise.resolve();\n }\n\n let { fetchPolicy = 'cache-first' } = this.options;\n const reobserveOptions: Partial<WatchQueryOptions<TVariables, TData>> = {\n fetchPolicy,\n variables,\n };\n\n if (fetchPolicy !== 'cache-first' &&\n fetchPolicy !== 'no-cache' &&\n fetchPolicy !== 'network-only') {\n reobserveOptions.fetchPolicy = 'cache-and-network';\n reobserveOptions.nextFetchPolicy = fetchPolicy;\n }\n\n return this.reobserve(\n reobserveOptions,\n NetworkStatus.setVariables,\n );\n }\n\n public updateQuery<TVars = TVariables>(\n mapFn: (\n previousQueryResult: TData,\n options: Pick<WatchQueryOptions<TVars, TData>, \"variables\">,\n ) => TData,\n ): void {\n const { queryManager } = this;\n const { result } = queryManager.cache.diff<TData>({\n query: this.options.query,\n variables: this.variables,\n previousResult: this.lastResult?.data,\n returnPartialData: true,\n optimistic: false,\n });\n\n const newResult = mapFn(result!, {\n variables: (this as any).variables,\n });\n\n if (newResult) {\n queryManager.cache.writeQuery({\n query: this.options.query,\n data: newResult,\n variables: this.variables,\n });\n\n queryManager.broadcastQueries();\n }\n }\n\n public startPolling(pollInterval: number) {\n this.getReobserver().updateOptions({ pollInterval });\n }\n\n public stopPolling() {\n if (this.reobserver) {\n this.reobserver.updateOptions({ pollInterval: 0 });\n }\n }\n\n private updateLastResult(newResult: ApolloQueryResult<TData>) {\n const previousResult = this.lastResult;\n this.lastResult = newResult;\n this.lastResultSnapshot = this.queryManager.assumeImmutableResults\n ? newResult\n : cloneDeep(newResult);\n if (!isNonEmptyArray(newResult.errors)) {\n delete this.lastError;\n }\n return previousResult;\n }\n\n private onSubscribe(observer: Observer<ApolloQueryResult<TData>>) {\n // Subscribing using this.observer will create an infinite notificaion\n // loop, but the intent of broadcasting results to all the other\n // this.observers can be satisfied without doing anything, which is\n // why we do not bother throwing an error here.\n if (observer === this.observer) {\n return () => {};\n }\n\n // Zen Observable has its own error function, so in order to log correctly\n // we need to provide a custom error callback.\n try {\n var subObserver = (observer as any)._subscription._observer;\n if (subObserver && !subObserver.error) {\n subObserver.error = defaultSubscriptionObserverErrorCallback;\n }\n } catch {}\n\n const first = !this.observers.size;\n this.observers.add(observer);\n\n // Deliver most recent error or result.\n if (this.lastError) {\n observer.error && observer.error(this.lastError);\n } else if (this.lastResult) {\n observer.next && observer.next(this.lastResult);\n }\n\n // Initiate observation of this query if it hasn't been reported to\n // the QueryManager yet.\n if (first) {\n this.reobserve().catch(_ => {\n // Blindly catching here prevents unhandled promise rejections,\n // and is safe because the ObservableQuery handles this error with\n // this.observer.error, so we're not just swallowing the error by\n // ignoring it here.\n });\n }\n\n return () => {\n if (this.observers.delete(observer) && !this.observers.size) {\n this.tearDownQuery();\n }\n };\n }\n\n private reobserver?: Reobserver<TData, TVariables>;\n\n private getReobserver(): Reobserver<TData, TVariables> {\n return this.reobserver || (this.reobserver = this.newReobserver(true));\n }\n\n private newReobserver(shareOptions: boolean) {\n const { queryManager, queryId } = this;\n queryManager.setObservableQuery(this);\n return new Reobserver<TData, TVariables>(\n this.observer,\n // Sharing options allows this.reobserver.options to be ===\n // this.options, so we don't have to worry about synchronizing the\n // properties of two distinct objects.\n shareOptions ? this.options : { ...this.options },\n (currentOptions, newNetworkStatus) => {\n queryManager.setObservableQuery(this);\n return queryManager.fetchQueryObservable(\n queryId,\n currentOptions,\n newNetworkStatus,\n );\n },\n // Avoid polling during SSR and when the query is already in flight.\n !queryManager.ssrMode && (\n () => !isNetworkRequestInFlight(this.queryInfo.networkStatus))\n );\n }\n\n public reobserve(\n newOptions?: Partial<WatchQueryOptions<TVariables, TData>>,\n newNetworkStatus?: NetworkStatus,\n ): Promise<ApolloQueryResult<TData>> {\n this.isTornDown = false;\n return this.getReobserver().reobserve(newOptions, newNetworkStatus);\n }\n\n // Pass the current result to this.observer.next without applying any\n // fetch policies, bypassing the Reobserver.\n private observe() {\n // Passing false is important so that this.getCurrentResult doesn't\n // save the fetchMore result as this.lastResult, causing it to be\n // ignored due to the this.isDifferentFromLastResult check in\n // this.observer.next.\n this.observer.next(this.getCurrentResult(false));\n }\n\n private observer = {\n next: (result: ApolloQueryResult<TData>) => {\n if (this.lastError || this.isDifferentFromLastResult(result)) {\n this.updateLastResult(result);\n iterateObserversSafely(this.observers, 'next', result);\n }\n },\n\n error: (error: ApolloError) => {\n // Since we don't get the current result on errors, only the error, we\n // must mirror the updates that occur in QueryStore.markQueryError here\n this.updateLastResult({\n ...this.lastResult,\n error,\n errors: error.graphQLErrors,\n networkStatus: NetworkStatus.error,\n loading: false,\n });\n\n iterateObserversSafely(this.observers, 'error', this.lastError = error);\n },\n };\n\n public hasObservers() {\n return this.observers.size > 0;\n }\n\n private tearDownQuery() {\n if (this.isTornDown) return;\n\n if (this.reobserver) {\n this.reobserver.stop();\n delete this.reobserver;\n }\n\n // Since the user-provided context object can retain arbitrarily large\n // amounts of memory, we delete it when the ObservableQuery is torn\n // down, to avoid the possibility of memory leaks.\n delete this.options.context;\n\n // stop all active GraphQL subscriptions\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.subscriptions.clear();\n\n this.queryManager.stopQuery(this.queryId);\n\n this.observers.clear();\n\n this.isTornDown = true;\n }\n}\n\nfunction defaultSubscriptionObserverErrorCallback(error: ApolloError) {\n invariant.error('Unhandled error', error.message, error.stack);\n}\n"]}
1
+ {"version":3,"file":"ObservableQuery.js","sourceRoot":"","sources":["../../src/core/ObservableQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from 'ts-invariant';\nimport { equal } from '@wry/equality';\n\nimport { NetworkStatus, isNetworkRequestInFlight } from './networkStatus';\nimport {\n cloneDeep,\n getOperationDefinition,\n Observable,\n Observer,\n ObservableSubscription,\n iterateObserversSafely,\n isNonEmptyArray,\n fixObservableSubclass,\n} from '../utilities';\nimport { ApolloError } from '../errors';\nimport { QueryManager } from './QueryManager';\nimport { ApolloQueryResult, OperationVariables } from './types';\nimport {\n WatchQueryOptions,\n FetchMoreQueryOptions,\n SubscribeToMoreOptions,\n} from './watchQueryOptions';\nimport { Reobserver } from './Reobserver';\nimport { QueryInfo } from './QueryInfo';\n\nexport interface FetchMoreOptions<\n TData = any,\n TVariables = OperationVariables\n> {\n updateQuery?: (\n previousQueryResult: TData,\n options: {\n fetchMoreResult?: TData;\n variables?: TVariables;\n },\n ) => TData;\n}\n\nexport interface UpdateQueryOptions<TVariables> {\n variables?: TVariables;\n}\n\nlet warnedAboutUpdateQuery = false;\n\nexport class ObservableQuery<\n TData = any,\n TVariables = OperationVariables\n> extends Observable<ApolloQueryResult<TData>> {\n public readonly options: WatchQueryOptions<TVariables, TData>;\n public readonly queryId: string;\n public readonly queryName?: string;\n\n // Computed shorthand for this.options.variables, preserved for\n // backwards compatibility.\n public get variables(): TVariables | undefined {\n return this.options.variables;\n }\n\n private isTornDown: boolean;\n private queryManager: QueryManager<any>;\n private observers = new Set<Observer<ApolloQueryResult<TData>>>();\n private subscriptions = new Set<ObservableSubscription>();\n\n private lastResult: ApolloQueryResult<TData>;\n private lastResultSnapshot: ApolloQueryResult<TData>;\n private lastError: ApolloError;\n private queryInfo: QueryInfo;\n\n constructor({\n queryManager,\n queryInfo,\n options,\n }: {\n queryManager: QueryManager<any>;\n queryInfo: QueryInfo;\n options: WatchQueryOptions<TVariables, TData>;\n }) {\n super((observer: Observer<ApolloQueryResult<TData>>) =>\n this.onSubscribe(observer),\n );\n\n // active state\n this.isTornDown = false;\n\n // query information\n this.options = options;\n this.queryId = queryManager.generateQueryId();\n\n const opDef = getOperationDefinition(options.query);\n this.queryName = opDef && opDef.name && opDef.name.value;\n\n // related classes\n this.queryManager = queryManager;\n\n this.queryInfo = queryInfo;\n }\n\n public result(): Promise<ApolloQueryResult<TData>> {\n return new Promise((resolve, reject) => {\n const observer: Observer<ApolloQueryResult<TData>> = {\n next: (result: ApolloQueryResult<TData>) => {\n resolve(result);\n\n // Stop the query within the QueryManager if we can before\n // this function returns.\n //\n // We do this in order to prevent observers piling up within\n // the QueryManager. Notice that we only fully unsubscribe\n // from the subscription in a setTimeout(..., 0) call. This call can\n // actually be handled by the browser at a much later time. If queries\n // are fired in the meantime, observers that should have been removed\n // from the QueryManager will continue to fire, causing an unnecessary\n // performance hit.\n this.observers.delete(observer);\n if (!this.observers.size) {\n this.queryManager.removeQuery(this.queryId);\n }\n\n setTimeout(() => {\n subscription.unsubscribe();\n }, 0);\n },\n error: reject,\n };\n const subscription = this.subscribe(observer);\n });\n }\n\n public getCurrentResult(saveAsLastResult = true): ApolloQueryResult<TData> {\n const { lastResult } = this;\n\n const networkStatus =\n this.queryInfo.networkStatus ||\n (lastResult && lastResult.networkStatus) ||\n NetworkStatus.ready;\n\n const result: ApolloQueryResult<TData> = {\n ...lastResult,\n loading: isNetworkRequestInFlight(networkStatus),\n networkStatus,\n };\n\n if (this.isTornDown) {\n return result;\n }\n\n const { fetchPolicy = 'cache-first' } = this.options;\n if (fetchPolicy === 'no-cache' ||\n fetchPolicy === 'network-only') {\n // Similar to setting result.partial to false, but taking advantage\n // of the falsiness of missing fields.\n delete result.partial;\n } else if (\n !result.data ||\n // If this.options.query has @client(always: true) fields, we cannot\n // trust result.data, since it was read from the cache without\n // running local resolvers (and it's too late to run resolvers now,\n // since we must return a result synchronously). TODO In the future\n // (after Apollo Client 3.0), we should find a way to trust\n // this.lastResult in more cases, and read from the cache only in\n // cases when no result has been received yet.\n !this.queryManager.transform(this.options.query).hasForcedResolvers\n ) {\n const diff = this.queryInfo.getDiff();\n result.data = (\n diff.complete ||\n this.options.returnPartialData\n ) ? diff.result : void 0;\n if (diff.complete) {\n // If the diff is complete, and we're using a FetchPolicy that\n // terminates after a complete cache read, we can assume the next\n // result we receive will have NetworkStatus.ready and !loading.\n if (result.networkStatus === NetworkStatus.loading &&\n (fetchPolicy === 'cache-first' ||\n fetchPolicy === 'cache-only')) {\n result.networkStatus = NetworkStatus.ready;\n result.loading = false;\n }\n delete result.partial;\n } else {\n result.partial = true;\n }\n }\n\n if (saveAsLastResult) {\n this.updateLastResult(result);\n }\n\n return result;\n }\n\n // Compares newResult to the snapshot we took of this.lastResult when it was\n // first received.\n public isDifferentFromLastResult(newResult: ApolloQueryResult<TData>) {\n return !equal(this.lastResultSnapshot, newResult);\n }\n\n // Returns the last result that observer.next was called with. This is not the same as\n // getCurrentResult! If you're not sure which you need, then you probably need getCurrentResult.\n public getLastResult(): ApolloQueryResult<TData> {\n return this.lastResult;\n }\n\n public getLastError(): ApolloError {\n return this.lastError;\n }\n\n public resetLastResults(): void {\n delete this.lastResult;\n delete this.lastResultSnapshot;\n delete this.lastError;\n this.isTornDown = false;\n }\n\n public resetQueryStoreErrors() {\n this.queryManager.resetErrors(this.queryId);\n }\n\n /**\n * Update the variables of this observable query, and fetch the new results.\n * This method should be preferred over `setVariables` in most use cases.\n *\n * @param variables: The new set of variables. If there are missing variables,\n * the previous values of those variables will be used.\n */\n public refetch(variables?: Partial<TVariables>): Promise<ApolloQueryResult<TData>> {\n const reobserveOptions: Partial<WatchQueryOptions<TVariables, TData>> = {\n // Always disable polling for refetches.\n pollInterval: 0,\n };\n\n // Unless the provided fetchPolicy always consults the network\n // (no-cache, network-only, or cache-and-network), override it with\n // network-only to force the refetch for this fetchQuery call.\n const { fetchPolicy } = this.options;\n if (fetchPolicy !== 'no-cache' &&\n fetchPolicy !== 'cache-and-network') {\n reobserveOptions.fetchPolicy = 'network-only';\n // Go back to the original options.fetchPolicy after this refetch.\n reobserveOptions.nextFetchPolicy = fetchPolicy || \"cache-first\";\n }\n\n if (variables && !equal(this.options.variables, variables)) {\n // Update the existing options with new variables\n reobserveOptions.variables = this.options.variables = {\n ...this.options.variables,\n ...variables,\n } as TVariables;\n }\n\n return this.newReobserver(false).reobserve(\n reobserveOptions,\n NetworkStatus.refetch,\n );\n }\n\n public fetchMore<K extends keyof TVariables>(\n fetchMoreOptions: FetchMoreQueryOptions<TVariables, K, TData> &\n FetchMoreOptions<TData, TVariables>,\n ): Promise<ApolloQueryResult<TData>> {\n const combinedOptions = {\n ...(fetchMoreOptions.query ? fetchMoreOptions : {\n ...this.options,\n ...fetchMoreOptions,\n variables: {\n ...this.options.variables,\n ...fetchMoreOptions.variables,\n },\n }),\n // The fetchMore request goes immediately to the network and does\n // not automatically write its result to the cache (hence no-cache\n // instead of network-only), because we allow the caller of\n // fetchMore to provide an updateQuery callback that determines how\n // the data gets written to the cache.\n fetchPolicy: \"no-cache\",\n } as WatchQueryOptions;\n\n const qid = this.queryManager.generateQueryId();\n\n // Simulate a loading result for the original query with\n // result.networkStatus === NetworkStatus.fetchMore.\n if (combinedOptions.notifyOnNetworkStatusChange) {\n this.queryInfo.networkStatus = NetworkStatus.fetchMore;\n this.observe();\n }\n\n return this.queryManager.fetchQuery(\n qid,\n combinedOptions,\n NetworkStatus.fetchMore,\n ).then(fetchMoreResult => {\n const data = fetchMoreResult.data as TData;\n const { updateQuery } = fetchMoreOptions;\n\n if (updateQuery) {\n if (process.env.NODE_ENV !== \"production\" &&\n !warnedAboutUpdateQuery) {\n invariant.warn(\n`The updateQuery callback for fetchMore is deprecated, and will be removed\nin the next major version of Apollo Client.\n\nPlease convert updateQuery functions to field policies with appropriate\nread and merge functions, or use/adapt a helper function (such as\nconcatPagination, offsetLimitPagination, or relayStylePagination) from\n@apollo/client/utilities.\n\nThe field policy system handles pagination more effectively than a\nhand-written updateQuery function, and you only need to define the policy\nonce, rather than every time you call fetchMore.`);\n warnedAboutUpdateQuery = true;\n }\n this.updateQuery(previous => updateQuery(previous, {\n fetchMoreResult: data,\n variables: combinedOptions.variables as TVariables,\n }));\n } else {\n // If we're using a field policy instead of updateQuery, the only\n // thing we need to do is write the new data to the cache using\n // combinedOptions.variables (instead of this.variables, which is\n // what this.updateQuery uses, because it works by abusing the\n // original field value, keyed by the original variables).\n this.queryManager.cache.writeQuery({\n query: combinedOptions.query,\n variables: combinedOptions.variables,\n data,\n });\n }\n\n return fetchMoreResult as ApolloQueryResult<TData>;\n\n }).finally(() => {\n this.queryManager.stopQuery(qid);\n this.reobserve();\n });\n }\n\n // XXX the subscription variables are separate from the query variables.\n // if you want to update subscription variables, right now you have to do that separately,\n // and you can only do it by stopping the subscription and then subscribing again with new variables.\n public subscribeToMore<\n TSubscriptionData = TData,\n TSubscriptionVariables = TVariables\n >(\n options: SubscribeToMoreOptions<\n TData,\n TSubscriptionVariables,\n TSubscriptionData\n >,\n ) {\n const subscription = this.queryManager\n .startGraphQLSubscription({\n query: options.document,\n variables: options.variables,\n context: options.context,\n })\n .subscribe({\n next: (subscriptionData: { data: TSubscriptionData }) => {\n const { updateQuery } = options;\n if (updateQuery) {\n this.updateQuery<TSubscriptionVariables>(\n (previous, { variables }) =>\n updateQuery(previous, {\n subscriptionData,\n variables,\n }),\n );\n }\n },\n error: (err: any) => {\n if (options.onError) {\n options.onError(err);\n return;\n }\n invariant.error('Unhandled GraphQL subscription error', err);\n },\n });\n\n this.subscriptions.add(subscription);\n\n return () => {\n if (this.subscriptions.delete(subscription)) {\n subscription.unsubscribe();\n }\n };\n }\n\n public setOptions(\n newOptions: Partial<WatchQueryOptions<TVariables, TData>>,\n ): Promise<ApolloQueryResult<TData>> {\n return this.reobserve(newOptions);\n }\n\n /**\n * This is for *internal* use only. Most users should instead use `refetch`\n * in order to be properly notified of results even when they come from cache.\n *\n * Update the variables of this observable query, and fetch the new results\n * if they've changed. If you want to force new results, use `refetch`.\n *\n * Note: the `next` callback will *not* fire if the variables have not changed\n * or if the result is coming from cache.\n *\n * Note: the promise will return the old results immediately if the variables\n * have not changed.\n *\n * Note: the promise will return null immediately if the query is not active\n * (there are no subscribers).\n *\n * @private\n *\n * @param variables: The new set of variables. If there are missing variables,\n * the previous values of those variables will be used.\n *\n * @param tryFetch: Try and fetch new results even if the variables haven't\n * changed (we may still just hit the store, but if there's nothing in there\n * this will refetch)\n */\n public setVariables(\n variables: TVariables,\n ): Promise<ApolloQueryResult<TData> | void> {\n if (equal(this.variables, variables)) {\n // If we have no observers, then we don't actually want to make a network\n // request. As soon as someone observes the query, the request will kick\n // off. For now, we just store any changes. (See #1077)\n return this.observers.size\n ? this.result()\n : Promise.resolve();\n }\n\n this.options.variables = variables;\n\n // See comment above\n if (!this.observers.size) {\n return Promise.resolve();\n }\n\n let { fetchPolicy = 'cache-first' } = this.options;\n const reobserveOptions: Partial<WatchQueryOptions<TVariables, TData>> = {\n fetchPolicy,\n variables,\n };\n\n if (fetchPolicy !== 'cache-first' &&\n fetchPolicy !== 'no-cache' &&\n fetchPolicy !== 'network-only') {\n reobserveOptions.fetchPolicy = 'cache-and-network';\n reobserveOptions.nextFetchPolicy = fetchPolicy;\n }\n\n return this.reobserve(\n reobserveOptions,\n NetworkStatus.setVariables,\n );\n }\n\n public updateQuery<TVars = TVariables>(\n mapFn: (\n previousQueryResult: TData,\n options: Pick<WatchQueryOptions<TVars, TData>, \"variables\">,\n ) => TData,\n ): void {\n const { queryManager } = this;\n const { result } = queryManager.cache.diff<TData>({\n query: this.options.query,\n variables: this.variables,\n previousResult: this.lastResult?.data,\n returnPartialData: true,\n optimistic: false,\n });\n\n const newResult = mapFn(result!, {\n variables: (this as any).variables,\n });\n\n if (newResult) {\n queryManager.cache.writeQuery({\n query: this.options.query,\n data: newResult,\n variables: this.variables,\n });\n\n queryManager.broadcastQueries();\n }\n }\n\n public startPolling(pollInterval: number) {\n this.getReobserver().updateOptions({ pollInterval });\n }\n\n public stopPolling() {\n if (this.reobserver) {\n this.reobserver.updateOptions({ pollInterval: 0 });\n }\n }\n\n private updateLastResult(newResult: ApolloQueryResult<TData>) {\n const previousResult = this.lastResult;\n this.lastResult = newResult;\n this.lastResultSnapshot = this.queryManager.assumeImmutableResults\n ? newResult\n : cloneDeep(newResult);\n if (!isNonEmptyArray(newResult.errors)) {\n delete this.lastError;\n }\n return previousResult;\n }\n\n private onSubscribe(observer: Observer<ApolloQueryResult<TData>>) {\n // Subscribing using this.observer will create an infinite notificaion\n // loop, but the intent of broadcasting results to all the other\n // this.observers can be satisfied without doing anything, which is\n // why we do not bother throwing an error here.\n if (observer === this.observer) {\n return () => {};\n }\n\n // Zen Observable has its own error function, so in order to log correctly\n // we need to provide a custom error callback.\n try {\n var subObserver = (observer as any)._subscription._observer;\n if (subObserver && !subObserver.error) {\n subObserver.error = defaultSubscriptionObserverErrorCallback;\n }\n } catch {}\n\n const first = !this.observers.size;\n this.observers.add(observer);\n\n // Deliver most recent error or result.\n if (this.lastError) {\n observer.error && observer.error(this.lastError);\n } else if (this.lastResult) {\n observer.next && observer.next(this.lastResult);\n }\n\n // Initiate observation of this query if it hasn't been reported to\n // the QueryManager yet.\n if (first) {\n this.reobserve().catch(_ => {\n // Blindly catching here prevents unhandled promise rejections,\n // and is safe because the ObservableQuery handles this error with\n // this.observer.error, so we're not just swallowing the error by\n // ignoring it here.\n });\n }\n\n return () => {\n if (this.observers.delete(observer) && !this.observers.size) {\n this.tearDownQuery();\n }\n };\n }\n\n private reobserver?: Reobserver<TData, TVariables>;\n\n private getReobserver(): Reobserver<TData, TVariables> {\n return this.reobserver || (this.reobserver = this.newReobserver(true));\n }\n\n private newReobserver(shareOptions: boolean) {\n const { queryManager, queryId } = this;\n queryManager.setObservableQuery(this);\n return new Reobserver<TData, TVariables>(\n this.observer,\n // Sharing options allows this.reobserver.options to be ===\n // this.options, so we don't have to worry about synchronizing the\n // properties of two distinct objects.\n shareOptions ? this.options : { ...this.options },\n (currentOptions, newNetworkStatus) => {\n queryManager.setObservableQuery(this);\n return queryManager.fetchQueryObservable(\n queryId,\n currentOptions,\n newNetworkStatus,\n );\n },\n // Avoid polling during SSR and when the query is already in flight.\n !queryManager.ssrMode && (\n () => !isNetworkRequestInFlight(this.queryInfo.networkStatus))\n );\n }\n\n public reobserve(\n newOptions?: Partial<WatchQueryOptions<TVariables, TData>>,\n newNetworkStatus?: NetworkStatus,\n ): Promise<ApolloQueryResult<TData>> {\n this.isTornDown = false;\n return this.getReobserver().reobserve(newOptions, newNetworkStatus);\n }\n\n // Pass the current result to this.observer.next without applying any\n // fetch policies, bypassing the Reobserver.\n private observe() {\n // Passing false is important so that this.getCurrentResult doesn't\n // save the fetchMore result as this.lastResult, causing it to be\n // ignored due to the this.isDifferentFromLastResult check in\n // this.observer.next.\n this.observer.next(this.getCurrentResult(false));\n }\n\n private observer = {\n next: (result: ApolloQueryResult<TData>) => {\n if (this.lastError || this.isDifferentFromLastResult(result)) {\n this.updateLastResult(result);\n iterateObserversSafely(this.observers, 'next', result);\n }\n },\n\n error: (error: ApolloError) => {\n // Since we don't get the current result on errors, only the error, we\n // must mirror the updates that occur in QueryStore.markQueryError here\n this.updateLastResult({\n ...this.lastResult,\n error,\n errors: error.graphQLErrors,\n networkStatus: NetworkStatus.error,\n loading: false,\n });\n\n iterateObserversSafely(this.observers, 'error', this.lastError = error);\n },\n };\n\n public hasObservers() {\n return this.observers.size > 0;\n }\n\n private tearDownQuery() {\n if (this.isTornDown) return;\n\n if (this.reobserver) {\n this.reobserver.stop();\n delete this.reobserver;\n }\n\n // stop all active GraphQL subscriptions\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.subscriptions.clear();\n\n this.queryManager.stopQuery(this.queryId);\n\n this.observers.clear();\n\n this.isTornDown = true;\n }\n}\n\n// Necessary because the ObservableQuery constructor has a different\n// signature than the Observable constructor.\nfixObservableSubclass(ObservableQuery);\n\nfunction defaultSubscriptionObserverErrorCallback(error: ApolloError) {\n invariant.error('Unhandled error', error.message, error.stack);\n}\n"]}
@@ -30,6 +30,7 @@ export declare class QueryInfo {
30
30
  private dirty;
31
31
  private notifyTimeout?;
32
32
  private diff;
33
+ reset(): void;
33
34
  getDiff(variables?: Record<string, any> | undefined): Cache.DiffResult<any>;
34
35
  setDiff(diff: Cache.DiffResult<any> | null): void;
35
36
  readonly observableQuery: ObservableQuery<any> | null;
@@ -1 +1 @@
1
- {"version":3,"file":"QueryInfo.d.ts","sourceRoot":"","sources":["../../src/core/QueryInfo.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGrD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAO3C,OAAO,EACL,aAAa,EAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,oBAAY,eAAe,GAAG,IAAI,CAAC,SAAS,EACxC,WAAW,GACX,eAAe,GACf,cAAc,GACd,eAAe,CAChB,CAAC;AA6CJ,qBAAa,SAAS;IAWR,OAAO,CAAC,KAAK;IAVzB,SAAS,qBAA4B;IACrC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAQ;IACrC,aAAa,SAAK;IAClB,aAAa,kCAAqC;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC5C,OAAO,UAAS;gBAEI,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC;IAcpC,IAAI,CAAC,KAAK,EAAE;QACjB,QAAQ,EAAE,YAAY,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;QAI3C,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,eAAe,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;QACvC,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI;IA+BR,OAAO,CAAC,KAAK,CAAkB;IAE/B,OAAO,CAAC,aAAa,CAAC,CAAgC;IAEtD,OAAO,CAAC,IAAI,CAAsC;IAElD,OAAO,CAAC,SAAS,kCAAiB,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;IAe1D,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI;IAY1C,SAAgB,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IACpE,OAAO,CAAC,UAAU,CAAC,CAAgB;IAEnC,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI;IA4BlD,MAAM;IAUN,OAAO,CAAC,YAAY;IAiBb,IAAI;IAkBX,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,SAAS,CAAC,CAAqB;IAEvC,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,SAAS,CAAC,CAIhB;IAEF,OAAO,CAAC,WAAW;IAgBZ,UAAU,CAAC,CAAC,EACjB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAC3B,WAAW,GACX,aAAa,GACb,aAAa,CAAC,EAClB,eAAe,EAAE,OAAO;IA2GnB,SAAS;IAKT,SAAS,CAAC,KAAK,EAAE,WAAW;CAgBpC;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,WAAW,GAAE,WAAoB,WAUlC"}
1
+ {"version":3,"file":"QueryInfo.d.ts","sourceRoot":"","sources":["../../src/core/QueryInfo.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGrD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAO3C,OAAO,EACL,aAAa,EAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,oBAAY,eAAe,GAAG,IAAI,CAAC,SAAS,EACxC,WAAW,GACX,eAAe,GACf,cAAc,GACd,eAAe,CAChB,CAAC;AA6CJ,qBAAa,SAAS;IAWR,OAAO,CAAC,KAAK;IAVzB,SAAS,qBAA4B;IACrC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAQ;IACrC,aAAa,SAAK;IAClB,aAAa,kCAAqC;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC5C,OAAO,UAAS;gBAEI,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC;IAcpC,IAAI,CAAC,KAAK,EAAE;QACjB,QAAQ,EAAE,YAAY,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;QAI3C,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,eAAe,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;QACvC,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI;IA+BR,OAAO,CAAC,KAAK,CAAkB;IAE/B,OAAO,CAAC,aAAa,CAAC,CAAgC;IAEtD,OAAO,CAAC,IAAI,CAAsC;IAElD,KAAK;IAML,OAAO,CAAC,SAAS,kCAAiB,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;IAe1D,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI;IAY1C,SAAgB,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IACpE,OAAO,CAAC,UAAU,CAAC,CAAgB;IAEnC,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI;IA4BlD,MAAM;IAUN,OAAO,CAAC,YAAY;IAiBb,IAAI;IAkBX,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,SAAS,CAAC,CAAqB;IAEvC,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,SAAS,CAAC,CAIhB;IAEF,OAAO,CAAC,WAAW;IAgBZ,UAAU,CAAC,CAAC,EACjB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAC3B,WAAW,GACX,aAAa,GACb,aAAa,CAAC,EAClB,eAAe,EAAE,OAAO;IA0GnB,SAAS;IAKT,SAAS,CAAC,KAAK,EAAE,WAAW;CAgBpC;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,WAAW,GAAE,WAAoB,WAUlC"}
package/core/QueryInfo.js CHANGED
@@ -60,6 +60,11 @@ var QueryInfo = (function () {
60
60
  }
61
61
  return this;
62
62
  };
63
+ QueryInfo.prototype.reset = function () {
64
+ cancelNotifyTimeout(this);
65
+ this.diff = null;
66
+ this.dirty = false;
67
+ };
63
68
  QueryInfo.prototype.getDiff = function (variables) {
64
69
  if (variables === void 0) { variables = this.variables; }
65
70
  if (this.diff && equal(variables, this.variables)) {
@@ -171,11 +176,11 @@ var QueryInfo = (function () {
171
176
  QueryInfo.prototype.markResult = function (result, options, allowCacheWrite) {
172
177
  var _this = this;
173
178
  this.graphQLErrors = isNonEmptyArray(result.errors) ? result.errors : [];
174
- cancelNotifyTimeout(this);
179
+ this.reset();
175
180
  if (options.fetchPolicy === 'no-cache') {
176
181
  this.diff = { result: result.data, complete: true };
177
182
  }
178
- else if (allowCacheWrite) {
183
+ else if (!this.stopped && allowCacheWrite) {
179
184
  if (shouldWriteResult(result, options.errorPolicy)) {
180
185
  this.cache.performTransaction(function (cache) {
181
186
  if (_this.shouldWrite(result, options.variables)) {
@@ -223,7 +228,7 @@ var QueryInfo = (function () {
223
228
  QueryInfo.prototype.markError = function (error) {
224
229
  this.networkStatus = NetworkStatus.error;
225
230
  this.lastWrite = void 0;
226
- cancelNotifyTimeout(this);
231
+ this.reset();
227
232
  if (error.graphQLErrors) {
228
233
  this.graphQLErrors = error.graphQLErrors;
229
234
  }