@osdk/client 2.4.2 → 2.5.0-beta.10
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.
- package/CHANGELOG.md +106 -93
- package/build/browser/Client.js +1 -1
- package/build/browser/Client.js.map +1 -1
- package/build/browser/MinimalClientContext.js.map +1 -1
- package/build/browser/actions/applyAction.js +4 -0
- package/build/browser/actions/applyAction.js.map +1 -1
- package/build/browser/createClient.js +6 -2
- package/build/browser/createClient.js.map +1 -1
- package/build/browser/createMinimalClient.js +2 -1
- package/build/browser/createMinimalClient.js.map +1 -1
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +17 -0
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
- package/build/browser/fetchMetadata.test.js +11 -0
- package/build/browser/fetchMetadata.test.js.map +1 -1
- package/build/browser/index.js +3 -1
- package/build/browser/index.js.map +1 -1
- package/build/browser/intellisense.test.helpers/orderBySuggestionIsRight.js +8 -1
- package/build/browser/intellisense.test.helpers/orderBySuggestionIsRight.js.map +1 -1
- package/build/browser/intellisense.test.js +14 -4
- package/build/browser/intellisense.test.js.map +1 -1
- package/build/browser/object/Cache.js +1 -1
- package/build/browser/object/Cache.js.map +1 -1
- package/build/browser/object/Cache.test.js +1 -1
- package/build/browser/object/Cache.test.js.map +1 -1
- package/build/browser/object/SimpleCache.js +1 -1
- package/build/browser/object/SimpleCache.js.map +1 -1
- package/build/browser/object/aggregate.js +2 -0
- package/build/browser/object/aggregate.js.map +1 -1
- package/build/browser/object/aggregate.test.js +30 -0
- package/build/browser/object/aggregate.test.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js +1 -0
- package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +6 -0
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js +20 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.js +4 -0
- package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.test.js +14 -0
- package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/browser/object/fetchPage.js +96 -21
- package/build/browser/object/fetchPage.js.map +1 -1
- package/build/browser/object/fetchPage.test.js +35 -1
- package/build/browser/object/fetchPage.test.js.map +1 -1
- package/build/browser/object/geotimeseriesreference.test.js +0 -2
- package/build/browser/object/geotimeseriesreference.test.js.map +1 -1
- package/build/browser/object/mediaUpload.js +3 -0
- package/build/browser/object/mediaUpload.js.map +1 -1
- package/build/browser/objectSet/ObjectSet.test.js +6 -0
- package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js +31 -9
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +69 -4
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +3 -1
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/observable/LinkPayload.js +2 -0
- package/build/browser/observable/LinkPayload.js.map +1 -0
- package/build/browser/observable/ObjectPayload.js.map +1 -1
- package/build/browser/observable/ObservableClient/ObserveLink.js +17 -0
- package/build/browser/observable/ObservableClient/ObserveLink.js.map +1 -0
- package/build/browser/observable/ObservableClient/common.js +2 -0
- package/build/browser/observable/ObservableClient/common.js.map +1 -0
- package/build/browser/observable/ObservableClient.js +20 -0
- package/build/browser/observable/ObservableClient.js.map +1 -1
- package/build/browser/observable/Unsubscribable.js +2 -0
- package/build/browser/observable/Unsubscribable.js.map +1 -0
- package/build/browser/observable/internal/AbstractHelper.js +54 -0
- package/build/browser/observable/internal/AbstractHelper.js.map +1 -0
- package/build/browser/observable/internal/BatchContext.js +2 -0
- package/build/browser/observable/internal/BatchContext.js.map +1 -0
- package/build/browser/observable/internal/BulkObjectLoader.js +3 -3
- package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -1
- package/build/browser/observable/internal/CacheKeys.js +65 -25
- package/build/browser/observable/internal/CacheKeys.js.map +1 -1
- package/build/browser/observable/internal/Changes.js +6 -0
- package/build/browser/observable/internal/Changes.js.map +1 -1
- package/build/browser/observable/internal/KnownCacheKey.js +2 -0
- package/build/browser/observable/internal/KnownCacheKey.js.map +1 -0
- package/build/browser/observable/internal/Layer.js +0 -8
- package/build/browser/observable/internal/Layer.js.map +1 -1
- package/build/browser/observable/internal/Layers.js +151 -0
- package/build/browser/observable/internal/Layers.js.map +1 -0
- package/build/browser/observable/internal/ObservableClientImpl.js +54 -3
- package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/browser/observable/internal/OrderByCanonicalizer.js +1 -37
- package/build/browser/observable/internal/OrderByCanonicalizer.js.map +1 -1
- package/build/browser/observable/internal/Queries.js +40 -0
- package/build/browser/observable/internal/Queries.js.map +1 -0
- package/build/browser/observable/internal/Query.js +45 -4
- package/build/browser/observable/internal/Query.js.map +1 -1
- package/build/browser/observable/internal/QuerySubscription.js +48 -0
- package/build/browser/observable/internal/QuerySubscription.js.map +1 -0
- package/build/browser/observable/internal/Store.invalidation.test.js +646 -0
- package/build/browser/observable/internal/Store.invalidation.test.js.map +1 -0
- package/build/browser/observable/internal/Store.js +87 -308
- package/build/browser/observable/internal/Store.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +330 -73
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/SubjectPayload.js +2 -0
- package/build/browser/observable/internal/SubjectPayload.js.map +1 -0
- package/build/browser/observable/internal/Subjects.js +55 -0
- package/build/browser/observable/internal/Subjects.js.map +1 -0
- package/build/browser/observable/internal/UnsubscribableWrapper.js +30 -0
- package/build/browser/observable/internal/UnsubscribableWrapper.js.map +1 -0
- package/build/browser/observable/internal/WeakRefTrie.js +61 -0
- package/build/browser/observable/internal/WeakRefTrie.js.map +1 -0
- package/build/browser/observable/internal/{ActionApplication.js → actions/ActionApplication.js} +2 -2
- package/build/browser/observable/internal/actions/ActionApplication.js.map +1 -0
- package/build/{esm/observable/internal → browser/observable/internal/actions}/OptimisticJob.js +15 -6
- package/build/browser/observable/internal/actions/OptimisticJob.js.map +1 -0
- package/build/browser/observable/internal/base-list/BaseCollectionQuery.js +2 -0
- package/build/browser/observable/internal/base-list/BaseCollectionQuery.js.map +1 -0
- package/build/browser/observable/internal/base-list/BaseListQuery.js +411 -0
- package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -0
- package/build/browser/observable/internal/base-list/createCollectionConnectable.js +50 -0
- package/build/browser/observable/internal/base-list/createCollectionConnectable.js.map +1 -0
- package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js +597 -0
- package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -0
- package/build/browser/observable/internal/base-list/removeDuplicates.js +36 -0
- package/build/browser/observable/internal/base-list/removeDuplicates.js.map +1 -0
- package/build/browser/observable/internal/createInitEntry.js +25 -0
- package/build/browser/observable/internal/createInitEntry.js.map +1 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.js +216 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.js.map +1 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.test.js +382 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.test.js.map +1 -0
- package/build/browser/observable/internal/isObjectInstance.js +23 -0
- package/build/browser/observable/internal/isObjectInstance.js.map +1 -0
- package/build/browser/observable/internal/links/LinksHelper.js +37 -0
- package/build/browser/observable/internal/links/LinksHelper.js.map +1 -0
- package/build/browser/observable/internal/links/SpecificLinkCacheKey.js +2 -0
- package/build/browser/observable/internal/links/SpecificLinkCacheKey.js.map +1 -0
- package/build/browser/observable/internal/links/SpecificLinkQuery.js +185 -0
- package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -0
- package/build/browser/observable/internal/list/InterfaceListQuery.js +83 -0
- package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -0
- package/build/browser/observable/internal/list/ListCacheKey.js +2 -0
- package/build/browser/observable/internal/list/ListCacheKey.js.map +1 -0
- package/build/browser/observable/internal/list/ListQuery.js +372 -0
- package/build/browser/observable/internal/list/ListQuery.js.map +1 -0
- package/build/browser/observable/internal/list/ListQueryOptions.js +2 -0
- package/build/browser/observable/internal/list/ListQueryOptions.js.map +1 -0
- package/build/browser/observable/internal/list/ListsHelper.js +51 -0
- package/build/browser/observable/internal/list/ListsHelper.js.map +1 -0
- package/build/browser/observable/internal/list/ObjectListQuery.js +48 -0
- package/build/browser/observable/internal/list/ObjectListQuery.js.map +1 -0
- package/build/browser/observable/internal/object/ObjectCacheKey.js +2 -0
- package/build/browser/observable/internal/object/ObjectCacheKey.js.map +1 -0
- package/build/browser/observable/internal/{ObjectQuery.js → object/ObjectQuery.js} +27 -18
- package/build/browser/observable/internal/object/ObjectQuery.js.map +1 -0
- package/build/browser/observable/internal/object/ObjectsHelper.js +48 -0
- package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -0
- package/build/browser/observable/internal/sorting/SortingStrategy.js +78 -0
- package/build/browser/observable/internal/sorting/SortingStrategy.js.map +1 -0
- package/build/browser/observable/internal/testUtils/invalidateList.js +23 -0
- package/build/browser/observable/internal/testUtils/invalidateList.js.map +1 -0
- package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +69 -0
- package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -0
- package/build/browser/observable/internal/testUtils/observeObject/expectStandardObserveObject.js +56 -0
- package/build/browser/observable/internal/testUtils/observeObject/expectStandardObserveObject.js.map +1 -0
- package/build/browser/observable/internal/testUtils.js +72 -10
- package/build/browser/observable/internal/testUtils.js.map +1 -1
- package/build/browser/ontology/loadActionMetadata.js +3 -1
- package/build/browser/ontology/loadActionMetadata.js.map +1 -1
- package/build/browser/ontology/loadFullObjectMetadata.js +2 -1
- package/build/browser/ontology/loadFullObjectMetadata.js.map +1 -1
- package/build/browser/ontology/loadInterfaceMetadata.js +2 -1
- package/build/browser/ontology/loadInterfaceMetadata.js.map +1 -1
- package/build/browser/public/unstable-do-not-use.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -2
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/browser/util/exponentialBackoff.js +51 -0
- package/build/browser/util/exponentialBackoff.js.map +1 -0
- package/build/browser/util/exponentialBackoff.test.js +81 -0
- package/build/browser/util/exponentialBackoff.test.js.map +1 -0
- package/build/browser/util/extractObjectOrInterfaceType.js +9 -1
- package/build/browser/util/extractObjectOrInterfaceType.js.map +1 -1
- package/build/browser/util/extractObjectOrInterfaceType.test.js +2 -2
- package/build/browser/util/extractObjectOrInterfaceType.test.js.map +1 -1
- package/build/browser/util/streamutils.js +1 -1
- package/build/browser/util/streamutils.js.map +1 -1
- package/build/browser/util/toDataValue.js +15 -1
- package/build/browser/util/toDataValue.js.map +1 -1
- package/build/browser/util/toDataValue.test.js +42 -2
- package/build/browser/util/toDataValue.test.js.map +1 -1
- package/build/cjs/{chunk-633AI7EA.cjs → chunk-GVGP7T5P.cjs} +407 -257
- package/build/cjs/chunk-GVGP7T5P.cjs.map +1 -0
- package/build/cjs/{chunk-26WFEZQO.cjs → chunk-YADG7KA6.cjs} +136 -84
- package/build/cjs/chunk-YADG7KA6.cjs.map +1 -0
- package/build/cjs/{createClient-BJo8T7Js.d.cts → createClient-mOlFts15.d.cts} +1 -0
- package/build/cjs/index.cjs +11 -7
- package/build/cjs/index.d.cts +2 -2
- package/build/cjs/public/internal.cjs +8 -8
- package/build/cjs/public/unstable-do-not-use.cjs +1502 -851
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/cjs/public/unstable-do-not-use.d.cts +183 -13
- package/build/esm/Client.js +1 -1
- package/build/esm/Client.js.map +1 -1
- package/build/esm/MinimalClientContext.js.map +1 -1
- package/build/esm/actions/applyAction.js +4 -0
- package/build/esm/actions/applyAction.js.map +1 -1
- package/build/esm/createClient.js +6 -2
- package/build/esm/createClient.js.map +1 -1
- package/build/esm/createMinimalClient.js +2 -1
- package/build/esm/createMinimalClient.js.map +1 -1
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +17 -0
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
- package/build/esm/fetchMetadata.test.js +11 -0
- package/build/esm/fetchMetadata.test.js.map +1 -1
- package/build/esm/index.js +3 -1
- package/build/esm/index.js.map +1 -1
- package/build/esm/intellisense.test.helpers/orderBySuggestionIsRight.js +8 -1
- package/build/esm/intellisense.test.helpers/orderBySuggestionIsRight.js.map +1 -1
- package/build/esm/intellisense.test.js +14 -4
- package/build/esm/intellisense.test.js.map +1 -1
- package/build/esm/object/Cache.js +1 -1
- package/build/esm/object/Cache.js.map +1 -1
- package/build/esm/object/Cache.test.js +1 -1
- package/build/esm/object/Cache.test.js.map +1 -1
- package/build/esm/object/SimpleCache.js +1 -1
- package/build/esm/object/SimpleCache.js.map +1 -1
- package/build/esm/object/aggregate.js +2 -0
- package/build/esm/object/aggregate.js.map +1 -1
- package/build/esm/object/aggregate.test.js +30 -0
- package/build/esm/object/aggregate.test.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js +1 -0
- package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +6 -0
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js +20 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.js +4 -0
- package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.test.js +14 -0
- package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/esm/object/fetchPage.js +96 -21
- package/build/esm/object/fetchPage.js.map +1 -1
- package/build/esm/object/fetchPage.test.js +35 -1
- package/build/esm/object/fetchPage.test.js.map +1 -1
- package/build/esm/object/geotimeseriesreference.test.js +0 -2
- package/build/esm/object/geotimeseriesreference.test.js.map +1 -1
- package/build/esm/object/mediaUpload.js +3 -0
- package/build/esm/object/mediaUpload.js.map +1 -1
- package/build/esm/objectSet/ObjectSet.test.js +6 -0
- package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js +31 -9
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +69 -4
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +3 -1
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/observable/LinkPayload.js +2 -0
- package/build/esm/observable/LinkPayload.js.map +1 -0
- package/build/esm/observable/ObjectPayload.js.map +1 -1
- package/build/esm/observable/ObservableClient/ObserveLink.js +17 -0
- package/build/esm/observable/ObservableClient/ObserveLink.js.map +1 -0
- package/build/esm/observable/ObservableClient/common.js +2 -0
- package/build/esm/observable/ObservableClient/common.js.map +1 -0
- package/build/esm/observable/ObservableClient.js +20 -0
- package/build/esm/observable/ObservableClient.js.map +1 -1
- package/build/esm/observable/Unsubscribable.js +2 -0
- package/build/esm/observable/Unsubscribable.js.map +1 -0
- package/build/esm/observable/internal/AbstractHelper.js +54 -0
- package/build/esm/observable/internal/AbstractHelper.js.map +1 -0
- package/build/esm/observable/internal/BatchContext.js +2 -0
- package/build/esm/observable/internal/BatchContext.js.map +1 -0
- package/build/esm/observable/internal/BulkObjectLoader.js +3 -3
- package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -1
- package/build/esm/observable/internal/CacheKeys.js +65 -25
- package/build/esm/observable/internal/CacheKeys.js.map +1 -1
- package/build/esm/observable/internal/Changes.js +6 -0
- package/build/esm/observable/internal/Changes.js.map +1 -1
- package/build/esm/observable/internal/KnownCacheKey.js +2 -0
- package/build/esm/observable/internal/KnownCacheKey.js.map +1 -0
- package/build/esm/observable/internal/Layer.js +0 -8
- package/build/esm/observable/internal/Layer.js.map +1 -1
- package/build/esm/observable/internal/Layers.js +151 -0
- package/build/esm/observable/internal/Layers.js.map +1 -0
- package/build/esm/observable/internal/ObservableClientImpl.js +54 -3
- package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/esm/observable/internal/OrderByCanonicalizer.js +1 -37
- package/build/esm/observable/internal/OrderByCanonicalizer.js.map +1 -1
- package/build/esm/observable/internal/Queries.js +40 -0
- package/build/esm/observable/internal/Queries.js.map +1 -0
- package/build/esm/observable/internal/Query.js +45 -4
- package/build/esm/observable/internal/Query.js.map +1 -1
- package/build/esm/observable/internal/QuerySubscription.js +48 -0
- package/build/esm/observable/internal/QuerySubscription.js.map +1 -0
- package/build/esm/observable/internal/Store.invalidation.test.js +646 -0
- package/build/esm/observable/internal/Store.invalidation.test.js.map +1 -0
- package/build/esm/observable/internal/Store.js +87 -308
- package/build/esm/observable/internal/Store.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +330 -73
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/SubjectPayload.js +2 -0
- package/build/esm/observable/internal/SubjectPayload.js.map +1 -0
- package/build/esm/observable/internal/Subjects.js +55 -0
- package/build/esm/observable/internal/Subjects.js.map +1 -0
- package/build/esm/observable/internal/UnsubscribableWrapper.js +30 -0
- package/build/esm/observable/internal/UnsubscribableWrapper.js.map +1 -0
- package/build/esm/observable/internal/WeakRefTrie.js +61 -0
- package/build/esm/observable/internal/WeakRefTrie.js.map +1 -0
- package/build/esm/observable/internal/{ActionApplication.js → actions/ActionApplication.js} +2 -2
- package/build/esm/observable/internal/actions/ActionApplication.js.map +1 -0
- package/build/{browser/observable/internal → esm/observable/internal/actions}/OptimisticJob.js +15 -6
- package/build/esm/observable/internal/actions/OptimisticJob.js.map +1 -0
- package/build/esm/observable/internal/base-list/BaseCollectionQuery.js +2 -0
- package/build/esm/observable/internal/base-list/BaseCollectionQuery.js.map +1 -0
- package/build/esm/observable/internal/base-list/BaseListQuery.js +411 -0
- package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -0
- package/build/esm/observable/internal/base-list/createCollectionConnectable.js +50 -0
- package/build/esm/observable/internal/base-list/createCollectionConnectable.js.map +1 -0
- package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js +597 -0
- package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -0
- package/build/esm/observable/internal/base-list/removeDuplicates.js +36 -0
- package/build/esm/observable/internal/base-list/removeDuplicates.js.map +1 -0
- package/build/esm/observable/internal/createInitEntry.js +25 -0
- package/build/esm/observable/internal/createInitEntry.js.map +1 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.js +216 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.js.map +1 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.test.js +382 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.test.js.map +1 -0
- package/build/esm/observable/internal/isObjectInstance.js +23 -0
- package/build/esm/observable/internal/isObjectInstance.js.map +1 -0
- package/build/esm/observable/internal/links/LinksHelper.js +37 -0
- package/build/esm/observable/internal/links/LinksHelper.js.map +1 -0
- package/build/esm/observable/internal/links/SpecificLinkCacheKey.js +2 -0
- package/build/esm/observable/internal/links/SpecificLinkCacheKey.js.map +1 -0
- package/build/esm/observable/internal/links/SpecificLinkQuery.js +185 -0
- package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -0
- package/build/esm/observable/internal/list/InterfaceListQuery.js +83 -0
- package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -0
- package/build/esm/observable/internal/list/ListCacheKey.js +2 -0
- package/build/esm/observable/internal/list/ListCacheKey.js.map +1 -0
- package/build/esm/observable/internal/list/ListQuery.js +372 -0
- package/build/esm/observable/internal/list/ListQuery.js.map +1 -0
- package/build/esm/observable/internal/list/ListQueryOptions.js +2 -0
- package/build/esm/observable/internal/list/ListQueryOptions.js.map +1 -0
- package/build/esm/observable/internal/list/ListsHelper.js +51 -0
- package/build/esm/observable/internal/list/ListsHelper.js.map +1 -0
- package/build/esm/observable/internal/list/ObjectListQuery.js +48 -0
- package/build/esm/observable/internal/list/ObjectListQuery.js.map +1 -0
- package/build/esm/observable/internal/object/ObjectCacheKey.js +2 -0
- package/build/esm/observable/internal/object/ObjectCacheKey.js.map +1 -0
- package/build/esm/observable/internal/{ObjectQuery.js → object/ObjectQuery.js} +27 -18
- package/build/esm/observable/internal/object/ObjectQuery.js.map +1 -0
- package/build/esm/observable/internal/object/ObjectsHelper.js +48 -0
- package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -0
- package/build/esm/observable/internal/sorting/SortingStrategy.js +78 -0
- package/build/esm/observable/internal/sorting/SortingStrategy.js.map +1 -0
- package/build/esm/observable/internal/testUtils/invalidateList.js +23 -0
- package/build/esm/observable/internal/testUtils/invalidateList.js.map +1 -0
- package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +69 -0
- package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -0
- package/build/esm/observable/internal/testUtils/observeObject/expectStandardObserveObject.js +56 -0
- package/build/esm/observable/internal/testUtils/observeObject/expectStandardObserveObject.js.map +1 -0
- package/build/esm/observable/internal/testUtils.js +72 -10
- package/build/esm/observable/internal/testUtils.js.map +1 -1
- package/build/esm/ontology/loadActionMetadata.js +3 -1
- package/build/esm/ontology/loadActionMetadata.js.map +1 -1
- package/build/esm/ontology/loadFullObjectMetadata.js +2 -1
- package/build/esm/ontology/loadFullObjectMetadata.js.map +1 -1
- package/build/esm/ontology/loadInterfaceMetadata.js +2 -1
- package/build/esm/ontology/loadInterfaceMetadata.js.map +1 -1
- package/build/esm/public/unstable-do-not-use.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -2
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/esm/util/exponentialBackoff.js +51 -0
- package/build/esm/util/exponentialBackoff.js.map +1 -0
- package/build/esm/util/exponentialBackoff.test.js +81 -0
- package/build/esm/util/exponentialBackoff.test.js.map +1 -0
- package/build/esm/util/extractObjectOrInterfaceType.js +9 -1
- package/build/esm/util/extractObjectOrInterfaceType.js.map +1 -1
- package/build/esm/util/extractObjectOrInterfaceType.test.js +2 -2
- package/build/esm/util/extractObjectOrInterfaceType.test.js.map +1 -1
- package/build/esm/util/streamutils.js +1 -1
- package/build/esm/util/streamutils.js.map +1 -1
- package/build/esm/util/toDataValue.js +15 -1
- package/build/esm/util/toDataValue.js.map +1 -1
- package/build/esm/util/toDataValue.test.js +42 -2
- package/build/esm/util/toDataValue.test.js.map +1 -1
- package/build/types/Client.d.ts +1 -1
- package/build/types/MinimalClientContext.d.ts +1 -0
- package/build/types/MinimalClientContext.d.ts.map +1 -1
- package/build/types/actions/applyAction.d.ts.map +1 -1
- package/build/types/createClient.d.ts +1 -0
- package/build/types/createClient.d.ts.map +1 -1
- package/build/types/index.d.ts +1 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/object/fetchPage.d.ts.map +1 -1
- package/build/types/object/mediaUpload.d.ts +2 -1
- package/build/types/object/mediaUpload.d.ts.map +1 -1
- package/build/types/observable/LinkPayload.d.ts +9 -0
- package/build/types/observable/LinkPayload.d.ts.map +1 -0
- package/build/types/observable/ObjectPayload.d.ts +4 -0
- package/build/types/observable/ObjectPayload.d.ts.map +1 -1
- package/build/types/observable/ObservableClient/ObserveLink.d.ts +32 -0
- package/build/types/observable/ObservableClient/ObserveLink.d.ts.map +1 -0
- package/build/types/observable/ObservableClient/common.d.ts +67 -0
- package/build/types/observable/ObservableClient/common.d.ts.map +1 -0
- package/build/types/observable/ObservableClient.d.ts +103 -15
- package/build/types/observable/ObservableClient.d.ts.map +1 -1
- package/build/types/observable/Unsubscribable.d.ts +3 -0
- package/build/types/observable/Unsubscribable.d.ts.map +1 -0
- package/build/types/observable/internal/AbstractHelper.d.ts +17 -0
- package/build/types/observable/internal/AbstractHelper.d.ts.map +1 -0
- package/build/types/observable/internal/BatchContext.d.ts +11 -0
- package/build/types/observable/internal/BatchContext.d.ts.map +1 -0
- package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -1
- package/build/types/observable/internal/CacheKeys.d.ts +12 -6
- package/build/types/observable/internal/CacheKeys.d.ts.map +1 -1
- package/build/types/observable/internal/Changes.d.ts +8 -5
- package/build/types/observable/internal/Changes.d.ts.map +1 -1
- package/build/types/observable/internal/KnownCacheKey.d.ts +4 -0
- package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/Layer.d.ts +6 -7
- package/build/types/observable/internal/Layer.d.ts.map +1 -1
- package/build/types/observable/internal/Layers.d.ts +26 -0
- package/build/types/observable/internal/Layers.d.ts.map +1 -0
- package/build/types/observable/internal/OrderByCanonicalizer.d.ts +0 -7
- package/build/types/observable/internal/OrderByCanonicalizer.d.ts.map +1 -1
- package/build/types/observable/internal/Queries.d.ts +9 -0
- package/build/types/observable/internal/Queries.d.ts.map +1 -0
- package/build/types/observable/internal/Query.d.ts +23 -6
- package/build/types/observable/internal/Query.d.ts.map +1 -1
- package/build/types/observable/internal/QuerySubscription.d.ts +1 -0
- package/build/types/observable/internal/QuerySubscription.d.ts.map +1 -0
- package/build/types/observable/internal/Store.d.ts +41 -51
- package/build/types/observable/internal/Store.d.ts.map +1 -1
- package/build/types/observable/internal/Store.invalidation.test.d.ts +1 -0
- package/build/types/observable/internal/Store.invalidation.test.d.ts.map +1 -0
- package/build/types/observable/internal/Store.test.d.ts +4 -1
- package/build/types/observable/internal/Store.test.d.ts.map +1 -1
- package/build/types/observable/internal/SubjectPayload.d.ts +5 -0
- package/build/types/observable/internal/SubjectPayload.d.ts.map +1 -0
- package/build/types/observable/internal/Subjects.d.ts +16 -0
- package/build/types/observable/internal/Subjects.d.ts.map +1 -0
- package/build/types/observable/internal/UnsubscribableWrapper.d.ts +1 -0
- package/build/types/observable/internal/UnsubscribableWrapper.d.ts.map +1 -0
- package/build/types/observable/internal/WeakRefTrie.d.ts +13 -0
- package/build/types/observable/internal/WeakRefTrie.d.ts.map +1 -0
- package/build/types/observable/internal/{ActionApplication.d.ts → actions/ActionApplication.d.ts} +2 -2
- package/build/types/observable/internal/{ActionApplication.d.ts.map → actions/ActionApplication.d.ts.map} +1 -1
- package/build/types/observable/internal/{OptimisticJob.d.ts → actions/OptimisticJob.d.ts} +4 -4
- package/build/types/observable/internal/actions/OptimisticJob.d.ts.map +1 -0
- package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts +64 -0
- package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts.map +1 -0
- package/build/types/observable/internal/base-list/BaseListQuery.d.ts +145 -0
- package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -0
- package/build/types/observable/internal/base-list/createCollectionConnectable.d.ts +39 -0
- package/build/types/observable/internal/base-list/createCollectionConnectable.d.ts.map +1 -0
- package/build/types/observable/internal/base-list/createCollectionConnectable.test.d.ts +1 -0
- package/build/types/observable/internal/base-list/createCollectionConnectable.test.d.ts.map +1 -0
- package/build/types/observable/internal/base-list/removeDuplicates.d.ts +11 -0
- package/build/types/observable/internal/base-list/removeDuplicates.d.ts.map +1 -0
- package/build/types/observable/internal/createInitEntry.d.ts +3 -0
- package/build/types/observable/internal/createInitEntry.d.ts.map +1 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.d.ts +9 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.d.ts.map +1 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.test.d.ts +1 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.test.d.ts.map +1 -0
- package/build/types/observable/internal/isObjectInstance.d.ts +5 -0
- package/build/types/observable/internal/isObjectInstance.d.ts.map +1 -0
- package/build/types/observable/internal/links/LinksHelper.d.ts +31 -0
- package/build/types/observable/internal/links/LinksHelper.d.ts.map +1 -0
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts +17 -0
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts +47 -0
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -0
- package/build/types/observable/internal/list/InterfaceListQuery.d.ts +18 -0
- package/build/types/observable/internal/list/InterfaceListQuery.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListCacheKey.d.ts +7 -0
- package/build/types/observable/internal/list/ListCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListQuery.d.ts +106 -0
- package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListQueryOptions.d.ts +4 -0
- package/build/types/observable/internal/list/ListQueryOptions.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListsHelper.d.ts +19 -0
- package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -0
- package/build/types/observable/internal/list/ObjectListQuery.d.ts +18 -0
- package/build/types/observable/internal/list/ObjectListQuery.d.ts.map +1 -0
- package/build/types/observable/internal/object/ObjectCacheKey.d.ts +5 -0
- package/build/types/observable/internal/object/ObjectCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/{ObjectQuery.d.ts → object/ObjectQuery.d.ts} +11 -9
- package/build/types/observable/internal/object/ObjectQuery.d.ts.map +1 -0
- package/build/types/observable/internal/object/ObjectsHelper.d.ts +11 -0
- package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -0
- package/build/types/observable/internal/sorting/SortingStrategy.d.ts +41 -0
- package/build/types/observable/internal/sorting/SortingStrategy.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils/invalidateList.d.ts +9 -0
- package/build/types/observable/internal/testUtils/invalidateList.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils/observeLink/expectStandardObserveLink.d.ts +46 -0
- package/build/types/observable/internal/testUtils/observeLink/expectStandardObserveLink.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils/observeObject/expectStandardObserveObject.d.ts +26 -0
- package/build/types/observable/internal/testUtils/observeObject/expectStandardObserveObject.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils.d.ts +26 -4
- package/build/types/observable/internal/testUtils.d.ts.map +1 -1
- package/build/types/public/unstable-do-not-use.d.ts +4 -2
- package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
- package/build/types/util/exponentialBackoff.d.ts +14 -0
- package/build/types/util/exponentialBackoff.d.ts.map +1 -0
- package/build/types/util/exponentialBackoff.test.d.ts +1 -0
- package/build/types/util/exponentialBackoff.test.d.ts.map +1 -0
- package/package.json +27 -27
- package/build/browser/observable/internal/ActionApplication.js.map +0 -1
- package/build/browser/observable/internal/ListQuery.js +0 -618
- package/build/browser/observable/internal/ListQuery.js.map +0 -1
- package/build/browser/observable/internal/ObjectQuery.js.map +0 -1
- package/build/browser/observable/internal/OptimisticJob.js.map +0 -1
- package/build/cjs/chunk-26WFEZQO.cjs.map +0 -1
- package/build/cjs/chunk-633AI7EA.cjs.map +0 -1
- package/build/esm/observable/internal/ActionApplication.js.map +0 -1
- package/build/esm/observable/internal/ListQuery.js +0 -618
- package/build/esm/observable/internal/ListQuery.js.map +0 -1
- package/build/esm/observable/internal/ObjectQuery.js.map +0 -1
- package/build/esm/observable/internal/OptimisticJob.js.map +0 -1
- package/build/types/observable/internal/ListQuery.d.ts +0 -88
- package/build/types/observable/internal/ListQuery.d.ts.map +0 -1
- package/build/types/observable/internal/ObjectQuery.d.ts.map +0 -1
- package/build/types/observable/internal/OptimisticJob.d.ts.map +0 -1
|
@@ -14,21 +14,29 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { editTodo, Employee, FooInterface, Todo } from "@osdk/client.test.ontology";
|
|
17
|
+
import { editTodo, Employee, FooInterface, Office, Todo } from "@osdk/client.test.ontology";
|
|
18
18
|
import { FauxFoundry, ontologies, startNodeApiServer, stubData, TypeHelpers } from "@osdk/shared.test";
|
|
19
19
|
import chalk from "chalk";
|
|
20
|
+
import { inspect } from "node:util";
|
|
20
21
|
import invariant from "tiny-invariant";
|
|
21
|
-
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi
|
|
22
|
+
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
|
22
23
|
import { ActionValidationError } from "../../actions/ActionValidationError.js";
|
|
23
24
|
import { createClient } from "../../createClient.js";
|
|
24
25
|
import { TestLogger } from "../../logger/TestLogger.js";
|
|
26
|
+
import { runOptimisticJob } from "./actions/OptimisticJob.js";
|
|
25
27
|
import { createOptimisticId } from "./OptimisticId.js";
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
28
|
+
import { Store } from "./Store.js";
|
|
29
|
+
import { applyCustomMatchers, createClientMockHelper, createDefer, expectNoMoreCalls, expectSingleLinkCallAndClear, expectSingleListCallAndClear, expectSingleObjectCallAndClear, getObject, mockListSubCallback, mockSingleSubCallback, objectPayloadContaining, updateList, updateObject, waitForCall } from "./testUtils.js";
|
|
30
|
+
import { invalidateList } from "./testUtils/invalidateList.js";
|
|
31
|
+
import { expectStandardObserveLink } from "./testUtils/observeLink/expectStandardObserveLink.js";
|
|
32
|
+
import { expectStandardObserveObject } from "./testUtils/observeObject/expectStandardObserveObject.js";
|
|
29
33
|
const JOHN_DOE_ID = 50030;
|
|
30
34
|
const defer = createDefer();
|
|
31
|
-
const logger = new TestLogger(
|
|
35
|
+
const logger = new TestLogger({}, {
|
|
36
|
+
level: "debug"
|
|
37
|
+
});
|
|
38
|
+
inspect.defaultOptions.depth = 9;
|
|
39
|
+
inspect.defaultOptions.colors = true;
|
|
32
40
|
beforeAll(() => {
|
|
33
41
|
vi.setConfig({
|
|
34
42
|
fakeTimers: {
|
|
@@ -75,10 +83,10 @@ function setupOntology(fauxFoundry) {
|
|
|
75
83
|
}
|
|
76
84
|
function setupSomeEmployees(fauxFoundry) {
|
|
77
85
|
const dataStore = fauxFoundry.getDefaultDataStore();
|
|
78
|
-
dataStore.registerObject(Employee, {
|
|
86
|
+
const emp1 = dataStore.registerObject(Employee, {
|
|
79
87
|
employeeId: 1
|
|
80
88
|
});
|
|
81
|
-
dataStore.registerObject(Employee, {
|
|
89
|
+
const emp2 = dataStore.registerObject(Employee, {
|
|
82
90
|
employeeId: 2
|
|
83
91
|
});
|
|
84
92
|
dataStore.registerObject(Employee, {
|
|
@@ -89,16 +97,214 @@ function setupSomeEmployees(fauxFoundry) {
|
|
|
89
97
|
$apiName: "Employee",
|
|
90
98
|
employeeId: 4
|
|
91
99
|
});
|
|
92
|
-
dataStore.registerObject(Employee, {
|
|
100
|
+
const johnDoe = dataStore.registerObject(Employee, {
|
|
93
101
|
$apiName: "Employee",
|
|
94
102
|
employeeId: JOHN_DOE_ID,
|
|
95
103
|
fullName: "John Doe"
|
|
96
104
|
});
|
|
105
|
+
dataStore.registerLink(emp1, "peeps", johnDoe, "lead");
|
|
106
|
+
|
|
107
|
+
// Create offices
|
|
108
|
+
const office1 = dataStore.registerObject(Office, {
|
|
109
|
+
officeId: "101",
|
|
110
|
+
name: "Office 1"
|
|
111
|
+
});
|
|
112
|
+
const office2 = dataStore.registerObject(Office, {
|
|
113
|
+
officeId: "102",
|
|
114
|
+
name: "Office 2"
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// Link employees to offices (Employee->Office: officeLink, Office->Employee: occupants)
|
|
118
|
+
dataStore.registerLink(emp1, "officeLink", office1, "occupants");
|
|
119
|
+
dataStore.registerLink(emp2, "officeLink", office2, "occupants");
|
|
97
120
|
}
|
|
98
121
|
describe(Store, () => {
|
|
122
|
+
describe("observeLinks", () => {
|
|
123
|
+
let client;
|
|
124
|
+
let cache;
|
|
125
|
+
let fauxFoundry;
|
|
126
|
+
beforeAll(async () => {
|
|
127
|
+
// Set up the mock environment and client
|
|
128
|
+
const testSetup = startNodeApiServer(new FauxFoundry("https://stack.palantir.com/"), createClient, {
|
|
129
|
+
logger
|
|
130
|
+
});
|
|
131
|
+
({
|
|
132
|
+
client,
|
|
133
|
+
fauxFoundry
|
|
134
|
+
} = testSetup);
|
|
135
|
+
|
|
136
|
+
// Use the existing setup function that adds Employee objects
|
|
137
|
+
setupOntology(fauxFoundry);
|
|
138
|
+
setupSomeEmployees(fauxFoundry);
|
|
139
|
+
return () => {
|
|
140
|
+
testSetup.apiServer.close();
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
beforeEach(() => {
|
|
144
|
+
cache = new Store(client);
|
|
145
|
+
return () => {
|
|
146
|
+
cache = undefined;
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
const objectLikeJohnDoe = expect.objectContaining({
|
|
150
|
+
$apiName: "Employee",
|
|
151
|
+
$primaryKey: JOHN_DOE_ID
|
|
152
|
+
});
|
|
153
|
+
expect.objectContaining({
|
|
154
|
+
$apiName: "Employee",
|
|
155
|
+
$primaryKey: 2
|
|
156
|
+
});
|
|
157
|
+
it("removing link updates", async () => {
|
|
158
|
+
const {
|
|
159
|
+
payload: emp1Payload,
|
|
160
|
+
subFn
|
|
161
|
+
} = await expectStandardObserveObject({
|
|
162
|
+
cache,
|
|
163
|
+
type: Employee,
|
|
164
|
+
primaryKey: 1
|
|
165
|
+
});
|
|
166
|
+
const emp1 = emp1Payload?.object;
|
|
167
|
+
!emp1 ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
168
|
+
|
|
169
|
+
// Set up mock callback for observing links
|
|
170
|
+
const {
|
|
171
|
+
payload,
|
|
172
|
+
linkSubFn
|
|
173
|
+
} = await expectStandardObserveLink({
|
|
174
|
+
store: cache,
|
|
175
|
+
srcObject: emp1,
|
|
176
|
+
srcLinkName: "peeps",
|
|
177
|
+
targetType: Employee,
|
|
178
|
+
expected: [objectLikeJohnDoe]
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
// Unregister the link "in the backend"
|
|
182
|
+
fauxFoundry.getDefaultDataStore().unregisterLink(asBsoStub(emp1), "peeps", {
|
|
183
|
+
__apiName: "Employee",
|
|
184
|
+
__primaryKey: JOHN_DOE_ID
|
|
185
|
+
}, "lead");
|
|
186
|
+
testStage("Observing Employee 1's peeps");
|
|
187
|
+
|
|
188
|
+
// Invalidate the employee cache
|
|
189
|
+
const invalidateEmployeePromise = cache.invalidateObjectType("Employee", undefined);
|
|
190
|
+
await waitForCall(linkSubFn);
|
|
191
|
+
// Initially go to an invalidated loading state
|
|
192
|
+
expectSingleLinkCallAndClear(linkSubFn, [objectLikeJohnDoe], {
|
|
193
|
+
status: "loading"
|
|
194
|
+
});
|
|
195
|
+
await invalidateEmployeePromise;
|
|
196
|
+
|
|
197
|
+
// Should have no peeps now
|
|
198
|
+
expectSingleLinkCallAndClear(linkSubFn, [], {
|
|
199
|
+
status: "loaded"
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
it("invalidating Employee type only invalidates links, not Office objects", async () => {
|
|
203
|
+
// Get an Office object that has Employee occupants
|
|
204
|
+
const {
|
|
205
|
+
payload: office1Payload,
|
|
206
|
+
subFn: officeSubFn
|
|
207
|
+
} = await expectStandardObserveObject({
|
|
208
|
+
cache,
|
|
209
|
+
type: Office,
|
|
210
|
+
primaryKey: "101"
|
|
211
|
+
});
|
|
212
|
+
const office1 = office1Payload?.object;
|
|
213
|
+
!office1 ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
214
|
+
expect(await office1.$link.occupants.fetchPage()).toMatchInlineSnapshot(`
|
|
215
|
+
{
|
|
216
|
+
"data": [
|
|
217
|
+
{
|
|
218
|
+
"$apiName": "Employee",
|
|
219
|
+
"$objectSpecifier": "Employee:1",
|
|
220
|
+
"$objectType": "Employee",
|
|
221
|
+
"$primaryKey": 1,
|
|
222
|
+
"$title": undefined,
|
|
223
|
+
"employeeId": 1,
|
|
224
|
+
"office": "101",
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
"nextPageToken": undefined,
|
|
228
|
+
"totalCount": undefined,
|
|
229
|
+
}
|
|
230
|
+
`);
|
|
231
|
+
testStage("Observing Employee 1");
|
|
232
|
+
|
|
233
|
+
// Get an Employee object linked to the office
|
|
234
|
+
const {
|
|
235
|
+
payload: emp1Payload,
|
|
236
|
+
subFn: empSubFn
|
|
237
|
+
} = await expectStandardObserveObject({
|
|
238
|
+
cache,
|
|
239
|
+
type: Employee,
|
|
240
|
+
primaryKey: 1
|
|
241
|
+
});
|
|
242
|
+
const emp1 = emp1Payload?.object;
|
|
243
|
+
!emp1 ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
244
|
+
testStage("Observing Office 101's occupants");
|
|
245
|
+
|
|
246
|
+
// Set up observation of occupants link
|
|
247
|
+
const {
|
|
248
|
+
linkSubFn: occupantsLinkSubFn
|
|
249
|
+
} = await expectStandardObserveLink({
|
|
250
|
+
store: cache,
|
|
251
|
+
srcObject: office1,
|
|
252
|
+
srcLinkName: "occupants",
|
|
253
|
+
targetType: Employee,
|
|
254
|
+
expected: [expect.objectContaining({
|
|
255
|
+
$primaryKey: 1
|
|
256
|
+
})]
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
// Clear any initial calls
|
|
260
|
+
officeSubFn.next.mockClear();
|
|
261
|
+
empSubFn.next.mockClear();
|
|
262
|
+
occupantsLinkSubFn.next.mockClear();
|
|
263
|
+
testStage("Invalidating Employee object type");
|
|
264
|
+
|
|
265
|
+
// Invalidate the Employee object type
|
|
266
|
+
// This should cause:
|
|
267
|
+
// - any object query for Employee to be invalidated
|
|
268
|
+
// - any object list query for Employee to be invalidated
|
|
269
|
+
// - any link queries where the source is an Employee to be invalidated
|
|
270
|
+
// - any link queries where the target is an Employee to be invalidated
|
|
271
|
+
const invalidateEmployeePromise = cache.invalidateObjectType(Employee, undefined);
|
|
272
|
+
|
|
273
|
+
// The link should be invalidated (loading state)
|
|
274
|
+
await waitForCall(occupantsLinkSubFn, 1);
|
|
275
|
+
expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {
|
|
276
|
+
status: "loading"
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
// The employee should be invalidated (loading state)
|
|
280
|
+
await waitForCall(empSubFn, 1);
|
|
281
|
+
expectSingleObjectCallAndClear(empSubFn, emp1, "loading");
|
|
282
|
+
|
|
283
|
+
// The link should be revalidated (loaded state)
|
|
284
|
+
await waitForCall(occupantsLinkSubFn, 1);
|
|
285
|
+
expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {
|
|
286
|
+
status: "loaded"
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
// the Employee object should also be invalidated (loading state)
|
|
290
|
+
await waitForCall(empSubFn, 1);
|
|
291
|
+
expectSingleObjectCallAndClear(empSubFn, emp1, "loaded");
|
|
292
|
+
|
|
293
|
+
// The Office object should NOT have any calls
|
|
294
|
+
// This is the key verification - no calls should be made to the office subscription
|
|
295
|
+
expect(officeSubFn.next).not.toHaveBeenCalled();
|
|
296
|
+
await invalidateEmployeePromise;
|
|
297
|
+
|
|
298
|
+
// ensure at the end of invalidation there are no new calls
|
|
299
|
+
expect(occupantsLinkSubFn.next).not.toHaveBeenCalled();
|
|
300
|
+
expect(empSubFn.next).not.toHaveBeenCalled();
|
|
301
|
+
expect(officeSubFn.next).not.toHaveBeenCalled();
|
|
302
|
+
});
|
|
303
|
+
});
|
|
99
304
|
describe("with mock server", () => {
|
|
100
305
|
let client;
|
|
101
306
|
let cache;
|
|
307
|
+
let cacheKeys;
|
|
102
308
|
let employeesAsServerReturns;
|
|
103
309
|
let mutatedEmployees;
|
|
104
310
|
beforeAll(async () => {
|
|
@@ -120,13 +326,14 @@ describe(Store, () => {
|
|
|
120
326
|
});
|
|
121
327
|
beforeEach(() => {
|
|
122
328
|
cache = new Store(client);
|
|
329
|
+
cacheKeys = cache.cacheKeys;
|
|
123
330
|
return () => {
|
|
124
331
|
cache = undefined;
|
|
125
332
|
};
|
|
126
333
|
});
|
|
127
334
|
it("basic single object works", async () => {
|
|
128
335
|
const emp = employeesAsServerReturns[0];
|
|
129
|
-
const cacheKey =
|
|
336
|
+
const cacheKey = cacheKeys.get("object", "Employee", emp.$primaryKey);
|
|
130
337
|
|
|
131
338
|
// starts empty
|
|
132
339
|
expect(cache.getValue(cacheKey)?.value).toBeUndefined();
|
|
@@ -149,7 +356,9 @@ describe(Store, () => {
|
|
|
149
356
|
updateObject(cache, emp); // pre-seed the cache with the "real" value
|
|
150
357
|
|
|
151
358
|
const subFn = mockSingleSubCallback();
|
|
152
|
-
defer(cache.
|
|
359
|
+
defer(cache.objects.observe({
|
|
360
|
+
apiName: Employee,
|
|
361
|
+
pk: emp.$primaryKey,
|
|
153
362
|
mode: "offline"
|
|
154
363
|
}, subFn));
|
|
155
364
|
expectSingleObjectCallAndClear(subFn, emp, "loaded");
|
|
@@ -165,7 +374,7 @@ describe(Store, () => {
|
|
|
165
374
|
}), "loaded");
|
|
166
375
|
|
|
167
376
|
// remove the optimistic write
|
|
168
|
-
cache.
|
|
377
|
+
cache.layers.remove(optimisticId);
|
|
169
378
|
expectSingleObjectCallAndClear(subFn, emp, "loaded");
|
|
170
379
|
});
|
|
171
380
|
it("rolls back to an updated real value", async () => {
|
|
@@ -177,12 +386,14 @@ describe(Store, () => {
|
|
|
177
386
|
}, employeesAsServerReturns);
|
|
178
387
|
const emp = employeesAsServerReturns[0];
|
|
179
388
|
const empSubFn = mockSingleSubCallback();
|
|
180
|
-
defer(cache.
|
|
389
|
+
defer(cache.objects.observe({
|
|
390
|
+
apiName: Employee,
|
|
391
|
+
pk: emp.$primaryKey,
|
|
181
392
|
mode: "offline"
|
|
182
393
|
}, empSubFn));
|
|
183
394
|
expectSingleObjectCallAndClear(empSubFn, emp, "loaded");
|
|
184
395
|
const listSubFn = mockListSubCallback();
|
|
185
|
-
defer(cache.
|
|
396
|
+
defer(cache.lists.observe({
|
|
186
397
|
type: Employee,
|
|
187
398
|
mode: "offline"
|
|
188
399
|
}, listSubFn));
|
|
@@ -223,7 +434,7 @@ describe(Store, () => {
|
|
|
223
434
|
}, [truthUpdatedEmployee]);
|
|
224
435
|
|
|
225
436
|
// remove the optimistic write
|
|
226
|
-
cache.
|
|
437
|
+
cache.layers.remove(optimisticId);
|
|
227
438
|
|
|
228
439
|
// see the object observation get updated
|
|
229
440
|
expectSingleObjectCallAndClear(empSubFn, truthUpdatedEmployee, "loaded");
|
|
@@ -240,7 +451,9 @@ describe(Store, () => {
|
|
|
240
451
|
updateObject(cache, emp); // pre-seed the cache with the "real" value
|
|
241
452
|
|
|
242
453
|
const subFn = mockSingleSubCallback();
|
|
243
|
-
defer(cache.
|
|
454
|
+
defer(cache.objects.observe({
|
|
455
|
+
apiName: Employee,
|
|
456
|
+
pk: emp.$primaryKey,
|
|
244
457
|
mode: "offline"
|
|
245
458
|
}, subFn));
|
|
246
459
|
expectSingleObjectCallAndClear(subFn, emp, "loaded");
|
|
@@ -263,7 +476,7 @@ describe(Store, () => {
|
|
|
263
476
|
expect(subFn.next).not.toHaveBeenCalled();
|
|
264
477
|
|
|
265
478
|
// remove the optimistic write
|
|
266
|
-
cache.
|
|
479
|
+
cache.layers.remove(optimisticId);
|
|
267
480
|
expectSingleObjectCallAndClear(subFn, truthUpdatedEmployee);
|
|
268
481
|
expectNoMoreCalls(subFn);
|
|
269
482
|
});
|
|
@@ -276,12 +489,14 @@ describe(Store, () => {
|
|
|
276
489
|
orderBy: {}
|
|
277
490
|
}, [emp]);
|
|
278
491
|
const subFn = mockSingleSubCallback();
|
|
279
|
-
defer(cache.
|
|
492
|
+
defer(cache.objects.observe({
|
|
493
|
+
apiName: Employee,
|
|
494
|
+
pk: emp.$primaryKey,
|
|
280
495
|
mode: "offline"
|
|
281
496
|
}, subFn));
|
|
282
497
|
expectSingleObjectCallAndClear(subFn, emp);
|
|
283
498
|
const subListFn = mockListSubCallback();
|
|
284
|
-
defer(cache.
|
|
499
|
+
defer(cache.lists.observe({
|
|
285
500
|
type: Employee,
|
|
286
501
|
mode: "offline"
|
|
287
502
|
}, subListFn));
|
|
@@ -289,7 +504,7 @@ describe(Store, () => {
|
|
|
289
504
|
expectSingleListCallAndClear(subListFn, [emp], {
|
|
290
505
|
status: "loaded"
|
|
291
506
|
});
|
|
292
|
-
const cacheKey =
|
|
507
|
+
const cacheKey = cacheKeys.get("object", emp.$apiName, emp.$primaryKey);
|
|
293
508
|
|
|
294
509
|
// Actual test is here, prior to this is setup
|
|
295
510
|
testStage("delete the object");
|
|
@@ -316,7 +531,9 @@ describe(Store, () => {
|
|
|
316
531
|
});
|
|
317
532
|
updateObject(cache, staleEmp);
|
|
318
533
|
const subFn = mockSingleSubCallback();
|
|
319
|
-
defer(cache.
|
|
534
|
+
defer(cache.objects.observe({
|
|
535
|
+
apiName: Employee,
|
|
536
|
+
pk: emp.$primaryKey,
|
|
320
537
|
mode: "offline"
|
|
321
538
|
}, subFn));
|
|
322
539
|
expectSingleObjectCallAndClear(subFn, staleEmp, "loaded");
|
|
@@ -331,12 +548,6 @@ describe(Store, () => {
|
|
|
331
548
|
});
|
|
332
549
|
});
|
|
333
550
|
describe(".invalidateList", () => {
|
|
334
|
-
beforeEach(() => {
|
|
335
|
-
vi.useFakeTimers({});
|
|
336
|
-
});
|
|
337
|
-
afterEach(() => {
|
|
338
|
-
vi.useRealTimers();
|
|
339
|
-
});
|
|
340
551
|
it("triggers an update", async () => {
|
|
341
552
|
const emp = employeesAsServerReturns[0];
|
|
342
553
|
const staleEmp = emp.$clone({
|
|
@@ -348,12 +559,14 @@ describe(Store, () => {
|
|
|
348
559
|
orderBy: {}
|
|
349
560
|
}, [staleEmp]);
|
|
350
561
|
const subFn = mockSingleSubCallback();
|
|
351
|
-
defer(cache.
|
|
562
|
+
defer(cache.objects.observe({
|
|
563
|
+
apiName: Employee,
|
|
564
|
+
pk: emp.$primaryKey,
|
|
352
565
|
mode: "offline"
|
|
353
566
|
}, subFn));
|
|
354
567
|
expectSingleObjectCallAndClear(subFn, staleEmp);
|
|
355
568
|
const subListFn = mockListSubCallback();
|
|
356
|
-
defer(cache.
|
|
569
|
+
defer(cache.lists.observe({
|
|
357
570
|
type: Employee,
|
|
358
571
|
mode: "offline"
|
|
359
572
|
}, subListFn));
|
|
@@ -399,12 +612,14 @@ describe(Store, () => {
|
|
|
399
612
|
orderBy: {}
|
|
400
613
|
}, [staleEmp]);
|
|
401
614
|
const subFn = mockSingleSubCallback();
|
|
402
|
-
defer(cache.
|
|
615
|
+
defer(cache.objects.observe({
|
|
616
|
+
apiName: Employee,
|
|
617
|
+
pk: emp.$primaryKey,
|
|
403
618
|
mode: "offline"
|
|
404
619
|
}, subFn));
|
|
405
620
|
expectSingleObjectCallAndClear(subFn, staleEmp);
|
|
406
621
|
const subListFn = mockListSubCallback();
|
|
407
|
-
defer(cache.
|
|
622
|
+
defer(cache.lists.observe({
|
|
408
623
|
type: Employee,
|
|
409
624
|
where: {},
|
|
410
625
|
orderBy: {},
|
|
@@ -422,8 +637,19 @@ describe(Store, () => {
|
|
|
422
637
|
});
|
|
423
638
|
await waitForCall(subListFn, 1);
|
|
424
639
|
expectSingleListCallAndClear(subListFn, employeesAsServerReturns);
|
|
425
|
-
|
|
426
|
-
|
|
640
|
+
testStage("Check invalidation call for single sub");
|
|
641
|
+
await waitForCall(subFn, 2);
|
|
642
|
+
// First call is for loading state
|
|
643
|
+
expect(subFn.next).toHaveBeenNthCalledWith(1, objectPayloadContaining({
|
|
644
|
+
status: "loading",
|
|
645
|
+
object: staleEmp
|
|
646
|
+
}));
|
|
647
|
+
// Second call is for loaded state with fresh data
|
|
648
|
+
expect(subFn.next).toHaveBeenNthCalledWith(2, objectPayloadContaining({
|
|
649
|
+
status: "loaded",
|
|
650
|
+
object: emp
|
|
651
|
+
}));
|
|
652
|
+
subFn.next.mockClear();
|
|
427
653
|
|
|
428
654
|
// we don't need this value to control the test but we want to make sure we don't have
|
|
429
655
|
// any unhandled exceptions upon test completion
|
|
@@ -446,7 +672,9 @@ describe(Store, () => {
|
|
|
446
672
|
fullName: "John Doe"
|
|
447
673
|
});
|
|
448
674
|
it("fetches and updates twice", async () => {
|
|
449
|
-
defer(cache.
|
|
675
|
+
defer(cache.objects.observe({
|
|
676
|
+
apiName: Employee,
|
|
677
|
+
pk: JOHN_DOE_ID,
|
|
450
678
|
mode: "force"
|
|
451
679
|
}, subFn1));
|
|
452
680
|
expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(objectPayloadContaining({
|
|
@@ -462,7 +690,9 @@ describe(Store, () => {
|
|
|
462
690
|
}));
|
|
463
691
|
const firstLoad = subFn1.next.mock.lastCall?.[0];
|
|
464
692
|
subFn1.next.mockClear();
|
|
465
|
-
defer(cache.
|
|
693
|
+
defer(cache.objects.observe({
|
|
694
|
+
apiName: Employee,
|
|
695
|
+
pk: JOHN_DOE_ID,
|
|
466
696
|
mode: "force"
|
|
467
697
|
}, subFn2));
|
|
468
698
|
expectSingleObjectCallAndClear(subFn1, likeEmployee50030, "loading");
|
|
@@ -489,7 +719,9 @@ describe(Store, () => {
|
|
|
489
719
|
subFn.complete.mockClear();
|
|
490
720
|
subFn.next.mockClear();
|
|
491
721
|
subFn.error.mockClear();
|
|
492
|
-
sub = defer(cache.
|
|
722
|
+
sub = defer(cache.objects.observe({
|
|
723
|
+
apiName: Employee,
|
|
724
|
+
pk: JOHN_DOE_ID,
|
|
493
725
|
mode: "offline"
|
|
494
726
|
}, subFn));
|
|
495
727
|
expectSingleObjectCallAndClear(subFn, undefined, "init");
|
|
@@ -535,11 +767,10 @@ describe(Store, () => {
|
|
|
535
767
|
}));
|
|
536
768
|
});
|
|
537
769
|
});
|
|
538
|
-
describe(".
|
|
770
|
+
describe(".lists.observe", () => {
|
|
539
771
|
const listSub1 = mockListSubCallback();
|
|
540
772
|
const ifaceSub = mockListSubCallback();
|
|
541
773
|
beforeEach(() => {
|
|
542
|
-
vi.useFakeTimers({});
|
|
543
774
|
vi.mocked(listSub1.next).mockReset();
|
|
544
775
|
vi.mocked(listSub1.error).mockReset();
|
|
545
776
|
vi.mocked(listSub1.complete).mockReset();
|
|
@@ -547,22 +778,18 @@ describe(Store, () => {
|
|
|
547
778
|
vi.mocked(ifaceSub.error).mockReset();
|
|
548
779
|
vi.mocked(ifaceSub.complete).mockReset();
|
|
549
780
|
});
|
|
550
|
-
afterEach(() => {
|
|
551
|
-
vi.useRealTimers();
|
|
552
|
-
});
|
|
553
781
|
describe("mode=force", () => {
|
|
554
782
|
it("initial load", async () => {
|
|
555
|
-
defer(cache.
|
|
783
|
+
defer(cache.lists.observe({
|
|
556
784
|
type: Employee,
|
|
557
785
|
orderBy: {},
|
|
558
786
|
mode: "force"
|
|
559
787
|
}, listSub1));
|
|
560
|
-
defer(cache.
|
|
788
|
+
defer(cache.lists.observe({
|
|
561
789
|
type: FooInterface,
|
|
562
790
|
orderBy: {},
|
|
563
791
|
mode: "force"
|
|
564
792
|
}, ifaceSub));
|
|
565
|
-
vitest.runOnlyPendingTimers();
|
|
566
793
|
await waitForCall(listSub1);
|
|
567
794
|
await waitForCall(ifaceSub);
|
|
568
795
|
expectSingleListCallAndClear(listSub1, [], {
|
|
@@ -593,7 +820,7 @@ describe(Store, () => {
|
|
|
593
820
|
where: {},
|
|
594
821
|
orderBy: {}
|
|
595
822
|
}, mutatedEmployees);
|
|
596
|
-
defer(cache.
|
|
823
|
+
defer(cache.lists.observe({
|
|
597
824
|
type: Employee,
|
|
598
825
|
mode: "force"
|
|
599
826
|
}, listSub1));
|
|
@@ -611,19 +838,18 @@ describe(Store, () => {
|
|
|
611
838
|
});
|
|
612
839
|
describe("mode = offline", () => {
|
|
613
840
|
it("updates with list updates", async () => {
|
|
614
|
-
defer(cache.
|
|
841
|
+
defer(cache.lists.observe({
|
|
615
842
|
type: Employee,
|
|
616
843
|
where: {},
|
|
617
844
|
orderBy: {},
|
|
618
845
|
mode: "offline"
|
|
619
846
|
}, listSub1));
|
|
620
|
-
expect(listSub1.next).toHaveBeenCalledTimes(0);
|
|
621
847
|
updateList(cache, {
|
|
622
848
|
type: Employee,
|
|
623
849
|
where: {},
|
|
624
850
|
orderBy: {}
|
|
625
851
|
}, employeesAsServerReturns);
|
|
626
|
-
|
|
852
|
+
await waitForCall(listSub1);
|
|
627
853
|
expectSingleListCallAndClear(listSub1, employeesAsServerReturns);
|
|
628
854
|
|
|
629
855
|
// list is just now one object
|
|
@@ -632,23 +858,22 @@ describe(Store, () => {
|
|
|
632
858
|
where: {},
|
|
633
859
|
orderBy: {}
|
|
634
860
|
}, [employeesAsServerReturns[0]]);
|
|
635
|
-
|
|
861
|
+
await waitForCall(listSub1);
|
|
636
862
|
expectSingleListCallAndClear(listSub1, [employeesAsServerReturns[0]]);
|
|
637
863
|
});
|
|
638
864
|
it("updates with different list updates", async () => {
|
|
639
|
-
defer(cache.
|
|
865
|
+
defer(cache.lists.observe({
|
|
640
866
|
type: Employee,
|
|
641
867
|
where: {},
|
|
642
868
|
orderBy: {},
|
|
643
869
|
mode: "offline"
|
|
644
870
|
}, listSub1));
|
|
645
|
-
expect(listSub1.next).toHaveBeenCalledTimes(0);
|
|
646
871
|
updateList(cache, {
|
|
647
872
|
type: Employee,
|
|
648
873
|
where: {},
|
|
649
874
|
orderBy: {}
|
|
650
875
|
}, employeesAsServerReturns);
|
|
651
|
-
|
|
876
|
+
await waitForCall(listSub1);
|
|
652
877
|
expectSingleListCallAndClear(listSub1, employeesAsServerReturns);
|
|
653
878
|
|
|
654
879
|
// new where === different list
|
|
@@ -661,9 +886,9 @@ describe(Store, () => {
|
|
|
661
886
|
},
|
|
662
887
|
orderBy: {}
|
|
663
888
|
}, mutatedEmployees);
|
|
664
|
-
vitest.runOnlyPendingTimers();
|
|
665
889
|
|
|
666
890
|
// original list updates still
|
|
891
|
+
await waitForCall(listSub1);
|
|
667
892
|
expectSingleListCallAndClear(listSub1, mutatedEmployees);
|
|
668
893
|
});
|
|
669
894
|
});
|
|
@@ -677,14 +902,13 @@ describe(Store, () => {
|
|
|
677
902
|
});
|
|
678
903
|
it("works in the solo case", async () => {
|
|
679
904
|
const listSub = mockListSubCallback();
|
|
680
|
-
defer(cache.
|
|
905
|
+
defer(cache.lists.observe({
|
|
681
906
|
type: Employee,
|
|
682
907
|
where: {},
|
|
683
908
|
orderBy: {},
|
|
684
909
|
mode: "force",
|
|
685
910
|
pageSize: 1
|
|
686
911
|
}, listSub));
|
|
687
|
-
expect(listSub.next).not.toHaveBeenCalled();
|
|
688
912
|
await waitForCall(listSub, 1);
|
|
689
913
|
expectSingleListCallAndClear(listSub, [], {
|
|
690
914
|
status: "loading"
|
|
@@ -740,15 +964,22 @@ describe(Store, () => {
|
|
|
740
964
|
|
|
741
965
|
// ignores unhandled rejection, like one we will get from fire-and-forget metadata call
|
|
742
966
|
process.on("unhandledRejection", () => {});
|
|
743
|
-
store.
|
|
967
|
+
store.lists.observe({
|
|
744
968
|
type: {
|
|
745
969
|
apiName: "notReal",
|
|
746
970
|
type: "object"
|
|
747
971
|
},
|
|
748
972
|
orderBy: {}
|
|
749
973
|
}, sub);
|
|
750
|
-
await waitForCall(sub.
|
|
751
|
-
|
|
974
|
+
await waitForCall(sub.next);
|
|
975
|
+
|
|
976
|
+
// initial loading state
|
|
977
|
+
expect(sub.next).toHaveBeenCalledOnce();
|
|
978
|
+
expectSingleListCallAndClear(sub, [], {
|
|
979
|
+
status: "loading"
|
|
980
|
+
});
|
|
981
|
+
await waitForCall(sub.error);
|
|
982
|
+
expect(sub.error).toHaveBeenCalledOnce();
|
|
752
983
|
expect(sub.next).not.toHaveBeenCalled();
|
|
753
984
|
});
|
|
754
985
|
describe("batching", () => {
|
|
@@ -763,8 +994,14 @@ describe(Store, () => {
|
|
|
763
994
|
});
|
|
764
995
|
const a = mockSingleSubCallback();
|
|
765
996
|
const b = mockSingleSubCallback();
|
|
766
|
-
defer(store.
|
|
767
|
-
|
|
997
|
+
defer(store.objects.observe({
|
|
998
|
+
apiName: Employee,
|
|
999
|
+
pk: 0
|
|
1000
|
+
}, a));
|
|
1001
|
+
defer(store.objects.observe({
|
|
1002
|
+
apiName: Employee,
|
|
1003
|
+
pk: 1
|
|
1004
|
+
}, b));
|
|
768
1005
|
await a.expectLoadingAndLoaded({
|
|
769
1006
|
loading: objectPayloadContaining({
|
|
770
1007
|
status: "loading",
|
|
@@ -800,7 +1037,10 @@ describe(Store, () => {
|
|
|
800
1037
|
text: "og title"
|
|
801
1038
|
});
|
|
802
1039
|
const todoSubFn = mockSingleSubCallback();
|
|
803
|
-
defer(store.
|
|
1040
|
+
defer(store.objects.observe({
|
|
1041
|
+
apiName: Todo,
|
|
1042
|
+
pk: 0
|
|
1043
|
+
}, todoSubFn));
|
|
804
1044
|
await todoSubFn.expectLoadingAndLoaded({
|
|
805
1045
|
loading: objectPayloadContaining({
|
|
806
1046
|
status: "loading",
|
|
@@ -842,7 +1082,10 @@ describe(Store, () => {
|
|
|
842
1082
|
text: "does not matter"
|
|
843
1083
|
});
|
|
844
1084
|
const todoSubFn = mockSingleSubCallback();
|
|
845
|
-
defer(store.
|
|
1085
|
+
defer(store.objects.observe({
|
|
1086
|
+
apiName: Todo,
|
|
1087
|
+
pk: 0
|
|
1088
|
+
}, todoSubFn));
|
|
846
1089
|
await todoSubFn.expectLoadingAndLoaded({
|
|
847
1090
|
loading: objectPayloadContaining({
|
|
848
1091
|
status: "loading",
|
|
@@ -855,7 +1098,7 @@ describe(Store, () => {
|
|
|
855
1098
|
isOptimistic: false
|
|
856
1099
|
})
|
|
857
1100
|
});
|
|
858
|
-
const object = store.getValue(store.
|
|
1101
|
+
const object = store.getValue(store.cacheKeys.get("object", "Todo", 0))?.value;
|
|
859
1102
|
!object ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
860
1103
|
|
|
861
1104
|
// at this point we have an observation properly set up
|
|
@@ -915,19 +1158,27 @@ describe(Store, () => {
|
|
|
915
1158
|
text: "asc"
|
|
916
1159
|
}
|
|
917
1160
|
};
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
beforeEach(() => {
|
|
921
|
-
|
|
1161
|
+
let subListUnordered = mockListSubCallback();
|
|
1162
|
+
let subListOrdered = mockListSubCallback();
|
|
1163
|
+
beforeEach(async () => {
|
|
1164
|
+
subListUnordered = mockListSubCallback();
|
|
1165
|
+
subListOrdered = mockListSubCallback();
|
|
1166
|
+
defer(store.lists.observe({
|
|
922
1167
|
...noWhereNoOrderBy,
|
|
923
1168
|
mode: "offline"
|
|
924
1169
|
}, subListUnordered));
|
|
925
|
-
|
|
926
|
-
|
|
1170
|
+
await waitForCall(subListUnordered);
|
|
1171
|
+
expectSingleListCallAndClear(subListUnordered, [], {
|
|
1172
|
+
status: "init"
|
|
1173
|
+
});
|
|
1174
|
+
defer(store.lists.observe({
|
|
927
1175
|
...noWhereOrderByText,
|
|
928
1176
|
mode: "offline"
|
|
929
1177
|
}, subListOrdered));
|
|
930
|
-
|
|
1178
|
+
await waitForCall(subListOrdered);
|
|
1179
|
+
expectSingleListCallAndClear(subListOrdered, [], {
|
|
1180
|
+
status: "init"
|
|
1181
|
+
});
|
|
931
1182
|
});
|
|
932
1183
|
it("invalidates the correct lists", async () => {
|
|
933
1184
|
// for whatever reason, the first list is loaded as [B, A]
|
|
@@ -1114,7 +1365,7 @@ describe(Store, () => {
|
|
|
1114
1365
|
$apiName: "Employee",
|
|
1115
1366
|
$title: `truth ${i}`
|
|
1116
1367
|
}));
|
|
1117
|
-
const cacheKeys = baseObjects.map(obj => store.
|
|
1368
|
+
const cacheKeys = baseObjects.map(obj => store.cacheKeys.get("object", "Employee", obj.$primaryKey));
|
|
1118
1369
|
|
|
1119
1370
|
// set the truth
|
|
1120
1371
|
for (const obj of baseObjects) {
|
|
@@ -1149,7 +1400,7 @@ describe(Store, () => {
|
|
|
1149
1400
|
}
|
|
1150
1401
|
|
|
1151
1402
|
// remove the first layer
|
|
1152
|
-
store.
|
|
1403
|
+
store.layers.remove(layerIds[0]);
|
|
1153
1404
|
|
|
1154
1405
|
// should have truth object 1 and optimistic object 2
|
|
1155
1406
|
expect(getObject(store, "Employee", 1)).toEqual(expect.objectContaining({
|
|
@@ -1160,7 +1411,7 @@ describe(Store, () => {
|
|
|
1160
1411
|
}));
|
|
1161
1412
|
|
|
1162
1413
|
// remove the second layer
|
|
1163
|
-
store.
|
|
1414
|
+
store.layers.remove(layerIds[1]);
|
|
1164
1415
|
|
|
1165
1416
|
// should have truth objects
|
|
1166
1417
|
for (const obj of baseObjects) {
|
|
@@ -1171,4 +1422,10 @@ describe(Store, () => {
|
|
|
1171
1422
|
});
|
|
1172
1423
|
});
|
|
1173
1424
|
});
|
|
1425
|
+
export function asBsoStub(x) {
|
|
1426
|
+
return {
|
|
1427
|
+
__apiName: x.$apiName,
|
|
1428
|
+
__primaryKey: x.$primaryKey
|
|
1429
|
+
};
|
|
1430
|
+
}
|
|
1174
1431
|
//# sourceMappingURL=Store.test.js.map
|