@apollo/client 3.5.10 → 3.6.9

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 (156) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -5
  3. package/apollo-client.cjs +563 -375
  4. package/apollo-client.cjs.map +1 -1
  5. package/apollo-client.min.cjs +1 -1
  6. package/cache/cache.cjs +10 -11
  7. package/cache/cache.cjs.map +1 -1
  8. package/cache/cache.cjs.native.js +2288 -0
  9. package/cache/inmemory/policies.js +1 -1
  10. package/cache/inmemory/policies.js.map +1 -1
  11. package/cache/inmemory/readFromStore.d.ts.map +1 -1
  12. package/cache/inmemory/readFromStore.js +10 -11
  13. package/cache/inmemory/readFromStore.js.map +1 -1
  14. package/core/ApolloClient.d.ts +2 -3
  15. package/core/ApolloClient.d.ts.map +1 -1
  16. package/core/ApolloClient.js +4 -8
  17. package/core/ApolloClient.js.map +1 -1
  18. package/core/ObservableQuery.d.ts +10 -4
  19. package/core/ObservableQuery.d.ts.map +1 -1
  20. package/core/ObservableQuery.js +101 -46
  21. package/core/ObservableQuery.js.map +1 -1
  22. package/core/QueryInfo.d.ts.map +1 -1
  23. package/core/QueryInfo.js +4 -2
  24. package/core/QueryInfo.js.map +1 -1
  25. package/core/QueryManager.d.ts +5 -2
  26. package/core/QueryManager.d.ts.map +1 -1
  27. package/core/QueryManager.js +36 -27
  28. package/core/QueryManager.js.map +1 -1
  29. package/core/core.cjs +148 -90
  30. package/core/core.cjs.map +1 -1
  31. package/core/core.cjs.native.js +2146 -0
  32. package/core/index.d.ts +1 -1
  33. package/core/index.d.ts.map +1 -1
  34. package/core/index.js +1 -1
  35. package/core/index.js.map +1 -1
  36. package/core/watchQueryOptions.d.ts +9 -1
  37. package/core/watchQueryOptions.d.ts.map +1 -1
  38. package/core/watchQueryOptions.js.map +1 -1
  39. package/errors/errors.cjs.native.js +48 -0
  40. package/invariantErrorCodes.js +1 -1
  41. package/link/batch/batch.cjs +46 -37
  42. package/link/batch/batch.cjs.map +1 -1
  43. package/link/batch/batch.cjs.native.js +160 -0
  44. package/link/batch/batching.d.ts +2 -6
  45. package/link/batch/batching.d.ts.map +1 -1
  46. package/link/batch/batching.js +46 -37
  47. package/link/batch/batching.js.map +1 -1
  48. package/link/batch-http/batch-http.cjs.native.js +127 -0
  49. package/link/context/context.cjs.native.js +38 -0
  50. package/link/core/core.cjs.native.js +121 -0
  51. package/link/error/error.cjs.native.js +90 -0
  52. package/link/http/http.cjs.native.js +320 -0
  53. package/link/http/selectHttpOptionsAndBody.d.ts.map +1 -1
  54. package/link/http/selectHttpOptionsAndBody.js.map +1 -1
  55. package/link/persisted-queries/index.d.ts +2 -1
  56. package/link/persisted-queries/index.d.ts.map +1 -1
  57. package/link/persisted-queries/index.js +26 -13
  58. package/link/persisted-queries/index.js.map +1 -1
  59. package/link/persisted-queries/persisted-queries.cjs +25 -12
  60. package/link/persisted-queries/persisted-queries.cjs.map +1 -1
  61. package/link/persisted-queries/persisted-queries.cjs.native.js +174 -0
  62. package/link/retry/retry.cjs.native.js +170 -0
  63. package/link/schema/schema.cjs.native.js +56 -0
  64. package/link/subscriptions/subscriptions.cjs.native.js +45 -0
  65. package/link/utils/utils.cjs.native.js +115 -0
  66. package/link/ws/ws.cjs.native.js +28 -0
  67. package/main.cjs.native.js +16 -0
  68. package/package.json +30 -27
  69. package/react/components/components.cjs.native.js +79 -0
  70. package/react/context/ApolloConsumer.js +2 -2
  71. package/react/context/ApolloProvider.js +2 -2
  72. package/react/context/context.cjs +4 -4
  73. package/react/context/context.cjs.map +1 -1
  74. package/react/context/context.cjs.native.js +67 -0
  75. package/react/hoc/hoc.cjs.native.js +325 -0
  76. package/react/hooks/hooks.cjs +376 -253
  77. package/react/hooks/hooks.cjs.map +1 -1
  78. package/react/hooks/hooks.cjs.native.js +623 -0
  79. package/react/hooks/index.d.ts +1 -1
  80. package/react/hooks/index.d.ts.map +1 -1
  81. package/react/hooks/index.js +1 -1
  82. package/react/hooks/index.js.map +1 -1
  83. package/react/hooks/useLazyQuery.d.ts +2 -2
  84. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  85. package/react/hooks/useLazyQuery.js +26 -21
  86. package/react/hooks/useLazyQuery.js.map +1 -1
  87. package/react/hooks/useMutation.d.ts.map +1 -1
  88. package/react/hooks/useMutation.js +13 -10
  89. package/react/hooks/useMutation.js.map +1 -1
  90. package/react/hooks/useQuery.d.ts +37 -2
  91. package/react/hooks/useQuery.d.ts.map +1 -1
  92. package/react/hooks/useQuery.js +256 -206
  93. package/react/hooks/useQuery.js.map +1 -1
  94. package/react/hooks/useSubscription.d.ts.map +1 -1
  95. package/react/hooks/useSubscription.js +17 -7
  96. package/react/hooks/useSubscription.js.map +1 -1
  97. package/react/hooks/useSyncExternalStore.d.ts +4 -0
  98. package/react/hooks/useSyncExternalStore.d.ts.map +1 -0
  99. package/react/hooks/useSyncExternalStore.js +48 -0
  100. package/react/hooks/useSyncExternalStore.js.map +1 -0
  101. package/react/parser/index.d.ts.map +1 -1
  102. package/react/parser/index.js +24 -10
  103. package/react/parser/index.js.map +1 -1
  104. package/react/parser/parser.cjs +24 -10
  105. package/react/parser/parser.cjs.map +1 -1
  106. package/react/parser/parser.cjs.native.js +103 -0
  107. package/react/react.cjs.native.js +22 -0
  108. package/react/ssr/RenderPromises.d.ts +3 -2
  109. package/react/ssr/RenderPromises.d.ts.map +1 -1
  110. package/react/ssr/RenderPromises.js +25 -3
  111. package/react/ssr/RenderPromises.js.map +1 -1
  112. package/react/ssr/ssr.cjs +25 -3
  113. package/react/ssr/ssr.cjs.map +1 -1
  114. package/react/ssr/ssr.cjs.native.js +150 -0
  115. package/react/types/types.d.ts +10 -11
  116. package/react/types/types.d.ts.map +1 -1
  117. package/react/types/types.js.map +1 -1
  118. package/testing/core/core.cjs.native.js +288 -0
  119. package/testing/core/mocking/mockFetch.js +1 -1
  120. package/testing/core/mocking/mockFetch.js.map +1 -1
  121. package/testing/core/mocking/mockQueryManager.js +1 -1
  122. package/testing/core/mocking/mockWatchQuery.js +1 -1
  123. package/testing/core/wrap.js +1 -1
  124. package/testing/testing.cjs.native.js +58 -0
  125. package/utilities/common/canUse.d.ts +2 -0
  126. package/utilities/common/canUse.d.ts.map +1 -1
  127. package/utilities/common/canUse.js +6 -2
  128. package/utilities/common/canUse.js.map +1 -1
  129. package/utilities/common/mergeDeep.d.ts.map +1 -1
  130. package/utilities/common/mergeDeep.js +8 -11
  131. package/utilities/common/mergeDeep.js.map +1 -1
  132. package/utilities/common/mergeOptions.d.ts +5 -0
  133. package/utilities/common/mergeOptions.d.ts.map +1 -0
  134. package/utilities/common/mergeOptions.js +8 -0
  135. package/utilities/common/mergeOptions.js.map +1 -0
  136. package/utilities/globals/global.js +1 -2
  137. package/utilities/globals/globals.cjs.native.js +56 -0
  138. package/utilities/graphql/transform.d.ts +2 -2
  139. package/utilities/graphql/transform.d.ts.map +1 -1
  140. package/utilities/graphql/transform.js +1 -1
  141. package/utilities/graphql/transform.js.map +1 -1
  142. package/utilities/index.d.ts +1 -0
  143. package/utilities/index.d.ts.map +1 -1
  144. package/utilities/index.js +1 -0
  145. package/utilities/index.js.map +1 -1
  146. package/utilities/observables/Concast.d.ts +1 -0
  147. package/utilities/observables/Concast.d.ts.map +1 -1
  148. package/utilities/observables/Concast.js +5 -2
  149. package/utilities/observables/Concast.js.map +1 -1
  150. package/utilities/policies/pagination.d.ts.map +1 -1
  151. package/utilities/policies/pagination.js +9 -7
  152. package/utilities/policies/pagination.js.map +1 -1
  153. package/utilities/utilities.cjs +37 -23
  154. package/utilities/utilities.cjs.map +1 -1
  155. package/utilities/utilities.cjs.native.js +1281 -0
  156. package/version.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Concast.js","sourceRoot":"","sources":["../../../src/utilities/observables/Concast.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, Observer, ObservableSubscription, Subscriber } from \"./Observable\";\nimport { iterateObserversSafely } from \"./iteration\";\nimport { fixObservableSubclass } from \"./subclassing\";\n\ntype MaybeAsync<T> = T | PromiseLike<T>;\n\nfunction isPromiseLike<T>(value: MaybeAsync<T>): value is PromiseLike<T> {\n return value && typeof (value as any).then === \"function\";\n}\n\n// Any individual Source<T> can be an Observable<T> or a promise for one.\ntype Source<T> = MaybeAsync<Observable<T>>;\n\nexport type ConcastSourcesIterable<T> = Iterable<Source<T>>;\n\n// A Concast<T> observable concatenates the given sources into a single\n// non-overlapping sequence of Ts, automatically unwrapping any promises,\n// and broadcasts the T elements of that sequence to any number of\n// subscribers, all without creating a bunch of intermediary Observable\n// wrapper objects.\n//\n// Even though any number of observers can subscribe to the Concast, each\n// source observable is guaranteed to receive at most one subscribe call,\n// and the results are multicast to all observers.\n//\n// In addition to broadcasting every next/error message to this.observers,\n// the Concast stores the most recent message using this.latest, so any\n// new observers can immediately receive the latest message, even if it\n// was originally delivered in the past. This behavior means we can assume\n// every active observer in this.observers has received the same most\n// recent message.\n//\n// With the exception of this.latest replay, a Concast is a \"hot\"\n// observable in the sense that it does not replay past results from the\n// beginning of time for each new observer.\n//\n// Could we have used some existing RxJS class instead? Concast<T> is\n// similar to a BehaviorSubject<T>, because it is multicast and redelivers\n// the latest next/error message to new subscribers. Unlike Subject<T>,\n// Concast<T> does not expose an Observer<T> interface (this.handlers is\n// intentionally private), since Concast<T> gets its inputs from the\n// concatenated sources. If we ever switch to RxJS, there may be some\n// value in reusing their code, but for now we use zen-observable, which\n// does not contain any Subject implementations.\nexport class Concast<T> extends Observable<T> {\n // Active observers receiving broadcast messages. Thanks to this.latest,\n // we can assume all observers in this Set have received the same most\n // recent message, though possibly at different times in the past.\n private observers = new Set<Observer<T>>();\n\n // This property starts off undefined to indicate the initial\n // subscription has not yet begun, then points to each source\n // subscription in turn, and finally becomes null after the sources have\n // been exhausted. After that, it stays null.\n private sub?: ObservableSubscription | null;\n\n // Not only can the individual elements of the iterable be promises, but\n // also the iterable itself can be wrapped in a promise.\n constructor(sources: MaybeAsync<ConcastSourcesIterable<T>> | Subscriber<T>) {\n super(observer => {\n this.addObserver(observer);\n return () => this.removeObserver(observer);\n });\n\n // Suppress rejection warnings for this.promise, since it's perfectly\n // acceptable to pay no attention to this.promise if you're consuming\n // the results through the normal observable API.\n this.promise.catch(_ => {});\n\n // If someone accidentally tries to create a Concast using a subscriber\n // function, recover by creating an Observable from that subscriber and\n // using it as the source.\n if (typeof sources === \"function\") {\n sources = [new Observable(sources)];\n }\n\n if (isPromiseLike(sources)) {\n sources.then(\n iterable => this.start(iterable),\n this.handlers.error,\n );\n } else {\n this.start(sources);\n }\n }\n\n // A consumable array of source observables, incrementally consumed\n // each time this.handlers.complete is called.\n private sources: Source<T>[];\n\n private start(sources: ConcastSourcesIterable<T>) {\n if (this.sub !== void 0) return;\n\n // In practice, sources is most often simply an Array of observables.\n // TODO Consider using sources[Symbol.iterator]() to take advantage\n // of the laziness of non-Array iterables.\n this.sources = Array.from(sources);\n\n // Calling this.handlers.complete() kicks off consumption of the first\n // source observable. It's tempting to do this step lazily in\n // addObserver, but this.promise can be accessed without calling\n // addObserver, so consumption needs to begin eagerly.\n this.handlers.complete();\n }\n\n private deliverLastMessage(observer: Observer<T>) {\n if (this.latest) {\n const nextOrError = this.latest[0];\n const method = observer[nextOrError];\n if (method) {\n method.call(observer, this.latest[1]);\n }\n // If the subscription is already closed, and the last message was\n // a 'next' message, simulate delivery of the final 'complete'\n // message again.\n if (this.sub === null &&\n nextOrError === \"next\" &&\n observer.complete) {\n observer.complete();\n }\n }\n }\n\n // Note: cleanup observers do not count towards this total.\n private addCount = 0;\n\n public addObserver(observer: Observer<T>) {\n if (!this.observers.has(observer)) {\n // Immediately deliver the most recent message, so we can always\n // be sure all observers have the latest information.\n this.deliverLastMessage(observer);\n this.observers.add(observer);\n ++this.addCount;\n }\n }\n\n public removeObserver(\n observer: Observer<T>,\n quietly?: boolean,\n ) {\n if (this.observers.delete(observer) &&\n --this.addCount < 1 &&\n !quietly) {\n // In case there are still any cleanup observers in this.observers,\n // and no error or completion has been broadcast yet, make sure\n // those observers receive an error that terminates them.\n this.handlers.error(new Error(\"Observable cancelled prematurely\"));\n }\n }\n\n // Any Concast object can be trivially converted to a Promise, without\n // having to create a new wrapper Observable. This promise provides an\n // easy way to observe the final state of the Concast.\n private resolve: (result?: T | PromiseLike<T>) => void;\n private reject: (reason: any) => void;\n public readonly promise = new Promise<T>((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n\n // Name and argument of the most recently invoked observer method, used\n // to deliver latest results immediately to new observers.\n private latest?: [\"next\" | \"error\", any];\n\n // Bound handler functions that can be reused for every internal\n // subscription.\n private handlers = {\n next: (result: T) => {\n if (this.sub !== null) {\n this.latest = [\"next\", result];\n iterateObserversSafely(this.observers, \"next\", result);\n }\n },\n\n error: (error: any) => {\n const { sub } = this;\n if (sub !== null) {\n // Delay unsubscribing from the underlying subscription slightly,\n // so that immediately subscribing another observer can keep the\n // subscription active.\n if (sub) setTimeout(() => sub.unsubscribe());\n this.sub = null;\n this.latest = [\"error\", error];\n this.reject(error);\n iterateObserversSafely(this.observers, \"error\", error);\n }\n },\n\n complete: () => {\n if (this.sub !== null) {\n const value = this.sources.shift();\n if (!value) {\n this.sub = null;\n if (this.latest &&\n this.latest[0] === \"next\") {\n this.resolve(this.latest[1]);\n } else {\n this.resolve();\n }\n // We do not store this.latest = [\"complete\"], because doing so\n // discards useful information about the previous next (or\n // error) message. Instead, if new observers subscribe after\n // this Concast has completed, they will receive the final\n // 'next' message (unless there was an error) immediately\n // followed by a 'complete' message (see addObserver).\n iterateObserversSafely(this.observers, \"complete\");\n } else if (isPromiseLike(value)) {\n value.then(obs => this.sub = obs.subscribe(this.handlers));\n } else {\n this.sub = value.subscribe(this.handlers);\n }\n }\n },\n };\n\n public cleanup(callback: () => any) {\n let called = false;\n const once = () => {\n if (!called) {\n called = true;\n // Removing a cleanup observer should not unsubscribe from the\n // underlying Observable, so the only removeObserver behavior we\n // need here is to delete observer from this.observers.\n this.observers.delete(observer);\n callback();\n }\n }\n const observer = {\n next: once,\n error: once,\n complete: once,\n };\n const count = this.addCount;\n this.addObserver(observer);\n // Normally addObserver increments this.addCount, but we can \"hide\"\n // cleanup observers by restoring this.addCount to its previous value\n // after adding any cleanup observer.\n this.addCount = count;\n }\n\n // A public way to abort observation and broadcast.\n public cancel = (reason: any) => {\n this.reject(reason);\n this.sources = [];\n this.handlers.complete();\n }\n}\n\n// Necessary because the Concast constructor has a different signature\n// than the Observable constructor.\nfixObservableSubclass(Concast);\n"]}
