@osdk/client 2.7.1 → 2.8.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 +92 -157
- 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 +5 -0
- package/build/browser/actions/applyAction.js.map +1 -1
- package/build/browser/createClient.js +2 -1
- package/build/browser/createClient.js.map +1 -1
- package/build/browser/createMinimalClient.js +1 -0
- package/build/browser/createMinimalClient.js.map +1 -1
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +17 -1
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.test.js +101 -0
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.test.js.map +1 -1
- package/build/browser/derivedProperties/derivedPropertyDefinitionFactory.js +1 -1
- package/build/browser/derivedProperties/derivedPropertyDefinitionFactory.js.map +1 -1
- package/build/browser/fetchMetadata.test.js +9 -0
- package/build/browser/fetchMetadata.test.js.map +1 -1
- package/build/browser/intellisense.test.js +1 -1
- package/build/browser/intellisense.test.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.js +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
- package/build/browser/object/aggregate.js +1 -0
- package/build/browser/object/aggregate.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.js +3 -0
- package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +4 -0
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js +85 -3
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.js +4 -4
- package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.test.js +48 -27
- package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/browser/object/fetchPage.js +18 -5
- package/build/browser/object/fetchPage.js.map +1 -1
- package/build/browser/object/object.test.js +123 -0
- package/build/browser/object/object.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSet.test.js +6 -6
- package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js +4 -4
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +3 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +0 -4
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/objectSet/fetchLinksPage.js +1 -0
- package/build/browser/objectSet/fetchLinksPage.js.map +1 -1
- package/build/browser/observable/ObservableClient/ObserveLink.js.map +1 -1
- package/build/browser/observable/ObservableClient.js +11 -0
- package/build/browser/observable/ObservableClient.js.map +1 -1
- package/build/browser/observable/internal/AbstractHelper.js +56 -3
- package/build/browser/observable/internal/AbstractHelper.js.map +1 -1
- package/build/browser/observable/internal/AbstractHelper.test.js +114 -0
- package/build/browser/observable/internal/AbstractHelper.test.js.map +1 -0
- package/build/browser/observable/internal/BulkObjectLoader.js +71 -9
- package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -1
- package/build/browser/observable/internal/BulkObjectLoader.test.js +79 -0
- package/build/browser/observable/internal/BulkObjectLoader.test.js.map +1 -1
- package/build/browser/observable/internal/CacheKeys.js +19 -8
- package/build/browser/observable/internal/CacheKeys.js.map +1 -1
- package/build/browser/observable/internal/ListQueryView.js +120 -0
- package/build/browser/observable/internal/ListQueryView.js.map +1 -0
- package/build/browser/observable/internal/ObservableClientImpl.js +136 -24
- package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/browser/observable/internal/PivotCanonicalizer.js +4 -4
- package/build/browser/observable/internal/PivotCanonicalizer.js.map +1 -1
- package/build/browser/observable/internal/Query.js +7 -5
- package/build/browser/observable/internal/Query.js.map +1 -1
- package/build/browser/observable/internal/RdpCanonicalizer.test.js +23 -7
- package/build/browser/observable/internal/RdpCanonicalizer.test.js.map +1 -1
- package/build/browser/observable/internal/Store.js +19 -2
- package/build/browser/observable/internal/Store.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +328 -1
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/actions/ActionApplication.js +7 -4
- package/build/browser/observable/internal/actions/ActionApplication.js.map +1 -1
- package/build/browser/observable/internal/actions/OptimisticJob.js +1 -1
- package/build/browser/observable/internal/actions/OptimisticJob.js.map +1 -1
- package/build/browser/observable/internal/aggregation/AggregationCacheKey.js +5 -3
- package/build/browser/observable/internal/aggregation/AggregationCacheKey.js.map +1 -1
- package/build/browser/observable/internal/aggregation/AggregationQuery.js +28 -2
- package/build/browser/observable/internal/aggregation/AggregationQuery.js.map +1 -1
- package/build/browser/observable/internal/aggregation/AggregationsHelper.js +18 -2
- package/build/browser/observable/internal/aggregation/AggregationsHelper.js.map +1 -1
- package/build/browser/observable/internal/aggregation/AggregationsHelper.test.js +103 -0
- package/build/browser/observable/internal/aggregation/AggregationsHelper.test.js.map +1 -0
- package/build/browser/observable/internal/aggregation/ObjectAggregationQuery.js +22 -3
- package/build/browser/observable/internal/aggregation/ObjectAggregationQuery.js.map +1 -1
- package/build/browser/observable/internal/base-list/BaseListQuery.js +73 -6
- package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
- package/build/browser/observable/internal/function/FunctionQuery.js +27 -1
- package/build/browser/observable/internal/function/FunctionQuery.js.map +1 -1
- package/build/browser/observable/internal/function/FunctionsHelper.js +2 -1
- package/build/browser/observable/internal/function/FunctionsHelper.js.map +1 -1
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.js +2 -2
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.js.map +1 -1
- package/build/browser/observable/internal/links/LinksHelper.js +3 -2
- package/build/browser/observable/internal/links/LinksHelper.js.map +1 -1
- package/build/browser/observable/internal/links/SpecificLinkCacheKey.js +7 -5
- package/build/browser/observable/internal/links/SpecificLinkCacheKey.js.map +1 -1
- package/build/browser/observable/internal/links/SpecificLinkQuery.js +97 -62
- package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -1
- package/build/browser/observable/internal/list/InterfaceListQuery.js +19 -1
- package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -1
- package/build/browser/observable/internal/list/ListQuery.js +30 -10
- package/build/browser/observable/internal/list/ListQuery.js.map +1 -1
- package/build/browser/observable/internal/list/ListQuery.test.js +262 -1
- package/build/browser/observable/internal/list/ListQuery.test.js.map +1 -1
- package/build/browser/observable/internal/list/ListsHelper.js +1 -1
- package/build/browser/observable/internal/list/ListsHelper.js.map +1 -1
- package/build/browser/observable/internal/list/ObjectListQuery.js +22 -21
- package/build/browser/observable/internal/list/ObjectListQuery.js.map +1 -1
- package/build/browser/observable/internal/object/ObjectQuery.js +23 -6
- package/build/browser/observable/internal/object/ObjectQuery.js.map +1 -1
- package/build/browser/observable/internal/object/ObjectsHelper.js +12 -3
- package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -1
- package/build/browser/observable/internal/object/ObjectsHelper.test.js +200 -0
- package/build/browser/observable/internal/object/ObjectsHelper.test.js.map +1 -0
- package/build/browser/observable/internal/objectset/ObjectSetCacheKey.js.map +1 -1
- package/build/browser/observable/internal/objectset/ObjectSetHelper.js +3 -2
- package/build/browser/observable/internal/objectset/ObjectSetHelper.js.map +1 -1
- package/build/browser/observable/internal/objectset/ObjectSetHelper.test.js +94 -0
- package/build/browser/observable/internal/objectset/ObjectSetHelper.test.js.map +1 -0
- package/build/browser/observable/internal/objectset/ObjectSetQuery.js +4 -1
- package/build/browser/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
- package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +1 -0
- package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -1
- package/build/browser/observable/internal/testUtils.js.map +1 -1
- package/build/browser/observable/internal/utils/rdpFieldOperations.js +7 -2
- package/build/browser/observable/internal/utils/rdpFieldOperations.js.map +1 -1
- package/build/browser/observable/internal/utils/rdpFieldOperations.test.js +55 -0
- package/build/browser/observable/internal/utils/rdpFieldOperations.test.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 +1 -0
- 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/interfaceUtils.js +7 -0
- package/build/browser/util/interfaceUtils.js.map +1 -1
- package/build/cjs/{chunk-OVZCGOMG.cjs → chunk-6VOFZIIJ.cjs} +196 -92
- package/build/cjs/chunk-6VOFZIIJ.cjs.map +1 -0
- package/build/cjs/{chunk-OZNDU7AU.cjs → chunk-YVZM2JPW.cjs} +237 -196
- package/build/cjs/chunk-YVZM2JPW.cjs.map +1 -0
- package/build/cjs/{createClient-BDmrDOzZ.d.cts → createClient-BPK4om7e.d.cts} +1 -0
- package/build/cjs/index.cjs +8 -8
- package/build/cjs/index.d.cts +1 -1
- package/build/cjs/public/internal.cjs +8 -8
- package/build/cjs/public/unstable-do-not-use.cjs +928 -360
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/cjs/public/unstable-do-not-use.d.cts +65 -27
- 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 +5 -0
- package/build/esm/actions/applyAction.js.map +1 -1
- package/build/esm/createClient.js +2 -1
- package/build/esm/createClient.js.map +1 -1
- package/build/esm/createMinimalClient.js +1 -0
- package/build/esm/createMinimalClient.js.map +1 -1
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +17 -1
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.test.js +101 -0
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.test.js.map +1 -1
- package/build/esm/derivedProperties/derivedPropertyDefinitionFactory.js +1 -1
- package/build/esm/derivedProperties/derivedPropertyDefinitionFactory.js.map +1 -1
- package/build/esm/fetchMetadata.test.js +9 -0
- package/build/esm/fetchMetadata.test.js.map +1 -1
- package/build/esm/intellisense.test.js +1 -1
- package/build/esm/intellisense.test.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.js +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
- package/build/esm/object/aggregate.js +1 -0
- package/build/esm/object/aggregate.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.js +3 -0
- package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +4 -0
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js +85 -3
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.js +4 -4
- package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.test.js +48 -27
- package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/esm/object/fetchPage.js +18 -5
- package/build/esm/object/fetchPage.js.map +1 -1
- package/build/esm/object/object.test.js +123 -0
- package/build/esm/object/object.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSet.test.js +6 -6
- package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js +4 -4
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +3 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +0 -4
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/objectSet/fetchLinksPage.js +1 -0
- package/build/esm/objectSet/fetchLinksPage.js.map +1 -1
- package/build/esm/observable/ObservableClient/ObserveLink.js.map +1 -1
- package/build/esm/observable/ObservableClient.js +11 -0
- package/build/esm/observable/ObservableClient.js.map +1 -1
- package/build/esm/observable/internal/AbstractHelper.js +56 -3
- package/build/esm/observable/internal/AbstractHelper.js.map +1 -1
- package/build/esm/observable/internal/AbstractHelper.test.js +114 -0
- package/build/esm/observable/internal/AbstractHelper.test.js.map +1 -0
- package/build/esm/observable/internal/BulkObjectLoader.js +71 -9
- package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -1
- package/build/esm/observable/internal/BulkObjectLoader.test.js +79 -0
- package/build/esm/observable/internal/BulkObjectLoader.test.js.map +1 -1
- package/build/esm/observable/internal/CacheKeys.js +19 -8
- package/build/esm/observable/internal/CacheKeys.js.map +1 -1
- package/build/esm/observable/internal/ListQueryView.js +120 -0
- package/build/esm/observable/internal/ListQueryView.js.map +1 -0
- package/build/esm/observable/internal/ObservableClientImpl.js +136 -24
- package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/esm/observable/internal/PivotCanonicalizer.js +4 -4
- package/build/esm/observable/internal/PivotCanonicalizer.js.map +1 -1
- package/build/esm/observable/internal/Query.js +7 -5
- package/build/esm/observable/internal/Query.js.map +1 -1
- package/build/esm/observable/internal/RdpCanonicalizer.test.js +23 -7
- package/build/esm/observable/internal/RdpCanonicalizer.test.js.map +1 -1
- package/build/esm/observable/internal/Store.js +19 -2
- package/build/esm/observable/internal/Store.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +328 -1
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/actions/ActionApplication.js +7 -4
- package/build/esm/observable/internal/actions/ActionApplication.js.map +1 -1
- package/build/esm/observable/internal/actions/OptimisticJob.js +1 -1
- package/build/esm/observable/internal/actions/OptimisticJob.js.map +1 -1
- package/build/esm/observable/internal/aggregation/AggregationCacheKey.js +5 -3
- package/build/esm/observable/internal/aggregation/AggregationCacheKey.js.map +1 -1
- package/build/esm/observable/internal/aggregation/AggregationQuery.js +28 -2
- package/build/esm/observable/internal/aggregation/AggregationQuery.js.map +1 -1
- package/build/esm/observable/internal/aggregation/AggregationsHelper.js +18 -2
- package/build/esm/observable/internal/aggregation/AggregationsHelper.js.map +1 -1
- package/build/esm/observable/internal/aggregation/AggregationsHelper.test.js +103 -0
- package/build/esm/observable/internal/aggregation/AggregationsHelper.test.js.map +1 -0
- package/build/esm/observable/internal/aggregation/ObjectAggregationQuery.js +22 -3
- package/build/esm/observable/internal/aggregation/ObjectAggregationQuery.js.map +1 -1
- package/build/esm/observable/internal/base-list/BaseListQuery.js +73 -6
- package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
- package/build/esm/observable/internal/function/FunctionQuery.js +27 -1
- package/build/esm/observable/internal/function/FunctionQuery.js.map +1 -1
- package/build/esm/observable/internal/function/FunctionsHelper.js +2 -1
- package/build/esm/observable/internal/function/FunctionsHelper.js.map +1 -1
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.js +2 -2
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.js.map +1 -1
- package/build/esm/observable/internal/links/LinksHelper.js +3 -2
- package/build/esm/observable/internal/links/LinksHelper.js.map +1 -1
- package/build/esm/observable/internal/links/SpecificLinkCacheKey.js +7 -5
- package/build/esm/observable/internal/links/SpecificLinkCacheKey.js.map +1 -1
- package/build/esm/observable/internal/links/SpecificLinkQuery.js +97 -62
- package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -1
- package/build/esm/observable/internal/list/InterfaceListQuery.js +19 -1
- package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -1
- package/build/esm/observable/internal/list/ListQuery.js +30 -10
- package/build/esm/observable/internal/list/ListQuery.js.map +1 -1
- package/build/esm/observable/internal/list/ListQuery.test.js +262 -1
- package/build/esm/observable/internal/list/ListQuery.test.js.map +1 -1
- package/build/esm/observable/internal/list/ListsHelper.js +1 -1
- package/build/esm/observable/internal/list/ListsHelper.js.map +1 -1
- package/build/esm/observable/internal/list/ObjectListQuery.js +22 -21
- package/build/esm/observable/internal/list/ObjectListQuery.js.map +1 -1
- package/build/esm/observable/internal/object/ObjectQuery.js +23 -6
- package/build/esm/observable/internal/object/ObjectQuery.js.map +1 -1
- package/build/esm/observable/internal/object/ObjectsHelper.js +12 -3
- package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -1
- package/build/esm/observable/internal/object/ObjectsHelper.test.js +200 -0
- package/build/esm/observable/internal/object/ObjectsHelper.test.js.map +1 -0
- package/build/esm/observable/internal/objectset/ObjectSetCacheKey.js.map +1 -1
- package/build/esm/observable/internal/objectset/ObjectSetHelper.js +3 -2
- package/build/esm/observable/internal/objectset/ObjectSetHelper.js.map +1 -1
- package/build/esm/observable/internal/objectset/ObjectSetHelper.test.js +94 -0
- package/build/esm/observable/internal/objectset/ObjectSetHelper.test.js.map +1 -0
- package/build/esm/observable/internal/objectset/ObjectSetQuery.js +4 -1
- package/build/esm/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
- package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +1 -0
- package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -1
- package/build/esm/observable/internal/testUtils.js.map +1 -1
- package/build/esm/observable/internal/utils/rdpFieldOperations.js +7 -2
- package/build/esm/observable/internal/utils/rdpFieldOperations.js.map +1 -1
- package/build/esm/observable/internal/utils/rdpFieldOperations.test.js +55 -0
- package/build/esm/observable/internal/utils/rdpFieldOperations.test.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 +1 -0
- 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/interfaceUtils.js +7 -0
- package/build/esm/util/interfaceUtils.js.map +1 -1
- package/build/types/Client.d.ts +1 -1
- package/build/types/MinimalClientContext.d.ts +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/object/convertWireToOsdkObjects/InternalSymbols.d.ts +2 -0
- package/build/types/object/convertWireToOsdkObjects/InternalSymbols.d.ts.map +1 -1
- package/build/types/object/convertWireToOsdkObjects.d.ts +4 -4
- package/build/types/object/convertWireToOsdkObjects.d.ts.map +1 -1
- package/build/types/object/fetchPage.d.ts.map +1 -1
- package/build/types/object/object.test.d.ts.map +1 -1
- package/build/types/objectSet/createObjectSet.d.ts +5 -14
- package/build/types/objectSet/createObjectSet.d.ts.map +1 -1
- package/build/types/objectSet/fetchLinksPage.d.ts +1 -9
- package/build/types/objectSet/fetchLinksPage.d.ts.map +1 -1
- package/build/types/observable/ObservableClient/ObserveLink.d.ts +2 -1
- package/build/types/observable/ObservableClient/ObserveLink.d.ts.map +1 -1
- package/build/types/observable/ObservableClient.d.ts +71 -25
- package/build/types/observable/ObservableClient.d.ts.map +1 -1
- package/build/types/observable/internal/AbstractHelper.d.ts +1 -1
- package/build/types/observable/internal/AbstractHelper.d.ts.map +1 -1
- package/build/types/observable/internal/AbstractHelper.test.d.ts +1 -0
- package/build/types/observable/internal/AbstractHelper.test.d.ts.map +1 -0
- package/build/types/observable/internal/BulkObjectLoader.d.ts +2 -1
- package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -1
- package/build/types/observable/internal/CacheKeys.d.ts +5 -0
- package/build/types/observable/internal/CacheKeys.d.ts.map +1 -1
- package/build/types/observable/internal/ListQueryView.d.ts +21 -0
- package/build/types/observable/internal/ListQueryView.d.ts.map +1 -0
- package/build/types/observable/internal/PivotCanonicalizer.d.ts +2 -2
- package/build/types/observable/internal/PivotCanonicalizer.d.ts.map +1 -1
- package/build/types/observable/internal/Query.d.ts.map +1 -1
- package/build/types/observable/internal/Store.d.ts.map +1 -1
- package/build/types/observable/internal/Store.test.d.ts.map +1 -1
- package/build/types/observable/internal/actions/ActionApplication.d.ts.map +1 -1
- package/build/types/observable/internal/actions/OptimisticJob.d.ts.map +1 -1
- package/build/types/observable/internal/aggregation/AggregationCacheKey.d.ts +6 -4
- package/build/types/observable/internal/aggregation/AggregationCacheKey.d.ts.map +1 -1
- package/build/types/observable/internal/aggregation/AggregationQuery.d.ts +8 -3
- package/build/types/observable/internal/aggregation/AggregationQuery.d.ts.map +1 -1
- package/build/types/observable/internal/aggregation/AggregationsHelper.d.ts +19 -14
- package/build/types/observable/internal/aggregation/AggregationsHelper.d.ts.map +1 -1
- package/build/types/observable/internal/aggregation/AggregationsHelper.test.d.ts +1 -0
- package/build/types/observable/internal/aggregation/AggregationsHelper.test.d.ts.map +1 -0
- package/build/types/observable/internal/aggregation/ObjectAggregationQuery.d.ts.map +1 -1
- package/build/types/observable/internal/base-list/BaseListQuery.d.ts +47 -2
- package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/function/FunctionQuery.d.ts +1 -1
- package/build/types/observable/internal/function/FunctionQuery.d.ts.map +1 -1
- package/build/types/observable/internal/function/FunctionsHelper.d.ts +1 -0
- package/build/types/observable/internal/function/FunctionsHelper.d.ts.map +1 -1
- package/build/types/observable/internal/links/LinksHelper.d.ts +5 -5
- package/build/types/observable/internal/links/LinksHelper.d.ts.map +1 -1
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts +8 -6
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts.map +1 -1
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts +3 -4
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -1
- package/build/types/observable/internal/list/InterfaceListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/list/ListQuery.d.ts +0 -3
- package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/list/ListsHelper.d.ts +4 -4
- package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -1
- package/build/types/observable/internal/list/ObjectListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/object/ObjectQuery.d.ts +2 -1
- package/build/types/observable/internal/object/ObjectQuery.d.ts.map +1 -1
- package/build/types/observable/internal/object/ObjectsHelper.d.ts +8 -4
- package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -1
- package/build/types/observable/internal/object/ObjectsHelper.test.d.ts +1 -0
- package/build/types/observable/internal/object/ObjectsHelper.test.d.ts.map +1 -0
- package/build/types/observable/internal/objectset/ObjectSetCacheKey.d.ts +2 -1
- package/build/types/observable/internal/objectset/ObjectSetCacheKey.d.ts.map +1 -1
- package/build/types/observable/internal/objectset/ObjectSetHelper.d.ts +3 -1
- package/build/types/observable/internal/objectset/ObjectSetHelper.d.ts.map +1 -1
- package/build/types/observable/internal/objectset/ObjectSetHelper.test.d.ts +1 -0
- package/build/types/observable/internal/objectset/ObjectSetHelper.test.d.ts.map +1 -0
- package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts +2 -0
- package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts.map +1 -1
- package/build/types/observable/internal/testUtils.d.ts +2 -2
- package/build/types/observable/internal/testUtils.d.ts.map +1 -1
- package/build/types/public/unstable-do-not-use.d.ts +1 -0
- package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
- package/build/types/util/interfaceUtils.d.ts +2 -1
- package/build/types/util/interfaceUtils.d.ts.map +1 -1
- package/package.json +15 -14
- package/build/cjs/chunk-OVZCGOMG.cjs.map +0 -1
- package/build/cjs/chunk-OZNDU7AU.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Store.test.js","names":["editTodo","Employee","FooInterface","Office","Todo","FauxFoundry","ontologies","startNodeApiServer","stubData","TypeHelpers","chalk","inspect","invariant","afterAll","afterEach","beforeAll","beforeEach","describe","expect","it","vi","ActionValidationError","createClient","TestLogger","runOptimisticJob","createOptimisticId","Store","applyCustomMatchers","createClientMockHelper","createDefer","expectNoMoreCalls","expectSingleLinkCallAndClear","expectSingleListCallAndClear","expectSingleObjectCallAndClear","getObject","mockListSubCallback","mockObserver","mockSingleSubCallback","objectPayloadContaining","updateList","updateObject","waitForCall","invalidateList","expectStandardObserveLink","expectStandardObserveObject","JOHN_DOE_ID","defer","logger","level","defaultOptions","depth","colors","setConfig","fakeTimers","toFake","resetConfig","ANY_INIT_ENTRY","object","undefined","lastUpdated","status","fullTaskName","task","suite","name","x","console","log","bgRed","white","testStage","s","bgYellow","setupOntology","fauxFoundry","fauxOntology","getDefaultOntology","addEmployeeOntology","registerObjectType","todoWithLinkTypes","registerActionType","actionTypeV2","b","payload","id","other","parameters","modifyObject","apiName","setupSomeEmployees","dataStore","getDefaultDataStore","emp1","registerObject","employeeId","emp2","$apiName","johnDoe","fullName","registerLink","office1","officeId","office2","client","cache","testSetup","apiServer","close","objectLikeJohnDoe","objectContaining","$primaryKey","emp1Payload","subFn","type","primaryKey","process","env","NODE_ENV","linkSubFn","store","srcObject","srcLinkName","targetType","expected","unregisterLink","asBsoStub","__apiName","__primaryKey","invalidateEmployeePromise","invalidateObjectType","office1Payload","officeSubFn","$link","occupants","fetchPage","toMatchInlineSnapshot","empSubFn","occupantsLinkSubFn","next","mockClear","not","toHaveBeenCalled","cacheKeys","employeesAsServerReturns","mutatedEmployees","$includeRid","data","$clone","slice","emp","cacheKey","get","getValue","value","toBeUndefined","result","toBe","toEqual","updatedEmpFromCache","objects","observe","pk","mode","optimisticId","layers","remove","where","orderBy","listSubFn","lists","optimisticEmployee","isOptimistic","truthUpdatedEmployee","subListFn","batch","changes","deleteObject","delete","staleEmp","invalidateObject","invalidateListPromise","useFakeTimers","useRealTimers","pInvalidateComplete","toHaveBeenNthCalledWith","subFn1","subFn2","complete","error","likeEmployee50030","toHaveBeenCalledExactlyOnceWith","firstLoad","mock","lastCall","toBeGreaterThan","sub","find","unsubscribe","toHaveBeenCalledTimes","calls","listSub1","ifaceSub","mocked","mockReset","map","e","$objectType","cached","ifacePayload","resolvedList","objSub","at","$gt","listSub","pageSize","fetchMore","resetHandlers","on","toHaveBeenCalledOnce","a","expectLoadingAndLoaded","loading","loaded","clear","text","todoSubFn","applyAction","fauxObject","optimisticUpdate","ctx","rejects","toThrow","nextPk","fauxObjectA","fauxObjectB","fauxObjectC","Promise","all","fetchOne","noWhereNoOrderBy","noWhereOrderByText","subListUnordered","subListOrdered","optimisticallyMutatedA","pkForOptimistic","optimisticallyCreatedObjectD","removeOptimisticResult","createObject","actionDefinition","crazyAction","crazyActionTypeV2","actionTypeBuilder","addParameter","build","idForD","addObject","$title","pActionResult","modifiedObjectA","pkForD","addedObjects","createdObjectD","officeA","officeB","objectSets","baseObjectSet","pivotTo","waitFor","toHaveBeenLastCalledWith","timeout","clientHelper","baseObjects","i","obj","layerIds","write"],"sources":["Store.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 {\n editTodo,\n Employee,\n FooInterface,\n Office,\n Todo,\n} from \"@osdk/client.test.ontology\";\nimport type { SetupServer } from \"@osdk/shared.test\";\nimport {\n FauxFoundry,\n ontologies,\n startNodeApiServer,\n stubData,\n TypeHelpers,\n} from \"@osdk/shared.test\";\nimport chalk from \"chalk\";\nimport { inspect } from \"node:util\";\nimport invariant from \"tiny-invariant\";\nimport type { Task } from \"vitest\";\nimport {\n afterAll,\n afterEach,\n beforeAll,\n beforeEach,\n describe,\n expect,\n it,\n vi,\n} from \"vitest\";\nimport type { BaseServerObject } from \"../../../../faux/build/types/FauxFoundry/BaseServerObject.js\";\nimport { ActionValidationError } from \"../../actions/ActionValidationError.js\";\nimport { type Client } from \"../../Client.js\";\nimport { createClient } from \"../../createClient.js\";\nimport { TestLogger } from \"../../logger/TestLogger.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ObjectSetPayload } from \"../ObjectSetPayload.js\";\nimport type {\n ObserveListOptions,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport { runOptimisticJob } from \"./actions/OptimisticJob.js\";\nimport type { CacheKeys } from \"./CacheKeys.js\";\nimport type { KnownCacheKey } from \"./KnownCacheKey.js\";\nimport type { ObjectCacheKey } from \"./object/ObjectCacheKey.js\";\nimport { createOptimisticId } from \"./OptimisticId.js\";\nimport { Store } from \"./Store.js\";\nimport {\n applyCustomMatchers,\n createClientMockHelper,\n createDefer,\n expectNoMoreCalls,\n expectSingleLinkCallAndClear,\n expectSingleListCallAndClear,\n expectSingleObjectCallAndClear,\n getObject,\n mockListSubCallback,\n mockObserver,\n mockSingleSubCallback,\n objectPayloadContaining,\n updateList,\n updateObject,\n waitForCall,\n} from \"./testUtils.js\";\nimport { invalidateList } from \"./testUtils/invalidateList.js\";\nimport { expectStandardObserveLink } from \"./testUtils/observeLink/expectStandardObserveLink.js\";\nimport { expectStandardObserveObject } from \"./testUtils/observeObject/expectStandardObserveObject.js\";\n\nconst JOHN_DOE_ID = 50030;\n\nconst defer = createDefer();\n\nconst logger = new TestLogger({}, {\n level: \"debug\",\n});\n\ninspect.defaultOptions.depth = 9;\ninspect.defaultOptions.colors = true;\n\nbeforeAll(() => {\n vi.setConfig({\n fakeTimers: {\n toFake: [\n \"setTimeout\",\n \"clearTimeout\",\n \"Date\",\n \"setInterval\",\n \"clearInterval\",\n ],\n },\n });\n});\nafterAll(() => {\n vi.resetConfig();\n});\n\nconst ANY_INIT_ENTRY = {\n // cacheKey: expect.any(Object),\n object: undefined,\n lastUpdated: 0,\n status: \"init\",\n};\n\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nfunction fullTaskName(task?: Task): string {\n return task ? `${fullTaskName(task.suite)} > ${task.name}` : \"\";\n}\n\nbeforeEach((x) => {\n console.log(\n chalk.bgRed(chalk.white(fullTaskName(x.task))),\n );\n});\n\n// helper method to make debugging tests easier\nfunction testStage(s: string) {\n console.log(chalk.bgYellow(`Test Stage: ${s}`));\n}\n\napplyCustomMatchers();\n\nfunction setupOntology(fauxFoundry: FauxFoundry) {\n const fauxOntology = fauxFoundry.getDefaultOntology();\n ontologies.addEmployeeOntology(fauxOntology);\n\n fauxFoundry.getDefaultOntology().registerObjectType(\n stubData.todoWithLinkTypes,\n );\n\n fauxFoundry.getDefaultOntology().registerActionType(\n stubData.editTodo.actionTypeV2,\n (b, payload) => {\n const { id, ...other } = payload.parameters;\n\n b.modifyObject<Todo>(Todo.apiName, id, { ...other });\n },\n );\n}\n\nfunction setupSomeEmployees(fauxFoundry: FauxFoundry) {\n const dataStore = fauxFoundry.getDefaultDataStore();\n\n const emp1 = dataStore.registerObject(Employee, {\n employeeId: 1,\n });\n\n const emp2 = dataStore.registerObject(Employee, {\n employeeId: 2,\n });\n\n const emp3 = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 3,\n });\n\n const emp4 = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 4,\n });\n\n const johnDoe = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: JOHN_DOE_ID,\n fullName: \"John Doe\",\n });\n\n dataStore.registerLink(emp1, \"peeps\", johnDoe, \"lead\");\n\n // Create offices\n const office1 = dataStore.registerObject(Office, {\n officeId: \"101\",\n name: \"Office 1\",\n });\n\n const office2 = dataStore.registerObject(Office, {\n officeId: \"102\",\n name: \"Office 2\",\n });\n\n // Link employees to offices (Employee->Office: officeLink, Office->Employee: occupants)\n dataStore.registerLink(emp1, \"officeLink\", office1, \"occupants\");\n dataStore.registerLink(emp2, \"officeLink\", office2, \"occupants\");\n}\n\ndescribe(Store, () => {\n describe(\"observeLinks\", () => {\n let client: Client;\n let cache: Store;\n let fauxFoundry: FauxFoundry;\n\n beforeAll(async () => {\n // Set up the mock environment and client\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\"),\n createClient,\n { logger },\n );\n ({ client, fauxFoundry } = testSetup);\n\n // Use the existing setup function that adds Employee objects\n setupOntology(fauxFoundry);\n setupSomeEmployees(fauxFoundry);\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n cache = new Store(client);\n return () => {\n cache = undefined!;\n };\n });\n\n const objectLikeJohnDoe = expect.objectContaining({\n $apiName: \"Employee\",\n $primaryKey: JOHN_DOE_ID,\n });\n const objectLikeEmp2 = expect.objectContaining({\n $apiName: \"Employee\",\n $primaryKey: 2,\n });\n\n it(\"removing link updates\", async (x) => {\n const { payload: emp1Payload, subFn } = await expectStandardObserveObject(\n {\n cache,\n type: Employee,\n primaryKey: 1,\n },\n );\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n // Set up mock callback for observing links\n const { payload, linkSubFn } = await expectStandardObserveLink({\n store: cache,\n srcObject: emp1,\n srcLinkName: \"peeps\",\n targetType: Employee,\n expected: [objectLikeJohnDoe],\n });\n\n // Unregister the link \"in the backend\"\n fauxFoundry.getDefaultDataStore().unregisterLink(\n asBsoStub(emp1),\n \"peeps\",\n { __apiName: \"Employee\", __primaryKey: JOHN_DOE_ID },\n \"lead\",\n );\n\n const targetType = \"Employee\";\n const currentLinks: Osdk.Instance<any>[] = [objectLikeJohnDoe];\n const expectedLinks: Osdk.Instance<any>[] = [];\n\n testStage(\"Observing Employee 1's peeps\");\n\n // Invalidate the employee cache\n const invalidateEmployeePromise = cache.invalidateObjectType(\n targetType,\n undefined,\n );\n\n await waitForCall(linkSubFn);\n // Initially go to an invalidated loading state\n expectSingleLinkCallAndClear(linkSubFn, currentLinks, {\n status: \"loading\",\n });\n\n await invalidateEmployeePromise;\n\n // Should have no peeps now\n expectSingleLinkCallAndClear(linkSubFn, expectedLinks, {\n status: \"loaded\",\n });\n });\n\n it(\"invalidating Employee type only invalidates links, not Office objects\", async () => {\n // Get an Office object that has Employee occupants\n const { payload: office1Payload, subFn: officeSubFn } =\n await expectStandardObserveObject(\n {\n cache,\n type: Office,\n primaryKey: \"101\",\n },\n );\n const office1 = office1Payload?.object;\n invariant(office1);\n\n expect(await office1.$link.occupants.fetchPage()).toMatchInlineSnapshot(`\n {\n \"data\": [\n {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:1\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 1,\n \"$title\": undefined,\n \"employeeId\": 1,\n \"office\": \"101\",\n },\n ],\n \"nextPageToken\": undefined,\n \"totalCount\": undefined,\n }\n `);\n\n testStage(\"Observing Employee 1\");\n\n // Get an Employee object linked to the office\n const { payload: emp1Payload, subFn: empSubFn } =\n await expectStandardObserveObject(\n {\n cache,\n type: Employee,\n primaryKey: 1,\n },\n );\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n testStage(\"Observing Office 101's occupants\");\n\n // Set up observation of occupants link\n const { linkSubFn: occupantsLinkSubFn } = await expectStandardObserveLink(\n {\n store: cache,\n srcObject: office1,\n srcLinkName: \"occupants\",\n targetType: Employee,\n expected: [expect.objectContaining({ $primaryKey: 1 })],\n },\n );\n\n // Clear any initial calls\n officeSubFn.next.mockClear();\n empSubFn.next.mockClear();\n occupantsLinkSubFn.next.mockClear();\n\n testStage(\"Invalidating Employee object type\");\n\n // Invalidate the Employee object type\n // This should cause:\n // - any object query for Employee to be invalidated\n // - any object list query for Employee to be invalidated\n // - any link queries where the source is an Employee to be invalidated\n // - any link queries where the target is an Employee to be invalidated\n const invalidateEmployeePromise = cache.invalidateObjectType(\n Employee,\n undefined,\n );\n\n // The link should be invalidated (loading state)\n await waitForCall(occupantsLinkSubFn, 1);\n\n expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {\n status: \"loading\",\n });\n\n // The employee should be invalidated (loading state)\n await waitForCall(empSubFn, 1);\n expectSingleObjectCallAndClear(empSubFn, emp1, \"loading\");\n\n // The link should be revalidated (loaded state)\n await waitForCall(occupantsLinkSubFn, 1);\n expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {\n status: \"loaded\",\n });\n\n // the Employee object should also be invalidated (loading state)\n await waitForCall(empSubFn, 1);\n expectSingleObjectCallAndClear(empSubFn, emp1, \"loaded\");\n\n // The Office object should NOT have any calls\n // This is the key verification - no calls should be made to the office subscription\n expect(officeSubFn.next).not.toHaveBeenCalled();\n\n await invalidateEmployeePromise;\n\n // ensure at the end of invalidation there are no new calls\n expect(occupantsLinkSubFn.next).not.toHaveBeenCalled();\n expect(empSubFn.next).not.toHaveBeenCalled();\n expect(officeSubFn.next).not.toHaveBeenCalled();\n });\n });\n\n describe(\"with mock server\", () => {\n let client: Client;\n let cache: Store;\n let cacheKeys: CacheKeys<KnownCacheKey>;\n\n let employeesAsServerReturns: Osdk.Instance<Employee>[];\n let mutatedEmployees: Osdk.Instance<Employee>[];\n\n beforeAll(async () => {\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\"),\n createClient,\n { logger },\n );\n ({ client } = testSetup);\n\n setupOntology(testSetup.fauxFoundry);\n setupSomeEmployees(testSetup.fauxFoundry);\n\n employeesAsServerReturns = (await client(Employee).fetchPage({\n $includeRid: true,\n })).data;\n mutatedEmployees = [\n employeesAsServerReturns[0],\n employeesAsServerReturns[1].$clone({\n fullName: \"foo\",\n }),\n ...employeesAsServerReturns.slice(2),\n ];\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n cache = new Store(client);\n cacheKeys = cache.cacheKeys;\n\n return () => {\n cache = undefined!;\n };\n });\n\n it(\"basic single object works\", async () => {\n const emp = employeesAsServerReturns[0];\n\n const cacheKey = cacheKeys.get<ObjectCacheKey>(\n \"object\",\n \"Employee\",\n emp.$primaryKey,\n );\n\n // starts empty\n expect(\n cache.getValue(cacheKey)?.value,\n ).toBeUndefined();\n\n const result = updateObject(cache, emp);\n expect(emp).toBe(result);\n\n // getting the object now matches the result\n expect(cache.getValue(cacheKey)?.value).toEqual(\n result,\n );\n\n const updatedEmpFromCache = updateObject(\n cache,\n emp.$clone({ fullName: \"new name\" }),\n );\n expect(updatedEmpFromCache).not.toBe(emp);\n\n // getting it again is the updated object\n expect(cache.getValue(cacheKey)?.value).toEqual(\n updatedEmpFromCache,\n );\n });\n\n describe(\"optimistic updates\", () => {\n it(\"rolls back objects\", async () => {\n const emp = employeesAsServerReturns[0];\n updateObject(cache, emp); // pre-seed the cache with the \"real\" value\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n const optimisticId = createOptimisticId();\n // update with an optimistic write\n updateObject(cache, emp.$clone({ fullName: \"new name\" }), {\n optimisticId,\n });\n expectSingleObjectCallAndClear(\n subFn,\n emp.$clone({ fullName: \"new name\" }),\n \"loaded\",\n );\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n });\n\n it(\"rolls back to an updated real value\", async () => {\n // pre-seed the cache with the \"real\" value\n updateList(cache, {\n type: Employee,\n where: {},\n orderBy: {},\n }, employeesAsServerReturns);\n\n const emp = employeesAsServerReturns[0];\n\n const empSubFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, empSubFn),\n );\n\n expectSingleObjectCallAndClear(empSubFn, emp, \"loaded\");\n\n const listSubFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, listSubFn),\n );\n\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(listSubFn, employeesAsServerReturns);\n\n const optimisticEmployee = emp.$clone({ fullName: \"new name\" });\n\n const optimisticId = createOptimisticId();\n\n testStage(\"optimistic update\");\n expect(listSubFn.next).not.toHaveBeenCalled();\n\n // update with an optimistic write\n updateObject(cache, optimisticEmployee, {\n optimisticId,\n });\n\n testStage(\"after optimistic update\");\n\n // expect optimistic write\n expectSingleObjectCallAndClear(empSubFn, optimisticEmployee);\n\n // expect optimistic write to the list\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(\n listSubFn,\n [\n optimisticEmployee,\n ...employeesAsServerReturns.slice(1),\n ],\n {\n isOptimistic: true,\n status: \"loading\",\n },\n );\n\n // write the real update, via the earlier list definition\n const truthUpdatedEmployee = emp.$clone({\n fullName: \"real update\",\n });\n\n testStage(\"write real update\");\n\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n truthUpdatedEmployee,\n ]);\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n // see the object observation get updated\n expectSingleObjectCallAndClear(\n empSubFn,\n truthUpdatedEmployee,\n \"loaded\",\n );\n\n // see the list get updated\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(listSubFn, [truthUpdatedEmployee], {\n status: \"loaded\",\n isOptimistic: false,\n });\n });\n\n it(\"rolls back to an updated real value via list\", async () => {\n const emp = employeesAsServerReturns[0];\n updateObject(cache, emp); // pre-seed the cache with the \"real\" value\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n const optimisticEmployee = emp.$clone({ fullName: \"new name\" });\n\n // update with an optimistic write\n const optimisticId = createOptimisticId();\n updateObject(cache, optimisticEmployee, {\n optimisticId,\n });\n expectSingleObjectCallAndClear(subFn, optimisticEmployee);\n\n const truthUpdatedEmployee = emp.$clone({\n fullName: \"real update\",\n });\n updateObject(cache, truthUpdatedEmployee);\n\n // we shouldn't expect an update because the top layer has a value\n expect(subFn.next).not.toHaveBeenCalled();\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n expectSingleObjectCallAndClear(subFn, truthUpdatedEmployee);\n expectNoMoreCalls(subFn);\n });\n\n describe(\"object deletes\", () => {\n it(\"it properly updates the list\", async () => {\n const emp = employeesAsServerReturns[0];\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n emp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, emp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [emp],\n { status: \"loaded\" },\n );\n\n const cacheKey = cacheKeys.get<ObjectCacheKey>(\n \"object\",\n emp.$apiName,\n emp.$primaryKey,\n );\n\n // Actual test is here, prior to this is setup\n testStage(\"delete the object\");\n\n cache.batch({\n optimisticId: createOptimisticId(),\n }, (batch) => {\n batch.changes.deleteObject(cacheKey);\n batch.delete(cacheKey, \"loading\");\n });\n\n expectSingleObjectCallAndClear(subFn, undefined);\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [],\n { isOptimistic: true, status: \"loading\" },\n );\n });\n });\n });\n\n describe(\".invalidateObject\", () => {\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateObject(cache, staleEmp);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, staleEmp, \"loaded\");\n\n // invalidate\n void cache.invalidateObject(Employee, staleEmp.$primaryKey);\n\n await waitForCall(subFn);\n expectSingleObjectCallAndClear(subFn, staleEmp, \"loading\");\n\n await waitForCall(subFn);\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n expectNoMoreCalls(subFn);\n });\n });\n\n describe(\".invalidateList\", () => {\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n staleEmp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loaded\" },\n );\n\n testStage(\"invalidate\");\n\n const invalidateListPromise = invalidateList(cache, { type: Employee });\n testStage(\"check invalidate\");\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loading\" },\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n employeesAsServerReturns,\n { status: \"loaded\" },\n );\n\n await waitForCall(subFn, 1);\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n // don't leave promises dangling\n await invalidateListPromise;\n });\n });\n\n describe(\".invalidateObjectType\", () => {\n beforeEach(() => {\n vi.useFakeTimers({});\n });\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n staleEmp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loaded\" },\n );\n\n testStage(\"invalidate\");\n\n const pInvalidateComplete = cache.invalidateObjectType(\n Employee,\n undefined,\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(subListFn, [staleEmp], {\n status: \"loading\",\n });\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(subListFn, employeesAsServerReturns);\n\n testStage(\"Check invalidation call for single sub\");\n\n await waitForCall(subFn, 2);\n // First call is for loading state\n expect(subFn.next).toHaveBeenNthCalledWith(\n 1,\n objectPayloadContaining({\n status: \"loading\",\n object: staleEmp as unknown as ObjectHolder,\n }),\n );\n // Second call is for loaded state with fresh data\n expect(subFn.next).toHaveBeenNthCalledWith(\n 2,\n objectPayloadContaining({\n status: \"loaded\",\n object: emp as unknown as ObjectHolder,\n }),\n );\n subFn.next.mockClear();\n\n // we don't need this value to control the test but we want to make sure we don't have\n // any unhandled exceptions upon test completion\n await pInvalidateComplete;\n });\n });\n\n describe(\".observeObject (force)\", () => {\n const subFn1 = mockSingleSubCallback();\n const subFn2 = mockSingleSubCallback();\n\n beforeEach(async () => {\n subFn1.complete.mockClear();\n subFn1.next.mockClear();\n subFn1.error.mockClear();\n\n subFn2.complete.mockClear();\n subFn2.next.mockClear();\n subFn2.error.mockClear();\n });\n\n const likeEmployee50030 = expect.objectContaining({\n $primaryKey: JOHN_DOE_ID,\n fullName: \"John Doe\",\n });\n\n it(\"fetches and updates twice\", async () => {\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"force\",\n }, subFn1),\n );\n\n expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n isOptimistic: false,\n }),\n );\n\n subFn1.next.mockClear();\n\n await waitForCall(subFn1);\n expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: likeEmployee50030,\n isOptimistic: false,\n }),\n );\n\n const firstLoad = subFn1.next.mock.lastCall?.[0]!;\n\n subFn1.next.mockClear();\n\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"force\",\n }, subFn2),\n );\n expectSingleObjectCallAndClear(subFn1, likeEmployee50030, \"loading\");\n\n // should be the earlier results\n expectSingleObjectCallAndClear(subFn2, likeEmployee50030, \"loading\");\n\n // both will be updated\n for (const s of [subFn1, subFn2]) {\n // wait for the result to come in\n await waitForCall(s, 1);\n expect(s.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n ...firstLoad,\n lastUpdated: expect.toBeGreaterThan(firstLoad.lastUpdated),\n }),\n );\n\n s.next.mockClear();\n }\n });\n });\n\n describe(\".observeObject (offline)\", () => {\n const subFn = mockSingleSubCallback();\n let sub: Unsubscribable;\n\n beforeEach(() => {\n subFn.complete.mockClear();\n subFn.next.mockClear();\n subFn.error.mockClear();\n\n sub = defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, undefined!, \"init\");\n });\n\n it(\"does basic observation and unsubscribe\", async () => {\n const emp = employeesAsServerReturns.find(x =>\n x.$primaryKey === JOHN_DOE_ID\n )!;\n\n // force an update\n updateObject(cache, emp);\n expectSingleObjectCallAndClear(subFn, emp);\n\n // force again\n updateObject(cache, emp.$clone({ fullName: \"new name\" }));\n expectSingleObjectCallAndClear(\n subFn,\n emp.$clone({ fullName: \"new name\" }),\n );\n\n sub.unsubscribe();\n\n // force again but no subscription update\n updateObject(cache, emp.$clone({ fullName: \"new name 2\" }));\n expect(subFn.next).not.toHaveBeenCalled();\n });\n\n it(\"observes with list update\", async () => {\n const emp = employeesAsServerReturns.find(x =>\n x.$primaryKey === JOHN_DOE_ID\n )!;\n\n // force an update\n updateObject(cache, emp.$clone({ fullName: \"not the name\" }));\n expect(subFn.next).toHaveBeenCalledTimes(1);\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n expect(subFn.next).toHaveBeenCalledTimes(2);\n\n expect(subFn.next.mock.calls[1][0]).toEqual(\n objectPayloadContaining({\n object: emp as unknown as ObjectHolder<typeof emp>,\n }),\n );\n });\n });\n\n describe(\".lists.observe\", () => {\n const listSub1 = mockListSubCallback();\n const ifaceSub = mockListSubCallback();\n\n beforeEach(() => {\n vi.mocked(listSub1.next).mockReset();\n vi.mocked(listSub1.error).mockReset();\n vi.mocked(listSub1.complete).mockReset();\n\n vi.mocked(ifaceSub.next).mockReset();\n vi.mocked(ifaceSub.error).mockReset();\n vi.mocked(ifaceSub.complete).mockReset();\n });\n\n describe(\"mode=force\", () => {\n it(\"initial load\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n\n orderBy: {},\n mode: \"force\",\n }, listSub1),\n );\n\n defer(\n cache.lists.observe({\n type: FooInterface,\n\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n\n await waitForCall(listSub1);\n await waitForCall(ifaceSub);\n\n expectSingleListCallAndClear(\n listSub1,\n [],\n { status: \"loading\" },\n );\n\n expectSingleListCallAndClear(\n ifaceSub,\n [],\n { status: \"loading\" },\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(\n listSub1,\n employeesAsServerReturns,\n {\n status: \"loaded\",\n },\n );\n\n await waitForCall(ifaceSub);\n expectSingleListCallAndClear(\n ifaceSub,\n employeesAsServerReturns.map(e =>\n expect.objectContaining({\n $apiName: \"FooInterface\",\n $objectType: \"Employee\",\n $primaryKey: e.$primaryKey,\n })\n ),\n {\n status: \"loaded\",\n },\n );\n\n expectNoMoreCalls(listSub1);\n expectNoMoreCalls(ifaceSub);\n\n expect(listSub1.next).not.toHaveBeenCalled();\n expect(listSub1.error).not.toHaveBeenCalled();\n expect(ifaceSub.next).not.toHaveBeenCalled();\n expect(ifaceSub.error).not.toHaveBeenCalled();\n });\n\n it(\"cache stores raw objects when loading via interface\", async () => {\n defer(\n cache.lists.observe({\n type: FooInterface,\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n await waitForCall(ifaceSub, 2);\n\n const pk = employeesAsServerReturns[0].$primaryKey as number;\n const cached = getObject(cache, \"Employee\", pk);\n expect(cached?.$apiName).toBe(\"Employee\");\n expect(cached?.$objectType).toBe(\"Employee\");\n });\n\n it(\"interface queries return interface view while cache stores raw object\", async () => {\n defer(\n cache.lists.observe({\n type: FooInterface,\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n await waitForCall(ifaceSub, 2);\n\n const ifacePayload = ifaceSub.next.mock.calls[1][0];\n expect(ifacePayload?.resolvedList?.[0]?.$apiName).toBe(\n \"FooInterface\",\n );\n expect(ifacePayload?.resolvedList?.[0]?.$objectType).toBe(\"Employee\");\n\n const pk = employeesAsServerReturns[0].$primaryKey as number;\n const cached = getObject(cache, \"Employee\", pk);\n expect(cached?.$apiName).toBe(\"Employee\");\n });\n\n it(\"direct query after interface query preserves interface $apiName\", async () => {\n const objSub = mockSingleSubCallback();\n\n defer(\n cache.lists.observe({\n type: FooInterface,\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n await waitForCall(ifaceSub, 2);\n\n expect(ifaceSub.next.mock.calls[1][0]?.resolvedList?.[0]?.$apiName)\n .toBe(\"FooInterface\");\n\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: employeesAsServerReturns[0].$primaryKey,\n mode: \"force\",\n }, objSub),\n );\n await waitForCall(objSub, 2);\n\n expect(\n ifaceSub.next.mock.calls.at(-1)?.[0]?.resolvedList?.[0]?.$apiName,\n )\n .toBe(\"FooInterface\");\n });\n\n it(\"subsequent load\", async () => {\n // Pre-seed with data the server doesn't return\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n mutatedEmployees,\n );\n\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"force\",\n }, listSub1),\n );\n\n await waitForCall(listSub1, 1);\n const firstLoad = listSub1.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(listSub1, mutatedEmployees, {\n status: \"loading\",\n });\n\n await waitForCall(listSub1, 1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns, {\n status: \"loaded\",\n lastUpdated: expect.toBeGreaterThan(\n firstLoad.lastUpdated,\n ),\n });\n });\n });\n\n describe(\"mode = offline\", () => {\n it(\"updates with list updates\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, listSub1),\n );\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns);\n\n // list is just now one object\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n employeesAsServerReturns[0],\n ]);\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, [employeesAsServerReturns[0]]);\n });\n\n it(\"updates with different list updates\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, listSub1),\n );\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns);\n\n // new where === different list\n updateList(cache, {\n type: Employee,\n where: { employeeId: { $gt: 0 } },\n orderBy: {},\n }, mutatedEmployees);\n\n // original list updates still\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, mutatedEmployees);\n });\n });\n });\n\n describe(\".fetchMore\", () => {\n beforeEach(() => {\n vi.useFakeTimers({});\n });\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it(\"works in the solo case\", async () => {\n const listSub = mockListSubCallback();\n defer(cache.lists.observe(\n {\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"force\",\n pageSize: 1,\n },\n listSub,\n ));\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(listSub, [], { status: \"loading\" });\n\n await waitForCall(listSub, 1);\n const { fetchMore } = listSub.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loaded\" },\n );\n });\n\n it(\"handles multiple sequential fetchMore calls\", async () => {\n const listSub = mockListSubCallback();\n defer(cache.lists.observe(\n {\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"force\",\n pageSize: 1,\n },\n listSub,\n ));\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(listSub, [], { status: \"loading\" });\n\n await waitForCall(listSub, 1);\n let { fetchMore } = listSub.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n ({ fetchMore } = listSub.next.mock.calls[0][0]!);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n ({ fetchMore } = listSub.next.mock.calls[0][0]!);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 3),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 3),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 4),\n { status: \"loaded\" },\n );\n });\n });\n });\n\n describe(\"with mock client\", () => {\n let client: Client;\n let apiServer: SetupServer;\n let fauxFoundry: FauxFoundry;\n let store: Store;\n\n beforeAll(async () => {\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\", undefined, { logger }),\n createClient,\n { logger },\n );\n ({ client, apiServer, fauxFoundry } = testSetup);\n\n setupOntology(testSetup.fauxFoundry);\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n apiServer.resetHandlers();\n });\n\n beforeEach(async () => {\n store = new Store(client);\n });\n\n it(\"properly fires error handler for a list\", async () => {\n const sub = mockListSubCallback();\n\n // ignores unhandled rejection, like one we will get from fire-and-forget metadata call\n process.on(\"unhandledRejection\", () => {});\n\n store.lists.observe({\n type: { apiName: \"notReal\", type: \"object\" },\n orderBy: {},\n }, sub);\n\n await waitForCall(sub.next);\n\n // initial loading state\n expect(sub.next).toHaveBeenCalledOnce();\n expectSingleListCallAndClear(sub, [], { status: \"loading\" });\n\n await waitForCall(sub.error);\n expect(sub.error).toHaveBeenCalledOnce();\n expect(sub.next).not.toHaveBeenCalled();\n });\n\n describe(\"batching\", () => {\n it(\"groups requests for single objects\", async () => {\n fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 0,\n });\n fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 1,\n });\n\n const a = mockSingleSubCallback();\n const b = mockSingleSubCallback();\n\n defer(store.objects.observe({\n apiName: Employee,\n pk: 0,\n }, a));\n defer(store.objects.observe({\n apiName: Employee,\n pk: 1,\n }, b));\n\n await a.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 0,\n }),\n }),\n });\n await b.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 1,\n }),\n }),\n });\n });\n });\n\n describe(\"actions\", () => {\n beforeEach(() => {\n fauxFoundry.getDefaultDataStore().clear();\n });\n\n it(\"properly invalidates objects\", async () => {\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id: 0,\n text: \"og title\",\n });\n\n const todoSubFn = mockSingleSubCallback();\n\n defer(store.objects.observe({\n apiName: Todo,\n pk: 0,\n }, todoSubFn));\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 0,\n }),\n }),\n });\n\n // at this point we have an observation properly set up\n await store.applyAction(editTodo, {\n id: 0,\n text: \"hello there kind sir\",\n });\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n text: \"hello there kind sir\",\n }),\n }),\n });\n });\n\n it(\"rolls back optimistic updates on error\", async () => {\n const fauxObject = expect.objectContaining({\n id: 0,\n text: \"does not matter\",\n });\n\n // set the object in the \"backend\"\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id: 0,\n text: \"does not matter\",\n });\n\n const todoSubFn = mockSingleSubCallback();\n defer(\n store.objects.observe({\n apiName: Todo,\n pk: 0,\n }, todoSubFn),\n );\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n isOptimistic: false,\n }),\n loaded: objectPayloadContaining({\n object: fauxObject,\n status: \"loaded\",\n isOptimistic: false,\n }),\n });\n\n const object: Osdk.Instance<Todo> | undefined = store.getValue(\n store.cacheKeys.get<ObjectCacheKey>(\"object\", \"Todo\", 0),\n )?.value as any;\n invariant(object);\n\n // at this point we have an observation properly set up\n await expect(\n store.applyAction(editTodo, {\n id: \"not an id that exists\",\n } as any, {\n optimisticUpdate: (ctx) => {\n ctx.updateObject(object.$clone({ text: \"optimistic\" }));\n },\n }),\n ).rejects.toThrow(ActionValidationError);\n\n await waitForCall(todoSubFn, 2);\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: expect.objectContaining({\n id: 0,\n text: \"optimistic\",\n }),\n isOptimistic: true,\n }),\n loaded: objectPayloadContaining({\n object: fauxObject,\n status: \"loaded\",\n isOptimistic: false,\n }),\n });\n });\n });\n\n describe(\"orderBy\", async () => {\n let nextPk = 0;\n\n let fauxObjectA: Osdk.Instance<Todo>;\n let fauxObjectB: Osdk.Instance<Todo>;\n let fauxObjectC: Osdk.Instance<Todo>;\n\n beforeAll(async () => {\n fauxFoundry.getDefaultDataStore().clear();\n [fauxObjectA, fauxObjectB, fauxObjectC] = await Promise.all(\n ([\"a\", \"b\", \"c\"] as const).map(text => {\n const id = nextPk++;\n\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id,\n text,\n });\n\n return client(Todo).fetchOne(id, { $includeRid: true });\n }),\n );\n });\n\n const noWhereNoOrderBy = {\n type: Todo,\n where: {},\n orderBy: {},\n } satisfies ObserveListOptions<Todo>;\n\n const noWhereOrderByText = {\n type: Todo,\n where: {},\n orderBy: {\n text: \"asc\",\n },\n } satisfies ObserveListOptions<Todo>;\n\n let subListUnordered = mockListSubCallback();\n let subListOrdered = mockListSubCallback();\n\n beforeEach(async () => {\n subListUnordered = mockListSubCallback();\n subListOrdered = mockListSubCallback();\n defer(\n store.lists.observe({\n ...noWhereNoOrderBy,\n mode: \"offline\",\n }, subListUnordered),\n );\n await waitForCall(subListUnordered);\n expectSingleListCallAndClear(subListUnordered, [], { status: \"init\" });\n\n defer(\n store.lists.observe({\n ...noWhereOrderByText,\n mode: \"offline\",\n }, subListOrdered),\n );\n await waitForCall(subListOrdered);\n expectSingleListCallAndClear(subListOrdered, [], { status: \"init\" });\n });\n\n it(\"invalidates the correct lists\", async () => {\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n );\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n );\n\n // For whatever reason, object B is no longer in the first set (use your imagination)\n // but we have added a C before A. So the first list is [C, A]\n updateList(store, { type: Todo, where: {}, orderBy: {} }, [\n fauxObjectC,\n fauxObjectA,\n ]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectC, fauxObjectA],\n );\n\n // Nothing told the system that B was deleted so we can presume it still exists\n // and therefore the second list is now [A, B, C]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB, fauxObjectC],\n );\n });\n\n it(\"produces proper results with optimistic updates and successful action\", async () => {\n const optimisticallyMutatedA = fauxObjectA.$clone({\n text: \"optimistic\",\n });\n const pkForOptimistic = nextPk++;\n const optimisticallyCreatedObjectD = expect.objectContaining({\n \"text\": \"d\",\n id: pkForOptimistic,\n });\n\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n );\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n );\n\n testStage(\"Start\");\n\n // Perform something optimistic.\n const removeOptimisticResult = runOptimisticJob(store, (b) => {\n b.createObject(Todo, pkForOptimistic, {\n id: pkForOptimistic,\n text: \"d\",\n });\n b.updateObject(optimisticallyMutatedA as Osdk.Instance<any>);\n });\n\n // The first list is now [B, A, optimistic]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [\n fauxObjectB,\n optimisticallyMutatedA, // same position, new values\n optimisticallyCreatedObjectD,\n ],\n { isOptimistic: true },\n );\n\n // the second list is now [A, B, optimistic]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [\n fauxObjectB,\n optimisticallyCreatedObjectD,\n optimisticallyMutatedA,\n ],\n { isOptimistic: true },\n );\n\n // Roll back the optimistic update\n await removeOptimisticResult();\n\n // The first list is now [B, A]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n { isOptimistic: false },\n );\n\n // the second list is now [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n { isOptimistic: false },\n );\n });\n // I think these are named backwards\n it(\"produces proper results with optimistic updates and rollback\", async () => {\n const pkForOptimistic = nextPk++;\n const optimisticallyCreatedObjectD = expect.objectContaining({\n \"$primaryKey\": pkForOptimistic,\n \"$title\": undefined, // FIXME once this is calculated by optimistic then this needs to be the right value\n \"text\": \"d optimistic\",\n id: pkForOptimistic,\n });\n const optimisticallyMutatedA = fauxObjectA.$clone({\n text: \"optimistic\",\n });\n\n testStage(\"Initial Setup\");\n\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n fauxObjectA,\n ]);\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n expectSingleListCallAndClear(subListOrdered, [\n fauxObjectA,\n fauxObjectB,\n ]);\n\n testStage(\"Optimistic Creation\");\n\n // create the weirdest action ever. It always creates a Todo with\n // a new primary key and the text \"d\" and updates A\n const {\n actionDefinition: crazyAction,\n actionTypeV2: crazyActionTypeV2,\n } = TypeHelpers.actionTypeBuilder(\"asdf\")\n .addParameter(\"foo\", \"string\")\n .build();\n\n fauxFoundry.getDefaultOntology().registerActionType(\n crazyActionTypeV2,\n (batch, params) => {\n const idForD = nextPk++;\n\n batch.addObject(Todo.apiName, idForD, {\n id: idForD,\n text: \"d\",\n });\n\n batch.modifyObject(fauxObjectA.$apiName, fauxObjectA.$primaryKey, {\n text: \"a prime\",\n $title: \"a prime\", // FIXME we shouldn't have to set this, it can be calculated\n });\n },\n );\n\n // the optimistic job will call createObject which triggers the `objectFactory2` of the\n // cache context.\n\n // Perform something optimistic.\n const pActionResult = store.applyAction<typeof crazyAction>(\n crazyAction,\n {},\n {\n optimisticUpdate: (b) => {\n b.createObject(Todo, pkForOptimistic, {\n id: pkForOptimistic,\n text: \"d optimistic\",\n });\n b.updateObject(optimisticallyMutatedA);\n },\n },\n );\n\n testStage(\"Optimistic Updates\");\n\n // The first list is now [B, A, optimistic]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n optimisticallyMutatedA, // same position, new values\n optimisticallyCreatedObjectD,\n ], { isOptimistic: true });\n\n // the second list is now [B, optimistic, optimistic a]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(subListOrdered, [\n fauxObjectB,\n optimisticallyCreatedObjectD,\n optimisticallyMutatedA,\n ], { isOptimistic: true });\n\n testStage(\"Resolve Action\");\n\n const modifiedObjectA = fauxObjectA.$clone({\n text: \"a prime\",\n });\n\n const pkForD = (await pActionResult).addedObjects?.[0].primaryKey;\n invariant(typeof pkForD === \"number\");\n // load this without the cache for comparisons\n const createdObjectD = await client(Todo).fetchOne(pkForD, {\n $includeRid: true,\n });\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n modifiedObjectA,\n createdObjectD,\n ], { isOptimistic: false });\n\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [modifiedObjectA, fauxObjectB, createdObjectD],\n { isOptimistic: false },\n );\n });\n });\n\n it(\"works with pivotTo and orderBy on objectSets\", async () => {\n fauxFoundry.getDefaultDataStore().clear();\n\n const officeA = fauxFoundry.getDefaultDataStore().registerObject(Office, {\n $apiName: \"Office\",\n officeId: \"office-a\",\n name: \"Zebra Office\",\n });\n const officeB = fauxFoundry.getDefaultDataStore().registerObject(Office, {\n $apiName: \"Office\",\n officeId: \"office-b\",\n name: \"Alpha Office\",\n });\n\n const emp1 = fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 1,\n fullName: \"Test Employee\",\n });\n const emp2 = fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 2,\n fullName: \"Test Employee 2\",\n });\n\n fauxFoundry.getDefaultDataStore().registerLink(\n emp1,\n \"officeLink\",\n officeA,\n \"occupants\",\n );\n fauxFoundry.getDefaultDataStore().registerLink(\n emp2,\n \"officeLink\",\n officeB,\n \"occupants\",\n );\n\n const sub = mockObserver<ObjectSetPayload | undefined>();\n defer(\n store.objectSets.observe({\n baseObjectSet: client(Employee).pivotTo(\"officeLink\"),\n orderBy: { name: \"asc\" },\n }, sub),\n );\n\n await vi.waitFor(\n () => {\n expect(sub.next).toHaveBeenLastCalledWith(\n expect.objectContaining({\n status: \"loaded\",\n }),\n );\n },\n { timeout: 5000 },\n );\n\n expect(sub.next).toHaveBeenLastCalledWith(\n expect.objectContaining({\n status: \"loaded\",\n resolvedList: [\n expect.objectContaining({ name: \"Alpha Office\" }),\n expect.objectContaining({ name: \"Zebra Office\" }),\n ],\n }),\n );\n\n expect(sub.error).not.toHaveBeenCalled();\n });\n });\n\n describe(\"layers\", () => {\n it(\"properly remove\", () => {\n const clientHelper = createClientMockHelper();\n const store = new Store(clientHelper.client);\n\n const baseObjects = [1, 2].map((i) => ({\n $primaryKey: i,\n $objectType: \"Employee\",\n $apiName: \"Employee\",\n $title: `truth ${i}`,\n } as Osdk.Instance<Employee> & ObjectHolder<Osdk.Instance<Employee>>));\n\n const cacheKeys = baseObjects.map((obj) =>\n store.cacheKeys.get(\"object\", \"Employee\", obj.$primaryKey)\n );\n\n // set the truth\n for (const obj of baseObjects) {\n updateObject(store, obj);\n }\n\n // expect the truth\n for (const obj of baseObjects) {\n expect(getObject(store, \"Employee\", obj.$primaryKey)).toEqual(\n expect.objectContaining({ $title: `truth ${obj.$primaryKey}` }),\n );\n }\n\n const layerIds = [1, 2].map(createOptimisticId);\n\n // optimistically set the objects in their own layers\n for (let i = 0; i < 2; i++) {\n store.batch({ optimisticId: layerIds[i] }, (batch) => {\n batch.write(\n cacheKeys[i],\n {\n ...baseObjects[i],\n $title: `optimistic ${baseObjects[i].$primaryKey}`,\n },\n \"loading\",\n );\n });\n }\n\n // expect the optimistic values\n for (let i = 0; i < 2; i++) {\n expect(getObject(store, \"Employee\", baseObjects[i].$primaryKey))\n .toEqual(\n expect.objectContaining({\n $title: `optimistic ${baseObjects[i].$primaryKey}`,\n }),\n );\n }\n\n // remove the first layer\n store.layers.remove(layerIds[0]);\n\n // should have truth object 1 and optimistic object 2\n expect(getObject(store, \"Employee\", 1)).toEqual(\n expect.objectContaining({ $title: \"truth 1\" }),\n );\n expect(getObject(store, \"Employee\", 2)).toEqual(\n expect.objectContaining({ $title: \"optimistic 2\" }),\n );\n\n // remove the second layer\n store.layers.remove(layerIds[1]);\n\n // should have truth objects\n for (const obj of baseObjects) {\n expect(getObject(store, \"Employee\", obj.$primaryKey)).toEqual(\n expect.objectContaining({ $title: `truth ${obj.$primaryKey}` }),\n );\n }\n });\n });\n});\n\nexport function asBsoStub(\n x: ObjectHolder<any> | Osdk.Instance<any>,\n): BaseServerObject {\n return {\n __apiName: x.$apiName,\n __primaryKey: x.$primaryKey,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Store.test.js","names":["editTodo","Employee","FooInterface","Office","Todo","FauxFoundry","ontologies","startNodeApiServer","stubData","TypeHelpers","chalk","inspect","invariant","afterAll","afterEach","beforeAll","beforeEach","describe","expect","it","vi","ActionValidationError","createClient","TestLogger","runOptimisticJob","ObservableClientImpl","createOptimisticId","Store","applyCustomMatchers","createClientMockHelper","createDefer","expectNoMoreCalls","expectSingleLinkCallAndClear","expectSingleListCallAndClear","expectSingleObjectCallAndClear","getObject","mockLinkSubCallback","mockListSubCallback","mockObserver","mockSingleSubCallback","objectPayloadContaining","updateList","updateObject","waitForCall","invalidateList","expectStandardObserveLink","expectStandardObserveObject","JOHN_DOE_ID","defer","logger","level","defaultOptions","depth","colors","setConfig","fakeTimers","toFake","resetConfig","ANY_INIT_ENTRY","object","undefined","lastUpdated","status","fullTaskName","task","suite","name","x","console","log","bgRed","white","testStage","s","bgYellow","setupOntology","fauxFoundry","fauxOntology","getDefaultOntology","addEmployeeOntology","registerObjectType","todoWithLinkTypes","registerActionType","actionTypeV2","b","payload","id","other","parameters","modifyObject","apiName","setupSomeEmployees","dataStore","getDefaultDataStore","emp1","registerObject","employeeId","emp2","$apiName","johnDoe","fullName","registerLink","office1","officeId","office2","client","cache","testSetup","apiServer","close","objectLikeJohnDoe","objectContaining","$primaryKey","emp1Payload","subFn","type","primaryKey","process","env","NODE_ENV","linkSubFn","store","srcObject","srcLinkName","targetType","expected","unregisterLink","asBsoStub","__apiName","__primaryKey","invalidateEmployeePromise","invalidateObjectType","office1Payload","officeSubFn","$link","occupants","fetchPage","toMatchInlineSnapshot","empSubFn","occupantsLinkSubFn","next","mockClear","not","toHaveBeenCalled","linkSubFn1","sub1","links","observe","linkName","srcType","sourceUnderlyingObjectType","$objectType","pk","dedupeInterval","unsubscribe","linkSubFn2","invalidatePromise","getLastPayload","calls","mock","length","waitForLoaded","waitFor","toBe","interval","observableClient","emp2Payload","observeLinks","lastPayload","resolvedList","toHaveLength","toEqual","arrayContaining","totalCount","emp3Payload","emp3","pageSize","hasMore","toBeUndefined","fooInterfaceInstance","$as","subscription","cacheKeys","employeesAsServerReturns","mutatedEmployees","$includeRid","data","$clone","slice","emp","cacheKey","get","getValue","value","result","updatedEmpFromCache","objects","mode","optimisticId","layers","remove","where","orderBy","listSubFn","lists","optimisticEmployee","isOptimistic","truthUpdatedEmployee","subListFn","batch","changes","deleteObject","delete","staleEmp","invalidateObject","invalidateListPromise","useFakeTimers","useRealTimers","pInvalidateComplete","toHaveBeenNthCalledWith","subFn1","subFn2","complete","error","likeEmployee50030","toHaveBeenCalledExactlyOnceWith","firstLoad","lastCall","toBeGreaterThan","sub","find","toHaveBeenCalledTimes","listSub1","ifaceSub","mocked","mockReset","map","e","cached","ifacePayload","objSub","at","$gt","listSub","fetchMore","resetHandlers","on","toHaveBeenCalledOnce","a","expectLoadingAndLoaded","loading","loaded","clear","text","todoSubFn","applyAction","fauxObject","optimisticUpdate","ctx","rejects","toThrow","nextPk","fauxObjectA","fauxObjectB","fauxObjectC","Promise","all","fetchOne","noWhereNoOrderBy","noWhereOrderByText","subListUnordered","subListOrdered","optimisticallyMutatedA","pkForOptimistic","optimisticallyCreatedObjectD","removeOptimisticResult","createObject","actionDefinition","crazyAction","crazyActionTypeV2","actionTypeBuilder","addParameter","build","idForD","addObject","$title","pActionResult","modifiedObjectA","pkForD","addedObjects","createdObjectD","officeA","officeB","objectSets","baseObjectSet","pivotTo","toHaveBeenLastCalledWith","timeout","clientHelper","baseObjects","i","obj","layerIds","write"],"sources":["Store.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 {\n editTodo,\n Employee,\n FooInterface,\n Office,\n Todo,\n} from \"@osdk/client.test.ontology\";\nimport type { SetupServer } from \"@osdk/shared.test\";\nimport {\n FauxFoundry,\n ontologies,\n startNodeApiServer,\n stubData,\n TypeHelpers,\n} from \"@osdk/shared.test\";\nimport chalk from \"chalk\";\nimport { inspect } from \"node:util\";\nimport invariant from \"tiny-invariant\";\nimport type { Task } from \"vitest\";\nimport {\n afterAll,\n afterEach,\n beforeAll,\n beforeEach,\n describe,\n expect,\n it,\n vi,\n} from \"vitest\";\nimport type { BaseServerObject } from \"../../../../faux/build/types/FauxFoundry/BaseServerObject.js\";\nimport { ActionValidationError } from \"../../actions/ActionValidationError.js\";\nimport { type Client } from \"../../Client.js\";\nimport { createClient } from \"../../createClient.js\";\nimport { TestLogger } from \"../../logger/TestLogger.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { SpecificLinkPayload } from \"../LinkPayload.js\";\nimport type { ObjectSetPayload } from \"../ObjectSetPayload.js\";\nimport type {\n ObservableClient,\n ObserveListOptions,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport type { Observer } from \"../ObservableClient/common.js\";\nimport { runOptimisticJob } from \"./actions/OptimisticJob.js\";\nimport type { CacheKeys } from \"./CacheKeys.js\";\nimport type { KnownCacheKey } from \"./KnownCacheKey.js\";\nimport type { ObjectCacheKey } from \"./object/ObjectCacheKey.js\";\nimport { ObservableClientImpl } from \"./ObservableClientImpl.js\";\nimport { createOptimisticId } from \"./OptimisticId.js\";\nimport { Store } from \"./Store.js\";\nimport {\n applyCustomMatchers,\n createClientMockHelper,\n createDefer,\n expectNoMoreCalls,\n expectSingleLinkCallAndClear,\n expectSingleListCallAndClear,\n expectSingleObjectCallAndClear,\n getObject,\n mockLinkSubCallback,\n mockListSubCallback,\n mockObserver,\n mockSingleSubCallback,\n objectPayloadContaining,\n updateList,\n updateObject,\n waitForCall,\n} from \"./testUtils.js\";\nimport { invalidateList } from \"./testUtils/invalidateList.js\";\nimport { expectStandardObserveLink } from \"./testUtils/observeLink/expectStandardObserveLink.js\";\nimport { expectStandardObserveObject } from \"./testUtils/observeObject/expectStandardObserveObject.js\";\n\nconst JOHN_DOE_ID = 50030;\n\nconst defer = createDefer();\n\nconst logger = new TestLogger({}, {\n level: \"debug\",\n});\n\ninspect.defaultOptions.depth = 9;\ninspect.defaultOptions.colors = true;\n\nbeforeAll(() => {\n vi.setConfig({\n fakeTimers: {\n toFake: [\n \"setTimeout\",\n \"clearTimeout\",\n \"Date\",\n \"setInterval\",\n \"clearInterval\",\n ],\n },\n });\n});\nafterAll(() => {\n vi.resetConfig();\n});\n\nconst ANY_INIT_ENTRY = {\n // cacheKey: expect.any(Object),\n object: undefined,\n lastUpdated: 0,\n status: \"init\",\n};\n\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nfunction fullTaskName(task?: Task): string {\n return task ? `${fullTaskName(task.suite)} > ${task.name}` : \"\";\n}\n\nbeforeEach((x) => {\n console.log(\n chalk.bgRed(chalk.white(fullTaskName(x.task))),\n );\n});\n\n// helper method to make debugging tests easier\nfunction testStage(s: string) {\n console.log(chalk.bgYellow(`Test Stage: ${s}`));\n}\n\napplyCustomMatchers();\n\nfunction setupOntology(fauxFoundry: FauxFoundry) {\n const fauxOntology = fauxFoundry.getDefaultOntology();\n ontologies.addEmployeeOntology(fauxOntology);\n\n fauxFoundry.getDefaultOntology().registerObjectType(\n stubData.todoWithLinkTypes,\n );\n\n fauxFoundry.getDefaultOntology().registerActionType(\n stubData.editTodo.actionTypeV2,\n (b, payload) => {\n const { id, ...other } = payload.parameters;\n\n b.modifyObject<Todo>(Todo.apiName, id, { ...other });\n },\n );\n}\n\nfunction setupSomeEmployees(fauxFoundry: FauxFoundry) {\n const dataStore = fauxFoundry.getDefaultDataStore();\n\n const emp1 = dataStore.registerObject(Employee, {\n employeeId: 1,\n });\n\n const emp2 = dataStore.registerObject(Employee, {\n employeeId: 2,\n });\n\n const emp3 = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 3,\n });\n\n const emp4 = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 4,\n });\n\n const johnDoe = dataStore.registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: JOHN_DOE_ID,\n fullName: \"John Doe\",\n });\n\n dataStore.registerLink(emp1, \"peeps\", johnDoe, \"lead\");\n\n // Create offices\n const office1 = dataStore.registerObject(Office, {\n officeId: \"101\",\n name: \"Office 1\",\n });\n\n const office2 = dataStore.registerObject(Office, {\n officeId: \"102\",\n name: \"Office 2\",\n });\n\n // Link employees to offices (Employee->Office: officeLink, Office->Employee: occupants)\n dataStore.registerLink(emp1, \"officeLink\", office1, \"occupants\");\n dataStore.registerLink(emp2, \"officeLink\", office2, \"occupants\");\n}\n\ndescribe(Store, () => {\n describe(\"observeLinks\", () => {\n let client: Client;\n let cache: Store;\n let fauxFoundry: FauxFoundry;\n\n beforeAll(async () => {\n // Set up the mock environment and client\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\"),\n createClient,\n { logger },\n );\n ({ client, fauxFoundry } = testSetup);\n\n // Use the existing setup function that adds Employee objects\n setupOntology(fauxFoundry);\n setupSomeEmployees(fauxFoundry);\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n cache = new Store(client);\n return () => {\n cache = undefined!;\n };\n });\n\n const objectLikeJohnDoe = expect.objectContaining({\n $apiName: \"Employee\",\n $primaryKey: JOHN_DOE_ID,\n });\n const objectLikeEmp2 = expect.objectContaining({\n $apiName: \"Employee\",\n $primaryKey: 2,\n });\n\n it(\"removing link updates\", async (x) => {\n const { payload: emp1Payload, subFn } = await expectStandardObserveObject(\n {\n cache,\n type: Employee,\n primaryKey: 1,\n },\n );\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n // Set up mock callback for observing links\n const { payload, linkSubFn } = await expectStandardObserveLink({\n store: cache,\n srcObject: emp1,\n srcLinkName: \"peeps\",\n targetType: Employee,\n expected: [objectLikeJohnDoe],\n });\n\n // Unregister the link \"in the backend\"\n fauxFoundry.getDefaultDataStore().unregisterLink(\n asBsoStub(emp1),\n \"peeps\",\n { __apiName: \"Employee\", __primaryKey: JOHN_DOE_ID },\n \"lead\",\n );\n\n const targetType = \"Employee\";\n const currentLinks: Osdk.Instance<any>[] = [objectLikeJohnDoe];\n const expectedLinks: Osdk.Instance<any>[] = [];\n\n testStage(\"Observing Employee 1's peeps\");\n\n // Invalidate the employee cache\n const invalidateEmployeePromise = cache.invalidateObjectType(\n targetType,\n undefined,\n );\n\n await waitForCall(linkSubFn);\n // Initially go to an invalidated loading state\n expectSingleLinkCallAndClear(linkSubFn, currentLinks, {\n status: \"loading\",\n });\n\n await invalidateEmployeePromise;\n\n // Should have no peeps now\n expectSingleLinkCallAndClear(linkSubFn, expectedLinks, {\n status: \"loaded\",\n });\n });\n\n it(\"invalidating Employee type only invalidates links, not Office objects\", async () => {\n // Get an Office object that has Employee occupants\n const { payload: office1Payload, subFn: officeSubFn } =\n await expectStandardObserveObject(\n {\n cache,\n type: Office,\n primaryKey: \"101\",\n },\n );\n const office1 = office1Payload?.object;\n invariant(office1);\n\n expect(await office1.$link.occupants.fetchPage()).toMatchInlineSnapshot(`\n {\n \"data\": [\n {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:1\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 1,\n \"$propertySecurities\": undefined,\n \"$title\": undefined,\n \"employeeId\": 1,\n \"office\": \"101\",\n },\n ],\n \"nextPageToken\": undefined,\n \"totalCount\": undefined,\n }\n `);\n\n testStage(\"Observing Employee 1\");\n\n // Get an Employee object linked to the office\n const { payload: emp1Payload, subFn: empSubFn } =\n await expectStandardObserveObject(\n {\n cache,\n type: Employee,\n primaryKey: 1,\n },\n );\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n testStage(\"Observing Office 101's occupants\");\n\n // Set up observation of occupants link\n const { linkSubFn: occupantsLinkSubFn } = await expectStandardObserveLink(\n {\n store: cache,\n srcObject: office1,\n srcLinkName: \"occupants\",\n targetType: Employee,\n expected: [expect.objectContaining({ $primaryKey: 1 })],\n },\n );\n\n // Clear any initial calls\n officeSubFn.next.mockClear();\n empSubFn.next.mockClear();\n occupantsLinkSubFn.next.mockClear();\n\n testStage(\"Invalidating Employee object type\");\n\n // Invalidate the Employee object type\n // This should cause:\n // - any object query for Employee to be invalidated\n // - any object list query for Employee to be invalidated\n // - any link queries where the source is an Employee to be invalidated\n // - any link queries where the target is an Employee to be invalidated\n const invalidateEmployeePromise = cache.invalidateObjectType(\n Employee,\n undefined,\n );\n\n // The link should be invalidated (loading state)\n await waitForCall(occupantsLinkSubFn, 1);\n\n expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {\n status: \"loading\",\n });\n\n // The employee should be invalidated (loading state)\n await waitForCall(empSubFn, 1);\n expectSingleObjectCallAndClear(empSubFn, emp1, \"loading\");\n\n // The link should be revalidated (loaded state)\n await waitForCall(occupantsLinkSubFn, 1);\n expectSingleLinkCallAndClear(occupantsLinkSubFn, [emp1], {\n status: \"loaded\",\n });\n\n // the Employee object should also be invalidated (loading state)\n await waitForCall(empSubFn, 1);\n expectSingleObjectCallAndClear(empSubFn, emp1, \"loaded\");\n\n // The Office object should NOT have any calls\n // This is the key verification - no calls should be made to the office subscription\n expect(officeSubFn.next).not.toHaveBeenCalled();\n\n await invalidateEmployeePromise;\n\n // ensure at the end of invalidation there are no new calls\n expect(occupantsLinkSubFn.next).not.toHaveBeenCalled();\n expect(empSubFn.next).not.toHaveBeenCalled();\n expect(officeSubFn.next).not.toHaveBeenCalled();\n });\n\n it(\"re-subscribing within dedupeInterval does not refetch\", async () => {\n const { payload: emp1Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 2,\n });\n const emp2 = emp1Payload?.object;\n invariant(emp2);\n\n const linkSubFn1 = mockLinkSubCallback();\n const sub1 = cache.links.observe({\n linkName: \"peeps\",\n srcType: { type: \"object\", apiName: emp2.$apiName },\n sourceUnderlyingObjectType: emp2.$objectType,\n pk: emp2.$primaryKey,\n dedupeInterval: 60_000,\n }, linkSubFn1);\n\n await waitForCall(linkSubFn1);\n expectSingleLinkCallAndClear(linkSubFn1, [], { status: \"loading\" });\n\n await waitForCall(linkSubFn1);\n expectSingleLinkCallAndClear(linkSubFn1, [], {\n status: \"loaded\",\n });\n\n sub1.unsubscribe();\n\n const linkSubFn2 = mockLinkSubCallback();\n defer(cache.links.observe({\n linkName: \"peeps\",\n srcType: { type: \"object\", apiName: emp2.$apiName },\n sourceUnderlyingObjectType: emp2.$objectType,\n pk: emp2.$primaryKey,\n dedupeInterval: 60_000,\n }, linkSubFn2));\n\n await waitForCall(linkSubFn2);\n expectSingleLinkCallAndClear(linkSubFn2, [], {\n status: \"loaded\",\n });\n });\n\n it(\"forced revalidation bypasses dedupeInterval\", async () => {\n const { payload: emp1Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 2,\n });\n const emp2 = emp1Payload?.object;\n invariant(emp2);\n\n const linkSubFn = mockLinkSubCallback();\n defer(cache.links.observe({\n linkName: \"peeps\",\n srcType: { type: \"object\", apiName: emp2.$apiName },\n sourceUnderlyingObjectType: emp2.$objectType,\n pk: emp2.$primaryKey,\n dedupeInterval: 60_000,\n }, linkSubFn));\n\n await waitForCall(linkSubFn);\n expectSingleLinkCallAndClear(linkSubFn, [], { status: \"loading\" });\n\n await waitForCall(linkSubFn);\n expectSingleLinkCallAndClear(linkSubFn, [], {\n status: \"loaded\",\n });\n\n const invalidatePromise = cache.invalidateObjectType(\n \"Employee\",\n undefined,\n );\n\n await waitForCall(linkSubFn);\n expectSingleLinkCallAndClear(linkSubFn, [], {\n status: \"loading\",\n });\n\n await invalidatePromise;\n\n expectSingleLinkCallAndClear(linkSubFn, [], {\n status: \"loaded\",\n });\n });\n\n describe(\"multi-object observeLinks\", () => {\n function getLastPayload(\n subFn: ReturnType<typeof mockLinkSubCallback>,\n ): SpecificLinkPayload {\n const calls = subFn.next.mock.calls;\n return calls[calls.length - 1][0] as SpecificLinkPayload;\n }\n\n async function waitForLoaded(\n subFn: ReturnType<typeof mockLinkSubCallback>,\n ) {\n await vi.waitFor(() => {\n expect(getLastPayload(subFn)?.status).toBe(\"loaded\");\n }, { interval: 0 });\n }\n\n it(\"returns linked objects from all source objects\", async () => {\n const observableClient: ObservableClient = new ObservableClientImpl(\n cache,\n );\n\n const { payload: emp1Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 1,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n const { payload: emp2Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 2,\n });\n const emp2 = emp2Payload?.object;\n invariant(emp2);\n\n const linkSubFn = mockLinkSubCallback();\n\n defer(\n observableClient.observeLinks(\n [emp1, emp2],\n \"officeLink\",\n { linkName: \"officeLink\" },\n // @ts-expect-error crossing typed/untyped barrier for test\n linkSubFn as unknown as Observer<SpecificLinkPayload>,\n ),\n );\n\n await waitForLoaded(linkSubFn);\n const lastPayload = getLastPayload(linkSubFn);\n\n expect(lastPayload.resolvedList).toHaveLength(2);\n expect(lastPayload.resolvedList).toEqual(\n expect.arrayContaining([\n expect.objectContaining({ $primaryKey: \"101\" }),\n expect.objectContaining({ $primaryKey: \"102\" }),\n ]),\n );\n expect(lastPayload.totalCount).toBe(\"2\");\n });\n\n it(\"deduplicates when multiple sources link to the same target\", async () => {\n const dataStore = fauxFoundry.getDefaultDataStore();\n\n // emp1 already links to office1; add emp3 -> office1 too\n dataStore.registerLink(\n { __apiName: \"Employee\", __primaryKey: 3 },\n \"officeLink\",\n { __apiName: \"Office\", __primaryKey: \"101\" },\n \"occupants\",\n );\n\n try {\n const observableClient: ObservableClient = new ObservableClientImpl(\n cache,\n );\n\n const { payload: emp1Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 1,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n const { payload: emp3Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 3,\n });\n const emp3 = emp3Payload?.object;\n invariant(emp3);\n\n const linkSubFn = mockLinkSubCallback();\n\n defer(\n observableClient.observeLinks(\n [emp1, emp3],\n \"officeLink\",\n { linkName: \"officeLink\" },\n // @ts-expect-error crossing typed/untyped barrier for test\n linkSubFn as unknown as Observer<SpecificLinkPayload>,\n ),\n );\n\n await waitForLoaded(linkSubFn);\n const lastPayload = getLastPayload(linkSubFn);\n\n expect(lastPayload.resolvedList).toHaveLength(1);\n expect(lastPayload.resolvedList[0].$primaryKey).toBe(\"101\");\n expect(lastPayload.totalCount).toBe(\"1\");\n } finally {\n dataStore.unregisterLink(\n { __apiName: \"Employee\", __primaryKey: 3 },\n \"officeLink\",\n { __apiName: \"Office\", __primaryKey: \"101\" },\n \"occupants\",\n );\n }\n });\n\n it(\"leaves totalCount undefined when sub-queries are still paginating\", async () => {\n const dataStore = fauxFoundry.getDefaultDataStore();\n\n // Ensure emp1 has at least 2 peeps links (MANY cardinality).\n // Prior tests may have removed the original johnDoe peep,\n // so we register two fresh links to guarantee pagination with pageSize=1.\n dataStore.registerLink(\n { __apiName: \"Employee\", __primaryKey: 1 },\n \"peeps\",\n { __apiName: \"Employee\", __primaryKey: 3 },\n \"lead\",\n );\n dataStore.registerLink(\n { __apiName: \"Employee\", __primaryKey: 1 },\n \"peeps\",\n { __apiName: \"Employee\", __primaryKey: 4 },\n \"lead\",\n );\n\n const observableClient: ObservableClient = new ObservableClientImpl(\n cache,\n );\n\n const { payload: emp1Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 1,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n const { payload: emp2Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 2,\n });\n const emp2 = emp2Payload?.object;\n invariant(emp2);\n\n const linkSubFn = mockLinkSubCallback();\n\n // emp1 has 2 peeps but pageSize=1, so emp1's query has hasMore=true.\n // emp2 has 0 peeps, so its query finishes immediately.\n defer(\n observableClient.observeLinks(\n [emp1, emp2],\n \"peeps\",\n { linkName: \"peeps\", pageSize: 1 },\n // @ts-expect-error crossing typed/untyped barrier for test\n linkSubFn as unknown as Observer<SpecificLinkPayload>,\n ),\n );\n\n await waitForLoaded(linkSubFn);\n const lastPayload = getLastPayload(linkSubFn);\n\n expect(lastPayload.hasMore).toBe(true);\n expect(lastPayload.totalCount).toBeUndefined();\n });\n\n it(\"single object fast path still works\", async () => {\n const observableClient: ObservableClient = new ObservableClientImpl(\n cache,\n );\n\n const { payload: emp1Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 1,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n const linkSubFn = mockLinkSubCallback();\n\n defer(\n observableClient.observeLinks(\n emp1,\n \"officeLink\",\n { linkName: \"officeLink\" },\n // @ts-expect-error crossing typed/untyped barrier for test\n linkSubFn as unknown as Observer<SpecificLinkPayload>,\n ),\n );\n\n await waitForCall(linkSubFn);\n expectSingleLinkCallAndClear(linkSubFn, [], { status: \"loading\" });\n\n await waitForCall(linkSubFn);\n expectSingleLinkCallAndClear(\n linkSubFn,\n [expect.objectContaining({ $primaryKey: \"101\" })],\n { status: \"loaded\" },\n );\n });\n });\n\n it(\"observeLinks correctly constructs query for interface instances\", async () => {\n const { payload: emp1Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 1,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n const fooInterfaceInstance = emp1.$as(FooInterface);\n\n expect(fooInterfaceInstance.$apiName).toBe(\"FooInterface\");\n expect(fooInterfaceInstance.$objectType).toBe(\"Employee\");\n\n const linkSubFn = mockLinkSubCallback();\n\n const subscription = cache.links.observe({\n linkName: \"toBar\",\n srcType: { type: \"interface\", apiName: fooInterfaceInstance.$apiName },\n sourceUnderlyingObjectType: fooInterfaceInstance.$objectType,\n pk: fooInterfaceInstance.$primaryKey,\n }, linkSubFn);\n\n await waitForCall(linkSubFn);\n expect(linkSubFn.next).toHaveBeenCalled();\n\n subscription.unsubscribe();\n\n testStage(\"Interface link query construction verified\");\n });\n\n it(\"invalidateObjectType correctly invalidates interface link queries when object implements source interface\", async () => {\n const { payload: emp1Payload } = await expectStandardObserveObject({\n cache,\n type: Employee,\n primaryKey: 1,\n });\n const emp1 = emp1Payload?.object;\n invariant(emp1);\n\n const fooInterfaceInstance = emp1.$as(FooInterface);\n const linkSubFn = mockLinkSubCallback();\n\n const subscription = cache.links.observe({\n linkName: \"toBar\",\n srcType: { type: \"interface\", apiName: fooInterfaceInstance.$apiName },\n sourceUnderlyingObjectType: fooInterfaceInstance.$objectType,\n pk: fooInterfaceInstance.$primaryKey,\n }, linkSubFn);\n\n await waitForCall(linkSubFn);\n linkSubFn.next.mockClear();\n\n await cache.invalidateObjectType(Employee, undefined);\n\n await waitForCall(linkSubFn);\n expect(linkSubFn.next).toHaveBeenCalled();\n\n subscription.unsubscribe();\n testStage(\n \"Interface link invalidation via implementing object type verified\",\n );\n });\n });\n\n describe(\"with mock server\", () => {\n let client: Client;\n let cache: Store;\n let cacheKeys: CacheKeys<KnownCacheKey>;\n\n let employeesAsServerReturns: Osdk.Instance<Employee>[];\n let mutatedEmployees: Osdk.Instance<Employee>[];\n\n beforeAll(async () => {\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\"),\n createClient,\n { logger },\n );\n ({ client } = testSetup);\n\n setupOntology(testSetup.fauxFoundry);\n setupSomeEmployees(testSetup.fauxFoundry);\n\n employeesAsServerReturns = (await client(Employee).fetchPage({\n $includeRid: true,\n })).data;\n mutatedEmployees = [\n employeesAsServerReturns[0],\n employeesAsServerReturns[1].$clone({\n fullName: \"foo\",\n }),\n ...employeesAsServerReturns.slice(2),\n ];\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n cache = new Store(client);\n cacheKeys = cache.cacheKeys;\n\n return () => {\n cache = undefined!;\n };\n });\n\n it(\"basic single object works\", async () => {\n const emp = employeesAsServerReturns[0];\n\n const cacheKey = cacheKeys.get<ObjectCacheKey>(\n \"object\",\n \"Employee\",\n emp.$primaryKey,\n );\n\n // starts empty\n expect(\n cache.getValue(cacheKey)?.value,\n ).toBeUndefined();\n\n const result = updateObject(cache, emp);\n expect(emp).toBe(result);\n\n // getting the object now matches the result\n expect(cache.getValue(cacheKey)?.value).toEqual(\n result,\n );\n\n const updatedEmpFromCache = updateObject(\n cache,\n emp.$clone({ fullName: \"new name\" }),\n );\n expect(updatedEmpFromCache).not.toBe(emp);\n\n // getting it again is the updated object\n expect(cache.getValue(cacheKey)?.value).toEqual(\n updatedEmpFromCache,\n );\n });\n\n describe(\"optimistic updates\", () => {\n it(\"rolls back objects\", async () => {\n const emp = employeesAsServerReturns[0];\n updateObject(cache, emp); // pre-seed the cache with the \"real\" value\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n const optimisticId = createOptimisticId();\n // update with an optimistic write\n updateObject(cache, emp.$clone({ fullName: \"new name\" }), {\n optimisticId,\n });\n expectSingleObjectCallAndClear(\n subFn,\n emp.$clone({ fullName: \"new name\" }),\n \"loaded\",\n );\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n });\n\n it(\"rolls back to an updated real value\", async () => {\n // pre-seed the cache with the \"real\" value\n updateList(cache, {\n type: Employee,\n where: {},\n orderBy: {},\n }, employeesAsServerReturns);\n\n const emp = employeesAsServerReturns[0];\n\n const empSubFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, empSubFn),\n );\n\n expectSingleObjectCallAndClear(empSubFn, emp, \"loaded\");\n\n const listSubFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, listSubFn),\n );\n\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(listSubFn, employeesAsServerReturns);\n\n const optimisticEmployee = emp.$clone({ fullName: \"new name\" });\n\n const optimisticId = createOptimisticId();\n\n testStage(\"optimistic update\");\n expect(listSubFn.next).not.toHaveBeenCalled();\n\n // update with an optimistic write\n updateObject(cache, optimisticEmployee, {\n optimisticId,\n });\n\n testStage(\"after optimistic update\");\n\n // expect optimistic write\n expectSingleObjectCallAndClear(empSubFn, optimisticEmployee);\n\n // expect optimistic write to the list\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(\n listSubFn,\n [\n optimisticEmployee,\n ...employeesAsServerReturns.slice(1),\n ],\n {\n isOptimistic: true,\n status: \"loading\",\n },\n );\n\n // write the real update, via the earlier list definition\n const truthUpdatedEmployee = emp.$clone({\n fullName: \"real update\",\n });\n\n testStage(\"write real update\");\n\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n truthUpdatedEmployee,\n ]);\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n // see the object observation get updated\n expectSingleObjectCallAndClear(\n empSubFn,\n truthUpdatedEmployee,\n \"loaded\",\n );\n\n // see the list get updated\n await waitForCall(listSubFn, 1);\n expectSingleListCallAndClear(listSubFn, [truthUpdatedEmployee], {\n status: \"loaded\",\n isOptimistic: false,\n });\n });\n\n it(\"rolls back to an updated real value via list\", async () => {\n const emp = employeesAsServerReturns[0];\n updateObject(cache, emp); // pre-seed the cache with the \"real\" value\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n const optimisticEmployee = emp.$clone({ fullName: \"new name\" });\n\n // update with an optimistic write\n const optimisticId = createOptimisticId();\n updateObject(cache, optimisticEmployee, {\n optimisticId,\n });\n expectSingleObjectCallAndClear(subFn, optimisticEmployee);\n\n const truthUpdatedEmployee = emp.$clone({\n fullName: \"real update\",\n });\n updateObject(cache, truthUpdatedEmployee);\n\n // we shouldn't expect an update because the top layer has a value\n expect(subFn.next).not.toHaveBeenCalled();\n\n // remove the optimistic write\n cache.layers.remove(optimisticId);\n\n expectSingleObjectCallAndClear(subFn, truthUpdatedEmployee);\n expectNoMoreCalls(subFn);\n });\n\n describe(\"object deletes\", () => {\n it(\"it properly updates the list\", async () => {\n const emp = employeesAsServerReturns[0];\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n emp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, emp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [emp],\n { status: \"loaded\" },\n );\n\n const cacheKey = cacheKeys.get<ObjectCacheKey>(\n \"object\",\n emp.$apiName,\n emp.$primaryKey,\n );\n\n // Actual test is here, prior to this is setup\n testStage(\"delete the object\");\n\n cache.batch({\n optimisticId: createOptimisticId(),\n }, (batch) => {\n batch.changes.deleteObject(cacheKey);\n batch.delete(cacheKey, \"loading\");\n });\n\n expectSingleObjectCallAndClear(subFn, undefined);\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [],\n { isOptimistic: true, status: \"loading\" },\n );\n });\n });\n });\n\n describe(\".invalidateObject\", () => {\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateObject(cache, staleEmp);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, staleEmp, \"loaded\");\n\n // invalidate\n void cache.invalidateObject(Employee, staleEmp.$primaryKey);\n\n await waitForCall(subFn);\n expectSingleObjectCallAndClear(subFn, staleEmp, \"loading\");\n\n await waitForCall(subFn);\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n expectNoMoreCalls(subFn);\n });\n });\n\n describe(\".invalidateList\", () => {\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n staleEmp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loaded\" },\n );\n\n testStage(\"invalidate\");\n\n const invalidateListPromise = invalidateList(cache, { type: Employee });\n testStage(\"check invalidate\");\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loading\" },\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n employeesAsServerReturns,\n { status: \"loaded\" },\n );\n\n await waitForCall(subFn, 1);\n expectSingleObjectCallAndClear(subFn, emp, \"loaded\");\n\n // don't leave promises dangling\n await invalidateListPromise;\n });\n });\n\n describe(\".invalidateObjectType\", () => {\n beforeEach(() => {\n vi.useFakeTimers({});\n });\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it(\"triggers an update\", async () => {\n const emp = employeesAsServerReturns[0];\n const staleEmp = emp.$clone({ fullName: \"stale\" });\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n staleEmp,\n ]);\n\n const subFn = mockSingleSubCallback();\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: emp.$primaryKey,\n mode: \"offline\",\n }, subFn),\n );\n expectSingleObjectCallAndClear(subFn, staleEmp);\n\n const subListFn = mockListSubCallback();\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, subListFn),\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(\n subListFn,\n [staleEmp],\n { status: \"loaded\" },\n );\n\n testStage(\"invalidate\");\n\n const pInvalidateComplete = cache.invalidateObjectType(\n Employee,\n undefined,\n );\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(subListFn, [staleEmp], {\n status: \"loading\",\n });\n\n await waitForCall(subListFn, 1);\n expectSingleListCallAndClear(subListFn, employeesAsServerReturns);\n\n testStage(\"Check invalidation call for single sub\");\n\n await waitForCall(subFn, 2);\n // First call is for loading state\n expect(subFn.next).toHaveBeenNthCalledWith(\n 1,\n objectPayloadContaining({\n status: \"loading\",\n object: staleEmp as unknown as ObjectHolder,\n }),\n );\n // Second call is for loaded state with fresh data\n expect(subFn.next).toHaveBeenNthCalledWith(\n 2,\n objectPayloadContaining({\n status: \"loaded\",\n object: emp as unknown as ObjectHolder,\n }),\n );\n subFn.next.mockClear();\n\n // we don't need this value to control the test but we want to make sure we don't have\n // any unhandled exceptions upon test completion\n await pInvalidateComplete;\n });\n });\n\n describe(\".observeObject (force)\", () => {\n const subFn1 = mockSingleSubCallback();\n const subFn2 = mockSingleSubCallback();\n\n beforeEach(async () => {\n subFn1.complete.mockClear();\n subFn1.next.mockClear();\n subFn1.error.mockClear();\n\n subFn2.complete.mockClear();\n subFn2.next.mockClear();\n subFn2.error.mockClear();\n });\n\n const likeEmployee50030 = expect.objectContaining({\n $primaryKey: JOHN_DOE_ID,\n fullName: \"John Doe\",\n });\n\n it(\"fetches and updates twice\", async () => {\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"force\",\n }, subFn1),\n );\n\n expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n isOptimistic: false,\n }),\n );\n\n subFn1.next.mockClear();\n\n await waitForCall(subFn1);\n expect(subFn1.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n object: likeEmployee50030,\n isOptimistic: false,\n }),\n );\n\n const firstLoad = subFn1.next.mock.lastCall?.[0]!;\n\n subFn1.next.mockClear();\n\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"force\",\n }, subFn2),\n );\n expectSingleObjectCallAndClear(subFn1, likeEmployee50030, \"loading\");\n\n // should be the earlier results\n expectSingleObjectCallAndClear(subFn2, likeEmployee50030, \"loading\");\n\n // both will be updated\n for (const s of [subFn1, subFn2]) {\n // wait for the result to come in\n await waitForCall(s, 1);\n expect(s.next).toHaveBeenCalledExactlyOnceWith(\n objectPayloadContaining({\n ...firstLoad,\n lastUpdated: expect.toBeGreaterThan(firstLoad.lastUpdated),\n }),\n );\n\n s.next.mockClear();\n }\n });\n });\n\n describe(\".observeObject (offline)\", () => {\n const subFn = mockSingleSubCallback();\n let sub: Unsubscribable;\n\n beforeEach(() => {\n subFn.complete.mockClear();\n subFn.next.mockClear();\n subFn.error.mockClear();\n\n sub = defer(\n cache.objects.observe({\n apiName: Employee,\n pk: JOHN_DOE_ID,\n mode: \"offline\",\n }, subFn),\n );\n\n expectSingleObjectCallAndClear(subFn, undefined!, \"init\");\n });\n\n it(\"does basic observation and unsubscribe\", async () => {\n const emp = employeesAsServerReturns.find(x =>\n x.$primaryKey === JOHN_DOE_ID\n )!;\n\n // force an update\n updateObject(cache, emp);\n expectSingleObjectCallAndClear(subFn, emp);\n\n // force again\n updateObject(cache, emp.$clone({ fullName: \"new name\" }));\n expectSingleObjectCallAndClear(\n subFn,\n emp.$clone({ fullName: \"new name\" }),\n );\n\n sub.unsubscribe();\n\n // force again but no subscription update\n updateObject(cache, emp.$clone({ fullName: \"new name 2\" }));\n expect(subFn.next).not.toHaveBeenCalled();\n });\n\n it(\"observes with list update\", async () => {\n const emp = employeesAsServerReturns.find(x =>\n x.$primaryKey === JOHN_DOE_ID\n )!;\n\n // force an update\n updateObject(cache, emp.$clone({ fullName: \"not the name\" }));\n expect(subFn.next).toHaveBeenCalledTimes(1);\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n expect(subFn.next).toHaveBeenCalledTimes(2);\n\n expect(subFn.next.mock.calls[1][0]).toEqual(\n objectPayloadContaining({\n object: emp as unknown as ObjectHolder<typeof emp>,\n }),\n );\n });\n });\n\n describe(\".lists.observe\", () => {\n const listSub1 = mockListSubCallback();\n const ifaceSub = mockListSubCallback();\n\n beforeEach(() => {\n vi.mocked(listSub1.next).mockReset();\n vi.mocked(listSub1.error).mockReset();\n vi.mocked(listSub1.complete).mockReset();\n\n vi.mocked(ifaceSub.next).mockReset();\n vi.mocked(ifaceSub.error).mockReset();\n vi.mocked(ifaceSub.complete).mockReset();\n });\n\n describe(\"mode=force\", () => {\n it(\"initial load\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n\n orderBy: {},\n mode: \"force\",\n }, listSub1),\n );\n\n defer(\n cache.lists.observe({\n type: FooInterface,\n\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n\n await waitForCall(listSub1);\n await waitForCall(ifaceSub);\n\n expectSingleListCallAndClear(\n listSub1,\n [],\n { status: \"loading\" },\n );\n\n expectSingleListCallAndClear(\n ifaceSub,\n [],\n { status: \"loading\" },\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(\n listSub1,\n employeesAsServerReturns,\n {\n status: \"loaded\",\n },\n );\n\n await waitForCall(ifaceSub);\n expectSingleListCallAndClear(\n ifaceSub,\n employeesAsServerReturns.map(e =>\n expect.objectContaining({\n $apiName: \"FooInterface\",\n $objectType: \"Employee\",\n $primaryKey: e.$primaryKey,\n })\n ),\n {\n status: \"loaded\",\n },\n );\n\n expectNoMoreCalls(listSub1);\n expectNoMoreCalls(ifaceSub);\n\n expect(listSub1.next).not.toHaveBeenCalled();\n expect(listSub1.error).not.toHaveBeenCalled();\n expect(ifaceSub.next).not.toHaveBeenCalled();\n expect(ifaceSub.error).not.toHaveBeenCalled();\n });\n\n it(\"cache stores raw objects when loading via interface\", async () => {\n defer(\n cache.lists.observe({\n type: FooInterface,\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n await waitForCall(ifaceSub, 2);\n\n const pk = employeesAsServerReturns[0].$primaryKey as number;\n const cached = getObject(cache, \"Employee\", pk);\n expect(cached?.$apiName).toBe(\"Employee\");\n expect(cached?.$objectType).toBe(\"Employee\");\n });\n\n it(\"interface queries return interface view while cache stores raw object\", async () => {\n defer(\n cache.lists.observe({\n type: FooInterface,\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n await waitForCall(ifaceSub, 2);\n\n const ifacePayload = ifaceSub.next.mock.calls[1][0];\n expect(ifacePayload?.resolvedList?.[0]?.$apiName).toBe(\n \"FooInterface\",\n );\n expect(ifacePayload?.resolvedList?.[0]?.$objectType).toBe(\"Employee\");\n\n const pk = employeesAsServerReturns[0].$primaryKey as number;\n const cached = getObject(cache, \"Employee\", pk);\n expect(cached?.$apiName).toBe(\"Employee\");\n });\n\n it(\"direct query after interface query preserves interface $apiName\", async () => {\n const objSub = mockSingleSubCallback();\n\n defer(\n cache.lists.observe({\n type: FooInterface,\n orderBy: {},\n mode: \"force\",\n }, ifaceSub),\n );\n await waitForCall(ifaceSub, 2);\n\n expect(ifaceSub.next.mock.calls[1][0]?.resolvedList?.[0]?.$apiName)\n .toBe(\"FooInterface\");\n\n defer(\n cache.objects.observe({\n apiName: Employee,\n pk: employeesAsServerReturns[0].$primaryKey,\n mode: \"force\",\n }, objSub),\n );\n await waitForCall(objSub, 2);\n\n expect(\n ifaceSub.next.mock.calls.at(-1)?.[0]?.resolvedList?.[0]?.$apiName,\n )\n .toBe(\"FooInterface\");\n });\n\n it(\"subsequent load\", async () => {\n // Pre-seed with data the server doesn't return\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n mutatedEmployees,\n );\n\n defer(\n cache.lists.observe({\n type: Employee,\n mode: \"force\",\n }, listSub1),\n );\n\n await waitForCall(listSub1, 1);\n const firstLoad = listSub1.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(listSub1, mutatedEmployees, {\n status: \"loading\",\n });\n\n await waitForCall(listSub1, 1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns, {\n status: \"loaded\",\n lastUpdated: expect.toBeGreaterThan(\n firstLoad.lastUpdated,\n ),\n });\n });\n });\n\n describe(\"mode = offline\", () => {\n it(\"updates with list updates\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, listSub1),\n );\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns);\n\n // list is just now one object\n updateList(cache, { type: Employee, where: {}, orderBy: {} }, [\n employeesAsServerReturns[0],\n ]);\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, [employeesAsServerReturns[0]]);\n });\n\n it(\"updates with different list updates\", async () => {\n defer(\n cache.lists.observe({\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"offline\",\n }, listSub1),\n );\n\n updateList(\n cache,\n { type: Employee, where: {}, orderBy: {} },\n employeesAsServerReturns,\n );\n\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, employeesAsServerReturns);\n\n // new where === different list\n updateList(cache, {\n type: Employee,\n where: { employeeId: { $gt: 0 } },\n orderBy: {},\n }, mutatedEmployees);\n\n // original list updates still\n await waitForCall(listSub1);\n expectSingleListCallAndClear(listSub1, mutatedEmployees);\n });\n });\n });\n\n describe(\".fetchMore\", () => {\n beforeEach(() => {\n vi.useFakeTimers({});\n });\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it(\"works in the solo case\", async () => {\n const listSub = mockListSubCallback();\n defer(cache.lists.observe(\n {\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"force\",\n pageSize: 1,\n },\n listSub,\n ));\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(listSub, [], { status: \"loading\" });\n\n await waitForCall(listSub, 1);\n const { fetchMore } = listSub.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loaded\" },\n );\n });\n\n it(\"handles multiple sequential fetchMore calls\", async () => {\n const listSub = mockListSubCallback();\n defer(cache.lists.observe(\n {\n type: Employee,\n where: {},\n orderBy: {},\n mode: \"force\",\n pageSize: 1,\n },\n listSub,\n ));\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(listSub, [], { status: \"loading\" });\n\n await waitForCall(listSub, 1);\n let { fetchMore } = listSub.next.mock.calls[0][0]!;\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 1),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n ({ fetchMore } = listSub.next.mock.calls[0][0]!);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 2),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n ({ fetchMore } = listSub.next.mock.calls[0][0]!);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 3),\n { status: \"loaded\" },\n );\n\n void fetchMore();\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 3),\n { status: \"loading\" },\n );\n\n await waitForCall(listSub, 1);\n expectSingleListCallAndClear(\n listSub,\n employeesAsServerReturns.slice(0, 4),\n { status: \"loaded\" },\n );\n });\n });\n });\n\n describe(\"with mock client\", () => {\n let client: Client;\n let apiServer: SetupServer;\n let fauxFoundry: FauxFoundry;\n let store: Store;\n\n beforeAll(async () => {\n const testSetup = startNodeApiServer(\n new FauxFoundry(\"https://stack.palantir.com/\", undefined, { logger }),\n createClient,\n { logger },\n );\n ({ client, apiServer, fauxFoundry } = testSetup);\n\n setupOntology(testSetup.fauxFoundry);\n\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n beforeEach(() => {\n apiServer.resetHandlers();\n });\n\n beforeEach(async () => {\n store = new Store(client);\n });\n\n it(\"properly fires error handler for a list\", async () => {\n const sub = mockListSubCallback();\n\n // ignores unhandled rejection, like one we will get from fire-and-forget metadata call\n process.on(\"unhandledRejection\", () => {});\n\n store.lists.observe({\n type: { apiName: \"notReal\", type: \"object\" },\n orderBy: {},\n }, sub);\n\n await waitForCall(sub.next);\n\n // initial loading state\n expect(sub.next).toHaveBeenCalledOnce();\n expectSingleListCallAndClear(sub, [], { status: \"loading\" });\n\n await waitForCall(sub.error);\n expect(sub.error).toHaveBeenCalledOnce();\n expect(sub.next).not.toHaveBeenCalled();\n });\n\n describe(\"batching\", () => {\n it(\"groups requests for single objects\", async () => {\n fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 0,\n });\n fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 1,\n });\n\n const a = mockSingleSubCallback();\n const b = mockSingleSubCallback();\n\n defer(store.objects.observe({\n apiName: Employee,\n pk: 0,\n }, a));\n defer(store.objects.observe({\n apiName: Employee,\n pk: 1,\n }, b));\n\n await a.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 0,\n }),\n }),\n });\n await b.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 1,\n }),\n }),\n });\n });\n });\n\n describe(\"actions\", () => {\n beforeEach(() => {\n fauxFoundry.getDefaultDataStore().clear();\n });\n\n it(\"properly invalidates objects\", async () => {\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id: 0,\n text: \"og title\",\n });\n\n const todoSubFn = mockSingleSubCallback();\n\n defer(store.objects.observe({\n apiName: Todo,\n pk: 0,\n }, todoSubFn));\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n $primaryKey: 0,\n }),\n }),\n });\n\n // at this point we have an observation properly set up\n await store.applyAction(editTodo, {\n id: 0,\n text: \"hello there kind sir\",\n });\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n }),\n loaded: objectPayloadContaining({\n object: expect.objectContaining({\n text: \"hello there kind sir\",\n }),\n }),\n });\n });\n\n it(\"rolls back optimistic updates on error\", async () => {\n const fauxObject = expect.objectContaining({\n id: 0,\n text: \"does not matter\",\n });\n\n // set the object in the \"backend\"\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id: 0,\n text: \"does not matter\",\n });\n\n const todoSubFn = mockSingleSubCallback();\n defer(\n store.objects.observe({\n apiName: Todo,\n pk: 0,\n }, todoSubFn),\n );\n\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: undefined,\n isOptimistic: false,\n }),\n loaded: objectPayloadContaining({\n object: fauxObject,\n status: \"loaded\",\n isOptimistic: false,\n }),\n });\n\n const object: Osdk.Instance<Todo> | undefined = store.getValue(\n store.cacheKeys.get<ObjectCacheKey>(\"object\", \"Todo\", 0),\n )?.value as any;\n invariant(object);\n\n // at this point we have an observation properly set up\n await expect(\n store.applyAction(editTodo, {\n id: \"not an id that exists\",\n } as any, {\n optimisticUpdate: (ctx) => {\n ctx.updateObject(object.$clone({ text: \"optimistic\" }));\n },\n }),\n ).rejects.toThrow(ActionValidationError);\n\n await waitForCall(todoSubFn, 2);\n await todoSubFn.expectLoadingAndLoaded({\n loading: objectPayloadContaining({\n status: \"loading\",\n object: expect.objectContaining({\n id: 0,\n text: \"optimistic\",\n }),\n isOptimistic: true,\n }),\n loaded: objectPayloadContaining({\n object: fauxObject,\n status: \"loaded\",\n isOptimistic: false,\n }),\n });\n });\n });\n\n describe(\"orderBy\", async () => {\n let nextPk = 0;\n\n let fauxObjectA: Osdk.Instance<Todo>;\n let fauxObjectB: Osdk.Instance<Todo>;\n let fauxObjectC: Osdk.Instance<Todo>;\n\n beforeAll(async () => {\n fauxFoundry.getDefaultDataStore().clear();\n [fauxObjectA, fauxObjectB, fauxObjectC] = await Promise.all(\n ([\"a\", \"b\", \"c\"] as const).map(text => {\n const id = nextPk++;\n\n fauxFoundry.getDefaultDataStore().registerObject(Todo, {\n $apiName: \"Todo\",\n id,\n text,\n });\n\n return client(Todo).fetchOne(id, { $includeRid: true });\n }),\n );\n });\n\n const noWhereNoOrderBy = {\n type: Todo,\n where: {},\n orderBy: {},\n } satisfies ObserveListOptions<Todo>;\n\n const noWhereOrderByText = {\n type: Todo,\n where: {},\n orderBy: {\n text: \"asc\",\n },\n } satisfies ObserveListOptions<Todo>;\n\n let subListUnordered = mockListSubCallback();\n let subListOrdered = mockListSubCallback();\n\n beforeEach(async () => {\n subListUnordered = mockListSubCallback();\n subListOrdered = mockListSubCallback();\n defer(\n store.lists.observe({\n ...noWhereNoOrderBy,\n mode: \"offline\",\n }, subListUnordered),\n );\n await waitForCall(subListUnordered);\n expectSingleListCallAndClear(subListUnordered, [], { status: \"init\" });\n\n defer(\n store.lists.observe({\n ...noWhereOrderByText,\n mode: \"offline\",\n }, subListOrdered),\n );\n await waitForCall(subListOrdered);\n expectSingleListCallAndClear(subListOrdered, [], { status: \"init\" });\n });\n\n it(\"invalidates the correct lists\", async () => {\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n );\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n );\n\n // For whatever reason, object B is no longer in the first set (use your imagination)\n // but we have added a C before A. So the first list is [C, A]\n updateList(store, { type: Todo, where: {}, orderBy: {} }, [\n fauxObjectC,\n fauxObjectA,\n ]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectC, fauxObjectA],\n );\n\n // Nothing told the system that B was deleted so we can presume it still exists\n // and therefore the second list is now [A, B, C]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB, fauxObjectC],\n );\n });\n\n it(\"produces proper results with optimistic updates and successful action\", async () => {\n const optimisticallyMutatedA = fauxObjectA.$clone({\n text: \"optimistic\",\n });\n const pkForOptimistic = nextPk++;\n const optimisticallyCreatedObjectD = expect.objectContaining({\n \"text\": \"d\",\n id: pkForOptimistic,\n });\n\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n );\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n );\n\n testStage(\"Start\");\n\n // Perform something optimistic.\n const removeOptimisticResult = runOptimisticJob(store, (b) => {\n b.createObject(Todo, pkForOptimistic, {\n id: pkForOptimistic,\n text: \"d\",\n });\n b.updateObject(optimisticallyMutatedA as Osdk.Instance<any>);\n });\n\n // The first list is now [B, A, optimistic]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [\n fauxObjectB,\n optimisticallyMutatedA, // same position, new values\n optimisticallyCreatedObjectD,\n ],\n { isOptimistic: true },\n );\n\n // the second list is now [A, B, optimistic]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [\n fauxObjectB,\n optimisticallyCreatedObjectD,\n optimisticallyMutatedA,\n ],\n { isOptimistic: true },\n );\n\n // Roll back the optimistic update\n await removeOptimisticResult();\n\n // The first list is now [B, A]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(\n subListUnordered,\n [fauxObjectB, fauxObjectA],\n { isOptimistic: false },\n );\n\n // the second list is now [A, B]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [fauxObjectA, fauxObjectB],\n { isOptimistic: false },\n );\n });\n // I think these are named backwards\n it(\"produces proper results with optimistic updates and rollback\", async () => {\n const pkForOptimistic = nextPk++;\n const optimisticallyCreatedObjectD = expect.objectContaining({\n \"$primaryKey\": pkForOptimistic,\n \"$title\": undefined, // FIXME once this is calculated by optimistic then this needs to be the right value\n \"text\": \"d optimistic\",\n id: pkForOptimistic,\n });\n const optimisticallyMutatedA = fauxObjectA.$clone({\n text: \"optimistic\",\n });\n\n testStage(\"Initial Setup\");\n\n // for whatever reason, the first list is loaded as [B, A]\n updateList(store, noWhereNoOrderBy, [fauxObjectB, fauxObjectA]);\n\n await waitForCall(subListUnordered, 1);\n\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n fauxObjectA,\n ]);\n\n // The other list definitely matches on the where clause and we can insert\n // orderBy properly. So this is [A, B]\n expectSingleListCallAndClear(subListOrdered, [\n fauxObjectA,\n fauxObjectB,\n ]);\n\n testStage(\"Optimistic Creation\");\n\n // create the weirdest action ever. It always creates a Todo with\n // a new primary key and the text \"d\" and updates A\n const {\n actionDefinition: crazyAction,\n actionTypeV2: crazyActionTypeV2,\n } = TypeHelpers.actionTypeBuilder(\"asdf\")\n .addParameter(\"foo\", \"string\")\n .build();\n\n fauxFoundry.getDefaultOntology().registerActionType(\n crazyActionTypeV2,\n (batch, params) => {\n const idForD = nextPk++;\n\n batch.addObject(Todo.apiName, idForD, {\n id: idForD,\n text: \"d\",\n });\n\n batch.modifyObject(fauxObjectA.$apiName, fauxObjectA.$primaryKey, {\n text: \"a prime\",\n $title: \"a prime\", // FIXME we shouldn't have to set this, it can be calculated\n });\n },\n );\n\n // the optimistic job will call createObject which triggers the `objectFactory2` of the\n // cache context.\n\n // Perform something optimistic.\n const pActionResult = store.applyAction<typeof crazyAction>(\n crazyAction,\n {},\n {\n optimisticUpdate: (b) => {\n b.createObject(Todo, pkForOptimistic, {\n id: pkForOptimistic,\n text: \"d optimistic\",\n });\n b.updateObject(optimisticallyMutatedA);\n },\n },\n );\n\n testStage(\"Optimistic Updates\");\n\n // The first list is now [B, A, optimistic]\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n optimisticallyMutatedA, // same position, new values\n optimisticallyCreatedObjectD,\n ], { isOptimistic: true });\n\n // the second list is now [B, optimistic, optimistic a]\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(subListOrdered, [\n fauxObjectB,\n optimisticallyCreatedObjectD,\n optimisticallyMutatedA,\n ], { isOptimistic: true });\n\n testStage(\"Resolve Action\");\n\n const modifiedObjectA = fauxObjectA.$clone({\n text: \"a prime\",\n });\n\n const pkForD = (await pActionResult).addedObjects?.[0].primaryKey;\n invariant(typeof pkForD === \"number\");\n // load this without the cache for comparisons\n const createdObjectD = await client(Todo).fetchOne(pkForD, {\n $includeRid: true,\n });\n\n await waitForCall(subListUnordered, 1);\n expectSingleListCallAndClear(subListUnordered, [\n fauxObjectB,\n modifiedObjectA,\n createdObjectD,\n ], { isOptimistic: false });\n\n await waitForCall(subListOrdered, 1);\n expectSingleListCallAndClear(\n subListOrdered,\n [modifiedObjectA, fauxObjectB, createdObjectD],\n { isOptimistic: false },\n );\n });\n });\n\n it(\"works with pivotTo and orderBy on objectSets\", async () => {\n fauxFoundry.getDefaultDataStore().clear();\n\n const officeA = fauxFoundry.getDefaultDataStore().registerObject(Office, {\n $apiName: \"Office\",\n officeId: \"office-a\",\n name: \"Zebra Office\",\n });\n const officeB = fauxFoundry.getDefaultDataStore().registerObject(Office, {\n $apiName: \"Office\",\n officeId: \"office-b\",\n name: \"Alpha Office\",\n });\n\n const emp1 = fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 1,\n fullName: \"Test Employee\",\n });\n const emp2 = fauxFoundry.getDefaultDataStore().registerObject(Employee, {\n $apiName: \"Employee\",\n employeeId: 2,\n fullName: \"Test Employee 2\",\n });\n\n fauxFoundry.getDefaultDataStore().registerLink(\n emp1,\n \"officeLink\",\n officeA,\n \"occupants\",\n );\n fauxFoundry.getDefaultDataStore().registerLink(\n emp2,\n \"officeLink\",\n officeB,\n \"occupants\",\n );\n\n const sub = mockObserver<ObjectSetPayload | undefined>();\n defer(\n store.objectSets.observe({\n baseObjectSet: client(Employee).pivotTo(\"officeLink\"),\n orderBy: { name: \"asc\" },\n }, sub),\n );\n\n await vi.waitFor(\n () => {\n expect(sub.next).toHaveBeenLastCalledWith(\n expect.objectContaining({\n status: \"loaded\",\n }),\n );\n },\n { timeout: 5000 },\n );\n\n expect(sub.next).toHaveBeenLastCalledWith(\n expect.objectContaining({\n status: \"loaded\",\n resolvedList: [\n expect.objectContaining({ name: \"Alpha Office\" }),\n expect.objectContaining({ name: \"Zebra Office\" }),\n ],\n }),\n );\n\n expect(sub.error).not.toHaveBeenCalled();\n });\n });\n\n describe(\"layers\", () => {\n it(\"properly remove\", () => {\n const clientHelper = createClientMockHelper();\n const store = new Store(clientHelper.client);\n\n const baseObjects = [1, 2].map((i) => ({\n $primaryKey: i,\n $objectType: \"Employee\",\n $apiName: \"Employee\",\n $title: `truth ${i}`,\n } as Osdk.Instance<Employee> & ObjectHolder<Osdk.Instance<Employee>>));\n\n const cacheKeys = baseObjects.map((obj) =>\n store.cacheKeys.get(\"object\", \"Employee\", obj.$primaryKey)\n );\n\n // set the truth\n for (const obj of baseObjects) {\n updateObject(store, obj);\n }\n\n // expect the truth\n for (const obj of baseObjects) {\n expect(getObject(store, \"Employee\", obj.$primaryKey)).toEqual(\n expect.objectContaining({ $title: `truth ${obj.$primaryKey}` }),\n );\n }\n\n const layerIds = [1, 2].map(createOptimisticId);\n\n // optimistically set the objects in their own layers\n for (let i = 0; i < 2; i++) {\n store.batch({ optimisticId: layerIds[i] }, (batch) => {\n batch.write(\n cacheKeys[i],\n {\n ...baseObjects[i],\n $title: `optimistic ${baseObjects[i].$primaryKey}`,\n },\n \"loading\",\n );\n });\n }\n\n // expect the optimistic values\n for (let i = 0; i < 2; i++) {\n expect(getObject(store, \"Employee\", baseObjects[i].$primaryKey))\n .toEqual(\n expect.objectContaining({\n $title: `optimistic ${baseObjects[i].$primaryKey}`,\n }),\n );\n }\n\n // remove the first layer\n store.layers.remove(layerIds[0]);\n\n // should have truth object 1 and optimistic object 2\n expect(getObject(store, \"Employee\", 1)).toEqual(\n expect.objectContaining({ $title: \"truth 1\" }),\n );\n expect(getObject(store, \"Employee\", 2)).toEqual(\n expect.objectContaining({ $title: \"optimistic 2\" }),\n );\n\n // remove the second layer\n store.layers.remove(layerIds[1]);\n\n // should have truth objects\n for (const obj of baseObjects) {\n expect(getObject(store, \"Employee\", obj.$primaryKey)).toEqual(\n expect.objectContaining({ $title: `truth ${obj.$primaryKey}` }),\n );\n }\n });\n });\n});\n\nexport function asBsoStub(\n x: ObjectHolder<any> | Osdk.Instance<any>,\n): BaseServerObject {\n return {\n __apiName: x.$apiName,\n __primaryKey: x.$primaryKey,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|