@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
|
@@ -0,0 +1,597 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { BehaviorSubject } from "rxjs";
|
|
18
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
19
|
+
import { createClientMockHelper, mockObserver, waitForCall } from "../testUtils.js";
|
|
20
|
+
import { createCollectionConnectable as actualCreateCollectionConnectable } from "./createCollectionConnectable.js";
|
|
21
|
+
|
|
22
|
+
// Test payload type for our collection
|
|
23
|
+
|
|
24
|
+
// Mock object instances for testing
|
|
25
|
+
const mockEmployee1 = {
|
|
26
|
+
$apiName: "Employee",
|
|
27
|
+
$primaryKey: 1,
|
|
28
|
+
$objectType: "Employee",
|
|
29
|
+
$title: "Employee 1",
|
|
30
|
+
employeeId: 1,
|
|
31
|
+
fullName: "John Doe"
|
|
32
|
+
};
|
|
33
|
+
const mockEmployee2 = {
|
|
34
|
+
$apiName: "Employee",
|
|
35
|
+
$primaryKey: 2,
|
|
36
|
+
$objectType: "Employee",
|
|
37
|
+
$title: "Employee 2",
|
|
38
|
+
employeeId: 2,
|
|
39
|
+
fullName: "Jane Smith"
|
|
40
|
+
};
|
|
41
|
+
const mockEmployee3 = {
|
|
42
|
+
$apiName: "Employee",
|
|
43
|
+
$primaryKey: 3,
|
|
44
|
+
$objectType: "Employee",
|
|
45
|
+
$title: "Employee 3",
|
|
46
|
+
employeeId: 3,
|
|
47
|
+
fullName: "Bob Johnson"
|
|
48
|
+
};
|
|
49
|
+
describe("createCollectionConnectable", () => {
|
|
50
|
+
let mockSubjects;
|
|
51
|
+
let createPayload;
|
|
52
|
+
let mockListCacheKey;
|
|
53
|
+
beforeEach(() => {
|
|
54
|
+
const {
|
|
55
|
+
client
|
|
56
|
+
} = createClientMockHelper();
|
|
57
|
+
mockSubjects = {
|
|
58
|
+
get: vi.fn()
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// Mock cache key for list
|
|
62
|
+
mockListCacheKey = {
|
|
63
|
+
type: "list",
|
|
64
|
+
otherKeys: ["Employee", {}, {}]
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// Create payload function that mimics real usage
|
|
68
|
+
createPayload = vi.fn(params => ({
|
|
69
|
+
data: params.resolvedData,
|
|
70
|
+
status: params.status,
|
|
71
|
+
isOptimistic: params.isOptimistic,
|
|
72
|
+
lastUpdated: params.lastUpdated,
|
|
73
|
+
count: params.resolvedData.length
|
|
74
|
+
}));
|
|
75
|
+
});
|
|
76
|
+
describe("basic functionality", () => {
|
|
77
|
+
it("should create a connectable observable with resolved data", async () => {
|
|
78
|
+
// Mock object cache keys
|
|
79
|
+
const objectKey1 = {
|
|
80
|
+
type: "object",
|
|
81
|
+
otherKeys: ["Employee", 1]
|
|
82
|
+
};
|
|
83
|
+
const objectKey2 = {
|
|
84
|
+
type: "object",
|
|
85
|
+
otherKeys: ["Employee", 2]
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// Create subject payload with mock data
|
|
89
|
+
const subjectPayload = {
|
|
90
|
+
cacheKey: mockListCacheKey,
|
|
91
|
+
value: {
|
|
92
|
+
data: [objectKey1, objectKey2]
|
|
93
|
+
},
|
|
94
|
+
status: "loaded",
|
|
95
|
+
lastUpdated: Date.now(),
|
|
96
|
+
isOptimistic: false
|
|
97
|
+
};
|
|
98
|
+
const subject = new BehaviorSubject(subjectPayload);
|
|
99
|
+
|
|
100
|
+
// Mock store.getSubject to return object observables
|
|
101
|
+
vi.mocked(mockSubjects.get).mockImplementation(cacheKey => {
|
|
102
|
+
if (cacheKey === objectKey1) {
|
|
103
|
+
return new BehaviorSubject({
|
|
104
|
+
cacheKey: objectKey1,
|
|
105
|
+
value: mockEmployee1,
|
|
106
|
+
status: "loaded",
|
|
107
|
+
lastUpdated: Date.now(),
|
|
108
|
+
isOptimistic: false
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (cacheKey === objectKey2) {
|
|
112
|
+
return new BehaviorSubject({
|
|
113
|
+
cacheKey: objectKey2,
|
|
114
|
+
value: mockEmployee2,
|
|
115
|
+
status: "loaded",
|
|
116
|
+
lastUpdated: Date.now(),
|
|
117
|
+
isOptimistic: false
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return new BehaviorSubject(undefined);
|
|
121
|
+
});
|
|
122
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, createPayload);
|
|
123
|
+
|
|
124
|
+
// Connect and subscribe
|
|
125
|
+
const subscription = connectable.connect();
|
|
126
|
+
const observer = mockObserver();
|
|
127
|
+
connectable.subscribe(observer);
|
|
128
|
+
|
|
129
|
+
// Wait for the observable to emit
|
|
130
|
+
await waitForCall(observer);
|
|
131
|
+
|
|
132
|
+
// Verify the result
|
|
133
|
+
expect(observer.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
134
|
+
data: [mockEmployee1, mockEmployee2],
|
|
135
|
+
status: "loaded",
|
|
136
|
+
isOptimistic: false,
|
|
137
|
+
count: 2
|
|
138
|
+
}));
|
|
139
|
+
subscription.unsubscribe();
|
|
140
|
+
});
|
|
141
|
+
it("should handle empty data correctly", async () => {
|
|
142
|
+
const subjectPayload = {
|
|
143
|
+
cacheKey: mockListCacheKey,
|
|
144
|
+
value: {
|
|
145
|
+
data: []
|
|
146
|
+
},
|
|
147
|
+
status: "loaded",
|
|
148
|
+
lastUpdated: Date.now(),
|
|
149
|
+
isOptimistic: false
|
|
150
|
+
};
|
|
151
|
+
const subject = new BehaviorSubject(subjectPayload);
|
|
152
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, createPayload);
|
|
153
|
+
const subscription = connectable.connect();
|
|
154
|
+
const observer = mockObserver();
|
|
155
|
+
connectable.subscribe(observer);
|
|
156
|
+
await waitForCall(observer);
|
|
157
|
+
expect(observer.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
158
|
+
data: [],
|
|
159
|
+
status: "loaded",
|
|
160
|
+
isOptimistic: false,
|
|
161
|
+
count: 0
|
|
162
|
+
}));
|
|
163
|
+
subscription.unsubscribe();
|
|
164
|
+
});
|
|
165
|
+
it("should handle null/undefined data", async () => {
|
|
166
|
+
const subjectPayload = {
|
|
167
|
+
cacheKey: mockListCacheKey,
|
|
168
|
+
value: {
|
|
169
|
+
data: null
|
|
170
|
+
},
|
|
171
|
+
status: "loaded",
|
|
172
|
+
lastUpdated: Date.now(),
|
|
173
|
+
isOptimistic: false
|
|
174
|
+
};
|
|
175
|
+
const subject = new BehaviorSubject(subjectPayload);
|
|
176
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, createPayload);
|
|
177
|
+
const subscription = connectable.connect();
|
|
178
|
+
const observer = mockObserver();
|
|
179
|
+
connectable.subscribe(observer);
|
|
180
|
+
await waitForCall(observer);
|
|
181
|
+
expect(observer.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
182
|
+
data: [],
|
|
183
|
+
status: "loaded",
|
|
184
|
+
isOptimistic: false,
|
|
185
|
+
count: 0
|
|
186
|
+
}));
|
|
187
|
+
subscription.unsubscribe();
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
describe("optimistic updates", () => {
|
|
191
|
+
it("should propagate optimistic flag correctly", async () => {
|
|
192
|
+
const objectKey1 = {
|
|
193
|
+
type: "object",
|
|
194
|
+
otherKeys: ["Employee", 1]
|
|
195
|
+
};
|
|
196
|
+
const subjectPayload = {
|
|
197
|
+
cacheKey: mockListCacheKey,
|
|
198
|
+
value: {
|
|
199
|
+
data: [objectKey1]
|
|
200
|
+
},
|
|
201
|
+
status: "loading",
|
|
202
|
+
lastUpdated: Date.now(),
|
|
203
|
+
isOptimistic: true // This is an optimistic update
|
|
204
|
+
};
|
|
205
|
+
const subject = new BehaviorSubject(subjectPayload);
|
|
206
|
+
vi.mocked(mockSubjects.get).mockReturnValue(new BehaviorSubject({
|
|
207
|
+
cacheKey: objectKey1,
|
|
208
|
+
value: mockEmployee1,
|
|
209
|
+
status: "loaded",
|
|
210
|
+
lastUpdated: Date.now(),
|
|
211
|
+
isOptimistic: false
|
|
212
|
+
}));
|
|
213
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, createPayload);
|
|
214
|
+
const subscription = connectable.connect();
|
|
215
|
+
const observer = mockObserver();
|
|
216
|
+
connectable.subscribe(observer);
|
|
217
|
+
await waitForCall(observer);
|
|
218
|
+
expect(observer.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
219
|
+
data: [mockEmployee1],
|
|
220
|
+
status: "loading",
|
|
221
|
+
isOptimistic: true,
|
|
222
|
+
// Should preserve optimistic flag
|
|
223
|
+
count: 1
|
|
224
|
+
}));
|
|
225
|
+
subscription.unsubscribe();
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
describe("status transitions", () => {
|
|
229
|
+
it("should handle different status values", async () => {
|
|
230
|
+
const objectKey1 = {
|
|
231
|
+
type: "object",
|
|
232
|
+
otherKeys: ["Employee", 1]
|
|
233
|
+
};
|
|
234
|
+
const basePayload = {
|
|
235
|
+
cacheKey: mockListCacheKey,
|
|
236
|
+
value: {
|
|
237
|
+
data: [objectKey1]
|
|
238
|
+
},
|
|
239
|
+
status: "init",
|
|
240
|
+
lastUpdated: Date.now(),
|
|
241
|
+
isOptimistic: false
|
|
242
|
+
};
|
|
243
|
+
const subject = new BehaviorSubject(basePayload);
|
|
244
|
+
vi.mocked(mockSubjects.get).mockReturnValue(new BehaviorSubject({
|
|
245
|
+
cacheKey: objectKey1,
|
|
246
|
+
value: mockEmployee1,
|
|
247
|
+
status: "loaded",
|
|
248
|
+
lastUpdated: Date.now(),
|
|
249
|
+
isOptimistic: false
|
|
250
|
+
}));
|
|
251
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, createPayload);
|
|
252
|
+
const subscription = connectable.connect();
|
|
253
|
+
const observer = mockObserver();
|
|
254
|
+
connectable.subscribe(observer);
|
|
255
|
+
|
|
256
|
+
// Wait for initial emission
|
|
257
|
+
await waitForCall(observer);
|
|
258
|
+
expect(observer.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
259
|
+
data: [mockEmployee1],
|
|
260
|
+
status: "init",
|
|
261
|
+
isOptimistic: false,
|
|
262
|
+
count: 1
|
|
263
|
+
}));
|
|
264
|
+
observer.next.mockClear();
|
|
265
|
+
|
|
266
|
+
// Test transition to loading
|
|
267
|
+
subject.next({
|
|
268
|
+
...basePayload,
|
|
269
|
+
status: "loading",
|
|
270
|
+
lastUpdated: Date.now()
|
|
271
|
+
});
|
|
272
|
+
await waitForCall(observer);
|
|
273
|
+
expect(observer.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
274
|
+
data: [mockEmployee1],
|
|
275
|
+
status: "loading",
|
|
276
|
+
isOptimistic: false,
|
|
277
|
+
count: 1
|
|
278
|
+
}));
|
|
279
|
+
subscription.unsubscribe();
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
describe("multiple objects", () => {
|
|
283
|
+
it("should handle multiple objects in collection", async () => {
|
|
284
|
+
const objectKey1 = {
|
|
285
|
+
type: "object",
|
|
286
|
+
otherKeys: ["Employee", 1]
|
|
287
|
+
};
|
|
288
|
+
const objectKey2 = {
|
|
289
|
+
type: "object",
|
|
290
|
+
otherKeys: ["Employee", 2]
|
|
291
|
+
};
|
|
292
|
+
const objectKey3 = {
|
|
293
|
+
type: "object",
|
|
294
|
+
otherKeys: ["Employee", 3]
|
|
295
|
+
};
|
|
296
|
+
const subjectPayload = {
|
|
297
|
+
cacheKey: mockListCacheKey,
|
|
298
|
+
value: {
|
|
299
|
+
data: [objectKey1, objectKey2, objectKey3]
|
|
300
|
+
},
|
|
301
|
+
status: "loaded",
|
|
302
|
+
lastUpdated: Date.now(),
|
|
303
|
+
isOptimistic: false
|
|
304
|
+
};
|
|
305
|
+
const subject = new BehaviorSubject(subjectPayload);
|
|
306
|
+
|
|
307
|
+
// Mock store.getSubject for all three objects
|
|
308
|
+
vi.mocked(mockSubjects.get).mockImplementation(cacheKey => {
|
|
309
|
+
if (cacheKey === objectKey1) {
|
|
310
|
+
return new BehaviorSubject({
|
|
311
|
+
cacheKey: objectKey1,
|
|
312
|
+
value: mockEmployee1,
|
|
313
|
+
status: "loaded",
|
|
314
|
+
lastUpdated: Date.now(),
|
|
315
|
+
isOptimistic: false
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
if (cacheKey === objectKey2) {
|
|
319
|
+
return new BehaviorSubject({
|
|
320
|
+
cacheKey: objectKey2,
|
|
321
|
+
value: mockEmployee2,
|
|
322
|
+
status: "loaded",
|
|
323
|
+
lastUpdated: Date.now(),
|
|
324
|
+
isOptimistic: false
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
if (cacheKey === objectKey3) {
|
|
328
|
+
return new BehaviorSubject({
|
|
329
|
+
cacheKey: objectKey3,
|
|
330
|
+
value: mockEmployee3,
|
|
331
|
+
status: "loaded",
|
|
332
|
+
lastUpdated: Date.now(),
|
|
333
|
+
isOptimistic: false
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
return new BehaviorSubject(undefined);
|
|
337
|
+
});
|
|
338
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, createPayload);
|
|
339
|
+
const subscription = connectable.connect();
|
|
340
|
+
const observer = mockObserver();
|
|
341
|
+
connectable.subscribe(observer);
|
|
342
|
+
await waitForCall(observer);
|
|
343
|
+
expect(observer.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
344
|
+
data: [mockEmployee1, mockEmployee2, mockEmployee3],
|
|
345
|
+
status: "loaded",
|
|
346
|
+
isOptimistic: false,
|
|
347
|
+
count: 3
|
|
348
|
+
}));
|
|
349
|
+
subscription.unsubscribe();
|
|
350
|
+
});
|
|
351
|
+
it("should handle objects being added/removed from collection", async () => {
|
|
352
|
+
const objectKey1 = {
|
|
353
|
+
type: "object",
|
|
354
|
+
otherKeys: ["Employee", 1]
|
|
355
|
+
};
|
|
356
|
+
const objectKey2 = {
|
|
357
|
+
type: "object",
|
|
358
|
+
otherKeys: ["Employee", 2]
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
// Start with one object
|
|
362
|
+
const initialPayload = {
|
|
363
|
+
cacheKey: mockListCacheKey,
|
|
364
|
+
value: {
|
|
365
|
+
data: [objectKey1]
|
|
366
|
+
},
|
|
367
|
+
status: "loaded",
|
|
368
|
+
lastUpdated: Date.now(),
|
|
369
|
+
isOptimistic: false
|
|
370
|
+
};
|
|
371
|
+
const subject = new BehaviorSubject(initialPayload);
|
|
372
|
+
vi.mocked(mockSubjects.get).mockImplementation(cacheKey => {
|
|
373
|
+
if (cacheKey === objectKey1) {
|
|
374
|
+
return new BehaviorSubject({
|
|
375
|
+
cacheKey: objectKey1,
|
|
376
|
+
value: mockEmployee1,
|
|
377
|
+
status: "loaded",
|
|
378
|
+
lastUpdated: Date.now(),
|
|
379
|
+
isOptimistic: false
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
if (cacheKey === objectKey2) {
|
|
383
|
+
return new BehaviorSubject({
|
|
384
|
+
cacheKey: objectKey2,
|
|
385
|
+
value: mockEmployee2,
|
|
386
|
+
status: "loaded",
|
|
387
|
+
lastUpdated: Date.now(),
|
|
388
|
+
isOptimistic: false
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
return new BehaviorSubject(undefined);
|
|
392
|
+
});
|
|
393
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, createPayload);
|
|
394
|
+
const subscription = connectable.connect();
|
|
395
|
+
const observer = mockObserver();
|
|
396
|
+
connectable.subscribe(observer);
|
|
397
|
+
|
|
398
|
+
// First check - single object
|
|
399
|
+
await waitForCall(observer);
|
|
400
|
+
expect(observer.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
401
|
+
data: [mockEmployee1],
|
|
402
|
+
count: 1
|
|
403
|
+
}));
|
|
404
|
+
observer.next.mockClear();
|
|
405
|
+
|
|
406
|
+
// Add second object
|
|
407
|
+
subject.next({
|
|
408
|
+
...initialPayload,
|
|
409
|
+
value: {
|
|
410
|
+
data: [objectKey1, objectKey2]
|
|
411
|
+
},
|
|
412
|
+
lastUpdated: Date.now()
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
// Second check - two objects
|
|
416
|
+
await waitForCall(observer);
|
|
417
|
+
expect(observer.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
418
|
+
data: [mockEmployee1, mockEmployee2],
|
|
419
|
+
count: 2
|
|
420
|
+
}));
|
|
421
|
+
subscription.unsubscribe();
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
describe("subscription behavior", () => {
|
|
425
|
+
it("should support multiple subscribers", async () => {
|
|
426
|
+
const objectKey1 = {
|
|
427
|
+
type: "object",
|
|
428
|
+
otherKeys: ["Employee", 1]
|
|
429
|
+
};
|
|
430
|
+
const subjectPayload = {
|
|
431
|
+
cacheKey: mockListCacheKey,
|
|
432
|
+
value: {
|
|
433
|
+
data: [objectKey1]
|
|
434
|
+
},
|
|
435
|
+
status: "loaded",
|
|
436
|
+
lastUpdated: Date.now(),
|
|
437
|
+
isOptimistic: false
|
|
438
|
+
};
|
|
439
|
+
const subject = new BehaviorSubject(subjectPayload);
|
|
440
|
+
vi.mocked(mockSubjects.get).mockReturnValue(new BehaviorSubject({
|
|
441
|
+
cacheKey: objectKey1,
|
|
442
|
+
value: mockEmployee1,
|
|
443
|
+
status: "loaded",
|
|
444
|
+
lastUpdated: Date.now(),
|
|
445
|
+
isOptimistic: false
|
|
446
|
+
}));
|
|
447
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, createPayload);
|
|
448
|
+
const subscription = connectable.connect();
|
|
449
|
+
const observer1 = mockObserver();
|
|
450
|
+
const observer2 = mockObserver();
|
|
451
|
+
connectable.subscribe(observer1);
|
|
452
|
+
connectable.subscribe(observer2);
|
|
453
|
+
await waitForCall(observer1);
|
|
454
|
+
await waitForCall(observer2);
|
|
455
|
+
|
|
456
|
+
// Both observers should receive the data
|
|
457
|
+
expect(observer1.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
458
|
+
data: [mockEmployee1],
|
|
459
|
+
count: 1
|
|
460
|
+
}));
|
|
461
|
+
expect(observer2.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
462
|
+
data: [mockEmployee1],
|
|
463
|
+
count: 1
|
|
464
|
+
}));
|
|
465
|
+
subscription.unsubscribe();
|
|
466
|
+
});
|
|
467
|
+
it("should use ReplaySubject behavior (last value replayed)", async () => {
|
|
468
|
+
const objectKey1 = {
|
|
469
|
+
type: "object",
|
|
470
|
+
otherKeys: ["Employee", 1]
|
|
471
|
+
};
|
|
472
|
+
const subjectPayload = {
|
|
473
|
+
cacheKey: mockListCacheKey,
|
|
474
|
+
value: {
|
|
475
|
+
data: [objectKey1]
|
|
476
|
+
},
|
|
477
|
+
status: "loaded",
|
|
478
|
+
lastUpdated: Date.now(),
|
|
479
|
+
isOptimistic: false
|
|
480
|
+
};
|
|
481
|
+
const subject = new BehaviorSubject(subjectPayload);
|
|
482
|
+
vi.mocked(mockSubjects.get).mockReturnValue(new BehaviorSubject({
|
|
483
|
+
cacheKey: objectKey1,
|
|
484
|
+
value: mockEmployee1,
|
|
485
|
+
status: "loaded",
|
|
486
|
+
lastUpdated: Date.now(),
|
|
487
|
+
isOptimistic: false
|
|
488
|
+
}));
|
|
489
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, createPayload);
|
|
490
|
+
const subscription = connectable.connect();
|
|
491
|
+
const observer1 = mockObserver();
|
|
492
|
+
|
|
493
|
+
// Subscribe first observer
|
|
494
|
+
connectable.subscribe(observer1);
|
|
495
|
+
await waitForCall(observer1);
|
|
496
|
+
expect(observer1.next).toHaveBeenCalledTimes(1);
|
|
497
|
+
observer1.next.mockClear();
|
|
498
|
+
|
|
499
|
+
// Subscribe second observer after first has already received data
|
|
500
|
+
const observer2 = mockObserver();
|
|
501
|
+
connectable.subscribe(observer2);
|
|
502
|
+
await waitForCall(observer2);
|
|
503
|
+
|
|
504
|
+
// Second observer should immediately receive the last value (ReplaySubject behavior)
|
|
505
|
+
expect(observer2.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
506
|
+
data: [mockEmployee1],
|
|
507
|
+
count: 1
|
|
508
|
+
}));
|
|
509
|
+
|
|
510
|
+
// First observer should not receive additional calls
|
|
511
|
+
expect(observer1.next).not.toHaveBeenCalled();
|
|
512
|
+
subscription.unsubscribe();
|
|
513
|
+
});
|
|
514
|
+
});
|
|
515
|
+
describe("error handling", () => {
|
|
516
|
+
it("should handle store.getSubject returning undefined object entry", async () => {
|
|
517
|
+
const objectKey1 = {
|
|
518
|
+
type: "object",
|
|
519
|
+
otherKeys: ["Employee", 1]
|
|
520
|
+
};
|
|
521
|
+
const subjectPayload = {
|
|
522
|
+
cacheKey: mockListCacheKey,
|
|
523
|
+
value: {
|
|
524
|
+
data: [objectKey1]
|
|
525
|
+
},
|
|
526
|
+
status: "loaded",
|
|
527
|
+
lastUpdated: Date.now(),
|
|
528
|
+
isOptimistic: false
|
|
529
|
+
};
|
|
530
|
+
const subject = new BehaviorSubject(subjectPayload);
|
|
531
|
+
|
|
532
|
+
// Mock store.getSubject to return undefined entry - this creates an object with undefined value
|
|
533
|
+
vi.mocked(mockSubjects.get).mockReturnValue(new BehaviorSubject({
|
|
534
|
+
cacheKey: objectKey1,
|
|
535
|
+
value: undefined,
|
|
536
|
+
// This is the key - undefined value
|
|
537
|
+
status: "loaded",
|
|
538
|
+
lastUpdated: Date.now(),
|
|
539
|
+
isOptimistic: false
|
|
540
|
+
}));
|
|
541
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, createPayload);
|
|
542
|
+
const subscription = connectable.connect();
|
|
543
|
+
const observer = mockObserver();
|
|
544
|
+
connectable.subscribe(observer);
|
|
545
|
+
await waitForCall(observer);
|
|
546
|
+
|
|
547
|
+
// Should handle undefined object entry gracefully by filtering it out
|
|
548
|
+
expect(observer.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
549
|
+
data: [undefined],
|
|
550
|
+
// The function maps the undefined value from the store
|
|
551
|
+
status: "loaded",
|
|
552
|
+
count: 1
|
|
553
|
+
}));
|
|
554
|
+
subscription.unsubscribe();
|
|
555
|
+
});
|
|
556
|
+
it("should handle createPayload function throwing errors", async () => {
|
|
557
|
+
const objectKey1 = {
|
|
558
|
+
type: "object",
|
|
559
|
+
otherKeys: ["Employee", 1]
|
|
560
|
+
};
|
|
561
|
+
const subjectPayload = {
|
|
562
|
+
cacheKey: mockListCacheKey,
|
|
563
|
+
value: {
|
|
564
|
+
data: [objectKey1]
|
|
565
|
+
},
|
|
566
|
+
status: "loaded",
|
|
567
|
+
lastUpdated: Date.now(),
|
|
568
|
+
isOptimistic: false
|
|
569
|
+
};
|
|
570
|
+
const subject = new BehaviorSubject(subjectPayload);
|
|
571
|
+
vi.mocked(mockSubjects.get).mockReturnValue(new BehaviorSubject({
|
|
572
|
+
cacheKey: objectKey1,
|
|
573
|
+
value: mockEmployee1,
|
|
574
|
+
status: "loaded",
|
|
575
|
+
lastUpdated: Date.now(),
|
|
576
|
+
isOptimistic: false
|
|
577
|
+
}));
|
|
578
|
+
|
|
579
|
+
// Mock createPayload to throw an error
|
|
580
|
+
const errorThrowingCreatePayload = vi.fn(() => {
|
|
581
|
+
throw new Error("Test error in createPayload");
|
|
582
|
+
});
|
|
583
|
+
const connectable = actualCreateCollectionConnectable(subject, mockSubjects, errorThrowingCreatePayload);
|
|
584
|
+
const subscription = connectable.connect();
|
|
585
|
+
const observer = mockObserver();
|
|
586
|
+
connectable.subscribe(observer);
|
|
587
|
+
await waitForCall(observer.error);
|
|
588
|
+
|
|
589
|
+
// Should call the error handler
|
|
590
|
+
expect(observer.error).toHaveBeenCalledWith(expect.objectContaining({
|
|
591
|
+
message: "Test error in createPayload"
|
|
592
|
+
}));
|
|
593
|
+
subscription.unsubscribe();
|
|
594
|
+
});
|
|
595
|
+
});
|
|
596
|
+
});
|
|
597
|
+
//# sourceMappingURL=createCollectionConnectable.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createCollectionConnectable.test.js","names":["BehaviorSubject","beforeEach","describe","expect","it","vi","createClientMockHelper","mockObserver","waitForCall","createCollectionConnectable","actualCreateCollectionConnectable","mockEmployee1","$apiName","$primaryKey","$objectType","$title","employeeId","fullName","mockEmployee2","mockEmployee3","mockSubjects","createPayload","mockListCacheKey","client","get","fn","type","otherKeys","params","data","resolvedData","status","isOptimistic","lastUpdated","count","length","objectKey1","objectKey2","subjectPayload","cacheKey","value","Date","now","subject","mocked","mockImplementation","undefined","connectable","subscription","connect","observer","subscribe","next","toHaveBeenCalledWith","objectContaining","unsubscribe","mockReturnValue","basePayload","mockClear","objectKey3","initialPayload","observer1","observer2","toHaveBeenCalledTimes","not","toHaveBeenCalled","errorThrowingCreatePayload","Error","error","message"],"sources":["createCollectionConnectable.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Osdk } from \"@osdk/api\";\nimport type { Employee } from \"@osdk/client.test.ontology\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { ObjectHolder } from \"../../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { Status } from \"../../ObservableClient/common.js\";\nimport type { CacheKey } from \"../CacheKey.js\";\nimport type { ObjectCacheKey } from \"../object/ObjectCacheKey.js\";\nimport type { SubjectPayload } from \"../SubjectPayload.js\";\nimport type { Subjects } from \"../Subjects.js\";\nimport {\n createClientMockHelper,\n mockObserver,\n waitForCall,\n} from \"../testUtils.js\";\nimport { createCollectionConnectable as actualCreateCollectionConnectable } from \"./createCollectionConnectable.js\";\n\n// Test payload type for our collection\ninterface TestPayload {\n data: any[];\n status: Status;\n isOptimistic: boolean;\n lastUpdated: number;\n count: number;\n}\n\n// Mock object instances for testing\nconst mockEmployee1: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 1,\n $objectType: \"Employee\",\n $title: \"Employee 1\",\n employeeId: 1,\n fullName: \"John Doe\",\n} as any;\n\nconst mockEmployee2: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 2,\n $objectType: \"Employee\",\n $title: \"Employee 2\",\n employeeId: 2,\n fullName: \"Jane Smith\",\n} as any;\n\nconst mockEmployee3: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 3,\n $objectType: \"Employee\",\n $title: \"Employee 3\",\n employeeId: 3,\n fullName: \"Bob Johnson\",\n} as any;\n\ndescribe(\"createCollectionConnectable\", () => {\n let mockSubjects: Subjects;\n let createPayload: ReturnType<typeof vi.fn>;\n let mockListCacheKey: CacheKey<any, any, any, any>;\n\n beforeEach(() => {\n const { client } = createClientMockHelper();\n\n mockSubjects = {\n get: vi.fn(),\n } as any;\n\n // Mock cache key for list\n mockListCacheKey = {\n type: \"list\",\n otherKeys: [\"Employee\", {}, {}],\n } as CacheKey<any, any, any, any>;\n\n // Create payload function that mimics real usage\n createPayload = vi.fn((params) => ({\n data: params.resolvedData,\n status: params.status,\n isOptimistic: params.isOptimistic,\n lastUpdated: params.lastUpdated,\n count: params.resolvedData.length,\n }));\n });\n\n describe(\"basic functionality\", () => {\n it(\"should create a connectable observable with resolved data\", async () => {\n // Mock object cache keys\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2],\n } as ObjectCacheKey;\n\n // Create subject payload with mock data\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1, objectKey2],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject to return object observables\n vi.mocked(mockSubjects.get).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n // Connect and subscribe\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // Wait for the observable to emit\n await waitForCall(observer);\n\n // Verify the result\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2],\n status: \"loaded\",\n isOptimistic: false,\n count: 2,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle empty data correctly\", async () => {\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [],\n status: \"loaded\",\n isOptimistic: false,\n count: 0,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle null/undefined data\", async () => {\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: null as any,\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [],\n status: \"loaded\",\n isOptimistic: false,\n count: 0,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"optimistic updates\", () => {\n it(\"should propagate optimistic flag correctly\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loading\",\n lastUpdated: Date.now(),\n isOptimistic: true, // This is an optimistic update\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"loading\",\n isOptimistic: true, // Should preserve optimistic flag\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"status transitions\", () => {\n it(\"should handle different status values\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const basePayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"init\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(basePayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // Wait for initial emission\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"init\",\n isOptimistic: false,\n count: 1,\n }),\n );\n\n observer.next.mockClear();\n\n // Test transition to loading\n subject.next({\n ...basePayload,\n status: \"loading\",\n lastUpdated: Date.now(),\n });\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"loading\",\n isOptimistic: false,\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"multiple objects\", () => {\n it(\"should handle multiple objects in collection\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2],\n } as ObjectCacheKey;\n\n const objectKey3: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 3],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1, objectKey2, objectKey3],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject for all three objects\n vi.mocked(mockSubjects.get).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey3) {\n return new BehaviorSubject({\n cacheKey: objectKey3,\n value: mockEmployee3,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2, mockEmployee3],\n status: \"loaded\",\n isOptimistic: false,\n count: 3,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle objects being added/removed from collection\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2],\n } as ObjectCacheKey;\n\n // Start with one object\n const initialPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(initialPayload);\n\n vi.mocked(mockSubjects.get).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // First check - single object\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n observer.next.mockClear();\n\n // Add second object\n subject.next({\n ...initialPayload,\n value: {\n data: [objectKey1, objectKey2],\n },\n lastUpdated: Date.now(),\n });\n\n // Second check - two objects\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2],\n count: 2,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"subscription behavior\", () => {\n it(\"should support multiple subscribers\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer1 = mockObserver<TestPayload>();\n const observer2 = mockObserver<TestPayload>();\n\n connectable.subscribe(observer1);\n connectable.subscribe(observer2);\n\n await waitForCall(observer1);\n await waitForCall(observer2);\n\n // Both observers should receive the data\n expect(observer1.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n expect(observer2.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should use ReplaySubject behavior (last value replayed)\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer1 = mockObserver<TestPayload>();\n\n // Subscribe first observer\n connectable.subscribe(observer1);\n\n await waitForCall(observer1);\n expect(observer1.next).toHaveBeenCalledTimes(1);\n observer1.next.mockClear();\n\n // Subscribe second observer after first has already received data\n const observer2 = mockObserver<TestPayload>();\n connectable.subscribe(observer2);\n\n await waitForCall(observer2);\n\n // Second observer should immediately receive the last value (ReplaySubject behavior)\n expect(observer2.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n // First observer should not receive additional calls\n expect(observer1.next).not.toHaveBeenCalled();\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should handle store.getSubject returning undefined object entry\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject to return undefined entry - this creates an object with undefined value\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: undefined, // This is the key - undefined value\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n // Should handle undefined object entry gracefully by filtering it out\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [undefined], // The function maps the undefined value from the store\n status: \"loaded\",\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle createPayload function throwing errors\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockSubjects.get).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n // Mock createPayload to throw an error\n const errorThrowingCreatePayload = vi.fn(() => {\n throw new Error(\"Test error in createPayload\");\n });\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockSubjects,\n errorThrowingCreatePayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer.error);\n\n // Should call the error handler\n expect(observer.error).toHaveBeenCalledWith(\n expect.objectContaining({\n message: \"Test error in createPayload\",\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|