1
+ {"version":3,"file":"Concast.js","sourceRoot":"","sources":["../../../src/utilities/observables/Concast.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, Observer, ObservableSubscription, Subscriber } from \"./Observable\";\nimport { iterateObserversSafely } from \"./iteration\";\nimport { fixObservableSubclass } from \"./subclassing\";\n\ntype MaybeAsync<T> = T | PromiseLike<T>;\n\nfunction isPromiseLike<T>(value: MaybeAsync<T>): value is PromiseLike<T> {\n return value && typeof (value as any).then === \"function\";\n}\n\n// Any individual Source<T> can be an Observable<T> or a promise for one.\ntype Source<T> = MaybeAsync<Observable<T>>;\n\nexport type ConcastSourcesIterable<T> = Iterable<Source<T>>;\nexport type ConcastSourcesArray<T> = Array<Source<T>>;\n\n// A Concast<T> observable concatenates the given sources into a single\n// non-overlapping sequence of Ts, automatically unwrapping any promises,\n// and broadcasts the T elements of that sequence to any number of\n// subscribers, all without creating a bunch of intermediary Observable\n// wrapper objects.\n//\n// Even though any number of observers can subscribe to the Concast, each\n// source observable is guaranteed to receive at most one subscribe call,\n// and the results are multicast to all observers.\n//\n// In addition to broadcasting every next/error message to this.observers,\n// the Concast stores the most recent message using this.latest, so any\n// new observers can immediately receive the latest message, even if it\n// was originally delivered in the past. This behavior means we can assume\n// every active observer in this.observers has received the same most\n// recent message.\n//\n// With the exception of this.latest replay, a Concast is a \"hot\"\n// observable in the sense that it does not replay past results from the\n// beginning of time for each new observer.\n//\n// Could we have used some existing RxJS class instead? Concast<T> is\n// similar to a BehaviorSubject<T>, because it is multicast and redelivers\n// the latest next/error message to new subscribers. Unlike Subject<T>,\n// Concast<T> does not expose an Observer<T> interface (this.handlers is\n// intentionally private), since Concast<T> gets its inputs from the\n// concatenated sources. If we ever switch to RxJS, there may be some\n// value in reusing their code, but for now we use zen-observable, which\n// does not contain any Subject implementations.\nexport class Concast<T> extends Observable<T> {\n // Active observers receiving broadcast messages. Thanks to this.latest,\n // we can assume all observers in this Set have received the same most\n // recent message, though possibly at different times in the past.\n private observers = new Set<Observer<T>>();\n\n // This property starts off undefined to indicate the initial\n // subscription has not yet begun, then points to each source\n // subscription in turn, and finally becomes null after the sources have\n // been exhausted. After that, it stays null.\n private sub?: ObservableSubscription | null;\n\n // Not only can the individual elements of the iterable be promises, but\n // also the iterable itself can be wrapped in a promise.\n constructor(sources: MaybeAsync<ConcastSourcesIterable<T>> | Subscriber<T>) {\n super(observer => {\n this.addObserver(observer);\n return () => this.removeObserver(observer);\n });\n\n // Suppress rejection warnings for this.promise, since it's perfectly\n // acceptable to pay no attention to this.promise if you're consuming\n // the results through the normal observable API.\n this.promise.catch(_ => {});\n\n // If someone accidentally tries to create a Concast using a subscriber\n // function, recover by creating an Observable from that subscriber and\n // using it as the source.\n if (typeof sources === \"function\") {\n sources = [new Observable(sources)];\n }\n\n if (isPromiseLike(sources)) {\n sources.then(\n iterable => this.start(iterable),\n this.handlers.error,\n );\n } else {\n this.start(sources);\n }\n }\n\n // A consumable array of source observables, incrementally consumed\n // each time this.handlers.complete is called.\n private sources: Source<T>[];\n\n private start(sources: ConcastSourcesIterable<T>) {\n if (this.sub !== void 0) return;\n\n // In practice, sources is most often simply an Array of observables.\n // TODO Consider using sources[Symbol.iterator]() to take advantage\n // of the laziness of non-Array iterables.\n this.sources = Array.from(sources);\n\n // Calling this.handlers.complete() kicks off consumption of the first\n // source observable. It's tempting to do this step lazily in\n // addObserver, but this.promise can be accessed without calling\n // addObserver, so consumption needs to begin eagerly.\n this.handlers.complete();\n }\n\n private deliverLastMessage(observer: Observer<T>) {\n if (this.latest) {\n const nextOrError = this.latest[0];\n const method = observer[nextOrError];\n if (method) {\n method.call(observer, this.latest[1]);\n }\n // If the subscription is already closed, and the last message was\n // a 'next' message, simulate delivery of the final 'complete'\n // message again.\n if (this.sub === null &&\n nextOrError === \"next\" &&\n observer.complete) {\n observer.complete();\n }\n }\n }\n\n // Note: cleanup observers do not count towards this total.\n private addCount = 0;\n\n public addObserver(observer: Observer<T>) {\n if (!this.observers.has(observer)) {\n // Immediately deliver the most recent message, so we can always\n // be sure all observers have the latest information.\n this.deliverLastMessage(observer);\n this.observers.add(observer);\n ++this.addCount;\n }\n }\n\n public removeObserver(\n observer: Observer<T>,\n quietly?: boolean,\n ) {\n if (this.observers.delete(observer) &&\n --this.addCount < 1 &&\n !quietly) {\n // In case there are still any cleanup observers in this.observers, and no\n // error or completion has been broadcast yet, make sure those observers\n // have a chance to run and then remove themselves from this.observers.\n this.handlers.complete();\n }\n }\n\n // Any Concast object can be trivially converted to a Promise, without\n // having to create a new wrapper Observable. This promise provides an\n // easy way to observe the final state of the Concast.\n private resolve: (result?: T | PromiseLike<T>) => void;\n private reject: (reason: any) => void;\n public readonly promise = new Promise<T>((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n\n // Name and argument of the most recently invoked observer method, used\n // to deliver latest results immediately to new observers.\n private latest?: [\"next\" | \"error\", any];\n\n // Bound handler functions that can be reused for every internal\n // subscription.\n private handlers = {\n next: (result: T) => {\n if (this.sub !== null) {\n this.latest = [\"next\", result];\n iterateObserversSafely(this.observers, \"next\", result);\n }\n },\n\n error: (error: any) => {\n const { sub } = this;\n if (sub !== null) {\n // Delay unsubscribing from the underlying subscription slightly,\n // so that immediately subscribing another observer can keep the\n // subscription active.\n if (sub) setTimeout(() => sub.unsubscribe());\n this.sub = null;\n this.latest = [\"error\", error];\n this.reject(error);\n iterateObserversSafely(this.observers, \"error\", error);\n }\n },\n\n complete: () => {\n const { sub } = this;\n if (sub !== null) {\n const value = this.sources.shift();\n if (!value) {\n if (sub) setTimeout(() => sub.unsubscribe());\n this.sub = null;\n if (this.latest &&\n this.latest[0] === \"next\") {\n this.resolve(this.latest[1]);\n } else {\n this.resolve();\n }\n // We do not store this.latest = [\"complete\"], because doing so\n // discards useful information about the previous next (or\n // error) message. Instead, if new observers subscribe after\n // this Concast has completed, they will receive the final\n // 'next' message (unless there was an error) immediately\n // followed by a 'complete' message (see addObserver).\n iterateObserversSafely(this.observers, \"complete\");\n } else if (isPromiseLike(value)) {\n value.then(obs => this.sub = obs.subscribe(this.handlers));\n } else {\n this.sub = value.subscribe(this.handlers);\n }\n }\n },\n };\n\n public cleanup(callback: () => any) {\n let called = false;\n const once = () => {\n if (!called) {\n called = true;\n // Removing a cleanup observer should not unsubscribe from the\n // underlying Observable, so the only removeObserver behavior we\n // need here is to delete observer from this.observers.\n this.observers.delete(observer);\n callback();\n }\n }\n const observer = {\n next: once,\n error: once,\n complete: once,\n };\n const count = this.addCount;\n this.addObserver(observer);\n // Normally addObserver increments this.addCount, but we can \"hide\"\n // cleanup observers by restoring this.addCount to its previous value\n // after adding any cleanup observer.\n this.addCount = count;\n }\n\n // A public way to abort observation and broadcast.\n public cancel = (reason: any) => {\n this.reject(reason);\n this.sources = [];\n this.handlers.complete();\n }\n}\n\n// Necessary because the Concast constructor has a different signature\n// than the Observable constructor.\nfixObservableSubclass(Concast);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/utilities/policies/pagination.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGrD,aAAK,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AAI3C,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,SAAS,EAC5C,OAAO,GAAE,OAAe,GACvB,WAAW,CAAC,CAAC,EAAE,CAAC,CAUlB;AAMD,wBAAgB,qBAAqB,CAAC,CAAC,GAAG,SAAS,EACjD,OAAO,GAAE,OAAe,GACvB,WAAW,CAAC,CAAC,EAAE,CAAC,CAqBlB;AASD,oBAAY,UAAU,CAAC,KAAK,IAAI;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC;CACb,GAAG,CAAC,SAAS,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEtC,oBAAY,cAAc,GAAG;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,cAAc,CAAC,KAAK,IAAI,QAAQ,CAAC;IAC3C,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3B,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC,CAAC;AAEH,oBAAY,cAAc,CAAC,KAAK,IAAI;IAClC,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF,oBAAY,gBAAgB,CAAC,KAAK,IAAI,WAAW,CAC/C,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,EAC5B,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,EAC5B,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAC7B,CAAC;AAKF,wBAAgB,oBAAoB,CAAC,KAAK,GAAG,SAAS,EACpD,OAAO,GAAE,OAAe,GACvB,gBAAgB,CAAC,KAAK,CAAC,CA2KzB"}
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/utilities/policies/pagination.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGrD,aAAK,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AAI3C,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,SAAS,EAC5C,OAAO,GAAE,OAAe,GACvB,WAAW,CAAC,CAAC,EAAE,CAAC,CAUlB;AAMD,wBAAgB,qBAAqB,CAAC,CAAC,GAAG,SAAS,EACjD,OAAO,GAAE,OAAe,GACvB,WAAW,CAAC,CAAC,EAAE,CAAC,CAyBlB;AASD,oBAAY,UAAU,CAAC,KAAK,IAAI;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC;CACb,GAAG,CAAC,SAAS,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEtC,oBAAY,cAAc,GAAG;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,cAAc,CAAC,KAAK,IAAI,QAAQ,CAAC;IAC3C,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3B,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC,CAAC;AAEH,oBAAY,cAAc,CAAC,KAAK,IAAI;IAClC,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF,oBAAY,gBAAgB,CAAC,KAAK,IAAI,WAAW,CAC/C,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,EAC5B,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,EAC5B,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAC7B,CAAC;AAKF,wBAAgB,oBAAoB,CAAC,KAAK,GAAG,SAAS,EACpD,OAAO,GAAE,OAAe,GACvB,gBAAgB,CAAC,KAAK,CAAC,CA2KzB"}
@@ -17,14 +17,16 @@ export function offsetLimitPagination(keyArgs) {
17
17
  merge: function (existing, incoming, _a) {
18
18
  var args = _a.args;
19
19
  var merged = existing ? existing.slice(0) : [];
20
- if (args) {
21
- var _b = args.offset, offset = _b === void 0 ? 0 : _b;
22
- for (var i = 0; i < incoming.length; ++i) {
23
- merged[offset + i] = incoming[i];
20
+ if (incoming) {
21
+ if (args) {
22
+ var _b = args.offset, offset = _b === void 0 ? 0 : _b;
23
+ for (var i = 0; i < incoming.length; ++i) {
24
+ merged[offset + i] = incoming[i];
25
+ }
26
+ }
27
+ else {
28
+ merged.push.apply(merged, incoming);
24
29
  }
25
- }
26
- else {
27
- merged.push.apply(merged, incoming);
28
30
  }
29
31
  return merged;
30
32
  },
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/utilities/policies/pagination.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAMhD,MAAM,UAAU,gBAAgB,CAC9B,OAAwB;IAAxB,wBAAA,EAAA,eAAwB;IAExB,OAAO;QACL,OAAO,SAAA;QACP,KAAK,YAAC,QAAQ,EAAE,QAAQ;YACtB,OAAO,QAAQ,CAAC,CAAC,iCACZ,QAAQ,SACR,QAAQ,QACX,CAAC,CAAC,QAAQ,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,qBAAqB,CACnC,OAAwB;IAAxB,wBAAA,EAAA,eAAwB;IAExB,OAAO;QACL,OAAO,SAAA;QACP,KAAK,YAAC,QAAQ,EAAE,QAAQ,EAAE,EAAQ;gBAAN,IAAI,UAAA;YAC9B,IAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,IAAI,IAAI,EAAE;gBAEA,IAAA,KAAe,IAAI,OAAT,EAAV,MAAM,mBAAG,CAAC,KAAA,CAAU;gBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;oBACxC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;iBAClC;aACF;iBAAM;gBAKL,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aACrC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAwCD,MAAM,UAAU,oBAAoB,CAClC,OAAwB;IAAxB,wBAAA,EAAA,eAAwB;IAExB,OAAO;QACL,OAAO,SAAA;QAEP,IAAI,EAAJ,UAAK,QAAQ,EAAE,EAAsB;gBAApB,OAAO,aAAA,EAAE,SAAS,eAAA;YACjC,IAAI,CAAC,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAE/B,IAAM,KAAK,GAAwB,EAAE,CAAC;YACtC,IAAI,eAAe,GAAG,EAAE,CAAC;YACzB,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gBAGzB,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE;oBACpC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjB,IAAI,IAAI,CAAC,MAAM,EAAE;wBACf,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;wBACvD,cAAc,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC;qBAChD;iBACF;YACH,CAAC,CAAC,CAAC;YAEG,IAAA,KAGF,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAFzB,WAAW,iBAAA,EACX,SAAS,eACgB,CAAC;YAE5B,6BAIK,SAAS,CAAC,QAAQ,CAAC,KACtB,KAAK,OAAA,EACL,QAAQ,wBACH,QAAQ,CAAC,QAAQ,KAGpB,WAAW,EAAE,WAAW,IAAI,eAAe,EAC3C,SAAS,EAAE,SAAS,IAAI,cAAc,OAExC;QACJ,CAAC;QAED,KAAK,EAAL,UAAM,QAAQ,EAAE,QAAQ,EAAE,EAAgC;gBAA9B,IAAI,UAAA,EAAE,WAAW,iBAAA,EAAE,SAAS,eAAA;YACtD,IAAI,CAAC,QAAQ,EAAE;gBACb,QAAQ,GAAG,aAAa,EAAE,CAAC;aAC5B;YAED,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO,QAAQ,CAAC;aACjB;YAED,IAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI;gBAC5D,IAAI,WAAW,CAAC,IAAI,gBAAQ,IAAI,CAAE,CAAC,EAAE;oBAGnC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAS,QAAQ,EAAE,IAAI,CAAC,CAAC;iBACjD;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAER,IAAI,QAAQ,CAAC,QAAQ,EAAE;gBACb,IAAA,UAAQ,GAAK,QAAQ,SAAb,CAAc;gBACtB,IAAA,WAAW,GAAgB,UAAQ,YAAxB,EAAE,SAAS,GAAK,UAAQ,UAAb,CAAc;gBAC5C,IAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAGzD,IAAI,SAAS,IAAI,WAAW,EAAE;oBAC5B,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC;iBAChC;gBACD,IAAI,QAAQ,IAAI,SAAS,EAAE;oBACzB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;iBAC7B;gBAGD,IAAM,WAAW,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC;gBAClD,IAAI,WAAW,IAAI,CAAC,WAAW,EAAE;oBAC/B,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE;wBAC7B,QAAQ,EAAE;4BACR,WAAW,EAAE,WAAW;yBACzB;qBACF,CAAC,CAAC;iBACJ;gBACD,IAAM,UAAU,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;gBAC/C,IAAI,UAAU,IAAI,CAAC,SAAS,EAAE;oBAC5B,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE;wBAC7B,QAAQ,EAAE;4BACR,SAAS,EAAE,UAAU;yBACtB;qBACF,CAAC,CAAC;iBACJ;aACF;YAED,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC5B,IAAI,MAAM,GAAkB,EAAE,CAAC;YAE/B,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAItB,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,EAA1B,CAA0B,CAAC,CAAC;gBACnE,IAAI,KAAK,IAAI,CAAC,EAAE;oBACd,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;iBAErC;aACF;iBAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC9B,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAA3B,CAA2B,CAAC,CAAC;gBACpE,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClD,MAAM,GAAG,EAAE,CAAC;aACb;iBAAM,IAAI,QAAQ,CAAC,KAAK,EAAE;gBAIzB,MAAM,GAAG,EAAE,CAAC;aACb;YAED,IAAM,KAAK,iDACN,MAAM,SACN,aAAa,SACb,MAAM,OACV,CAAC;YAEF,IAAM,QAAQ,yBAMT,QAAQ,CAAC,QAAQ,GACjB,QAAQ,CAAC,QAAQ,CACrB,CAAC;YAEF,IAAI,QAAQ,CAAC,QAAQ,EAAE;gBACrB,IAAM,KAIF,QAAQ,CAAC,QAAQ,EAHnB,eAAe,qBAAA,EAAE,WAAW,iBAAA,EAC5B,WAAW,iBAAA,EAAE,SAAS,eAAA,EACnB,MAAM,gBAHL,8DAIL,CAAoB,CAAC;gBAMtB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAShC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAClB,IAAI,KAAK,CAAC,KAAK,eAAe;wBAAE,QAAQ,CAAC,eAAe,GAAG,eAAe,CAAC;oBAC3E,IAAI,KAAK,CAAC,KAAK,WAAW;wBAAE,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;iBAChE;gBACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAClB,IAAI,KAAK,CAAC,KAAK,WAAW;wBAAE,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;oBAC/D,IAAI,KAAK,CAAC,KAAK,SAAS;wBAAE,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;iBAC1D;aACF;YAED,sCACK,SAAS,CAAC,QAAQ,CAAC,GACnB,SAAS,CAAC,QAAQ,CAAC,KACtB,KAAK,OAAA,EACL,QAAQ,UAAA,IACR;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAGD,IAAM,SAAS,GAAG,UAAC,GAAwB,IAAK,OAAA,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,EAAtB,CAAsB,CAAC;AACvE,IAAM,SAAS,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAExC,SAAS,aAAa;IACpB,OAAO;QACL,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE;YACR,eAAe,EAAE,KAAK;YACtB,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,EAAE;SACd;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { __rest } from \"tslib\";\n\nimport { FieldPolicy, Reference } from '../../cache';\nimport { mergeDeep } from '../common/mergeDeep';\n\ntype KeyArgs = FieldPolicy<any>[\"keyArgs\"];\n\n// A very basic pagination field policy that always concatenates new\n// results onto the existing array, without examining options.args.\nexport function concatPagination<T = Reference>(\n keyArgs: KeyArgs = false,\n): FieldPolicy<T[]> {\n return {\n keyArgs,\n merge(existing, incoming) {\n return existing ? [\n ...existing,\n ...incoming,\n ] : incoming;\n },\n };\n}\n\n// A basic field policy that uses options.args.{offset,limit} to splice\n// the incoming data into the existing array. If your arguments are called\n// something different (like args.{start,count}), feel free to copy/paste\n// this implementation and make the appropriate changes.\nexport function offsetLimitPagination<T = Reference>(\n keyArgs: KeyArgs = false,\n): FieldPolicy<T[]> {\n return {\n keyArgs,\n merge(existing, incoming, { args }) {\n const merged = existing ? existing.slice(0) : [];\n if (args) {\n // Assume an offset of 0 if args.offset omitted.\n const { offset = 0 } = args;\n for (let i = 0; i < incoming.length; ++i) {\n merged[offset + i] = incoming[i];\n }\n } else {\n // It's unusual (probably a mistake) for a paginated field not\n // to receive any arguments, so you might prefer to throw an\n // exception here, instead of recovering by appending incoming\n // onto the existing array.\n merged.push.apply(merged, incoming);\n }\n return merged;\n },\n };\n}\n\n// Whether TRelayEdge<TNode> is a normalized Reference or a non-normalized\n// object, it needs a .cursor property where the relayStylePagination\n// merge function can store cursor strings taken from pageInfo. Storing an\n// extra reference.cursor property should be safe, and is easier than\n// attempting to update the cursor field of the normalized StoreObject\n// that the reference refers to, or managing edge wrapper objects\n// (something I attempted in #7023, but abandoned because of #7088).\nexport type TRelayEdge<TNode> = {\n cursor?: string;\n node: TNode;\n} | (Reference & { cursor?: string });\n\nexport type TRelayPageInfo = {\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n startCursor: string;\n endCursor: string;\n};\n\nexport type TExistingRelay<TNode> = Readonly<{\n edges: TRelayEdge<TNode>[];\n pageInfo: TRelayPageInfo;\n}>;\n\nexport type TIncomingRelay<TNode> = {\n edges?: TRelayEdge<TNode>[];\n pageInfo?: TRelayPageInfo;\n};\n\nexport type RelayFieldPolicy<TNode> = FieldPolicy<\n TExistingRelay<TNode> | null,\n TIncomingRelay<TNode> | null,\n TIncomingRelay<TNode> | null\n>;\n\n// As proof of the flexibility of field policies, this function generates\n// one that handles Relay-style pagination, without Apollo Client knowing\n// anything about connections, edges, cursors, or pageInfo objects.\nexport function relayStylePagination<TNode = Reference>(\n keyArgs: KeyArgs = false,\n): RelayFieldPolicy<TNode> {\n return {\n keyArgs,\n\n read(existing, { canRead, readField }) {\n if (!existing) return existing;\n\n const edges: TRelayEdge<TNode>[] = [];\n let firstEdgeCursor = \"\";\n let lastEdgeCursor = \"\";\n existing.edges.forEach(edge => {\n // Edges themselves could be Reference objects, so it's important\n // to use readField to access the edge.edge.node property.\n if (canRead(readField(\"node\", edge))) {\n edges.push(edge);\n if (edge.cursor) {\n firstEdgeCursor = firstEdgeCursor || edge.cursor || \"\";\n lastEdgeCursor = edge.cursor || lastEdgeCursor;\n }\n }\n });\n\n const {\n startCursor,\n endCursor,\n } = existing.pageInfo || {};\n\n return {\n // Some implementations return additional Connection fields, such\n // as existing.totalCount. These fields are saved by the merge\n // function, so the read function should also preserve them.\n ...getExtras(existing),\n edges,\n pageInfo: {\n ...existing.pageInfo,\n // If existing.pageInfo.{start,end}Cursor are undefined or \"\", default\n // to firstEdgeCursor and/or lastEdgeCursor.\n startCursor: startCursor || firstEdgeCursor,\n endCursor: endCursor || lastEdgeCursor,\n },\n };\n },\n\n merge(existing, incoming, { args, isReference, readField }) {\n if (!existing) {\n existing = makeEmptyData();\n }\n\n if (!incoming) {\n return existing;\n }\n\n const incomingEdges = incoming.edges ? incoming.edges.map(edge => {\n if (isReference(edge = { ...edge })) {\n // In case edge is a Reference, we read out its cursor field and\n // store it as an extra property of the Reference object.\n edge.cursor = readField<string>(\"cursor\", edge);\n }\n return edge;\n }) : [];\n\n if (incoming.pageInfo) {\n const { pageInfo } = incoming;\n const { startCursor, endCursor } = pageInfo;\n const firstEdge = incomingEdges[0];\n const lastEdge = incomingEdges[incomingEdges.length - 1];\n // In case we did not request the cursor field for edges in this\n // query, we can still infer cursors from pageInfo.\n if (firstEdge && startCursor) {\n firstEdge.cursor = startCursor;\n }\n if (lastEdge && endCursor) {\n lastEdge.cursor = endCursor;\n }\n // Cursors can also come from edges, so we default\n // pageInfo.{start,end}Cursor to {first,last}Edge.cursor.\n const firstCursor = firstEdge && firstEdge.cursor;\n if (firstCursor && !startCursor) {\n incoming = mergeDeep(incoming, {\n pageInfo: {\n startCursor: firstCursor,\n },\n });\n }\n const lastCursor = lastEdge && lastEdge.cursor;\n if (lastCursor && !endCursor) {\n incoming = mergeDeep(incoming, {\n pageInfo: {\n endCursor: lastCursor,\n },\n });\n }\n }\n\n let prefix = existing.edges;\n let suffix: typeof prefix = [];\n\n if (args && args.after) {\n // This comparison does not need to use readField(\"cursor\", edge),\n // because we stored the cursor field of any Reference edges as an\n // extra property of the Reference object.\n const index = prefix.findIndex(edge => edge.cursor === args.after);\n if (index >= 0) {\n prefix = prefix.slice(0, index + 1);\n // suffix = []; // already true\n }\n } else if (args && args.before) {\n const index = prefix.findIndex(edge => edge.cursor === args.before);\n suffix = index < 0 ? prefix : prefix.slice(index);\n prefix = [];\n } else if (incoming.edges) {\n // If we have neither args.after nor args.before, the incoming\n // edges cannot be spliced into the existing edges, so they must\n // replace the existing edges. See #6592 for a motivating example.\n prefix = [];\n }\n\n const edges = [\n ...prefix,\n ...incomingEdges,\n ...suffix,\n ];\n\n const pageInfo: TRelayPageInfo = {\n // The ordering of these two ...spreads may be surprising, but it\n // makes sense because we want to combine PageInfo properties with a\n // preference for existing values, *unless* the existing values are\n // overridden by the logic below, which is permitted only when the\n // incoming page falls at the beginning or end of the data.\n ...incoming.pageInfo,\n ...existing.pageInfo,\n };\n\n if (incoming.pageInfo) {\n const {\n hasPreviousPage, hasNextPage,\n startCursor, endCursor,\n ...extras\n } = incoming.pageInfo;\n\n // If incoming.pageInfo had any extra non-standard properties,\n // assume they should take precedence over any existing properties\n // of the same name, regardless of where this page falls with\n // respect to the existing data.\n Object.assign(pageInfo, extras);\n\n // Keep existing.pageInfo.has{Previous,Next}Page unless the\n // placement of the incoming edges means incoming.hasPreviousPage\n // or incoming.hasNextPage should become the new values for those\n // properties in existing.pageInfo. Note that these updates are\n // only permitted when the beginning or end of the incoming page\n // coincides with the beginning or end of the existing data, as\n // determined using prefix.length and suffix.length.\n if (!prefix.length) {\n if (void 0 !== hasPreviousPage) pageInfo.hasPreviousPage = hasPreviousPage;\n if (void 0 !== startCursor) pageInfo.startCursor = startCursor;\n }\n if (!suffix.length) {\n if (void 0 !== hasNextPage) pageInfo.hasNextPage = hasNextPage;\n if (void 0 !== endCursor) pageInfo.endCursor = endCursor;\n }\n }\n\n return {\n ...getExtras(existing),\n ...getExtras(incoming),\n edges,\n pageInfo,\n };\n },\n };\n}\n\n// Returns any unrecognized properties of the given object.\nconst getExtras = (obj: Record<string, any>) => __rest(obj, notExtras);\nconst notExtras = [\"edges\", \"pageInfo\"];\n\nfunction makeEmptyData(): TExistingRelay<any> {\n return {\n edges: [],\n pageInfo: {\n hasPreviousPage: false,\n hasNextPage: true,\n startCursor: \"\",\n endCursor: \"\",\n },\n };\n}\n"]}
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/utilities/policies/pagination.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAMhD,MAAM,UAAU,gBAAgB,CAC9B,OAAwB;IAAxB,wBAAA,EAAA,eAAwB;IAExB,OAAO;QACL,OAAO,SAAA;QACP,KAAK,YAAC,QAAQ,EAAE,QAAQ;YACtB,OAAO,QAAQ,CAAC,CAAC,iCACZ,QAAQ,SACR,QAAQ,QACX,CAAC,CAAC,QAAQ,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,qBAAqB,CACnC,OAAwB;IAAxB,wBAAA,EAAA,eAAwB;IAExB,OAAO;QACL,OAAO,SAAA;QACP,KAAK,YAAC,QAAQ,EAAE,QAAQ,EAAE,EAAQ;gBAAN,IAAI,UAAA;YAC9B,IAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEjD,IAAI,QAAQ,EAAE;gBACZ,IAAI,IAAI,EAAE;oBAEA,IAAA,KAAe,IAAI,OAAT,EAAV,MAAM,mBAAG,CAAC,KAAA,CAAU;oBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;wBACxC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;qBAClC;iBACF;qBAAM;oBAKL,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;iBACrC;aACF;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAwCD,MAAM,UAAU,oBAAoB,CAClC,OAAwB;IAAxB,wBAAA,EAAA,eAAwB;IAExB,OAAO;QACL,OAAO,SAAA;QAEP,IAAI,EAAJ,UAAK,QAAQ,EAAE,EAAsB;gBAApB,OAAO,aAAA,EAAE,SAAS,eAAA;YACjC,IAAI,CAAC,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAE/B,IAAM,KAAK,GAAwB,EAAE,CAAC;YACtC,IAAI,eAAe,GAAG,EAAE,CAAC;YACzB,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;gBAGzB,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE;oBACpC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjB,IAAI,IAAI,CAAC,MAAM,EAAE;wBACf,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;wBACvD,cAAc,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC;qBAChD;iBACF;YACH,CAAC,CAAC,CAAC;YAEG,IAAA,KAGF,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAFzB,WAAW,iBAAA,EACX,SAAS,eACgB,CAAC;YAE5B,6BAIK,SAAS,CAAC,QAAQ,CAAC,KACtB,KAAK,OAAA,EACL,QAAQ,wBACH,QAAQ,CAAC,QAAQ,KAGpB,WAAW,EAAE,WAAW,IAAI,eAAe,EAC3C,SAAS,EAAE,SAAS,IAAI,cAAc,OAExC;QACJ,CAAC;QAED,KAAK,EAAL,UAAM,QAAQ,EAAE,QAAQ,EAAE,EAAgC;gBAA9B,IAAI,UAAA,EAAE,WAAW,iBAAA,EAAE,SAAS,eAAA;YACtD,IAAI,CAAC,QAAQ,EAAE;gBACb,QAAQ,GAAG,aAAa,EAAE,CAAC;aAC5B;YAED,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO,QAAQ,CAAC;aACjB;YAED,IAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI;gBAC5D,IAAI,WAAW,CAAC,IAAI,gBAAQ,IAAI,CAAE,CAAC,EAAE;oBAGnC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAS,QAAQ,EAAE,IAAI,CAAC,CAAC;iBACjD;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAER,IAAI,QAAQ,CAAC,QAAQ,EAAE;gBACb,IAAA,UAAQ,GAAK,QAAQ,SAAb,CAAc;gBACtB,IAAA,WAAW,GAAgB,UAAQ,YAAxB,EAAE,SAAS,GAAK,UAAQ,UAAb,CAAc;gBAC5C,IAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAGzD,IAAI,SAAS,IAAI,WAAW,EAAE;oBAC5B,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC;iBAChC;gBACD,IAAI,QAAQ,IAAI,SAAS,EAAE;oBACzB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;iBAC7B;gBAGD,IAAM,WAAW,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC;gBAClD,IAAI,WAAW,IAAI,CAAC,WAAW,EAAE;oBAC/B,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE;wBAC7B,QAAQ,EAAE;4BACR,WAAW,EAAE,WAAW;yBACzB;qBACF,CAAC,CAAC;iBACJ;gBACD,IAAM,UAAU,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;gBAC/C,IAAI,UAAU,IAAI,CAAC,SAAS,EAAE;oBAC5B,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE;wBAC7B,QAAQ,EAAE;4BACR,SAAS,EAAE,UAAU;yBACtB;qBACF,CAAC,CAAC;iBACJ;aACF;YAED,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC5B,IAAI,MAAM,GAAkB,EAAE,CAAC;YAE/B,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAItB,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,EAA1B,CAA0B,CAAC,CAAC;gBACnE,IAAI,KAAK,IAAI,CAAC,EAAE;oBACd,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;iBAErC;aACF;iBAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC9B,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAA3B,CAA2B,CAAC,CAAC;gBACpE,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClD,MAAM,GAAG,EAAE,CAAC;aACb;iBAAM,IAAI,QAAQ,CAAC,KAAK,EAAE;gBAIzB,MAAM,GAAG,EAAE,CAAC;aACb;YAED,IAAM,KAAK,iDACN,MAAM,SACN,aAAa,SACb,MAAM,OACV,CAAC;YAEF,IAAM,QAAQ,yBAMT,QAAQ,CAAC,QAAQ,GACjB,QAAQ,CAAC,QAAQ,CACrB,CAAC;YAEF,IAAI,QAAQ,CAAC,QAAQ,EAAE;gBACrB,IAAM,KAIF,QAAQ,CAAC,QAAQ,EAHnB,eAAe,qBAAA,EAAE,WAAW,iBAAA,EAC5B,WAAW,iBAAA,EAAE,SAAS,eAAA,EACnB,MAAM,gBAHL,8DAIL,CAAoB,CAAC;gBAMtB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAShC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAClB,IAAI,KAAK,CAAC,KAAK,eAAe;wBAAE,QAAQ,CAAC,eAAe,GAAG,eAAe,CAAC;oBAC3E,IAAI,KAAK,CAAC,KAAK,WAAW;wBAAE,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;iBAChE;gBACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAClB,IAAI,KAAK,CAAC,KAAK,WAAW;wBAAE,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;oBAC/D,IAAI,KAAK,CAAC,KAAK,SAAS;wBAAE,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;iBAC1D;aACF;YAED,sCACK,SAAS,CAAC,QAAQ,CAAC,GACnB,SAAS,CAAC,QAAQ,CAAC,KACtB,KAAK,OAAA,EACL,QAAQ,UAAA,IACR;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAGD,IAAM,SAAS,GAAG,UAAC,GAAwB,IAAK,OAAA,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,EAAtB,CAAsB,CAAC;AACvE,IAAM,SAAS,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAExC,SAAS,aAAa;IACpB,OAAO;QACL,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE;YACR,eAAe,EAAE,KAAK;YACtB,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,EAAE;SACd;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { __rest } from \"tslib\";\n\nimport { FieldPolicy, Reference } from '../../cache';\nimport { mergeDeep } from '../common/mergeDeep';\n\ntype KeyArgs = FieldPolicy<any>[\"keyArgs\"];\n\n// A very basic pagination field policy that always concatenates new\n// results onto the existing array, without examining options.args.\nexport function concatPagination<T = Reference>(\n keyArgs: KeyArgs = false,\n): FieldPolicy<T[]> {\n return {\n keyArgs,\n merge(existing, incoming) {\n return existing ? [\n ...existing,\n ...incoming,\n ] : incoming;\n },\n };\n}\n\n// A basic field policy that uses options.args.{offset,limit} to splice\n// the incoming data into the existing array. If your arguments are called\n// something different (like args.{start,count}), feel free to copy/paste\n// this implementation and make the appropriate changes.\nexport function offsetLimitPagination<T = Reference>(\n keyArgs: KeyArgs = false,\n): FieldPolicy<T[]> {\n return {\n keyArgs,\n merge(existing, incoming, { args }) {\n const merged = existing ? existing.slice(0) : [];\n\n if (incoming) {\n if (args) {\n // Assume an offset of 0 if args.offset omitted.\n const { offset = 0 } = args;\n for (let i = 0; i < incoming.length; ++i) {\n merged[offset + i] = incoming[i];\n }\n } else {\n // It's unusual (probably a mistake) for a paginated field not\n // to receive any arguments, so you might prefer to throw an\n // exception here, instead of recovering by appending incoming\n // onto the existing array.\n merged.push.apply(merged, incoming);\n }\n }\n\n return merged;\n },\n };\n}\n\n// Whether TRelayEdge<TNode> is a normalized Reference or a non-normalized\n// object, it needs a .cursor property where the relayStylePagination\n// merge function can store cursor strings taken from pageInfo. Storing an\n// extra reference.cursor property should be safe, and is easier than\n// attempting to update the cursor field of the normalized StoreObject\n// that the reference refers to, or managing edge wrapper objects\n// (something I attempted in #7023, but abandoned because of #7088).\nexport type TRelayEdge<TNode> = {\n cursor?: string;\n node: TNode;\n} | (Reference & { cursor?: string });\n\nexport type TRelayPageInfo = {\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n startCursor: string;\n endCursor: string;\n};\n\nexport type TExistingRelay<TNode> = Readonly<{\n edges: TRelayEdge<TNode>[];\n pageInfo: TRelayPageInfo;\n}>;\n\nexport type TIncomingRelay<TNode> = {\n edges?: TRelayEdge<TNode>[];\n pageInfo?: TRelayPageInfo;\n};\n\nexport type RelayFieldPolicy<TNode> = FieldPolicy<\n TExistingRelay<TNode> | null,\n TIncomingRelay<TNode> | null,\n TIncomingRelay<TNode> | null\n>;\n\n// As proof of the flexibility of field policies, this function generates\n// one that handles Relay-style pagination, without Apollo Client knowing\n// anything about connections, edges, cursors, or pageInfo objects.\nexport function relayStylePagination<TNode = Reference>(\n keyArgs: KeyArgs = false,\n): RelayFieldPolicy<TNode> {\n return {\n keyArgs,\n\n read(existing, { canRead, readField }) {\n if (!existing) return existing;\n\n const edges: TRelayEdge<TNode>[] = [];\n let firstEdgeCursor = \"\";\n let lastEdgeCursor = \"\";\n existing.edges.forEach(edge => {\n // Edges themselves could be Reference objects, so it's important\n // to use readField to access the edge.edge.node property.\n if (canRead(readField(\"node\", edge))) {\n edges.push(edge);\n if (edge.cursor) {\n firstEdgeCursor = firstEdgeCursor || edge.cursor || \"\";\n lastEdgeCursor = edge.cursor || lastEdgeCursor;\n }\n }\n });\n\n const {\n startCursor,\n endCursor,\n } = existing.pageInfo || {};\n\n return {\n // Some implementations return additional Connection fields, such\n // as existing.totalCount. These fields are saved by the merge\n // function, so the read function should also preserve them.\n ...getExtras(existing),\n edges,\n pageInfo: {\n ...existing.pageInfo,\n // If existing.pageInfo.{start,end}Cursor are undefined or \"\", default\n // to firstEdgeCursor and/or lastEdgeCursor.\n startCursor: startCursor || firstEdgeCursor,\n endCursor: endCursor || lastEdgeCursor,\n },\n };\n },\n\n merge(existing, incoming, { args, isReference, readField }) {\n if (!existing) {\n existing = makeEmptyData();\n }\n\n if (!incoming) {\n return existing;\n }\n\n const incomingEdges = incoming.edges ? incoming.edges.map(edge => {\n if (isReference(edge = { ...edge })) {\n // In case edge is a Reference, we read out its cursor field and\n // store it as an extra property of the Reference object.\n edge.cursor = readField<string>(\"cursor\", edge);\n }\n return edge;\n }) : [];\n\n if (incoming.pageInfo) {\n const { pageInfo } = incoming;\n const { startCursor, endCursor } = pageInfo;\n const firstEdge = incomingEdges[0];\n const lastEdge = incomingEdges[incomingEdges.length - 1];\n // In case we did not request the cursor field for edges in this\n // query, we can still infer cursors from pageInfo.\n if (firstEdge && startCursor) {\n firstEdge.cursor = startCursor;\n }\n if (lastEdge && endCursor) {\n lastEdge.cursor = endCursor;\n }\n // Cursors can also come from edges, so we default\n // pageInfo.{start,end}Cursor to {first,last}Edge.cursor.\n const firstCursor = firstEdge && firstEdge.cursor;\n if (firstCursor && !startCursor) {\n incoming = mergeDeep(incoming, {\n pageInfo: {\n startCursor: firstCursor,\n },\n });\n }\n const lastCursor = lastEdge && lastEdge.cursor;\n if (lastCursor && !endCursor) {\n incoming = mergeDeep(incoming, {\n pageInfo: {\n endCursor: lastCursor,\n },\n });\n }\n }\n\n let prefix = existing.edges;\n let suffix: typeof prefix = [];\n\n if (args && args.after) {\n // This comparison does not need to use readField(\"cursor\", edge),\n // because we stored the cursor field of any Reference edges as an\n // extra property of the Reference object.\n const index = prefix.findIndex(edge => edge.cursor === args.after);\n if (index >= 0) {\n prefix = prefix.slice(0, index + 1);\n // suffix = []; // already true\n }\n } else if (args && args.before) {\n const index = prefix.findIndex(edge => edge.cursor === args.before);\n suffix = index < 0 ? prefix : prefix.slice(index);\n prefix = [];\n } else if (incoming.edges) {\n // If we have neither args.after nor args.before, the incoming\n // edges cannot be spliced into the existing edges, so they must\n // replace the existing edges. See #6592 for a motivating example.\n prefix = [];\n }\n\n const edges = [\n ...prefix,\n ...incomingEdges,\n ...suffix,\n ];\n\n const pageInfo: TRelayPageInfo = {\n // The ordering of these two ...spreads may be surprising, but it\n // makes sense because we want to combine PageInfo properties with a\n // preference for existing values, *unless* the existing values are\n // overridden by the logic below, which is permitted only when the\n // incoming page falls at the beginning or end of the data.\n ...incoming.pageInfo,\n ...existing.pageInfo,\n };\n\n if (incoming.pageInfo) {\n const {\n hasPreviousPage, hasNextPage,\n startCursor, endCursor,\n ...extras\n } = incoming.pageInfo;\n\n // If incoming.pageInfo had any extra non-standard properties,\n // assume they should take precedence over any existing properties\n // of the same name, regardless of where this page falls with\n // respect to the existing data.\n Object.assign(pageInfo, extras);\n\n // Keep existing.pageInfo.has{Previous,Next}Page unless the\n // placement of the incoming edges means incoming.hasPreviousPage\n // or incoming.hasNextPage should become the new values for those\n // properties in existing.pageInfo. Note that these updates are\n // only permitted when the beginning or end of the incoming page\n // coincides with the beginning or end of the existing data, as\n // determined using prefix.length and suffix.length.\n if (!prefix.length) {\n if (void 0 !== hasPreviousPage) pageInfo.hasPreviousPage = hasPreviousPage;\n if (void 0 !== startCursor) pageInfo.startCursor = startCursor;\n }\n if (!suffix.length) {\n if (void 0 !== hasNextPage) pageInfo.hasNextPage = hasNextPage;\n if (void 0 !== endCursor) pageInfo.endCursor = endCursor;\n }\n }\n\n return {\n ...getExtras(existing),\n ...getExtras(incoming),\n edges,\n pageInfo,\n };\n },\n };\n}\n\n// Returns any unrecognized properties of the given object.\nconst getExtras = (obj: Record<string, any>) => __rest(obj, notExtras);\nconst notExtras = [\"edges\", \"pageInfo\"];\n\nfunction makeEmptyData(): TExistingRelay<any> {\n return {\n edges: [],\n pageInfo: {\n hasPreviousPage: false,\n hasNextPage: true,\n startCursor: \"\",\n endCursor: \"\",\n },\n };\n}\n"]}
@@ -512,7 +512,7 @@ function removeDirectivesFromDocument(directives, doc) {
512
512
  return modifiedDoc;
513
513
  }
