@osdk/client 2.5.0-beta.4 → 2.5.0-beta.6
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 +33 -4
- package/build/browser/MinimalClientContext.js.map +1 -1
- package/build/browser/actions/applyAction.js +4 -0
- package/build/browser/actions/applyAction.js.map +1 -1
- package/build/browser/createClient.js +2 -1
- package/build/browser/createClient.js.map +1 -1
- package/build/browser/createMinimalClient.js +2 -1
- package/build/browser/createMinimalClient.js.map +1 -1
- package/build/browser/index.js +2 -0
- package/build/browser/index.js.map +1 -1
- package/build/browser/object/Cache.test.js +1 -1
- package/build/browser/object/Cache.test.js.map +1 -1
- package/build/browser/object/aggregate.js +2 -0
- package/build/browser/object/aggregate.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js +1 -0
- package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +6 -0
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js +20 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.test.js +2 -0
- package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/browser/object/fetchPage.js +5 -2
- package/build/browser/object/fetchPage.js.map +1 -1
- package/build/browser/observable/internal/AbstractHelper.js +4 -3
- package/build/browser/observable/internal/AbstractHelper.js.map +1 -1
- package/build/browser/observable/internal/BatchContext.js +2 -0
- package/build/browser/observable/internal/BatchContext.js.map +1 -0
- package/build/browser/observable/internal/CacheKeys.js +61 -36
- package/build/browser/observable/internal/CacheKeys.js.map +1 -1
- package/build/browser/observable/internal/Changes.js.map +1 -1
- package/build/browser/observable/internal/KnownCacheKey.js.map +1 -1
- package/build/browser/observable/internal/Layer.js +0 -8
- package/build/browser/observable/internal/Layer.js.map +1 -1
- package/build/browser/observable/internal/Layers.js +151 -0
- package/build/browser/observable/internal/Layers.js.map +1 -0
- package/build/browser/observable/internal/ObservableClientImpl.js +3 -1
- package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/browser/observable/internal/OrderByCanonicalizer.js +1 -37
- package/build/browser/observable/internal/OrderByCanonicalizer.js.map +1 -1
- package/build/browser/observable/internal/Queries.js +40 -0
- package/build/browser/observable/internal/Queries.js.map +1 -0
- package/build/browser/observable/internal/Query.js +1 -0
- package/build/browser/observable/internal/Query.js.map +1 -1
- package/build/browser/observable/internal/Store.js +37 -226
- package/build/browser/observable/internal/Store.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +12 -10
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/SubjectPayload.js +2 -0
- package/build/browser/observable/internal/SubjectPayload.js.map +1 -0
- package/build/browser/observable/internal/Subjects.js +55 -0
- package/build/browser/observable/internal/Subjects.js.map +1 -0
- package/build/browser/observable/internal/WeakRefTrie.js +61 -0
- package/build/browser/observable/internal/WeakRefTrie.js.map +1 -0
- package/build/browser/observable/internal/{ActionApplication.js → actions/ActionApplication.js} +2 -2
- package/build/browser/observable/internal/actions/ActionApplication.js.map +1 -0
- package/build/browser/observable/internal/{OptimisticJob.js → actions/OptimisticJob.js} +3 -3
- package/build/browser/observable/internal/actions/OptimisticJob.js.map +1 -0
- package/build/browser/observable/internal/base-list/BaseCollectionQuery.js.map +1 -0
- package/build/browser/observable/internal/base-list/BaseListQuery.js +411 -0
- package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -0
- package/build/{esm/observable/internal → browser/observable/internal/base-list}/createCollectionConnectable.js +2 -2
- package/build/browser/observable/internal/base-list/createCollectionConnectable.js.map +1 -0
- package/build/{esm/observable/internal → browser/observable/internal/base-list}/createCollectionConnectable.test.js +24 -26
- package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -0
- package/build/browser/observable/internal/base-list/removeDuplicates.js.map +1 -0
- package/build/browser/observable/internal/createInitEntry.js +25 -0
- package/build/browser/observable/internal/createInitEntry.js.map +1 -0
- package/build/browser/observable/internal/links/LinksHelper.js +5 -5
- package/build/browser/observable/internal/links/LinksHelper.js.map +1 -1
- package/build/browser/observable/internal/links/SpecificLinkCacheKey.js.map +1 -1
- package/build/browser/observable/internal/links/SpecificLinkQuery.js +1 -1
- package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -1
- package/build/browser/observable/internal/{ListCacheKey.js.map → list/ListCacheKey.js.map} +1 -1
- package/build/browser/observable/internal/{ListQuery.js → list/ListQuery.js} +12 -421
- package/build/browser/observable/internal/list/ListQuery.js.map +1 -0
- package/build/browser/observable/internal/list/ListQueryOptions.js +2 -0
- package/build/browser/observable/internal/list/ListQueryOptions.js.map +1 -0
- package/build/browser/observable/internal/list/ListsHelper.js +6 -6
- package/build/browser/observable/internal/list/ListsHelper.js.map +1 -1
- package/build/browser/observable/internal/object/ObjectCacheKey.js +2 -0
- package/build/browser/observable/internal/object/ObjectCacheKey.js.map +1 -0
- package/build/browser/observable/internal/{ObjectQuery.js → object/ObjectQuery.js} +4 -20
- package/build/browser/observable/internal/object/ObjectQuery.js.map +1 -0
- package/build/browser/observable/internal/object/ObjectsHelper.js +17 -3
- package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -1
- package/build/browser/observable/internal/sorting/SortingStrategy.js.map +1 -1
- package/build/browser/observable/internal/testUtils/invalidateList.js +2 -2
- package/build/browser/observable/internal/testUtils/invalidateList.js.map +1 -1
- package/build/browser/observable/internal/testUtils.js +2 -3
- package/build/browser/observable/internal/testUtils.js.map +1 -1
- package/build/browser/ontology/loadActionMetadata.js +3 -1
- package/build/browser/ontology/loadActionMetadata.js.map +1 -1
- package/build/browser/ontology/loadFullObjectMetadata.js +2 -1
- package/build/browser/ontology/loadFullObjectMetadata.js.map +1 -1
- package/build/browser/ontology/loadInterfaceMetadata.js +2 -1
- package/build/browser/ontology/loadInterfaceMetadata.js.map +1 -1
- package/build/browser/queries/applyQuery.js +3 -3
- package/build/browser/queries/applyQuery.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -2
- package/build/browser/util/extractObjectOrInterfaceType.js +9 -1
- package/build/browser/util/extractObjectOrInterfaceType.js.map +1 -1
- package/build/browser/util/extractObjectOrInterfaceType.test.js +2 -2
- package/build/browser/util/extractObjectOrInterfaceType.test.js.map +1 -1
- package/build/cjs/{chunk-6CBVXAAV.cjs → chunk-4GWXMQZE.cjs} +107 -75
- package/build/cjs/chunk-4GWXMQZE.cjs.map +1 -0
- package/build/cjs/{chunk-QR7IBJPZ.cjs → chunk-5KDG5ZET.cjs} +18 -6
- package/build/cjs/chunk-5KDG5ZET.cjs.map +1 -0
- package/build/cjs/{createClient-BJo8T7Js.d.cts → createClient-mOlFts15.d.cts} +1 -0
- package/build/cjs/index.cjs +7 -7
- 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 +831 -775
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/cjs/public/unstable-do-not-use.d.cts +1 -1
- package/build/esm/MinimalClientContext.js.map +1 -1
- package/build/esm/actions/applyAction.js +4 -0
- package/build/esm/actions/applyAction.js.map +1 -1
- package/build/esm/createClient.js +2 -1
- package/build/esm/createClient.js.map +1 -1
- package/build/esm/createMinimalClient.js +2 -1
- package/build/esm/createMinimalClient.js.map +1 -1
- package/build/esm/index.js +2 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/object/Cache.test.js +1 -1
- package/build/esm/object/Cache.test.js.map +1 -1
- package/build/esm/object/aggregate.js +2 -0
- package/build/esm/object/aggregate.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js +1 -0
- package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +6 -0
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js +20 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.test.js +2 -0
- package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/esm/object/fetchPage.js +5 -2
- package/build/esm/object/fetchPage.js.map +1 -1
- package/build/esm/observable/internal/AbstractHelper.js +4 -3
- package/build/esm/observable/internal/AbstractHelper.js.map +1 -1
- package/build/esm/observable/internal/BatchContext.js +2 -0
- package/build/esm/observable/internal/BatchContext.js.map +1 -0
- package/build/esm/observable/internal/CacheKeys.js +61 -36
- package/build/esm/observable/internal/CacheKeys.js.map +1 -1
- package/build/esm/observable/internal/Changes.js.map +1 -1
- package/build/esm/observable/internal/KnownCacheKey.js.map +1 -1
- package/build/esm/observable/internal/Layer.js +0 -8
- package/build/esm/observable/internal/Layer.js.map +1 -1
- package/build/esm/observable/internal/Layers.js +151 -0
- package/build/esm/observable/internal/Layers.js.map +1 -0
- package/build/esm/observable/internal/ObservableClientImpl.js +3 -1
- package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/esm/observable/internal/OrderByCanonicalizer.js +1 -37
- package/build/esm/observable/internal/OrderByCanonicalizer.js.map +1 -1
- package/build/esm/observable/internal/Queries.js +40 -0
- package/build/esm/observable/internal/Queries.js.map +1 -0
- package/build/esm/observable/internal/Query.js +1 -0
- package/build/esm/observable/internal/Query.js.map +1 -1
- package/build/esm/observable/internal/Store.js +37 -226
- package/build/esm/observable/internal/Store.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +12 -10
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/SubjectPayload.js +2 -0
- package/build/esm/observable/internal/SubjectPayload.js.map +1 -0
- package/build/esm/observable/internal/Subjects.js +55 -0
- package/build/esm/observable/internal/Subjects.js.map +1 -0
- package/build/esm/observable/internal/WeakRefTrie.js +61 -0
- package/build/esm/observable/internal/WeakRefTrie.js.map +1 -0
- package/build/esm/observable/internal/{ActionApplication.js → actions/ActionApplication.js} +2 -2
- package/build/esm/observable/internal/actions/ActionApplication.js.map +1 -0
- package/build/esm/observable/internal/{OptimisticJob.js → actions/OptimisticJob.js} +3 -3
- package/build/esm/observable/internal/actions/OptimisticJob.js.map +1 -0
- package/build/esm/observable/internal/base-list/BaseCollectionQuery.js.map +1 -0
- package/build/esm/observable/internal/base-list/BaseListQuery.js +411 -0
- package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -0
- package/build/{browser/observable/internal → esm/observable/internal/base-list}/createCollectionConnectable.js +2 -2
- package/build/esm/observable/internal/base-list/createCollectionConnectable.js.map +1 -0
- package/build/{browser/observable/internal → esm/observable/internal/base-list}/createCollectionConnectable.test.js +24 -26
- package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -0
- package/build/esm/observable/internal/base-list/removeDuplicates.js.map +1 -0
- package/build/esm/observable/internal/createInitEntry.js +25 -0
- package/build/esm/observable/internal/createInitEntry.js.map +1 -0
- package/build/esm/observable/internal/links/LinksHelper.js +5 -5
- package/build/esm/observable/internal/links/LinksHelper.js.map +1 -1
- package/build/esm/observable/internal/links/SpecificLinkCacheKey.js.map +1 -1
- package/build/esm/observable/internal/links/SpecificLinkQuery.js +1 -1
- package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -1
- package/build/esm/observable/internal/{ListCacheKey.js.map → list/ListCacheKey.js.map} +1 -1
- package/build/esm/observable/internal/{ListQuery.js → list/ListQuery.js} +12 -421
- package/build/esm/observable/internal/list/ListQuery.js.map +1 -0
- package/build/esm/observable/internal/list/ListQueryOptions.js +2 -0
- package/build/esm/observable/internal/list/ListQueryOptions.js.map +1 -0
- package/build/esm/observable/internal/list/ListsHelper.js +6 -6
- package/build/esm/observable/internal/list/ListsHelper.js.map +1 -1
- package/build/esm/observable/internal/object/ObjectCacheKey.js +2 -0
- package/build/esm/observable/internal/object/ObjectCacheKey.js.map +1 -0
- package/build/esm/observable/internal/{ObjectQuery.js → object/ObjectQuery.js} +4 -20
- package/build/esm/observable/internal/object/ObjectQuery.js.map +1 -0
- package/build/esm/observable/internal/object/ObjectsHelper.js +17 -3
- package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -1
- package/build/esm/observable/internal/sorting/SortingStrategy.js.map +1 -1
- package/build/esm/observable/internal/testUtils/invalidateList.js +2 -2
- package/build/esm/observable/internal/testUtils/invalidateList.js.map +1 -1
- package/build/esm/observable/internal/testUtils.js +2 -3
- package/build/esm/observable/internal/testUtils.js.map +1 -1
- package/build/esm/ontology/loadActionMetadata.js +3 -1
- package/build/esm/ontology/loadActionMetadata.js.map +1 -1
- package/build/esm/ontology/loadFullObjectMetadata.js +2 -1
- package/build/esm/ontology/loadFullObjectMetadata.js.map +1 -1
- package/build/esm/ontology/loadInterfaceMetadata.js +2 -1
- package/build/esm/ontology/loadInterfaceMetadata.js.map +1 -1
- package/build/esm/queries/applyQuery.js +3 -3
- package/build/esm/queries/applyQuery.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -2
- package/build/esm/util/extractObjectOrInterfaceType.js +9 -1
- package/build/esm/util/extractObjectOrInterfaceType.js.map +1 -1
- package/build/esm/util/extractObjectOrInterfaceType.test.js +2 -2
- package/build/esm/util/extractObjectOrInterfaceType.test.js.map +1 -1
- package/build/types/MinimalClientContext.d.ts +1 -0
- package/build/types/MinimalClientContext.d.ts.map +1 -1
- package/build/types/actions/applyAction.d.ts.map +1 -1
- package/build/types/createClient.d.ts +1 -0
- package/build/types/createClient.d.ts.map +1 -1
- package/build/types/index.d.ts +1 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/observable/internal/AbstractHelper.d.ts +3 -1
- package/build/types/observable/internal/AbstractHelper.d.ts.map +1 -1
- package/build/types/observable/internal/BatchContext.d.ts +11 -0
- package/build/types/observable/internal/BatchContext.d.ts.map +1 -0
- package/build/types/observable/internal/CacheKeys.d.ts +9 -9
- package/build/types/observable/internal/CacheKeys.d.ts.map +1 -1
- package/build/types/observable/internal/Changes.d.ts +2 -2
- package/build/types/observable/internal/Changes.d.ts.map +1 -1
- package/build/types/observable/internal/KnownCacheKey.d.ts +2 -2
- package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -1
- package/build/types/observable/internal/Layer.d.ts +1 -2
- package/build/types/observable/internal/Layer.d.ts.map +1 -1
- package/build/types/observable/internal/Layers.d.ts +26 -0
- package/build/types/observable/internal/Layers.d.ts.map +1 -0
- package/build/types/observable/internal/OrderByCanonicalizer.d.ts +0 -7
- package/build/types/observable/internal/OrderByCanonicalizer.d.ts.map +1 -1
- package/build/types/observable/internal/Queries.d.ts +9 -0
- package/build/types/observable/internal/Queries.d.ts.map +1 -0
- package/build/types/observable/internal/Query.d.ts +5 -1
- package/build/types/observable/internal/Query.d.ts.map +1 -1
- package/build/types/observable/internal/Store.d.ts +19 -34
- 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/SubjectPayload.d.ts +5 -0
- package/build/types/observable/internal/SubjectPayload.d.ts.map +1 -0
- package/build/types/observable/internal/Subjects.d.ts +16 -0
- package/build/types/observable/internal/Subjects.d.ts.map +1 -0
- package/build/types/observable/internal/WeakRefTrie.d.ts +13 -0
- package/build/types/observable/internal/WeakRefTrie.d.ts.map +1 -0
- package/build/types/observable/internal/{ActionApplication.d.ts → actions/ActionApplication.d.ts} +2 -2
- package/build/types/observable/internal/{ActionApplication.d.ts.map → actions/ActionApplication.d.ts.map} +1 -1
- package/build/types/observable/internal/{OptimisticJob.d.ts → actions/OptimisticJob.d.ts} +4 -4
- package/build/types/observable/internal/actions/OptimisticJob.d.ts.map +1 -0
- package/build/types/observable/internal/{BaseCollectionQuery.d.ts → base-list/BaseCollectionQuery.d.ts} +4 -4
- package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts.map +1 -0
- package/build/types/observable/internal/{ListQuery.d.ts → base-list/BaseListQuery.d.ts} +9 -91
- package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -0
- package/build/types/observable/internal/{createCollectionConnectable.d.ts → base-list/createCollectionConnectable.d.ts} +5 -4
- package/build/types/observable/internal/base-list/createCollectionConnectable.d.ts.map +1 -0
- package/build/types/observable/internal/base-list/createCollectionConnectable.test.d.ts.map +1 -0
- package/build/types/observable/internal/{removeDuplicates.d.ts → base-list/removeDuplicates.d.ts} +2 -2
- package/build/types/observable/internal/base-list/removeDuplicates.d.ts.map +1 -0
- package/build/types/observable/internal/createInitEntry.d.ts +3 -0
- package/build/types/observable/internal/createInitEntry.d.ts.map +1 -0
- package/build/types/observable/internal/links/LinksHelper.d.ts +3 -1
- package/build/types/observable/internal/links/LinksHelper.d.ts.map +1 -1
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts +1 -1
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts.map +1 -1
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts +4 -2
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -1
- package/build/types/observable/internal/{ListCacheKey.d.ts → list/ListCacheKey.d.ts} +4 -4
- package/build/types/observable/internal/list/ListCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListQuery.d.ts +75 -0
- package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListQueryOptions.d.ts +4 -0
- package/build/types/observable/internal/list/ListQueryOptions.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListsHelper.d.ts +4 -2
- package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -1
- package/build/types/observable/internal/object/ObjectCacheKey.d.ts +5 -0
- package/build/types/observable/internal/object/ObjectCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/{ObjectQuery.d.ts → object/ObjectQuery.d.ts} +10 -10
- package/build/types/observable/internal/object/ObjectQuery.d.ts.map +1 -0
- package/build/types/observable/internal/object/ObjectsHelper.d.ts +1 -1
- package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -1
- package/build/types/observable/internal/sorting/SortingStrategy.d.ts +2 -2
- package/build/types/observable/internal/sorting/SortingStrategy.d.ts.map +1 -1
- package/build/types/observable/internal/testUtils.d.ts +1 -1
- package/build/types/observable/internal/testUtils.d.ts.map +1 -1
- package/package.json +23 -23
- package/build/browser/observable/internal/ActionApplication.js.map +0 -1
- package/build/browser/observable/internal/BaseCollectionQuery.js.map +0 -1
- package/build/browser/observable/internal/ListQuery.js.map +0 -1
- package/build/browser/observable/internal/ObjectQuery.js.map +0 -1
- package/build/browser/observable/internal/OptimisticJob.js.map +0 -1
- package/build/browser/observable/internal/createCollectionConnectable.js.map +0 -1
- package/build/browser/observable/internal/createCollectionConnectable.test.js.map +0 -1
- package/build/browser/observable/internal/removeDuplicates.js.map +0 -1
- package/build/cjs/chunk-6CBVXAAV.cjs.map +0 -1
- package/build/cjs/chunk-QR7IBJPZ.cjs.map +0 -1
- package/build/esm/observable/internal/ActionApplication.js.map +0 -1
- package/build/esm/observable/internal/BaseCollectionQuery.js.map +0 -1
- package/build/esm/observable/internal/ListQuery.js.map +0 -1
- package/build/esm/observable/internal/ObjectQuery.js.map +0 -1
- package/build/esm/observable/internal/OptimisticJob.js.map +0 -1
- package/build/esm/observable/internal/createCollectionConnectable.js.map +0 -1
- package/build/esm/observable/internal/createCollectionConnectable.test.js.map +0 -1
- package/build/esm/observable/internal/removeDuplicates.js.map +0 -1
- package/build/types/observable/internal/BaseCollectionQuery.d.ts.map +0 -1
- package/build/types/observable/internal/ListCacheKey.d.ts.map +0 -1
- package/build/types/observable/internal/ListQuery.d.ts.map +0 -1
- package/build/types/observable/internal/ObjectQuery.d.ts.map +0 -1
- package/build/types/observable/internal/OptimisticJob.d.ts.map +0 -1
- package/build/types/observable/internal/createCollectionConnectable.d.ts.map +0 -1
- package/build/types/observable/internal/createCollectionConnectable.test.d.ts.map +0 -1
- package/build/types/observable/internal/removeDuplicates.d.ts.map +0 -1
- /package/build/browser/observable/internal/{BaseCollectionQuery.js → base-list/BaseCollectionQuery.js} +0 -0
- /package/build/browser/observable/internal/{removeDuplicates.js → base-list/removeDuplicates.js} +0 -0
- /package/build/browser/observable/internal/{ListCacheKey.js → list/ListCacheKey.js} +0 -0
- /package/build/esm/observable/internal/{BaseCollectionQuery.js → base-list/BaseCollectionQuery.js} +0 -0
- /package/build/esm/observable/internal/{removeDuplicates.js → base-list/removeDuplicates.js} +0 -0
- /package/build/esm/observable/internal/{ListCacheKey.js → list/ListCacheKey.js} +0 -0
- /package/build/types/observable/internal/{createCollectionConnectable.test.d.ts → base-list/createCollectionConnectable.test.d.ts} +0 -0
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunk4GWXMQZE_cjs = require('../chunk-4GWXMQZE.cjs');
|
|
4
|
+
var chunk5KDG5ZET_cjs = require('../chunk-5KDG5ZET.cjs');
|
|
5
5
|
require('../chunk-Q7SFCCGT.cjs');
|
|
6
6
|
var shared_net_fetch = require('@osdk/shared.net.fetch');
|
|
7
7
|
var rxjs = require('rxjs');
|
|
8
8
|
var invariant2 = require('tiny-invariant');
|
|
9
9
|
var trie = require('@wry/trie');
|
|
10
10
|
var mnemonist = require('mnemonist');
|
|
11
|
-
var
|
|
11
|
+
var deepEqual4 = require('fast-deep-equal');
|
|
12
12
|
var groupBy = require('object.groupby');
|
|
13
13
|
var shared_net_errors = require('@osdk/shared.net.errors');
|
|
14
14
|
|
|
15
15
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
16
|
|
|
17
17
|
var invariant2__default = /*#__PURE__*/_interopDefault(invariant2);
|
|
18
|
-
var
|
|
18
|
+
var deepEqual4__default = /*#__PURE__*/_interopDefault(deepEqual4);
|
|
19
19
|
var groupBy__default = /*#__PURE__*/_interopDefault(groupBy);
|
|
20
20
|
|
|
21
21
|
// src/observable/internal/UnsubscribableWrapper.ts
|
|
@@ -35,7 +35,6 @@ var ObservableClientImpl = class {
|
|
|
35
35
|
this.__experimentalStore = store;
|
|
36
36
|
this.applyAction = store.applyAction.bind(store);
|
|
37
37
|
this.validateAction = store.validateAction.bind(store);
|
|
38
|
-
this.canonicalizeWhereClause = store.canonicalizeWhereClause.bind(store);
|
|
39
38
|
}
|
|
40
39
|
observeObject = (apiName, pk, options, subFn) => {
|
|
41
40
|
return this.__experimentalStore.objects.observe(
|
|
@@ -76,6 +75,9 @@ var ObservableClientImpl = class {
|
|
|
76
75
|
}
|
|
77
76
|
return new UnsubscribableWrapper(parentSub);
|
|
78
77
|
};
|
|
78
|
+
canonicalizeWhereClause(where) {
|
|
79
|
+
return this.__experimentalStore.whereCanonicalizer.canonicalize(where);
|
|
80
|
+
}
|
|
79
81
|
};
|
|
80
82
|
|
|
81
83
|
// src/observable/DebugFlags.ts
|
|
@@ -95,7 +97,7 @@ function createOptimisticId() {
|
|
|
95
97
|
return /* @__PURE__ */ Object.create(null);
|
|
96
98
|
}
|
|
97
99
|
|
|
98
|
-
// src/observable/internal/OptimisticJob.ts
|
|
100
|
+
// src/observable/internal/actions/OptimisticJob.ts
|
|
99
101
|
var OptimisticJob = class {
|
|
100
102
|
#result;
|
|
101
103
|
constructor(store, optimisticId) {
|
|
@@ -142,7 +144,7 @@ var OptimisticJob = class {
|
|
|
142
144
|
return this;
|
|
143
145
|
},
|
|
144
146
|
createObject(type, pk, properties) {
|
|
145
|
-
const create = store.client[
|
|
147
|
+
const create = store.client[chunk5KDG5ZET_cjs.additionalContext].objectFactory2(store.client[chunk5KDG5ZET_cjs.additionalContext], [{
|
|
146
148
|
$primaryKey: pk,
|
|
147
149
|
$apiName: type.apiName,
|
|
148
150
|
$objectType: type.apiName,
|
|
@@ -173,12 +175,12 @@ function runOptimisticJob(store, optimisticUpdate) {
|
|
|
173
175
|
// we don't want to leak the result
|
|
174
176
|
() => void 0
|
|
175
177
|
).finally(() => {
|
|
176
|
-
store.
|
|
178
|
+
store.layers.remove(optimisticId);
|
|
177
179
|
});
|
|
178
180
|
};
|
|
179
181
|
}
|
|
180
182
|
|
|
181
|
-
// src/observable/internal/ActionApplication.ts
|
|
183
|
+
// src/observable/internal/actions/ActionApplication.ts
|
|
182
184
|
var ACTION_DELAY = process.env.NODE_ENV === "production" ? 0 : 1e3;
|
|
183
185
|
var ActionApplication = class {
|
|
184
186
|
constructor(store) {
|
|
@@ -244,8 +246,8 @@ var ActionApplication = class {
|
|
|
244
246
|
objectType,
|
|
245
247
|
primaryKey
|
|
246
248
|
} of deletedObjects ?? []) {
|
|
247
|
-
const cacheKey = this.store.
|
|
248
|
-
this.store.
|
|
249
|
+
const cacheKey = this.store.cacheKeys.get("object", objectType, primaryKey);
|
|
250
|
+
this.store.queries.peek(cacheKey)?.deleteFromStore(
|
|
249
251
|
"loaded",
|
|
250
252
|
// this is probably not the best value to use
|
|
251
253
|
batch
|
|
@@ -260,45 +262,110 @@ var ActionApplication = class {
|
|
|
260
262
|
}
|
|
261
263
|
};
|
|
262
264
|
};
|
|
265
|
+
|
|
266
|
+
// src/observable/internal/RefCounts.ts
|
|
267
|
+
var RefCounts = class {
|
|
268
|
+
refCounts = /* @__PURE__ */ new Map();
|
|
269
|
+
// keeps our objects around for some extended duration after they are no longer
|
|
270
|
+
// needed which is good for quick clicks across tabs.
|
|
271
|
+
gcMap = /* @__PURE__ */ new Map();
|
|
272
|
+
constructor(keepAlive, cleanup) {
|
|
273
|
+
this.keepAlive = keepAlive;
|
|
274
|
+
this.cleanup = cleanup;
|
|
275
|
+
}
|
|
276
|
+
register(key) {
|
|
277
|
+
if (!this.refCounts.has(key)) {
|
|
278
|
+
this.gcMap.set(key, Date.now() + this.keepAlive);
|
|
279
|
+
}
|
|
280
|
+
return key;
|
|
281
|
+
}
|
|
282
|
+
retain(key) {
|
|
283
|
+
const count = this.refCounts.get(key) ?? 0;
|
|
284
|
+
this.refCounts.set(key, count + 1);
|
|
285
|
+
if (this.gcMap.has(key)) {
|
|
286
|
+
this.gcMap.delete(key);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
release(key) {
|
|
290
|
+
const count = this.refCounts.get(key);
|
|
291
|
+
if (count === void 0) ; else if (count === 1) {
|
|
292
|
+
this.refCounts.delete(key);
|
|
293
|
+
this.gcMap.set(key, Date.now() + this.keepAlive);
|
|
294
|
+
} else {
|
|
295
|
+
this.refCounts.set(key, count - 1);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
has(key) {
|
|
299
|
+
return this.refCounts.has(key);
|
|
300
|
+
}
|
|
301
|
+
gc() {
|
|
302
|
+
const now = Date.now();
|
|
303
|
+
for (const [key, deathTime] of this.gcMap) {
|
|
304
|
+
if (deathTime < now) {
|
|
305
|
+
this.gcMap.delete(key);
|
|
306
|
+
this.cleanup(key);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
// src/observable/internal/CacheKeys.ts
|
|
263
313
|
var CacheKeys = class {
|
|
264
314
|
#cacheKeys = new trie.Trie(false, (keys) => {
|
|
265
|
-
const
|
|
315
|
+
const cacheKey = {
|
|
266
316
|
type: keys[0],
|
|
267
317
|
otherKeys: keys.slice(1)
|
|
268
318
|
};
|
|
269
|
-
this.#onCreate(
|
|
270
|
-
return
|
|
319
|
+
this.#onCreate?.(cacheKey);
|
|
320
|
+
return cacheKey;
|
|
271
321
|
});
|
|
272
|
-
#
|
|
322
|
+
#refCounts = new RefCounts(6e4, (k) => this.#cleanupCacheKey(k));
|
|
323
|
+
// we are currently only using this for debug logging and should just remove it in the future if that
|
|
324
|
+
// continues to be true
|
|
325
|
+
#finalizationRegistry;
|
|
273
326
|
#onCreate;
|
|
274
|
-
|
|
327
|
+
#onDestroy;
|
|
328
|
+
constructor({
|
|
329
|
+
onCreate,
|
|
330
|
+
onDestroy
|
|
331
|
+
}) {
|
|
275
332
|
this.#onCreate = onCreate;
|
|
276
|
-
this.#
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
});
|
|
280
|
-
this.#
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
const cacheKeyArgs = ["specificLink", sourceObjectType, sourcePk, linkName, whereCanonicalizer.canonicalize(where), orderByCanonicalizer.canonicalize(orderBy)];
|
|
287
|
-
if (process.env.NODE_ENV !== "production" && DEBUG_CACHE_KEYS) ;
|
|
288
|
-
return this.#cacheKeys.lookupArray(cacheKeyArgs);
|
|
333
|
+
this.#onDestroy = onDestroy;
|
|
334
|
+
setInterval(() => {
|
|
335
|
+
this.#refCounts.gc();
|
|
336
|
+
}, 1e3);
|
|
337
|
+
this.#finalizationRegistry = new FinalizationRegistry((cleanupCallback) => {
|
|
338
|
+
try {
|
|
339
|
+
cleanupCallback();
|
|
340
|
+
} catch (e) {
|
|
341
|
+
console.error("Caught an error while running a finalization callback", e);
|
|
342
|
+
}
|
|
289
343
|
});
|
|
290
344
|
}
|
|
291
|
-
#registerCacheKeyFactory(type, factory) {
|
|
292
|
-
this.#cacheKeyFactories.set(type, factory);
|
|
293
|
-
}
|
|
294
345
|
get(type, ...args) {
|
|
295
|
-
const
|
|
296
|
-
|
|
297
|
-
|
|
346
|
+
const cacheKeyArgs = [type, ...args];
|
|
347
|
+
if (process.env.NODE_ENV !== "production" && DEBUG_CACHE_KEYS) ;
|
|
348
|
+
const cacheKey = this.#cacheKeys.lookupArray(cacheKeyArgs);
|
|
349
|
+
this.#refCounts.register(cacheKey);
|
|
350
|
+
return cacheKey;
|
|
351
|
+
}
|
|
352
|
+
retain(cacheKey) {
|
|
353
|
+
this.#refCounts.retain(cacheKey);
|
|
354
|
+
}
|
|
355
|
+
release(cacheKey) {
|
|
356
|
+
this.#refCounts.release(cacheKey);
|
|
298
357
|
}
|
|
299
|
-
remove(cacheKey) {
|
|
358
|
+
#remove(cacheKey) {
|
|
300
359
|
this.#cacheKeys.remove(cacheKey.type, ...cacheKey.otherKeys);
|
|
301
360
|
}
|
|
361
|
+
/**
|
|
362
|
+
* Called after a key is no longer retained and the timeout has elapsed
|
|
363
|
+
* @param key
|
|
364
|
+
*/
|
|
365
|
+
#cleanupCacheKey = (key) => {
|
|
366
|
+
this.#onDestroy?.(key);
|
|
367
|
+
this.#remove(key);
|
|
368
|
+
};
|
|
302
369
|
};
|
|
303
370
|
|
|
304
371
|
// src/observable/internal/CacheKey.ts
|
|
@@ -368,6 +435,16 @@ function multimapHelper(multimap) {
|
|
|
368
435
|
}));
|
|
369
436
|
}
|
|
370
437
|
|
|
438
|
+
// src/observable/internal/createInitEntry.ts
|
|
439
|
+
function createInitEntry(cacheKey) {
|
|
440
|
+
return {
|
|
441
|
+
cacheKey,
|
|
442
|
+
status: "init",
|
|
443
|
+
value: void 0,
|
|
444
|
+
lastUpdated: 0
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
|
|
371
448
|
// src/observable/internal/WeakMapWithEntries.ts
|
|
372
449
|
var WeakMapWithEntries = class {
|
|
373
450
|
#map = /* @__PURE__ */ new WeakMap();
|
|
@@ -515,12 +592,159 @@ var Layer = class _Layer {
|
|
|
515
592
|
this.#cache.set(cacheKey, value);
|
|
516
593
|
}
|
|
517
594
|
};
|
|
518
|
-
var
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
595
|
+
var Subjects = class {
|
|
596
|
+
#layers;
|
|
597
|
+
// we can use a regular Map here because the refCounting will
|
|
598
|
+
// handle cleanup.
|
|
599
|
+
#cacheKeyToSubject = /* @__PURE__ */ new WeakMap();
|
|
600
|
+
constructor({
|
|
601
|
+
logger,
|
|
602
|
+
layers
|
|
603
|
+
}) {
|
|
604
|
+
this.logger = logger;
|
|
605
|
+
this.#layers = layers;
|
|
606
|
+
}
|
|
607
|
+
peek = (cacheKey) => {
|
|
608
|
+
return this.#cacheKeyToSubject.get(cacheKey);
|
|
609
|
+
};
|
|
610
|
+
get = (cacheKey) => {
|
|
611
|
+
let subject = this.#cacheKeyToSubject.get(cacheKey);
|
|
612
|
+
if (!subject) {
|
|
613
|
+
const initialValue = this.#layers.top.get(cacheKey) ?? createInitEntry(cacheKey);
|
|
614
|
+
subject = new rxjs.BehaviorSubject({
|
|
615
|
+
...initialValue,
|
|
616
|
+
isOptimistic: initialValue.value !== this.#layers.truth.get(cacheKey)?.value
|
|
617
|
+
});
|
|
618
|
+
this.#cacheKeyToSubject.set(cacheKey, subject);
|
|
619
|
+
}
|
|
620
|
+
return subject;
|
|
621
|
+
};
|
|
622
|
+
delete = (cacheKey) => {
|
|
623
|
+
const subject = this.peek(cacheKey);
|
|
624
|
+
if (subject) {
|
|
625
|
+
subject.complete();
|
|
626
|
+
this.#cacheKeyToSubject.delete(cacheKey);
|
|
627
|
+
}
|
|
628
|
+
};
|
|
629
|
+
};
|
|
630
|
+
|
|
631
|
+
// src/observable/internal/tombstone.ts
|
|
632
|
+
var tombstone = void 0;
|
|
633
|
+
|
|
634
|
+
// src/observable/internal/Layers.ts
|
|
635
|
+
var Layers = class {
|
|
636
|
+
#truthLayer = new Layer(void 0, void 0);
|
|
637
|
+
#topLayer;
|
|
638
|
+
#onRevalidate;
|
|
639
|
+
constructor({
|
|
640
|
+
logger,
|
|
641
|
+
onRevalidate
|
|
642
|
+
}) {
|
|
643
|
+
this.logger = logger;
|
|
644
|
+
this.#topLayer = this.#truthLayer;
|
|
645
|
+
this.subjects = new Subjects({
|
|
646
|
+
logger,
|
|
647
|
+
layers: this
|
|
648
|
+
});
|
|
649
|
+
this.#onRevalidate = onRevalidate;
|
|
650
|
+
}
|
|
651
|
+
get top() {
|
|
652
|
+
return this.#topLayer;
|
|
653
|
+
}
|
|
654
|
+
get truth() {
|
|
655
|
+
return this.#truthLayer;
|
|
656
|
+
}
|
|
657
|
+
remove(layerId) {
|
|
658
|
+
!(layerId != null) ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false, "undefined is the reserved layerId for the truth layer") : invariant2__default.default(false) : void 0;
|
|
659
|
+
let currentLayer = this.#topLayer;
|
|
660
|
+
const cacheKeys = /* @__PURE__ */ new Map();
|
|
661
|
+
while (currentLayer != null && currentLayer.parentLayer != null) {
|
|
662
|
+
if (currentLayer.layerId === layerId) {
|
|
663
|
+
for (const [k, v] of currentLayer.entries()) {
|
|
664
|
+
if (cacheKeys.has(k)) continue;
|
|
665
|
+
cacheKeys.set(k, v);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
currentLayer = currentLayer.parentLayer;
|
|
669
|
+
}
|
|
670
|
+
this.#topLayer = this.#topLayer.removeLayer(layerId);
|
|
671
|
+
for (const [k, oldEntry] of cacheKeys) {
|
|
672
|
+
const currentEntry = this.#topLayer.get(k);
|
|
673
|
+
if (oldEntry !== currentEntry) {
|
|
674
|
+
const newEntry = currentEntry ?? createInitEntry(k);
|
|
675
|
+
this.subjects.peek(k)?.next({
|
|
676
|
+
...newEntry,
|
|
677
|
+
isOptimistic: currentEntry?.value !== this.#truthLayer.get(k)?.value
|
|
678
|
+
});
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
batch({
|
|
683
|
+
optimisticId,
|
|
684
|
+
changes
|
|
685
|
+
}, batchFn) {
|
|
686
|
+
!(optimisticId === void 0 || !!optimisticId) ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false, "optimistic must be undefined or not falsy") : invariant2__default.default(false) : void 0;
|
|
687
|
+
const batchContext = this.#createBatchContext({
|
|
688
|
+
optimisticId,
|
|
689
|
+
changes
|
|
690
|
+
});
|
|
691
|
+
const retVal = batchFn(batchContext);
|
|
692
|
+
this.#onRevalidate(changes, optimisticId).catch((e) => {
|
|
693
|
+
if (this.logger) {
|
|
694
|
+
this.logger.error("Unhandled error in batch", e);
|
|
695
|
+
} else {
|
|
696
|
+
console.error("Unhandled error in batch", e);
|
|
697
|
+
throw e;
|
|
698
|
+
}
|
|
699
|
+
});
|
|
700
|
+
return {
|
|
701
|
+
batchResult: batchContext,
|
|
702
|
+
retVal,
|
|
703
|
+
changes: batchContext.changes
|
|
704
|
+
};
|
|
705
|
+
}
|
|
706
|
+
#createBatchContext({
|
|
707
|
+
optimisticId,
|
|
708
|
+
changes
|
|
709
|
+
}) {
|
|
710
|
+
let needsLayer = optimisticId !== void 0;
|
|
711
|
+
const batchContext = {
|
|
712
|
+
changes,
|
|
713
|
+
createLayerIfNeeded: () => {
|
|
714
|
+
if (needsLayer) {
|
|
715
|
+
this.#topLayer = this.#topLayer.addLayer(optimisticId);
|
|
716
|
+
needsLayer = false;
|
|
717
|
+
}
|
|
718
|
+
},
|
|
719
|
+
optimisticWrite: !!optimisticId,
|
|
720
|
+
write: (cacheKey, value, status) => {
|
|
721
|
+
const oldTopValue = this.#topLayer.get(cacheKey);
|
|
722
|
+
if (optimisticId) batchContext.createLayerIfNeeded();
|
|
723
|
+
const writeLayer = optimisticId ? this.#topLayer : this.#truthLayer;
|
|
724
|
+
const newValue = {
|
|
725
|
+
cacheKey,
|
|
726
|
+
value,
|
|
727
|
+
lastUpdated: Date.now(),
|
|
728
|
+
status
|
|
729
|
+
};
|
|
730
|
+
writeLayer.set(cacheKey, newValue);
|
|
731
|
+
const newTopValue = this.#topLayer.get(cacheKey);
|
|
732
|
+
if (oldTopValue !== newTopValue) {
|
|
733
|
+
this.subjects.get(cacheKey)?.next({
|
|
734
|
+
...newValue,
|
|
735
|
+
isOptimistic: newTopValue?.value !== this.#truthLayer.get(cacheKey)?.value
|
|
736
|
+
});
|
|
737
|
+
}
|
|
738
|
+
return newValue;
|
|
739
|
+
},
|
|
740
|
+
delete: (cacheKey, status) => {
|
|
741
|
+
return batchContext.write(cacheKey, tombstone, status);
|
|
742
|
+
},
|
|
743
|
+
read: (cacheKey) => {
|
|
744
|
+
return optimisticId ? this.#topLayer.get(cacheKey) : this.#truthLayer.get(cacheKey);
|
|
745
|
+
}
|
|
746
|
+
};
|
|
747
|
+
return batchContext;
|
|
524
748
|
}
|
|
525
749
|
};
|
|
526
750
|
|
|
@@ -545,15 +769,16 @@ var QuerySubscription = class extends UnsubscribableWrapper {
|
|
|
545
769
|
|
|
546
770
|
// src/observable/internal/AbstractHelper.ts
|
|
547
771
|
var AbstractHelper = class {
|
|
548
|
-
constructor(store) {
|
|
772
|
+
constructor(store, cacheKeys) {
|
|
549
773
|
this.store = store;
|
|
774
|
+
this.cacheKeys = cacheKeys;
|
|
550
775
|
}
|
|
551
776
|
observe(options, subFn) {
|
|
552
777
|
const query = this.getQuery(options);
|
|
553
778
|
return this._subscribe(query, options, subFn);
|
|
554
779
|
}
|
|
555
780
|
_subscribe(query, options, subFn) {
|
|
556
|
-
this.store.retain(query.cacheKey);
|
|
781
|
+
this.store.cacheKeys.retain(query.cacheKey);
|
|
557
782
|
if (options.mode !== "offline") {
|
|
558
783
|
query.revalidate(options.mode === "force").catch((e) => {
|
|
559
784
|
subFn.error(e);
|
|
@@ -566,225 +791,38 @@ var AbstractHelper = class {
|
|
|
566
791
|
}
|
|
567
792
|
const sub = query.subscribe(subFn);
|
|
568
793
|
sub.add(() => {
|
|
569
|
-
this.store.release(query.cacheKey);
|
|
794
|
+
this.store.cacheKeys.release(query.cacheKey);
|
|
570
795
|
});
|
|
571
796
|
return new QuerySubscription(query, sub);
|
|
572
797
|
}
|
|
573
798
|
};
|
|
574
|
-
function createCollectionConnectable(subject, store, createPayload) {
|
|
575
|
-
return rxjs.connectable(subject.pipe(rxjs.switchMap((listEntry) => {
|
|
576
|
-
const resolvedData = listEntry?.value?.data == null || listEntry.value.data.length === 0 ? rxjs.of([]) : rxjs.combineLatest(listEntry.value.data.map((cacheKey) => store.getSubject(cacheKey).pipe(rxjs.map((objectEntry) => objectEntry?.value), rxjs.distinctUntilChanged())));
|
|
577
|
-
return rxjs.scheduled(rxjs.combineLatest({
|
|
578
|
-
resolvedData,
|
|
579
|
-
isOptimistic: rxjs.of(listEntry.isOptimistic),
|
|
580
|
-
status: rxjs.of(listEntry.status),
|
|
581
|
-
lastUpdated: rxjs.of(listEntry.lastUpdated)
|
|
582
|
-
}).pipe(rxjs.map((params) => createPayload({
|
|
583
|
-
resolvedData: Array.isArray(params.resolvedData) ? params.resolvedData : [],
|
|
584
|
-
isOptimistic: params.isOptimistic,
|
|
585
|
-
status: params.status,
|
|
586
|
-
lastUpdated: params.lastUpdated
|
|
587
|
-
}))), rxjs.asapScheduler);
|
|
588
|
-
})), {
|
|
589
|
-
resetOnDisconnect: false,
|
|
590
|
-
connector: () => new rxjs.ReplaySubject(1)
|
|
591
|
-
});
|
|
592
|
-
}
|
|
593
799
|
|
|
594
800
|
// src/observable/internal/isObjectInstance.ts
|
|
595
801
|
function isObjectInstance(item) {
|
|
596
802
|
return item != null && typeof item === "object" && "$primaryKey" in item;
|
|
597
803
|
}
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
}
|
|
616
|
-
function is$not(whereClause) {
|
|
617
|
-
if (process.env.NODE_ENV !== "production") {
|
|
618
|
-
if ("$not" in whereClause) {
|
|
619
|
-
!(Object.keys(whereClause).length === 1) ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false, "expected only $not to be present") : invariant2__default.default(false) : void 0;
|
|
620
|
-
}
|
|
804
|
+
|
|
805
|
+
// src/observable/internal/Query.ts
|
|
806
|
+
var Query = class {
|
|
807
|
+
retainCount = 0;
|
|
808
|
+
#connectable;
|
|
809
|
+
#subscription;
|
|
810
|
+
#subject;
|
|
811
|
+
/** @internal */
|
|
812
|
+
constructor(store, observable, opts, cacheKey, logger) {
|
|
813
|
+
this.options = opts;
|
|
814
|
+
this.cacheKey = cacheKey;
|
|
815
|
+
this.store = store;
|
|
816
|
+
this.cacheKeys = store.cacheKeys;
|
|
817
|
+
this.#subject = observable;
|
|
818
|
+
this.logger = logger ?? (process.env.NODE_ENV === "production" ? store.client[chunk5KDG5ZET_cjs.additionalContext].logger : store.client[chunk5KDG5ZET_cjs.additionalContext].logger?.child({}, {
|
|
819
|
+
msgPrefix: process.env.NODE_ENV !== "production" ? `Query<${cacheKey.type}, ${cacheKey.otherKeys.map((x) => JSON.stringify(x)).join(", ")}>` : "Query"
|
|
820
|
+
}));
|
|
621
821
|
}
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
return true;
|
|
627
|
-
}
|
|
628
|
-
if (is$and(whereClause)) {
|
|
629
|
-
return whereClause.$and.every((w) => objectSortaMatchesWhereClause(o, w, strict));
|
|
630
|
-
}
|
|
631
|
-
if (is$or(whereClause)) {
|
|
632
|
-
return whereClause.$or.some((w) => objectSortaMatchesWhereClause(o, w, strict));
|
|
633
|
-
}
|
|
634
|
-
if (is$not(whereClause)) {
|
|
635
|
-
return !objectSortaMatchesWhereClause(o, whereClause.$not, strict);
|
|
636
|
-
}
|
|
637
|
-
return Object.entries(whereClause).every(([key, filter]) => {
|
|
638
|
-
if (typeof filter === "object") {
|
|
639
|
-
const realValue = o[key];
|
|
640
|
-
const [f] = Object.keys(filter);
|
|
641
|
-
const expected = filter[f];
|
|
642
|
-
switch (f) {
|
|
643
|
-
case "$eq":
|
|
644
|
-
return realValue === expected;
|
|
645
|
-
case "$gt":
|
|
646
|
-
return realValue > expected;
|
|
647
|
-
case "$lt":
|
|
648
|
-
return realValue < expected;
|
|
649
|
-
case "$gte":
|
|
650
|
-
return realValue >= expected;
|
|
651
|
-
case "$lte":
|
|
652
|
-
return realValue <= expected;
|
|
653
|
-
case "$ne":
|
|
654
|
-
return realValue !== expected;
|
|
655
|
-
case "$in":
|
|
656
|
-
return expected.$in.includes(realValue);
|
|
657
|
-
case "$isNull":
|
|
658
|
-
return realValue == null;
|
|
659
|
-
case "$startsWith":
|
|
660
|
-
return realValue.startsWith(expected);
|
|
661
|
-
case "$contains":
|
|
662
|
-
case "$containsAllTerms":
|
|
663
|
-
case "$containsAllTermsInOrder":
|
|
664
|
-
case "$containsAnyTerm":
|
|
665
|
-
case "$intersects":
|
|
666
|
-
case "$within":
|
|
667
|
-
return !strict;
|
|
668
|
-
default:
|
|
669
|
-
if (process.env.NODE_ENV !== "production") {
|
|
670
|
-
process.env.NODE_ENV !== "production" ? invariant2__default.default(false, `Unknown where filter ${f}`) : invariant2__default.default(false) ;
|
|
671
|
-
}
|
|
672
|
-
return !strict;
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
if (key in o) {
|
|
676
|
-
if (o[key] === filter) {
|
|
677
|
-
return true;
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
return false;
|
|
681
|
-
});
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
// ../../node_modules/.pnpm/p-defer@4.0.1/node_modules/p-defer/index.js
|
|
685
|
-
function pDefer() {
|
|
686
|
-
const deferred = {};
|
|
687
|
-
deferred.promise = new Promise((resolve, reject) => {
|
|
688
|
-
deferred.resolve = resolve;
|
|
689
|
-
deferred.reject = reject;
|
|
690
|
-
});
|
|
691
|
-
return deferred;
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
// src/observable/internal/BulkObjectLoader.ts
|
|
695
|
-
var weakCache = new mnemonist.DefaultWeakMap((c) => new BulkObjectLoader(c));
|
|
696
|
-
function getBulkObjectLoader(client) {
|
|
697
|
-
return weakCache.get(client);
|
|
698
|
-
}
|
|
699
|
-
var BulkObjectLoader = class {
|
|
700
|
-
#client;
|
|
701
|
-
#m = new mnemonist.DefaultMap(() => ({
|
|
702
|
-
data: [],
|
|
703
|
-
timer: void 0
|
|
704
|
-
}));
|
|
705
|
-
#logger;
|
|
706
|
-
#maxWait;
|
|
707
|
-
#maxEntries;
|
|
708
|
-
constructor(client, maxWait = 25, maxEntries = 100) {
|
|
709
|
-
this.#client = client;
|
|
710
|
-
this.#logger = client[chunkQR7IBJPZ_cjs.additionalContext].logger;
|
|
711
|
-
this.#maxWait = maxWait;
|
|
712
|
-
this.#maxEntries = maxEntries;
|
|
713
|
-
}
|
|
714
|
-
async fetch(apiName, primaryKey) {
|
|
715
|
-
const deferred = pDefer();
|
|
716
|
-
const entry = this.#m.get(apiName);
|
|
717
|
-
entry.data.push({
|
|
718
|
-
primaryKey,
|
|
719
|
-
deferred
|
|
720
|
-
});
|
|
721
|
-
if (!entry.timer) {
|
|
722
|
-
entry.timer = setTimeout(() => {
|
|
723
|
-
this.#loadObjects(apiName, entry.data);
|
|
724
|
-
}, this.#maxWait);
|
|
725
|
-
}
|
|
726
|
-
if (entry.data.length >= this.#maxEntries) {
|
|
727
|
-
clearTimeout(entry.timer);
|
|
728
|
-
this.#loadObjects(apiName, entry.data);
|
|
729
|
-
}
|
|
730
|
-
return await deferred.promise;
|
|
731
|
-
}
|
|
732
|
-
#loadObjects(apiName, arr) {
|
|
733
|
-
this.#m.delete(apiName);
|
|
734
|
-
this.#reallyLoadObjects(apiName, arr).catch((e) => {
|
|
735
|
-
this.#logger?.error("Unhandled exception", e);
|
|
736
|
-
});
|
|
737
|
-
}
|
|
738
|
-
async #reallyLoadObjects(apiName, arr) {
|
|
739
|
-
const miniDef = {
|
|
740
|
-
type: "object",
|
|
741
|
-
apiName
|
|
742
|
-
};
|
|
743
|
-
const objMetadata = await this.#client.fetchMetadata(miniDef);
|
|
744
|
-
const pks = arr.map((x) => x.primaryKey);
|
|
745
|
-
const {
|
|
746
|
-
data
|
|
747
|
-
} = await this.#client(miniDef).where({
|
|
748
|
-
[objMetadata.primaryKeyApiName]: {
|
|
749
|
-
$in: pks
|
|
750
|
-
}
|
|
751
|
-
}).fetchPage({
|
|
752
|
-
$pageSize: pks.length
|
|
753
|
-
});
|
|
754
|
-
for (const {
|
|
755
|
-
primaryKey,
|
|
756
|
-
deferred
|
|
757
|
-
} of arr) {
|
|
758
|
-
const object = data.find((x) => x.$primaryKey === primaryKey);
|
|
759
|
-
if (object) {
|
|
760
|
-
deferred.resolve(object);
|
|
761
|
-
} else {
|
|
762
|
-
deferred.reject(new shared_net_errors.PalantirApiError(`Object not found: ${primaryKey}`));
|
|
763
|
-
}
|
|
764
|
-
}
|
|
765
|
-
}
|
|
766
|
-
};
|
|
767
|
-
|
|
768
|
-
// src/observable/internal/Query.ts
|
|
769
|
-
var Query = class {
|
|
770
|
-
retainCount = 0;
|
|
771
|
-
#connectable;
|
|
772
|
-
#subscription;
|
|
773
|
-
#subject;
|
|
774
|
-
/** @internal */
|
|
775
|
-
constructor(store, observable, opts, cacheKey, logger) {
|
|
776
|
-
this.options = opts;
|
|
777
|
-
this.cacheKey = cacheKey;
|
|
778
|
-
this.store = store;
|
|
779
|
-
this.#subject = observable;
|
|
780
|
-
this.logger = logger ?? (process.env.NODE_ENV === "production" ? store.client[chunkQR7IBJPZ_cjs.additionalContext].logger : store.client[chunkQR7IBJPZ_cjs.additionalContext].logger?.child({}, {
|
|
781
|
-
msgPrefix: process.env.NODE_ENV !== "production" ? `Query<${cacheKey.type}, ${cacheKey.otherKeys.map((x) => JSON.stringify(x)).join(", ")}>` : "Query"
|
|
782
|
-
}));
|
|
783
|
-
}
|
|
784
|
-
subscribe(observer) {
|
|
785
|
-
this.#connectable ??= this._createConnectable(this.#subject);
|
|
786
|
-
this.#subscription = this.#connectable.connect();
|
|
787
|
-
return this.#connectable.subscribe(observer);
|
|
822
|
+
subscribe(observer) {
|
|
823
|
+
this.#connectable ??= this._createConnectable(this.#subject);
|
|
824
|
+
this.#subscription = this.#connectable.connect();
|
|
825
|
+
return this.#connectable.subscribe(observer);
|
|
788
826
|
}
|
|
789
827
|
/**
|
|
790
828
|
* Causes the query to revalidate. This will cause the query to fetch
|
|
@@ -891,136 +929,6 @@ var Query = class {
|
|
|
891
929
|
*/
|
|
892
930
|
};
|
|
893
931
|
|
|
894
|
-
// src/observable/internal/tombstone.ts
|
|
895
|
-
var tombstone = void 0;
|
|
896
|
-
|
|
897
|
-
// src/observable/internal/ObjectQuery.ts
|
|
898
|
-
var ObjectQuery = class extends Query {
|
|
899
|
-
#apiName;
|
|
900
|
-
#pk;
|
|
901
|
-
constructor(store, subject, type, pk, cacheKey, opts) {
|
|
902
|
-
super(store, subject, opts, cacheKey, process.env.NODE_ENV !== "production" ? store.client[chunkQR7IBJPZ_cjs.additionalContext].logger?.child({}, {
|
|
903
|
-
msgPrefix: `ObjectQuery<${cacheKey.otherKeys.map((x) => JSON.stringify(x)).join(", ")}>`
|
|
904
|
-
}) : void 0);
|
|
905
|
-
this.#apiName = type;
|
|
906
|
-
this.#pk = pk;
|
|
907
|
-
}
|
|
908
|
-
_createConnectable(subject) {
|
|
909
|
-
return rxjs.connectable(subject.pipe(rxjs.map((x) => {
|
|
910
|
-
return {
|
|
911
|
-
status: x.status,
|
|
912
|
-
object: x.value,
|
|
913
|
-
lastUpdated: x.lastUpdated,
|
|
914
|
-
isOptimistic: x.isOptimistic
|
|
915
|
-
};
|
|
916
|
-
})), {
|
|
917
|
-
connector: () => new rxjs.BehaviorSubject({
|
|
918
|
-
status: "init",
|
|
919
|
-
object: void 0,
|
|
920
|
-
lastUpdated: 0,
|
|
921
|
-
isOptimistic: false
|
|
922
|
-
})
|
|
923
|
-
});
|
|
924
|
-
}
|
|
925
|
-
async _fetchAndStore() {
|
|
926
|
-
if (process.env.NODE_ENV !== "production") {
|
|
927
|
-
this.logger?.child({
|
|
928
|
-
methodName: "_fetchAndStore"
|
|
929
|
-
}).debug("calling _fetchAndStore");
|
|
930
|
-
}
|
|
931
|
-
const obj = await getBulkObjectLoader(this.store.client).fetch(this.#apiName, this.#pk);
|
|
932
|
-
this.store.batch({}, (batch) => {
|
|
933
|
-
this.writeToStore(obj, "loaded", batch);
|
|
934
|
-
});
|
|
935
|
-
}
|
|
936
|
-
writeToStore(data, status, batch) {
|
|
937
|
-
const entry = batch.read(this.cacheKey);
|
|
938
|
-
if (entry && deepEqual2__default.default(data, entry.value)) {
|
|
939
|
-
if (entry.status === status) {
|
|
940
|
-
if (process.env.NODE_ENV !== "production") {
|
|
941
|
-
this.logger?.child({
|
|
942
|
-
methodName: "writeToStore"
|
|
943
|
-
}).debug(`Object was deep equal and status unchanged (${status}), skipping update`);
|
|
944
|
-
}
|
|
945
|
-
return entry;
|
|
946
|
-
}
|
|
947
|
-
if (process.env.NODE_ENV !== "production") {
|
|
948
|
-
this.logger?.child({
|
|
949
|
-
methodName: "writeToStore"
|
|
950
|
-
}).debug(`Object was deep equal, just setting status (old status: ${entry.status}, new status: ${status})`);
|
|
951
|
-
}
|
|
952
|
-
return batch.write(this.cacheKey, entry.value, status);
|
|
953
|
-
}
|
|
954
|
-
if (process.env.NODE_ENV !== "production") {
|
|
955
|
-
this.logger?.child({
|
|
956
|
-
methodName: "writeToStore"
|
|
957
|
-
}).debug(JSON.stringify({
|
|
958
|
-
status
|
|
959
|
-
}), data);
|
|
960
|
-
}
|
|
961
|
-
const ret = batch.write(this.cacheKey, data, status);
|
|
962
|
-
batch.changes.registerObject(
|
|
963
|
-
this.cacheKey,
|
|
964
|
-
data,
|
|
965
|
-
/* isNew */
|
|
966
|
-
!entry
|
|
967
|
-
);
|
|
968
|
-
return ret;
|
|
969
|
-
}
|
|
970
|
-
deleteFromStore(status, batch) {
|
|
971
|
-
const entry = batch.read(this.cacheKey);
|
|
972
|
-
if (entry && deepEqual2__default.default(tombstone, entry.value)) {
|
|
973
|
-
if (process.env.NODE_ENV !== "production") {
|
|
974
|
-
this.logger?.child({
|
|
975
|
-
methodName: "deleteFromStore"
|
|
976
|
-
}).debug(`Object was deep equal, just setting status`);
|
|
977
|
-
}
|
|
978
|
-
return batch.write(this.cacheKey, entry.value, status);
|
|
979
|
-
}
|
|
980
|
-
if (process.env.NODE_ENV !== "production") {
|
|
981
|
-
this.logger?.child({
|
|
982
|
-
methodName: "deleteFromStore"
|
|
983
|
-
}).debug(JSON.stringify({
|
|
984
|
-
status
|
|
985
|
-
}));
|
|
986
|
-
}
|
|
987
|
-
if (!entry || !entry.value) {
|
|
988
|
-
return;
|
|
989
|
-
}
|
|
990
|
-
const ret = batch.delete(this.cacheKey, status);
|
|
991
|
-
batch.changes.deleteObject(this.cacheKey);
|
|
992
|
-
return ret;
|
|
993
|
-
}
|
|
994
|
-
invalidateObjectType = (objectType, changes) => {
|
|
995
|
-
if (this.#apiName === objectType) {
|
|
996
|
-
changes?.modified.add(this.cacheKey);
|
|
997
|
-
return this.revalidate(true);
|
|
998
|
-
}
|
|
999
|
-
return Promise.resolve();
|
|
1000
|
-
};
|
|
1001
|
-
};
|
|
1002
|
-
function storeOsdkInstances(store, values, batch) {
|
|
1003
|
-
return values.map((v) => {
|
|
1004
|
-
return store.objects.getQuery({
|
|
1005
|
-
apiName: v.$apiName,
|
|
1006
|
-
pk: v.$primaryKey
|
|
1007
|
-
}).writeToStore(v, "loaded", batch).cacheKey;
|
|
1008
|
-
});
|
|
1009
|
-
}
|
|
1010
|
-
|
|
1011
|
-
// src/observable/internal/removeDuplicates.ts
|
|
1012
|
-
function removeDuplicates(objectCacheKeys, batch) {
|
|
1013
|
-
const visited = /* @__PURE__ */ new Set();
|
|
1014
|
-
return objectCacheKeys.filter((key) => {
|
|
1015
|
-
batch.read(key);
|
|
1016
|
-
if (visited.has(key)) {
|
|
1017
|
-
return false;
|
|
1018
|
-
}
|
|
1019
|
-
visited.add(key);
|
|
1020
|
-
return true;
|
|
1021
|
-
});
|
|
1022
|
-
}
|
|
1023
|
-
|
|
1024
932
|
// src/observable/internal/sorting/SortingStrategy.ts
|
|
1025
933
|
var NoOpSortingStrategy = class {
|
|
1026
934
|
sortCacheKeys(objectCacheKeys, _batch) {
|
|
@@ -1067,9 +975,40 @@ function createOrderBySortFns(orderBy) {
|
|
|
1067
975
|
};
|
|
1068
976
|
});
|
|
1069
977
|
}
|
|
978
|
+
function createCollectionConnectable(subject, subjects, createPayload) {
|
|
979
|
+
return rxjs.connectable(subject.pipe(rxjs.switchMap((listEntry) => {
|
|
980
|
+
const resolvedData = listEntry?.value?.data == null || listEntry.value.data.length === 0 ? rxjs.of([]) : rxjs.combineLatest(listEntry.value.data.map((cacheKey) => subjects.get(cacheKey).pipe(rxjs.map((objectEntry) => objectEntry?.value), rxjs.distinctUntilChanged())));
|
|
981
|
+
return rxjs.scheduled(rxjs.combineLatest({
|
|
982
|
+
resolvedData,
|
|
983
|
+
isOptimistic: rxjs.of(listEntry.isOptimistic),
|
|
984
|
+
status: rxjs.of(listEntry.status),
|
|
985
|
+
lastUpdated: rxjs.of(listEntry.lastUpdated)
|
|
986
|
+
}).pipe(rxjs.map((params) => createPayload({
|
|
987
|
+
resolvedData: Array.isArray(params.resolvedData) ? params.resolvedData : [],
|
|
988
|
+
isOptimistic: params.isOptimistic,
|
|
989
|
+
status: params.status,
|
|
990
|
+
lastUpdated: params.lastUpdated
|
|
991
|
+
}))), rxjs.asapScheduler);
|
|
992
|
+
})), {
|
|
993
|
+
resetOnDisconnect: false,
|
|
994
|
+
connector: () => new rxjs.ReplaySubject(1)
|
|
995
|
+
});
|
|
996
|
+
}
|
|
1070
997
|
|
|
1071
|
-
// src/observable/internal/
|
|
1072
|
-
|
|
998
|
+
// src/observable/internal/base-list/removeDuplicates.ts
|
|
999
|
+
function removeDuplicates(objectCacheKeys, batch) {
|
|
1000
|
+
const visited = /* @__PURE__ */ new Set();
|
|
1001
|
+
return objectCacheKeys.filter((key) => {
|
|
1002
|
+
batch.read(key);
|
|
1003
|
+
if (visited.has(key)) {
|
|
1004
|
+
return false;
|
|
1005
|
+
}
|
|
1006
|
+
visited.add(key);
|
|
1007
|
+
return true;
|
|
1008
|
+
});
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
// src/observable/internal/base-list/BaseListQuery.ts
|
|
1073
1012
|
var BaseListQuery = class extends Query {
|
|
1074
1013
|
/**
|
|
1075
1014
|
* The sorting strategy to use for this collection
|
|
@@ -1100,16 +1039,15 @@ var BaseListQuery = class extends Query {
|
|
|
1100
1039
|
*/
|
|
1101
1040
|
_updateList(items, status, batch, append = false) {
|
|
1102
1041
|
if (process.env.NODE_ENV !== "production") {
|
|
1103
|
-
|
|
1042
|
+
this.logger?.child({
|
|
1104
1043
|
methodName: "updateList"
|
|
1105
|
-
}) :
|
|
1106
|
-
logger?.debug(`{status: ${status}, append: ${append}}`, JSON.stringify(items, null, 2));
|
|
1044
|
+
}).debug(`{status: ${status}, append: ${append}}`, JSON.stringify(items, null, 2));
|
|
1107
1045
|
}
|
|
1108
1046
|
let objectCacheKeys;
|
|
1109
1047
|
if (items.length === 0) {
|
|
1110
1048
|
objectCacheKeys = [];
|
|
1111
1049
|
} else if (isObjectInstance(items[0])) {
|
|
1112
|
-
objectCacheKeys = this.
|
|
1050
|
+
objectCacheKeys = this.store.objects.storeOsdkInstances(items, batch);
|
|
1113
1051
|
} else {
|
|
1114
1052
|
objectCacheKeys = items;
|
|
1115
1053
|
}
|
|
@@ -1128,7 +1066,7 @@ var BaseListQuery = class extends Query {
|
|
|
1128
1066
|
*/
|
|
1129
1067
|
writeToStore(data, status, batch) {
|
|
1130
1068
|
const entry = batch.read(this.cacheKey);
|
|
1131
|
-
if (entry &&
|
|
1069
|
+
if (entry && deepEqual4__default.default(data, entry.value)) {
|
|
1132
1070
|
if (entry.status === status) {
|
|
1133
1071
|
if (process.env.NODE_ENV !== "production") {
|
|
1134
1072
|
this.logger?.child({
|
|
@@ -1157,17 +1095,6 @@ var BaseListQuery = class extends Query {
|
|
|
1157
1095
|
* Register changes to the cache based on the specific collection type
|
|
1158
1096
|
* Implemented by subclasses to handle specific change registration
|
|
1159
1097
|
*/
|
|
1160
|
-
/**
|
|
1161
|
-
* Common method to store objects in the cache and return their cache keys
|
|
1162
|
-
* Used by collection queries when storing object references
|
|
1163
|
-
*
|
|
1164
|
-
* @param objects Array of objects to store
|
|
1165
|
-
* @param batch The batch context to use
|
|
1166
|
-
* @returns Array of cache keys for the stored objects
|
|
1167
|
-
*/
|
|
1168
|
-
storeObjects(objects, batch) {
|
|
1169
|
-
return objects.length > 0 ? storeOsdkInstances(this.store, objects, batch) : [];
|
|
1170
|
-
}
|
|
1171
1098
|
/**
|
|
1172
1099
|
* Common method for managing object reference counting and appending results
|
|
1173
1100
|
* Used by collection queries when updating object references
|
|
@@ -1182,11 +1109,11 @@ var BaseListQuery = class extends Query {
|
|
|
1182
1109
|
if (!batch.optimisticWrite) {
|
|
1183
1110
|
if (!append) {
|
|
1184
1111
|
for (const objectCacheKey of existingList?.value?.data ?? []) {
|
|
1185
|
-
this.store.release(objectCacheKey);
|
|
1112
|
+
this.store.cacheKeys.release(objectCacheKey);
|
|
1186
1113
|
}
|
|
1187
1114
|
}
|
|
1188
1115
|
for (const objectCacheKey of objectCacheKeys) {
|
|
1189
|
-
this.store.retain(objectCacheKey);
|
|
1116
|
+
this.store.cacheKeys.retain(objectCacheKey);
|
|
1190
1117
|
}
|
|
1191
1118
|
}
|
|
1192
1119
|
if (append) {
|
|
@@ -1195,12 +1122,11 @@ var BaseListQuery = class extends Query {
|
|
|
1195
1122
|
return objectCacheKeys;
|
|
1196
1123
|
}
|
|
1197
1124
|
_dispose() {
|
|
1198
|
-
console.log("DISPOSE LIST QUERY");
|
|
1199
1125
|
this.store.batch({}, (batch) => {
|
|
1200
1126
|
const entry = batch.read(this.cacheKey);
|
|
1201
1127
|
if (entry) {
|
|
1202
1128
|
for (const objectCacheKey of entry.value?.data ?? []) {
|
|
1203
|
-
this.store.release(objectCacheKey);
|
|
1129
|
+
this.store.cacheKeys.release(objectCacheKey);
|
|
1204
1130
|
}
|
|
1205
1131
|
}
|
|
1206
1132
|
});
|
|
@@ -1231,7 +1157,7 @@ var BaseListQuery = class extends Query {
|
|
|
1231
1157
|
* @returns A connectable observable of the collection's payload type
|
|
1232
1158
|
*/
|
|
1233
1159
|
_createConnectable(subject) {
|
|
1234
|
-
return createCollectionConnectable(subject, this.store, (params) => this.createPayload(params));
|
|
1160
|
+
return createCollectionConnectable(subject, this.store.subjects, (params) => this.createPayload(params));
|
|
1235
1161
|
}
|
|
1236
1162
|
/**
|
|
1237
1163
|
* @override Reset pagination state before a fetch
|
|
@@ -1325,7 +1251,7 @@ var BaseListQuery = class extends Query {
|
|
|
1325
1251
|
} = this.store.batch({}, (batch) => {
|
|
1326
1252
|
const append = this.nextPageToken != null;
|
|
1327
1253
|
const finalStatus = result.nextPageToken ? status : "loaded";
|
|
1328
|
-
return this._updateList(this.
|
|
1254
|
+
return this._updateList(this.store.objects.storeOsdkInstances(result.data, batch), finalStatus, batch, append);
|
|
1329
1255
|
});
|
|
1330
1256
|
return retVal;
|
|
1331
1257
|
} catch (error) {
|
|
@@ -1390,22 +1316,236 @@ var BaseListQuery = class extends Query {
|
|
|
1390
1316
|
}) : this.logger;
|
|
1391
1317
|
logger?.debug(`{status: ${options.status}, append: ${options.append}}`, JSON.stringify(items, null, 2));
|
|
1392
1318
|
}
|
|
1393
|
-
let objectCacheKeys;
|
|
1394
|
-
if (items.length === 0) {
|
|
1395
|
-
objectCacheKeys = [];
|
|
1396
|
-
} else if (isObjectInstance(items[0])) {
|
|
1397
|
-
objectCacheKeys = this.
|
|
1398
|
-
} else {
|
|
1399
|
-
objectCacheKeys = items;
|
|
1319
|
+
let objectCacheKeys;
|
|
1320
|
+
if (items.length === 0) {
|
|
1321
|
+
objectCacheKeys = [];
|
|
1322
|
+
} else if (isObjectInstance(items[0])) {
|
|
1323
|
+
objectCacheKeys = this.store.objects.storeOsdkInstances(items, batch);
|
|
1324
|
+
} else {
|
|
1325
|
+
objectCacheKeys = items;
|
|
1326
|
+
}
|
|
1327
|
+
objectCacheKeys = this.#retainReleaseAppend(batch, options.append ?? false, objectCacheKeys);
|
|
1328
|
+
objectCacheKeys = this._sortCacheKeys(objectCacheKeys, batch);
|
|
1329
|
+
objectCacheKeys = removeDuplicates(objectCacheKeys, batch);
|
|
1330
|
+
return this.writeToStore({
|
|
1331
|
+
data: objectCacheKeys
|
|
1332
|
+
}, options.status, batch);
|
|
1333
|
+
}
|
|
1334
|
+
};
|
|
1335
|
+
|
|
1336
|
+
// src/observable/internal/links/SpecificLinkQuery.ts
|
|
1337
|
+
var SpecificLinkQuery = class extends BaseListQuery {
|
|
1338
|
+
#sourceApiName;
|
|
1339
|
+
#sourcePk;
|
|
1340
|
+
#linkName;
|
|
1341
|
+
#whereClause;
|
|
1342
|
+
#orderBy;
|
|
1343
|
+
/**
|
|
1344
|
+
* Register changes to the cache specific to SpecificLinkQuery
|
|
1345
|
+
*/
|
|
1346
|
+
registerCacheChanges(batch) {
|
|
1347
|
+
batch.changes.modified.add(this.cacheKey);
|
|
1348
|
+
}
|
|
1349
|
+
constructor(store, subject, cacheKey, opts) {
|
|
1350
|
+
super(store, subject, opts, cacheKey, process.env.NODE_ENV !== "production" ? store.client[chunk5KDG5ZET_cjs.additionalContext].logger?.child({}, {
|
|
1351
|
+
msgPrefix: `SpecificLinkQuery<${cacheKey.otherKeys.map((x) => JSON.stringify(x)).join(", ")}>`
|
|
1352
|
+
}) : void 0);
|
|
1353
|
+
[this.#sourceApiName, this.#sourcePk, this.#linkName, this.#whereClause, this.#orderBy] = cacheKey.otherKeys;
|
|
1354
|
+
this.sortingStrategy = new OrderBySortingStrategy(this.#linkName, this.#orderBy);
|
|
1355
|
+
}
|
|
1356
|
+
// _fetchAndStore is now implemented in BaseCollectionQuery
|
|
1357
|
+
/**
|
|
1358
|
+
* Implements fetchPageData from the BaseCollectionQuery template method pattern
|
|
1359
|
+
* Fetches a page of linked objects
|
|
1360
|
+
*/
|
|
1361
|
+
async fetchPageData(signal) {
|
|
1362
|
+
const client = this.store.client;
|
|
1363
|
+
const sourceObjectDef = {
|
|
1364
|
+
type: "object",
|
|
1365
|
+
apiName: this.#sourceApiName
|
|
1366
|
+
};
|
|
1367
|
+
const sourceMetadata = await client[chunk5KDG5ZET_cjs.additionalContext].ontologyProvider.getObjectDefinition(this.#sourceApiName);
|
|
1368
|
+
const sourceQuery = client(sourceObjectDef).where({
|
|
1369
|
+
[sourceMetadata.primaryKeyApiName]: this.#sourcePk
|
|
1370
|
+
});
|
|
1371
|
+
const linkQuery = sourceQuery.pivotTo(this.#linkName);
|
|
1372
|
+
if (signal?.aborted) {
|
|
1373
|
+
throw new Error("Aborted");
|
|
1374
|
+
}
|
|
1375
|
+
const queryParams = {
|
|
1376
|
+
$pageSize: this.options.pageSize || 100,
|
|
1377
|
+
$nextPageToken: this.nextPageToken
|
|
1378
|
+
};
|
|
1379
|
+
if (this.#orderBy && Object.keys(this.#orderBy).length > 0) {
|
|
1380
|
+
queryParams.$orderBy = this.#orderBy;
|
|
1381
|
+
}
|
|
1382
|
+
if (this.#whereClause && Object.keys(this.#whereClause).length > 0) {
|
|
1383
|
+
queryParams.$where = this.#whereClause;
|
|
1384
|
+
}
|
|
1385
|
+
const response = await linkQuery.fetchPage(queryParams);
|
|
1386
|
+
this.nextPageToken = response.nextPageToken;
|
|
1387
|
+
return response;
|
|
1388
|
+
}
|
|
1389
|
+
/**
|
|
1390
|
+
* Removes a link query from the store
|
|
1391
|
+
*/
|
|
1392
|
+
deleteFromStore(status, batch) {
|
|
1393
|
+
const entry = batch.read(this.cacheKey);
|
|
1394
|
+
if (entry && deepEqual4__default.default(tombstone, entry.value)) {
|
|
1395
|
+
if (process.env.NODE_ENV !== "production") {
|
|
1396
|
+
this.logger?.child({
|
|
1397
|
+
methodName: "deleteFromStore"
|
|
1398
|
+
}).debug(`Links were already deleted, just setting status`);
|
|
1399
|
+
}
|
|
1400
|
+
return batch.write(this.cacheKey, entry.value, status);
|
|
1401
|
+
}
|
|
1402
|
+
if (process.env.NODE_ENV !== "production") {
|
|
1403
|
+
this.logger?.child({
|
|
1404
|
+
methodName: "deleteFromStore"
|
|
1405
|
+
}).debug(JSON.stringify({
|
|
1406
|
+
status
|
|
1407
|
+
}));
|
|
1408
|
+
}
|
|
1409
|
+
if (!entry || !entry.value) {
|
|
1410
|
+
return;
|
|
1411
|
+
}
|
|
1412
|
+
const ret = batch.delete(this.cacheKey, status);
|
|
1413
|
+
batch.changes.deleted.add(this.cacheKey);
|
|
1414
|
+
return ret;
|
|
1415
|
+
}
|
|
1416
|
+
/**
|
|
1417
|
+
* Implements Query.maybeUpdateAndRevalidate to handle cache invalidation
|
|
1418
|
+
*/
|
|
1419
|
+
maybeUpdateAndRevalidate = async (changes, _optimisticId) => {
|
|
1420
|
+
if (changes.modified.has(this.cacheKey)) {
|
|
1421
|
+
return this.revalidate(true);
|
|
1422
|
+
}
|
|
1423
|
+
return Promise.resolve();
|
|
1424
|
+
};
|
|
1425
|
+
invalidateObjectType = (objectType, changes) => {
|
|
1426
|
+
if (this.#sourceApiName === objectType) {
|
|
1427
|
+
changes?.modified.add(this.cacheKey);
|
|
1428
|
+
return this.revalidate(true);
|
|
1429
|
+
} else {
|
|
1430
|
+
return (async () => {
|
|
1431
|
+
const sourceMetadata = await this.store.client[chunk5KDG5ZET_cjs.additionalContext].ontologyProvider.getObjectDefinition(this.#sourceApiName);
|
|
1432
|
+
const linkDef = sourceMetadata.links?.[this.#linkName];
|
|
1433
|
+
if (!linkDef || linkDef.targetType !== objectType) return;
|
|
1434
|
+
const promise = this.revalidate(true);
|
|
1435
|
+
changes?.modified.add(this.cacheKey);
|
|
1436
|
+
return promise;
|
|
1437
|
+
})();
|
|
1438
|
+
}
|
|
1439
|
+
};
|
|
1440
|
+
};
|
|
1441
|
+
|
|
1442
|
+
// src/observable/internal/links/LinksHelper.ts
|
|
1443
|
+
var LinksHelper = class extends AbstractHelper {
|
|
1444
|
+
constructor(store, cacheKeys, whereCanonicalizer, orderByCanonicalizer) {
|
|
1445
|
+
super(store, cacheKeys);
|
|
1446
|
+
this.whereCanonicalizer = whereCanonicalizer;
|
|
1447
|
+
this.orderByCanonicalizer = orderByCanonicalizer;
|
|
1448
|
+
}
|
|
1449
|
+
getQuery(options) {
|
|
1450
|
+
const {
|
|
1451
|
+
apiName
|
|
1452
|
+
} = options.srcType;
|
|
1453
|
+
const canonWhere = this.whereCanonicalizer.canonicalize(options.where ?? {});
|
|
1454
|
+
const canonOrderBy = this.orderByCanonicalizer.canonicalize(options.orderBy ?? {});
|
|
1455
|
+
const linkCacheKey = this.cacheKeys.get("specificLink", apiName, options.pk, options.linkName, canonWhere, canonOrderBy);
|
|
1456
|
+
return this.store.queries.get(linkCacheKey, () => {
|
|
1457
|
+
return new SpecificLinkQuery(this.store, this.store.subjects.get(linkCacheKey), linkCacheKey, options);
|
|
1458
|
+
});
|
|
1459
|
+
}
|
|
1460
|
+
};
|
|
1461
|
+
function is$and(whereClause) {
|
|
1462
|
+
if (process.env.NODE_ENV !== "production") {
|
|
1463
|
+
if ("$and" in whereClause) {
|
|
1464
|
+
!Array.isArray(whereClause.$and) ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false, "expected $and to be an array") : invariant2__default.default(false) : void 0;
|
|
1465
|
+
!(Object.keys(whereClause).length === 1) ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false, "expected only $and to be present") : invariant2__default.default(false) : void 0;
|
|
1466
|
+
}
|
|
1467
|
+
}
|
|
1468
|
+
return "$and" in whereClause;
|
|
1469
|
+
}
|
|
1470
|
+
function is$or(whereClause) {
|
|
1471
|
+
if (process.env.NODE_ENV !== "production") {
|
|
1472
|
+
if ("$or" in whereClause) {
|
|
1473
|
+
!Array.isArray(whereClause.$or) ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false, "expected $or to be an array") : invariant2__default.default(false) : void 0;
|
|
1474
|
+
!(Object.keys(whereClause).length === 1) ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false, "expected only $or to be present") : invariant2__default.default(false) : void 0;
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
return "$or" in whereClause;
|
|
1478
|
+
}
|
|
1479
|
+
function is$not(whereClause) {
|
|
1480
|
+
if (process.env.NODE_ENV !== "production") {
|
|
1481
|
+
if ("$not" in whereClause) {
|
|
1482
|
+
!(Object.keys(whereClause).length === 1) ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false, "expected only $not to be present") : invariant2__default.default(false) : void 0;
|
|
1483
|
+
}
|
|
1484
|
+
}
|
|
1485
|
+
return "$not" in whereClause;
|
|
1486
|
+
}
|
|
1487
|
+
function objectSortaMatchesWhereClause(o, whereClause, strict) {
|
|
1488
|
+
if (deepEqual4__default.default({}, whereClause)) {
|
|
1489
|
+
return true;
|
|
1490
|
+
}
|
|
1491
|
+
if (is$and(whereClause)) {
|
|
1492
|
+
return whereClause.$and.every((w) => objectSortaMatchesWhereClause(o, w, strict));
|
|
1493
|
+
}
|
|
1494
|
+
if (is$or(whereClause)) {
|
|
1495
|
+
return whereClause.$or.some((w) => objectSortaMatchesWhereClause(o, w, strict));
|
|
1496
|
+
}
|
|
1497
|
+
if (is$not(whereClause)) {
|
|
1498
|
+
return !objectSortaMatchesWhereClause(o, whereClause.$not, strict);
|
|
1499
|
+
}
|
|
1500
|
+
return Object.entries(whereClause).every(([key, filter]) => {
|
|
1501
|
+
if (typeof filter === "object") {
|
|
1502
|
+
const realValue = o[key];
|
|
1503
|
+
const [f] = Object.keys(filter);
|
|
1504
|
+
const expected = filter[f];
|
|
1505
|
+
switch (f) {
|
|
1506
|
+
case "$eq":
|
|
1507
|
+
return realValue === expected;
|
|
1508
|
+
case "$gt":
|
|
1509
|
+
return realValue > expected;
|
|
1510
|
+
case "$lt":
|
|
1511
|
+
return realValue < expected;
|
|
1512
|
+
case "$gte":
|
|
1513
|
+
return realValue >= expected;
|
|
1514
|
+
case "$lte":
|
|
1515
|
+
return realValue <= expected;
|
|
1516
|
+
case "$ne":
|
|
1517
|
+
return realValue !== expected;
|
|
1518
|
+
case "$in":
|
|
1519
|
+
return expected.$in.includes(realValue);
|
|
1520
|
+
case "$isNull":
|
|
1521
|
+
return realValue == null;
|
|
1522
|
+
case "$startsWith":
|
|
1523
|
+
return realValue.startsWith(expected);
|
|
1524
|
+
case "$contains":
|
|
1525
|
+
case "$containsAllTerms":
|
|
1526
|
+
case "$containsAllTermsInOrder":
|
|
1527
|
+
case "$containsAnyTerm":
|
|
1528
|
+
case "$intersects":
|
|
1529
|
+
case "$within":
|
|
1530
|
+
return !strict;
|
|
1531
|
+
default:
|
|
1532
|
+
if (process.env.NODE_ENV !== "production") {
|
|
1533
|
+
process.env.NODE_ENV !== "production" ? invariant2__default.default(false, `Unknown where filter ${f}`) : invariant2__default.default(false) ;
|
|
1534
|
+
}
|
|
1535
|
+
return !strict;
|
|
1536
|
+
}
|
|
1537
|
+
}
|
|
1538
|
+
if (key in o) {
|
|
1539
|
+
if (o[key] === filter) {
|
|
1540
|
+
return true;
|
|
1541
|
+
}
|
|
1400
1542
|
}
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
}
|
|
1408
|
-
};
|
|
1543
|
+
return false;
|
|
1544
|
+
});
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
// src/observable/internal/list/ListQuery.ts
|
|
1548
|
+
var API_NAME_IDX = 1;
|
|
1409
1549
|
var ListQuery = class extends BaseListQuery {
|
|
1410
1550
|
// pageSize?: number; // this is the internal page size. we need to track this properly
|
|
1411
1551
|
#type;
|
|
@@ -1421,7 +1561,7 @@ var ListQuery = class extends BaseListQuery {
|
|
|
1421
1561
|
batch.changes.registerList(this.cacheKey);
|
|
1422
1562
|
}
|
|
1423
1563
|
constructor(store, subject, apiType, apiName, whereClause, orderBy, cacheKey, opts) {
|
|
1424
|
-
super(store, subject, opts, cacheKey, process.env.NODE_ENV !== "production" ? store.client[
|
|
1564
|
+
super(store, subject, opts, cacheKey, process.env.NODE_ENV !== "production" ? store.client[chunk5KDG5ZET_cjs.additionalContext].logger?.child({}, {
|
|
1425
1565
|
msgPrefix: `ListQuery<${cacheKey.otherKeys.map((x) => JSON.stringify(x)).join(", ")}>`
|
|
1426
1566
|
}) : void 0);
|
|
1427
1567
|
this.#type = apiType;
|
|
@@ -1470,7 +1610,7 @@ var ListQuery = class extends BaseListQuery {
|
|
|
1470
1610
|
*/
|
|
1471
1611
|
handleFetchError(error, _status, batch) {
|
|
1472
1612
|
this.logger?.error("error", error);
|
|
1473
|
-
this.store.
|
|
1613
|
+
this.store.subjects.get(this.cacheKey).error(error);
|
|
1474
1614
|
return this.writeToStore({
|
|
1475
1615
|
data: []
|
|
1476
1616
|
}, "error", batch);
|
|
@@ -1549,7 +1689,7 @@ var ListQuery = class extends BaseListQuery {
|
|
|
1549
1689
|
const toRemove = new Set(changes.deleted);
|
|
1550
1690
|
for (const obj of relevantObjects.modified.all) {
|
|
1551
1691
|
if (relevantObjects.modified.strictMatches.has(obj)) {
|
|
1552
|
-
const objectCacheKey = this.
|
|
1692
|
+
const objectCacheKey = this.cacheKeys.get("object", obj.$objectType, obj.$primaryKey);
|
|
1553
1693
|
if (!existingList.has(objectCacheKey)) {
|
|
1554
1694
|
toAdd.add(obj);
|
|
1555
1695
|
}
|
|
@@ -1557,7 +1697,7 @@ var ListQuery = class extends BaseListQuery {
|
|
|
1557
1697
|
} else if (batch.optimisticWrite) {
|
|
1558
1698
|
continue;
|
|
1559
1699
|
} else {
|
|
1560
|
-
const existingObjectCacheKey = this.
|
|
1700
|
+
const existingObjectCacheKey = this.cacheKeys.get("object", obj.$objectType, obj.$primaryKey);
|
|
1561
1701
|
toRemove.add(existingObjectCacheKey);
|
|
1562
1702
|
if (relevantObjects.modified.sortaMatches.has(obj)) {
|
|
1563
1703
|
needsRevalidation = true;
|
|
@@ -1569,7 +1709,7 @@ var ListQuery = class extends BaseListQuery {
|
|
|
1569
1709
|
newList.push(key);
|
|
1570
1710
|
}
|
|
1571
1711
|
for (const obj of toAdd) {
|
|
1572
|
-
newList.push(this.
|
|
1712
|
+
newList.push(this.cacheKeys.get("object", obj.$objectType, obj.$primaryKey));
|
|
1573
1713
|
}
|
|
1574
1714
|
this._updateList(
|
|
1575
1715
|
newList,
|
|
@@ -1614,7 +1754,7 @@ var ListQuery = class extends BaseListQuery {
|
|
|
1614
1754
|
}
|
|
1615
1755
|
#extractRelevantObjectsForTypeInterface(changes) {
|
|
1616
1756
|
const matchesApiName = ([, object]) => {
|
|
1617
|
-
return this.#apiName in object[
|
|
1757
|
+
return this.#apiName in object[chunk4GWXMQZE_cjs.ObjectDefRef].interfaceMap;
|
|
1618
1758
|
};
|
|
1619
1759
|
const added = Array.from(changes.addedObjects).filter(matchesApiName).map(([, object]) => object.$as(this.#apiName));
|
|
1620
1760
|
const modified = Array.from(changes.modifiedObjects).filter(matchesApiName).map(([, object]) => object.$as(this.#apiName));
|
|
@@ -1705,7 +1845,7 @@ var ListQuery = class extends BaseListQuery {
|
|
|
1705
1845
|
if (state === "ADDED_OR_UPDATED") {
|
|
1706
1846
|
const object = objOrIface.$apiName !== objOrIface.$objectType ? objOrIface.$as(objOrIface.$objectType) : objOrIface;
|
|
1707
1847
|
this.store.batch({}, (batch) => {
|
|
1708
|
-
this.
|
|
1848
|
+
this.store.objects.storeOsdkInstances([object], batch);
|
|
1709
1849
|
});
|
|
1710
1850
|
} else if (state === "REMOVED") {
|
|
1711
1851
|
this.#onOswRemoved(objOrIface, logger);
|
|
@@ -1716,7 +1856,7 @@ var ListQuery = class extends BaseListQuery {
|
|
|
1716
1856
|
const existing = batch.read(this.cacheKey);
|
|
1717
1857
|
!existing ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false, "the truth value for our list should exist as we already subscribed") : invariant2__default.default(false) : void 0;
|
|
1718
1858
|
if (existing.status === "loaded") {
|
|
1719
|
-
const objectCacheKey = this.
|
|
1859
|
+
const objectCacheKey = this.cacheKeys.get("object", objOrIface.$objectType, objOrIface.$primaryKey);
|
|
1720
1860
|
const newObjects = existing.value?.data.filter((o) => o !== objectCacheKey);
|
|
1721
1861
|
if (newObjects?.length !== existing.value?.data.length) {
|
|
1722
1862
|
batch.changes.registerList(this.cacheKey);
|
|
@@ -1745,7 +1885,7 @@ var ListQuery = class extends BaseListQuery {
|
|
|
1745
1885
|
async function reloadDataAsFullObjects(client, data) {
|
|
1746
1886
|
const groups = groupBy__default.default(data, (x) => x.$objectType);
|
|
1747
1887
|
const objectTypeToPrimaryKeyToObject = Object.fromEntries(await Promise.all(Object.entries(groups).map(async ([apiName, objects]) => {
|
|
1748
|
-
const objectDef = objects[0][
|
|
1888
|
+
const objectDef = objects[0][chunk4GWXMQZE_cjs.UnderlyingOsdkObject][chunk4GWXMQZE_cjs.ObjectDefRef];
|
|
1749
1889
|
const where = {
|
|
1750
1890
|
[objectDef.primaryKeyApiName]: {
|
|
1751
1891
|
$in: objects.map((x) => x.$primaryKey)
|
|
@@ -1761,69 +1901,202 @@ async function reloadDataAsFullObjects(client, data) {
|
|
|
1761
1901
|
return data;
|
|
1762
1902
|
}
|
|
1763
1903
|
|
|
1764
|
-
// src/observable/internal/
|
|
1765
|
-
var
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
#orderBy;
|
|
1771
|
-
/**
|
|
1772
|
-
* Register changes to the cache specific to SpecificLinkQuery
|
|
1773
|
-
*/
|
|
1774
|
-
registerCacheChanges(batch) {
|
|
1775
|
-
batch.changes.modified.add(this.cacheKey);
|
|
1904
|
+
// src/observable/internal/list/ListsHelper.ts
|
|
1905
|
+
var ListsHelper = class extends AbstractHelper {
|
|
1906
|
+
constructor(store, cacheKeys, whereCanonicalizer, orderByCanonicalizer) {
|
|
1907
|
+
super(store, cacheKeys);
|
|
1908
|
+
this.whereCanonicalizer = whereCanonicalizer;
|
|
1909
|
+
this.orderByCanonicalizer = orderByCanonicalizer;
|
|
1776
1910
|
}
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1911
|
+
observe(options, subFn) {
|
|
1912
|
+
const ret = super.observe(options, subFn);
|
|
1913
|
+
if (options.streamUpdates) {
|
|
1914
|
+
ret.query.registerStreamUpdates(ret.subscription);
|
|
1915
|
+
}
|
|
1916
|
+
return ret;
|
|
1783
1917
|
}
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1918
|
+
getQuery(options) {
|
|
1919
|
+
const {
|
|
1920
|
+
type: {
|
|
1921
|
+
apiName,
|
|
1922
|
+
type
|
|
1923
|
+
},
|
|
1924
|
+
where,
|
|
1925
|
+
orderBy
|
|
1926
|
+
} = options;
|
|
1927
|
+
const canonWhere = this.whereCanonicalizer.canonicalize(where ?? {});
|
|
1928
|
+
const canonOrderBy = this.orderByCanonicalizer.canonicalize(orderBy ?? {});
|
|
1929
|
+
const listCacheKey = this.cacheKeys.get("list", type, apiName, canonWhere, canonOrderBy);
|
|
1930
|
+
return this.store.queries.get(listCacheKey, () => {
|
|
1931
|
+
return new ListQuery(this.store, this.store.subjects.get(listCacheKey), type, apiName, canonWhere, canonOrderBy, listCacheKey, options);
|
|
1932
|
+
});
|
|
1933
|
+
}
|
|
1934
|
+
};
|
|
1935
|
+
|
|
1936
|
+
// ../../node_modules/.pnpm/p-defer@4.0.1/node_modules/p-defer/index.js
|
|
1937
|
+
function pDefer() {
|
|
1938
|
+
const deferred = {};
|
|
1939
|
+
deferred.promise = new Promise((resolve, reject) => {
|
|
1940
|
+
deferred.resolve = resolve;
|
|
1941
|
+
deferred.reject = reject;
|
|
1942
|
+
});
|
|
1943
|
+
return deferred;
|
|
1944
|
+
}
|
|
1945
|
+
|
|
1946
|
+
// src/observable/internal/BulkObjectLoader.ts
|
|
1947
|
+
var weakCache = new mnemonist.DefaultWeakMap((c) => new BulkObjectLoader(c));
|
|
1948
|
+
function getBulkObjectLoader(client) {
|
|
1949
|
+
return weakCache.get(client);
|
|
1950
|
+
}
|
|
1951
|
+
var BulkObjectLoader = class {
|
|
1952
|
+
#client;
|
|
1953
|
+
#m = new mnemonist.DefaultMap(() => ({
|
|
1954
|
+
data: [],
|
|
1955
|
+
timer: void 0
|
|
1956
|
+
}));
|
|
1957
|
+
#logger;
|
|
1958
|
+
#maxWait;
|
|
1959
|
+
#maxEntries;
|
|
1960
|
+
constructor(client, maxWait = 25, maxEntries = 100) {
|
|
1961
|
+
this.#client = client;
|
|
1962
|
+
this.#logger = client[chunk5KDG5ZET_cjs.additionalContext].logger;
|
|
1963
|
+
this.#maxWait = maxWait;
|
|
1964
|
+
this.#maxEntries = maxEntries;
|
|
1965
|
+
}
|
|
1966
|
+
async fetch(apiName, primaryKey) {
|
|
1967
|
+
const deferred = pDefer();
|
|
1968
|
+
const entry = this.#m.get(apiName);
|
|
1969
|
+
entry.data.push({
|
|
1970
|
+
primaryKey,
|
|
1971
|
+
deferred
|
|
1972
|
+
});
|
|
1973
|
+
if (!entry.timer) {
|
|
1974
|
+
entry.timer = setTimeout(() => {
|
|
1975
|
+
this.#loadObjects(apiName, entry.data);
|
|
1976
|
+
}, this.#maxWait);
|
|
1977
|
+
}
|
|
1978
|
+
if (entry.data.length >= this.#maxEntries) {
|
|
1979
|
+
clearTimeout(entry.timer);
|
|
1980
|
+
this.#loadObjects(apiName, entry.data);
|
|
1981
|
+
}
|
|
1982
|
+
return await deferred.promise;
|
|
1983
|
+
}
|
|
1984
|
+
#loadObjects(apiName, arr) {
|
|
1985
|
+
this.#m.delete(apiName);
|
|
1986
|
+
this.#reallyLoadObjects(apiName, arr).catch((e) => {
|
|
1987
|
+
this.#logger?.error("Unhandled exception", e);
|
|
1988
|
+
});
|
|
1989
|
+
}
|
|
1990
|
+
async #reallyLoadObjects(apiName, arr) {
|
|
1991
|
+
const miniDef = {
|
|
1792
1992
|
type: "object",
|
|
1793
|
-
apiName
|
|
1993
|
+
apiName
|
|
1794
1994
|
};
|
|
1795
|
-
const
|
|
1796
|
-
const
|
|
1797
|
-
|
|
1995
|
+
const objMetadata = await this.#client.fetchMetadata(miniDef);
|
|
1996
|
+
const pks = arr.map((x) => x.primaryKey);
|
|
1997
|
+
const {
|
|
1998
|
+
data
|
|
1999
|
+
} = await this.#client(miniDef).where({
|
|
2000
|
+
[objMetadata.primaryKeyApiName]: {
|
|
2001
|
+
$in: pks
|
|
2002
|
+
}
|
|
2003
|
+
}).fetchPage({
|
|
2004
|
+
$pageSize: pks.length
|
|
1798
2005
|
});
|
|
1799
|
-
const
|
|
1800
|
-
|
|
1801
|
-
|
|
2006
|
+
for (const {
|
|
2007
|
+
primaryKey,
|
|
2008
|
+
deferred
|
|
2009
|
+
} of arr) {
|
|
2010
|
+
const object = data.find((x) => x.$primaryKey === primaryKey);
|
|
2011
|
+
if (object) {
|
|
2012
|
+
deferred.resolve(object);
|
|
2013
|
+
} else {
|
|
2014
|
+
deferred.reject(new shared_net_errors.PalantirApiError(`Object not found: ${primaryKey}`));
|
|
2015
|
+
}
|
|
1802
2016
|
}
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
2017
|
+
}
|
|
2018
|
+
};
|
|
2019
|
+
|
|
2020
|
+
// src/observable/internal/object/ObjectQuery.ts
|
|
2021
|
+
var ObjectQuery = class extends Query {
|
|
2022
|
+
#apiName;
|
|
2023
|
+
#pk;
|
|
2024
|
+
constructor(store, subject, type, pk, cacheKey, opts) {
|
|
2025
|
+
super(store, subject, opts, cacheKey, process.env.NODE_ENV !== "production" ? store.client[chunk5KDG5ZET_cjs.additionalContext].logger?.child({}, {
|
|
2026
|
+
msgPrefix: `ObjectQuery<${cacheKey.otherKeys.map((x) => JSON.stringify(x)).join(", ")}>`
|
|
2027
|
+
}) : void 0);
|
|
2028
|
+
this.#apiName = type;
|
|
2029
|
+
this.#pk = pk;
|
|
2030
|
+
}
|
|
2031
|
+
_createConnectable(subject) {
|
|
2032
|
+
return rxjs.connectable(subject.pipe(rxjs.map((x) => {
|
|
2033
|
+
return {
|
|
2034
|
+
status: x.status,
|
|
2035
|
+
object: x.value,
|
|
2036
|
+
lastUpdated: x.lastUpdated,
|
|
2037
|
+
isOptimistic: x.isOptimistic
|
|
2038
|
+
};
|
|
2039
|
+
})), {
|
|
2040
|
+
connector: () => new rxjs.BehaviorSubject({
|
|
2041
|
+
status: "init",
|
|
2042
|
+
object: void 0,
|
|
2043
|
+
lastUpdated: 0,
|
|
2044
|
+
isOptimistic: false
|
|
2045
|
+
})
|
|
2046
|
+
});
|
|
2047
|
+
}
|
|
2048
|
+
async _fetchAndStore() {
|
|
2049
|
+
if (process.env.NODE_ENV !== "production") {
|
|
2050
|
+
this.logger?.child({
|
|
2051
|
+
methodName: "_fetchAndStore"
|
|
2052
|
+
}).debug("calling _fetchAndStore");
|
|
1809
2053
|
}
|
|
1810
|
-
|
|
1811
|
-
|
|
2054
|
+
const obj = await getBulkObjectLoader(this.store.client).fetch(this.#apiName, this.#pk);
|
|
2055
|
+
this.store.batch({}, (batch) => {
|
|
2056
|
+
this.writeToStore(obj, "loaded", batch);
|
|
2057
|
+
});
|
|
2058
|
+
}
|
|
2059
|
+
writeToStore(data, status, batch) {
|
|
2060
|
+
const entry = batch.read(this.cacheKey);
|
|
2061
|
+
if (entry && deepEqual4__default.default(data, entry.value)) {
|
|
2062
|
+
if (entry.status === status) {
|
|
2063
|
+
if (process.env.NODE_ENV !== "production") {
|
|
2064
|
+
this.logger?.child({
|
|
2065
|
+
methodName: "writeToStore"
|
|
2066
|
+
}).debug(`Object was deep equal and status unchanged (${status}), skipping update`);
|
|
2067
|
+
}
|
|
2068
|
+
return entry;
|
|
2069
|
+
}
|
|
2070
|
+
if (process.env.NODE_ENV !== "production") {
|
|
2071
|
+
this.logger?.child({
|
|
2072
|
+
methodName: "writeToStore"
|
|
2073
|
+
}).debug(`Object was deep equal, just setting status (old status: ${entry.status}, new status: ${status})`);
|
|
2074
|
+
}
|
|
2075
|
+
return batch.write(this.cacheKey, entry.value, status);
|
|
1812
2076
|
}
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
2077
|
+
if (process.env.NODE_ENV !== "production") {
|
|
2078
|
+
this.logger?.child({
|
|
2079
|
+
methodName: "writeToStore"
|
|
2080
|
+
}).debug(JSON.stringify({
|
|
2081
|
+
status
|
|
2082
|
+
}), data);
|
|
2083
|
+
}
|
|
2084
|
+
const ret = batch.write(this.cacheKey, data, status);
|
|
2085
|
+
batch.changes.registerObject(
|
|
2086
|
+
this.cacheKey,
|
|
2087
|
+
data,
|
|
2088
|
+
/* isNew */
|
|
2089
|
+
!entry
|
|
2090
|
+
);
|
|
2091
|
+
return ret;
|
|
1816
2092
|
}
|
|
1817
|
-
/**
|
|
1818
|
-
* Removes a link query from the store
|
|
1819
|
-
*/
|
|
1820
2093
|
deleteFromStore(status, batch) {
|
|
1821
2094
|
const entry = batch.read(this.cacheKey);
|
|
1822
|
-
if (entry &&
|
|
2095
|
+
if (entry && deepEqual4__default.default(tombstone, entry.value)) {
|
|
1823
2096
|
if (process.env.NODE_ENV !== "production") {
|
|
1824
2097
|
this.logger?.child({
|
|
1825
2098
|
methodName: "deleteFromStore"
|
|
1826
|
-
}).debug(`
|
|
2099
|
+
}).debug(`Object was deep equal, just setting status`);
|
|
1827
2100
|
}
|
|
1828
2101
|
return batch.write(this.cacheKey, entry.value, status);
|
|
1829
2102
|
}
|
|
@@ -1838,87 +2111,18 @@ var SpecificLinkQuery = class extends BaseListQuery {
|
|
|
1838
2111
|
return;
|
|
1839
2112
|
}
|
|
1840
2113
|
const ret = batch.delete(this.cacheKey, status);
|
|
1841
|
-
batch.changes.
|
|
2114
|
+
batch.changes.deleteObject(this.cacheKey);
|
|
1842
2115
|
return ret;
|
|
1843
2116
|
}
|
|
1844
|
-
/**
|
|
1845
|
-
* Implements Query.maybeUpdateAndRevalidate to handle cache invalidation
|
|
1846
|
-
*/
|
|
1847
|
-
maybeUpdateAndRevalidate = async (changes, _optimisticId) => {
|
|
1848
|
-
if (changes.modified.has(this.cacheKey)) {
|
|
1849
|
-
return this.revalidate(true);
|
|
1850
|
-
}
|
|
1851
|
-
return Promise.resolve();
|
|
1852
|
-
};
|
|
1853
2117
|
invalidateObjectType = (objectType, changes) => {
|
|
1854
|
-
if (this.#
|
|
2118
|
+
if (this.#apiName === objectType) {
|
|
1855
2119
|
changes?.modified.add(this.cacheKey);
|
|
1856
2120
|
return this.revalidate(true);
|
|
1857
|
-
} else {
|
|
1858
|
-
return (async () => {
|
|
1859
|
-
const sourceMetadata = await this.store.client[chunkQR7IBJPZ_cjs.additionalContext].ontologyProvider.getObjectDefinition(this.#sourceApiName);
|
|
1860
|
-
const linkDef = sourceMetadata.links?.[this.#linkName];
|
|
1861
|
-
if (!linkDef || linkDef.targetType !== objectType) return;
|
|
1862
|
-
const promise = this.revalidate(true);
|
|
1863
|
-
changes?.modified.add(this.cacheKey);
|
|
1864
|
-
return promise;
|
|
1865
|
-
})();
|
|
1866
2121
|
}
|
|
2122
|
+
return Promise.resolve();
|
|
1867
2123
|
};
|
|
1868
2124
|
};
|
|
1869
2125
|
|
|
1870
|
-
// src/observable/internal/links/LinksHelper.ts
|
|
1871
|
-
var LinksHelper = class extends AbstractHelper {
|
|
1872
|
-
constructor(store, whereCanonicalizer, orderByCanonicalizer) {
|
|
1873
|
-
super(store);
|
|
1874
|
-
this.whereCanonicalizer = whereCanonicalizer;
|
|
1875
|
-
this.orderByCanonicalizer = orderByCanonicalizer;
|
|
1876
|
-
}
|
|
1877
|
-
getQuery(options) {
|
|
1878
|
-
const {
|
|
1879
|
-
apiName
|
|
1880
|
-
} = options.srcType;
|
|
1881
|
-
const canonWhere = this.whereCanonicalizer.canonicalize(options.where ?? {});
|
|
1882
|
-
const canonOrderBy = this.orderByCanonicalizer.canonicalize(options.orderBy ?? {});
|
|
1883
|
-
const linkCacheKey = this.store.getCacheKey("specificLink", apiName, options.pk, options.linkName, canonWhere, canonOrderBy);
|
|
1884
|
-
return this.store.getQuery(linkCacheKey, () => {
|
|
1885
|
-
return new SpecificLinkQuery(this.store, this.store.getSubject(linkCacheKey), linkCacheKey, options);
|
|
1886
|
-
});
|
|
1887
|
-
}
|
|
1888
|
-
};
|
|
1889
|
-
|
|
1890
|
-
// src/observable/internal/list/ListsHelper.ts
|
|
1891
|
-
var ListsHelper = class extends AbstractHelper {
|
|
1892
|
-
constructor(store, whereCanonicalizer, orderByCanonicalizer) {
|
|
1893
|
-
super(store);
|
|
1894
|
-
this.whereCanonicalizer = whereCanonicalizer;
|
|
1895
|
-
this.orderByCanonicalizer = orderByCanonicalizer;
|
|
1896
|
-
}
|
|
1897
|
-
observe(options, subFn) {
|
|
1898
|
-
const ret = super.observe(options, subFn);
|
|
1899
|
-
if (options.streamUpdates) {
|
|
1900
|
-
ret.query.registerStreamUpdates(ret.subscription);
|
|
1901
|
-
}
|
|
1902
|
-
return ret;
|
|
1903
|
-
}
|
|
1904
|
-
getQuery(options) {
|
|
1905
|
-
const {
|
|
1906
|
-
type: {
|
|
1907
|
-
apiName,
|
|
1908
|
-
type
|
|
1909
|
-
},
|
|
1910
|
-
where,
|
|
1911
|
-
orderBy
|
|
1912
|
-
} = options;
|
|
1913
|
-
const canonWhere = this.whereCanonicalizer.canonicalize(where ?? {});
|
|
1914
|
-
const canonOrderBy = this.orderByCanonicalizer.canonicalize(orderBy ?? {});
|
|
1915
|
-
const listCacheKey = this.store.getCacheKey("list", type, apiName, canonWhere, canonOrderBy);
|
|
1916
|
-
return this.store.getQuery(listCacheKey, () => {
|
|
1917
|
-
return new ListQuery(this.store, this.store.getSubject(listCacheKey), type, apiName, canonWhere, canonOrderBy, listCacheKey, options);
|
|
1918
|
-
});
|
|
1919
|
-
}
|
|
1920
|
-
};
|
|
1921
|
-
|
|
1922
2126
|
// src/observable/internal/object/ObjectsHelper.ts
|
|
1923
2127
|
var ObjectsHelper = class extends AbstractHelper {
|
|
1924
2128
|
observe(options, subFn) {
|
|
@@ -1929,11 +2133,22 @@ var ObjectsHelper = class extends AbstractHelper {
|
|
|
1929
2133
|
const {
|
|
1930
2134
|
pk
|
|
1931
2135
|
} = options;
|
|
1932
|
-
const objectCacheKey = this.
|
|
1933
|
-
return this.store.
|
|
2136
|
+
const objectCacheKey = this.cacheKeys.get("object", apiName, pk);
|
|
2137
|
+
return this.store.queries.get(objectCacheKey, () => new ObjectQuery(this.store, this.store.subjects.get(objectCacheKey), apiName, pk, objectCacheKey, {
|
|
1934
2138
|
dedupeInterval: 0
|
|
1935
2139
|
}));
|
|
1936
2140
|
}
|
|
2141
|
+
/**
|
|
2142
|
+
* Internal helper method for writing objects to the store and returning their
|
|
2143
|
+
* object keys
|
|
2144
|
+
* @internal
|
|
2145
|
+
*/
|
|
2146
|
+
storeOsdkInstances(values, batch) {
|
|
2147
|
+
return values.map((v) => this.getQuery({
|
|
2148
|
+
apiName: v.$apiName,
|
|
2149
|
+
pk: v.$primaryKey
|
|
2150
|
+
}).writeToStore(v, "loaded", batch).cacheKey);
|
|
2151
|
+
}
|
|
1937
2152
|
};
|
|
1938
2153
|
var defaultMakeData = () => /* @__PURE__ */ Object.create(null);
|
|
1939
2154
|
var WeakRefTrie = class {
|
|
@@ -1969,6 +2184,8 @@ var WeakRefTrie = class {
|
|
|
1969
2184
|
return this.#trie.removeArray(array)?.deref();
|
|
1970
2185
|
}
|
|
1971
2186
|
};
|
|
2187
|
+
|
|
2188
|
+
// src/observable/internal/OrderByCanonicalizer.ts
|
|
1972
2189
|
var OrderByCanonicalizer = class {
|
|
1973
2190
|
#trie = new WeakRefTrie((array) => {
|
|
1974
2191
|
const pairs = array.reduce(function(result, _, index, array2) {
|
|
@@ -1989,49 +2206,28 @@ var OrderByCanonicalizer = class {
|
|
|
1989
2206
|
};
|
|
1990
2207
|
};
|
|
1991
2208
|
|
|
1992
|
-
// src/observable/internal/
|
|
1993
|
-
var
|
|
1994
|
-
|
|
1995
|
-
//
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
this.keepAlive = keepAlive;
|
|
2000
|
-
this.cleanup = cleanup;
|
|
2001
|
-
}
|
|
2002
|
-
register(key) {
|
|
2003
|
-
if (!this.refCounts.has(key)) {
|
|
2004
|
-
this.gcMap.set(key, Date.now() + this.keepAlive);
|
|
2005
|
-
}
|
|
2006
|
-
return key;
|
|
2007
|
-
}
|
|
2008
|
-
retain(key) {
|
|
2009
|
-
const count = this.refCounts.get(key) ?? 0;
|
|
2010
|
-
this.refCounts.set(key, count + 1);
|
|
2011
|
-
if (this.gcMap.has(key)) {
|
|
2012
|
-
this.gcMap.delete(key);
|
|
2013
|
-
}
|
|
2209
|
+
// src/observable/internal/Queries.ts
|
|
2210
|
+
var Queries = class {
|
|
2211
|
+
// we can use a regular Map here because the refCounting will
|
|
2212
|
+
// handle cleanup.
|
|
2213
|
+
map = /* @__PURE__ */ new Map();
|
|
2214
|
+
peek(cacheKey) {
|
|
2215
|
+
return this.map.get(cacheKey);
|
|
2014
2216
|
}
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
if (
|
|
2018
|
-
|
|
2019
|
-
this.
|
|
2020
|
-
} else {
|
|
2021
|
-
this.refCounts.set(key, count - 1);
|
|
2217
|
+
get(cacheKey, createQuery) {
|
|
2218
|
+
let query = this.peek(cacheKey);
|
|
2219
|
+
if (!query) {
|
|
2220
|
+
query = createQuery();
|
|
2221
|
+
this.map.set(cacheKey, query);
|
|
2022
2222
|
}
|
|
2223
|
+
return query;
|
|
2023
2224
|
}
|
|
2024
|
-
|
|
2025
|
-
return this.
|
|
2225
|
+
keys() {
|
|
2226
|
+
return this.map.keys();
|
|
2026
2227
|
}
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
if (deathTime < now) {
|
|
2031
|
-
this.gcMap.delete(key);
|
|
2032
|
-
this.cleanup(key);
|
|
2033
|
-
}
|
|
2034
|
-
}
|
|
2228
|
+
delete(cacheKey) {
|
|
2229
|
+
this.map.get(cacheKey)?.dispose();
|
|
2230
|
+
this.map.delete(cacheKey);
|
|
2035
2231
|
}
|
|
2036
2232
|
};
|
|
2037
2233
|
var WhereClauseCanonicalizer = class {
|
|
@@ -2066,7 +2262,7 @@ var WhereClauseCanonicalizer = class {
|
|
|
2066
2262
|
options: []
|
|
2067
2263
|
};
|
|
2068
2264
|
this.#existingOptions.set(cacheKey, lookupEntry);
|
|
2069
|
-
const canon = lookupEntry.options.find((ref) =>
|
|
2265
|
+
const canon = lookupEntry.options.find((ref) => deepEqual4__default.default(ref.deref(), calculatedCanon))?.deref() ?? calculatedCanon;
|
|
2070
2266
|
if (canon === calculatedCanon) {
|
|
2071
2267
|
lookupEntry.options.push(new WeakRef(canon));
|
|
2072
2268
|
}
|
|
@@ -2100,69 +2296,40 @@ var WhereClauseCanonicalizer = class {
|
|
|
2100
2296
|
};
|
|
2101
2297
|
|
|
2102
2298
|
// src/observable/internal/Store.ts
|
|
2103
|
-
function createInitEntry(cacheKey) {
|
|
2104
|
-
return {
|
|
2105
|
-
cacheKey,
|
|
2106
|
-
status: "init",
|
|
2107
|
-
value: void 0,
|
|
2108
|
-
lastUpdated: 0
|
|
2109
|
-
};
|
|
2110
|
-
}
|
|
2111
2299
|
var Store = class {
|
|
2112
2300
|
whereCanonicalizer = new WhereClauseCanonicalizer();
|
|
2113
2301
|
orderByCanonicalizer = new OrderByCanonicalizer();
|
|
2114
|
-
#truthLayer = new Layer(void 0, void 0);
|
|
2115
|
-
#topLayer;
|
|
2116
2302
|
/** @internal */
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
// we are currently only using this for debug logging and should just remove it in the future if that
|
|
2124
|
-
// continues to be true
|
|
2125
|
-
#finalizationRegistry;
|
|
2303
|
+
queries = new Queries();
|
|
2304
|
+
layers = new Layers({
|
|
2305
|
+
logger: this.logger,
|
|
2306
|
+
onRevalidate: this.#maybeRevalidateQueries.bind(this)
|
|
2307
|
+
});
|
|
2308
|
+
subjects = this.layers.subjects;
|
|
2126
2309
|
// these are hopefully temporary
|
|
2127
2310
|
constructor(client) {
|
|
2128
|
-
this.
|
|
2129
|
-
this.logger = client[chunkQR7IBJPZ_cjs.additionalContext].logger?.child({}, {
|
|
2311
|
+
this.logger = client[chunk5KDG5ZET_cjs.additionalContext].logger?.child({}, {
|
|
2130
2312
|
msgPrefix: "Store"
|
|
2131
2313
|
});
|
|
2132
|
-
this.
|
|
2133
|
-
this.
|
|
2134
|
-
|
|
2135
|
-
this.#topLayer = this.#truthLayer;
|
|
2136
|
-
this.#cacheKeys = new CacheKeys(this.whereCanonicalizer, this.orderByCanonicalizer, (k) => {
|
|
2137
|
-
this.#refCounts.register(k);
|
|
2138
|
-
});
|
|
2139
|
-
setInterval(() => {
|
|
2140
|
-
this.#refCounts.gc();
|
|
2141
|
-
}, 1e3);
|
|
2142
|
-
this.#finalizationRegistry = new FinalizationRegistry((cleanupCallback) => {
|
|
2143
|
-
try {
|
|
2144
|
-
cleanupCallback();
|
|
2145
|
-
} catch (e) {
|
|
2146
|
-
console.error("Caught an error while running a finalization callback", e);
|
|
2147
|
-
}
|
|
2314
|
+
this.client = client;
|
|
2315
|
+
this.cacheKeys = new CacheKeys({
|
|
2316
|
+
onDestroy: this.#cleanupCacheKey
|
|
2148
2317
|
});
|
|
2318
|
+
this.lists = new ListsHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer);
|
|
2319
|
+
this.objects = new ObjectsHelper(this, this.cacheKeys);
|
|
2320
|
+
this.links = new LinksHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer);
|
|
2149
2321
|
}
|
|
2150
2322
|
/**
|
|
2151
2323
|
* Called after a key is no longer retained and the timeout has elapsed
|
|
2152
2324
|
* @param key
|
|
2153
2325
|
*/
|
|
2154
2326
|
#cleanupCacheKey = (key) => {
|
|
2155
|
-
const subject = this.
|
|
2156
|
-
this.#cacheKeys.remove(key);
|
|
2327
|
+
const subject = this.subjects.peek(key);
|
|
2157
2328
|
if (process.env.NODE_ENV !== "production") {
|
|
2158
2329
|
!subject ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false) : invariant2__default.default(false) : void 0;
|
|
2159
2330
|
}
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
this.#cacheKeyToSubject.delete(key);
|
|
2163
|
-
}
|
|
2164
|
-
this.#queries.get(key)?.dispose();
|
|
2165
|
-
this.#queries.delete(key);
|
|
2331
|
+
this.subjects.delete(key);
|
|
2332
|
+
this.queries.delete(key);
|
|
2166
2333
|
};
|
|
2167
2334
|
applyAction = async (action, args, opts) => {
|
|
2168
2335
|
return await new ActionApplication(this).applyAction(action, args, opts);
|
|
@@ -2174,120 +2341,18 @@ var Store = class {
|
|
|
2174
2341
|
});
|
|
2175
2342
|
return result;
|
|
2176
2343
|
};
|
|
2177
|
-
removeLayer(layerId) {
|
|
2178
|
-
!(layerId != null) ? process.env.NODE_ENV !== "production" ? invariant2__default.default(false, "undefined is the reserved layerId for the truth layer") : invariant2__default.default(false) : void 0;
|
|
2179
|
-
let currentLayer = this.#topLayer;
|
|
2180
|
-
const cacheKeys = /* @__PURE__ */ new Map();
|
|
2181
|
-
while (currentLayer != null && currentLayer.parentLayer != null) {
|
|
2182
|
-
if (currentLayer.layerId === layerId) {
|
|
2183
|
-
for (const [k, v] of currentLayer.entries()) {
|
|
2184
|
-
if (cacheKeys.has(k)) continue;
|
|
2185
|
-
cacheKeys.set(k, v);
|
|
2186
|
-
}
|
|
2187
|
-
}
|
|
2188
|
-
currentLayer = currentLayer.parentLayer;
|
|
2189
|
-
}
|
|
2190
|
-
this.#topLayer = this.#topLayer.removeLayer(layerId);
|
|
2191
|
-
for (const [k, oldEntry] of cacheKeys) {
|
|
2192
|
-
const currentEntry = this.#topLayer.get(k);
|
|
2193
|
-
if (oldEntry !== currentEntry) {
|
|
2194
|
-
this.peekSubject(k)?.next({
|
|
2195
|
-
// eslint-disable-next-line @typescript-eslint/no-misused-spread
|
|
2196
|
-
...currentEntry ?? createInitEntry(k),
|
|
2197
|
-
isOptimistic: currentEntry?.value !== this.#truthLayer.get(k)?.value
|
|
2198
|
-
});
|
|
2199
|
-
}
|
|
2200
|
-
}
|
|
2201
|
-
}
|
|
2202
|
-
getCacheKey(type, ...args) {
|
|
2203
|
-
return this.#refCounts.register(this.#cacheKeys.get(type, ...args));
|
|
2204
|
-
}
|
|
2205
|
-
peekSubject = (cacheKey) => {
|
|
2206
|
-
return this.#cacheKeyToSubject.get(cacheKey);
|
|
2207
|
-
};
|
|
2208
|
-
getSubject = (cacheKey) => {
|
|
2209
|
-
let subject = this.#cacheKeyToSubject.get(cacheKey);
|
|
2210
|
-
if (!subject) {
|
|
2211
|
-
const initialValue = this.#topLayer.get(cacheKey) ?? createInitEntry(cacheKey);
|
|
2212
|
-
subject = new rxjs.BehaviorSubject({
|
|
2213
|
-
// eslint-disable-next-line @typescript-eslint/no-misused-spread
|
|
2214
|
-
...initialValue,
|
|
2215
|
-
isOptimistic: initialValue.value !== this.#truthLayer.get(cacheKey)?.value
|
|
2216
|
-
});
|
|
2217
|
-
this.#cacheKeyToSubject.set(cacheKey, subject);
|
|
2218
|
-
}
|
|
2219
|
-
return subject;
|
|
2220
|
-
};
|
|
2221
|
-
canonicalizeWhereClause(where) {
|
|
2222
|
-
return this.whereCanonicalizer.canonicalize(where);
|
|
2223
|
-
}
|
|
2224
|
-
peekQuery(cacheKey) {
|
|
2225
|
-
return this.#queries.get(cacheKey);
|
|
2226
|
-
}
|
|
2227
|
-
getQuery(cacheKey, createQuery) {
|
|
2228
|
-
let query = this.peekQuery(cacheKey);
|
|
2229
|
-
if (!query) {
|
|
2230
|
-
query = createQuery();
|
|
2231
|
-
this.#queries.set(cacheKey, query);
|
|
2232
|
-
}
|
|
2233
|
-
return query;
|
|
2234
|
-
}
|
|
2235
2344
|
getValue(cacheKey) {
|
|
2236
|
-
return this
|
|
2345
|
+
return this.layers.top.get(cacheKey);
|
|
2237
2346
|
}
|
|
2238
|
-
batch
|
|
2347
|
+
batch({
|
|
2239
2348
|
optimisticId,
|
|
2240
2349
|
changes = createChangedObjects()
|
|
2241
|
-
}, batchFn)
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
if (needsLayer) {
|
|
2248
|
-
this.#topLayer = this.#topLayer.addLayer(optimisticId);
|
|
2249
|
-
needsLayer = false;
|
|
2250
|
-
}
|
|
2251
|
-
},
|
|
2252
|
-
optimisticWrite: !!optimisticId,
|
|
2253
|
-
write: (cacheKey, value, status) => {
|
|
2254
|
-
const oldTopValue = this.#topLayer.get(cacheKey);
|
|
2255
|
-
if (optimisticId) batchContext.createLayerIfNeeded();
|
|
2256
|
-
const writeLayer = optimisticId ? this.#topLayer : this.#truthLayer;
|
|
2257
|
-
const newValue = new Entry(cacheKey, value, Date.now(), status);
|
|
2258
|
-
writeLayer.set(cacheKey, newValue);
|
|
2259
|
-
const newTopValue = this.#topLayer.get(cacheKey);
|
|
2260
|
-
if (oldTopValue !== newTopValue) {
|
|
2261
|
-
this.getSubject(cacheKey)?.next({
|
|
2262
|
-
// eslint-disable-next-line @typescript-eslint/no-misused-spread
|
|
2263
|
-
...newValue,
|
|
2264
|
-
isOptimistic: newTopValue?.value !== this.#truthLayer.get(cacheKey)?.value
|
|
2265
|
-
});
|
|
2266
|
-
}
|
|
2267
|
-
return newValue;
|
|
2268
|
-
},
|
|
2269
|
-
delete: (cacheKey, status) => {
|
|
2270
|
-
return batchContext.write(cacheKey, tombstone, status);
|
|
2271
|
-
},
|
|
2272
|
-
read: (cacheKey) => {
|
|
2273
|
-
return optimisticId ? this.#topLayer.get(cacheKey) : this.#truthLayer.get(cacheKey);
|
|
2274
|
-
}
|
|
2275
|
-
};
|
|
2276
|
-
const retVal = batchFn(batchContext);
|
|
2277
|
-
this.maybeRevalidateQueries(changes, optimisticId).catch((e) => {
|
|
2278
|
-
if (this.logger) {
|
|
2279
|
-
this.logger.error("Unhandled error in batch", e);
|
|
2280
|
-
} else {
|
|
2281
|
-
console.error("Unhandled error in batch", e);
|
|
2282
|
-
throw e;
|
|
2283
|
-
}
|
|
2284
|
-
});
|
|
2285
|
-
return {
|
|
2286
|
-
batchResult: batchContext,
|
|
2287
|
-
retVal,
|
|
2288
|
-
changes: batchContext.changes
|
|
2289
|
-
};
|
|
2290
|
-
};
|
|
2350
|
+
}, batchFn) {
|
|
2351
|
+
return this.layers.batch({
|
|
2352
|
+
optimisticId,
|
|
2353
|
+
changes
|
|
2354
|
+
}, batchFn);
|
|
2355
|
+
}
|
|
2291
2356
|
invalidateObject(apiName, pk) {
|
|
2292
2357
|
if (typeof apiName !== "string") {
|
|
2293
2358
|
apiName = apiName.apiName;
|
|
@@ -2300,34 +2365,31 @@ var Store = class {
|
|
|
2300
2365
|
true
|
|
2301
2366
|
);
|
|
2302
2367
|
}
|
|
2303
|
-
async maybeRevalidateQueries(changes, optimisticId) {
|
|
2368
|
+
async #maybeRevalidateQueries(changes, optimisticId) {
|
|
2369
|
+
const logger = process.env.NODE_ENV !== "production" ? this.logger?.child({
|
|
2370
|
+
methodName: "maybeRevalidateQueries"
|
|
2371
|
+
}) : void 0;
|
|
2304
2372
|
if (changes.isEmpty()) {
|
|
2305
2373
|
if (process.env.NODE_ENV !== "production") {
|
|
2306
|
-
|
|
2307
|
-
methodName: "maybeRevalidateQueries"
|
|
2308
|
-
}).debug("No changes, aborting");
|
|
2374
|
+
logger?.debug("No changes, aborting");
|
|
2309
2375
|
}
|
|
2310
2376
|
return;
|
|
2311
2377
|
}
|
|
2312
2378
|
if (process.env.NODE_ENV !== "production") {
|
|
2313
|
-
|
|
2314
|
-
methodName: "maybeRevalidateQueries"
|
|
2315
|
-
}).debug(DEBUG_ONLY__changesToString(changes), {
|
|
2379
|
+
logger?.debug(DEBUG_ONLY__changesToString(changes), {
|
|
2316
2380
|
optimisticId
|
|
2317
2381
|
});
|
|
2318
2382
|
}
|
|
2319
2383
|
try {
|
|
2320
2384
|
const promises = [];
|
|
2321
|
-
for (const cacheKey of this
|
|
2322
|
-
const promise = this.
|
|
2385
|
+
for (const cacheKey of this.queries.keys()) {
|
|
2386
|
+
const promise = this.queries.peek(cacheKey)?.maybeUpdateAndRevalidate?.(changes, optimisticId);
|
|
2323
2387
|
if (promise) promises.push(promise);
|
|
2324
2388
|
}
|
|
2325
2389
|
await Promise.all(promises);
|
|
2326
2390
|
} finally {
|
|
2327
2391
|
if (process.env.NODE_ENV !== "production") {
|
|
2328
|
-
|
|
2329
|
-
methodName: "maybeRevalidateQueries"
|
|
2330
|
-
}).debug("in finally", DEBUG_ONLY__changesToString(changes));
|
|
2392
|
+
logger?.debug("in finally", DEBUG_ONLY__changesToString(changes));
|
|
2331
2393
|
}
|
|
2332
2394
|
}
|
|
2333
2395
|
}
|
|
@@ -2352,30 +2414,24 @@ var Store = class {
|
|
|
2352
2414
|
}).info(changes ? DEBUG_ONLY__changesToString(changes) : void 0);
|
|
2353
2415
|
}
|
|
2354
2416
|
const promises = [];
|
|
2355
|
-
for (const cacheKey of this
|
|
2417
|
+
for (const cacheKey of this.layers.truth.keys()) {
|
|
2356
2418
|
if (changes && changes.modified.has(cacheKey)) {
|
|
2357
2419
|
continue;
|
|
2358
2420
|
}
|
|
2359
|
-
const query = this.
|
|
2421
|
+
const query = this.queries.peek(cacheKey);
|
|
2360
2422
|
if (!query) continue;
|
|
2361
2423
|
promises.push(query.invalidateObjectType(apiName, changes));
|
|
2362
2424
|
}
|
|
2363
2425
|
return Promise.allSettled(promises).then(() => void 0);
|
|
2364
2426
|
}
|
|
2365
|
-
retain(cacheKey) {
|
|
2366
|
-
this.#refCounts.retain(cacheKey);
|
|
2367
|
-
}
|
|
2368
|
-
release(cacheKey) {
|
|
2369
|
-
this.#refCounts.release(cacheKey);
|
|
2370
|
-
}
|
|
2371
2427
|
};
|
|
2372
2428
|
|
|
2373
2429
|
// src/observable/ObservableClient.ts
|
|
2374
2430
|
function createObservableClient(client) {
|
|
2375
|
-
const tweakedClient =
|
|
2376
|
-
...client[
|
|
2377
|
-
fetch: shared_net_fetch.createFetchHeaderMutator(client[
|
|
2378
|
-
headers.set("Fetch-User-Agent", [headers.get("Fetch-User-Agent"),
|
|
2431
|
+
const tweakedClient = chunk4GWXMQZE_cjs.createClientFromContext({
|
|
2432
|
+
...client[chunk5KDG5ZET_cjs.additionalContext],
|
|
2433
|
+
fetch: shared_net_fetch.createFetchHeaderMutator(client[chunk5KDG5ZET_cjs.additionalContext].fetch, (headers) => {
|
|
2434
|
+
headers.set("Fetch-User-Agent", [headers.get("Fetch-User-Agent"), chunk4GWXMQZE_cjs.OBSERVABLE_USER_AGENT].filter((x) => x && x?.length > 0).join(" "));
|
|
2379
2435
|
return headers;
|
|
2380
2436
|
})
|
|
2381
2437
|
});
|
|
@@ -2418,11 +2474,11 @@ function getOsdkConfig(ontologyRid) {
|
|
|
2418
2474
|
|
|
2419
2475
|
Object.defineProperty(exports, "createClientWithTransaction", {
|
|
2420
2476
|
enumerable: true,
|
|
2421
|
-
get: function () { return
|
|
2477
|
+
get: function () { return chunk4GWXMQZE_cjs.createClientWithTransaction; }
|
|
2422
2478
|
});
|
|
2423
2479
|
Object.defineProperty(exports, "augment", {
|
|
2424
2480
|
enumerable: true,
|
|
2425
|
-
get: function () { return
|
|
2481
|
+
get: function () { return chunk5KDG5ZET_cjs.augment; }
|
|
2426
2482
|
});
|
|
2427
2483
|
exports.createObservableClient = createObservableClient;
|
|
2428
2484
|
exports.getMetaTagContent = getMetaTagContent;
|