514
514
  var addTypenameToDocument = Object.assign(function (doc) {
515
- return graphql.visit(checkDocument(doc), {
515
+ return graphql.visit(doc, {
516
516
  SelectionSet: {
517
517
  enter: function (node, _key, parent) {
518
518
  if (parent &&
@@ -734,18 +734,15 @@ var DeepMerger = (function () {
734
734
  };
735
735
  DeepMerger.prototype.shallowCopyForMerge = function (value) {
736
736
  if (isNonNullObject(value)) {
737
- if (this.pastCopies.has(value)) {
738
- if (!Object.isFrozen(value))
739
- return value;
740
- this.pastCopies.delete(value);
741
- }
742
- if (Array.isArray(value)) {
743
- value = value.slice(0);
744
- }
745
- else {
746
- value = tslib.__assign({ __proto__: Object.getPrototypeOf(value) }, value);
737
+ if (!this.pastCopies.has(value)) {
738
+ if (Array.isArray(value)) {
739
+ value = value.slice(0);
740
+ }
741
+ else {
742
+ value = tslib.__assign({ __proto__: Object.getPrototypeOf(value) }, value);
743
+ }
744
+ this.pastCopies.add(value);
747
745
  }
748
- this.pastCopies.add(value);
749
746
  }
750
747
  return value;
751
748
  };
@@ -768,14 +765,16 @@ function offsetLimitPagination(keyArgs) {
768
765
  merge: function (existing, incoming, _a) {
769
766
  var args = _a.args;
770
767
  var merged = existing ? existing.slice(0) : [];
771
- if (args) {
772
- var _b = args.offset, offset = _b === void 0 ? 0 : _b;
773
- for (var i = 0; i < incoming.length; ++i) {
774
- merged[offset + i] = incoming[i];
768
+ if (incoming) {
769
+ if (args) {
770
+ var _b = args.offset, offset = _b === void 0 ? 0 : _b;
771
+ for (var i = 0; i < incoming.length; ++i) {
772
+ merged[offset + i] = incoming[i];
773
+ }
774
+ }
775
+ else {
776
+ merged.push.apply(merged, incoming);
775
777
  }
776
- }
777
- else {
778
- merged.push.apply(merged, incoming);
779
778
  }
780
779
  return merged;
781
780
  },
@@ -1017,11 +1016,14 @@ function asyncMap(observable, mapFn, catchFn) {
1017
1016
  });
1018
1017
  }
1019
1018
 
1020
- var canUseWeakMap = typeof WeakMap === 'function' && !(typeof navigator === 'object' &&
1021
- navigator.product === 'ReactNative');
1019
+ var canUseWeakMap = typeof WeakMap === 'function' &&
1020
+ globals.maybe(function () { return navigator.product; }) !== 'ReactNative';
1022
1021
  var canUseWeakSet = typeof WeakSet === 'function';
1023
1022
  var canUseSymbol = typeof Symbol === 'function' &&
1024
1023
  typeof Symbol.for === 'function';
1024
+ var canUseDOM = typeof globals.maybe(function () { return window.document.createElement; }) === "function";
1025
+ var usingJSDOM = globals.maybe(function () { return navigator.userAgent.indexOf("jsdom") >= 0; }) || false;
1026
+ var canUseLayoutEffect = canUseDOM && !usingJSDOM;
1025
1027
 
1026
1028
  function fixObservableSubclass(subclass) {
1027
1029
  function set(key) {
@@ -1069,9 +1071,12 @@ var Concast = (function (_super) {
1069
1071
  }
1070
1072
  },
1071
1073
  complete: function () {
1072
- if (_this.sub !== null) {
1074
+ var sub = _this.sub;
1075
+ if (sub !== null) {
1073
1076
  var value = _this.sources.shift();
1074
1077
  if (!value) {
1078
+ if (sub)
1079
+ setTimeout(function () { return sub.unsubscribe(); });
1075
1080
  _this.sub = null;
1076
1081
  if (_this.latest &&
1077
1082
  _this.latest[0] === "next") {
@@ -1139,7 +1144,7 @@ var Concast = (function (_super) {
1139
1144
  if (this.observers.delete(observer) &&
1140
1145
  --this.addCount < 1 &&
1141
1146
  !quietly) {
1142
- this.handlers.error(new Error("Observable cancelled prematurely"));
1147
+ this.handlers.complete();
1143
1148
  }
1144
1149
  };
1145
1150
  Concast.prototype.cleanup = function (callback) {
@@ -1206,6 +1211,12 @@ function stringifyForDisplay(value) {
1206
1211
  }).split(JSON.stringify(undefId)).join("<undefined>");
1207
1212
  }
1208
1213
 
1214
+ function mergeOptions(defaults, options) {
1215
+ return compact(defaults, options, options.variables && {
1216
+ variables: tslib.__assign(tslib.__assign({}, (defaults && defaults.variables)), options.variables),
1217
+ });
1218
+ }
1219
+
1209
1220
  exports.DEV = globals.DEV;
1210
1221
  exports.maybe = globals.maybe;
1211
1222
  exports.Observable = zenObservableTs.Observable;
@@ -1215,6 +1226,8 @@ exports.addTypenameToDocument = addTypenameToDocument;
1215
1226
  exports.argumentsObjectFromField = argumentsObjectFromField;
1216
1227
  exports.asyncMap = asyncMap;
1217
1228
  exports.buildQueryFromSelectionSet = buildQueryFromSelectionSet;
1229
+ exports.canUseDOM = canUseDOM;
1230
+ exports.canUseLayoutEffect = canUseLayoutEffect;
1218
1231
  exports.canUseSymbol = canUseSymbol;
1219
1232
  exports.canUseWeakMap = canUseWeakMap;
1220
1233
  exports.canUseWeakSet = canUseWeakSet;
@@ -1252,6 +1265,7 @@ exports.makeUniqueId = makeUniqueId;
1252
1265
  exports.maybeDeepFreeze = maybeDeepFreeze;
1253
1266
  exports.mergeDeep = mergeDeep;
1254
1267
  exports.mergeDeepArray = mergeDeepArray;
1268
+ exports.mergeOptions = mergeOptions;
1255
1269
  exports.offsetLimitPagination = offsetLimitPagination;
1256
1270
  exports.relayStylePagination = relayStylePagination;
1257
1271
  exports.removeArgumentsFromDocument = removeArgumentsFromDocument;