@osdk/client 2.7.0-beta.9 → 2.7.0
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 +236 -0
- package/build/browser/MinimalClientContext.js.map +1 -1
- package/build/browser/actions/actions.test.js +9 -8
- package/build/browser/actions/actions.test.js.map +1 -1
- package/build/browser/actions/applyAction.js +0 -4
- package/build/browser/actions/applyAction.js.map +1 -1
- package/build/browser/createClient.js +1 -2
- package/build/browser/createClient.js.map +1 -1
- package/build/browser/createMinimalClient.js +0 -1
- package/build/browser/createMinimalClient.js.map +1 -1
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +1 -17
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
- package/build/browser/index.js +1 -1
- package/build/browser/index.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.js +14 -9
- package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
- package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
- package/build/browser/object/SimpleOsdkProperties.js.map +1 -1
- package/build/browser/object/aggregate.js +0 -1
- package/build/browser/object/aggregate.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
- package/build/browser/object/fetchPage.js +0 -2
- package/build/browser/object/fetchPage.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js +13 -4
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +46 -2
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +1 -1
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/objectSet/fetchLinksPage.js +0 -1
- package/build/browser/objectSet/fetchLinksPage.js.map +1 -1
- package/build/browser/observable/FunctionPayload.js +2 -0
- package/build/browser/observable/FunctionPayload.js.map +1 -0
- package/build/browser/observable/ObservableClient.js.map +1 -1
- package/build/browser/observable/internal/BulkObjectLoader.js +2 -1
- package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -1
- package/build/browser/observable/internal/Changes.js +4 -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/ObservableClientImpl.js +21 -1
- package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/browser/observable/internal/RidListCanonicalizer.js +30 -0
- package/build/browser/observable/internal/RidListCanonicalizer.js.map +1 -0
- package/build/browser/observable/internal/RidListCanonicalizer.test.js +50 -0
- package/build/browser/observable/internal/RidListCanonicalizer.test.js.map +1 -0
- package/build/browser/observable/internal/Store.js +11 -1
- package/build/browser/observable/internal/Store.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +57 -4
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/actions/ActionApplication.js +12 -9
- package/build/browser/observable/internal/actions/ActionApplication.js.map +1 -1
- package/build/browser/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
- package/build/browser/observable/internal/base-list/BaseListQuery.js +15 -9
- package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
- package/build/browser/observable/internal/base-list/createCollectionConnectable.js +4 -2
- package/build/browser/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
- package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js +1 -2
- package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
- package/build/browser/observable/internal/evaluateFilter.js +1 -1
- package/build/browser/observable/internal/evaluateFilter.js.map +1 -1
- package/build/browser/observable/internal/evaluateFilter.test.js +105 -0
- package/build/browser/observable/internal/evaluateFilter.test.js.map +1 -0
- package/build/browser/observable/internal/function/FunctionCacheKey.js +26 -0
- package/build/browser/observable/internal/function/FunctionCacheKey.js.map +1 -0
- package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js +151 -0
- package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -0
- package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.test.js +186 -0
- package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.test.js.map +1 -0
- package/build/browser/observable/internal/function/FunctionQuery.js +137 -0
- package/build/browser/observable/internal/function/FunctionQuery.js.map +1 -0
- package/build/browser/observable/internal/function/FunctionQuery.test.js +278 -0
- package/build/browser/observable/internal/function/FunctionQuery.test.js.map +1 -0
- package/build/browser/observable/internal/function/FunctionsHelper.js +92 -0
- package/build/browser/observable/internal/function/FunctionsHelper.js.map +1 -0
- package/build/browser/observable/internal/links/SpecificLinkQuery.js +2 -1
- package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -1
- package/build/browser/observable/internal/list/InterfaceListQuery.js +27 -10
- package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -1
- package/build/browser/observable/internal/list/ListCacheKey.js +1 -0
- package/build/browser/observable/internal/list/ListCacheKey.js.map +1 -1
- package/build/browser/observable/internal/list/ListQuery.js +10 -4
- package/build/browser/observable/internal/list/ListQuery.js.map +1 -1
- package/build/browser/observable/internal/list/ListQuery.test.js +167 -3
- package/build/browser/observable/internal/list/ListQuery.test.js.map +1 -1
- package/build/browser/observable/internal/list/ListsHelper.js +6 -3
- package/build/browser/observable/internal/list/ListsHelper.js.map +1 -1
- package/build/browser/observable/internal/list/ObjectListQuery.js +23 -9
- package/build/browser/observable/internal/list/ObjectListQuery.js.map +1 -1
- package/build/browser/observable/internal/object/ObjectQuery.js +15 -1
- package/build/browser/observable/internal/object/ObjectQuery.js.map +1 -1
- package/build/browser/observable/internal/object/ObjectsHelper.js +1 -3
- package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -1
- package/build/browser/observable/internal/objectMatchesWhereClause.test.js +11 -1
- package/build/browser/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
- package/build/browser/observable/internal/objectset/ObjectSetQuery.js +6 -2
- package/build/browser/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
- package/build/browser/observable/internal/testUtils.js +8 -5
- package/build/browser/observable/internal/testUtils.js.map +1 -1
- package/build/browser/observable/internal/utils/rdpFieldOperations.js +6 -3
- package/build/browser/observable/internal/utils/rdpFieldOperations.js.map +1 -1
- package/build/browser/ontology/loadActionMetadata.js +1 -3
- package/build/browser/ontology/loadActionMetadata.js.map +1 -1
- package/build/browser/ontology/loadFullObjectMetadata.js +1 -2
- package/build/browser/ontology/loadFullObjectMetadata.js.map +1 -1
- package/build/browser/ontology/loadInterfaceMetadata.js +1 -2
- package/build/browser/ontology/loadInterfaceMetadata.js.map +1 -1
- package/build/browser/public/unstable-do-not-use.js.map +1 -1
- package/build/browser/queries/applyQuery.js +14 -0
- package/build/browser/queries/applyQuery.js.map +1 -1
- package/build/browser/queries/queries.test.js +14 -2
- package/build/browser/queries/queries.test.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -2
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/browser/util/isObjectSpecifiersObject.js.map +1 -1
- package/build/browser/util/toDataValue.js +0 -5
- package/build/browser/util/toDataValue.js.map +1 -1
- package/build/browser/util/toDataValue.test.js +2 -7
- package/build/browser/util/toDataValue.test.js.map +1 -1
- package/build/cjs/{Client-DaUJl7jZ.d.cts → Client-Cmx6x_V1.d.cts} +1 -1
- package/build/cjs/{chunk-IQJTM3KW.cjs → chunk-W4BHRZWL.cjs} +79 -82
- package/build/cjs/chunk-W4BHRZWL.cjs.map +1 -0
- package/build/cjs/{chunk-PARVKNVB.cjs → chunk-Y362HOIZ.cjs} +30 -35
- package/build/cjs/chunk-Y362HOIZ.cjs.map +1 -0
- package/build/cjs/{createClient-D5G3qzAO.d.cts → createClient-BDmrDOzZ.d.cts} +1 -2
- package/build/cjs/index.cjs +8 -12
- package/build/cjs/index.cjs.map +1 -1
- package/build/cjs/index.d.cts +3 -3
- package/build/cjs/public/internal.cjs +8 -8
- package/build/cjs/public/internal.d.cts +1 -1
- package/build/cjs/public/unstable-do-not-use.cjs +537 -95
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/cjs/public/unstable-do-not-use.d.cts +75 -4
- package/build/esm/MinimalClientContext.js.map +1 -1
- package/build/esm/actions/actions.test.js +9 -8
- package/build/esm/actions/actions.test.js.map +1 -1
- package/build/esm/actions/applyAction.js +0 -4
- package/build/esm/actions/applyAction.js.map +1 -1
- package/build/esm/createClient.js +1 -2
- package/build/esm/createClient.js.map +1 -1
- package/build/esm/createMinimalClient.js +0 -1
- package/build/esm/createMinimalClient.js.map +1 -1
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +1 -17
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
- package/build/esm/index.js +1 -1
- package/build/esm/index.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.js +14 -9
- package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
- package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
- package/build/esm/object/SimpleOsdkProperties.js.map +1 -1
- package/build/esm/object/aggregate.js +0 -1
- package/build/esm/object/aggregate.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
- package/build/esm/object/fetchPage.js +0 -2
- package/build/esm/object/fetchPage.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js +13 -4
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +46 -2
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +1 -1
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/objectSet/fetchLinksPage.js +0 -1
- package/build/esm/objectSet/fetchLinksPage.js.map +1 -1
- package/build/esm/observable/FunctionPayload.js +2 -0
- package/build/esm/observable/FunctionPayload.js.map +1 -0
- package/build/esm/observable/ObservableClient.js.map +1 -1
- package/build/esm/observable/internal/BulkObjectLoader.js +2 -1
- package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -1
- package/build/esm/observable/internal/Changes.js +4 -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/ObservableClientImpl.js +21 -1
- package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/esm/observable/internal/RidListCanonicalizer.js +30 -0
- package/build/esm/observable/internal/RidListCanonicalizer.js.map +1 -0
- package/build/esm/observable/internal/RidListCanonicalizer.test.js +50 -0
- package/build/esm/observable/internal/RidListCanonicalizer.test.js.map +1 -0
- package/build/esm/observable/internal/Store.js +11 -1
- package/build/esm/observable/internal/Store.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +57 -4
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/actions/ActionApplication.js +12 -9
- package/build/esm/observable/internal/actions/ActionApplication.js.map +1 -1
- package/build/esm/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
- package/build/esm/observable/internal/base-list/BaseListQuery.js +15 -9
- package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
- package/build/esm/observable/internal/base-list/createCollectionConnectable.js +4 -2
- package/build/esm/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
- package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js +1 -2
- package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
- package/build/esm/observable/internal/evaluateFilter.js +1 -1
- package/build/esm/observable/internal/evaluateFilter.js.map +1 -1
- package/build/esm/observable/internal/evaluateFilter.test.js +105 -0
- package/build/esm/observable/internal/evaluateFilter.test.js.map +1 -0
- package/build/esm/observable/internal/function/FunctionCacheKey.js +26 -0
- package/build/esm/observable/internal/function/FunctionCacheKey.js.map +1 -0
- package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js +151 -0
- package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -0
- package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.test.js +186 -0
- package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.test.js.map +1 -0
- package/build/esm/observable/internal/function/FunctionQuery.js +137 -0
- package/build/esm/observable/internal/function/FunctionQuery.js.map +1 -0
- package/build/esm/observable/internal/function/FunctionQuery.test.js +278 -0
- package/build/esm/observable/internal/function/FunctionQuery.test.js.map +1 -0
- package/build/esm/observable/internal/function/FunctionsHelper.js +92 -0
- package/build/esm/observable/internal/function/FunctionsHelper.js.map +1 -0
- package/build/esm/observable/internal/links/SpecificLinkQuery.js +2 -1
- package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -1
- package/build/esm/observable/internal/list/InterfaceListQuery.js +27 -10
- package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -1
- package/build/esm/observable/internal/list/ListCacheKey.js +1 -0
- package/build/esm/observable/internal/list/ListCacheKey.js.map +1 -1
- package/build/esm/observable/internal/list/ListQuery.js +10 -4
- package/build/esm/observable/internal/list/ListQuery.js.map +1 -1
- package/build/esm/observable/internal/list/ListQuery.test.js +167 -3
- package/build/esm/observable/internal/list/ListQuery.test.js.map +1 -1
- package/build/esm/observable/internal/list/ListsHelper.js +6 -3
- package/build/esm/observable/internal/list/ListsHelper.js.map +1 -1
- package/build/esm/observable/internal/list/ObjectListQuery.js +23 -9
- package/build/esm/observable/internal/list/ObjectListQuery.js.map +1 -1
- package/build/esm/observable/internal/object/ObjectQuery.js +15 -1
- package/build/esm/observable/internal/object/ObjectQuery.js.map +1 -1
- package/build/esm/observable/internal/object/ObjectsHelper.js +1 -3
- package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -1
- package/build/esm/observable/internal/objectMatchesWhereClause.test.js +11 -1
- package/build/esm/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
- package/build/esm/observable/internal/objectset/ObjectSetQuery.js +6 -2
- package/build/esm/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
- package/build/esm/observable/internal/testUtils.js +8 -5
- package/build/esm/observable/internal/testUtils.js.map +1 -1
- package/build/esm/observable/internal/utils/rdpFieldOperations.js +6 -3
- package/build/esm/observable/internal/utils/rdpFieldOperations.js.map +1 -1
- package/build/esm/ontology/loadActionMetadata.js +1 -3
- package/build/esm/ontology/loadActionMetadata.js.map +1 -1
- package/build/esm/ontology/loadFullObjectMetadata.js +1 -2
- package/build/esm/ontology/loadFullObjectMetadata.js.map +1 -1
- package/build/esm/ontology/loadInterfaceMetadata.js +1 -2
- package/build/esm/ontology/loadInterfaceMetadata.js.map +1 -1
- package/build/esm/public/unstable-do-not-use.js.map +1 -1
- package/build/esm/queries/applyQuery.js +14 -0
- package/build/esm/queries/applyQuery.js.map +1 -1
- package/build/esm/queries/queries.test.js +14 -2
- package/build/esm/queries/queries.test.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -2
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/esm/util/isObjectSpecifiersObject.js.map +1 -1
- package/build/esm/util/toDataValue.js +0 -5
- package/build/esm/util/toDataValue.js.map +1 -1
- package/build/esm/util/toDataValue.test.js +2 -7
- package/build/esm/util/toDataValue.test.js.map +1 -1
- package/build/types/MinimalClientContext.d.ts +1 -1
- package/build/types/actions/applyAction.d.ts.map +1 -1
- package/build/types/createClient.d.ts +0 -1
- 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/objectSet/createObjectSet.d.ts +14 -1
- package/build/types/objectSet/createObjectSet.d.ts.map +1 -1
- package/build/types/objectSet/fetchLinksPage.d.ts +9 -1
- package/build/types/objectSet/fetchLinksPage.d.ts.map +1 -1
- package/build/types/observable/FunctionPayload.d.ts +10 -0
- package/build/types/observable/FunctionPayload.d.ts.map +1 -0
- package/build/types/observable/ObservableClient.d.ts +73 -1
- package/build/types/observable/ObservableClient.d.ts.map +1 -1
- package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -1
- package/build/types/observable/internal/Changes.d.ts +5 -3
- package/build/types/observable/internal/Changes.d.ts.map +1 -1
- package/build/types/observable/internal/KnownCacheKey.d.ts +2 -1
- package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -1
- package/build/types/observable/internal/RidListCanonicalizer.d.ts +5 -0
- package/build/types/observable/internal/RidListCanonicalizer.d.ts.map +1 -0
- package/build/types/observable/internal/RidListCanonicalizer.test.d.ts +1 -0
- package/build/types/observable/internal/RidListCanonicalizer.test.d.ts.map +1 -0
- package/build/types/observable/internal/Store.d.ts +7 -1
- package/build/types/observable/internal/Store.d.ts.map +1 -1
- package/build/types/observable/internal/Store.test.d.ts.map +1 -1
- package/build/types/observable/internal/actions/ActionApplication.d.ts.map +1 -1
- package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts +3 -0
- package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts.map +1 -1
- package/build/types/observable/internal/base-list/BaseListQuery.d.ts +3 -1
- package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/evaluateFilter.test.d.ts +1 -0
- package/build/types/observable/internal/evaluateFilter.test.d.ts.map +1 -0
- package/build/types/observable/internal/function/FunctionCacheKey.d.ts +17 -0
- package/build/types/observable/internal/function/FunctionCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/function/FunctionParamsCanonicalizer.d.ts +16 -0
- package/build/types/observable/internal/function/FunctionParamsCanonicalizer.d.ts.map +1 -0
- package/build/types/observable/internal/function/FunctionParamsCanonicalizer.test.d.ts +1 -0
- package/build/types/observable/internal/function/FunctionParamsCanonicalizer.test.d.ts.map +1 -0
- package/build/types/observable/internal/function/FunctionQuery.d.ts +40 -0
- package/build/types/observable/internal/function/FunctionQuery.d.ts.map +1 -0
- package/build/types/observable/internal/function/FunctionQuery.test.d.ts +1 -0
- package/build/types/observable/internal/function/FunctionQuery.test.d.ts.map +1 -0
- package/build/types/observable/internal/function/FunctionsHelper.d.ts +25 -0
- package/build/types/observable/internal/function/FunctionsHelper.d.ts.map +1 -0
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -1
- package/build/types/observable/internal/list/InterfaceListQuery.d.ts +3 -0
- package/build/types/observable/internal/list/InterfaceListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/list/ListCacheKey.d.ts +2 -1
- package/build/types/observable/internal/list/ListCacheKey.d.ts.map +1 -1
- package/build/types/observable/internal/list/ListQuery.d.ts +1 -1
- package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/list/ListsHelper.d.ts +3 -1
- package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -1
- package/build/types/observable/internal/list/ObjectListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/object/ObjectQuery.d.ts.map +1 -1
- package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -1
- package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts +1 -0
- package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts.map +1 -1
- package/build/types/observable/internal/testUtils.d.ts.map +1 -1
- package/build/types/observable/internal/utils/rdpFieldOperations.d.ts.map +1 -1
- package/build/types/public/unstable-do-not-use.d.ts +2 -1
- package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
- package/build/types/queries/applyQuery.d.ts.map +1 -1
- package/build/types/util/isObjectSpecifiersObject.d.ts +1 -0
- package/build/types/util/isObjectSpecifiersObject.d.ts.map +1 -1
- package/package.json +11 -12
- package/build/cjs/chunk-IQJTM3KW.cjs.map +0 -1
- package/build/cjs/chunk-PARVKNVB.cjs.map +0 -1
- package/build/cjs/delay-W2TSML2P.cjs +0 -75
- package/build/cjs/delay-W2TSML2P.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/public/unstable-do-not-use.ts","../../../src/observable/computeObjectSetCacheKey.ts","../../../src/observable/internal/OrderByCanonicalizer.ts","../../../src/observable/internal/WeakRefTrie.ts","../../../src/observable/internal/WhereClauseCanonicalizer.ts","../../../src/observable/ObservableClient.ts","../../../src/observable/internal/ObservableClientImpl.ts","../../../src/observable/internal/UnsubscribableWrapper.ts","../../../src/observable/internal/Store.ts","../../../src/observable/DebugFlags.ts","../../../src/observable/internal/actions/ActionApplication.ts","../../../src/observable/internal/actions/OptimisticJob.ts","../../../src/observable/internal/OptimisticId.ts","../../../src/observable/internal/aggregation/AggregationCacheKey.ts","../../../src/observable/internal/aggregation/AggregationsHelper.ts","../../../src/observable/internal/AbstractHelper.ts","../../../src/observable/internal/QuerySubscription.ts","../../../src/observable/internal/aggregation/ObjectAggregationQuery.ts","../../../src/observable/internal/aggregation/AggregationQuery.ts","../../../src/observable/internal/Query.ts","../../../src/observable/internal/CacheKey.ts","../../../src/observable/internal/CacheKeys.ts","../../../src/observable/internal/RefCounts.ts","../../../src/observable/internal/Changes.ts","../../../src/observable/internal/IntersectCanonicalizer.ts","../../../src/observable/internal/Canonicalizer.ts","../../../src/observable/internal/Layers.ts","../../../src/observable/internal/createInitEntry.ts","../../../src/observable/internal/Layer.ts","../../../src/observable/internal/WeakMapWithEntries.ts","../../../src/observable/internal/Subjects.ts","../../../src/observable/internal/tombstone.ts","../../../src/observable/internal/links/LinksHelper.ts","../../../src/observable/internal/links/SpecificLinkQuery.ts","../../../src/observable/internal/base-list/BaseListQuery.ts","../../../src/observable/internal/isObjectInstance.ts","../../../src/observable/internal/list/ListCacheKey.ts","../../../src/observable/internal/sorting/SortingStrategy.ts","../../../src/observable/internal/base-list/createCollectionConnectable.ts","../../../src/observable/internal/base-list/removeDuplicates.ts","../../../src/observable/internal/list/ListsHelper.ts","../../../src/observable/internal/list/InterfaceListQuery.ts","../../../src/observable/internal/list/ListQuery.ts","../../../src/observable/internal/getObjectTypesThatInvalidate.ts","../../../src/observable/internal/objectMatchesWhereClause.ts","../../../src/observable/internal/evaluateFilter.ts","../../../src/observable/internal/list/ObjectListQuery.ts","../../../src/observable/internal/object/ObjectCacheKey.ts","../../../src/observable/internal/object/ObjectCacheKeyRegistry.ts","../../../src/observable/internal/utils/rdpFieldOperations.ts","../../../src/observable/internal/object/ObjectsHelper.ts","../../../src/observable/internal/object/ObjectQuery.ts","../../../src/observable/internal/BulkObjectLoader.ts","../../../../../node_modules/.pnpm/p-defer@4.0.1/node_modules/p-defer/index.js","../../../src/observable/internal/objectset/ObjectSetHelper.ts","../../../src/observable/internal/objectset/ObjectSetQuery.ts","../../../src/observable/internal/PivotCanonicalizer.ts","../../../src/observable/internal/Queries.ts","../../../src/observable/internal/RdpCanonicalizer.ts","../../../src/public-utils/osdkConfig.ts"],"names":["init_cjs_shims","Trie","array","deepEqual","invariant","getWireObjectSet","Subscription","additionalContext","connectable","map","BehaviorSubject","whereCanonicalizer","MultiMap","API_NAME_IDX","WHERE_IDX","RDP_IDX","switchMap","of","combineLatest","distinctUntilChanged","scheduled","asapScheduler","ReplaySubject","orderByCanonicalizer","os","ObjectDefRef","groupBy","UnderlyingOsdkObject","objectSet","createOsdkObject","ClientRef","DefaultWeakMap","DefaultMap","PalantirApiError","createWithPropertiesObjectSet","createClientFromContext","createFetchHeaderMutator","OBSERVABLE_USER_AGENT"],"mappings":"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","file":"unstable-do-not-use.cjs","sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport { augment } from \"../object/fetchPage.js\";\n\n// THIS IS NOT THE FINAL NAME DO NOT SHIP LIKE THIS\n\nexport { computeObjectSetCacheKey } from \"../observable/computeObjectSetCacheKey.js\";\nexport { createObservableClient } from \"../observable/ObservableClient.js\";\nexport { getMetaTagContent, getOsdkConfig } from \"../public-utils/osdkConfig.js\";\nexport { createClientWithTransaction } from \"../createClient.js\";","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getWireObjectSet } from \"../objectSet/createObjectSet.js\";\nimport { OrderByCanonicalizer } from \"./internal/OrderByCanonicalizer.js\";\nimport { WhereClauseCanonicalizer } from \"./internal/WhereClauseCanonicalizer.js\";\nconst whereCanonicalizer = new WhereClauseCanonicalizer();\nconst orderByCanonicalizer = new OrderByCanonicalizer();\n\n/**\n * Computes a stable cache key for an ObjectSet with options.\n *\n * Note: dedupeInterval is excluded as it doesn't affect the data, only the refresh rate.\n *\n * @param objectSet - The base ObjectSet\n * @param options - Optional observation options (where, orderBy, etc.)\n * @returns A stable string key representing the ObjectSet and options\n */\nexport function computeObjectSetCacheKey(objectSet, options) {\n const keyParts = [\"objectSet\", getWireObjectSet(objectSet)];\n if (!options) {\n return JSON.stringify(keyParts);\n }\n if (options.where) {\n keyParts.push(\"where\", whereCanonicalizer.canonicalize(options.where));\n }\n if (options.withProperties) {\n const propKeys = Object.keys(options.withProperties).sort();\n keyParts.push(\"props\", propKeys);\n }\n if (options.union && options.union.length > 0) {\n keyParts.push(\"union\", options.union.map(os => getWireObjectSet(os)));\n }\n if (options.intersect && options.intersect.length > 0) {\n keyParts.push(\"intersect\", options.intersect.map(os => getWireObjectSet(os)));\n }\n if (options.subtract && options.subtract.length > 0) {\n keyParts.push(\"subtract\", options.subtract.map(os => getWireObjectSet(os)));\n }\n if (options.pivotTo) {\n keyParts.push(\"pivotTo\", options.pivotTo);\n }\n if (options.orderBy) {\n keyParts.push(\"orderBy\", orderByCanonicalizer.canonicalize(options.orderBy));\n }\n if (options.pageSize) {\n keyParts.push(\"pageSize\", options.pageSize);\n }\n return JSON.stringify(keyParts);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WeakRefTrie } from \"./WeakRefTrie.js\";\nexport class OrderByCanonicalizer {\n #trie = new WeakRefTrie(array => {\n const pairs = array.reduce(function (result, _, index, array) {\n if (index % 2 === 0 && array[index] != null) {\n result.push(array.slice(index, index + 2));\n }\n return result;\n }, []);\n const data = Object.fromEntries(pairs);\n return data;\n });\n canonicalize = orderBy => {\n const strings = Object.entries(orderBy).flat();\n return this.#trie.lookupArray(strings);\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Trie } from \"@wry/trie\";\nconst defaultMakeData = () => Object.create(null);\n\n/**\n * The `WeakRefTrie` class uses weak references to store data, allowing for automatic garbage collection\n * of entries that are no longer in use.\n *\n * The original trie from @wry/trie does not do automatic cleanup of old entries.\n */\nexport class WeakRefTrie {\n #finalizer = new FinalizationRegistry(orderBy => {\n this.#trie.removeArray(Object.entries(orderBy).flat());\n });\n #trie;\n constructor(makeData = defaultMakeData) {\n this.#trie = new Trie(false, array => {\n const data = makeData(array);\n this.#finalizer.register(data, array);\n return new WeakRef(data);\n });\n }\n lookupArray(array) {\n const maybe = this.#trie.lookupArray(array);\n let ret = maybe.deref();\n if (maybe && !ret) {\n // in case finalizer hasn't run\n this.#trie.removeArray(array);\n ret = this.#trie.lookupArray(array).deref();\n }\n return ret;\n }\n peekArray(array) {\n const maybe = this.#trie.peekArray(array);\n const ret = maybe?.deref();\n if (maybe && !ret) {\n // in case finalizer hasn't run\n this.#trie.removeArray(array);\n }\n return ret;\n }\n removeArray(array) {\n return this.#trie.removeArray(array)?.deref();\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Trie } from \"@wry/trie\";\nimport deepEqual from \"fast-deep-equal\";\nimport invariant from \"tiny-invariant\";\nexport class WhereClauseCanonicalizer {\n /**\n * This is a shortcut cache for any WhereClause's that we have\n * seen and already canonicalized. The theory behind this\n * is that well behaving React applications will either `useMemo`\n * their where clause, or store it in state or pass it through as\n * props such that we are likely to get the same WhereClause\n * object multiple times and we can skip unnecessary work.\n */\n #cache = new WeakMap();\n\n /**\n * This is a trie that stores the sorted collapsed keys of a where clause to\n * the cache key for canonicalized options. In theory this keeps the number of\n * deepEqual comparisons down to a minimum but its probably overkill.\n */\n #trie = new Trie();\n\n /**\n * This is a cache from the cacheKey provided by `this.#trie` to the potential\n * canonicalized options.\n */\n #existingOptions = new Map();\n canonicalize(where) {\n // fastest shortcut\n if (this.#cache.has(where)) {\n return this.#cache.get(where);\n }\n const keysSet = new Set();\n const calculatedCanon = this.#toCanon(where, keysSet);\n const cacheKey = this.#trie.lookupArray(Array.from(keysSet).sort());\n const lookupEntry = this.#existingOptions.get(cacheKey) ?? {\n options: []\n };\n this.#existingOptions.set(cacheKey, lookupEntry);\n const canon = lookupEntry.options.find(ref => deepEqual(ref.deref(), calculatedCanon))?.deref() ?? calculatedCanon;\n if (canon === calculatedCanon) {\n // This means no existing options were found\n lookupEntry.options.push(new WeakRef(canon));\n }\n this.#cache.set(where, canon);\n return canon;\n }\n #toCanon = (where, set = new Set()) => {\n if (\"$and\" in where) {\n if (process.env.NODE_ENV !== \"production\") {\n !Array.isArray(where.$and) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected $and to be an array\") : invariant(false) : void 0;\n !(Object.keys(where).length === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected only $and to be present\") : invariant(false) : void 0;\n }\n if (where.$and.length === 0) {\n // empty $and is a no-op\n return {};\n }\n if (where.$and.length === 1) {\n return this.#toCanon(where.$and[0], set);\n }\n }\n // This is incomplete for all the cases possible but it gets us started\n\n return Object.fromEntries(Object.entries(where).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => {\n set.add(k);\n if (k === \"$and\" || k === \"$or\") {\n return [k, v.map(x => this.#toCanon(x, set))];\n }\n if (k !== \"$not\" && typeof v === \"object\" && v != null && \"$eq\" in v) {\n return [k, v[\"$eq\"]];\n }\n return [k, v];\n }));\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createFetchHeaderMutator } from \"@osdk/shared.net.fetch\";\nimport { additionalContext } from \"../Client.js\";\nimport { createClientFromContext } from \"../createClient.js\";\nimport { OBSERVABLE_USER_AGENT } from \"../util/UserAgent.js\";\nimport { ObservableClientImpl } from \"./internal/ObservableClientImpl.js\";\nimport { Store } from \"./internal/Store.js\";\nexport let ObservableClient;\n/**\n * User facing callback args for `observeLink`\n */\n\n/**\n * Public interface for reactive data management with automatic updates.\n *\n * The ObservableClient provides a reactive data layer with:\n * - Real-time object and collection observation\n * - Automatic cache updates when data changes\n * - Optimistic updates for immediate UI feedback\n * - Pagination support for large collections\n * - Link traversal for relationship navigation\n */\n\nexport function createObservableClient(client) {\n // First we need a modified client that adds an extra header so we know its\n // an observable client\n const tweakedClient = createClientFromContext({\n ...client[additionalContext],\n fetch: createFetchHeaderMutator(client[additionalContext].fetch, headers => {\n headers.set(\"Fetch-User-Agent\", [headers.get(\"Fetch-User-Agent\"), OBSERVABLE_USER_AGENT].filter(x => x && x?.length > 0).join(\" \"));\n return headers;\n })\n });\n\n // Then we use that client instead. Because the `client` does not hold\n // any real state, this whole thing works.\n return new ObservableClientImpl(new Store(tweakedClient));\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Subscription } from \"rxjs\";\nimport { UnsubscribableWrapper } from \"./UnsubscribableWrapper.js\";\n\n/**\n * Implementation of the public ObservableClient interface.\n * - Delegates all operations to the Store for consistency\n * - Serves as the entry point for reactive data management\n * - Ensures proper method binding and API exposure\n *\n * @internal\n */\nexport class ObservableClientImpl {\n constructor(store) {\n this.__experimentalStore = store;\n this.applyAction = store.applyAction.bind(store);\n this.validateAction = store.validateAction.bind(store);\n }\n observeObject = (apiName, pk, options, subFn) => {\n return this.__experimentalStore.objects.observe({\n ...options,\n apiName,\n pk\n },\n // cast to cross typed to untyped barrier\n subFn);\n };\n observeList = (options, subFn) => {\n return this.__experimentalStore.lists.observe(options,\n // cast to cross typed to untyped barrier\n subFn);\n };\n observeAggregation = (options, subFn) => {\n return this.__experimentalStore.aggregations.observe(options, subFn);\n };\n observeLinks = (objects, linkName, options, subFn) => {\n // Convert to array if single object provided\n const objectsArray = Array.isArray(objects) ? objects : [objects];\n const parentSub = new Subscription();\n for (const obj of objectsArray) {\n const querySubscription = this.__experimentalStore.links.observe({\n ...options,\n srcType: {\n type: \"object\",\n apiName: obj.$apiName\n },\n linkName,\n pk: obj.$primaryKey\n },\n // cast to cross typed to untyped barrier\n subFn);\n parentSub.add(querySubscription);\n }\n return new UnsubscribableWrapper(parentSub);\n };\n observeObjectSet(baseObjectSet, options, subFn) {\n return this.__experimentalStore.objectSets.observe({\n baseObjectSet,\n ...options\n },\n // cast to cross typed to untyped barrier\n subFn);\n }\n invalidateAll() {\n return this.__experimentalStore.invalidateAll();\n }\n invalidateObjects(objects) {\n return this.__experimentalStore.invalidateObjects(objects);\n }\n invalidateObjectType(type) {\n return this.__experimentalStore.invalidateObjectType(type, undefined);\n }\n canonicalizeWhereClause(where) {\n return this.__experimentalStore.whereCanonicalizer.canonicalize(where);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Wrapper for rxjs Subscription to not leak implementation details\n * @internal\n */\nexport class UnsubscribableWrapper {\n #subscription;\n constructor(subscription) {\n this.#subscription = subscription;\n }\n unsubscribe() {\n this.#subscription?.unsubscribe();\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nimport { additionalContext } from \"../../Client.js\";\nimport { DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nimport { ActionApplication } from \"./actions/ActionApplication.js\";\nimport { API_NAME_IDX as AGGREGATION_API_NAME_IDX, RDP_IDX as AGGREGATION_RDP_IDX } from \"./aggregation/AggregationCacheKey.js\";\nimport { AggregationsHelper } from \"./aggregation/AggregationsHelper.js\";\nimport { DEBUG_ONLY__cacheKeyToString } from \"./CacheKey.js\";\nimport { CacheKeys } from \"./CacheKeys.js\";\nimport { createChangedObjects, DEBUG_ONLY__changesToString } from \"./Changes.js\";\nimport { IntersectCanonicalizer } from \"./IntersectCanonicalizer.js\";\nimport { Layers } from \"./Layers.js\";\nimport { LinksHelper } from \"./links/LinksHelper.js\";\nimport { API_NAME_IDX as LIST_API_NAME_IDX, RDP_IDX as LIST_RDP_IDX } from \"./list/ListCacheKey.js\";\nimport { ListsHelper } from \"./list/ListsHelper.js\";\nimport { API_NAME_IDX as OBJECT_API_NAME_IDX, RDP_CONFIG_IDX as OBJECT_RDP_CONFIG_IDX } from \"./object/ObjectCacheKey.js\";\nimport { ObjectCacheKeyRegistry } from \"./object/ObjectCacheKeyRegistry.js\";\nimport { ObjectsHelper } from \"./object/ObjectsHelper.js\";\nimport { ObjectSetHelper } from \"./objectset/ObjectSetHelper.js\";\nimport { OrderByCanonicalizer } from \"./OrderByCanonicalizer.js\";\nimport { PivotCanonicalizer } from \"./PivotCanonicalizer.js\";\nimport { Queries } from \"./Queries.js\";\nimport { RdpCanonicalizer } from \"./RdpCanonicalizer.js\";\nimport { WhereClauseCanonicalizer } from \"./WhereClauseCanonicalizer.js\";\n/*\n Notes:\n - Subjects are one per type per store (by cache key)\n - Data is one per layer per cache key\n*/\n\n/**\n * Central data store with layered cache architecture.\n * - Truth layer: server state | Optimistic layers: pending changes\n * - Reference counting prevents memory leaks\n * - Batch operations ensure consistency\n */\nexport class Store {\n whereCanonicalizer = new WhereClauseCanonicalizer();\n orderByCanonicalizer = new OrderByCanonicalizer();\n rdpCanonicalizer = new RdpCanonicalizer();\n intersectCanonicalizer = new IntersectCanonicalizer(this.whereCanonicalizer);\n pivotCanonicalizer = new PivotCanonicalizer();\n\n /** @internal */\n\n queries = new Queries();\n objectCacheKeyRegistry = new ObjectCacheKeyRegistry();\n layers = new Layers({\n logger: this.logger,\n onRevalidate: this.#maybeRevalidateQueries.bind(this)\n });\n subjects = this.layers.subjects;\n\n // these are hopefully temporary\n\n constructor(client) {\n this.logger = client[additionalContext].logger?.child({}, {\n msgPrefix: \"Store\"\n });\n this.client = client;\n this.cacheKeys = new CacheKeys({\n onDestroy: this.#cleanupCacheKey\n });\n this.aggregations = new AggregationsHelper(this, this.cacheKeys, this.whereCanonicalizer, this.rdpCanonicalizer);\n this.lists = new ListsHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer, this.rdpCanonicalizer, this.intersectCanonicalizer, this.pivotCanonicalizer);\n this.objects = new ObjectsHelper(this, this.cacheKeys);\n this.links = new LinksHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer);\n this.objectSets = new ObjectSetHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer);\n }\n\n /**\n * Called after a key is no longer retained and the timeout has elapsed\n * @param key\n */\n #cleanupCacheKey = key => {\n const subject = this.subjects.peek(key);\n if (DEBUG_REFCOUNTS) {\n // eslint-disable-next-line no-console\n console.log(`CacheKey cleaning up (${JSON.stringify({\n closed: subject?.closed,\n observed: subject?.observed\n })})`, JSON.stringify([key.type, ...key.otherKeys], null, 2));\n }\n if (process.env.NODE_ENV !== \"production\") {\n !subject ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n }\n this.subjects.delete(key);\n this.queries.delete(key);\n };\n applyAction = async (action, args, opts) => {\n return await new ActionApplication(this).applyAction(action, args, opts);\n };\n validateAction = async (action, args) => {\n const result = await this.client(action).applyAction(args, {\n $validateOnly: true,\n $returnEdits: false\n });\n return result;\n };\n getValue(cacheKey) {\n return this.layers.top.get(cacheKey);\n }\n batch({\n optimisticId,\n changes = createChangedObjects()\n }, batchFn) {\n return this.layers.batch({\n optimisticId,\n changes\n }, batchFn);\n }\n invalidateObject(apiName, pk) {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n const variants = this.objectCacheKeyRegistry.getVariants(apiName, pk);\n\n // Invalidate all variant cache entries\n // Using Promise.allSettled to ensure if one invalidation fails, others will still complete.\n // This prevents a single failing query from blocking invalidation of other cache variants for the same object.\n const promises = [];\n if (variants.size === 0) {\n // No registered variants - create and revalidate the base variant (no RDP)\n promises.push(this.objects.getQuery({\n apiName,\n pk\n }, undefined).revalidate(/* force */true));\n } else {\n // Revalidate all registered variants\n for (const key of variants) {\n const query = this.queries.peek(key);\n if (query) {\n promises.push(query.revalidate(/* force */true));\n }\n }\n }\n return Promise.allSettled(promises);\n }\n async #maybeRevalidateQueries(changes, optimisticId) {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"maybeRevalidateQueries\"\n }) : undefined;\n if (changes.isEmpty()) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"No changes, aborting\");\n }\n return;\n }\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(DEBUG_ONLY__changesToString(changes), {\n optimisticId\n });\n }\n try {\n const promises = [];\n for (const cacheKey of this.queries.keys()) {\n const query = this.queries.peek(cacheKey);\n if (!query?.maybeUpdateAndRevalidate) {\n continue;\n }\n\n // Only propagate to queries that should receive these changes\n if (!this.#shouldPropagateToQuery({\n cacheKey,\n maybeUpdateAndRevalidate: query.maybeUpdateAndRevalidate\n }, changes, optimisticId)) {\n continue;\n }\n const promise = query.maybeUpdateAndRevalidate(changes, optimisticId);\n if (promise) promises.push(promise);\n }\n await Promise.all(promises);\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"in finally\", DEBUG_ONLY__changesToString(changes));\n }\n }\n }\n\n /**\n * Determines whether changes should propagate to a specific query.\n * Prevents unnecessary observable pipeline execution for cross-propagation.\n *\n * @param query - The query to check\n * @param changes - The changes that occurred\n * @param optimisticId - Optional optimistic update ID\n * @returns true if the query should be notified of these changes\n */\n #shouldPropagateToQuery(query, changes, optimisticId) {\n // Always propagate optimistic updates (user-initiated actions need immediate feedback)\n if (optimisticId) {\n return true;\n }\n\n // If the query's own cache key was modified (direct fetch), always propagate\n if (changes.modified.has(query.cacheKey)) {\n return true;\n }\n\n // Check if the query's object type is affected by the changes\n if (this.#shouldPropagateForObjectTypeChanges(query.cacheKey, changes)) {\n return true;\n }\n\n // For other cross-propagation (e.g., RDP field updates from unrelated object types):\n // Only propagate to queries WITH RDP configurations\n const queryRdpConfig = this.#getQueryRdpConfig(query.cacheKey);\n\n // If query has no RDP, don't propagate unrelated object changes to it\n // (it will get updates from its own direct fetches only)\n return queryRdpConfig != null;\n }\n\n /**\n * Checks if changes to an object type should propagate to a query.\n * This ensures queries receive updates when objects of their type are added/modified.\n *\n * @param cacheKey - The cache key of the query\n * @param changes - The changes that occurred\n * @returns true if the query should be notified based on object type changes\n */\n #shouldPropagateForObjectTypeChanges(cacheKey, changes) {\n const queryObjectType = this.#getQueryObjectType(cacheKey);\n if (!queryObjectType) {\n return false;\n }\n const affected = this.#changesAffectObjectType(changes, queryObjectType);\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"shouldPropagateToQuery\"\n }).debug(`Query type: ${queryObjectType}, affected: ${affected}`, {\n queryKey: DEBUG_ONLY__cacheKeyToString(cacheKey),\n addedCount: changes.addedObjects.get(queryObjectType)?.length ?? 0,\n modifiedCount: changes.modifiedObjects.get(queryObjectType)?.length ?? 0\n });\n }\n return affected;\n }\n\n /**\n * Extracts RDP configuration from a cache key if present.\n *\n * @param cacheKey - The cache key to check\n * @returns The RDP configuration, null, or undefined\n */\n #getQueryRdpConfig(cacheKey) {\n if (\"otherKeys\" in cacheKey && Array.isArray(cacheKey.otherKeys)) {\n if (cacheKey.type === \"object\") {\n return cacheKey.otherKeys[OBJECT_RDP_CONFIG_IDX];\n } else if (cacheKey.type === \"list\") {\n return cacheKey.otherKeys[LIST_RDP_IDX];\n } else if (cacheKey.type === \"aggregation\") {\n return cacheKey.otherKeys[AGGREGATION_RDP_IDX];\n }\n // Links and other types would also be at LIST_RDP_IDX\n }\n return undefined;\n }\n\n /**\n * Extracts the object type (apiName) from a cache key.\n *\n * @param cacheKey - The cache key to check\n * @returns The object type/apiName, or undefined if not applicable\n */\n #getQueryObjectType(cacheKey) {\n if (\"otherKeys\" in cacheKey && Array.isArray(cacheKey.otherKeys)) {\n if (cacheKey.type === \"object\") {\n return cacheKey.otherKeys[OBJECT_API_NAME_IDX];\n } else if (cacheKey.type === \"list\") {\n return cacheKey.otherKeys[LIST_API_NAME_IDX];\n } else if (cacheKey.type === \"aggregation\") {\n return cacheKey.otherKeys[AGGREGATION_API_NAME_IDX];\n }\n // Links would have apiName at a different position\n }\n return undefined;\n }\n\n /**\n * Checks if changes affect a specific object type.\n *\n * @param changes - The changes to check\n * @param objectType - The object type to check for\n * @returns true if the changes include added or modified objects of this type\n */\n #changesAffectObjectType(changes, objectType) {\n // Check added objects (MultiMap.get returns an array)\n const addedForType = changes.addedObjects.get(objectType);\n if (addedForType && addedForType.length > 0) {\n return true;\n }\n\n // Check modified objects (MultiMap.get returns an array)\n const modifiedForType = changes.modifiedObjects.get(objectType);\n if (modifiedForType && modifiedForType.length > 0) {\n return true;\n }\n return false;\n }\n\n /**\n * Invalidates all cache entries for a specific object type.\n * This will revalidate:\n * 1. All objects of the specified type\n * 2. All lists of the specified type\n * 3. All links where the source object is of the specified type\n *\n * @param apiName - The API name of the object type to invalidate\n * @param changes - Optional changes object to track what has been modified\n * @returns Promise that resolves when all invalidations are complete\n */\n invalidateObjectType(apiName, changes) {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"invalidateObjectType\"\n }).info(changes ? DEBUG_ONLY__changesToString(changes) : void 0);\n }\n const promises = [];\n for (const cacheKey of this.layers.truth.keys()) {\n if (changes && changes.modified.has(cacheKey)) {\n continue;\n }\n const query = this.queries.peek(cacheKey);\n if (!query) continue;\n promises.push(query.invalidateObjectType(apiName, changes));\n }\n\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n async invalidateAll() {\n const promises = [];\n for (const cacheKey of this.queries.keys()) {\n const query = this.queries.peek(cacheKey);\n if (query) {\n promises.push(query.revalidate(true));\n }\n }\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n async invalidateObjects(objects) {\n const objectsArray = Array.isArray(objects) ? objects : [objects];\n const promises = [];\n for (const obj of objectsArray) {\n promises.push(this.invalidateObject(obj.$objectType, obj.$primaryKey));\n }\n\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DEBUG_REFCOUNTS = process.env.NODE_ENV !== \"production\" && false;\nexport const DEBUG_CACHE_KEYS = process.env.NODE_ENV !== \"production\" && false;","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { runOptimisticJob } from \"./OptimisticJob.js\";\nconst ACTION_DELAY = process.env.NODE_ENV === \"production\" ? 0 : 1000;\nexport class ActionApplication {\n constructor(store) {\n this.store = store;\n }\n applyAction = async (action, args, {\n optimisticUpdate\n } = {}) => {\n const logger = process.env.NODE_ENV !== \"production\" ? this.store.logger?.child({\n methodName: \"applyAction\"\n }) : this.store.logger;\n const removeOptimisticResult = runOptimisticJob(this.store, optimisticUpdate);\n return await (async () => {\n try {\n if (Array.isArray(args)) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"applying action to multiple args\", args);\n }\n const results = await this.store.client(action).batchApplyAction(args, {\n $returnEdits: true\n });\n await this.#invalidateActionEditResponse(results);\n return results;\n }\n\n // The types for client get confused when we dynamically applyAction so we\n // have to deal with the `any` here and force cast it to what it should be.\n // TODO: Update the types so this doesn't happen!\n\n const actionResults = await this.store.client(action).applyAction(args, {\n $returnEdits: true\n });\n if (process.env.NODE_ENV !== \"production\") {\n if (ACTION_DELAY > 0) {\n logger?.debug(\"action done, pausing\", actionResults);\n const delay = (await import(\"delay\")).default;\n await delay(ACTION_DELAY);\n logger?.debug(\"action done, pausing done\");\n }\n }\n await this.#invalidateActionEditResponse(actionResults);\n return actionResults;\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"optimistic action complete; remove the results\");\n }\n // make sure this happens even if the action fails\n await removeOptimisticResult();\n }\n })();\n };\n #invalidateActionEditResponse = async ({\n deletedObjects,\n modifiedObjects,\n addedObjects,\n editedObjectTypes,\n type\n }) => {\n let changes;\n if (type === \"edits\") {\n const promisesToWait = [];\n for (const list of [deletedObjects, modifiedObjects, addedObjects]) {\n for (const obj of list ?? []) {\n promisesToWait.push(this.store.invalidateObject(obj.objectType, obj.primaryKey));\n }\n }\n this.store.batch({}, batch => {\n for (const {\n objectType,\n primaryKey\n } of deletedObjects ?? []) {\n const cacheKey = this.store.cacheKeys.get(\"object\", objectType, primaryKey, /* rdpConfig */undefined);\n this.store.queries.peek(cacheKey)?.deleteFromStore(\"loaded\",\n // this is probably not the best value to use\n batch);\n }\n });\n await Promise.all(promisesToWait);\n } else {\n for (const apiName of editedObjectTypes) {\n await this.store.invalidateObjectType(apiName, changes);\n }\n }\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { additionalContext } from \"../../../Client.js\";\nimport { createOptimisticId } from \"../OptimisticId.js\";\nexport class OptimisticJob {\n #result;\n constructor(store, optimisticId) {\n const updatedObjects = [];\n\n // due to potentially needing to fetch the object metadata,\n // the creation of objects needs to be async. In practice, the\n // metadata is cached.\n const addedObjectPromises = [];\n const deletedObjects = [];\n\n // TODO, this code needs to be refactored. its weird right now\n // but the contract for `runOptimisticJob` is good.\n\n // todo memoize this\n this.getResult = () => {\n return this.#result ??= (async () => {\n const addedObjects = await Promise.allSettled(addedObjectPromises);\n const {\n batchResult\n } = store.batch({\n optimisticId\n }, batch => {\n for (const obj of addedObjects) {\n if (obj.status === \"fulfilled\") {\n store.objects.getQuery({\n apiName: obj.value.$objectType,\n pk: obj.value.$primaryKey\n }, undefined).writeToStore(obj.value, \"loading\", batch);\n } else {\n // TODO FIXME\n throw obj;\n }\n }\n for (const obj of updatedObjects) {\n store.objects.getQuery({\n apiName: obj.$objectType,\n pk: obj.$primaryKey\n }, undefined).writeToStore(obj, \"loading\", batch);\n }\n for (const obj of deletedObjects) {\n store.objects.getQuery({\n apiName: obj.$objectType,\n pk: obj.$primaryKey\n }, undefined).deleteFromStore(\"loading\", batch);\n }\n });\n return batchResult.changes;\n })();\n };\n this.context = {\n updateObject(value) {\n updatedObjects.push(value);\n return this;\n },\n createObject(type, pk, properties) {\n const create = store.client[additionalContext].objectFactory2(store.client[additionalContext], [{\n $primaryKey: pk,\n $apiName: type.apiName,\n $objectType: type.apiName,\n ...properties\n }], undefined, {}).then(objs => {\n return objs[0];\n });\n addedObjectPromises.push(create);\n return this;\n },\n deleteObject(value) {\n deletedObjects.push(value);\n return this;\n }\n };\n }\n}\nexport function runOptimisticJob(store, optimisticUpdate) {\n if (!optimisticUpdate) {\n return () => Promise.resolve();\n }\n const optimisticId = createOptimisticId();\n const job = new OptimisticJob(store, optimisticId);\n optimisticUpdate(job.context);\n const optimisticApplicationDone = job.getResult();\n return () => {\n return optimisticApplicationDone.then(\n // we don't want to leak the result\n () => undefined).finally(() => {\n store.layers.remove(optimisticId);\n });\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function createOptimisticId() {\n if (process.env.NODE_ENV !== \"production\") {\n if (createOptimisticId.counter === undefined) {\n createOptimisticId.counter = 0;\n }\n return {\n __optimisticId: createOptimisticId.counter++\n };\n }\n\n // in production we can just use the lightest empty object possible\n return Object.create(null);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const TYPE_IDX = 0;\nexport const API_NAME_IDX = 1;\nexport const WHERE_IDX = 2;\nexport const RDP_IDX = 3;\nexport const AGGREGATE_IDX = 4;","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { ObjectAggregationQuery } from \"./ObjectAggregationQuery.js\";\nexport class AggregationsHelper extends AbstractHelper {\n constructor(store, cacheKeys, whereCanonicalizer, rdpCanonicalizer) {\n super(store, cacheKeys);\n this.whereCanonicalizer = whereCanonicalizer;\n this.rdpCanonicalizer = rdpCanonicalizer;\n }\n observe(options, subFn) {\n return super.observe(options, subFn);\n }\n getQuery(options) {\n const {\n type,\n where,\n withProperties,\n aggregate\n } = options;\n const {\n apiName\n } = type;\n const typeKind = \"type\" in type ? type.type : \"interface\";\n const canonWhere = this.whereCanonicalizer.canonicalize(where ?? {});\n const canonRdp = withProperties ? this.rdpCanonicalizer.canonicalize(withProperties) : undefined;\n const canonAggregate = this.canonicalizeAggregate(aggregate);\n const aggregationCacheKey = this.cacheKeys.get(\"aggregation\", typeKind, apiName, canonWhere, canonRdp, canonAggregate);\n return this.store.queries.get(aggregationCacheKey, () => {\n if (typeKind !== \"object\") {\n throw new Error(\"Only ObjectTypeDefinition is currently supported for aggregations\");\n }\n return new ObjectAggregationQuery(this.store, this.store.subjects.get(aggregationCacheKey), aggregationCacheKey, options);\n });\n }\n canonicalizeAggregate(aggregate) {\n return JSON.parse(JSON.stringify(aggregate));\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { QuerySubscription } from \"./QuerySubscription.js\";\nexport class AbstractHelper {\n constructor(store, cacheKeys) {\n this.store = store;\n this.cacheKeys = cacheKeys;\n }\n observe(options, subFn) {\n const query = this.getQuery(options);\n return this._subscribe(query, options, subFn);\n }\n _subscribe(query, options, subFn) {\n // the ListQuery represents the shared state of the list\n this.store.cacheKeys.retain(query.cacheKey);\n if (options.mode !== \"offline\") {\n query.revalidate(options.mode === \"force\").catch(e => {\n subFn.error(e);\n\n // we don't want observeObject() to return a promise,\n // so we settle for logging an error here instead of\n // dropping it on the floor.\n if (this.store.logger) {\n this.store.logger.error(\"Unhandled error in observeObject\", e);\n } else {\n throw e;\n }\n });\n }\n const sub = query.subscribe(subFn);\n const querySub = new QuerySubscription(query, sub);\n query.registerSubscriptionDedupeInterval(querySub.subscriptionId, options.dedupeInterval);\n sub.add(() => {\n query.unregisterSubscriptionDedupeInterval(querySub.subscriptionId);\n this.store.cacheKeys.release(query.cacheKey);\n });\n return querySub;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UnsubscribableWrapper } from \"./UnsubscribableWrapper.js\";\nlet subscriptionIdCounter = 0;\n\n/** @internal */\nexport class QuerySubscription extends UnsubscribableWrapper {\n /** @internal */\n\n /** @internal */\n\n /** @internal */\n\n constructor(query, subscription) {\n super(subscription);\n this.query = query;\n this.subscription = subscription;\n this.subscriptionId = `sub_${++subscriptionIdCounter}`;\n\n // hide these from introspection\n Object.defineProperties(this, {\n query: {\n enumerable: false\n },\n subscription: {\n enumerable: false\n },\n subscriptionId: {\n enumerable: false\n }\n });\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { API_NAME_IDX } from \"./AggregationCacheKey.js\";\nimport { AggregationQuery } from \"./AggregationQuery.js\";\nexport class ObjectAggregationQuery extends AggregationQuery {\n async _fetchAggregation() {\n const type = this.cacheKey.otherKeys[API_NAME_IDX];\n let objectSet = this.store.client({\n type: \"object\",\n apiName: type\n });\n if (this.rdpConfig) {\n objectSet = objectSet.withProperties(this.rdpConfig);\n }\n objectSet = objectSet.where(this.canonicalWhere);\n return await objectSet.aggregate(this.canonicalAggregate);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BehaviorSubject, connectable, map } from \"rxjs\";\nimport { additionalContext } from \"../../../Client.js\";\nimport { Query } from \"../Query.js\";\nimport { AGGREGATE_IDX, API_NAME_IDX, RDP_IDX, WHERE_IDX } from \"./AggregationCacheKey.js\";\nexport class AggregationQuery extends Query {\n constructor(store, subject, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `AggregationQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n this.apiName = cacheKey.otherKeys[API_NAME_IDX];\n this.canonicalWhere = cacheKey.otherKeys[WHERE_IDX];\n this.rdpConfig = cacheKey.otherKeys[RDP_IDX];\n this.canonicalAggregate = cacheKey.otherKeys[AGGREGATE_IDX];\n }\n _createConnectable(subject) {\n return connectable(subject.pipe(map(x => {\n return {\n status: x.status,\n result: x.value,\n lastUpdated: x.lastUpdated,\n error: x.status === \"error\" ? new Error(\"Aggregation failed\") : undefined\n };\n })), {\n connector: () => new BehaviorSubject({\n status: \"init\",\n result: undefined,\n lastUpdated: 0\n })\n });\n }\n async _fetchAndStore() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"_fetchAndStore\"\n }).debug(\"calling _fetchAndStore\");\n }\n try {\n const result = await this._fetchAggregation();\n this.store.batch({}, batch => {\n this.writeToStore(result, \"loaded\", batch);\n });\n } catch (err) {\n this.store.batch({}, batch => {\n this.writeToStore(undefined, \"error\", batch);\n });\n }\n }\n writeToStore(data, status, batch) {\n batch.write(this.cacheKey, data, status);\n batch.changes.modified.add(this.cacheKey);\n return batch.read(this.cacheKey);\n }\n invalidateObjectType = (objectType, changes) => {\n if (this.apiName === objectType) {\n changes?.modified.add(this.cacheKey);\n return this.revalidate(true);\n }\n return Promise.resolve();\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { additionalContext } from \"../../Client.js\";\nexport class Query {\n retainCount = 0;\n #connectable;\n #subscription;\n #subject;\n #subscriptionDedupeIntervals = new Map();\n\n /** @internal */\n\n constructor(store, observable, opts, cacheKey, logger) {\n this.options = opts;\n this.cacheKey = cacheKey;\n this.store = store;\n this.cacheKeys = store.cacheKeys;\n this.#subject = observable;\n this.logger = logger ?? (process.env.NODE_ENV === \"production\" ? store.client[additionalContext].logger : store.client[additionalContext].logger?.child({}, {\n msgPrefix: process.env.NODE_ENV !== \"production\" ? `Query<${cacheKey.type}, ${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>` : \"Query\"\n }));\n }\n subscribe(observer) {\n this.#connectable ??= this._createConnectable(this.#subject);\n this.#subscription = this.#connectable.connect();\n const sub = this.#connectable.subscribe({\n next: value => {\n if (observer.next) {\n observer.next(value);\n }\n },\n error: err => {\n if (observer.error) {\n observer.error(err);\n }\n },\n complete: () => {\n if (observer.complete) {\n observer.complete();\n }\n }\n });\n return sub;\n }\n\n /**\n * Register a subscription's dedupeInterval value\n */\n registerSubscriptionDedupeInterval(subscriptionId, dedupeInterval) {\n if (dedupeInterval != null && dedupeInterval > 0) {\n this.#subscriptionDedupeIntervals.set(subscriptionId, dedupeInterval);\n }\n }\n\n /**\n * Unregister a subscription's dedupeInterval value\n */\n unregisterSubscriptionDedupeInterval(subscriptionId) {\n this.#subscriptionDedupeIntervals.delete(subscriptionId);\n }\n\n /**\n * Get the minimum dedupeInterval from all active subscriptions\n */\n getMinimumDedupeInterval() {\n if (this.#subscriptionDedupeIntervals.size === 0) {\n return this.options.dedupeInterval ?? 0;\n }\n return Math.min(...this.#subscriptionDedupeIntervals.values());\n }\n\n /**\n * Causes the query to revalidate. This will cause the query to fetch\n * the latest data from the server and update the store if it is deemed\n * \"stale\" or if `force` is true.\n *\n * @param force\n * @returns\n */\n async revalidate(force) {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"revalidate\"\n }) : this.logger;\n if (force) {\n this.abortController?.abort();\n }\n\n // n.b. I think this isn't quite right since we may require multiple\n // pages to properly \"revalidate\" for someone. This only really works if you\n // have a single page/object. It needs to be redone. FIXME\n\n // if we are pending the first page/object we can just ignore this\n if (this.pendingFetch) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"Fetch is already pending, using it\");\n }\n await this.pendingFetch;\n return;\n }\n const minDedupeInterval = this.getMinimumDedupeInterval();\n if (minDedupeInterval > 0 && this.lastFetchStarted != null && Date.now() - this.lastFetchStarted < minDedupeInterval) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"Within dupeInterval, aborting revalidate\");\n }\n return Promise.resolve();\n }\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"Starting actual revalidate\");\n }\n this.store.batch({}, batch => {\n // make sure the truth layer knows we are loading\n\n // this will not trigger an update to `changes` so it cannot trigger an\n // update of a list either. This may not be the behavior we want.\n this.setStatus(\"loading\", batch);\n });\n this._preFetch();\n this.lastFetchStarted = Date.now();\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"calling _fetchAndStore()\");\n }\n this.pendingFetch = this._fetchAndStore().finally(() => {\n logger?.debug(\"promise's finally for _fetchAndStore()\");\n this.pendingFetch = undefined;\n });\n await this.pendingFetch;\n return;\n }\n _preFetch() {}\n /**\n * Sets the status of the query in the store (but does not store that in `changes`).\n *\n * @param status\n * @param batch\n * @returns\n */\n setStatus(status, batch) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"setStatus\"\n }).debug(`Attempting to set status to '${status}'`);\n }\n const existing = batch.read(this.cacheKey);\n if (existing?.status === status) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"setStatus\"\n }).debug(`Status is already set to '${status}'; aborting`);\n }\n return;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"setStatus\"\n }).debug(`Writing status '${status}' to cache`);\n }\n batch.write(this.cacheKey, existing?.value, status);\n }\n dispose() {\n if (this.abortController) {\n this.abortController.abort();\n }\n this.#subscription?.unsubscribe();\n this._dispose();\n }\n\n /**\n * Per query type dispose functionality\n */\n _dispose() {}\n\n /**\n * The purpose of this method is to provide a way for others to write\n * directly into the store for this query.\n *\n * @param data\n * @param status\n * @param batch\n */\n\n /**\n * @param changes\n * @param optimisticId\n * @returns If revalidation is needed, a promise that resolves after the\n * revalidation is complete. Otherwise, undefined.\n */\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * This isn't performant and should only be used for debug logging!\n * @internal\n */\nexport function DEBUG_ONLY__cacheKeyToString(x) {\n if (process.env.NODE_ENV !== \"production\") {\n return `${x.type}CacheKey<${x.otherKeys.map(xx => JSON.stringify(xx)).join(\", \")}>`.replaceAll(\"\\\"\", \"'\");\n } else {\n throw new Error(\"not implemented\");\n }\n}\n/**\n * This isn't performant and should only be used for debug logging!\n * @internal\n */\nexport function DEBUG_ONLY__cacheKeysToString(x) {\n if (process.env.NODE_ENV !== \"production\") {\n return \"\\n - \" + x.map(DEBUG_ONLY__cacheKeyToString).join(\"\\n - \");\n } else {\n throw new Error(\"not implemented\");\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Trie } from \"@wry/trie\";\nimport { DEBUG_CACHE_KEYS, DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nimport { RefCounts } from \"./RefCounts.js\";\n\n/**\n * Cache key management with canonicalization.\n * - Uses Trie structure for efficient storage and lookup\n */\nexport class CacheKeys {\n #cacheKeys = new Trie(false, keys => {\n const cacheKey = {\n type: keys[0],\n otherKeys: keys.slice(1)\n };\n this.#onCreate?.(cacheKey);\n if (DEBUG_REFCOUNTS) {\n // eslint-disable-next-line no-console\n console.log(`CacheKeys.onCreate(${cacheKey.type}, ${JSON.stringify(cacheKey.otherKeys)})`);\n this.#finalizationRegistry.register(cacheKey, () => {\n // eslint-disable-next-line no-console\n console.log(`CacheKey Finalization(${cacheKey.type}, ${JSON.stringify(cacheKey.otherKeys)})`);\n });\n }\n return cacheKey;\n });\n #refCounts = new RefCounts(DEBUG_REFCOUNTS ? 15_000 : 60_000, k => this.#cleanupCacheKey(k));\n\n // we are currently only using this for debug logging and should just remove it in the future if that\n // continues to be true\n #finalizationRegistry;\n #onCreate;\n #onDestroy;\n constructor({\n onCreate,\n onDestroy\n }) {\n this.#onCreate = onCreate;\n this.#onDestroy = onDestroy;\n setInterval(() => {\n this.#refCounts.gc();\n }, 1000);\n this.#finalizationRegistry = new FinalizationRegistry(cleanupCallback => {\n try {\n cleanupCallback();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Caught an error while running a finalization callback\", e);\n }\n });\n }\n get(type, ...args) {\n // Normalize trailing undefined values to ensure consistent cache key creation\n // This makes get(\"object\", \"Foo\", 1, undefined) === get(\"object\", \"Foo\", 1)\n const normalizedArgs = [...args];\n while (normalizedArgs.length > 0 && normalizedArgs[normalizedArgs.length - 1] === undefined) {\n normalizedArgs.pop();\n }\n const cacheKeyArgs = [type, ...normalizedArgs];\n if (process.env.NODE_ENV !== \"production\" && DEBUG_CACHE_KEYS) {\n // eslint-disable-next-line no-console\n console.debug(`CacheKeys.get([${type},\n ${normalizedArgs.map(x => JSON.stringify(x)).join(\", \")}]) - already exists? `, this.#cacheKeys.peekArray(cacheKeyArgs) != null);\n }\n const cacheKey = this.#cacheKeys.lookupArray(cacheKeyArgs);\n\n // This is an idempotent call that ensures the cache key is registered for\n // cleanup. If already registered, this does nothing.\n this.#refCounts.register(cacheKey);\n return cacheKey;\n }\n retain(cacheKey) {\n this.#refCounts.retain(cacheKey);\n }\n release(cacheKey) {\n this.#refCounts.release(cacheKey);\n }\n #remove(cacheKey) {\n this.#cacheKeys.remove(cacheKey.type, ...cacheKey.otherKeys);\n }\n\n /**\n * Called after a key is no longer retained and the timeout has elapsed\n * @param key\n */\n #cleanupCacheKey = key => {\n this.#onDestroy?.(key);\n this.#remove(key);\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nexport class RefCounts {\n refCounts = new Map();\n\n // keeps our objects around for some extended duration after they are no longer\n // needed which is good for quick clicks across tabs.\n gcMap = new Map();\n constructor(keepAlive, cleanup) {\n this.keepAlive = keepAlive;\n this.cleanup = cleanup;\n }\n register(key) {\n if (!this.refCounts.has(key)) {\n this.gcMap.set(key, Date.now() + this.keepAlive);\n }\n return key;\n }\n retain(key) {\n const count = this.refCounts.get(key) ?? 0;\n this.refCounts.set(key, count + 1);\n if (this.gcMap.has(key)) {\n this.gcMap.delete(key);\n }\n }\n release(key) {\n const count = this.refCounts.get(key);\n if (count === undefined) {\n // TODO we should trace here if this happens because it likely means\n // someone unsubscribed twice and I don't know if we should treat that as\n // a potential error or not\n // throw new Error(\"RefCounts.release() - key not found\", key);\n } else if (count === 1) {\n this.refCounts.delete(key);\n this.gcMap.set(key, Date.now() + this.keepAlive);\n } else {\n this.refCounts.set(key, count - 1);\n }\n }\n has(key) {\n return this.refCounts.has(key);\n }\n gc() {\n const now = Date.now();\n if (DEBUG_REFCOUNTS) {\n for (const [key, count] of this.refCounts) {\n // eslint-disable-next-line no-console\n console.debug(\"RefCounts.gc() - counts: \", JSON.stringify(key), count);\n }\n }\n for (const [key, deathTime] of this.gcMap) {\n if (DEBUG_REFCOUNTS && deathTime >= now) {\n // eslint-disable-next-line no-console\n console.debug(\"RefCounts.gc() - ttl \", JSON.stringify(key), deathTime - now);\n }\n if (deathTime < now) {\n if (DEBUG_REFCOUNTS) {\n // eslint-disable-next-line no-console\n console.debug(\"RefCounts.gc() - registering cleaning up\", JSON.stringify(key));\n }\n this.gcMap.delete(key);\n this.cleanup(key);\n }\n }\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MultiMap } from \"mnemonist\";\nimport { DEBUG_ONLY__cacheKeyToString } from \"./CacheKey.js\";\nexport class Changes {\n modifiedObjects = new MultiMap();\n addedObjects = new MultiMap();\n added = new Set();\n modified = new Set();\n deleted = new Set();\n registerObject = (cacheKey, data, isNew) => {\n this[isNew ? \"addedObjects\" : \"modifiedObjects\"].set(data.$apiName, data);\n this[isNew ? \"added\" : \"modified\"].add(cacheKey);\n };\n deleteObject = cacheKey => {\n this.deleted.add(cacheKey);\n };\n registerList = key => {\n this.modified.add(key);\n };\n registerLink = cacheKey => {\n this.modified.add(cacheKey);\n };\n deleteLink = cacheKey => {\n this.deleted.add(cacheKey);\n };\n registerObjectSet = key => {\n this.modified.add(key);\n };\n isEmpty() {\n return this.modifiedObjects.size === 0 && this.addedObjects.size === 0 && this.added.size === 0 && this.modified.size === 0 && this.deleted.size === 0;\n }\n}\nexport function createChangedObjects() {\n return new Changes();\n}\nexport function DEBUG_ONLY__changesToString(changes) {\n if (process.env.NODE_ENV !== \"production\") {\n return JSON.stringify({\n modifiedObjects: multimapHelper(changes.modifiedObjects),\n addedObjects: multimapHelper(changes.addedObjects),\n added: listHelper(changes.added),\n modified: listHelper(changes.modified)\n }, null, 2);\n } else {\n throw new Error(\"not implemented\");\n }\n}\nfunction listHelper(set) {\n return Array.from(set).map(DEBUG_ONLY__cacheKeyToString);\n}\nfunction multimapHelper(multimap) {\n return Object.fromEntries(Array.from(multimap.associations()).map(([type, objects]) => {\n return [type, objects.map(o => o.$primaryKey)];\n }));\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CachingCanonicalizer } from \"./Canonicalizer.js\";\nexport class IntersectCanonicalizer extends CachingCanonicalizer {\n structuralCache = new Map();\n constructor(whereCanonicalizer) {\n super();\n this.whereCanonicalizer = whereCanonicalizer;\n }\n lookupOrCreate(intersectWith) {\n const canonicalClauses = intersectWith.map(item => this.whereCanonicalizer.canonicalize(item.where ?? {}));\n const structuralKey = canonicalClauses.map(clause => JSON.stringify(clause)).join(\"||\");\n let canonical = this.structuralCache.get(structuralKey);\n if (!canonical) {\n canonical = canonicalClauses;\n this.structuralCache.set(structuralKey, canonical);\n }\n return canonical;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Interface for canonicalizing objects.\n */\n\n/**\n * Base class for canonicalizers that provides common caching infrastructure.\n * Subclasses control how structural deduplication is performed.\n */\nexport class CachingCanonicalizer {\n /**\n * Cache for input object identity.\n */\n inputCache = new WeakMap();\n\n /**\n * Look up or create a canonical form for the given input.\n * This method handles the structural deduplication logic.\n *\n * @param input The input to canonicalize\n * @returns The canonical form\n */\n\n canonicalize(input) {\n if (!input) {\n return undefined;\n }\n if (this.inputCache.has(input)) {\n return this.inputCache.get(input);\n }\n const canonical = this.lookupOrCreate(input);\n this.inputCache.set(input, canonical);\n return canonical;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nimport { createInitEntry } from \"./createInitEntry.js\";\nimport { Layer } from \"./Layer.js\";\nimport { Subjects } from \"./Subjects.js\";\nimport { tombstone } from \"./tombstone.js\";\nexport class Layers {\n #truthLayer = new Layer(undefined, undefined);\n #topLayer;\n #onRevalidate;\n constructor({\n logger,\n onRevalidate\n }) {\n this.logger = logger;\n this.#topLayer = this.#truthLayer;\n this.subjects = new Subjects({\n logger,\n layers: this\n });\n this.#onRevalidate = onRevalidate;\n }\n get top() {\n return this.#topLayer;\n }\n get truth() {\n return this.#truthLayer;\n }\n remove(layerId) {\n !(layerId != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"undefined is the reserved layerId for the truth layer\") : invariant(false) : void 0;\n // 1. collect all cache keys for a given layerId\n let currentLayer = this.#topLayer;\n const cacheKeys = new Map();\n while (currentLayer != null && currentLayer.parentLayer != null) {\n if (currentLayer.layerId === layerId) {\n for (const [k, v] of currentLayer.entries()) {\n if (cacheKeys.has(k)) continue;\n cacheKeys.set(k, v);\n }\n }\n currentLayer = currentLayer.parentLayer;\n }\n\n // 2. remove the layers from the chain\n this.#topLayer = this.#topLayer.removeLayer(layerId);\n\n // 3. check each cache key to see if it is different in the new chain\n for (const [k, oldEntry] of cacheKeys) {\n const currentEntry = this.#topLayer.get(k);\n\n // 4. if different, update the subject\n if (oldEntry !== currentEntry) {\n const newEntry = currentEntry ?? createInitEntry(k);\n // We are going to be pretty lazy here and just re-emit the value.\n // In the future it may benefit us to deep equal check her but I think\n // the subjects are effectively doing this anyway.\n this.subjects.peek(k)?.next({\n ...newEntry,\n isOptimistic: currentEntry?.value !== this.#truthLayer.get(k)?.value\n });\n }\n }\n }\n batch({\n optimisticId,\n changes\n }, batchFn) {\n !(optimisticId === undefined || !!optimisticId) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"optimistic must be undefined or not falsy\") : invariant(false) : void 0;\n const batchContext = this.#createBatchContext({\n optimisticId,\n changes\n });\n const retVal = batchFn(batchContext);\n this.#onRevalidate(changes, optimisticId).catch(e => {\n // we don't want batch() to return a promise,\n // so we settle for logging an error here instead of\n // dropping it on the floor.\n if (this.logger) {\n this.logger.error(\"Unhandled error in batch\", e);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Unhandled error in batch\", e);\n throw e;\n }\n });\n return {\n batchResult: batchContext,\n retVal: retVal,\n changes: batchContext.changes\n };\n }\n #createBatchContext({\n optimisticId,\n changes\n }) {\n let needsLayer = optimisticId !== undefined;\n const batchContext = {\n changes,\n createLayerIfNeeded: () => {\n if (needsLayer) {\n this.#topLayer = this.#topLayer.addLayer(optimisticId);\n needsLayer = false;\n }\n },\n optimisticWrite: !!optimisticId,\n write: (cacheKey, value, status) => {\n const oldTopValue = this.#topLayer.get(cacheKey);\n if (optimisticId) batchContext.createLayerIfNeeded();\n const writeLayer = optimisticId ? this.#topLayer : this.#truthLayer;\n const newValue = {\n cacheKey,\n value,\n lastUpdated: Date.now(),\n status\n };\n writeLayer.set(cacheKey, newValue);\n const newTopValue = this.#topLayer.get(cacheKey);\n if (oldTopValue !== newTopValue) {\n this.subjects.get(cacheKey)?.next({\n ...newValue,\n isOptimistic: newTopValue?.value !== this.#truthLayer.get(cacheKey)?.value\n });\n }\n return newValue;\n },\n delete: (cacheKey, status) => {\n return batchContext.write(cacheKey, tombstone, status);\n },\n read: cacheKey => {\n return optimisticId ? this.#topLayer.get(cacheKey) : this.#truthLayer.get(cacheKey);\n }\n };\n return batchContext;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function createInitEntry(cacheKey) {\n return {\n cacheKey,\n status: \"init\",\n value: undefined,\n lastUpdated: 0\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WeakMapWithEntries } from \"./WeakMapWithEntries.js\";\n\n/*\n Image some layers\n\n [\n { cache: { obj1: { a: 1 } }, layerId: undefined },\n { cache: { obj1: { a: 1, b: 2 } }, layerId: \"layer1\" },\n { cache: { obj1: { a: undefined, b: 2 } }, layerId: \"layer2\" },\n { cache: { obj1: { a: 1, b: 2 } }, layerId: \"layer3\" },\n ]\n*/\n\nexport class Layer {\n #parent;\n #cache = new WeakMapWithEntries();\n #layerId;\n constructor(parent, layerId) {\n this.#parent = parent;\n this.#layerId = layerId;\n }\n get parentLayer() {\n return this.#parent;\n }\n get layerId() {\n return this.#layerId;\n }\n addLayer(layerId) {\n return new Layer(this, layerId);\n }\n removeLayer(layerId) {\n if (layerId == null || this.#parent == null) {\n // we are the root, so we can't remove anything\n return this;\n }\n if (this.#layerId !== layerId) {\n this.#parent = this.#parent.removeLayer(layerId);\n return this;\n }\n return this.#parent.removeLayer(layerId);\n }\n entries() {\n return this.#cache.entries();\n }\n keys() {\n return this.#cache.keys();\n }\n get(cacheKey) {\n return this.#cache.get(cacheKey) ?? this.#parent?.get(cacheKey);\n }\n set(cacheKey, value) {\n this.#cache.set(cacheKey, value);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class WeakMapWithEntries {\n #map = new WeakMap();\n #list = [];\n #toClean = [];\n #needsCleaning = false;\n #registry = new FinalizationRegistry(() => {\n this.#toClean.push(new WeakRef({}));\n this.#needsCleaning = true;\n });\n constructor() {\n const weakThis = new WeakRef(this);\n const intervalId = setInterval(() => {\n const self = weakThis.deref();\n if (self) {\n if (this.#needsCleaning) {\n this.#clean();\n }\n } else {\n clearInterval(intervalId);\n }\n }, 1000);\n }\n #clean() {\n this.#list = this.#list.filter(ref => ref.deref() !== undefined);\n }\n\n // functions for WeakMap\n delete(key) {\n const ret = this.#map.delete(key);\n this.#toClean.push(new WeakRef(key));\n this.#needsCleaning = true;\n return ret;\n }\n get(key) {\n return this.#map.get(key);\n }\n has(key) {\n return this.#map.has(key);\n }\n\n /**\n * Adds a new element with a specified key and value.\n * @param key Must be an object or symbol.\n */\n set(key, value) {\n if (!this.#map.has(key)) {\n this.#list.push(new WeakRef(key));\n }\n this.#map.set(key, value);\n return this;\n }\n [Symbol.toStringTag] = \"WeakMap\";\n\n // functions for iterables\n /** Returns an iterable of entries in the map. */\n [Symbol.iterator]() {\n return this.entries();\n }\n\n /**\n * Returns an iterable of key, value pairs for every entry in the map.\n */\n entries() {\n const self = this;\n function* iter() {\n for (const ref of self.#list) {\n const key = ref.deref();\n if (key !== undefined) {\n yield [key, self.#map.get(key)];\n }\n }\n }\n return iter();\n }\n\n /**\n * Returns an iterable of keys in the map\n */\n keys() {\n const self = this;\n function* iter() {\n for (const ref of self.#list) {\n const key = ref.deref();\n if (key !== undefined) {\n yield key;\n }\n }\n }\n return iter();\n }\n\n /**\n * Returns an iterable of values in the map\n */\n values() {\n const self = this;\n function* iter() {\n for (const ref of self.#list) {\n const key = ref.deref();\n if (key !== undefined) {\n const value = self.#map.get(key);\n if (value !== undefined) {\n yield value;\n }\n }\n }\n }\n return iter();\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BehaviorSubject } from \"rxjs\";\nimport { createInitEntry } from \"./createInitEntry.js\";\nexport class Subjects {\n #layers;\n\n // we can use a regular Map here because the refCounting will\n // handle cleanup.\n #cacheKeyToSubject = new WeakMap();\n constructor({\n logger,\n layers\n }) {\n this.logger = logger;\n this.#layers = layers;\n }\n peek = cacheKey => {\n return this.#cacheKeyToSubject.get(cacheKey);\n };\n get = cacheKey => {\n let subject = this.#cacheKeyToSubject.get(cacheKey);\n if (!subject) {\n const initialValue = this.#layers.top.get(cacheKey) ?? createInitEntry(cacheKey);\n subject = new BehaviorSubject({\n ...initialValue,\n isOptimistic: initialValue.value !== this.#layers.truth.get(cacheKey)?.value\n });\n this.#cacheKeyToSubject.set(cacheKey, subject);\n }\n return subject;\n };\n delete = cacheKey => {\n const subject = this.peek(cacheKey);\n if (subject) {\n subject.complete();\n this.#cacheKeyToSubject.delete(cacheKey);\n }\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const tombstone = undefined;","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { SpecificLinkQuery } from \"./SpecificLinkQuery.js\";\nexport class LinksHelper extends AbstractHelper {\n constructor(store, cacheKeys, whereCanonicalizer, orderByCanonicalizer) {\n super(store, cacheKeys);\n this.whereCanonicalizer = whereCanonicalizer;\n this.orderByCanonicalizer = orderByCanonicalizer;\n }\n getQuery(options) {\n const {\n apiName\n } = options.srcType;\n const canonWhere = this.whereCanonicalizer.canonicalize(options.where ?? {});\n const canonOrderBy = this.orderByCanonicalizer.canonicalize(options.orderBy ?? {});\n const linkCacheKey = this.cacheKeys.get(\"specificLink\", apiName, options.pk, options.linkName, canonWhere, canonOrderBy);\n return this.store.queries.get(linkCacheKey, () => {\n return new SpecificLinkQuery(this.store, this.store.subjects.get(linkCacheKey), linkCacheKey, options);\n });\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport deepEqual from \"fast-deep-equal\";\nimport { additionalContext } from \"../../../Client.js\";\nimport { BaseListQuery } from \"../base-list/BaseListQuery.js\";\nimport { OrderBySortingStrategy } from \"../sorting/SortingStrategy.js\";\nimport { tombstone } from \"../tombstone.js\";\n/**\n * Query implementation for retrieving linked objects from a specific object.\n * - Stores links as ObjectCacheKey[] references\n * - Creates indirect dependencies on linked objects\n * - Supports filtering and sorting of linked collections\n * - Handles proper invalidation of related objects\n */\nexport class SpecificLinkQuery extends BaseListQuery {\n #sourceApiName;\n #sourcePk;\n #linkName;\n #whereClause;\n #orderBy;\n\n /**\n * Register changes to the cache specific to SpecificLinkQuery\n */\n registerCacheChanges(batch) {\n batch.changes.modified.add(this.cacheKey);\n }\n constructor(store, subject, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `SpecificLinkQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n\n // Extract the necessary parameters from the cache key\n [this.#sourceApiName, this.#sourcePk, this.#linkName, this.#whereClause, this.#orderBy] = cacheKey.otherKeys;\n }\n\n // _fetchAndStore is now implemented in BaseCollectionQuery\n\n /**\n * Implements fetchPageData from the BaseCollectionQuery template method pattern\n * Fetches a page of linked objects\n */\n async fetchPageData(signal) {\n // Use the client API to create a query that pivots to linked objects\n const client = this.store.client;\n\n // First, get metadata for the source object to know the primary key field name\n const sourceObjectDef = {\n type: \"object\",\n apiName: this.#sourceApiName\n };\n\n // Use the client's ontologyProvider to get metadata, which has built-in caching\n const sourceMetadata = await client[additionalContext].ontologyProvider.getObjectDefinition(this.#sourceApiName);\n\n // Initialize sorting strategy with the link's target object type\n if (this.#orderBy && Object.keys(this.#orderBy).length > 0) {\n const linkDef = sourceMetadata.links?.[this.#linkName];\n if (!linkDef?.targetType) {\n throw new Error(`Missing link definition or targetType for link '${this.#linkName}' on object type '${this.#sourceApiName}'`);\n }\n this.sortingStrategy = new OrderBySortingStrategy(linkDef.targetType, this.#orderBy);\n }\n\n // Query for the specific source object\n const sourceQuery = client(sourceObjectDef).where({\n [sourceMetadata.primaryKeyApiName]: this.#sourcePk\n });\n\n // Pivot to the linked objects\n const linkQuery = sourceQuery.pivotTo(this.#linkName);\n\n // Check for abort signal again before fetching\n if (signal?.aborted) {\n throw new Error(\"Aborted\");\n }\n\n // Fetch the linked objects with pagination\n // Add orderBy to the query parameters if specified\n const queryParams = {\n $pageSize: this.options.pageSize || 100,\n $nextPageToken: this.nextPageToken\n };\n\n // Include orderBy if it has entries\n if (this.#orderBy && Object.keys(this.#orderBy).length > 0) {\n queryParams.$orderBy = this.#orderBy;\n }\n\n // Include whereClause if it has entries\n if (this.#whereClause && Object.keys(this.#whereClause).length > 0) {\n queryParams.$where = this.#whereClause;\n }\n const response = await linkQuery.fetchPage(queryParams);\n\n // Store the next page token for pagination\n this.nextPageToken = response.nextPageToken;\n return response;\n }\n\n /**\n * Removes a link query from the store\n */\n deleteFromStore(status, batch) {\n const entry = batch.read(this.cacheKey);\n if (entry && deepEqual(tombstone, entry.value)) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"deleteFromStore\"\n }).debug(`Links were already deleted, just setting status`);\n }\n return batch.write(this.cacheKey, entry.value, status);\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"deleteFromStore\"\n }).debug(JSON.stringify({\n status\n }));\n }\n\n // If there is no entry then there is nothing to do\n if (!entry || !entry.value) {\n return;\n }\n const ret = batch.delete(this.cacheKey, status);\n batch.changes.deleted.add(this.cacheKey);\n return ret;\n }\n\n /**\n * Implements Query.maybeUpdateAndRevalidate to handle cache invalidation\n */\n maybeUpdateAndRevalidate = async (changes, _optimisticId) => {\n // TODO: Implement proper invalidation logic for linked objects\n // This would check if any of the linked objects have changed,\n // or if the source object's links might have changed\n\n // For now, simply check if this specific link cache key was modified\n if (changes.modified.has(this.cacheKey)) {\n return this.revalidate(true);\n }\n\n // No relevant changes were detected\n return Promise.resolve();\n };\n invalidateObjectType = (objectType, changes) => {\n // We need to invalidate links in two cases:\n // 1. When the source object type matches the apiName (direct invalidation)\n // 2. When the target object type might be the invalidated type (affected by target changes)\n\n // For case 1 - direct source object type match\n if (this.#sourceApiName === objectType) {\n changes?.modified.add(this.cacheKey);\n return this.revalidate(true);\n } else {\n // For case 2 - check if the link's target type matches the invalidated type\n // We need to use the ontology provider to get the link metadata\n // Since this is async, we'll collect all the metadata check promises\n return (async () => {\n // Get the source object metadata to determine link target type\n const sourceMetadata = await this.store.client[additionalContext].ontologyProvider.getObjectDefinition(this.#sourceApiName);\n const linkDef = sourceMetadata.links?.[this.#linkName];\n if (!linkDef || linkDef.targetType !== objectType) return;\n const promise = this.revalidate(true);\n changes?.modified.add(this.cacheKey);\n return promise;\n })();\n }\n };\n}\n\n/**\n * Type guard to check if a cache key is a SpecificLinkCacheKey\n */\nexport function isSpecificLinkCacheKey(key) {\n return key.type === \"specificLink\";\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport deepEqual from \"fast-deep-equal\";\nimport { DEBUG_ONLY__cacheKeysToString } from \"../CacheKey.js\";\nimport { isObjectInstance } from \"../isObjectInstance.js\";\nimport { RDP_IDX } from \"../list/ListCacheKey.js\";\nimport { Query } from \"../Query.js\";\nimport { NoOpSortingStrategy } from \"../sorting/SortingStrategy.js\";\nimport { createCollectionConnectable } from \"./createCollectionConnectable.js\";\nimport { removeDuplicates } from \"./removeDuplicates.js\";\n\n/**\n * Base class for collection-based queries (lists and links)\n * Provides common functionality for working with collections of objects\n */\nexport class BaseListQuery extends Query {\n /**\n * The sorting strategy to use for this collection\n * @protected\n */\n sortingStrategy = new NoOpSortingStrategy();\n\n /**\n * Get RDP configuration from the cache key\n */\n get rdpConfig() {\n return this.cacheKey.otherKeys[RDP_IDX];\n }\n\n // Collection-specific behavior is implemented by subclasses\n /**\n * Token for the next page of results\n * @protected\n */\n\n /**\n * Promise tracking an in-progress page fetch\n * @protected\n */\n\n //\n // Shared Implementations\n //\n\n /**\n * Standard method to update a list of objects\n * Handles common list update patterns for both ListQuery and SpecificLinkQuery\n *\n * @param items Objects or cache keys to add to the list\n * @param status Status to set for the list\n * @param batch Batch context to use\n * @param append Whether to append to the existing list or replace it\n * @returns The updated entry\n */\n _updateList(items, status, batch, append = false) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"updateList\"\n }).debug(`{status: ${status}, append: ${append}}`, JSON.stringify(items, null, 2));\n }\n let objectCacheKeys;\n if (items.length === 0) {\n objectCacheKeys = [];\n } else if (isObjectInstance(items[0])) {\n // Items are object instances, need to store them first\n objectCacheKeys = this.store.objects.storeOsdkInstances(items, batch, this.rdpConfig);\n } else {\n // Items are already cache keys\n objectCacheKeys = items;\n }\n objectCacheKeys = this.#retainReleaseAppend(batch, append, objectCacheKeys);\n objectCacheKeys = this._sortCacheKeys(objectCacheKeys, batch);\n objectCacheKeys = removeDuplicates(objectCacheKeys, batch);\n return this.writeToStore({\n data: objectCacheKeys\n }, status, batch);\n }\n\n /**\n * Common implementation for writing to store for collection-based queries\n * @param data The collection data to write to the store\n * @param status The status to set\n * @param batch The batch context\n */\n writeToStore(data, status, batch) {\n const entry = batch.read(this.cacheKey);\n if (entry && deepEqual(data, entry.value)) {\n // Check if both data AND status are the same\n if (entry.status === status) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"writeToStore\"\n }).debug(`Collection data was deep equal and status unchanged (${status}), skipping update`);\n }\n // Return the existing entry without writing to avoid unnecessary notifications\n return entry;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"writeToStore\"\n }).debug(`Collection data was deep equal, just updating status from ${entry.status} to ${status}`);\n }\n // Keep the same value but update status and lastUpdated\n return batch.write(this.cacheKey, entry.value, status);\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"writeToStore\"\n }).debug(`{status: ${status}},`, DEBUG_ONLY__cacheKeysToString(data.data));\n }\n const ret = batch.write(this.cacheKey, data, status);\n this.registerCacheChanges(batch);\n return ret;\n }\n\n /**\n * Register changes to the cache based on the specific collection type\n * Implemented by subclasses to handle specific change registration\n */\n\n /**\n * Common method for managing object reference counting and appending results\n * Used by collection queries when updating object references\n *\n * @param batch The batch context to use\n * @param append Whether to append to existing objects or replace them\n * @param objectCacheKeys Array of object cache keys to process\n * @returns The final array of object cache keys after retain/release/append\n */\n #retainReleaseAppend(batch, append, objectCacheKeys) {\n const existingList = batch.read(this.cacheKey);\n\n // whether its append or update we need to retain all the new objects\n if (!batch.optimisticWrite) {\n if (!append) {\n // we need to release all the old objects\n // N.B. the store keeps the cache keys around for a bit so we don't\n // need to worry about them being GC'd before we re-retain them\n for (const objectCacheKey of existingList?.value?.data ?? []) {\n this.store.cacheKeys.release(objectCacheKey);\n }\n }\n for (const objectCacheKey of objectCacheKeys) {\n this.store.cacheKeys.retain(objectCacheKey);\n }\n }\n if (append) {\n objectCacheKeys = [...(existingList?.value?.data ?? []), ...objectCacheKeys];\n }\n return objectCacheKeys;\n }\n _dispose() {\n this.store.batch({}, batch => {\n const entry = batch.read(this.cacheKey);\n if (entry) {\n for (const objectCacheKey of entry.value?.data ?? []) {\n this.store.cacheKeys.release(objectCacheKey);\n }\n }\n });\n }\n\n /**\n * Creates a payload from collection parameters\n * Default implementation that covers common fields for all collection types\n * Subclasses may override to add type-specific fields if needed\n *\n * @param params Common collection parameters\n * @returns A typed payload for the specific collection type\n */\n createPayload(params) {\n return {\n resolvedList: params.resolvedData,\n isOptimistic: params.isOptimistic,\n fetchMore: this.fetchMore,\n hasMore: this.nextPageToken != null,\n status: params.status,\n lastUpdated: params.lastUpdated\n }; // Type assertion needed since we don't know exact subtype\n }\n\n /**\n * Creates a connectable observable for this collection\n * Common implementation shared by all collection types\n *\n * @param subject The subject to connect to\n * @returns A connectable observable of the collection's payload type\n */\n _createConnectable(subject) {\n return createCollectionConnectable(subject, this.store.subjects, params => this.createPayload(params));\n }\n\n /**\n * @override Reset pagination state before a fetch\n */\n _preFetch() {\n this.nextPageToken = undefined;\n super._preFetch();\n }\n\n /**\n * Common fetchMore implementation for pagination\n * Handles pending request management and loading states\n */\n fetchMore = () => {\n if (this.pendingPageFetch) {\n return this.pendingPageFetch;\n }\n if (this.pendingFetch) {\n this.pendingPageFetch = (async () => {\n await this.pendingFetch;\n await this.fetchMore();\n })().finally(() => {\n this.pendingPageFetch = undefined;\n });\n return this.pendingPageFetch;\n }\n if (this.nextPageToken == null) {\n return Promise.resolve(undefined);\n }\n this.store.batch({}, batch => {\n this.setStatus(\"loading\", batch);\n });\n this.pendingFetch = this.fetchPageAndUpdate(\"loaded\", this.abortController?.signal).then(() => void 0).finally(() => {\n this.pendingFetch = undefined;\n });\n return this.pendingFetch;\n };\n\n /**\n * Minimum number of results to load initially\n * May be overridden by subclasses for specific collection types\n * @protected\n */\n minResultsToLoad = 0;\n\n /**\n * Common _fetchAndStore implementation for pagination\n * Uses fetchPageAndUpdate to load the initial set of data\n * Will load multiple pages if necessary to reach minResultsToLoad\n */\n async _fetchAndStore() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"_fetchAndStore\"\n }).debug(\"fetching pages\");\n }\n\n // Keep fetching pages until we have the minimum number of results or no more pages\n while (true) {\n const entry = await this.fetchPageAndUpdate(\"loading\", this.abortController?.signal);\n if (!entry) {\n // we were aborted\n return;\n }\n\n // Check if we have enough results or no more pages\n const count = entry.value?.data.length || 0;\n if (count >= this.minResultsToLoad || this.nextPageToken == null) {\n break;\n }\n await Promise.resolve();\n }\n this.store.batch({}, batch => {\n this.setStatus(\"loaded\", batch);\n });\n return Promise.resolve();\n }\n\n /**\n * Template method for fetching a page of data and updating the store\n * Provides common error handling and abort signal checking\n *\n * @param status The status to set for the entry\n * @param signal Optional AbortSignal for cancellation\n * @returns A promise that resolves to the updated entry or undefined if aborted\n */\n async fetchPageAndUpdate(status, signal) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"fetchPageAndUpdate\"\n }).debug(`Fetching data with status: ${status}`);\n }\n\n // Early abort check\n if (signal?.aborted) {\n return undefined;\n }\n try {\n const hadPreviousPage = this.nextPageToken != null;\n\n // Call the subclass-specific implementation to fetch data\n const result = await this.fetchPageData(signal);\n\n // Check for abort again after fetch\n if (signal?.aborted) {\n return undefined;\n }\n\n // Store the fetched data using batch operations\n const {\n retVal\n } = this.store.batch({}, batch => {\n const append = hadPreviousPage;\n const finalStatus = result.nextPageToken ? status : \"loaded\";\n const objectKeys = this.store.objects.storeOsdkInstances(result.data, batch, this.rdpConfig);\n return this._updateList(objectKeys, finalStatus, batch, append);\n });\n return retVal;\n } catch (error) {\n // Log any errors that occur\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"fetchPageAndUpdate\"\n }).error(\"Error fetching data\", error);\n }\n\n // For unexpected errors, write error status if not aborted\n if (!signal?.aborted) {\n const {\n retVal\n } = this.store.batch({}, batch => {\n return this.handleFetchError(error, status, batch);\n });\n return retVal;\n }\n\n // If aborted, just return undefined\n return undefined;\n }\n }\n\n /**\n * Abstract method that subclasses implement for their specific data fetching logic\n *\n * @param signal Optional AbortSignal for cancellation\n * @returns A promise that resolves to the fetched data\n */\n\n /**\n * Handle fetch errors by setting appropriate error state\n * Default implementation that subclasses can override\n *\n * @param error The error that occurred\n * @param status The intended status if successful\n * @param batch The batch context to use\n * @returns The updated entry with error status\n */\n handleFetchError(_error, _status, batch) {\n // Default implementation writes an empty list with error status\n // Most subclasses should be able to use this\n return this.writeToStore({\n data: []\n }, \"error\", batch);\n }\n\n /**\n * Sort the collection items using the configured sorting strategy\n * @param objectCacheKeys - The cache keys to sort\n * @param batch - The batch context\n * @returns Sorted array of cache keys\n */\n _sortCacheKeys(objectCacheKeys, batch) {\n return this.sortingStrategy.sortCacheKeys(objectCacheKeys, batch);\n }\n\n /**\n * Unified method for updating collection data in the store\n * Handles storing, sorting, deduplication, and reference counting\n *\n * @param items - Either object cache keys or object instances to update\n * @param options - Configuration options for the update\n * @param batch - The batch context to use\n * @returns The updated entry\n */\n updateCollection(items, options, batch) {\n if (process.env.NODE_ENV !== \"production\") {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"updateCollection\"\n }) : this.logger;\n logger?.debug(`{status: ${options.status}, append: ${options.append}}`, JSON.stringify(items, null, 2));\n }\n\n // Step 1: Convert items to object cache keys if needed\n let objectCacheKeys;\n if (items.length === 0) {\n objectCacheKeys = [];\n } else if (isObjectInstance(items[0])) {\n // Items are object instances, need to store them first\n objectCacheKeys = this.store.objects.storeOsdkInstances(items, batch, this.rdpConfig);\n } else {\n // Items are already cache keys\n objectCacheKeys = items;\n }\n\n // Step 2: Handle retain/release/append logic\n objectCacheKeys = this.#retainReleaseAppend(batch, options.append ?? false, objectCacheKeys);\n\n // Step 3: Sort using the configured sorting strategy\n objectCacheKeys = this._sortCacheKeys(objectCacheKeys, batch);\n\n // Step 4: Remove duplicates\n objectCacheKeys = removeDuplicates(objectCacheKeys, batch);\n\n // Step 5: Write to store\n return this.writeToStore({\n data: objectCacheKeys\n }, options.status, batch);\n }\n\n //\n // Shared Websocket Subscription Methods\n //\n\n /**\n * Create standard websocket subscription handlers for an ObjectSet.\n * Subclasses can override individual handlers for custom behavior.\n *\n * @param objectSet The ObjectSet to subscribe to\n * @param sub The parent subscription to add cleanup to\n * @param methodName The method name for logging purposes\n */\n createWebsocketSubscription(objectSet, sub, methodName = \"registerStreamUpdates\") {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName\n }) : this.logger;\n if (process.env.NODE_ENV !== \"production\") {\n logger?.child({\n methodName\n }).info(\"Subscribing from websocket\");\n }\n try {\n const websocketSubscription = objectSet.subscribe({\n onChange: this.onOswChange.bind(this),\n onError: this.onOswError.bind(this),\n onOutOfDate: this.onOswOutOfDate.bind(this),\n onSuccessfulSubscription: this.onOswSuccessfulSubscription.bind(this)\n });\n sub.add(() => {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.child({\n methodName\n }).info(\"Unsubscribing from websocket\");\n }\n websocketSubscription.unsubscribe();\n });\n } catch (error) {\n if (this.logger) {\n this.logger.child({\n methodName\n }).error(\"Failed to register stream updates\", error);\n }\n this.onOswError({\n subscriptionClosed: true,\n error\n });\n }\n }\n\n /**\n * Handler called when websocket subscription is successfully established.\n */\n onOswSuccessfulSubscription() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"onSuccessfulSubscription\"\n }).debug(\"\");\n }\n }\n\n /**\n * Handler called when subscribed data becomes out of date.\n */\n onOswOutOfDate() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"onOutOfDate\"\n }).debug(\"\");\n }\n }\n\n /**\n * Handler called when websocket subscription encounters an error.\n */\n onOswError(errors) {\n if (this.logger) {\n this.logger?.child({\n methodName: \"onError\"\n }).error(\"subscription errors\", errors);\n }\n }\n\n /**\n * Handler called when an object in the subscribed set is added or updated.\n * Default implementation stores the object with RDP config if available.\n *\n * @param update The object update notification\n */\n onOswChange({\n object,\n state\n }) {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"registerStreamUpdates\"\n }) : this.logger;\n if (process.env.NODE_ENV !== \"production\") {\n logger?.child({\n methodName: \"onChange\"\n }).debug(`Got an update of type: ${state}`, object);\n }\n if (state === \"ADDED_OR_UPDATED\") {\n this.store.batch({}, batch => {\n this.store.objects.storeOsdkInstances([object], batch, this.rdpConfig // Safe - null for queries without RDPs\n );\n });\n } else if (state === \"REMOVED\") {\n this.onOswRemoved(object);\n }\n }\n\n /**\n * Handler called when an object is removed from the subscribed set.\n * Default implementation deletes the object from cache.\n * ListQuery overrides this for list-specific removal logic.\n *\n * @param object The removed object\n */\n onOswRemoved(object) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"onRemoved\"\n }).debug(\"Removing object\", object);\n }\n this.store.batch({}, batch => {\n const objectCacheKey = this.store.cacheKeys.get(\"object\", object.$apiName, object.$primaryKey);\n batch.delete(objectCacheKey, \"loaded\");\n });\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Type guard to check if an item is an object instance\n */\nexport function isObjectInstance(item) {\n return item != null && typeof item === \"object\" && \"$primaryKey\" in item;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Index constants for accessing otherKeys array elements\nexport const TYPE_IDX = 0;\nexport const API_NAME_IDX = 1;\nexport const WHERE_IDX = 2;\nexport const ORDER_BY_IDX = 3;\nexport const RDP_IDX = 4;\nexport const INTERSECT_IDX = 5;\nexport const PIVOT_IDX = 6;","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Strategy interface for collection sorting\n */\n\n/**\n * No-operation sorting strategy that preserves original order\n */\nexport class NoOpSortingStrategy {\n sortCacheKeys(objectCacheKeys, _batch) {\n return objectCacheKeys;\n }\n}\n/**\n * Sorting strategy for OrderBy clauses\n */\nexport class OrderBySortingStrategy {\n constructor(apiName, orderBy) {\n this.apiName = apiName;\n this.orderBy = orderBy;\n this.sortFns = createOrderBySortFns(orderBy);\n }\n sortCacheKeys(objectCacheKeys, batch) {\n if (Object.keys(this.orderBy).length === 0) {\n return objectCacheKeys;\n }\n return objectCacheKeys.sort((a, b) => {\n for (const sortFn of this.sortFns) {\n const ret = sortFn(batch.read(a)?.value?.$as(this.apiName), batch.read(b)?.value?.$as(this.apiName));\n if (ret !== 0) {\n return ret;\n }\n }\n return 0;\n });\n }\n}\n\n/**\n * Creates sort functions for an orderBy clause\n * @param orderBy - The order by clause\n * @returns Array of sort functions\n */\nexport function createOrderBySortFns(orderBy) {\n return Object.entries(orderBy).map(([key, order]) => {\n return (a, b) => {\n const aValue = a?.[key];\n const bValue = b?.[key];\n if (aValue == null && bValue == null) {\n return 0;\n }\n if (aValue == null) {\n return 1;\n }\n if (bValue == null) {\n return -1;\n }\n const m = order === \"asc\" ? -1 : 1;\n return aValue < bValue ? m : aValue > bValue ? -m : 0;\n };\n });\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { asapScheduler, combineLatest, connectable, distinctUntilChanged, map, of, ReplaySubject, scheduled, switchMap } from \"rxjs\";\n/**\n * Creates a connectable observable for a collection of objects\n *\n * @param subject The subject to connect to\n * @param store The store to use for resolving objects\n * @param createPayload A function that creates the payload from common parameters\n * @returns A connectable observable of the payload type\n */\nexport function createCollectionConnectable(subject, subjects, createPayload) {\n return connectable(subject.pipe(switchMap(listEntry => {\n const resolvedData = listEntry?.value?.data == null || listEntry.value.data.length === 0 ? of([]) : combineLatest(listEntry.value.data.map(cacheKey => subjects.get(cacheKey).pipe(map(objectEntry => objectEntry?.value), distinctUntilChanged())));\n return scheduled(combineLatest({\n resolvedData,\n isOptimistic: of(listEntry.isOptimistic),\n status: of(listEntry.status),\n lastUpdated: of(listEntry.lastUpdated)\n }).pipe(map(params => createPayload({\n resolvedData: Array.isArray(params.resolvedData) ? params.resolvedData : [],\n isOptimistic: params.isOptimistic,\n status: params.status,\n lastUpdated: params.lastUpdated\n }))), asapScheduler);\n })), {\n resetOnDisconnect: false,\n connector: () => new ReplaySubject(1)\n });\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Removes duplicate object cache keys from an array while maintaining order.\n * Also reads each key from the batch context (for side effects).\n *\n * @param objectCacheKeys Array of object cache keys that may contain duplicates\n * @param batch The batch context used to read cache entries\n * @returns Array with duplicates removed, maintaining the original order\n */\nexport function removeDuplicates(objectCacheKeys, batch) {\n const visited = new Set();\n return objectCacheKeys.filter(key => {\n batch.read(key);\n if (visited.has(key)) {\n return false;\n }\n visited.add(key);\n return true;\n });\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { InterfaceListQuery } from \"./InterfaceListQuery.js\";\nimport { ObjectListQuery } from \"./ObjectListQuery.js\";\nexport class ListsHelper extends AbstractHelper {\n constructor(store, cacheKeys, whereCanonicalizer, orderByCanonicalizer, rdpCanonicalizer, intersectCanonicalizer, pivotCanonicalizer) {\n super(store, cacheKeys);\n this.whereCanonicalizer = whereCanonicalizer;\n this.orderByCanonicalizer = orderByCanonicalizer;\n this.rdpCanonicalizer = rdpCanonicalizer;\n this.intersectCanonicalizer = intersectCanonicalizer;\n this.pivotCanonicalizer = pivotCanonicalizer;\n }\n observe(options, subFn) {\n const ret = super.observe(options, subFn);\n if (options.streamUpdates) {\n ret.query.registerStreamUpdates(ret.subscription);\n }\n return ret;\n }\n getQuery(options) {\n const {\n type: typeDefinition,\n where,\n orderBy,\n withProperties,\n intersectWith,\n pivotTo\n } = options;\n const {\n apiName,\n type\n } = typeDefinition;\n const canonWhere = this.whereCanonicalizer.canonicalize(where ?? {});\n const canonOrderBy = this.orderByCanonicalizer.canonicalize(orderBy ?? {});\n const canonRdp = withProperties ? this.rdpCanonicalizer.canonicalize(withProperties) : undefined;\n const canonIntersect = intersectWith && intersectWith.length > 0 ? this.intersectCanonicalizer.canonicalize(intersectWith) : undefined;\n const canonPivot = pivotTo ? this.pivotCanonicalizer.canonicalize(apiName, pivotTo) : undefined;\n const listCacheKey = this.cacheKeys.get(\"list\", type, apiName, canonWhere, canonOrderBy, canonRdp, canonIntersect, canonPivot);\n return this.store.queries.get(listCacheKey, () => {\n const QueryClass = type === \"object\" ? ObjectListQuery : InterfaceListQuery;\n return new QueryClass(this.store, this.store.subjects.get(listCacheKey), apiName, listCacheKey, options);\n });\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport groupBy from \"object.groupby\";\nimport invariant from \"tiny-invariant\";\nimport { ObjectDefRef, UnderlyingOsdkObject } from \"../../../object/convertWireToOsdkObjects/InternalSymbols.js\";\nimport { ListQuery, RDP_IDX } from \"./ListQuery.js\";\nexport class InterfaceListQuery extends ListQuery {\n createObjectSet(store) {\n const rdpConfig = this.cacheKey.otherKeys[RDP_IDX];\n const type = \"interface\";\n const objectTypeDef = {\n type,\n apiName: this.apiName\n };\n if (rdpConfig != null) {\n return store.client(objectTypeDef).withProperties(rdpConfig).where(this.canonicalWhere);\n }\n return store.client(objectTypeDef).where(this.canonicalWhere);\n }\n async revalidateObjectType(apiName) {\n const objectMetadata = await this.store.client.fetchMetadata({\n type: \"object\",\n apiName\n });\n if (this.apiName in objectMetadata.interfaceMap) {\n await this.revalidate(/* force */true);\n }\n }\n async postProcessFetchedData(data) {\n return reloadDataAsFullObjects(this.store.client, data);\n }\n extractRelevantObjects(changes) {\n const matchesApiName = ([, object]) => {\n return this.apiName in object[ObjectDefRef].interfaceMap;\n };\n const added = Array.from(changes.addedObjects).filter(matchesApiName).map(([, object]) => object.$as(this.apiName));\n const modified = Array.from(changes.modifiedObjects).filter(matchesApiName).map(([, object]) => object.$as(this.apiName));\n return {\n added: {\n all: added,\n strictMatches: new Set(),\n sortaMatches: new Set()\n },\n modified: {\n all: modified,\n strictMatches: new Set(),\n sortaMatches: new Set()\n }\n };\n }\n}\n\n// Hopefully this can go away when we can just request the full object properties on first load\nasync function reloadDataAsFullObjects(client, data) {\n const groups = groupBy(data, x => x.$objectType);\n const objectTypeToPrimaryKeyToObject = Object.fromEntries(await Promise.all(Object.entries(groups).map(async ([apiName, objects]) => {\n // to keep InternalSimpleOsdkInstance simple, we make both the `ObjectDefRef` and\n // the `InterfaceDefRef` optional but we know that the right one is on there\n // thus we can `!`\n const objectDef = objects[0][UnderlyingOsdkObject][ObjectDefRef];\n const where = {\n [objectDef.primaryKeyApiName]: {\n $in: objects.map(x => x.$primaryKey)\n }\n };\n const result = await client(objectDef).where(where).fetchPage();\n return [apiName, Object.fromEntries(result.data.map(x => [x.$primaryKey, x]))];\n })));\n data = data.map(obj => {\n !objectTypeToPrimaryKeyToObject[obj.$objectType][obj.$primaryKey] ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Could not find object ${obj.$objectType} ${obj.$primaryKey}`) : invariant(false) : void 0;\n return objectTypeToPrimaryKeyToObject[obj.$objectType][obj.$primaryKey];\n });\n return data;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nimport { additionalContext } from \"../../../Client.js\";\nimport { getWireObjectSet } from \"../../../objectSet/createObjectSet.js\";\nimport { BaseListQuery } from \"../base-list/BaseListQuery.js\";\nimport { DEBUG_ONLY__changesToString } from \"../Changes.js\";\nimport { getObjectTypesThatInvalidate } from \"../getObjectTypesThatInvalidate.js\";\nimport { objectSortaMatchesWhereClause as objectMatchesWhereClause } from \"../objectMatchesWhereClause.js\";\nimport { OrderBySortingStrategy } from \"../sorting/SortingStrategy.js\";\nimport { INTERSECT_IDX, ORDER_BY_IDX, PIVOT_IDX, WHERE_IDX } from \"./ListCacheKey.js\";\nexport { API_NAME_IDX, INTERSECT_IDX, PIVOT_IDX, RDP_IDX } from \"./ListCacheKey.js\";\n/**\n * Base class for filtered and sorted object collection queries.\n * - Handles where clause filtering and orderBy sorting\n * - Manages pagination through fetchMore\n * - Auto-updates when matching objects change\n * - Uses canonicalized cache keys for consistency\n */\nexport class ListQuery extends BaseListQuery {\n // pageSize?: number; // this is the internal page size. we need to track this properly\n\n #whereClause;\n\n // Using base class minResultsToLoad instead of a private property\n #orderBy;\n #intersectWith;\n #pivotInfo;\n #objectSet;\n\n /**\n * Register changes to the cache specific to ListQuery\n */\n registerCacheChanges(batch) {\n batch.changes.registerList(this.cacheKey);\n }\n constructor(store, subject, apiName, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `ListQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n this.apiName = apiName;\n this.#whereClause = cacheKey.otherKeys[WHERE_IDX];\n this.#orderBy = cacheKey.otherKeys[ORDER_BY_IDX];\n this.#intersectWith = cacheKey.otherKeys[INTERSECT_IDX];\n this.#pivotInfo = cacheKey.otherKeys[PIVOT_IDX];\n this.#objectSet = this.createObjectSet(store);\n\n // Only initialize the sorting strategy here if there's no pivotTo.\n // When pivotTo is used, the target type differs from apiName, so we\n // defer initialization to fetchPageData where we can resolve the actual type.\n if (!this.#pivotInfo) {\n this.sortingStrategy = new OrderBySortingStrategy(this.apiName, this.#orderBy);\n }\n if (opts.autoFetchMore === true) {\n this.minResultsToLoad = Number.MAX_SAFE_INTEGER;\n } else if (typeof opts.autoFetchMore === \"number\") {\n this.minResultsToLoad = Math.max(0, opts.autoFetchMore);\n } else {\n this.minResultsToLoad = 0;\n }\n }\n get canonicalWhere() {\n return this.#whereClause;\n }\n get canonicalIntersectWith() {\n return this.#intersectWith;\n }\n get canonicalPivotInfo() {\n return this.#pivotInfo;\n }\n\n /**\n * Create the ObjectSet for this query.\n */\n\n /**\n * Implements fetchPageData from BaseCollectionQuery template method\n * Fetches a page of data\n */\n async fetchPageData(signal) {\n if (Object.keys(this.#orderBy).length > 0 && !(this.sortingStrategy instanceof OrderBySortingStrategy)) {\n const wireObjectSet = getWireObjectSet(this.#objectSet);\n const {\n resultType\n } = await getObjectTypesThatInvalidate(this.store.client[additionalContext], wireObjectSet);\n this.sortingStrategy = new OrderBySortingStrategy(resultType.apiName, this.#orderBy);\n }\n\n // Fetch the data with pagination\n const resp = await this.#objectSet.fetchPage({\n $nextPageToken: this.nextPageToken,\n $pageSize: this.options.pageSize,\n // For now this keeps the shared test code from falling apart\n // but shouldn't be needed ideally\n ...(Object.keys(this.#orderBy).length > 0 ? {\n $orderBy: this.#orderBy\n } : {})\n });\n if (signal?.aborted) {\n throw new Error(\"Aborted\");\n }\n this.nextPageToken = resp.nextPageToken;\n const fetchedData = await this.postProcessFetchedData(resp.data);\n return {\n ...resp,\n data: fetchedData\n };\n }\n\n /**\n * Handle fetch errors by setting appropriate error state and notifying subscribers\n */\n handleFetchError(error, _status, batch) {\n this.logger?.error(\"error\", error);\n this.store.subjects.get(this.cacheKey).error(error);\n\n // We don't call super.handleFetchError because ListQuery has special error handling\n // but we still use writeToStore to create a properly structured Entry\n return this.writeToStore({\n data: []\n }, \"error\", batch);\n }\n\n /**\n * Will revalidate the list if its query is affected by invalidating the\n * apiName of the object type passed in.\n *\n * @param apiName to invalidate\n * @returns\n */\n\n /**\n * Postprocess fetched data.\n */\n\n invalidateObjectType = async (objectType, changes) => {\n if (this.apiName === objectType) {\n // Only invalidate lists for the matching apiName\n changes?.modified.add(this.cacheKey);\n return this.revalidate(true);\n }\n };\n\n /**\n * Note: This method is not async because I want it to return right after it\n * finishes the synchronous updates. The promise that is returned\n * will resolve after the revalidation is complete.\n * @param changes\n * @param optimisticId\n * @returns If revalidation is needed, a promise that resolves after the\n * revalidation is complete. Otherwise, undefined.\n */\n\n maybeUpdateAndRevalidate = (changes, optimisticId) => {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"maybeUpdateAndRevalidate\"\n }).debug(DEBUG_ONLY__changesToString(changes));\n this.logger?.child({\n methodName: \"maybeUpdateAndRevalidate\"\n }).debug(`Already in changes? ${changes.modified.has(this.cacheKey)}`);\n }\n if (changes.modified.has(this.cacheKey)) return;\n // mark ourselves as updated so we don't infinite recurse.\n changes.modified.add(this.cacheKey);\n try {\n const relevantObjects = this._extractAndCategorizeRelevantObjects(changes);\n\n // If we got purely strict matches we can just update the list and move\n // on with our lives. But if we got sorta matches, then we need to revalidate\n // the list so we preemptively set it to loading to avoid thrashing the store.\n const status = optimisticId || relevantObjects.added.sortaMatches.size > 0 || relevantObjects.modified.sortaMatches.size > 0 ? \"loading\" : \"loaded\";\n\n // while we only push updates for the strict matches, we still need to\n // trigger the list updating if some of our objects changed\n\n const newList = [];\n let needsRevalidation = false;\n this.store.batch({\n optimisticId,\n changes\n }, batch => {\n const existingList = new Set(batch.read(this.cacheKey)?.value?.data);\n const toAdd = new Set(\n // easy case. objects are new to the cache and they match this filter\n relevantObjects.added.strictMatches);\n\n // anything thats been deleted can be removed, so start there\n const toRemove = new Set(changes.deleted);\n\n // deal with the modified objects\n for (const obj of relevantObjects.modified.all) {\n if (relevantObjects.modified.strictMatches.has(obj)) {\n const objectCacheKey = this.getObjectCacheKey(obj);\n if (!existingList.has(objectCacheKey)) {\n // object is new to the list\n toAdd.add(obj);\n }\n continue;\n } else if (batch.optimisticWrite) {\n // we aren't removing objects in optimistic mode\n // we also don't want to trigger revalidation in optimistic mode\n // as it should be triggered when the optimistic job is done\n continue;\n } else {\n // object is no longer a strict match\n const existingObjectCacheKey = this.getObjectCacheKey(obj);\n toRemove.add(existingObjectCacheKey);\n if (relevantObjects.modified.sortaMatches.has(obj)) {\n // since it might still be in the list we need to revalidate\n needsRevalidation = true;\n }\n }\n }\n for (const key of existingList) {\n if (toRemove.has(key)) continue;\n newList.push(key);\n }\n for (const obj of toAdd) {\n newList.push(this.getObjectCacheKey(obj));\n }\n this._updateList(newList, status, batch, /* append */false);\n });\n if (needsRevalidation) {\n return this.revalidate(true);\n }\n return undefined;\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"maybeUpdateAndRevalidate\"\n }).debug(\"in finally\");\n }\n }\n };\n #matchType(obj) {\n // if its a strict match we can just insert it into place\n if (objectMatchesWhereClause(obj, this.#whereClause, true)) {\n return \"strict\";\n }\n // sorta match means it used a filter we cannot use on the frontend\n if (objectMatchesWhereClause(obj, this.#whereClause, false)) {\n return \"sorta\";\n }\n return false;\n }\n _extractAndCategorizeRelevantObjects(changes) {\n const relevantObjects = this.extractRelevantObjects(changes);\n\n // categorize\n for (const group of Object.values(relevantObjects)) {\n for (const obj of group.all ?? []) {\n const matchType = this.#matchType(obj);\n if (matchType) {\n group[`${matchType}Matches`].add(obj);\n }\n }\n }\n return relevantObjects;\n }\n\n /**\n * Extract relevant objects for this query type.\n */\n\n registerStreamUpdates(sub) {\n this.createWebsocketSubscription(this.#objectSet, sub, \"observeList\");\n }\n onOswChange({\n object: objOrIface,\n state\n }) {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"registerStreamUpdates\"\n }) : this.logger;\n if (process.env.NODE_ENV !== \"production\") {\n logger?.child({\n methodName: \"onChange\"\n }).debug(`Got an update of type: ${state}`, objOrIface);\n }\n if (state === \"ADDED_OR_UPDATED\") {\n const object = objOrIface.$apiName !== objOrIface.$objectType ? objOrIface.$as(objOrIface.$objectType) : objOrIface;\n this.store.batch({}, batch => {\n this.store.objects.storeOsdkInstances([object], batch, this.rdpConfig);\n });\n } else if (state === \"REMOVED\") {\n this.onOswRemoved(objOrIface);\n }\n }\n onOswRemoved(objOrIface) {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"onOswRemoved\"\n }) : this.logger;\n this.store.batch({}, batch => {\n // Read the truth layer (since not optimistic)\n const existing = batch.read(this.cacheKey);\n !existing ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"the truth value for our list should exist as we already subscribed\") : invariant(false) : void 0;\n if (existing.status === \"loaded\") {\n const objectCacheKey = this.getObjectCacheKey(objOrIface);\n // remove the object from the list\n const newObjects = existing.value?.data.filter(o => o !== objectCacheKey);\n\n // If the filter didn't change anything, then the list was already\n // updated (or didn't exist, which is nonsensical)\n if (newObjects?.length !== existing.value?.data.length) {\n batch.changes.registerList(this.cacheKey);\n batch.write(this.cacheKey, {\n data: newObjects ?? []\n }, \"loaded\");\n // Should there be an else for this case? Do we need to invalidate\n // the paging tokens we may have? FIXME\n }\n return;\n }\n // There may be a tiny race here where OSW tells us the object has\n // been removed but an outstanding invalidation of this query is\n // about to return. In this case, its possible that we remove this item\n // from the list and then the returned list load re-adds it.\n // To avoid this, we will just force reload the query to be sure\n // we don't leave things in a bad state.\n if (process.env.NODE_ENV !== \"production\") {\n logger?.info(\"Removing an object from an object list that is in the middle of being loaded.\", existing);\n }\n this.revalidate(/* force */true).catch(e => {\n if (logger) {\n logger?.error(\"Uncaught error while revalidating list\", e);\n } else {\n // Make sure we write to the console if there is no logger!\n // eslint-disable-next-line no-console\n console.error(\"Uncaught error while revalidating list\", e);\n }\n });\n });\n }\n\n /**\n * Get cache key for object.\n */\n getObjectCacheKey(obj) {\n const pk = obj.$primaryKey;\n return this.cacheKeys.get(\"object\", obj.$objectType, pk, this.rdpConfig ?? undefined);\n }\n}\nexport function isListCacheKey(cacheKey) {\n return cacheKey.type === \"list\";\n}\n\n/**\n * Copied from @osdk/api\n */","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\n// Suppose we did an object set that is basically\n// A.where()\n// pivot(B).where()\n// pivot(C).where()\n// pivot(A).where()\n//\n// Any change to A needs to invalidate the chain because of the inner most A.\n//\n// But B.pivotTo(A) does not need all A's to invalidate the chain.\n//\n// For now we are keeping things conservative and just invalidating A either way,\n// but we can make this better.\n\nexport async function getObjectTypesThatInvalidate(mc, objectSet) {\n const counts = {};\n const resultType = await calcObjectSet(objectSet, {\n counts,\n methodInput: undefined,\n ontologyProvider: mc.ontologyProvider\n });\n\n // we need to uncount the final result type\n const tweaked = {\n ...counts,\n [resultType.apiName]: counts[resultType.apiName] - 1\n };\n return {\n resultType,\n counts,\n invalidationSet: new Set(Object.entries(tweaked).filter(([, v]) => v > 0).map(([k]) => k))\n };\n}\nasync function calcObjectSet(os, ctx) {\n const op = ctx.ontologyProvider;\n async function bumpObject(apiName) {\n const objectType = await op.getObjectDefinition(apiName);\n ctx.counts[apiName] = (ctx.counts[apiName] ?? 0) + 1;\n return objectType;\n }\n async function bumpInterface(apiName) {\n const interfaceDef = await op.getInterfaceDefinition(apiName);\n for (const s of interfaceDef.implementedBy ?? []) {\n ctx.counts[s] = (ctx.counts[s] ?? 0) + 1;\n }\n return interfaceDef;\n }\n switch (os.type) {\n case \"base\":\n return await bumpObject(os.objectType);\n case \"interfaceBase\":\n return await bumpInterface(os.interfaceType);\n case \"interfaceLinkSearchAround\":\n {\n const srcDef = await calcObjectSet(os.objectSet, ctx);\n !(srcDef.type === \"interface\") ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n for (const [k, v] of Object.entries(srcDef.links)) {\n if (k === os.interfaceLink) {\n if (v.targetType === \"object\") {\n return await bumpObject(v.targetType);\n }\n return await bumpInterface(v.targetType);\n }\n }\n\n // if we got here then we did not find the link and something is wrong.\n throw new Error(`Could not find link ${os.interfaceLink} in object set ${JSON.stringify(os.objectSet)}`);\n }\n case \"searchAround\":\n {\n const contextDef = await calcObjectSet(os.objectSet, ctx);\n !(contextDef.type === \"object\") ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n for (const [k, v] of Object.entries(contextDef.links)) {\n if (k === os.link) {\n return await bumpObject(v.targetType);\n }\n }\n\n // if we got here then we did not find the link and something is wrong.\n throw new Error(`Could not find link ${os.link} in object set ${JSON.stringify(os.objectSet)}`);\n }\n case \"filter\":\n // for the simple version of this, we can ignore the filter being based on any RDPs because\n // our RDP handling will ensure we invalidate based on those.\n return calcObjectSet(os.objectSet, ctx);\n case \"union\":\n case \"subtract\":\n case \"intersect\":\n // all of these entries need their counts to be merged as the max of each\n\n // suppose you have a simple `Union(A, A)`. We would end up with A:2\n // but we only need A:1.\n\n // suppose you have `Union(A->B, A->B)`. Now you end up with A:2, B:2,\n // but we only want A:1, B:1.\n\n // suppose you have `Union(A->B->A->B, A->B)`. Now you end up with A:3, B:2,\n // but we only want A:2, B:2.\n\n const returnTypes = await Promise.all(os.objectSets.map(async os => {\n const counts = {};\n const r = await calcObjectSet(os, {\n ...ctx,\n counts\n });\n return {\n r,\n counts\n };\n }));\n for (const {\n counts\n } of returnTypes) {\n for (const [k, v] of Object.entries(counts)) {\n ctx.counts[k] = Math.max(ctx.counts[k] ?? 0, v);\n }\n }\n if (returnTypes.length === 0) {\n throw new Error(`Could not find any context types for set operation`);\n }\n const allMatch = returnTypes.every(({\n r\n }) => r.apiName === returnTypes[0].r.apiName);\n if (!allMatch) {\n throw new Error(`Incompatible context types found for set operation`);\n }\n return returnTypes[0].r;\n case \"withProperties\":\n // Everything in an RDP chain needs to invalidate us for now\n for (const [, v] of Object.entries(os.derivedProperties)) {\n await calcRdp(v, {\n ...ctx,\n methodInput: os.objectSet\n });\n }\n return calcObjectSet(os.objectSet, {\n ...ctx,\n methodInput: os.objectSet\n });\n\n // used by rdps\n case \"methodInput\":\n !ctx.methodInput ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"methodInput must be provided\") : invariant(false) : void 0;\n\n // we only call this to get the context type, so we give it a new ctx\n // otherwise it will double count everything\n return await calcObjectSet(ctx.methodInput, {\n ...ctx,\n counts: {}\n });\n case \"asType\":\n // we don't currently support this anywhere.\n case \"asBaseObjectTypes\":\n // We don't currently support this because it could return multiple object types conceptually\n // internally, we actually use it this way but we shouldn't be finding that object sets.\n case \"reference\":\n // reference is particularly problematic because we cannot answer the question about\n // which types without loading the object set definition (and it can change).\n case \"static\":\n // static is also a problem as we cannot know what the types are without loading them\n throw new Error(`Unsupported ObjectSet type ${os.type}`);\n case \"nearestNeighbors\":\n return calcObjectSet(os.objectSet, ctx);\n default:\n throw new Error(`Unhandled ObjectSet type ${os.type}`);\n }\n}\nasync function calcRdp(dpd, ctx) {\n switch (dpd.type) {\n // Operates on object sets\n case \"selection\":\n return await calcObjectSet(dpd.objectSet, ctx);\n\n // Operates on single property\n case \"negate\":\n case \"extract\":\n case \"absoluteValue\":\n return await calcRdp(dpd.property, ctx);\n\n // Operates on many (unordered) properties\n case \"least\":\n case \"greatest\":\n case \"add\":\n case \"multiply\":\n return await Promise.all(dpd.properties.map(innerDpd => calcRdp(innerDpd, ctx)));\n\n // Operates on 2 ordered properties\n case \"subtract\":\n case \"divide\":\n return await Promise.all([calcRdp(dpd.left, ctx), calcRdp(dpd.right, ctx)]);\n\n // Operates on a single property name\n case \"property\":\n // noop\n return;\n default:\n throw new Error(`Unhandled DerivedPropertyDefinition type ${dpd.type}`);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport deepEqual from \"fast-deep-equal\";\nimport invariant from \"tiny-invariant\";\nimport { evaluateFilter } from \"./evaluateFilter.js\";\nfunction is$and(whereClause) {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$and\" in whereClause) {\n !Array.isArray(whereClause.$and) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected $and to be an array\") : invariant(false) : void 0;\n !(Object.keys(whereClause).length === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected only $and to be present\") : invariant(false) : void 0;\n }\n }\n return \"$and\" in whereClause;\n}\nfunction is$or(whereClause) {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$or\" in whereClause) {\n !Array.isArray(whereClause.$or) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected $or to be an array\") : invariant(false) : void 0;\n !(Object.keys(whereClause).length === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected only $or to be present\") : invariant(false) : void 0;\n }\n }\n return \"$or\" in whereClause;\n}\nfunction is$not(whereClause) {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$not\" in whereClause) {\n !(Object.keys(whereClause).length === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected only $not to be present\") : invariant(false) : void 0;\n }\n }\n return \"$not\" in whereClause;\n}\nexport function objectSortaMatchesWhereClause(o, whereClause, strict) {\n if (deepEqual({}, whereClause)) {\n return true;\n }\n if (is$and(whereClause)) {\n return whereClause.$and.every(w => objectSortaMatchesWhereClause(o, w, strict));\n }\n if (is$or(whereClause)) {\n return whereClause.$or.some(w => objectSortaMatchesWhereClause(o, w, strict));\n }\n if (is$not(whereClause)) {\n return !objectSortaMatchesWhereClause(o, whereClause.$not, strict);\n }\n return Object.entries(whereClause).every(([key, filter]) => {\n if (typeof filter === \"object\" && filter != null) {\n const realValue = o[key];\n const [f] = Object.keys(filter);\n const expected = filter[f];\n return evaluateFilter(f, realValue, expected, strict);\n }\n if (key in o) {\n if (o[key] === filter) {\n return true;\n }\n }\n return false;\n });\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\n\n/**\n * Evaluates a where clause filter against a value.\n * This is a runtime evaluation function that handles different property types.\n */\nexport function evaluateFilter(f, realValue, expected, strict) {\n switch (f) {\n case \"$eq\":\n return realValue === expected;\n case \"$gt\":\n return realValue > expected;\n case \"$lt\":\n return realValue < expected;\n case \"$gte\":\n return realValue >= expected;\n case \"$lte\":\n return realValue <= expected;\n case \"$ne\":\n return realValue !== expected;\n case \"$in\":\n return expected.$in.includes(realValue);\n case \"$isNull\":\n return realValue == null;\n case \"$startsWith\":\n return realValue.startsWith(expected);\n case \"$contains\":\n case \"$containsAllTerms\":\n case \"$containsAllTermsInOrder\":\n case \"$containsAnyTerm\":\n case \"$intersects\":\n case \"$within\":\n // for these we will strictly say no and loosely say yes\n // so that they don't change things now but may if reloaded\n return !strict;\n default:\n // same thing here as the above cases but we will catch the\n // exhaustive check in dev\n if (process.env.NODE_ENV !== \"production\") {\n const exhaustive = f;\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unknown where filter ${f}`) : invariant(false) : void 0;\n }\n return !strict;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { API_NAME_IDX, INTERSECT_IDX, ListQuery, PIVOT_IDX, RDP_IDX } from \"./ListQuery.js\";\nexport class ObjectListQuery extends ListQuery {\n createObjectSet(store) {\n const rdpConfig = this.cacheKey.otherKeys[RDP_IDX];\n const intersectWith = this.cacheKey.otherKeys[INTERSECT_IDX];\n const pivotInfo = this.cacheKey.otherKeys[PIVOT_IDX];\n if (pivotInfo != null) {\n const sourceSet = store.client({\n type: \"object\",\n apiName: pivotInfo.sourceType\n });\n let objectSet = sourceSet.pivotTo(pivotInfo.linkName);\n\n // RDPs must be applied before where clauses\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(rdpConfig);\n }\n objectSet = objectSet.where(this.canonicalWhere);\n if (intersectWith != null && intersectWith.length > 0) {\n const intersectSets = intersectWith.map(whereClause => {\n let intersectSet = store.client({\n type: \"object\",\n apiName: pivotInfo.targetType\n });\n if (rdpConfig != null) {\n intersectSet = intersectSet.withProperties(rdpConfig);\n }\n return intersectSet.where(whereClause);\n });\n objectSet = objectSet.intersect(...intersectSets);\n }\n return objectSet;\n }\n let objectSet = store.client({\n type: \"object\",\n apiName: this.apiName\n });\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(rdpConfig);\n }\n objectSet = objectSet.where(this.canonicalWhere);\n if (intersectWith != null && intersectWith.length > 0) {\n const intersectSets = intersectWith.map(whereClause => {\n let intersectSet = store.client({\n type: \"object\",\n apiName: this.apiName\n });\n if (rdpConfig != null) {\n intersectSet = intersectSet.withProperties(rdpConfig);\n }\n return intersectSet.where(whereClause);\n });\n objectSet = objectSet.intersect(...intersectSets);\n }\n return objectSet;\n }\n async revalidateObjectType(apiName) {\n if (this.apiName === apiName) {\n await this.revalidate(/* force */true);\n }\n }\n postProcessFetchedData(data) {\n return Promise.resolve(data);\n }\n extractRelevantObjects(changes) {\n return {\n added: {\n all: changes.addedObjects.get(this.cacheKey.otherKeys[API_NAME_IDX]) ?? [],\n strictMatches: new Set(),\n sortaMatches: new Set()\n },\n modified: {\n all: changes.modifiedObjects.get(this.cacheKey.otherKeys[API_NAME_IDX]) ?? [],\n strictMatches: new Set(),\n sortaMatches: new Set()\n }\n };\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Index constants for accessing otherKeys array elements\nexport const API_NAME_IDX = 0;\nexport const PK_IDX = 1;\nexport const RDP_CONFIG_IDX = 2;","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { extractRdpFieldNames } from \"../utils/rdpFieldOperations.js\";\n/**\n * Registry that tracks relationships between object cache keys with different RDP configurations.\n * This ensures we propagate updates across all \"variants\" of the same object.\n */\nexport class ObjectCacheKeyRegistry {\n /**\n * Map from base key (apiName:primaryKey) to all related cache key variants and metadata\n */\n baseToVariants = new Map();\n\n /**\n * Metadata for each cache key (apiName, primaryKey, rdpConfig)\n */\n keyMetadata = new WeakMap();\n\n /**\n * Register a cache key variant for an object\n */\n register(cacheKey, apiName, primaryKey, rdpConfig) {\n const baseKey = this.makeBaseKey(apiName, primaryKey);\n const primaryKeyStr = String(primaryKey);\n this.keyMetadata.set(cacheKey, {\n apiName,\n primaryKey: primaryKeyStr,\n rdpConfig,\n rdpFieldSet: rdpConfig ? extractRdpFieldNames(rdpConfig) : undefined\n });\n let entry = this.baseToVariants.get(baseKey);\n if (!entry) {\n entry = {\n variants: new Set(),\n apiName,\n primaryKey: primaryKeyStr\n };\n this.baseToVariants.set(baseKey, entry);\n }\n entry.variants.add(cacheKey);\n }\n\n /**\n * Get all variant cache keys for a specific object\n */\n getVariants(apiName, primaryKey) {\n const baseKey = this.makeBaseKey(apiName, primaryKey);\n const entry = this.baseToVariants.get(baseKey);\n return new Set(entry?.variants ?? []);\n }\n\n /**\n * Unregister a cache key when it's being cleaned up\n */\n unregister(cacheKey) {\n const metadata = this.keyMetadata.get(cacheKey);\n if (!metadata) return;\n const baseKey = this.makeBaseKey(metadata.apiName, metadata.primaryKey);\n const entry = this.baseToVariants.get(baseKey);\n if (entry) {\n entry.variants.delete(cacheKey);\n if (entry.variants.size === 0) {\n this.baseToVariants.delete(baseKey);\n }\n }\n this.keyMetadata.delete(cacheKey);\n }\n\n /**\n * Get metadata for a cache key\n */\n getMetadata(cacheKey) {\n return this.keyMetadata.get(cacheKey);\n }\n\n /**\n * Get the count of variants for a specific object\n */\n getVariantCount(apiName, primaryKey) {\n const baseKey = this.makeBaseKey(apiName, primaryKey);\n return this.baseToVariants.get(baseKey)?.variants.size ?? 0;\n }\n\n /**\n * Generate a base key from apiName and primaryKey\n */\n makeBaseKey(apiName, primaryKey) {\n return `${apiName}:${primaryKey}`;\n }\n\n /**\n * Check if a cache key has RDP configuration\n */\n hasRdpConfig(cacheKey) {\n return this.keyMetadata.get(cacheKey)?.rdpConfig != null;\n }\n\n /**\n * Get the RDP configuration for a cache key\n */\n getRdpConfig(cacheKey) {\n return this.keyMetadata.get(cacheKey)?.rdpConfig;\n }\n\n /**\n * Get the cached RDP field set for a cache key\n */\n getRdpFieldSet(cacheKey) {\n return this.keyMetadata.get(cacheKey)?.rdpFieldSet ?? new Set();\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createOsdkObject } from \"../../../object/convertWireToOsdkObjects/createOsdkObject.js\";\nimport { ClientRef, ObjectDefRef, UnderlyingOsdkObject } from \"../../../object/convertWireToOsdkObjects/InternalSymbols.js\";\nexport function extractRdpFieldNames(rdpConfig) {\n if (!rdpConfig) {\n return new Set();\n }\n return new Set(Object.keys(rdpConfig));\n}\nfunction stripRdpFields(value, rdpFields) {\n if (rdpFields.size === 0) {\n return value;\n }\n const underlying = value[UnderlyingOsdkObject];\n const objectDef = value[ObjectDefRef];\n const newProps = {\n $apiName: underlying.$apiName,\n $objectType: underlying.$objectType,\n $primaryKey: underlying.$primaryKey,\n $title: underlying.$title\n };\n for (const key of Object.keys(underlying)) {\n if (key in objectDef.properties && !rdpFields.has(key)) {\n newProps[key] = underlying[key];\n }\n }\n return createOsdkObject(value[ClientRef], objectDef, newProps);\n}\nfunction isSuperset(superset, subset) {\n for (const field of subset) {\n if (!superset.has(field)) {\n return false;\n }\n }\n return true;\n}\nfunction filterToRdpFields(value, rdpFieldsToKeep, sourceRdpFields) {\n const underlying = value[UnderlyingOsdkObject];\n const objectDef = value[ObjectDefRef];\n const newProps = {\n $apiName: underlying.$apiName,\n $objectType: underlying.$objectType,\n $primaryKey: underlying.$primaryKey,\n $title: underlying.$title\n };\n for (const key of Object.keys(underlying)) {\n if (key in objectDef.properties) {\n const isRdpField = sourceRdpFields.has(key);\n if (!isRdpField || rdpFieldsToKeep.has(key)) {\n newProps[key] = underlying[key];\n }\n }\n }\n return createOsdkObject(value[ClientRef], objectDef, newProps);\n}\nexport function mergeObjectFields(sourceValue, sourceRdpFields, targetRdpFields, targetCurrentValue) {\n if (targetRdpFields.size === 0) {\n return stripRdpFields(sourceValue, sourceRdpFields);\n }\n if (isSuperset(sourceRdpFields, targetRdpFields)) {\n if (sourceRdpFields.size === targetRdpFields.size) {\n return sourceValue;\n }\n return filterToRdpFields(sourceValue, targetRdpFields, sourceRdpFields);\n }\n const sourceUnderlying = sourceValue[UnderlyingOsdkObject];\n const objectDef = sourceValue[ObjectDefRef];\n const newProps = {\n $apiName: sourceUnderlying.$apiName,\n $objectType: sourceUnderlying.$objectType,\n $primaryKey: sourceUnderlying.$primaryKey,\n $title: sourceUnderlying.$title\n };\n for (const key of Object.keys(sourceUnderlying)) {\n if (key in objectDef.properties && (!sourceRdpFields.has(key) || targetRdpFields.has(key))) {\n newProps[key] = sourceUnderlying[key];\n }\n }\n if (targetCurrentValue) {\n const targetUnderlying = targetCurrentValue[UnderlyingOsdkObject];\n for (const field of targetRdpFields) {\n if (!sourceRdpFields.has(field) && field in targetUnderlying) {\n newProps[field] = targetUnderlying[field];\n }\n }\n }\n return createOsdkObject(sourceValue[ClientRef], objectDef, newProps);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport deepEqual from \"fast-deep-equal\";\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { tombstone } from \"../tombstone.js\";\nimport { mergeObjectFields } from \"../utils/rdpFieldOperations.js\";\nimport { ObjectQuery } from \"./ObjectQuery.js\";\nexport class ObjectsHelper extends AbstractHelper {\n observe(options, subFn) {\n return super.observe(options, subFn);\n }\n getQuery(options, rdpConfig) {\n const apiName = typeof options.apiName === \"string\" ? options.apiName : options.apiName.apiName;\n const {\n pk\n } = options;\n const objectCacheKey = this.cacheKeys.get(\"object\", apiName, pk, rdpConfig ?? undefined);\n return this.store.queries.get(objectCacheKey, () => new ObjectQuery(this.store, this.store.subjects.get(objectCacheKey), apiName, pk, objectCacheKey, {\n dedupeInterval: 0\n }));\n }\n\n /**\n * Internal helper method for writing objects to the store and returning their\n * object keys. For list queries with RDPs, the rdpConfig is included in the\n * cache key to ensure proper data isolation.\n * @internal\n */\n storeOsdkInstances(values, batch, rdpConfig) {\n // update the cache for any object that has changed\n // and save the mapped values to return\n return values.map(v => this.getQuery({\n apiName: v.$apiName,\n pk: v.$primaryKey\n }, rdpConfig).writeToStore(v, \"loaded\", batch).cacheKey);\n }\n\n /**\n * Write an object to cache and propagate to all related cache keys\n * @internal\n */\n propagateWrite(sourceCacheKey, value, status, batch) {\n const existing = batch.read(sourceCacheKey);\n const dataChanged = !existing || existing.value === undefined || value === tombstone || !deepEqual(existing.value, value);\n const statusChanged = !existing || existing.status !== status;\n if (!dataChanged && !statusChanged) {\n return;\n }\n const valueToWrite = !dataChanged && existing ? existing.value : value;\n batch.write(sourceCacheKey, valueToWrite, status);\n if (value !== tombstone) {\n batch.changes.registerObject(sourceCacheKey, value, !existing);\n }\n const metadata = this.store.objectCacheKeyRegistry.getMetadata(sourceCacheKey);\n const relatedKeys = metadata ? this.store.objectCacheKeyRegistry.getVariants(metadata.apiName, metadata.primaryKey) : new Set([sourceCacheKey]);\n for (const targetKey of relatedKeys) {\n if (targetKey === sourceCacheKey || !this.isKeyActive(targetKey)) {\n continue;\n }\n if (value === tombstone) {\n batch.write(targetKey, tombstone, status);\n continue;\n }\n const targetCurrentValue = batch.read(targetKey)?.value;\n const merged = this.mergeForTarget(value, targetCurrentValue && this.isObjectHolder(targetCurrentValue) ? targetCurrentValue : undefined, sourceCacheKey, targetKey);\n batch.write(targetKey, merged, status);\n }\n }\n\n /**\n * Check if a cache key is actively observed\n */\n isKeyActive(key) {\n const subject = this.store.subjects.peek(key);\n return subject?.observed === true;\n }\n\n /**\n * Type guard to check if a value is an ObjectHolder\n */\n isObjectHolder(value) {\n return value != null && typeof value === \"object\" && \"$apiName\" in value && \"$primaryKey\" in value;\n }\n\n /**\n * Merge object data for a specific target cache key, preserving RDP fields\n */\n mergeForTarget(sourceValue, targetCurrentValue, sourceCacheKey, targetCacheKey) {\n const sourceRdpFields = this.store.objectCacheKeyRegistry.getRdpFieldSet(sourceCacheKey);\n const targetRdpFields = this.store.objectCacheKeyRegistry.getRdpFieldSet(targetCacheKey);\n return mergeObjectFields(sourceValue, sourceRdpFields, targetRdpFields, targetCurrentValue);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BehaviorSubject, connectable, map } from \"rxjs\";\nimport { additionalContext } from \"../../../Client.js\";\nimport { getBulkObjectLoader } from \"../BulkObjectLoader.js\";\nimport { Query } from \"../Query.js\";\nimport { tombstone } from \"../tombstone.js\";\nimport { RDP_CONFIG_IDX } from \"./ObjectCacheKey.js\";\nexport class ObjectQuery extends Query {\n #apiName;\n #pk;\n constructor(store, subject, type, pk, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `ObjectQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n this.#apiName = type;\n this.#pk = pk;\n }\n _createConnectable(subject) {\n return connectable(subject.pipe(map(x => {\n return {\n status: x.status,\n object: x.value,\n lastUpdated: x.lastUpdated,\n isOptimistic: x.isOptimistic\n };\n })), {\n connector: () => new BehaviorSubject({\n status: \"init\",\n object: undefined,\n lastUpdated: 0,\n isOptimistic: false\n })\n });\n }\n async _fetchAndStore() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"_fetchAndStore\"\n }).debug(\"calling _fetchAndStore\");\n }\n\n // TODO: In the future, implement tracking of network requests to ensure\n // we're not making unnecessary network calls. This would need dedicated\n // tests separate from subscription notification tests.\n\n const obj = await getBulkObjectLoader(this.store.client).fetch(this.#apiName, this.#pk);\n this.store.batch({}, batch => {\n this.writeToStore(obj, \"loaded\", batch);\n });\n }\n writeToStore(data, status, batch) {\n const entry = batch.read(this.cacheKey);\n const rdpConfig = this.cacheKey.otherKeys[RDP_CONFIG_IDX];\n this.store.objectCacheKeyRegistry.register(this.cacheKey, this.#apiName, this.#pk, rdpConfig);\n this.store.objects.propagateWrite(this.cacheKey, data, status, batch);\n return batch.read(this.cacheKey);\n }\n deleteFromStore(status, batch) {\n const rdpConfig = this.cacheKey.otherKeys[RDP_CONFIG_IDX];\n this.store.objectCacheKeyRegistry.register(this.cacheKey, this.#apiName, this.#pk, rdpConfig);\n this.store.objects.propagateWrite(this.cacheKey, tombstone, status, batch);\n return batch.read(this.cacheKey);\n }\n invalidateObjectType = (objectType, changes) => {\n if (this.#apiName === objectType) {\n changes?.modified.add(this.cacheKey);\n return this.revalidate(true);\n }\n return Promise.resolve();\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PalantirApiError } from \"@osdk/shared.net.errors\";\nimport { DefaultMap, DefaultWeakMap } from \"mnemonist\";\nimport pDefer from \"p-defer\";\nimport { additionalContext } from \"../../Client.js\";\nconst weakCache = new DefaultWeakMap(c => new BulkObjectLoader(c));\nexport function getBulkObjectLoader(client) {\n return weakCache.get(client);\n}\nexport class BulkObjectLoader {\n #client;\n #m = new DefaultMap(() => ({\n data: [],\n timer: undefined\n }));\n #logger;\n #maxWait;\n #maxEntries;\n constructor(client, maxWait = 25, maxEntries = 100) {\n this.#client = client;\n this.#logger = client[additionalContext].logger;\n this.#maxWait = maxWait;\n this.#maxEntries = maxEntries;\n }\n async fetch(apiName, primaryKey) {\n const deferred = pDefer();\n const entry = this.#m.get(apiName);\n entry.data.push({\n primaryKey: primaryKey,\n deferred\n });\n if (!entry.timer) {\n entry.timer = setTimeout(() => {\n this.#loadObjects(apiName, entry.data);\n }, this.#maxWait);\n }\n if (entry.data.length >= this.#maxEntries) {\n clearTimeout(entry.timer);\n this.#loadObjects(apiName, entry.data);\n }\n return await deferred.promise;\n }\n #loadObjects(apiName, arr) {\n this.#m.delete(apiName);\n this.#reallyLoadObjects(apiName, arr).catch(e => {\n this.#logger?.error(\"Unhandled exception\", e);\n });\n }\n async #reallyLoadObjects(apiName, arr) {\n const miniDef = {\n type: \"object\",\n apiName\n };\n const objMetadata = await this.#client.fetchMetadata(miniDef);\n const pks = arr.map(x => x.primaryKey);\n\n // Use $eq for single object fetches (this is for public app compatibility)\n // Use $in for batch fetches\n const whereClause = pks.length === 1 ? {\n [objMetadata.primaryKeyApiName]: {\n $eq: pks[0]\n }\n } : {\n [objMetadata.primaryKeyApiName]: {\n $in: pks\n }\n };\n const {\n data\n } = await this.#client(miniDef).where(whereClause).fetchPage({\n $pageSize: pks.length\n });\n for (const {\n primaryKey,\n deferred\n } of arr) {\n const object = data.find(x => x.$primaryKey === primaryKey);\n if (object) {\n deferred.resolve(object);\n } else {\n deferred.reject(new PalantirApiError(`Object not found: ${primaryKey}`));\n }\n }\n }\n}","export default function pDefer() {\n const deferred = {};\n deferred.promise = new Promise((resolve, reject) => {\n deferred.resolve = resolve;\n deferred.reject = reject;\n });\n return deferred;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getWireObjectSet } from \"../../../objectSet/createObjectSet.js\";\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { ObjectSetQuery } from \"./ObjectSetQuery.js\";\nexport class ObjectSetHelper extends AbstractHelper {\n constructor(store, cacheKeys, whereCanonicalizer, orderByCanonicalizer) {\n super(store, cacheKeys);\n this.whereCanonicalizer = whereCanonicalizer;\n this.orderByCanonicalizer = orderByCanonicalizer;\n }\n observe(options, subFn) {\n const ret = super.observe(options, subFn);\n if (options.streamUpdates) {\n ret.query.registerStreamUpdates(ret.subscription);\n }\n return ret;\n }\n getQuery(options) {\n const {\n baseObjectSet\n } = options;\n const baseObjectSetWire = JSON.stringify(getWireObjectSet(baseObjectSet));\n const operations = this.buildCanonicalizedOperations(options);\n const objectSetCacheKey = this.cacheKeys.get(\"objectSet\", baseObjectSetWire, operations);\n return this.store.queries.get(objectSetCacheKey, () => {\n return new ObjectSetQuery(this.store, this.store.subjects.get(objectSetCacheKey), baseObjectSetWire, operations, objectSetCacheKey, options);\n });\n }\n buildCanonicalizedOperations(options) {\n const operations = {};\n if (options.where) {\n operations.where = this.whereCanonicalizer.canonicalize(options.where);\n }\n if (options.withProperties) {\n operations.withProperties = Object.keys(options.withProperties).sort();\n }\n if (options.union && options.union.length > 0) {\n operations.union = options.union.map(os => JSON.stringify(getWireObjectSet(os)));\n }\n if (options.intersect && options.intersect.length > 0) {\n operations.intersect = options.intersect.map(os => JSON.stringify(getWireObjectSet(os)));\n }\n if (options.subtract && options.subtract.length > 0) {\n operations.subtract = options.subtract.map(os => JSON.stringify(getWireObjectSet(os)));\n }\n if (options.pivotTo) {\n operations.pivotTo = options.pivotTo;\n }\n if (options.orderBy) {\n operations.orderBy = this.orderByCanonicalizer.canonicalize(options.orderBy);\n }\n if (options.pageSize) {\n operations.pageSize = options.pageSize;\n }\n return operations;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { additionalContext } from \"../../../Client.js\";\nimport { getWireObjectSet } from \"../../../objectSet/createObjectSet.js\";\nimport { BaseListQuery } from \"../base-list/BaseListQuery.js\";\nimport { getObjectTypesThatInvalidate } from \"../getObjectTypesThatInvalidate.js\";\nimport { OrderBySortingStrategy } from \"../sorting/SortingStrategy.js\";\nexport class ObjectSetQuery extends BaseListQuery {\n #baseObjectSetWire;\n #operations;\n #composedObjectSet;\n #objectTypes;\n constructor(store, subject, baseObjectSetWire, operations, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `ObjectSetQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n this.#baseObjectSetWire = baseObjectSetWire;\n this.#operations = operations;\n this.#composedObjectSet = this.#composeObjectSet(opts);\n this.#objectTypes = this.#extractObjectTypes(opts);\n if (opts.autoFetchMore === true) {\n this.minResultsToLoad = Number.MAX_SAFE_INTEGER;\n } else if (typeof opts.autoFetchMore === \"number\") {\n this.minResultsToLoad = Math.max(0, opts.autoFetchMore);\n } else {\n this.minResultsToLoad = opts.pageSize || 0;\n }\n }\n #composeObjectSet(opts) {\n let result = opts.baseObjectSet;\n if (opts.withProperties) {\n result = result.withProperties(opts.withProperties);\n }\n if (opts.where) {\n result = result.where(opts.where);\n }\n if (opts.union && opts.union.length > 0) {\n result = result.union(...opts.union);\n }\n if (opts.intersect && opts.intersect.length > 0) {\n result = result.intersect(...opts.intersect);\n }\n if (opts.subtract && opts.subtract.length > 0) {\n result = result.subtract(...opts.subtract);\n }\n if (opts.pivotTo) {\n result = result.pivotTo(opts.pivotTo);\n }\n return result;\n }\n #extractObjectTypes(opts) {\n const types = new Set();\n const baseWire = JSON.parse(this.#baseObjectSetWire);\n if (baseWire.type) {\n types.add(baseWire.type);\n }\n if (opts.union) {\n for (const os of opts.union) {\n const wire = getWireObjectSet(os);\n if (wire.type) {\n types.add(wire.type);\n }\n }\n }\n if (opts.intersect) {\n for (const os of opts.intersect) {\n const wire = getWireObjectSet(os);\n if (wire.type) {\n types.add(wire.type);\n }\n }\n }\n if (opts.subtract) {\n for (const os of opts.subtract) {\n const wire = getWireObjectSet(os);\n if (wire.type) {\n types.add(wire.type);\n }\n }\n }\n return types;\n }\n\n /**\n * Register changes to the cache specific to ObjectSetQuery\n */\n registerCacheChanges(batch) {\n batch.changes.registerObjectSet(this.cacheKey);\n }\n\n /**\n * Implements fetchPageData from BaseListQuery template method\n * Fetches a page of data from the composed ObjectSet\n */\n async fetchPageData(signal) {\n if (this.#operations.orderBy && Object.keys(this.#operations.orderBy).length > 0 && !(this.sortingStrategy instanceof OrderBySortingStrategy)) {\n const wireObjectSet = getWireObjectSet(this.#composedObjectSet);\n const {\n resultType\n } = await getObjectTypesThatInvalidate(this.store.client[additionalContext], wireObjectSet);\n this.sortingStrategy = new OrderBySortingStrategy(resultType.apiName, this.#operations.orderBy);\n }\n\n // Fetch the data with pagination\n const resp = await this.#composedObjectSet.fetchPage({\n $nextPageToken: this.nextPageToken,\n $pageSize: this.options.pageSize,\n // OrderBy is already applied in the composed ObjectSet\n ...(this.#operations.orderBy && Object.keys(this.#operations.orderBy).length > 0 ? {\n $orderBy: this.#operations.orderBy\n } : {})\n });\n if (signal?.aborted) {\n throw new Error(\"Aborted\");\n }\n this.nextPageToken = resp.nextPageToken;\n return resp;\n }\n handleFetchError(error, _status, batch) {\n this.logger?.error(\"error\", error);\n this.store.subjects.get(this.cacheKey).error(error);\n return this.writeToStore({\n data: []\n }, \"error\", batch);\n }\n registerStreamUpdates(sub) {\n this.createWebsocketSubscription(this.#composedObjectSet, sub, \"observeObjectSet\");\n }\n invalidateObjectType = async (objectType, changes) => {\n if (this.#objectTypes.has(objectType)) {\n changes?.modified.add(this.cacheKey);\n return this.revalidate(true);\n }\n return Promise.resolve();\n };\n createPayload(params) {\n return {\n resolvedList: params.resolvedData,\n isOptimistic: params.isOptimistic,\n fetchMore: this.fetchMore,\n hasMore: this.nextPageToken != null,\n status: params.status,\n lastUpdated: params.lastUpdated,\n objectSet: this.#composedObjectSet\n };\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class PivotCanonicalizer {\n #cache = new Map();\n canonicalize(sourceType, linkName) {\n const key = `${sourceType}::${linkName}`;\n let canonical = this.#cache.get(key);\n if (!canonical) {\n canonical = {\n sourceType,\n linkName,\n targetType: \"<targetType>\"\n };\n this.#cache.set(key, canonical);\n }\n return canonical;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class Queries {\n // we can use a regular Map here because the refCounting will\n // handle cleanup.\n map = new Map();\n peek(cacheKey) {\n return this.map.get(cacheKey);\n }\n get(cacheKey, createQuery) {\n let query = this.peek(cacheKey);\n if (!query) {\n query = createQuery();\n this.map.set(cacheKey, query);\n }\n return query;\n }\n keys() {\n return this.map.keys();\n }\n delete(cacheKey) {\n this.map.get(cacheKey)?.dispose();\n this.map.delete(cacheKey);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createWithPropertiesObjectSet } from \"../../derivedProperties/createWithPropertiesObjectSet.js\";\nimport { CachingCanonicalizer } from \"./Canonicalizer.js\";\nexport class RdpCanonicalizer extends CachingCanonicalizer {\n structuralCache = new Map();\n lookupOrCreate(rdp) {\n // Map from builder result symbols to their definitions\n const definitionMap = new Map();\n const computedProperties = {};\n\n // Create a wrapper holding object type for the builder to let us extract the definition structure\n const objectTypeHolder = {\n type: \"object\",\n apiName: \"__rdp_canonicalizer_holder__\"\n };\n for (const [key, rdpFunction] of Object.entries(rdp)) {\n const builder = createWithPropertiesObjectSet(objectTypeHolder, {\n type: \"methodInput\"\n }, definitionMap, /* fromBaseObjectSet */true);\n const result = rdpFunction(builder);\n const definition = definitionMap.get(result);\n if (definition) {\n computedProperties[key] = definition;\n }\n }\n\n // Sort entries by key for consistent ordering\n const sortedKeys = Object.keys(computedProperties).sort();\n\n // Create a serialized key for the computed definitions\n const sortedDefinitions = {};\n for (const key of sortedKeys) {\n sortedDefinitions[key] = computedProperties[key];\n }\n const definitionsKey = JSON.stringify(sortedDefinitions);\n\n // Check if we already have a canonical RDP for these definitions\n let canonical = this.structuralCache.get(definitionsKey);\n if (!canonical) {\n // Create a canonical RDP object with sorted keys\n const sortedRdp = {};\n for (const key of Object.keys(rdp).sort()) {\n sortedRdp[key] = rdp[key];\n }\n canonical = sortedRdp;\n this.structuralCache.set(definitionsKey, canonical);\n }\n return canonical;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function getMetaTagContent(name) {\n const element = document.querySelector(`meta[name=\"${name}\"]`);\n const val = element ? element.getAttribute(\"content\") : null;\n if (val == null) {\n throw new Error(`Missing meta tag: ${name}`);\n }\n return val;\n}\nfunction getViteEnvVar(name) {\n const val = import.meta.env[name];\n if (val == null) {\n throw new Error(`Missing environment variable: ${name}`);\n }\n return val;\n}\nfunction isProduction() {\n return process.env.NODE_ENV === \"production\";\n}\nfunction getConfigValue(metaTagName, viteEnvVarName) {\n return isProduction() ? getMetaTagContent(metaTagName) : getViteEnvVar(viteEnvVarName);\n}\nfunction getOntologyRid(ontologyRid) {\n return isProduction() ? getMetaTagContent(\"osdk-ontologyRid\") : ontologyRid;\n}\nexport function getOsdkConfig(ontologyRid) {\n return {\n clientId: getConfigValue(\"osdk-clientId\", \"VITE_FOUNDRY_CLIENT_ID\"),\n redirectUrl: getConfigValue(\"osdk-redirectUrl\", \"VITE_FOUNDRY_REDIRECT_URL\"),\n foundryUrl: getConfigValue(\"osdk-foundryUrl\", \"VITE_FOUNDRY_API_URL\"),\n ontologyRid: getOntologyRid(ontologyRid)\n };\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/public/unstable-do-not-use.ts","../../../src/observable/computeObjectSetCacheKey.ts","../../../src/observable/internal/OrderByCanonicalizer.ts","../../../src/observable/internal/WeakRefTrie.ts","../../../src/observable/internal/WhereClauseCanonicalizer.ts","../../../src/observable/ObservableClient.ts","../../../src/observable/internal/ObservableClientImpl.ts","../../../src/observable/internal/UnsubscribableWrapper.ts","../../../src/observable/internal/Store.ts","../../../src/observable/DebugFlags.ts","../../../src/observable/internal/actions/ActionApplication.ts","../../../src/observable/internal/actions/OptimisticJob.ts","../../../src/observable/internal/OptimisticId.ts","../../../src/observable/internal/aggregation/AggregationCacheKey.ts","../../../src/observable/internal/aggregation/AggregationsHelper.ts","../../../src/observable/internal/AbstractHelper.ts","../../../src/observable/internal/QuerySubscription.ts","../../../src/observable/internal/aggregation/ObjectAggregationQuery.ts","../../../src/observable/internal/aggregation/AggregationQuery.ts","../../../src/observable/internal/Query.ts","../../../src/observable/internal/CacheKey.ts","../../../src/observable/internal/CacheKeys.ts","../../../src/observable/internal/RefCounts.ts","../../../src/observable/internal/Changes.ts","../../../src/observable/internal/function/FunctionsHelper.ts","../../../src/observable/internal/function/FunctionCacheKey.ts","../../../src/observable/internal/function/FunctionParamsCanonicalizer.ts","../../../src/observable/internal/function/FunctionQuery.ts","../../../src/observable/internal/IntersectCanonicalizer.ts","../../../src/observable/internal/Canonicalizer.ts","../../../src/observable/internal/Layers.ts","../../../src/observable/internal/createInitEntry.ts","../../../src/observable/internal/Layer.ts","../../../src/observable/internal/WeakMapWithEntries.ts","../../../src/observable/internal/Subjects.ts","../../../src/observable/internal/tombstone.ts","../../../src/observable/internal/links/LinksHelper.ts","../../../src/observable/internal/links/SpecificLinkQuery.ts","../../../src/observable/internal/base-list/BaseListQuery.ts","../../../src/observable/internal/isObjectInstance.ts","../../../src/observable/internal/list/ListCacheKey.ts","../../../src/observable/internal/sorting/SortingStrategy.ts","../../../src/observable/internal/base-list/createCollectionConnectable.ts","../../../src/observable/internal/base-list/removeDuplicates.ts","../../../src/observable/internal/list/ListsHelper.ts","../../../src/observable/internal/list/InterfaceListQuery.ts","../../../src/observable/internal/list/ListQuery.ts","../../../src/observable/internal/getObjectTypesThatInvalidate.ts","../../../src/observable/internal/objectMatchesWhereClause.ts","../../../src/observable/internal/evaluateFilter.ts","../../../src/observable/internal/list/ObjectListQuery.ts","../../../src/observable/internal/object/ObjectCacheKey.ts","../../../src/observable/internal/object/ObjectCacheKeyRegistry.ts","../../../src/observable/internal/utils/rdpFieldOperations.ts","../../../src/observable/internal/object/ObjectsHelper.ts","../../../src/observable/internal/object/ObjectQuery.ts","../../../src/observable/internal/BulkObjectLoader.ts","../../../../../node_modules/.pnpm/p-defer@4.0.1/node_modules/p-defer/index.js","../../../src/observable/internal/objectset/ObjectSetHelper.ts","../../../src/observable/internal/objectset/ObjectSetQuery.ts","../../../src/observable/internal/PivotCanonicalizer.ts","../../../src/observable/internal/Queries.ts","../../../src/observable/internal/RdpCanonicalizer.ts","../../../src/observable/internal/RidListCanonicalizer.ts","../../../src/public-utils/osdkConfig.ts"],"names":["init_cjs_shims","Trie","array","deepEqual","invariant","getWireObjectSet","Subscription","additionalContext","connectable","map","BehaviorSubject","whereCanonicalizer","MultiMap","isObjectSpecifiersObject","isObjectSet","applyQuery","API_NAME_IDX","WHERE_IDX","RDP_IDX","switchMap","of","combineLatest","distinctUntilChanged","scheduled","asapScheduler","ReplaySubject","orderByCanonicalizer","os","ObjectDefRef","groupBy","objectSet","UnderlyingOsdkObject","createOsdkObject","ClientRef","DefaultWeakMap","DefaultMap","PalantirApiError","createWithPropertiesObjectSet","createClientFromContext","createFetchHeaderMutator","OBSERVABLE_USER_AGENT"],"mappings":"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","file":"unstable-do-not-use.cjs","sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport { augment } from \"../object/fetchPage.js\";\n\n// THIS IS NOT THE FINAL NAME DO NOT SHIP LIKE THIS\n\nexport { computeObjectSetCacheKey } from \"../observable/computeObjectSetCacheKey.js\";\nexport { createObservableClient } from \"../observable/ObservableClient.js\";\nexport { getMetaTagContent, getOsdkConfig } from \"../public-utils/osdkConfig.js\";\nexport { createClientWithTransaction } from \"../createClient.js\";","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getWireObjectSet } from \"../objectSet/createObjectSet.js\";\nimport { OrderByCanonicalizer } from \"./internal/OrderByCanonicalizer.js\";\nimport { WhereClauseCanonicalizer } from \"./internal/WhereClauseCanonicalizer.js\";\nconst whereCanonicalizer = new WhereClauseCanonicalizer();\nconst orderByCanonicalizer = new OrderByCanonicalizer();\n\n/**\n * Computes a stable cache key for an ObjectSet with options.\n *\n * Note: dedupeInterval is excluded as it doesn't affect the data, only the refresh rate.\n *\n * @param objectSet - The base ObjectSet\n * @param options - Optional observation options (where, orderBy, etc.)\n * @returns A stable string key representing the ObjectSet and options\n */\nexport function computeObjectSetCacheKey(objectSet, options) {\n const keyParts = [\"objectSet\", getWireObjectSet(objectSet)];\n if (!options) {\n return JSON.stringify(keyParts);\n }\n if (options.where) {\n keyParts.push(\"where\", whereCanonicalizer.canonicalize(options.where));\n }\n if (options.withProperties) {\n const propKeys = Object.keys(options.withProperties).sort();\n keyParts.push(\"props\", propKeys);\n }\n if (options.union && options.union.length > 0) {\n keyParts.push(\"union\", options.union.map(os => getWireObjectSet(os)));\n }\n if (options.intersect && options.intersect.length > 0) {\n keyParts.push(\"intersect\", options.intersect.map(os => getWireObjectSet(os)));\n }\n if (options.subtract && options.subtract.length > 0) {\n keyParts.push(\"subtract\", options.subtract.map(os => getWireObjectSet(os)));\n }\n if (options.pivotTo) {\n keyParts.push(\"pivotTo\", options.pivotTo);\n }\n if (options.orderBy) {\n keyParts.push(\"orderBy\", orderByCanonicalizer.canonicalize(options.orderBy));\n }\n if (options.pageSize) {\n keyParts.push(\"pageSize\", options.pageSize);\n }\n return JSON.stringify(keyParts);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WeakRefTrie } from \"./WeakRefTrie.js\";\nexport class OrderByCanonicalizer {\n #trie = new WeakRefTrie(array => {\n const pairs = array.reduce(function (result, _, index, array) {\n if (index % 2 === 0 && array[index] != null) {\n result.push(array.slice(index, index + 2));\n }\n return result;\n }, []);\n const data = Object.fromEntries(pairs);\n return data;\n });\n canonicalize = orderBy => {\n const strings = Object.entries(orderBy).flat();\n return this.#trie.lookupArray(strings);\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Trie } from \"@wry/trie\";\nconst defaultMakeData = () => Object.create(null);\n\n/**\n * The `WeakRefTrie` class uses weak references to store data, allowing for automatic garbage collection\n * of entries that are no longer in use.\n *\n * The original trie from @wry/trie does not do automatic cleanup of old entries.\n */\nexport class WeakRefTrie {\n #finalizer = new FinalizationRegistry(orderBy => {\n this.#trie.removeArray(Object.entries(orderBy).flat());\n });\n #trie;\n constructor(makeData = defaultMakeData) {\n this.#trie = new Trie(false, array => {\n const data = makeData(array);\n this.#finalizer.register(data, array);\n return new WeakRef(data);\n });\n }\n lookupArray(array) {\n const maybe = this.#trie.lookupArray(array);\n let ret = maybe.deref();\n if (maybe && !ret) {\n // in case finalizer hasn't run\n this.#trie.removeArray(array);\n ret = this.#trie.lookupArray(array).deref();\n }\n return ret;\n }\n peekArray(array) {\n const maybe = this.#trie.peekArray(array);\n const ret = maybe?.deref();\n if (maybe && !ret) {\n // in case finalizer hasn't run\n this.#trie.removeArray(array);\n }\n return ret;\n }\n removeArray(array) {\n return this.#trie.removeArray(array)?.deref();\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Trie } from \"@wry/trie\";\nimport deepEqual from \"fast-deep-equal\";\nimport invariant from \"tiny-invariant\";\nexport class WhereClauseCanonicalizer {\n /**\n * This is a shortcut cache for any WhereClause's that we have\n * seen and already canonicalized. The theory behind this\n * is that well behaving React applications will either `useMemo`\n * their where clause, or store it in state or pass it through as\n * props such that we are likely to get the same WhereClause\n * object multiple times and we can skip unnecessary work.\n */\n #cache = new WeakMap();\n\n /**\n * This is a trie that stores the sorted collapsed keys of a where clause to\n * the cache key for canonicalized options. In theory this keeps the number of\n * deepEqual comparisons down to a minimum but its probably overkill.\n */\n #trie = new Trie();\n\n /**\n * This is a cache from the cacheKey provided by `this.#trie` to the potential\n * canonicalized options.\n */\n #existingOptions = new Map();\n canonicalize(where) {\n // fastest shortcut\n if (this.#cache.has(where)) {\n return this.#cache.get(where);\n }\n const keysSet = new Set();\n const calculatedCanon = this.#toCanon(where, keysSet);\n const cacheKey = this.#trie.lookupArray(Array.from(keysSet).sort());\n const lookupEntry = this.#existingOptions.get(cacheKey) ?? {\n options: []\n };\n this.#existingOptions.set(cacheKey, lookupEntry);\n const canon = lookupEntry.options.find(ref => deepEqual(ref.deref(), calculatedCanon))?.deref() ?? calculatedCanon;\n if (canon === calculatedCanon) {\n // This means no existing options were found\n lookupEntry.options.push(new WeakRef(canon));\n }\n this.#cache.set(where, canon);\n return canon;\n }\n #toCanon = (where, set = new Set()) => {\n if (\"$and\" in where) {\n if (process.env.NODE_ENV !== \"production\") {\n !Array.isArray(where.$and) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected $and to be an array\") : invariant(false) : void 0;\n !(Object.keys(where).length === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected only $and to be present\") : invariant(false) : void 0;\n }\n if (where.$and.length === 0) {\n // empty $and is a no-op\n return {};\n }\n if (where.$and.length === 1) {\n return this.#toCanon(where.$and[0], set);\n }\n }\n // This is incomplete for all the cases possible but it gets us started\n\n return Object.fromEntries(Object.entries(where).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => {\n set.add(k);\n if (k === \"$and\" || k === \"$or\") {\n return [k, v.map(x => this.#toCanon(x, set))];\n }\n if (k !== \"$not\" && typeof v === \"object\" && v != null && \"$eq\" in v) {\n return [k, v[\"$eq\"]];\n }\n return [k, v];\n }));\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createFetchHeaderMutator } from \"@osdk/shared.net.fetch\";\nimport { additionalContext } from \"../Client.js\";\nimport { createClientFromContext } from \"../createClient.js\";\nimport { OBSERVABLE_USER_AGENT } from \"../util/UserAgent.js\";\nimport { ObservableClientImpl } from \"./internal/ObservableClientImpl.js\";\nimport { Store } from \"./internal/Store.js\";\nexport let ObservableClient;\n/**\n * User facing callback args for `observeLink`\n */\n\n/**\n * Public interface for reactive data management with automatic updates.\n *\n * The ObservableClient provides a reactive data layer with:\n * - Real-time object and collection observation\n * - Automatic cache updates when data changes\n * - Optimistic updates for immediate UI feedback\n * - Pagination support for large collections\n * - Link traversal for relationship navigation\n */\n\nexport function createObservableClient(client) {\n // First we need a modified client that adds an extra header so we know its\n // an observable client\n const tweakedClient = createClientFromContext({\n ...client[additionalContext],\n fetch: createFetchHeaderMutator(client[additionalContext].fetch, headers => {\n headers.set(\"Fetch-User-Agent\", [headers.get(\"Fetch-User-Agent\"), OBSERVABLE_USER_AGENT].filter(x => x && x?.length > 0).join(\" \"));\n return headers;\n })\n });\n\n // Then we use that client instead. Because the `client` does not hold\n // any real state, this whole thing works.\n return new ObservableClientImpl(new Store(tweakedClient));\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Subscription } from \"rxjs\";\nimport { UnsubscribableWrapper } from \"./UnsubscribableWrapper.js\";\n\n/**\n * Implementation of the public ObservableClient interface.\n * - Delegates all operations to the Store for consistency\n * - Serves as the entry point for reactive data management\n * - Ensures proper method binding and API exposure\n *\n * @internal\n */\nexport class ObservableClientImpl {\n constructor(store) {\n this.__experimentalStore = store;\n this.applyAction = store.applyAction.bind(store);\n this.validateAction = store.validateAction.bind(store);\n }\n observeObject = (apiName, pk, options, subFn) => {\n return this.__experimentalStore.objects.observe({\n ...options,\n apiName,\n pk\n },\n // cast to cross typed to untyped barrier\n subFn);\n };\n observeList = (options, subFn) => {\n return this.__experimentalStore.lists.observe(options,\n // cast to cross typed to untyped barrier\n subFn);\n };\n observeAggregation = (options, subFn) => {\n return this.__experimentalStore.aggregations.observe(options, subFn);\n };\n observeFunction = (queryDef, params, options, subFn) => {\n const dependsOn = options.dependsOn?.map(dep => typeof dep === \"string\" ? dep : dep.apiName);\n const dependsOnObjects = options.dependsOnObjects?.map(obj => ({\n $apiName: obj.$objectType ?? obj.$apiName,\n $primaryKey: obj.$primaryKey\n }));\n return this.__experimentalStore.functions.observe({\n ...options,\n queryDef,\n params,\n dependsOn,\n dependsOnObjects\n }, subFn);\n };\n observeLinks = (objects, linkName, options, subFn) => {\n // Convert to array if single object provided\n const objectsArray = Array.isArray(objects) ? objects : [objects];\n const parentSub = new Subscription();\n for (const obj of objectsArray) {\n const querySubscription = this.__experimentalStore.links.observe({\n ...options,\n srcType: {\n type: \"object\",\n apiName: obj.$objectType ?? obj.$apiName\n },\n linkName,\n pk: obj.$primaryKey\n },\n // cast to cross typed to untyped barrier\n subFn);\n parentSub.add(querySubscription);\n }\n return new UnsubscribableWrapper(parentSub);\n };\n observeObjectSet(baseObjectSet, options, subFn) {\n return this.__experimentalStore.objectSets.observe({\n baseObjectSet,\n ...options\n },\n // cast to cross typed to untyped barrier\n subFn);\n }\n invalidateAll() {\n return this.__experimentalStore.invalidateAll();\n }\n invalidateObjects(objects) {\n return this.__experimentalStore.invalidateObjects(objects);\n }\n invalidateObjectType(type) {\n return this.__experimentalStore.invalidateObjectType(type, undefined);\n }\n invalidateFunction(apiName, params) {\n return this.__experimentalStore.invalidateFunction(apiName, params);\n }\n invalidateFunctionsByObject(apiName, primaryKey) {\n return this.__experimentalStore.invalidateFunctionsByObject(apiName, primaryKey);\n }\n canonicalizeWhereClause(where) {\n return this.__experimentalStore.whereCanonicalizer.canonicalize(where);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Wrapper for rxjs Subscription to not leak implementation details\n * @internal\n */\nexport class UnsubscribableWrapper {\n #subscription;\n constructor(subscription) {\n this.#subscription = subscription;\n }\n unsubscribe() {\n this.#subscription?.unsubscribe();\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nimport { additionalContext } from \"../../Client.js\";\nimport { DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nimport { ActionApplication } from \"./actions/ActionApplication.js\";\nimport { API_NAME_IDX as AGGREGATION_API_NAME_IDX, RDP_IDX as AGGREGATION_RDP_IDX } from \"./aggregation/AggregationCacheKey.js\";\nimport { AggregationsHelper } from \"./aggregation/AggregationsHelper.js\";\nimport { DEBUG_ONLY__cacheKeyToString } from \"./CacheKey.js\";\nimport { CacheKeys } from \"./CacheKeys.js\";\nimport { createChangedObjects, DEBUG_ONLY__changesToString } from \"./Changes.js\";\nimport { FunctionsHelper } from \"./function/FunctionsHelper.js\";\nimport { IntersectCanonicalizer } from \"./IntersectCanonicalizer.js\";\nimport { Layers } from \"./Layers.js\";\nimport { LinksHelper } from \"./links/LinksHelper.js\";\nimport { API_NAME_IDX as LIST_API_NAME_IDX, RDP_IDX as LIST_RDP_IDX } from \"./list/ListCacheKey.js\";\nimport { ListsHelper } from \"./list/ListsHelper.js\";\nimport { API_NAME_IDX as OBJECT_API_NAME_IDX, RDP_CONFIG_IDX as OBJECT_RDP_CONFIG_IDX } from \"./object/ObjectCacheKey.js\";\nimport { ObjectCacheKeyRegistry } from \"./object/ObjectCacheKeyRegistry.js\";\nimport { ObjectsHelper } from \"./object/ObjectsHelper.js\";\nimport { ObjectSetHelper } from \"./objectset/ObjectSetHelper.js\";\nimport { OrderByCanonicalizer } from \"./OrderByCanonicalizer.js\";\nimport { PivotCanonicalizer } from \"./PivotCanonicalizer.js\";\nimport { Queries } from \"./Queries.js\";\nimport { RdpCanonicalizer } from \"./RdpCanonicalizer.js\";\nimport { RidListCanonicalizer } from \"./RidListCanonicalizer.js\";\nimport { WhereClauseCanonicalizer } from \"./WhereClauseCanonicalizer.js\";\n/*\n Notes:\n - Subjects are one per type per store (by cache key)\n - Data is one per layer per cache key\n*/\n\n/**\n * Central data store with layered cache architecture.\n * - Truth layer: server state | Optimistic layers: pending changes\n * - Reference counting prevents memory leaks\n * - Batch operations ensure consistency\n */\nexport class Store {\n whereCanonicalizer = new WhereClauseCanonicalizer();\n orderByCanonicalizer = new OrderByCanonicalizer();\n rdpCanonicalizer = new RdpCanonicalizer();\n intersectCanonicalizer = new IntersectCanonicalizer(this.whereCanonicalizer);\n pivotCanonicalizer = new PivotCanonicalizer();\n ridListCanonicalizer = new RidListCanonicalizer();\n\n /** @internal */\n\n queries = new Queries();\n objectCacheKeyRegistry = new ObjectCacheKeyRegistry();\n layers = new Layers({\n logger: this.logger,\n onRevalidate: this.#maybeRevalidateQueries.bind(this)\n });\n subjects = this.layers.subjects;\n\n // these are hopefully temporary\n\n constructor(client) {\n this.logger = client[additionalContext].logger?.child({}, {\n msgPrefix: \"Store\"\n });\n this.client = client;\n this.cacheKeys = new CacheKeys({\n onDestroy: this.#cleanupCacheKey\n });\n this.aggregations = new AggregationsHelper(this, this.cacheKeys, this.whereCanonicalizer, this.rdpCanonicalizer);\n this.functions = new FunctionsHelper(this, this.cacheKeys);\n this.lists = new ListsHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer, this.rdpCanonicalizer, this.intersectCanonicalizer, this.pivotCanonicalizer, this.ridListCanonicalizer);\n this.objects = new ObjectsHelper(this, this.cacheKeys);\n this.links = new LinksHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer);\n this.objectSets = new ObjectSetHelper(this, this.cacheKeys, this.whereCanonicalizer, this.orderByCanonicalizer);\n }\n\n /**\n * Called after a key is no longer retained and the timeout has elapsed\n * @param key\n */\n #cleanupCacheKey = key => {\n const subject = this.subjects.peek(key);\n if (DEBUG_REFCOUNTS) {\n // eslint-disable-next-line no-console\n console.log(`CacheKey cleaning up (${JSON.stringify({\n closed: subject?.closed,\n observed: subject?.observed\n })})`, JSON.stringify([key.type, ...key.otherKeys], null, 2));\n }\n if (process.env.NODE_ENV !== \"production\") {\n !subject ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n }\n this.subjects.delete(key);\n this.queries.delete(key);\n };\n applyAction = async (action, args, opts) => {\n return await new ActionApplication(this).applyAction(action, args, opts);\n };\n validateAction = async (action, args) => {\n const result = await this.client(action).applyAction(args, {\n $validateOnly: true,\n $returnEdits: false\n });\n return result;\n };\n getValue(cacheKey) {\n return this.layers.top.get(cacheKey);\n }\n batch({\n optimisticId,\n changes = createChangedObjects()\n }, batchFn) {\n return this.layers.batch({\n optimisticId,\n changes\n }, batchFn);\n }\n invalidateObject(apiName, pk) {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n const variants = this.objectCacheKeyRegistry.getVariants(apiName, pk);\n\n // Invalidate all variant cache entries\n // Using Promise.allSettled to ensure if one invalidation fails, others will still complete.\n // This prevents a single failing query from blocking invalidation of other cache variants for the same object.\n const promises = [];\n if (variants.size === 0) {\n // No registered variants - create and revalidate the base variant (no RDP)\n promises.push(this.objects.getQuery({\n apiName,\n pk\n }, undefined).revalidate(/* force */true));\n } else {\n // Revalidate all registered variants\n for (const key of variants) {\n const query = this.queries.peek(key);\n if (query) {\n promises.push(query.revalidate(/* force */true));\n }\n }\n }\n return Promise.allSettled(promises);\n }\n async #maybeRevalidateQueries(changes, optimisticId) {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"maybeRevalidateQueries\"\n }) : undefined;\n if (changes.isEmpty()) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"No changes, aborting\");\n }\n return;\n }\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(DEBUG_ONLY__changesToString(changes), {\n optimisticId\n });\n }\n try {\n const promises = [];\n for (const cacheKey of this.queries.keys()) {\n const query = this.queries.peek(cacheKey);\n if (!query?.maybeUpdateAndRevalidate) {\n continue;\n }\n\n // Only propagate to queries that should receive these changes\n if (!this.#shouldPropagateToQuery({\n cacheKey,\n maybeUpdateAndRevalidate: query.maybeUpdateAndRevalidate\n }, changes, optimisticId)) {\n continue;\n }\n const promise = query.maybeUpdateAndRevalidate(changes, optimisticId);\n if (promise) promises.push(promise);\n }\n await Promise.all(promises);\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"in finally\", DEBUG_ONLY__changesToString(changes));\n }\n }\n }\n\n /**\n * Determines whether changes should propagate to a specific query.\n * Prevents unnecessary observable pipeline execution for cross-propagation.\n *\n * @param query - The query to check\n * @param changes - The changes that occurred\n * @param optimisticId - Optional optimistic update ID\n * @returns true if the query should be notified of these changes\n */\n #shouldPropagateToQuery(query, changes, optimisticId) {\n // Always propagate optimistic updates (user-initiated actions need immediate feedback)\n if (optimisticId) {\n return true;\n }\n\n // If the query's own cache key was modified (direct fetch), always propagate\n if (changes.modified.has(query.cacheKey)) {\n return true;\n }\n\n // Check if the query's object type is affected by the changes\n if (this.#shouldPropagateForObjectTypeChanges(query.cacheKey, changes)) {\n return true;\n }\n\n // For other cross-propagation (e.g., RDP field updates from unrelated object types):\n // Only propagate to queries WITH RDP configurations\n const queryRdpConfig = this.#getQueryRdpConfig(query.cacheKey);\n\n // If query has no RDP, don't propagate unrelated object changes to it\n // (it will get updates from its own direct fetches only)\n return queryRdpConfig != null;\n }\n\n /**\n * Checks if changes to an object type should propagate to a query.\n * This ensures queries receive updates when objects of their type are added/modified.\n *\n * @param cacheKey - The cache key of the query\n * @param changes - The changes that occurred\n * @returns true if the query should be notified based on object type changes\n */\n #shouldPropagateForObjectTypeChanges(cacheKey, changes) {\n const queryObjectType = this.#getQueryObjectType(cacheKey);\n if (!queryObjectType) {\n return false;\n }\n const affected = this.#changesAffectObjectType(changes, queryObjectType);\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"shouldPropagateToQuery\"\n }).debug(`Query type: ${queryObjectType}, affected: ${affected}`, {\n queryKey: DEBUG_ONLY__cacheKeyToString(cacheKey),\n addedCount: changes.addedObjects.get(queryObjectType)?.length ?? 0,\n modifiedCount: changes.modifiedObjects.get(queryObjectType)?.length ?? 0\n });\n }\n return affected;\n }\n\n /**\n * Extracts RDP configuration from a cache key if present.\n *\n * @param cacheKey - The cache key to check\n * @returns The RDP configuration, null, or undefined\n */\n #getQueryRdpConfig(cacheKey) {\n if (\"otherKeys\" in cacheKey && Array.isArray(cacheKey.otherKeys)) {\n if (cacheKey.type === \"object\") {\n return cacheKey.otherKeys[OBJECT_RDP_CONFIG_IDX];\n } else if (cacheKey.type === \"list\") {\n return cacheKey.otherKeys[LIST_RDP_IDX];\n } else if (cacheKey.type === \"aggregation\") {\n return cacheKey.otherKeys[AGGREGATION_RDP_IDX];\n }\n // Links and other types would also be at LIST_RDP_IDX\n }\n return undefined;\n }\n\n /**\n * Extracts the object type (apiName) from a cache key.\n *\n * @param cacheKey - The cache key to check\n * @returns The object type/apiName, or undefined if not applicable\n */\n #getQueryObjectType(cacheKey) {\n if (\"otherKeys\" in cacheKey && Array.isArray(cacheKey.otherKeys)) {\n if (cacheKey.type === \"object\") {\n return cacheKey.otherKeys[OBJECT_API_NAME_IDX];\n } else if (cacheKey.type === \"list\") {\n return cacheKey.otherKeys[LIST_API_NAME_IDX];\n } else if (cacheKey.type === \"aggregation\") {\n return cacheKey.otherKeys[AGGREGATION_API_NAME_IDX];\n }\n // Links would have apiName at a different position\n }\n return undefined;\n }\n\n /**\n * Checks if changes affect a specific object type.\n *\n * @param changes - The changes to check\n * @param objectType - The object type to check for\n * @returns true if the changes include added or modified objects of this type\n */\n #changesAffectObjectType(changes, objectType) {\n // Check added objects (MultiMap.get returns an array)\n const addedForType = changes.addedObjects.get(objectType);\n if (addedForType && addedForType.length > 0) {\n return true;\n }\n\n // Check modified objects (MultiMap.get returns an array)\n const modifiedForType = changes.modifiedObjects.get(objectType);\n if (modifiedForType && modifiedForType.length > 0) {\n return true;\n }\n return false;\n }\n\n /**\n * Invalidates all cache entries for a specific object type.\n * This will revalidate:\n * 1. All objects of the specified type\n * 2. All lists of the specified type\n * 3. All links where the source object is of the specified type\n *\n * @param apiName - The API name of the object type to invalidate\n * @param changes - Optional changes object to track what has been modified\n * @returns Promise that resolves when all invalidations are complete\n */\n invalidateObjectType(apiName, changes) {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"invalidateObjectType\"\n }).info(changes ? DEBUG_ONLY__changesToString(changes) : void 0);\n }\n const promises = [];\n for (const cacheKey of this.layers.truth.keys()) {\n if (changes && changes.modified.has(cacheKey)) {\n continue;\n }\n const query = this.queries.peek(cacheKey);\n if (!query) continue;\n promises.push(query.invalidateObjectType(apiName, changes));\n }\n\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n async invalidateAll() {\n const promises = [];\n for (const cacheKey of this.queries.keys()) {\n const query = this.queries.peek(cacheKey);\n if (query) {\n promises.push(query.revalidate(true));\n }\n }\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n async invalidateObjects(objects) {\n const objectsArray = Array.isArray(objects) ? objects : [objects];\n const promises = [];\n for (const obj of objectsArray) {\n promises.push(this.invalidateObject(obj.$objectType, obj.$primaryKey));\n }\n\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n async invalidateFunction(apiName, params) {\n return this.functions.invalidateFunction(apiName, params);\n }\n async invalidateFunctionsByObject(apiName, primaryKey) {\n return this.functions.invalidateFunctionsByObject(apiName, primaryKey);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DEBUG_REFCOUNTS = process.env.NODE_ENV !== \"production\" && false;\nexport const DEBUG_CACHE_KEYS = process.env.NODE_ENV !== \"production\" && false;","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { runOptimisticJob } from \"./OptimisticJob.js\";\nconst ACTION_DELAY = process.env.NODE_ENV === \"production\" ? 0 : 1000;\nexport class ActionApplication {\n constructor(store) {\n this.store = store;\n }\n applyAction = async (action, args, {\n optimisticUpdate\n } = {}) => {\n const logger = process.env.NODE_ENV !== \"production\" ? this.store.logger?.child({\n methodName: \"applyAction\"\n }) : this.store.logger;\n const removeOptimisticResult = runOptimisticJob(this.store, optimisticUpdate);\n return await (async () => {\n try {\n if (Array.isArray(args)) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"applying action to multiple args\", args);\n }\n const results = await this.store.client(action).batchApplyAction(args, {\n $returnEdits: true\n });\n await this.#invalidateActionEditResponse(results);\n return results;\n }\n\n // The types for client get confused when we dynamically applyAction so we\n // have to deal with the `any` here and force cast it to what it should be.\n // TODO: Update the types so this doesn't happen!\n\n const actionResults = await this.store.client(action).applyAction(args, {\n $returnEdits: true\n });\n if (process.env.NODE_ENV !== \"production\") {\n if (ACTION_DELAY > 0) {\n logger?.debug(\"action done, pausing\", actionResults);\n await new Promise(resolve => setTimeout(resolve, ACTION_DELAY));\n logger?.debug(\"action done, pausing done\");\n }\n }\n await this.#invalidateActionEditResponse(actionResults);\n return actionResults;\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"optimistic action complete; remove the results\");\n }\n // make sure this happens even if the action fails\n await removeOptimisticResult();\n }\n })();\n };\n #invalidateActionEditResponse = async actionEditResponse => {\n if (actionEditResponse == null) {\n return;\n }\n const {\n deletedObjects,\n modifiedObjects,\n addedObjects,\n editedObjectTypes,\n type\n } = actionEditResponse;\n let changes;\n if (type === \"edits\") {\n const promisesToWait = [];\n for (const list of [deletedObjects, modifiedObjects, addedObjects]) {\n for (const obj of list ?? []) {\n promisesToWait.push(this.store.invalidateObject(obj.objectType, obj.primaryKey));\n }\n }\n this.store.batch({}, batch => {\n for (const {\n objectType,\n primaryKey\n } of deletedObjects ?? []) {\n const cacheKey = this.store.cacheKeys.get(\"object\", objectType, primaryKey, /* rdpConfig */undefined);\n this.store.queries.peek(cacheKey)?.deleteFromStore(\"loaded\",\n // this is probably not the best value to use\n batch);\n }\n });\n await Promise.all(promisesToWait);\n } else {\n for (const apiName of editedObjectTypes) {\n await this.store.invalidateObjectType(apiName, changes);\n }\n }\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { additionalContext } from \"../../../Client.js\";\nimport { createOptimisticId } from \"../OptimisticId.js\";\nexport class OptimisticJob {\n #result;\n constructor(store, optimisticId) {\n const updatedObjects = [];\n\n // due to potentially needing to fetch the object metadata,\n // the creation of objects needs to be async. In practice, the\n // metadata is cached.\n const addedObjectPromises = [];\n const deletedObjects = [];\n\n // TODO, this code needs to be refactored. its weird right now\n // but the contract for `runOptimisticJob` is good.\n\n // todo memoize this\n this.getResult = () => {\n return this.#result ??= (async () => {\n const addedObjects = await Promise.allSettled(addedObjectPromises);\n const {\n batchResult\n } = store.batch({\n optimisticId\n }, batch => {\n for (const obj of addedObjects) {\n if (obj.status === \"fulfilled\") {\n store.objects.getQuery({\n apiName: obj.value.$objectType,\n pk: obj.value.$primaryKey\n }, undefined).writeToStore(obj.value, \"loading\", batch);\n } else {\n // TODO FIXME\n throw obj;\n }\n }\n for (const obj of updatedObjects) {\n store.objects.getQuery({\n apiName: obj.$objectType,\n pk: obj.$primaryKey\n }, undefined).writeToStore(obj, \"loading\", batch);\n }\n for (const obj of deletedObjects) {\n store.objects.getQuery({\n apiName: obj.$objectType,\n pk: obj.$primaryKey\n }, undefined).deleteFromStore(\"loading\", batch);\n }\n });\n return batchResult.changes;\n })();\n };\n this.context = {\n updateObject(value) {\n updatedObjects.push(value);\n return this;\n },\n createObject(type, pk, properties) {\n const create = store.client[additionalContext].objectFactory2(store.client[additionalContext], [{\n $primaryKey: pk,\n $apiName: type.apiName,\n $objectType: type.apiName,\n ...properties\n }], undefined, {}).then(objs => {\n return objs[0];\n });\n addedObjectPromises.push(create);\n return this;\n },\n deleteObject(value) {\n deletedObjects.push(value);\n return this;\n }\n };\n }\n}\nexport function runOptimisticJob(store, optimisticUpdate) {\n if (!optimisticUpdate) {\n return () => Promise.resolve();\n }\n const optimisticId = createOptimisticId();\n const job = new OptimisticJob(store, optimisticId);\n optimisticUpdate(job.context);\n const optimisticApplicationDone = job.getResult();\n return () => {\n return optimisticApplicationDone.then(\n // we don't want to leak the result\n () => undefined).finally(() => {\n store.layers.remove(optimisticId);\n });\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function createOptimisticId() {\n if (process.env.NODE_ENV !== \"production\") {\n if (createOptimisticId.counter === undefined) {\n createOptimisticId.counter = 0;\n }\n return {\n __optimisticId: createOptimisticId.counter++\n };\n }\n\n // in production we can just use the lightest empty object possible\n return Object.create(null);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const TYPE_IDX = 0;\nexport const API_NAME_IDX = 1;\nexport const WHERE_IDX = 2;\nexport const RDP_IDX = 3;\nexport const AGGREGATE_IDX = 4;","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { ObjectAggregationQuery } from \"./ObjectAggregationQuery.js\";\nexport class AggregationsHelper extends AbstractHelper {\n constructor(store, cacheKeys, whereCanonicalizer, rdpCanonicalizer) {\n super(store, cacheKeys);\n this.whereCanonicalizer = whereCanonicalizer;\n this.rdpCanonicalizer = rdpCanonicalizer;\n }\n observe(options, subFn) {\n return super.observe(options, subFn);\n }\n getQuery(options) {\n const {\n type,\n where,\n withProperties,\n aggregate\n } = options;\n const {\n apiName\n } = type;\n const typeKind = \"type\" in type ? type.type : \"interface\";\n const canonWhere = this.whereCanonicalizer.canonicalize(where ?? {});\n const canonRdp = withProperties ? this.rdpCanonicalizer.canonicalize(withProperties) : undefined;\n const canonAggregate = this.canonicalizeAggregate(aggregate);\n const aggregationCacheKey = this.cacheKeys.get(\"aggregation\", typeKind, apiName, canonWhere, canonRdp, canonAggregate);\n return this.store.queries.get(aggregationCacheKey, () => {\n if (typeKind !== \"object\") {\n throw new Error(\"Only ObjectTypeDefinition is currently supported for aggregations\");\n }\n return new ObjectAggregationQuery(this.store, this.store.subjects.get(aggregationCacheKey), aggregationCacheKey, options);\n });\n }\n canonicalizeAggregate(aggregate) {\n return JSON.parse(JSON.stringify(aggregate));\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { QuerySubscription } from \"./QuerySubscription.js\";\nexport class AbstractHelper {\n constructor(store, cacheKeys) {\n this.store = store;\n this.cacheKeys = cacheKeys;\n }\n observe(options, subFn) {\n const query = this.getQuery(options);\n return this._subscribe(query, options, subFn);\n }\n _subscribe(query, options, subFn) {\n // the ListQuery represents the shared state of the list\n this.store.cacheKeys.retain(query.cacheKey);\n if (options.mode !== \"offline\") {\n query.revalidate(options.mode === \"force\").catch(e => {\n subFn.error(e);\n\n // we don't want observeObject() to return a promise,\n // so we settle for logging an error here instead of\n // dropping it on the floor.\n if (this.store.logger) {\n this.store.logger.error(\"Unhandled error in observeObject\", e);\n } else {\n throw e;\n }\n });\n }\n const sub = query.subscribe(subFn);\n const querySub = new QuerySubscription(query, sub);\n query.registerSubscriptionDedupeInterval(querySub.subscriptionId, options.dedupeInterval);\n sub.add(() => {\n query.unregisterSubscriptionDedupeInterval(querySub.subscriptionId);\n this.store.cacheKeys.release(query.cacheKey);\n });\n return querySub;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UnsubscribableWrapper } from \"./UnsubscribableWrapper.js\";\nlet subscriptionIdCounter = 0;\n\n/** @internal */\nexport class QuerySubscription extends UnsubscribableWrapper {\n /** @internal */\n\n /** @internal */\n\n /** @internal */\n\n constructor(query, subscription) {\n super(subscription);\n this.query = query;\n this.subscription = subscription;\n this.subscriptionId = `sub_${++subscriptionIdCounter}`;\n\n // hide these from introspection\n Object.defineProperties(this, {\n query: {\n enumerable: false\n },\n subscription: {\n enumerable: false\n },\n subscriptionId: {\n enumerable: false\n }\n });\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { API_NAME_IDX } from \"./AggregationCacheKey.js\";\nimport { AggregationQuery } from \"./AggregationQuery.js\";\nexport class ObjectAggregationQuery extends AggregationQuery {\n async _fetchAggregation() {\n const type = this.cacheKey.otherKeys[API_NAME_IDX];\n let objectSet = this.store.client({\n type: \"object\",\n apiName: type\n });\n if (this.rdpConfig) {\n objectSet = objectSet.withProperties(this.rdpConfig);\n }\n objectSet = objectSet.where(this.canonicalWhere);\n return await objectSet.aggregate(this.canonicalAggregate);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BehaviorSubject, connectable, map } from \"rxjs\";\nimport { additionalContext } from \"../../../Client.js\";\nimport { Query } from \"../Query.js\";\nimport { AGGREGATE_IDX, API_NAME_IDX, RDP_IDX, WHERE_IDX } from \"./AggregationCacheKey.js\";\nexport class AggregationQuery extends Query {\n constructor(store, subject, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `AggregationQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n this.apiName = cacheKey.otherKeys[API_NAME_IDX];\n this.canonicalWhere = cacheKey.otherKeys[WHERE_IDX];\n this.rdpConfig = cacheKey.otherKeys[RDP_IDX];\n this.canonicalAggregate = cacheKey.otherKeys[AGGREGATE_IDX];\n }\n _createConnectable(subject) {\n return connectable(subject.pipe(map(x => {\n return {\n status: x.status,\n result: x.value,\n lastUpdated: x.lastUpdated,\n error: x.status === \"error\" ? new Error(\"Aggregation failed\") : undefined\n };\n })), {\n connector: () => new BehaviorSubject({\n status: \"init\",\n result: undefined,\n lastUpdated: 0\n })\n });\n }\n async _fetchAndStore() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"_fetchAndStore\"\n }).debug(\"calling _fetchAndStore\");\n }\n try {\n const result = await this._fetchAggregation();\n this.store.batch({}, batch => {\n this.writeToStore(result, \"loaded\", batch);\n });\n } catch (err) {\n this.store.batch({}, batch => {\n this.writeToStore(undefined, \"error\", batch);\n });\n }\n }\n writeToStore(data, status, batch) {\n batch.write(this.cacheKey, data, status);\n batch.changes.modified.add(this.cacheKey);\n return batch.read(this.cacheKey);\n }\n invalidateObjectType = (objectType, changes) => {\n if (this.apiName === objectType) {\n changes?.modified.add(this.cacheKey);\n return this.revalidate(true);\n }\n return Promise.resolve();\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { additionalContext } from \"../../Client.js\";\nexport class Query {\n retainCount = 0;\n #connectable;\n #subscription;\n #subject;\n #subscriptionDedupeIntervals = new Map();\n\n /** @internal */\n\n constructor(store, observable, opts, cacheKey, logger) {\n this.options = opts;\n this.cacheKey = cacheKey;\n this.store = store;\n this.cacheKeys = store.cacheKeys;\n this.#subject = observable;\n this.logger = logger ?? (process.env.NODE_ENV === \"production\" ? store.client[additionalContext].logger : store.client[additionalContext].logger?.child({}, {\n msgPrefix: process.env.NODE_ENV !== \"production\" ? `Query<${cacheKey.type}, ${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>` : \"Query\"\n }));\n }\n subscribe(observer) {\n this.#connectable ??= this._createConnectable(this.#subject);\n this.#subscription = this.#connectable.connect();\n const sub = this.#connectable.subscribe({\n next: value => {\n if (observer.next) {\n observer.next(value);\n }\n },\n error: err => {\n if (observer.error) {\n observer.error(err);\n }\n },\n complete: () => {\n if (observer.complete) {\n observer.complete();\n }\n }\n });\n return sub;\n }\n\n /**\n * Register a subscription's dedupeInterval value\n */\n registerSubscriptionDedupeInterval(subscriptionId, dedupeInterval) {\n if (dedupeInterval != null && dedupeInterval > 0) {\n this.#subscriptionDedupeIntervals.set(subscriptionId, dedupeInterval);\n }\n }\n\n /**\n * Unregister a subscription's dedupeInterval value\n */\n unregisterSubscriptionDedupeInterval(subscriptionId) {\n this.#subscriptionDedupeIntervals.delete(subscriptionId);\n }\n\n /**\n * Get the minimum dedupeInterval from all active subscriptions\n */\n getMinimumDedupeInterval() {\n if (this.#subscriptionDedupeIntervals.size === 0) {\n return this.options.dedupeInterval ?? 0;\n }\n return Math.min(...this.#subscriptionDedupeIntervals.values());\n }\n\n /**\n * Causes the query to revalidate. This will cause the query to fetch\n * the latest data from the server and update the store if it is deemed\n * \"stale\" or if `force` is true.\n *\n * @param force\n * @returns\n */\n async revalidate(force) {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"revalidate\"\n }) : this.logger;\n if (force) {\n this.abortController?.abort();\n }\n\n // n.b. I think this isn't quite right since we may require multiple\n // pages to properly \"revalidate\" for someone. This only really works if you\n // have a single page/object. It needs to be redone. FIXME\n\n // if we are pending the first page/object we can just ignore this\n if (this.pendingFetch) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"Fetch is already pending, using it\");\n }\n await this.pendingFetch;\n return;\n }\n const minDedupeInterval = this.getMinimumDedupeInterval();\n if (minDedupeInterval > 0 && this.lastFetchStarted != null && Date.now() - this.lastFetchStarted < minDedupeInterval) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"Within dupeInterval, aborting revalidate\");\n }\n return Promise.resolve();\n }\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"Starting actual revalidate\");\n }\n this.store.batch({}, batch => {\n // make sure the truth layer knows we are loading\n\n // this will not trigger an update to `changes` so it cannot trigger an\n // update of a list either. This may not be the behavior we want.\n this.setStatus(\"loading\", batch);\n });\n this._preFetch();\n this.lastFetchStarted = Date.now();\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"calling _fetchAndStore()\");\n }\n this.pendingFetch = this._fetchAndStore().finally(() => {\n logger?.debug(\"promise's finally for _fetchAndStore()\");\n this.pendingFetch = undefined;\n });\n await this.pendingFetch;\n return;\n }\n _preFetch() {}\n /**\n * Sets the status of the query in the store (but does not store that in `changes`).\n *\n * @param status\n * @param batch\n * @returns\n */\n setStatus(status, batch) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"setStatus\"\n }).debug(`Attempting to set status to '${status}'`);\n }\n const existing = batch.read(this.cacheKey);\n if (existing?.status === status) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"setStatus\"\n }).debug(`Status is already set to '${status}'; aborting`);\n }\n return;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"setStatus\"\n }).debug(`Writing status '${status}' to cache`);\n }\n batch.write(this.cacheKey, existing?.value, status);\n }\n dispose() {\n if (this.abortController) {\n this.abortController.abort();\n }\n this.#subscription?.unsubscribe();\n this._dispose();\n }\n\n /**\n * Per query type dispose functionality\n */\n _dispose() {}\n\n /**\n * The purpose of this method is to provide a way for others to write\n * directly into the store for this query.\n *\n * @param data\n * @param status\n * @param batch\n */\n\n /**\n * @param changes\n * @param optimisticId\n * @returns If revalidation is needed, a promise that resolves after the\n * revalidation is complete. Otherwise, undefined.\n */\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * This isn't performant and should only be used for debug logging!\n * @internal\n */\nexport function DEBUG_ONLY__cacheKeyToString(x) {\n if (process.env.NODE_ENV !== \"production\") {\n return `${x.type}CacheKey<${x.otherKeys.map(xx => JSON.stringify(xx)).join(\", \")}>`.replaceAll(\"\\\"\", \"'\");\n } else {\n throw new Error(\"not implemented\");\n }\n}\n/**\n * This isn't performant and should only be used for debug logging!\n * @internal\n */\nexport function DEBUG_ONLY__cacheKeysToString(x) {\n if (process.env.NODE_ENV !== \"production\") {\n return \"\\n - \" + x.map(DEBUG_ONLY__cacheKeyToString).join(\"\\n - \");\n } else {\n throw new Error(\"not implemented\");\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Trie } from \"@wry/trie\";\nimport { DEBUG_CACHE_KEYS, DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nimport { RefCounts } from \"./RefCounts.js\";\n\n/**\n * Cache key management with canonicalization.\n * - Uses Trie structure for efficient storage and lookup\n */\nexport class CacheKeys {\n #cacheKeys = new Trie(false, keys => {\n const cacheKey = {\n type: keys[0],\n otherKeys: keys.slice(1)\n };\n this.#onCreate?.(cacheKey);\n if (DEBUG_REFCOUNTS) {\n // eslint-disable-next-line no-console\n console.log(`CacheKeys.onCreate(${cacheKey.type}, ${JSON.stringify(cacheKey.otherKeys)})`);\n this.#finalizationRegistry.register(cacheKey, () => {\n // eslint-disable-next-line no-console\n console.log(`CacheKey Finalization(${cacheKey.type}, ${JSON.stringify(cacheKey.otherKeys)})`);\n });\n }\n return cacheKey;\n });\n #refCounts = new RefCounts(DEBUG_REFCOUNTS ? 15_000 : 60_000, k => this.#cleanupCacheKey(k));\n\n // we are currently only using this for debug logging and should just remove it in the future if that\n // continues to be true\n #finalizationRegistry;\n #onCreate;\n #onDestroy;\n constructor({\n onCreate,\n onDestroy\n }) {\n this.#onCreate = onCreate;\n this.#onDestroy = onDestroy;\n setInterval(() => {\n this.#refCounts.gc();\n }, 1000);\n this.#finalizationRegistry = new FinalizationRegistry(cleanupCallback => {\n try {\n cleanupCallback();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Caught an error while running a finalization callback\", e);\n }\n });\n }\n get(type, ...args) {\n // Normalize trailing undefined values to ensure consistent cache key creation\n // This makes get(\"object\", \"Foo\", 1, undefined) === get(\"object\", \"Foo\", 1)\n const normalizedArgs = [...args];\n while (normalizedArgs.length > 0 && normalizedArgs[normalizedArgs.length - 1] === undefined) {\n normalizedArgs.pop();\n }\n const cacheKeyArgs = [type, ...normalizedArgs];\n if (process.env.NODE_ENV !== \"production\" && DEBUG_CACHE_KEYS) {\n // eslint-disable-next-line no-console\n console.debug(`CacheKeys.get([${type},\n ${normalizedArgs.map(x => JSON.stringify(x)).join(\", \")}]) - already exists? `, this.#cacheKeys.peekArray(cacheKeyArgs) != null);\n }\n const cacheKey = this.#cacheKeys.lookupArray(cacheKeyArgs);\n\n // This is an idempotent call that ensures the cache key is registered for\n // cleanup. If already registered, this does nothing.\n this.#refCounts.register(cacheKey);\n return cacheKey;\n }\n retain(cacheKey) {\n this.#refCounts.retain(cacheKey);\n }\n release(cacheKey) {\n this.#refCounts.release(cacheKey);\n }\n #remove(cacheKey) {\n this.#cacheKeys.remove(cacheKey.type, ...cacheKey.otherKeys);\n }\n\n /**\n * Called after a key is no longer retained and the timeout has elapsed\n * @param key\n */\n #cleanupCacheKey = key => {\n this.#onDestroy?.(key);\n this.#remove(key);\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nexport class RefCounts {\n refCounts = new Map();\n\n // keeps our objects around for some extended duration after they are no longer\n // needed which is good for quick clicks across tabs.\n gcMap = new Map();\n constructor(keepAlive, cleanup) {\n this.keepAlive = keepAlive;\n this.cleanup = cleanup;\n }\n register(key) {\n if (!this.refCounts.has(key)) {\n this.gcMap.set(key, Date.now() + this.keepAlive);\n }\n return key;\n }\n retain(key) {\n const count = this.refCounts.get(key) ?? 0;\n this.refCounts.set(key, count + 1);\n if (this.gcMap.has(key)) {\n this.gcMap.delete(key);\n }\n }\n release(key) {\n const count = this.refCounts.get(key);\n if (count === undefined) {\n // TODO we should trace here if this happens because it likely means\n // someone unsubscribed twice and I don't know if we should treat that as\n // a potential error or not\n // throw new Error(\"RefCounts.release() - key not found\", key);\n } else if (count === 1) {\n this.refCounts.delete(key);\n this.gcMap.set(key, Date.now() + this.keepAlive);\n } else {\n this.refCounts.set(key, count - 1);\n }\n }\n has(key) {\n return this.refCounts.has(key);\n }\n gc() {\n const now = Date.now();\n if (DEBUG_REFCOUNTS) {\n for (const [key, count] of this.refCounts) {\n // eslint-disable-next-line no-console\n console.debug(\"RefCounts.gc() - counts: \", JSON.stringify(key), count);\n }\n }\n for (const [key, deathTime] of this.gcMap) {\n if (DEBUG_REFCOUNTS && deathTime >= now) {\n // eslint-disable-next-line no-console\n console.debug(\"RefCounts.gc() - ttl \", JSON.stringify(key), deathTime - now);\n }\n if (deathTime < now) {\n if (DEBUG_REFCOUNTS) {\n // eslint-disable-next-line no-console\n console.debug(\"RefCounts.gc() - registering cleaning up\", JSON.stringify(key));\n }\n this.gcMap.delete(key);\n this.cleanup(key);\n }\n }\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MultiMap } from \"mnemonist\";\nimport { DEBUG_ONLY__cacheKeyToString } from \"./CacheKey.js\";\nexport class Changes {\n modifiedObjects = new MultiMap();\n addedObjects = new MultiMap();\n added = new Set();\n modified = new Set();\n deleted = new Set();\n registerObject = (cacheKey, data, isNew) => {\n this[isNew ? \"addedObjects\" : \"modifiedObjects\"].set(data.$objectType ?? data.$apiName, data);\n this[isNew ? \"added\" : \"modified\"].add(cacheKey);\n };\n deleteObject = cacheKey => {\n this.deleted.add(cacheKey);\n };\n registerList = key => {\n this.modified.add(key);\n };\n registerLink = cacheKey => {\n this.modified.add(cacheKey);\n };\n deleteLink = cacheKey => {\n this.deleted.add(cacheKey);\n };\n registerObjectSet = key => {\n this.modified.add(key);\n };\n registerFunction = key => {\n this.modified.add(key);\n };\n isEmpty() {\n return this.modifiedObjects.size === 0 && this.addedObjects.size === 0 && this.added.size === 0 && this.modified.size === 0 && this.deleted.size === 0;\n }\n}\nexport function createChangedObjects() {\n return new Changes();\n}\nexport function DEBUG_ONLY__changesToString(changes) {\n if (process.env.NODE_ENV !== \"production\") {\n return JSON.stringify({\n modifiedObjects: multimapHelper(changes.modifiedObjects),\n addedObjects: multimapHelper(changes.addedObjects),\n added: listHelper(changes.added),\n modified: listHelper(changes.modified)\n }, null, 2);\n } else {\n throw new Error(\"not implemented\");\n }\n}\nfunction listHelper(set) {\n return Array.from(set).map(DEBUG_ONLY__cacheKeyToString);\n}\nfunction multimapHelper(multimap) {\n return Object.fromEntries(Array.from(multimap.associations()).map(([type, objects]) => {\n return [type, objects.map(o => o.$primaryKey)];\n }));\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { PARAMS_IDX } from \"./FunctionCacheKey.js\";\nimport { FunctionParamsCanonicalizer } from \"./FunctionParamsCanonicalizer.js\";\nimport { FunctionQuery } from \"./FunctionQuery.js\";\nexport class FunctionsHelper extends AbstractHelper {\n paramsCanonicalizer = new FunctionParamsCanonicalizer();\n constructor(store, cacheKeys) {\n super(store, cacheKeys);\n }\n observe(options, subFn) {\n return super.observe(options, subFn);\n }\n getQuery(options) {\n const {\n queryDef,\n params,\n ...observeOpts\n } = options;\n const apiName = queryDef.apiName;\n const version = queryDef.isFixedVersion ? queryDef.version : undefined;\n const canonicalParams = this.paramsCanonicalizer.canonicalize(params);\n const functionCacheKey = this.cacheKeys.get(\"function\", apiName, version, canonicalParams);\n return this.store.queries.get(functionCacheKey, () => new FunctionQuery(this.store, this.store.subjects.get(functionCacheKey), queryDef, params, functionCacheKey, observeOpts));\n }\n async invalidateFunction(apiName, params) {\n const functionApiName = typeof apiName === \"string\" ? apiName : apiName.apiName;\n let canonicalParams;\n if (params !== undefined) {\n canonicalParams = this.paramsCanonicalizer.canonicalize(params);\n }\n const promises = [];\n for (const cacheKey of this.store.queries.keys()) {\n if (cacheKey.type !== \"function\") {\n continue;\n }\n const query = this.store.queries.peek(cacheKey);\n if (!query) {\n continue;\n }\n\n // Check if apiName matches\n if (query.apiName !== functionApiName) {\n continue;\n }\n\n // If params provided, check for exact match\n if (canonicalParams !== undefined) {\n const queryCacheKey = cacheKey;\n const queryParams = queryCacheKey.otherKeys[PARAMS_IDX];\n if (queryParams !== canonicalParams) {\n continue;\n }\n }\n\n // Invalidate this query\n promises.push(query.revalidate(true));\n }\n await Promise.allSettled(promises);\n }\n async invalidateFunctionsByObject(apiName, primaryKey) {\n const promises = [];\n for (const cacheKey of this.store.queries.keys()) {\n if (cacheKey.type !== \"function\") {\n continue;\n }\n const query = this.store.queries.peek(cacheKey);\n if (!query) {\n continue;\n }\n if (query.dependsOnObject(apiName, primaryKey)) {\n promises.push(query.revalidate(true));\n }\n }\n await Promise.allSettled(promises);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Index constants for accessing otherKeys array elements\nexport const API_NAME_IDX = 0;\nexport const VERSION_IDX = 1;\nexport const PARAMS_IDX = 2;\n\n/**\n * Cache values use `unknown` because FunctionQuery handles any QueryDefinition at runtime.\n * Concrete typing is preserved at the API layer via generics and cast at output.\n */","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Trie } from \"@wry/trie\";\nimport { getWireObjectSet, isObjectSet } from \"../../../objectSet/createObjectSet.js\";\nimport { isObjectSpecifiersObject } from \"../../../util/isObjectSpecifiersObject.js\";\n// Path markers use \"$:\" prefix. User data with this prefix is unlikely but could\n// theoretically cause collisions if it matches the exact marker sequence.\nfunction isPrimitiveValue(value) {\n if (value == null) return true;\n const t = typeof value;\n return t === \"string\" || t === \"number\" || t === \"boolean\" || t === \"bigint\";\n}\nexport class FunctionParamsCanonicalizer {\n #inputCache = new WeakMap();\n #trie = new Trie(false);\n #canonicalByMarker = new WeakMap();\n canonicalize(params) {\n if (params == null) {\n return undefined;\n }\n if (this.#inputCache.has(params)) {\n return this.#inputCache.get(params);\n }\n const seen = new WeakSet();\n const path = [];\n const canonicalValue = this.#encodeAndBuild(params, path, seen);\n const marker = this.#trie.lookupArray(path);\n let canonical = this.#canonicalByMarker.get(marker);\n if (canonical === undefined) {\n canonical = canonicalValue;\n this.#canonicalByMarker.set(marker, canonical);\n }\n this.#inputCache.set(params, canonical);\n return canonical;\n }\n #encodeAndBuild(value, path, seen) {\n if (value == null) {\n path.push(value);\n return value;\n }\n if (isPrimitiveValue(value)) {\n path.push(value);\n return value;\n }\n\n // Poor man's circular reference detection, we should improve this if this turns into a problem\n if (seen.has(value)) {\n throw new Error(\"Circular reference in function parameters\");\n }\n seen.add(value);\n if (value instanceof Date) {\n const iso = value.toISOString();\n path.push(\"$:date\", iso);\n return iso;\n }\n if (Array.isArray(value)) {\n path.push(\"$:array\");\n const arr = value.map(item => this.#encodeAndBuild(item, path, seen));\n path.push(\"$:array_end\");\n return arr;\n }\n if (value instanceof Set) {\n path.push(\"$:set\");\n const sorted = this.#sortSetValues(Array.from(value));\n const arr = sorted.map(item => this.#encodeAndBuild(item, path, seen));\n path.push(\"$:set_end\");\n return arr;\n }\n if (value instanceof Map) {\n path.push(\"$:map\");\n const sorted = this.#sortMapEntries(Array.from(value.entries()));\n const arr = sorted.map(([k, v]) => [this.#encodeAndBuild(k, path, seen), this.#encodeAndBuild(v, path, seen)]);\n path.push(\"$:map_end\");\n return arr;\n }\n if (isObjectSpecifiersObject(value)) {\n const objectType = value.$objectType ?? value.$apiName;\n path.push(\"$:osdk\", objectType, value.$primaryKey);\n return {\n $apiName: objectType,\n $primaryKey: value.$primaryKey\n };\n }\n if (isObjectSet(value)) {\n const wire = getWireObjectSet(value);\n path.push(\"$:objectset\", wire);\n return wire;\n }\n const obj = value;\n path.push(\"$:object\");\n const canonical = {};\n for (const key of Object.keys(obj).sort()) {\n path.push(key);\n canonical[key] = this.#encodeAndBuild(obj[key], path, seen);\n }\n path.push(\"$:object_end\");\n return canonical;\n }\n #comparePrimitives(a, b) {\n const ta = typeof a;\n const tb = typeof b;\n if (ta !== tb) return ta.localeCompare(tb);\n if (ta === \"string\") return a.localeCompare(b);\n if (ta === \"number\") {\n const an = a;\n const bn = b;\n if (Number.isNaN(an) && Number.isNaN(bn)) return 0;\n if (Number.isNaN(an)) return 1;\n if (Number.isNaN(bn)) return -1;\n return an - bn;\n }\n if (ta === \"boolean\") return (a ? 1 : 0) - (b ? 1 : 0);\n if (ta === \"bigint\") {\n const ab = a;\n const bb = b;\n return ab < bb ? -1 : ab > bb ? 1 : 0;\n }\n return 0;\n }\n #sortSetValues(items) {\n return items.slice().sort((a, b) => {\n if (isPrimitiveValue(a) && isPrimitiveValue(b)) {\n return this.#comparePrimitives(a, b);\n }\n return JSON.stringify(a).localeCompare(JSON.stringify(b));\n });\n }\n #sortMapEntries(entries) {\n return entries.slice().sort(([a], [b]) => {\n if (isPrimitiveValue(a) && isPrimitiveValue(b)) {\n return this.#comparePrimitives(a, b);\n }\n return JSON.stringify(a).localeCompare(JSON.stringify(b));\n });\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BehaviorSubject, connectable, map } from \"rxjs\";\nimport { additionalContext } from \"../../../Client.js\";\nimport { applyQuery } from \"../../../queries/applyQuery.js\";\nimport { Query } from \"../Query.js\";\nexport class FunctionQuery extends Query {\n #apiName;\n #version;\n #params;\n #dependsOn;\n #dependsOnObjects;\n #queryDef;\n constructor(store, subject, queryDef, params, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `FunctionQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n this.#apiName = queryDef.apiName;\n this.#version = queryDef.isFixedVersion ? queryDef.version : undefined;\n this.#params = params;\n this.#dependsOn = opts.dependsOn;\n this.#dependsOnObjects = opts.dependsOnObjects;\n this.#queryDef = queryDef;\n }\n _createConnectable(subject) {\n return connectable(subject.pipe(map(x => {\n const value = x.value;\n return {\n status: x.status,\n result: value?.result,\n lastUpdated: value?.executedAt ?? 0,\n error: value?.error\n };\n })), {\n connector: () => new BehaviorSubject({\n status: \"init\",\n result: undefined,\n lastUpdated: 0\n })\n });\n }\n async _fetchAndStore() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"_fetchAndStore\"\n }).debug(\"calling _fetchAndStore\");\n }\n try {\n // Type assertion needed because FunctionQuery we determine types dynamically\n // at runtime without compile-time parameter type info. applyQuery internally\n // converts params via remapQueryParams which handles the type safely.\n const result = await applyQuery(this.store.client[additionalContext], this.#queryDef, this.#params);\n const executedAt = Date.now();\n this.store.batch({}, batch => {\n this.writeToStore({\n result,\n executedAt\n }, \"loaded\", batch);\n });\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"_fetchAndStore\"\n }).error(\"Error executing function\", e);\n }\n const error = e instanceof Error ? e : new Error(String(e));\n this.store.batch({}, batch => {\n this.writeToStore({\n result: undefined,\n executedAt: 0,\n error\n }, \"error\", batch);\n });\n }\n }\n writeToStore(data, status, batch) {\n batch.write(this.cacheKey, data, status);\n return batch.read(this.cacheKey);\n }\n invalidateObjectType = (objectType, changes) => {\n // Check if this function depends on the given object type\n if (this.#dependsOn?.includes(objectType)) {\n changes?.registerFunction(this.cacheKey);\n return this.revalidate(true);\n }\n return Promise.resolve();\n };\n dependsOnObject(apiName, primaryKey) {\n if (!this.#dependsOnObjects) {\n return false;\n }\n return this.#dependsOnObjects.some(obj => obj.$apiName === apiName && obj.$primaryKey === primaryKey);\n }\n\n /**\n * Called during batch operations when objects change.\n * Checks if any objects in dependsOnObjects were modified/added\n * and triggers revalidation if so.\n */\n maybeUpdateAndRevalidate = (changes, _optimisticId) => {\n if (!this.#dependsOnObjects?.length) {\n return undefined;\n }\n for (const dep of this.#dependsOnObjects) {\n const modifiedObjects = changes.modifiedObjects.get(dep.$apiName);\n if (modifiedObjects?.some(obj => obj.$primaryKey === dep.$primaryKey)) {\n return this.revalidate(true);\n }\n const addedObjects = changes.addedObjects.get(dep.$apiName);\n if (addedObjects?.some(obj => obj.$primaryKey === dep.$primaryKey)) {\n return this.revalidate(true);\n }\n }\n return undefined;\n };\n get apiName() {\n return this.#apiName;\n }\n get version() {\n return this.#version;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CachingCanonicalizer } from \"./Canonicalizer.js\";\nexport class IntersectCanonicalizer extends CachingCanonicalizer {\n structuralCache = new Map();\n constructor(whereCanonicalizer) {\n super();\n this.whereCanonicalizer = whereCanonicalizer;\n }\n lookupOrCreate(intersectWith) {\n const canonicalClauses = intersectWith.map(item => this.whereCanonicalizer.canonicalize(item.where ?? {}));\n const structuralKey = canonicalClauses.map(clause => JSON.stringify(clause)).join(\"||\");\n let canonical = this.structuralCache.get(structuralKey);\n if (!canonical) {\n canonical = canonicalClauses;\n this.structuralCache.set(structuralKey, canonical);\n }\n return canonical;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Interface for canonicalizing objects.\n */\n\n/**\n * Base class for canonicalizers that provides common caching infrastructure.\n * Subclasses control how structural deduplication is performed.\n */\nexport class CachingCanonicalizer {\n /**\n * Cache for input object identity.\n */\n inputCache = new WeakMap();\n\n /**\n * Look up or create a canonical form for the given input.\n * This method handles the structural deduplication logic.\n *\n * @param input The input to canonicalize\n * @returns The canonical form\n */\n\n canonicalize(input) {\n if (!input) {\n return undefined;\n }\n if (this.inputCache.has(input)) {\n return this.inputCache.get(input);\n }\n const canonical = this.lookupOrCreate(input);\n this.inputCache.set(input, canonical);\n return canonical;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nimport { createInitEntry } from \"./createInitEntry.js\";\nimport { Layer } from \"./Layer.js\";\nimport { Subjects } from \"./Subjects.js\";\nimport { tombstone } from \"./tombstone.js\";\nexport class Layers {\n #truthLayer = new Layer(undefined, undefined);\n #topLayer;\n #onRevalidate;\n constructor({\n logger,\n onRevalidate\n }) {\n this.logger = logger;\n this.#topLayer = this.#truthLayer;\n this.subjects = new Subjects({\n logger,\n layers: this\n });\n this.#onRevalidate = onRevalidate;\n }\n get top() {\n return this.#topLayer;\n }\n get truth() {\n return this.#truthLayer;\n }\n remove(layerId) {\n !(layerId != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"undefined is the reserved layerId for the truth layer\") : invariant(false) : void 0;\n // 1. collect all cache keys for a given layerId\n let currentLayer = this.#topLayer;\n const cacheKeys = new Map();\n while (currentLayer != null && currentLayer.parentLayer != null) {\n if (currentLayer.layerId === layerId) {\n for (const [k, v] of currentLayer.entries()) {\n if (cacheKeys.has(k)) continue;\n cacheKeys.set(k, v);\n }\n }\n currentLayer = currentLayer.parentLayer;\n }\n\n // 2. remove the layers from the chain\n this.#topLayer = this.#topLayer.removeLayer(layerId);\n\n // 3. check each cache key to see if it is different in the new chain\n for (const [k, oldEntry] of cacheKeys) {\n const currentEntry = this.#topLayer.get(k);\n\n // 4. if different, update the subject\n if (oldEntry !== currentEntry) {\n const newEntry = currentEntry ?? createInitEntry(k);\n // We are going to be pretty lazy here and just re-emit the value.\n // In the future it may benefit us to deep equal check her but I think\n // the subjects are effectively doing this anyway.\n this.subjects.peek(k)?.next({\n ...newEntry,\n isOptimistic: currentEntry?.value !== this.#truthLayer.get(k)?.value\n });\n }\n }\n }\n batch({\n optimisticId,\n changes\n }, batchFn) {\n !(optimisticId === undefined || !!optimisticId) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"optimistic must be undefined or not falsy\") : invariant(false) : void 0;\n const batchContext = this.#createBatchContext({\n optimisticId,\n changes\n });\n const retVal = batchFn(batchContext);\n this.#onRevalidate(changes, optimisticId).catch(e => {\n // we don't want batch() to return a promise,\n // so we settle for logging an error here instead of\n // dropping it on the floor.\n if (this.logger) {\n this.logger.error(\"Unhandled error in batch\", e);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Unhandled error in batch\", e);\n throw e;\n }\n });\n return {\n batchResult: batchContext,\n retVal: retVal,\n changes: batchContext.changes\n };\n }\n #createBatchContext({\n optimisticId,\n changes\n }) {\n let needsLayer = optimisticId !== undefined;\n const batchContext = {\n changes,\n createLayerIfNeeded: () => {\n if (needsLayer) {\n this.#topLayer = this.#topLayer.addLayer(optimisticId);\n needsLayer = false;\n }\n },\n optimisticWrite: !!optimisticId,\n write: (cacheKey, value, status) => {\n const oldTopValue = this.#topLayer.get(cacheKey);\n if (optimisticId) batchContext.createLayerIfNeeded();\n const writeLayer = optimisticId ? this.#topLayer : this.#truthLayer;\n const newValue = {\n cacheKey,\n value,\n lastUpdated: Date.now(),\n status\n };\n writeLayer.set(cacheKey, newValue);\n const newTopValue = this.#topLayer.get(cacheKey);\n if (oldTopValue !== newTopValue) {\n this.subjects.get(cacheKey)?.next({\n ...newValue,\n isOptimistic: newTopValue?.value !== this.#truthLayer.get(cacheKey)?.value\n });\n }\n return newValue;\n },\n delete: (cacheKey, status) => {\n return batchContext.write(cacheKey, tombstone, status);\n },\n read: cacheKey => {\n return optimisticId ? this.#topLayer.get(cacheKey) : this.#truthLayer.get(cacheKey);\n }\n };\n return batchContext;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function createInitEntry(cacheKey) {\n return {\n cacheKey,\n status: \"init\",\n value: undefined,\n lastUpdated: 0\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WeakMapWithEntries } from \"./WeakMapWithEntries.js\";\n\n/*\n Image some layers\n\n [\n { cache: { obj1: { a: 1 } }, layerId: undefined },\n { cache: { obj1: { a: 1, b: 2 } }, layerId: \"layer1\" },\n { cache: { obj1: { a: undefined, b: 2 } }, layerId: \"layer2\" },\n { cache: { obj1: { a: 1, b: 2 } }, layerId: \"layer3\" },\n ]\n*/\n\nexport class Layer {\n #parent;\n #cache = new WeakMapWithEntries();\n #layerId;\n constructor(parent, layerId) {\n this.#parent = parent;\n this.#layerId = layerId;\n }\n get parentLayer() {\n return this.#parent;\n }\n get layerId() {\n return this.#layerId;\n }\n addLayer(layerId) {\n return new Layer(this, layerId);\n }\n removeLayer(layerId) {\n if (layerId == null || this.#parent == null) {\n // we are the root, so we can't remove anything\n return this;\n }\n if (this.#layerId !== layerId) {\n this.#parent = this.#parent.removeLayer(layerId);\n return this;\n }\n return this.#parent.removeLayer(layerId);\n }\n entries() {\n return this.#cache.entries();\n }\n keys() {\n return this.#cache.keys();\n }\n get(cacheKey) {\n return this.#cache.get(cacheKey) ?? this.#parent?.get(cacheKey);\n }\n set(cacheKey, value) {\n this.#cache.set(cacheKey, value);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class WeakMapWithEntries {\n #map = new WeakMap();\n #list = [];\n #toClean = [];\n #needsCleaning = false;\n #registry = new FinalizationRegistry(() => {\n this.#toClean.push(new WeakRef({}));\n this.#needsCleaning = true;\n });\n constructor() {\n const weakThis = new WeakRef(this);\n const intervalId = setInterval(() => {\n const self = weakThis.deref();\n if (self) {\n if (this.#needsCleaning) {\n this.#clean();\n }\n } else {\n clearInterval(intervalId);\n }\n }, 1000);\n }\n #clean() {\n this.#list = this.#list.filter(ref => ref.deref() !== undefined);\n }\n\n // functions for WeakMap\n delete(key) {\n const ret = this.#map.delete(key);\n this.#toClean.push(new WeakRef(key));\n this.#needsCleaning = true;\n return ret;\n }\n get(key) {\n return this.#map.get(key);\n }\n has(key) {\n return this.#map.has(key);\n }\n\n /**\n * Adds a new element with a specified key and value.\n * @param key Must be an object or symbol.\n */\n set(key, value) {\n if (!this.#map.has(key)) {\n this.#list.push(new WeakRef(key));\n }\n this.#map.set(key, value);\n return this;\n }\n [Symbol.toStringTag] = \"WeakMap\";\n\n // functions for iterables\n /** Returns an iterable of entries in the map. */\n [Symbol.iterator]() {\n return this.entries();\n }\n\n /**\n * Returns an iterable of key, value pairs for every entry in the map.\n */\n entries() {\n const self = this;\n function* iter() {\n for (const ref of self.#list) {\n const key = ref.deref();\n if (key !== undefined) {\n yield [key, self.#map.get(key)];\n }\n }\n }\n return iter();\n }\n\n /**\n * Returns an iterable of keys in the map\n */\n keys() {\n const self = this;\n function* iter() {\n for (const ref of self.#list) {\n const key = ref.deref();\n if (key !== undefined) {\n yield key;\n }\n }\n }\n return iter();\n }\n\n /**\n * Returns an iterable of values in the map\n */\n values() {\n const self = this;\n function* iter() {\n for (const ref of self.#list) {\n const key = ref.deref();\n if (key !== undefined) {\n const value = self.#map.get(key);\n if (value !== undefined) {\n yield value;\n }\n }\n }\n }\n return iter();\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BehaviorSubject } from \"rxjs\";\nimport { createInitEntry } from \"./createInitEntry.js\";\nexport class Subjects {\n #layers;\n\n // we can use a regular Map here because the refCounting will\n // handle cleanup.\n #cacheKeyToSubject = new WeakMap();\n constructor({\n logger,\n layers\n }) {\n this.logger = logger;\n this.#layers = layers;\n }\n peek = cacheKey => {\n return this.#cacheKeyToSubject.get(cacheKey);\n };\n get = cacheKey => {\n let subject = this.#cacheKeyToSubject.get(cacheKey);\n if (!subject) {\n const initialValue = this.#layers.top.get(cacheKey) ?? createInitEntry(cacheKey);\n subject = new BehaviorSubject({\n ...initialValue,\n isOptimistic: initialValue.value !== this.#layers.truth.get(cacheKey)?.value\n });\n this.#cacheKeyToSubject.set(cacheKey, subject);\n }\n return subject;\n };\n delete = cacheKey => {\n const subject = this.peek(cacheKey);\n if (subject) {\n subject.complete();\n this.#cacheKeyToSubject.delete(cacheKey);\n }\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const tombstone = undefined;","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { SpecificLinkQuery } from \"./SpecificLinkQuery.js\";\nexport class LinksHelper extends AbstractHelper {\n constructor(store, cacheKeys, whereCanonicalizer, orderByCanonicalizer) {\n super(store, cacheKeys);\n this.whereCanonicalizer = whereCanonicalizer;\n this.orderByCanonicalizer = orderByCanonicalizer;\n }\n getQuery(options) {\n const {\n apiName\n } = options.srcType;\n const canonWhere = this.whereCanonicalizer.canonicalize(options.where ?? {});\n const canonOrderBy = this.orderByCanonicalizer.canonicalize(options.orderBy ?? {});\n const linkCacheKey = this.cacheKeys.get(\"specificLink\", apiName, options.pk, options.linkName, canonWhere, canonOrderBy);\n return this.store.queries.get(linkCacheKey, () => {\n return new SpecificLinkQuery(this.store, this.store.subjects.get(linkCacheKey), linkCacheKey, options);\n });\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport deepEqual from \"fast-deep-equal\";\nimport { additionalContext } from \"../../../Client.js\";\nimport { BaseListQuery } from \"../base-list/BaseListQuery.js\";\nimport { OrderBySortingStrategy } from \"../sorting/SortingStrategy.js\";\nimport { tombstone } from \"../tombstone.js\";\n/**\n * Query implementation for retrieving linked objects from a specific object.\n * - Stores links as ObjectCacheKey[] references\n * - Creates indirect dependencies on linked objects\n * - Supports filtering and sorting of linked collections\n * - Handles proper invalidation of related objects\n */\nexport class SpecificLinkQuery extends BaseListQuery {\n #sourceApiName;\n #sourcePk;\n #linkName;\n #whereClause;\n #orderBy;\n\n /**\n * Register changes to the cache specific to SpecificLinkQuery\n */\n registerCacheChanges(batch) {\n batch.changes.modified.add(this.cacheKey);\n }\n constructor(store, subject, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `SpecificLinkQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n\n // Extract the necessary parameters from the cache key\n [this.#sourceApiName, this.#sourcePk, this.#linkName, this.#whereClause, this.#orderBy] = cacheKey.otherKeys;\n }\n\n // _fetchAndStore is now implemented in BaseCollectionQuery\n\n /**\n * Implements fetchPageData from the BaseCollectionQuery template method pattern\n * Fetches a page of linked objects\n */\n async fetchPageData(signal) {\n // Use the client API to create a query that pivots to linked objects\n const client = this.store.client;\n\n // First, get metadata for the source object to know the primary key field name\n const sourceObjectDef = {\n type: \"object\",\n apiName: this.#sourceApiName\n };\n\n // Use the client's ontologyProvider to get metadata, which has built-in caching\n const sourceMetadata = await client[additionalContext].ontologyProvider.getObjectDefinition(this.#sourceApiName);\n\n // Initialize sorting strategy with the link's target object type\n if (this.#orderBy && Object.keys(this.#orderBy).length > 0) {\n const linkDef = sourceMetadata.links?.[this.#linkName];\n if (!linkDef?.targetType) {\n throw new Error(`Missing link definition or targetType for link '${this.#linkName}' on object type '${this.#sourceApiName}'`);\n }\n this.sortingStrategy = new OrderBySortingStrategy(linkDef.targetType, this.#orderBy);\n }\n\n // Query for the specific source object\n const sourceQuery = client(sourceObjectDef).where({\n [sourceMetadata.primaryKeyApiName]: this.#sourcePk\n });\n\n // Pivot to the linked objects\n const linkQuery = sourceQuery.pivotTo(this.#linkName);\n\n // Check for abort signal again before fetching\n if (signal?.aborted) {\n throw new Error(\"Aborted\");\n }\n\n // Fetch the linked objects with pagination\n // Add orderBy to the query parameters if specified\n const queryParams = {\n $pageSize: this.options.pageSize || 100,\n $nextPageToken: this.nextPageToken,\n $includeRid: true\n };\n\n // Include orderBy if it has entries\n if (this.#orderBy && Object.keys(this.#orderBy).length > 0) {\n queryParams.$orderBy = this.#orderBy;\n }\n\n // Include whereClause if it has entries\n if (this.#whereClause && Object.keys(this.#whereClause).length > 0) {\n queryParams.$where = this.#whereClause;\n }\n const response = await linkQuery.fetchPage(queryParams);\n\n // Store the next page token for pagination\n this.nextPageToken = response.nextPageToken;\n return response;\n }\n\n /**\n * Removes a link query from the store\n */\n deleteFromStore(status, batch) {\n const entry = batch.read(this.cacheKey);\n if (entry && deepEqual(tombstone, entry.value)) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"deleteFromStore\"\n }).debug(`Links were already deleted, just setting status`);\n }\n return batch.write(this.cacheKey, entry.value, status);\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"deleteFromStore\"\n }).debug(JSON.stringify({\n status\n }));\n }\n\n // If there is no entry then there is nothing to do\n if (!entry || !entry.value) {\n return;\n }\n const ret = batch.delete(this.cacheKey, status);\n batch.changes.deleted.add(this.cacheKey);\n return ret;\n }\n\n /**\n * Implements Query.maybeUpdateAndRevalidate to handle cache invalidation\n */\n maybeUpdateAndRevalidate = async (changes, _optimisticId) => {\n // TODO: Implement proper invalidation logic for linked objects\n // This would check if any of the linked objects have changed,\n // or if the source object's links might have changed\n\n // For now, simply check if this specific link cache key was modified\n if (changes.modified.has(this.cacheKey)) {\n return this.revalidate(true);\n }\n\n // No relevant changes were detected\n return Promise.resolve();\n };\n invalidateObjectType = (objectType, changes) => {\n // We need to invalidate links in two cases:\n // 1. When the source object type matches the apiName (direct invalidation)\n // 2. When the target object type might be the invalidated type (affected by target changes)\n\n // For case 1 - direct source object type match\n if (this.#sourceApiName === objectType) {\n changes?.modified.add(this.cacheKey);\n return this.revalidate(true);\n } else {\n // For case 2 - check if the link's target type matches the invalidated type\n // We need to use the ontology provider to get the link metadata\n // Since this is async, we'll collect all the metadata check promises\n return (async () => {\n // Get the source object metadata to determine link target type\n const sourceMetadata = await this.store.client[additionalContext].ontologyProvider.getObjectDefinition(this.#sourceApiName);\n const linkDef = sourceMetadata.links?.[this.#linkName];\n if (!linkDef || linkDef.targetType !== objectType) return;\n const promise = this.revalidate(true);\n changes?.modified.add(this.cacheKey);\n return promise;\n })();\n }\n };\n}\n\n/**\n * Type guard to check if a cache key is a SpecificLinkCacheKey\n */\nexport function isSpecificLinkCacheKey(key) {\n return key.type === \"specificLink\";\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport deepEqual from \"fast-deep-equal\";\nimport { DEBUG_ONLY__cacheKeysToString } from \"../CacheKey.js\";\nimport { isObjectInstance } from \"../isObjectInstance.js\";\nimport { RDP_IDX } from \"../list/ListCacheKey.js\";\nimport { Query } from \"../Query.js\";\nimport { NoOpSortingStrategy } from \"../sorting/SortingStrategy.js\";\nimport { createCollectionConnectable } from \"./createCollectionConnectable.js\";\nimport { removeDuplicates } from \"./removeDuplicates.js\";\n\n/**\n * Base class for collection-based queries (lists and links)\n * Provides common functionality for working with collections of objects\n */\nexport class BaseListQuery extends Query {\n /**\n * The sorting strategy to use for this collection\n * @protected\n */\n sortingStrategy = new NoOpSortingStrategy();\n\n /**\n * Get RDP configuration from the cache key\n */\n get rdpConfig() {\n return this.cacheKey.otherKeys[RDP_IDX];\n }\n\n // Collection-specific behavior is implemented by subclasses\n /**\n * Token for the next page of results\n * @protected\n */\n\n /**\n * Promise tracking an in-progress page fetch\n * @protected\n */\n\n //\n // Shared Implementations\n //\n\n /**\n * Standard method to update a list of objects\n * Handles common list update patterns for both ListQuery and SpecificLinkQuery\n *\n * @param items Objects or cache keys to add to the list\n * @param status Status to set for the list\n * @param batch Batch context to use\n * @param append Whether to append to the existing list or replace it\n * @param totalCount Optional total count from API response\n * @returns The updated entry\n */\n _updateList(items, status, batch, append = false, totalCount) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"updateList\"\n }).debug(`{status: ${status}, append: ${append}}`, JSON.stringify(items, null, 2));\n }\n let objectCacheKeys;\n if (items.length === 0) {\n objectCacheKeys = [];\n } else if (isObjectInstance(items[0])) {\n // Items are object instances, need to store them first\n objectCacheKeys = this.store.objects.storeOsdkInstances(items, batch, this.rdpConfig);\n } else {\n // Items are already cache keys\n objectCacheKeys = items;\n }\n objectCacheKeys = this.#retainReleaseAppend(batch, append, objectCacheKeys);\n objectCacheKeys = this._sortCacheKeys(objectCacheKeys, batch);\n objectCacheKeys = removeDuplicates(objectCacheKeys, batch);\n return this.writeToStore({\n data: objectCacheKeys,\n totalCount\n }, status, batch);\n }\n\n /**\n * Common implementation for writing to store for collection-based queries\n * @param data The collection data to write to the store\n * @param status The status to set\n * @param batch The batch context\n */\n writeToStore(data, status, batch) {\n const entry = batch.read(this.cacheKey);\n if (entry && deepEqual(data, entry.value)) {\n // Check if both data AND status are the same\n if (entry.status === status) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"writeToStore\"\n }).debug(`Collection data was deep equal and status unchanged (${status}), skipping update`);\n }\n // Return the existing entry without writing to avoid unnecessary notifications\n return entry;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"writeToStore\"\n }).debug(`Collection data was deep equal, just updating status from ${entry.status} to ${status}`);\n }\n // Keep the same value but update status and lastUpdated\n return batch.write(this.cacheKey, entry.value, status);\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"writeToStore\"\n }).debug(`{status: ${status}},`, DEBUG_ONLY__cacheKeysToString(data.data));\n }\n const ret = batch.write(this.cacheKey, data, status);\n this.registerCacheChanges(batch);\n return ret;\n }\n\n /**\n * Register changes to the cache based on the specific collection type\n * Implemented by subclasses to handle specific change registration\n */\n\n /**\n * Common method for managing object reference counting and appending results\n * Used by collection queries when updating object references\n *\n * @param batch The batch context to use\n * @param append Whether to append to existing objects or replace them\n * @param objectCacheKeys Array of object cache keys to process\n * @returns The final array of object cache keys after retain/release/append\n */\n #retainReleaseAppend(batch, append, objectCacheKeys) {\n const existingList = batch.read(this.cacheKey);\n\n // whether its append or update we need to retain all the new objects\n if (!batch.optimisticWrite) {\n if (!append) {\n // we need to release all the old objects\n // N.B. the store keeps the cache keys around for a bit so we don't\n // need to worry about them being GC'd before we re-retain them\n for (const objectCacheKey of existingList?.value?.data ?? []) {\n this.store.cacheKeys.release(objectCacheKey);\n }\n }\n for (const objectCacheKey of objectCacheKeys) {\n this.store.cacheKeys.retain(objectCacheKey);\n }\n }\n if (append) {\n objectCacheKeys = [...(existingList?.value?.data ?? []), ...objectCacheKeys];\n }\n return objectCacheKeys;\n }\n _dispose() {\n this.store.batch({}, batch => {\n const entry = batch.read(this.cacheKey);\n if (entry) {\n for (const objectCacheKey of entry.value?.data ?? []) {\n this.store.cacheKeys.release(objectCacheKey);\n }\n }\n });\n }\n\n /**\n * Creates a payload from collection parameters\n * Default implementation that covers common fields for all collection types\n * Subclasses may override to add type-specific fields if needed\n *\n * @param params Common collection parameters\n * @returns A typed payload for the specific collection type\n */\n createPayload(params) {\n return {\n resolvedList: params.resolvedData,\n isOptimistic: params.isOptimistic,\n fetchMore: this.fetchMore,\n hasMore: this.nextPageToken != null,\n status: params.status,\n lastUpdated: params.lastUpdated,\n totalCount: params.totalCount\n }; // Type assertion needed since we don't know exact subtype\n }\n\n /**\n * Creates a connectable observable for this collection\n * Common implementation shared by all collection types\n *\n * @param subject The subject to connect to\n * @returns A connectable observable of the collection's payload type\n */\n _createConnectable(subject) {\n return createCollectionConnectable(subject, this.store.subjects, params => this.createPayload(params));\n }\n\n /**\n * @override Reset pagination state before a fetch\n */\n _preFetch() {\n this.nextPageToken = undefined;\n super._preFetch();\n }\n\n /**\n * Common fetchMore implementation for pagination\n * Handles pending request management and loading states\n */\n fetchMore = () => {\n if (this.pendingPageFetch) {\n return this.pendingPageFetch;\n }\n if (this.pendingFetch) {\n this.pendingPageFetch = (async () => {\n await this.pendingFetch;\n await this.fetchMore();\n })().finally(() => {\n this.pendingPageFetch = undefined;\n });\n return this.pendingPageFetch;\n }\n if (this.nextPageToken == null) {\n return Promise.resolve(undefined);\n }\n this.store.batch({}, batch => {\n this.setStatus(\"loading\", batch);\n });\n this.pendingFetch = this.fetchPageAndUpdate(\"loaded\", this.abortController?.signal).then(() => void 0).finally(() => {\n this.pendingFetch = undefined;\n });\n return this.pendingFetch;\n };\n\n /**\n * Minimum number of results to load initially\n * May be overridden by subclasses for specific collection types\n * @protected\n */\n minResultsToLoad = 0;\n\n /**\n * Common _fetchAndStore implementation for pagination\n * Uses fetchPageAndUpdate to load the initial set of data\n * Will load multiple pages if necessary to reach minResultsToLoad\n */\n async _fetchAndStore() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"_fetchAndStore\"\n }).debug(\"fetching pages\");\n }\n\n // Keep fetching pages until we have the minimum number of results or no more pages\n while (true) {\n const entry = await this.fetchPageAndUpdate(\"loading\", this.abortController?.signal);\n if (!entry) {\n // we were aborted\n return;\n }\n\n // Check if we have enough results or no more pages\n const count = entry.value?.data.length || 0;\n if (count >= this.minResultsToLoad || this.nextPageToken == null) {\n break;\n }\n await Promise.resolve();\n }\n this.store.batch({}, batch => {\n this.setStatus(\"loaded\", batch);\n });\n return Promise.resolve();\n }\n\n /**\n * Template method for fetching a page of data and updating the store\n * Provides common error handling and abort signal checking\n *\n * @param status The status to set for the entry\n * @param signal Optional AbortSignal for cancellation\n * @returns A promise that resolves to the updated entry or undefined if aborted\n */\n async fetchPageAndUpdate(status, signal) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"fetchPageAndUpdate\"\n }).debug(`Fetching data with status: ${status}`);\n }\n\n // Early abort check\n if (signal?.aborted) {\n return undefined;\n }\n try {\n const hadPreviousPage = this.nextPageToken != null;\n\n // Call the subclass-specific implementation to fetch data\n const result = await this.fetchPageData(signal);\n this.currentTotalCount = result.totalCount;\n\n // Check for abort again after fetch\n if (signal?.aborted) {\n return undefined;\n }\n\n // Store the fetched data using batch operations\n const {\n retVal\n } = this.store.batch({}, batch => {\n const append = hadPreviousPage;\n const finalStatus = result.nextPageToken ? status : \"loaded\";\n const objectKeys = this.store.objects.storeOsdkInstances(result.data, batch, this.rdpConfig);\n return this._updateList(objectKeys, finalStatus, batch, append, this.currentTotalCount);\n });\n return retVal;\n } catch (error) {\n // Log any errors that occur\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"fetchPageAndUpdate\"\n }).error(\"Error fetching data\", error);\n }\n\n // For unexpected errors, write error status if not aborted\n if (!signal?.aborted) {\n const {\n retVal\n } = this.store.batch({}, batch => {\n return this.handleFetchError(error, status, batch);\n });\n return retVal;\n }\n\n // If aborted, just return undefined\n return undefined;\n }\n }\n\n /**\n * Abstract method that subclasses implement for their specific data fetching logic\n *\n * @param signal Optional AbortSignal for cancellation\n * @returns A promise that resolves to the fetched data\n */\n\n /**\n * Handle fetch errors by setting appropriate error state\n * Default implementation that subclasses can override\n *\n * @param error The error that occurred\n * @param status The intended status if successful\n * @param batch The batch context to use\n * @returns The updated entry with error status\n */\n handleFetchError(_error, _status, batch) {\n const existingTotalCount = batch.read(this.cacheKey)?.value?.totalCount;\n return this.writeToStore({\n data: [],\n totalCount: existingTotalCount\n }, \"error\", batch);\n }\n\n /**\n * Sort the collection items using the configured sorting strategy\n * @param objectCacheKeys - The cache keys to sort\n * @param batch - The batch context\n * @returns Sorted array of cache keys\n */\n _sortCacheKeys(objectCacheKeys, batch) {\n return this.sortingStrategy.sortCacheKeys(objectCacheKeys, batch);\n }\n\n /**\n * Unified method for updating collection data in the store\n * Handles storing, sorting, deduplication, and reference counting\n *\n * @param items - Either object cache keys or object instances to update\n * @param options - Configuration options for the update\n * @param batch - The batch context to use\n * @returns The updated entry\n */\n updateCollection(items, options, batch) {\n if (process.env.NODE_ENV !== \"production\") {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"updateCollection\"\n }) : this.logger;\n logger?.debug(`{status: ${options.status}, append: ${options.append}}`, JSON.stringify(items, null, 2));\n }\n\n // Step 1: Convert items to object cache keys if needed\n let objectCacheKeys;\n if (items.length === 0) {\n objectCacheKeys = [];\n } else if (isObjectInstance(items[0])) {\n // Items are object instances, need to store them first\n objectCacheKeys = this.store.objects.storeOsdkInstances(items, batch, this.rdpConfig);\n } else {\n // Items are already cache keys\n objectCacheKeys = items;\n }\n\n // Step 2: Handle retain/release/append logic\n objectCacheKeys = this.#retainReleaseAppend(batch, options.append ?? false, objectCacheKeys);\n\n // Step 3: Sort using the configured sorting strategy\n objectCacheKeys = this._sortCacheKeys(objectCacheKeys, batch);\n\n // Step 4: Remove duplicates\n objectCacheKeys = removeDuplicates(objectCacheKeys, batch);\n\n // Step 5: Write to store\n const existingTotalCount = batch.read(this.cacheKey)?.value?.totalCount;\n return this.writeToStore({\n data: objectCacheKeys,\n totalCount: existingTotalCount\n }, options.status, batch);\n }\n\n //\n // Shared Websocket Subscription Methods\n //\n\n /**\n * Create standard websocket subscription handlers for an ObjectSet.\n * Subclasses can override individual handlers for custom behavior.\n *\n * @param objectSet The ObjectSet to subscribe to\n * @param sub The parent subscription to add cleanup to\n * @param methodName The method name for logging purposes\n */\n createWebsocketSubscription(objectSet, sub, methodName = \"registerStreamUpdates\") {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName\n }) : this.logger;\n if (process.env.NODE_ENV !== \"production\") {\n logger?.child({\n methodName\n }).info(\"Subscribing from websocket\");\n }\n try {\n const websocketSubscription = objectSet.subscribe({\n onChange: this.onOswChange.bind(this),\n onError: this.onOswError.bind(this),\n onOutOfDate: this.onOswOutOfDate.bind(this),\n onSuccessfulSubscription: this.onOswSuccessfulSubscription.bind(this)\n });\n sub.add(() => {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.child({\n methodName\n }).info(\"Unsubscribing from websocket\");\n }\n websocketSubscription.unsubscribe();\n });\n } catch (error) {\n if (this.logger) {\n this.logger.child({\n methodName\n }).error(\"Failed to register stream updates\", error);\n }\n this.onOswError({\n subscriptionClosed: true,\n error\n });\n }\n }\n\n /**\n * Handler called when websocket subscription is successfully established.\n */\n onOswSuccessfulSubscription() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"onSuccessfulSubscription\"\n }).debug(\"\");\n }\n }\n\n /**\n * Handler called when subscribed data becomes out of date.\n */\n onOswOutOfDate() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"onOutOfDate\"\n }).debug(\"\");\n }\n }\n\n /**\n * Handler called when websocket subscription encounters an error.\n */\n onOswError(errors) {\n if (this.logger) {\n this.logger?.child({\n methodName: \"onError\"\n }).error(\"subscription errors\", errors);\n }\n }\n\n /**\n * Handler called when an object in the subscribed set is added or updated.\n * Default implementation stores the object with RDP config if available.\n *\n * @param update The object update notification\n */\n onOswChange({\n object,\n state\n }) {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"registerStreamUpdates\"\n }) : this.logger;\n if (process.env.NODE_ENV !== \"production\") {\n logger?.child({\n methodName: \"onChange\"\n }).debug(`Got an update of type: ${state}`, object);\n }\n if (state === \"ADDED_OR_UPDATED\") {\n this.store.batch({}, batch => {\n this.store.objects.storeOsdkInstances([object], batch, this.rdpConfig // Safe - null for queries without RDPs\n );\n });\n } else if (state === \"REMOVED\") {\n this.onOswRemoved(object);\n }\n }\n\n /**\n * Handler called when an object is removed from the subscribed set.\n * Default implementation deletes the object from cache.\n * ListQuery overrides this for list-specific removal logic.\n *\n * @param object The removed object\n */\n onOswRemoved(object) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"onRemoved\"\n }).debug(\"Removing object\", object);\n }\n this.store.batch({}, batch => {\n const objectCacheKey = this.store.cacheKeys.get(\"object\", object.$objectType ?? object.$apiName, object.$primaryKey);\n batch.delete(objectCacheKey, \"loaded\");\n });\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Type guard to check if an item is an object instance\n */\nexport function isObjectInstance(item) {\n return item != null && typeof item === \"object\" && \"$primaryKey\" in item;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Index constants for accessing otherKeys array elements\nexport const TYPE_IDX = 0;\nexport const API_NAME_IDX = 1;\nexport const WHERE_IDX = 2;\nexport const ORDER_BY_IDX = 3;\nexport const RDP_IDX = 4;\nexport const INTERSECT_IDX = 5;\nexport const PIVOT_IDX = 6;\nexport const RIDS_IDX = 7;","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Strategy interface for collection sorting\n */\n\n/**\n * No-operation sorting strategy that preserves original order\n */\nexport class NoOpSortingStrategy {\n sortCacheKeys(objectCacheKeys, _batch) {\n return objectCacheKeys;\n }\n}\n/**\n * Sorting strategy for OrderBy clauses\n */\nexport class OrderBySortingStrategy {\n constructor(apiName, orderBy) {\n this.apiName = apiName;\n this.orderBy = orderBy;\n this.sortFns = createOrderBySortFns(orderBy);\n }\n sortCacheKeys(objectCacheKeys, batch) {\n if (Object.keys(this.orderBy).length === 0) {\n return objectCacheKeys;\n }\n return objectCacheKeys.sort((a, b) => {\n for (const sortFn of this.sortFns) {\n const ret = sortFn(batch.read(a)?.value?.$as(this.apiName), batch.read(b)?.value?.$as(this.apiName));\n if (ret !== 0) {\n return ret;\n }\n }\n return 0;\n });\n }\n}\n\n/**\n * Creates sort functions for an orderBy clause\n * @param orderBy - The order by clause\n * @returns Array of sort functions\n */\nexport function createOrderBySortFns(orderBy) {\n return Object.entries(orderBy).map(([key, order]) => {\n return (a, b) => {\n const aValue = a?.[key];\n const bValue = b?.[key];\n if (aValue == null && bValue == null) {\n return 0;\n }\n if (aValue == null) {\n return 1;\n }\n if (bValue == null) {\n return -1;\n }\n const m = order === \"asc\" ? -1 : 1;\n return aValue < bValue ? m : aValue > bValue ? -m : 0;\n };\n });\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { asapScheduler, combineLatest, connectable, distinctUntilChanged, map, of, ReplaySubject, scheduled, switchMap } from \"rxjs\";\n/**\n * Creates a connectable observable for a collection of objects\n *\n * @param subject The subject to connect to\n * @param store The store to use for resolving objects\n * @param createPayload A function that creates the payload from common parameters\n * @returns A connectable observable of the payload type\n */\nexport function createCollectionConnectable(subject, subjects, createPayload) {\n return connectable(subject.pipe(switchMap(listEntry => {\n const resolvedData = listEntry?.value?.data == null || listEntry.value.data.length === 0 ? of([]) : combineLatest(listEntry.value.data.map(cacheKey => subjects.get(cacheKey).pipe(map(objectEntry => objectEntry?.value), distinctUntilChanged())));\n return scheduled(combineLatest({\n resolvedData,\n isOptimistic: of(listEntry.isOptimistic),\n status: of(listEntry.status),\n lastUpdated: of(listEntry.lastUpdated),\n totalCount: of(listEntry?.value?.totalCount)\n }).pipe(map(params => createPayload({\n resolvedData: Array.isArray(params.resolvedData) ? params.resolvedData : [],\n isOptimistic: params.isOptimistic,\n status: params.status,\n lastUpdated: params.lastUpdated,\n totalCount: params.totalCount\n }))), asapScheduler);\n })), {\n resetOnDisconnect: false,\n connector: () => new ReplaySubject(1)\n });\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Removes duplicate object cache keys from an array while maintaining order.\n * Also reads each key from the batch context (for side effects).\n *\n * @param objectCacheKeys Array of object cache keys that may contain duplicates\n * @param batch The batch context used to read cache entries\n * @returns Array with duplicates removed, maintaining the original order\n */\nexport function removeDuplicates(objectCacheKeys, batch) {\n const visited = new Set();\n return objectCacheKeys.filter(key => {\n batch.read(key);\n if (visited.has(key)) {\n return false;\n }\n visited.add(key);\n return true;\n });\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { InterfaceListQuery } from \"./InterfaceListQuery.js\";\nimport { ObjectListQuery } from \"./ObjectListQuery.js\";\nexport class ListsHelper extends AbstractHelper {\n constructor(store, cacheKeys, whereCanonicalizer, orderByCanonicalizer, rdpCanonicalizer, intersectCanonicalizer, pivotCanonicalizer, ridListCanonicalizer) {\n super(store, cacheKeys);\n this.whereCanonicalizer = whereCanonicalizer;\n this.orderByCanonicalizer = orderByCanonicalizer;\n this.rdpCanonicalizer = rdpCanonicalizer;\n this.intersectCanonicalizer = intersectCanonicalizer;\n this.pivotCanonicalizer = pivotCanonicalizer;\n this.ridListCanonicalizer = ridListCanonicalizer;\n }\n observe(options, subFn) {\n const ret = super.observe(options, subFn);\n if (options.streamUpdates) {\n ret.query.registerStreamUpdates(ret.subscription);\n }\n return ret;\n }\n getQuery(options) {\n const {\n type: typeDefinition,\n where,\n orderBy,\n withProperties,\n intersectWith,\n pivotTo,\n rids\n } = options;\n const {\n apiName,\n type\n } = typeDefinition;\n const canonWhere = this.whereCanonicalizer.canonicalize(where ?? {});\n const canonOrderBy = this.orderByCanonicalizer.canonicalize(orderBy ?? {});\n const canonRdp = withProperties ? this.rdpCanonicalizer.canonicalize(withProperties) : undefined;\n const canonIntersect = intersectWith && intersectWith.length > 0 ? this.intersectCanonicalizer.canonicalize(intersectWith) : undefined;\n const canonPivot = pivotTo ? this.pivotCanonicalizer.canonicalize(apiName, pivotTo) : undefined;\n const canonRids = rids != null ? this.ridListCanonicalizer.canonicalize(rids) : undefined;\n const listCacheKey = this.cacheKeys.get(\"list\", type, apiName, canonWhere, canonOrderBy, canonRdp, canonIntersect, canonPivot, canonRids);\n return this.store.queries.get(listCacheKey, () => {\n const QueryClass = type === \"object\" ? ObjectListQuery : InterfaceListQuery;\n return new QueryClass(this.store, this.store.subjects.get(listCacheKey), apiName, listCacheKey, options);\n });\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport groupBy from \"object.groupby\";\nimport invariant from \"tiny-invariant\";\nimport { ObjectDefRef } from \"../../../object/convertWireToOsdkObjects/InternalSymbols.js\";\nimport { ListQuery, RDP_IDX } from \"./ListQuery.js\";\nexport class InterfaceListQuery extends ListQuery {\n createObjectSet(store) {\n const rdpConfig = this.cacheKey.otherKeys[RDP_IDX];\n const type = \"interface\";\n const objectTypeDef = {\n type,\n apiName: this.apiName\n };\n if (rdpConfig != null) {\n return store.client(objectTypeDef).withProperties(rdpConfig).where(this.canonicalWhere);\n }\n return store.client(objectTypeDef).where(this.canonicalWhere);\n }\n async revalidateObjectType(apiName) {\n const objectMetadata = await this.store.client.fetchMetadata({\n type: \"object\",\n apiName\n });\n if (this.apiName in objectMetadata.interfaceMap) {\n await this.revalidate(/* force */true);\n }\n }\n async postProcessFetchedData(data) {\n return reloadDataAsFullObjects(this.store.client, data);\n }\n createPayload(params) {\n const resolvedList = params.resolvedData.map(obj => obj.$as(this.apiName));\n return {\n resolvedList,\n isOptimistic: params.isOptimistic,\n fetchMore: this.fetchMore,\n hasMore: this.nextPageToken != null,\n status: params.status,\n lastUpdated: params.lastUpdated\n };\n }\n extractRelevantObjects(changes) {\n const matchesApiName = ([, object]) => {\n return this.apiName in object[ObjectDefRef].interfaceMap;\n };\n const added = Array.from(changes.addedObjects).filter(matchesApiName).map(([, object]) => object.$as(this.apiName));\n const modified = Array.from(changes.modifiedObjects).filter(matchesApiName).map(([, object]) => object.$as(this.apiName));\n return {\n added: {\n all: added,\n strictMatches: new Set(),\n sortaMatches: new Set()\n },\n modified: {\n all: modified,\n strictMatches: new Set(),\n sortaMatches: new Set()\n }\n };\n }\n}\n\n// Hopefully this can go away when we can just request the full object properties on first load\nasync function reloadDataAsFullObjects(client, data) {\n if (data.length === 0) {\n return data;\n }\n const groups = groupBy(data, x => x.$objectType);\n const objectTypeToPrimaryKeyToObject = Object.fromEntries(await Promise.all(Object.entries(groups).map(async ([apiName, objects]) => {\n // Interface query results don't have ObjectDefRef, so we fetch metadata to get primaryKeyApiName\n const objectDef = await client.fetchMetadata({\n type: \"object\",\n apiName\n });\n const where = {\n [objectDef.primaryKeyApiName]: {\n $in: objects.map(x => x.$primaryKey)\n }\n };\n const result = await client(objectDef).where(where).fetchPage({\n $includeRid: true\n });\n return [apiName, Object.fromEntries(result.data.map(x => [x.$primaryKey, x]))];\n })));\n return data.map(obj => {\n const fullObject = objectTypeToPrimaryKeyToObject[obj.$objectType][obj.$primaryKey];\n !fullObject ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Could not find object ${obj.$objectType} ${obj.$primaryKey}`) : invariant(false) : void 0;\n return fullObject;\n });\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nimport { additionalContext } from \"../../../Client.js\";\nimport { getWireObjectSet } from \"../../../objectSet/createObjectSet.js\";\nimport { BaseListQuery } from \"../base-list/BaseListQuery.js\";\nimport { DEBUG_ONLY__changesToString } from \"../Changes.js\";\nimport { getObjectTypesThatInvalidate } from \"../getObjectTypesThatInvalidate.js\";\nimport { objectSortaMatchesWhereClause as objectMatchesWhereClause } from \"../objectMatchesWhereClause.js\";\nimport { OrderBySortingStrategy } from \"../sorting/SortingStrategy.js\";\nimport { INTERSECT_IDX, ORDER_BY_IDX, PIVOT_IDX, WHERE_IDX } from \"./ListCacheKey.js\";\nexport { API_NAME_IDX, INTERSECT_IDX, PIVOT_IDX, RDP_IDX, RIDS_IDX } from \"./ListCacheKey.js\";\n/**\n * Base class for filtered and sorted object collection queries.\n * - Handles where clause filtering and orderBy sorting\n * - Manages pagination through fetchMore\n * - Auto-updates when matching objects change\n * - Uses canonicalized cache keys for consistency\n */\nexport class ListQuery extends BaseListQuery {\n // pageSize?: number; // this is the internal page size. we need to track this properly\n\n #whereClause;\n\n // Using base class minResultsToLoad instead of a private property\n #orderBy;\n #intersectWith;\n #pivotInfo;\n #objectSet;\n\n /**\n * Register changes to the cache specific to ListQuery\n */\n registerCacheChanges(batch) {\n batch.changes.registerList(this.cacheKey);\n }\n constructor(store, subject, apiName, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `ListQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n this.apiName = apiName;\n this.#whereClause = cacheKey.otherKeys[WHERE_IDX];\n this.#orderBy = cacheKey.otherKeys[ORDER_BY_IDX];\n this.#intersectWith = cacheKey.otherKeys[INTERSECT_IDX];\n this.#pivotInfo = cacheKey.otherKeys[PIVOT_IDX];\n this.#objectSet = this.createObjectSet(store);\n\n // Only initialize the sorting strategy here if there's no pivotTo.\n // When pivotTo is used, the target type differs from apiName, so we\n // defer initialization to fetchPageData where we can resolve the actual type.\n if (!this.#pivotInfo) {\n this.sortingStrategy = new OrderBySortingStrategy(this.apiName, this.#orderBy);\n }\n if (opts.autoFetchMore === true) {\n this.minResultsToLoad = Number.MAX_SAFE_INTEGER;\n } else if (typeof opts.autoFetchMore === \"number\") {\n this.minResultsToLoad = Math.max(0, opts.autoFetchMore);\n } else {\n this.minResultsToLoad = 0;\n }\n }\n get canonicalWhere() {\n return this.#whereClause;\n }\n get canonicalIntersectWith() {\n return this.#intersectWith;\n }\n get canonicalPivotInfo() {\n return this.#pivotInfo;\n }\n\n /**\n * Create the ObjectSet for this query.\n */\n\n /**\n * Implements fetchPageData from BaseCollectionQuery template method\n * Fetches a page of data\n */\n async fetchPageData(signal) {\n if (Object.keys(this.#orderBy).length > 0 && !(this.sortingStrategy instanceof OrderBySortingStrategy)) {\n const wireObjectSet = getWireObjectSet(this.#objectSet);\n const {\n resultType\n } = await getObjectTypesThatInvalidate(this.store.client[additionalContext], wireObjectSet);\n this.sortingStrategy = new OrderBySortingStrategy(resultType.apiName, this.#orderBy);\n }\n\n // Fetch the data with pagination\n const resp = await this.#objectSet.fetchPage({\n $nextPageToken: this.nextPageToken,\n $pageSize: this.options.pageSize,\n $includeRid: true,\n // For now this keeps the shared test code from falling apart\n // but shouldn't be needed ideally\n ...(Object.keys(this.#orderBy).length > 0 ? {\n $orderBy: this.#orderBy\n } : {})\n });\n if (signal?.aborted) {\n throw new Error(\"Aborted\");\n }\n this.nextPageToken = resp.nextPageToken;\n const fetchedData = await this.postProcessFetchedData(resp.data);\n return {\n ...resp,\n data: fetchedData\n };\n }\n\n /**\n * Handle fetch errors by setting appropriate error state and notifying subscribers\n */\n handleFetchError(error, _status, batch) {\n this.logger?.error(\"error\", error);\n this.store.subjects.get(this.cacheKey).error(error);\n\n // We don't call super.handleFetchError because ListQuery has special error handling\n // but we still use writeToStore to create a properly structured Entry\n const existingTotalCount = batch.read(this.cacheKey)?.value?.totalCount;\n return this.writeToStore({\n data: [],\n totalCount: existingTotalCount\n }, \"error\", batch);\n }\n\n /**\n * Will revalidate the list if its query is affected by invalidating the\n * apiName of the object type passed in.\n *\n * @param apiName to invalidate\n * @returns\n */\n\n /**\n * Postprocess fetched data.\n */\n\n invalidateObjectType = async (objectType, changes) => {\n if (this.apiName === objectType) {\n // Only invalidate lists for the matching apiName\n changes?.modified.add(this.cacheKey);\n return this.revalidate(true);\n }\n };\n\n /**\n * Note: This method is not async because I want it to return right after it\n * finishes the synchronous updates. The promise that is returned\n * will resolve after the revalidation is complete.\n * @param changes\n * @param optimisticId\n * @returns If revalidation is needed, a promise that resolves after the\n * revalidation is complete. Otherwise, undefined.\n */\n\n maybeUpdateAndRevalidate = (changes, optimisticId) => {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"maybeUpdateAndRevalidate\"\n }).debug(DEBUG_ONLY__changesToString(changes));\n this.logger?.child({\n methodName: \"maybeUpdateAndRevalidate\"\n }).debug(`Already in changes? ${changes.modified.has(this.cacheKey)}`);\n }\n if (changes.modified.has(this.cacheKey)) return;\n // mark ourselves as updated so we don't infinite recurse.\n changes.modified.add(this.cacheKey);\n try {\n const relevantObjects = this._extractAndCategorizeRelevantObjects(changes);\n\n // If we got purely strict matches we can just update the list and move\n // on with our lives. But if we got sorta matches, then we need to revalidate\n // the list so we preemptively set it to loading to avoid thrashing the store.\n const status = optimisticId || relevantObjects.added.sortaMatches.size > 0 || relevantObjects.modified.sortaMatches.size > 0 ? \"loading\" : \"loaded\";\n\n // while we only push updates for the strict matches, we still need to\n // trigger the list updating if some of our objects changed\n\n const newList = [];\n let needsRevalidation = false;\n this.store.batch({\n optimisticId,\n changes\n }, batch => {\n const existingList = new Set(batch.read(this.cacheKey)?.value?.data);\n const toAdd = new Set(\n // easy case. objects are new to the cache and they match this filter\n relevantObjects.added.strictMatches);\n\n // anything thats been deleted can be removed, so start there\n const toRemove = new Set(changes.deleted);\n\n // deal with the modified objects\n for (const obj of relevantObjects.modified.all) {\n if (relevantObjects.modified.strictMatches.has(obj)) {\n const objectCacheKey = this.getObjectCacheKey(obj);\n if (!existingList.has(objectCacheKey)) {\n // object is new to the list\n toAdd.add(obj);\n }\n continue;\n } else if (batch.optimisticWrite) {\n // we aren't removing objects in optimistic mode\n // we also don't want to trigger revalidation in optimistic mode\n // as it should be triggered when the optimistic job is done\n continue;\n } else {\n // object is no longer a strict match\n const existingObjectCacheKey = this.getObjectCacheKey(obj);\n toRemove.add(existingObjectCacheKey);\n if (relevantObjects.modified.sortaMatches.has(obj)) {\n // since it might still be in the list we need to revalidate\n needsRevalidation = true;\n }\n }\n }\n for (const key of existingList) {\n if (toRemove.has(key)) continue;\n newList.push(key);\n }\n for (const obj of toAdd) {\n newList.push(this.getObjectCacheKey(obj));\n }\n const existingTotalCount = batch.read(this.cacheKey)?.value?.totalCount;\n this._updateList(newList, status, batch, /* append */false, existingTotalCount);\n });\n if (needsRevalidation) {\n return this.revalidate(true);\n }\n return undefined;\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"maybeUpdateAndRevalidate\"\n }).debug(\"in finally\");\n }\n }\n };\n #matchType(obj) {\n // if its a strict match we can just insert it into place\n if (objectMatchesWhereClause(obj, this.#whereClause, true)) {\n return \"strict\";\n }\n // sorta match means it used a filter we cannot use on the frontend\n if (objectMatchesWhereClause(obj, this.#whereClause, false)) {\n return \"sorta\";\n }\n return false;\n }\n _extractAndCategorizeRelevantObjects(changes) {\n const relevantObjects = this.extractRelevantObjects(changes);\n\n // categorize\n for (const group of Object.values(relevantObjects)) {\n for (const obj of group.all ?? []) {\n const matchType = this.#matchType(obj);\n if (matchType) {\n group[`${matchType}Matches`].add(obj);\n }\n }\n }\n return relevantObjects;\n }\n\n /**\n * Extract relevant objects for this query type.\n */\n\n registerStreamUpdates(sub) {\n this.createWebsocketSubscription(this.#objectSet, sub, \"observeList\");\n }\n onOswChange({\n object: objOrIface,\n state\n }) {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"registerStreamUpdates\"\n }) : this.logger;\n if (process.env.NODE_ENV !== \"production\") {\n logger?.child({\n methodName: \"onChange\"\n }).debug(`Got an update of type: ${state}`, objOrIface);\n }\n if (state === \"ADDED_OR_UPDATED\") {\n const object = objOrIface.$apiName !== objOrIface.$objectType ? objOrIface.$as(objOrIface.$objectType) : objOrIface;\n this.store.batch({}, batch => {\n this.store.objects.storeOsdkInstances([object], batch, this.rdpConfig);\n });\n } else if (state === \"REMOVED\") {\n this.onOswRemoved(objOrIface);\n }\n }\n onOswRemoved(objOrIface) {\n const logger = process.env.NODE_ENV !== \"production\" ? this.logger?.child({\n methodName: \"onOswRemoved\"\n }) : this.logger;\n this.store.batch({}, batch => {\n // Read the truth layer (since not optimistic)\n const existing = batch.read(this.cacheKey);\n !existing ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"the truth value for our list should exist as we already subscribed\") : invariant(false) : void 0;\n if (existing.status === \"loaded\") {\n const objectCacheKey = this.getObjectCacheKey(objOrIface);\n // remove the object from the list\n const newObjects = existing.value?.data.filter(o => o !== objectCacheKey);\n\n // If the filter didn't change anything, then the list was already\n // updated (or didn't exist, which is nonsensical)\n if (newObjects?.length !== existing.value?.data.length) {\n batch.changes.registerList(this.cacheKey);\n const existingTotalCount = existing.value?.totalCount;\n batch.write(this.cacheKey, {\n data: newObjects ?? [],\n totalCount: existingTotalCount\n }, \"loaded\");\n // Should there be an else for this case? Do we need to invalidate\n // the paging tokens we may have? FIXME\n }\n return;\n }\n // There may be a tiny race here where OSW tells us the object has\n // been removed but an outstanding invalidation of this query is\n // about to return. In this case, its possible that we remove this item\n // from the list and then the returned list load re-adds it.\n // To avoid this, we will just force reload the query to be sure\n // we don't leave things in a bad state.\n if (process.env.NODE_ENV !== \"production\") {\n logger?.info(\"Removing an object from an object list that is in the middle of being loaded.\", existing);\n }\n this.revalidate(/* force */true).catch(e => {\n if (logger) {\n logger?.error(\"Uncaught error while revalidating list\", e);\n } else {\n // Make sure we write to the console if there is no logger!\n // eslint-disable-next-line no-console\n console.error(\"Uncaught error while revalidating list\", e);\n }\n });\n });\n }\n\n /**\n * Get cache key for object.\n */\n getObjectCacheKey(obj) {\n const pk = obj.$primaryKey;\n return this.cacheKeys.get(\"object\", obj.$objectType, pk, this.rdpConfig ?? undefined);\n }\n}\nexport function isListCacheKey(cacheKey) {\n return cacheKey.type === \"list\";\n}\n\n/**\n * Copied from @osdk/api\n */","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\n// Suppose we did an object set that is basically\n// A.where()\n// pivot(B).where()\n// pivot(C).where()\n// pivot(A).where()\n//\n// Any change to A needs to invalidate the chain because of the inner most A.\n//\n// But B.pivotTo(A) does not need all A's to invalidate the chain.\n//\n// For now we are keeping things conservative and just invalidating A either way,\n// but we can make this better.\n\nexport async function getObjectTypesThatInvalidate(mc, objectSet) {\n const counts = {};\n const resultType = await calcObjectSet(objectSet, {\n counts,\n methodInput: undefined,\n ontologyProvider: mc.ontologyProvider\n });\n\n // we need to uncount the final result type\n const tweaked = {\n ...counts,\n [resultType.apiName]: counts[resultType.apiName] - 1\n };\n return {\n resultType,\n counts,\n invalidationSet: new Set(Object.entries(tweaked).filter(([, v]) => v > 0).map(([k]) => k))\n };\n}\nasync function calcObjectSet(os, ctx) {\n const op = ctx.ontologyProvider;\n async function bumpObject(apiName) {\n const objectType = await op.getObjectDefinition(apiName);\n ctx.counts[apiName] = (ctx.counts[apiName] ?? 0) + 1;\n return objectType;\n }\n async function bumpInterface(apiName) {\n const interfaceDef = await op.getInterfaceDefinition(apiName);\n for (const s of interfaceDef.implementedBy ?? []) {\n ctx.counts[s] = (ctx.counts[s] ?? 0) + 1;\n }\n return interfaceDef;\n }\n switch (os.type) {\n case \"base\":\n return await bumpObject(os.objectType);\n case \"interfaceBase\":\n return await bumpInterface(os.interfaceType);\n case \"interfaceLinkSearchAround\":\n {\n const srcDef = await calcObjectSet(os.objectSet, ctx);\n !(srcDef.type === \"interface\") ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n for (const [k, v] of Object.entries(srcDef.links)) {\n if (k === os.interfaceLink) {\n if (v.targetType === \"object\") {\n return await bumpObject(v.targetType);\n }\n return await bumpInterface(v.targetType);\n }\n }\n\n // if we got here then we did not find the link and something is wrong.\n throw new Error(`Could not find link ${os.interfaceLink} in object set ${JSON.stringify(os.objectSet)}`);\n }\n case \"searchAround\":\n {\n const contextDef = await calcObjectSet(os.objectSet, ctx);\n !(contextDef.type === \"object\") ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n for (const [k, v] of Object.entries(contextDef.links)) {\n if (k === os.link) {\n return await bumpObject(v.targetType);\n }\n }\n\n // if we got here then we did not find the link and something is wrong.\n throw new Error(`Could not find link ${os.link} in object set ${JSON.stringify(os.objectSet)}`);\n }\n case \"filter\":\n // for the simple version of this, we can ignore the filter being based on any RDPs because\n // our RDP handling will ensure we invalidate based on those.\n return calcObjectSet(os.objectSet, ctx);\n case \"union\":\n case \"subtract\":\n case \"intersect\":\n // all of these entries need their counts to be merged as the max of each\n\n // suppose you have a simple `Union(A, A)`. We would end up with A:2\n // but we only need A:1.\n\n // suppose you have `Union(A->B, A->B)`. Now you end up with A:2, B:2,\n // but we only want A:1, B:1.\n\n // suppose you have `Union(A->B->A->B, A->B)`. Now you end up with A:3, B:2,\n // but we only want A:2, B:2.\n\n const returnTypes = await Promise.all(os.objectSets.map(async os => {\n const counts = {};\n const r = await calcObjectSet(os, {\n ...ctx,\n counts\n });\n return {\n r,\n counts\n };\n }));\n for (const {\n counts\n } of returnTypes) {\n for (const [k, v] of Object.entries(counts)) {\n ctx.counts[k] = Math.max(ctx.counts[k] ?? 0, v);\n }\n }\n if (returnTypes.length === 0) {\n throw new Error(`Could not find any context types for set operation`);\n }\n const allMatch = returnTypes.every(({\n r\n }) => r.apiName === returnTypes[0].r.apiName);\n if (!allMatch) {\n throw new Error(`Incompatible context types found for set operation`);\n }\n return returnTypes[0].r;\n case \"withProperties\":\n // Everything in an RDP chain needs to invalidate us for now\n for (const [, v] of Object.entries(os.derivedProperties)) {\n await calcRdp(v, {\n ...ctx,\n methodInput: os.objectSet\n });\n }\n return calcObjectSet(os.objectSet, {\n ...ctx,\n methodInput: os.objectSet\n });\n\n // used by rdps\n case \"methodInput\":\n !ctx.methodInput ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"methodInput must be provided\") : invariant(false) : void 0;\n\n // we only call this to get the context type, so we give it a new ctx\n // otherwise it will double count everything\n return await calcObjectSet(ctx.methodInput, {\n ...ctx,\n counts: {}\n });\n case \"asType\":\n // we don't currently support this anywhere.\n case \"asBaseObjectTypes\":\n // We don't currently support this because it could return multiple object types conceptually\n // internally, we actually use it this way but we shouldn't be finding that object sets.\n case \"reference\":\n // reference is particularly problematic because we cannot answer the question about\n // which types without loading the object set definition (and it can change).\n case \"static\":\n // static is also a problem as we cannot know what the types are without loading them\n throw new Error(`Unsupported ObjectSet type ${os.type}`);\n case \"nearestNeighbors\":\n return calcObjectSet(os.objectSet, ctx);\n default:\n throw new Error(`Unhandled ObjectSet type ${os.type}`);\n }\n}\nasync function calcRdp(dpd, ctx) {\n switch (dpd.type) {\n // Operates on object sets\n case \"selection\":\n return await calcObjectSet(dpd.objectSet, ctx);\n\n // Operates on single property\n case \"negate\":\n case \"extract\":\n case \"absoluteValue\":\n return await calcRdp(dpd.property, ctx);\n\n // Operates on many (unordered) properties\n case \"least\":\n case \"greatest\":\n case \"add\":\n case \"multiply\":\n return await Promise.all(dpd.properties.map(innerDpd => calcRdp(innerDpd, ctx)));\n\n // Operates on 2 ordered properties\n case \"subtract\":\n case \"divide\":\n return await Promise.all([calcRdp(dpd.left, ctx), calcRdp(dpd.right, ctx)]);\n\n // Operates on a single property name\n case \"property\":\n // noop\n return;\n default:\n throw new Error(`Unhandled DerivedPropertyDefinition type ${dpd.type}`);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport deepEqual from \"fast-deep-equal\";\nimport invariant from \"tiny-invariant\";\nimport { evaluateFilter } from \"./evaluateFilter.js\";\nfunction is$and(whereClause) {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$and\" in whereClause) {\n !Array.isArray(whereClause.$and) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected $and to be an array\") : invariant(false) : void 0;\n !(Object.keys(whereClause).length === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected only $and to be present\") : invariant(false) : void 0;\n }\n }\n return \"$and\" in whereClause;\n}\nfunction is$or(whereClause) {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$or\" in whereClause) {\n !Array.isArray(whereClause.$or) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected $or to be an array\") : invariant(false) : void 0;\n !(Object.keys(whereClause).length === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected only $or to be present\") : invariant(false) : void 0;\n }\n }\n return \"$or\" in whereClause;\n}\nfunction is$not(whereClause) {\n if (process.env.NODE_ENV !== \"production\") {\n if (\"$not\" in whereClause) {\n !(Object.keys(whereClause).length === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"expected only $not to be present\") : invariant(false) : void 0;\n }\n }\n return \"$not\" in whereClause;\n}\nexport function objectSortaMatchesWhereClause(o, whereClause, strict) {\n if (deepEqual({}, whereClause)) {\n return true;\n }\n if (is$and(whereClause)) {\n return whereClause.$and.every(w => objectSortaMatchesWhereClause(o, w, strict));\n }\n if (is$or(whereClause)) {\n return whereClause.$or.some(w => objectSortaMatchesWhereClause(o, w, strict));\n }\n if (is$not(whereClause)) {\n return !objectSortaMatchesWhereClause(o, whereClause.$not, strict);\n }\n return Object.entries(whereClause).every(([key, filter]) => {\n if (typeof filter === \"object\" && filter != null) {\n const realValue = o[key];\n const [f] = Object.keys(filter);\n const expected = filter[f];\n return evaluateFilter(f, realValue, expected, strict);\n }\n if (key in o) {\n if (o[key] === filter) {\n return true;\n }\n }\n return false;\n });\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\n\n/**\n * Evaluates a where clause filter against a value.\n * This is a runtime evaluation function that handles different property types.\n */\nexport function evaluateFilter(f, realValue, expected, strict) {\n switch (f) {\n case \"$eq\":\n return realValue === expected;\n case \"$gt\":\n return realValue > expected;\n case \"$lt\":\n return realValue < expected;\n case \"$gte\":\n return realValue >= expected;\n case \"$lte\":\n return realValue <= expected;\n case \"$ne\":\n return realValue !== expected;\n case \"$in\":\n return Array.isArray(expected) && expected.includes(realValue);\n case \"$isNull\":\n return realValue == null;\n case \"$startsWith\":\n return realValue.startsWith(expected);\n case \"$contains\":\n case \"$containsAllTerms\":\n case \"$containsAllTermsInOrder\":\n case \"$containsAnyTerm\":\n case \"$intersects\":\n case \"$within\":\n // for these we will strictly say no and loosely say yes\n // so that they don't change things now but may if reloaded\n return !strict;\n default:\n // same thing here as the above cases but we will catch the\n // exhaustive check in dev\n if (process.env.NODE_ENV !== \"production\") {\n const exhaustive = f;\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unknown where filter ${f}`) : invariant(false) : void 0;\n }\n return !strict;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { additionalContext } from \"../../../Client.js\";\nimport { API_NAME_IDX, INTERSECT_IDX, ListQuery, PIVOT_IDX, RDP_IDX, RIDS_IDX } from \"./ListQuery.js\";\nexport class ObjectListQuery extends ListQuery {\n createObjectSet(store) {\n const rdpConfig = this.cacheKey.otherKeys[RDP_IDX];\n const intersectWith = this.cacheKey.otherKeys[INTERSECT_IDX];\n const pivotInfo = this.cacheKey.otherKeys[PIVOT_IDX];\n const rids = this.cacheKey.otherKeys[RIDS_IDX];\n const clientCtx = store.client[additionalContext];\n const typeDefinition = {\n type: \"object\",\n apiName: this.apiName\n };\n if (pivotInfo != null) {\n let sourceSet = store.client({\n type: \"object\",\n apiName: pivotInfo.sourceType\n });\n\n // Filter source objects before pivoting to linked objects\n sourceSet = sourceSet.where(this.canonicalWhere);\n let objectSet = sourceSet.pivotTo(pivotInfo.linkName);\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(rdpConfig);\n }\n if (intersectWith != null && intersectWith.length > 0) {\n const intersectSets = intersectWith.map(whereClause => {\n let intersectSet = store.client({\n type: \"object\",\n apiName: pivotInfo.targetType\n });\n if (rdpConfig != null) {\n intersectSet = intersectSet.withProperties(rdpConfig);\n }\n return intersectSet.where(whereClause);\n });\n objectSet = objectSet.intersect(...intersectSets);\n }\n return objectSet;\n }\n\n // Start with either a static objectset (for RIDs) or a base objectset\n let objectSet;\n if (rids != null) {\n objectSet = clientCtx.objectSetFactory(typeDefinition, clientCtx, {\n type: \"static\",\n objects: [...rids]\n });\n } else {\n objectSet = store.client(typeDefinition);\n }\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(rdpConfig);\n }\n objectSet = objectSet.where(this.canonicalWhere);\n if (intersectWith != null && intersectWith.length > 0) {\n const intersectSets = intersectWith.map(whereClause => {\n let intersectSet = store.client({\n type: \"object\",\n apiName: this.apiName\n });\n if (rdpConfig != null) {\n intersectSet = intersectSet.withProperties(rdpConfig);\n }\n return intersectSet.where(whereClause);\n });\n objectSet = objectSet.intersect(...intersectSets);\n }\n return objectSet;\n }\n async revalidateObjectType(apiName) {\n if (this.apiName === apiName) {\n await this.revalidate(/* force */true);\n }\n }\n postProcessFetchedData(data) {\n return Promise.resolve(data);\n }\n extractRelevantObjects(changes) {\n return {\n added: {\n all: changes.addedObjects.get(this.cacheKey.otherKeys[API_NAME_IDX]) ?? [],\n strictMatches: new Set(),\n sortaMatches: new Set()\n },\n modified: {\n all: changes.modifiedObjects.get(this.cacheKey.otherKeys[API_NAME_IDX]) ?? [],\n strictMatches: new Set(),\n sortaMatches: new Set()\n }\n };\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Index constants for accessing otherKeys array elements\nexport const API_NAME_IDX = 0;\nexport const PK_IDX = 1;\nexport const RDP_CONFIG_IDX = 2;","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { extractRdpFieldNames } from \"../utils/rdpFieldOperations.js\";\n/**\n * Registry that tracks relationships between object cache keys with different RDP configurations.\n * This ensures we propagate updates across all \"variants\" of the same object.\n */\nexport class ObjectCacheKeyRegistry {\n /**\n * Map from base key (apiName:primaryKey) to all related cache key variants and metadata\n */\n baseToVariants = new Map();\n\n /**\n * Metadata for each cache key (apiName, primaryKey, rdpConfig)\n */\n keyMetadata = new WeakMap();\n\n /**\n * Register a cache key variant for an object\n */\n register(cacheKey, apiName, primaryKey, rdpConfig) {\n const baseKey = this.makeBaseKey(apiName, primaryKey);\n const primaryKeyStr = String(primaryKey);\n this.keyMetadata.set(cacheKey, {\n apiName,\n primaryKey: primaryKeyStr,\n rdpConfig,\n rdpFieldSet: rdpConfig ? extractRdpFieldNames(rdpConfig) : undefined\n });\n let entry = this.baseToVariants.get(baseKey);\n if (!entry) {\n entry = {\n variants: new Set(),\n apiName,\n primaryKey: primaryKeyStr\n };\n this.baseToVariants.set(baseKey, entry);\n }\n entry.variants.add(cacheKey);\n }\n\n /**\n * Get all variant cache keys for a specific object\n */\n getVariants(apiName, primaryKey) {\n const baseKey = this.makeBaseKey(apiName, primaryKey);\n const entry = this.baseToVariants.get(baseKey);\n return new Set(entry?.variants ?? []);\n }\n\n /**\n * Unregister a cache key when it's being cleaned up\n */\n unregister(cacheKey) {\n const metadata = this.keyMetadata.get(cacheKey);\n if (!metadata) return;\n const baseKey = this.makeBaseKey(metadata.apiName, metadata.primaryKey);\n const entry = this.baseToVariants.get(baseKey);\n if (entry) {\n entry.variants.delete(cacheKey);\n if (entry.variants.size === 0) {\n this.baseToVariants.delete(baseKey);\n }\n }\n this.keyMetadata.delete(cacheKey);\n }\n\n /**\n * Get metadata for a cache key\n */\n getMetadata(cacheKey) {\n return this.keyMetadata.get(cacheKey);\n }\n\n /**\n * Get the count of variants for a specific object\n */\n getVariantCount(apiName, primaryKey) {\n const baseKey = this.makeBaseKey(apiName, primaryKey);\n return this.baseToVariants.get(baseKey)?.variants.size ?? 0;\n }\n\n /**\n * Generate a base key from apiName and primaryKey\n */\n makeBaseKey(apiName, primaryKey) {\n return `${apiName}:${primaryKey}`;\n }\n\n /**\n * Check if a cache key has RDP configuration\n */\n hasRdpConfig(cacheKey) {\n return this.keyMetadata.get(cacheKey)?.rdpConfig != null;\n }\n\n /**\n * Get the RDP configuration for a cache key\n */\n getRdpConfig(cacheKey) {\n return this.keyMetadata.get(cacheKey)?.rdpConfig;\n }\n\n /**\n * Get the cached RDP field set for a cache key\n */\n getRdpFieldSet(cacheKey) {\n return this.keyMetadata.get(cacheKey)?.rdpFieldSet ?? new Set();\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createOsdkObject } from \"../../../object/convertWireToOsdkObjects/createOsdkObject.js\";\nimport { ClientRef, ObjectDefRef, UnderlyingOsdkObject } from \"../../../object/convertWireToOsdkObjects/InternalSymbols.js\";\nexport function extractRdpFieldNames(rdpConfig) {\n if (!rdpConfig) {\n return new Set();\n }\n return new Set(Object.keys(rdpConfig));\n}\nfunction stripRdpFields(value, rdpFields) {\n if (rdpFields.size === 0) {\n return value;\n }\n const underlying = value[UnderlyingOsdkObject];\n const objectDef = value[ObjectDefRef];\n const newProps = {\n $apiName: underlying.$apiName,\n $objectType: underlying.$objectType,\n $primaryKey: underlying.$primaryKey,\n $title: underlying.$title,\n $rid: underlying.$rid\n };\n for (const key of Object.keys(underlying)) {\n if (key in objectDef.properties && !rdpFields.has(key)) {\n newProps[key] = underlying[key];\n }\n }\n return createOsdkObject(value[ClientRef], objectDef, newProps);\n}\nfunction isSuperset(superset, subset) {\n for (const field of subset) {\n if (!superset.has(field)) {\n return false;\n }\n }\n return true;\n}\nfunction filterToRdpFields(value, rdpFieldsToKeep, sourceRdpFields) {\n const underlying = value[UnderlyingOsdkObject];\n const objectDef = value[ObjectDefRef];\n const newProps = {\n $apiName: underlying.$apiName,\n $objectType: underlying.$objectType,\n $primaryKey: underlying.$primaryKey,\n $title: underlying.$title,\n $rid: underlying.$rid\n };\n for (const key of Object.keys(underlying)) {\n if (key in objectDef.properties) {\n const isRdpField = sourceRdpFields.has(key);\n if (!isRdpField || rdpFieldsToKeep.has(key)) {\n newProps[key] = underlying[key];\n }\n }\n }\n return createOsdkObject(value[ClientRef], objectDef, newProps);\n}\nexport function mergeObjectFields(sourceValue, sourceRdpFields, targetRdpFields, targetCurrentValue) {\n if (targetRdpFields.size === 0) {\n return stripRdpFields(sourceValue, sourceRdpFields);\n }\n if (isSuperset(sourceRdpFields, targetRdpFields)) {\n if (sourceRdpFields.size === targetRdpFields.size) {\n return sourceValue;\n }\n return filterToRdpFields(sourceValue, targetRdpFields, sourceRdpFields);\n }\n const sourceUnderlying = sourceValue[UnderlyingOsdkObject];\n const objectDef = sourceValue[ObjectDefRef];\n const newProps = {\n $apiName: sourceUnderlying.$apiName,\n $objectType: sourceUnderlying.$objectType,\n $primaryKey: sourceUnderlying.$primaryKey,\n $title: sourceUnderlying.$title,\n $rid: sourceUnderlying.$rid\n };\n for (const key of Object.keys(sourceUnderlying)) {\n if (key in objectDef.properties && (!sourceRdpFields.has(key) || targetRdpFields.has(key))) {\n newProps[key] = sourceUnderlying[key];\n }\n }\n if (targetCurrentValue) {\n const targetUnderlying = targetCurrentValue[UnderlyingOsdkObject];\n for (const field of targetRdpFields) {\n if (!sourceRdpFields.has(field) && field in targetUnderlying) {\n newProps[field] = targetUnderlying[field];\n }\n }\n }\n return createOsdkObject(sourceValue[ClientRef], objectDef, newProps);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport deepEqual from \"fast-deep-equal\";\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { tombstone } from \"../tombstone.js\";\nimport { mergeObjectFields } from \"../utils/rdpFieldOperations.js\";\nimport { ObjectQuery } from \"./ObjectQuery.js\";\nexport class ObjectsHelper extends AbstractHelper {\n observe(options, subFn) {\n return super.observe(options, subFn);\n }\n getQuery(options, rdpConfig) {\n const apiName = typeof options.apiName === \"string\" ? options.apiName : options.apiName.apiName;\n const {\n pk\n } = options;\n const objectCacheKey = this.cacheKeys.get(\"object\", apiName, pk, rdpConfig ?? undefined);\n return this.store.queries.get(objectCacheKey, () => new ObjectQuery(this.store, this.store.subjects.get(objectCacheKey), apiName, pk, objectCacheKey, {\n dedupeInterval: 0\n }));\n }\n\n /**\n * Internal helper method for writing objects to the store and returning their\n * object keys. For list queries with RDPs, the rdpConfig is included in the\n * cache key to ensure proper data isolation.\n * @internal\n */\n storeOsdkInstances(values, batch, rdpConfig) {\n return values.map(v => this.getQuery({\n apiName: v.$objectType ?? v.$apiName,\n pk: v.$primaryKey\n }, rdpConfig).writeToStore(v, \"loaded\", batch).cacheKey);\n }\n\n /**\n * Write an object to cache and propagate to all related cache keys\n * @internal\n */\n propagateWrite(sourceCacheKey, value, status, batch) {\n const existing = batch.read(sourceCacheKey);\n const dataChanged = !existing || existing.value === undefined || value === tombstone || !deepEqual(existing.value, value);\n const statusChanged = !existing || existing.status !== status;\n if (!dataChanged && !statusChanged) {\n return;\n }\n const valueToWrite = !dataChanged && existing ? existing.value : value;\n batch.write(sourceCacheKey, valueToWrite, status);\n if (value !== tombstone) {\n batch.changes.registerObject(sourceCacheKey, value, !existing);\n }\n const metadata = this.store.objectCacheKeyRegistry.getMetadata(sourceCacheKey);\n const relatedKeys = metadata ? this.store.objectCacheKeyRegistry.getVariants(metadata.apiName, metadata.primaryKey) : new Set([sourceCacheKey]);\n for (const targetKey of relatedKeys) {\n if (targetKey === sourceCacheKey || !this.isKeyActive(targetKey)) {\n continue;\n }\n if (value === tombstone) {\n batch.write(targetKey, tombstone, status);\n continue;\n }\n const targetCurrentValue = batch.read(targetKey)?.value;\n const merged = this.mergeForTarget(value, targetCurrentValue && this.isObjectHolder(targetCurrentValue) ? targetCurrentValue : undefined, sourceCacheKey, targetKey);\n batch.write(targetKey, merged, status);\n }\n }\n\n /**\n * Check if a cache key is actively observed\n */\n isKeyActive(key) {\n const subject = this.store.subjects.peek(key);\n return subject?.observed === true;\n }\n\n /**\n * Type guard to check if a value is an ObjectHolder\n */\n isObjectHolder(value) {\n return value != null && typeof value === \"object\" && \"$apiName\" in value && \"$primaryKey\" in value;\n }\n\n /**\n * Merge object data for a specific target cache key, preserving RDP fields\n */\n mergeForTarget(sourceValue, targetCurrentValue, sourceCacheKey, targetCacheKey) {\n const sourceRdpFields = this.store.objectCacheKeyRegistry.getRdpFieldSet(sourceCacheKey);\n const targetRdpFields = this.store.objectCacheKeyRegistry.getRdpFieldSet(targetCacheKey);\n return mergeObjectFields(sourceValue, sourceRdpFields, targetRdpFields, targetCurrentValue);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BehaviorSubject, connectable, map } from \"rxjs\";\nimport { additionalContext } from \"../../../Client.js\";\nimport { getBulkObjectLoader } from \"../BulkObjectLoader.js\";\nimport { Query } from \"../Query.js\";\nimport { tombstone } from \"../tombstone.js\";\nimport { RDP_CONFIG_IDX } from \"./ObjectCacheKey.js\";\nexport class ObjectQuery extends Query {\n #apiName;\n #pk;\n constructor(store, subject, type, pk, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `ObjectQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n this.#apiName = type;\n this.#pk = pk;\n }\n _createConnectable(subject) {\n return connectable(subject.pipe(map(x => {\n return {\n status: x.status,\n object: x.value,\n lastUpdated: x.lastUpdated,\n isOptimistic: x.isOptimistic\n };\n })), {\n connector: () => new BehaviorSubject({\n status: \"init\",\n object: undefined,\n lastUpdated: 0,\n isOptimistic: false\n })\n });\n }\n async _fetchAndStore() {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({\n methodName: \"_fetchAndStore\"\n }).debug(\"calling _fetchAndStore\");\n }\n\n // TODO: In the future, implement tracking of network requests to ensure\n // we're not making unnecessary network calls. This would need dedicated\n // tests separate from subscription notification tests.\n\n const rdpConfig = this.cacheKey.otherKeys[RDP_CONFIG_IDX];\n let obj;\n if (rdpConfig) {\n const miniDef = {\n type: \"object\",\n apiName: this.#apiName\n };\n const fetched = await this.store.client(miniDef).withProperties(rdpConfig).fetchOne(this.#pk, {\n $includeRid: true\n });\n obj = fetched;\n } else {\n // Use batched loader for non-RDP objects (efficient batching)\n obj = await getBulkObjectLoader(this.store.client).fetch(this.#apiName, this.#pk);\n }\n this.store.batch({}, batch => {\n this.writeToStore(obj, \"loaded\", batch);\n });\n }\n writeToStore(data, status, batch) {\n const entry = batch.read(this.cacheKey);\n const rdpConfig = this.cacheKey.otherKeys[RDP_CONFIG_IDX];\n this.store.objectCacheKeyRegistry.register(this.cacheKey, this.#apiName, this.#pk, rdpConfig);\n this.store.objects.propagateWrite(this.cacheKey, data, status, batch);\n return batch.read(this.cacheKey);\n }\n deleteFromStore(status, batch) {\n const rdpConfig = this.cacheKey.otherKeys[RDP_CONFIG_IDX];\n this.store.objectCacheKeyRegistry.register(this.cacheKey, this.#apiName, this.#pk, rdpConfig);\n this.store.objects.propagateWrite(this.cacheKey, tombstone, status, batch);\n return batch.read(this.cacheKey);\n }\n invalidateObjectType = (objectType, changes) => {\n if (this.#apiName === objectType) {\n changes?.modified.add(this.cacheKey);\n return this.revalidate(true);\n }\n return Promise.resolve();\n };\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PalantirApiError } from \"@osdk/shared.net.errors\";\nimport { DefaultMap, DefaultWeakMap } from \"mnemonist\";\nimport pDefer from \"p-defer\";\nimport { additionalContext } from \"../../Client.js\";\nconst weakCache = new DefaultWeakMap(c => new BulkObjectLoader(c));\nexport function getBulkObjectLoader(client) {\n return weakCache.get(client);\n}\nexport class BulkObjectLoader {\n #client;\n #m = new DefaultMap(() => ({\n data: [],\n timer: undefined\n }));\n #logger;\n #maxWait;\n #maxEntries;\n constructor(client, maxWait = 25, maxEntries = 100) {\n this.#client = client;\n this.#logger = client[additionalContext].logger;\n this.#maxWait = maxWait;\n this.#maxEntries = maxEntries;\n }\n async fetch(apiName, primaryKey) {\n const deferred = pDefer();\n const entry = this.#m.get(apiName);\n entry.data.push({\n primaryKey: primaryKey,\n deferred\n });\n if (!entry.timer) {\n entry.timer = setTimeout(() => {\n this.#loadObjects(apiName, entry.data);\n }, this.#maxWait);\n }\n if (entry.data.length >= this.#maxEntries) {\n clearTimeout(entry.timer);\n this.#loadObjects(apiName, entry.data);\n }\n return await deferred.promise;\n }\n #loadObjects(apiName, arr) {\n this.#m.delete(apiName);\n this.#reallyLoadObjects(apiName, arr).catch(e => {\n this.#logger?.error(\"Unhandled exception\", e);\n });\n }\n async #reallyLoadObjects(apiName, arr) {\n const miniDef = {\n type: \"object\",\n apiName\n };\n const objMetadata = await this.#client.fetchMetadata(miniDef);\n const pks = arr.map(x => x.primaryKey);\n\n // Use $eq for single object fetches (this is for public app compatibility)\n // Use $in for batch fetches\n const whereClause = pks.length === 1 ? {\n [objMetadata.primaryKeyApiName]: {\n $eq: pks[0]\n }\n } : {\n [objMetadata.primaryKeyApiName]: {\n $in: pks\n }\n };\n const {\n data\n } = await this.#client(miniDef).where(whereClause).fetchPage({\n $pageSize: pks.length,\n $includeRid: true\n });\n for (const {\n primaryKey,\n deferred\n } of arr) {\n const object = data.find(x => x.$primaryKey === primaryKey);\n if (object) {\n deferred.resolve(object);\n } else {\n deferred.reject(new PalantirApiError(`Object not found: ${primaryKey}`));\n }\n }\n }\n}","export default function pDefer() {\n const deferred = {};\n deferred.promise = new Promise((resolve, reject) => {\n deferred.resolve = resolve;\n deferred.reject = reject;\n });\n return deferred;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getWireObjectSet } from \"../../../objectSet/createObjectSet.js\";\nimport { AbstractHelper } from \"../AbstractHelper.js\";\nimport { ObjectSetQuery } from \"./ObjectSetQuery.js\";\nexport class ObjectSetHelper extends AbstractHelper {\n constructor(store, cacheKeys, whereCanonicalizer, orderByCanonicalizer) {\n super(store, cacheKeys);\n this.whereCanonicalizer = whereCanonicalizer;\n this.orderByCanonicalizer = orderByCanonicalizer;\n }\n observe(options, subFn) {\n const ret = super.observe(options, subFn);\n if (options.streamUpdates) {\n ret.query.registerStreamUpdates(ret.subscription);\n }\n return ret;\n }\n getQuery(options) {\n const {\n baseObjectSet\n } = options;\n const baseObjectSetWire = JSON.stringify(getWireObjectSet(baseObjectSet));\n const operations = this.buildCanonicalizedOperations(options);\n const objectSetCacheKey = this.cacheKeys.get(\"objectSet\", baseObjectSetWire, operations);\n return this.store.queries.get(objectSetCacheKey, () => {\n return new ObjectSetQuery(this.store, this.store.subjects.get(objectSetCacheKey), baseObjectSetWire, operations, objectSetCacheKey, options);\n });\n }\n buildCanonicalizedOperations(options) {\n const operations = {};\n if (options.where) {\n operations.where = this.whereCanonicalizer.canonicalize(options.where);\n }\n if (options.withProperties) {\n operations.withProperties = Object.keys(options.withProperties).sort();\n }\n if (options.union && options.union.length > 0) {\n operations.union = options.union.map(os => JSON.stringify(getWireObjectSet(os)));\n }\n if (options.intersect && options.intersect.length > 0) {\n operations.intersect = options.intersect.map(os => JSON.stringify(getWireObjectSet(os)));\n }\n if (options.subtract && options.subtract.length > 0) {\n operations.subtract = options.subtract.map(os => JSON.stringify(getWireObjectSet(os)));\n }\n if (options.pivotTo) {\n operations.pivotTo = options.pivotTo;\n }\n if (options.orderBy) {\n operations.orderBy = this.orderByCanonicalizer.canonicalize(options.orderBy);\n }\n if (options.pageSize) {\n operations.pageSize = options.pageSize;\n }\n return operations;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { additionalContext } from \"../../../Client.js\";\nimport { getWireObjectSet } from \"../../../objectSet/createObjectSet.js\";\nimport { BaseListQuery } from \"../base-list/BaseListQuery.js\";\nimport { getObjectTypesThatInvalidate } from \"../getObjectTypesThatInvalidate.js\";\nimport { OrderBySortingStrategy } from \"../sorting/SortingStrategy.js\";\nexport class ObjectSetQuery extends BaseListQuery {\n #baseObjectSetWire;\n #operations;\n #composedObjectSet;\n #objectTypes;\n constructor(store, subject, baseObjectSetWire, operations, cacheKey, opts) {\n super(store, subject, opts, cacheKey, process.env.NODE_ENV !== \"production\" ? store.client[additionalContext].logger?.child({}, {\n msgPrefix: `ObjectSetQuery<${cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")}>`\n }) : undefined);\n this.#baseObjectSetWire = baseObjectSetWire;\n this.#operations = operations;\n this.#composedObjectSet = this.#composeObjectSet(opts);\n this.#objectTypes = this.#extractObjectTypes(opts);\n if (opts.autoFetchMore === true) {\n this.minResultsToLoad = Number.MAX_SAFE_INTEGER;\n } else if (typeof opts.autoFetchMore === \"number\") {\n this.minResultsToLoad = Math.max(0, opts.autoFetchMore);\n } else {\n this.minResultsToLoad = opts.pageSize || 0;\n }\n }\n #composeObjectSet(opts) {\n let result = opts.baseObjectSet;\n if (opts.withProperties) {\n result = result.withProperties(opts.withProperties);\n }\n if (opts.where) {\n result = result.where(opts.where);\n }\n if (opts.union && opts.union.length > 0) {\n result = result.union(...opts.union);\n }\n if (opts.intersect && opts.intersect.length > 0) {\n result = result.intersect(...opts.intersect);\n }\n if (opts.subtract && opts.subtract.length > 0) {\n result = result.subtract(...opts.subtract);\n }\n if (opts.pivotTo) {\n result = result.pivotTo(opts.pivotTo);\n }\n return result;\n }\n #extractObjectTypes(opts) {\n const types = new Set();\n const baseWire = JSON.parse(this.#baseObjectSetWire);\n if (baseWire.type) {\n types.add(baseWire.type);\n }\n if (opts.union) {\n for (const os of opts.union) {\n const wire = getWireObjectSet(os);\n if (wire.type) {\n types.add(wire.type);\n }\n }\n }\n if (opts.intersect) {\n for (const os of opts.intersect) {\n const wire = getWireObjectSet(os);\n if (wire.type) {\n types.add(wire.type);\n }\n }\n }\n if (opts.subtract) {\n for (const os of opts.subtract) {\n const wire = getWireObjectSet(os);\n if (wire.type) {\n types.add(wire.type);\n }\n }\n }\n return types;\n }\n\n /**\n * Register changes to the cache specific to ObjectSetQuery\n */\n registerCacheChanges(batch) {\n batch.changes.registerObjectSet(this.cacheKey);\n }\n\n /**\n * Implements fetchPageData from BaseListQuery template method\n * Fetches a page of data from the composed ObjectSet\n */\n async fetchPageData(signal) {\n if (this.#operations.orderBy && Object.keys(this.#operations.orderBy).length > 0 && !(this.sortingStrategy instanceof OrderBySortingStrategy)) {\n const wireObjectSet = getWireObjectSet(this.#composedObjectSet);\n const {\n resultType\n } = await getObjectTypesThatInvalidate(this.store.client[additionalContext], wireObjectSet);\n this.sortingStrategy = new OrderBySortingStrategy(resultType.apiName, this.#operations.orderBy);\n }\n\n // Fetch the data with pagination\n const resp = await this.#composedObjectSet.fetchPage({\n $nextPageToken: this.nextPageToken,\n $pageSize: this.options.pageSize,\n $includeRid: true,\n // OrderBy is already applied in the composed ObjectSet\n ...(this.#operations.orderBy && Object.keys(this.#operations.orderBy).length > 0 ? {\n $orderBy: this.#operations.orderBy\n } : {})\n });\n if (signal?.aborted) {\n throw new Error(\"Aborted\");\n }\n this.nextPageToken = resp.nextPageToken;\n return resp;\n }\n handleFetchError(error, _status, batch) {\n this.logger?.error(\"error\", error);\n this.store.subjects.get(this.cacheKey).error(error);\n const existingTotalCount = batch.read(this.cacheKey)?.value?.totalCount;\n return this.writeToStore({\n data: [],\n totalCount: existingTotalCount\n }, \"error\", batch);\n }\n registerStreamUpdates(sub) {\n this.createWebsocketSubscription(this.#composedObjectSet, sub, \"observeObjectSet\");\n }\n invalidateObjectType = async (objectType, changes) => {\n if (this.#objectTypes.has(objectType)) {\n changes?.modified.add(this.cacheKey);\n return this.revalidate(true);\n }\n return Promise.resolve();\n };\n createPayload(params) {\n return {\n resolvedList: params.resolvedData,\n isOptimistic: params.isOptimistic,\n fetchMore: this.fetchMore,\n hasMore: this.nextPageToken != null,\n status: params.status,\n lastUpdated: params.lastUpdated,\n objectSet: this.#composedObjectSet,\n totalCount: params.totalCount\n };\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class PivotCanonicalizer {\n #cache = new Map();\n canonicalize(sourceType, linkName) {\n const key = `${sourceType}::${linkName}`;\n let canonical = this.#cache.get(key);\n if (!canonical) {\n canonical = {\n sourceType,\n linkName,\n targetType: \"<targetType>\"\n };\n this.#cache.set(key, canonical);\n }\n return canonical;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class Queries {\n // we can use a regular Map here because the refCounting will\n // handle cleanup.\n map = new Map();\n peek(cacheKey) {\n return this.map.get(cacheKey);\n }\n get(cacheKey, createQuery) {\n let query = this.peek(cacheKey);\n if (!query) {\n query = createQuery();\n this.map.set(cacheKey, query);\n }\n return query;\n }\n keys() {\n return this.map.keys();\n }\n delete(cacheKey) {\n this.map.get(cacheKey)?.dispose();\n this.map.delete(cacheKey);\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createWithPropertiesObjectSet } from \"../../derivedProperties/createWithPropertiesObjectSet.js\";\nimport { CachingCanonicalizer } from \"./Canonicalizer.js\";\nexport class RdpCanonicalizer extends CachingCanonicalizer {\n structuralCache = new Map();\n lookupOrCreate(rdp) {\n // Map from builder result symbols to their definitions\n const definitionMap = new Map();\n const computedProperties = {};\n\n // Create a wrapper holding object type for the builder to let us extract the definition structure\n const objectTypeHolder = {\n type: \"object\",\n apiName: \"__rdp_canonicalizer_holder__\"\n };\n for (const [key, rdpFunction] of Object.entries(rdp)) {\n const builder = createWithPropertiesObjectSet(objectTypeHolder, {\n type: \"methodInput\"\n }, definitionMap, /* fromBaseObjectSet */true);\n const result = rdpFunction(builder);\n const definition = definitionMap.get(result);\n if (definition) {\n computedProperties[key] = definition;\n }\n }\n\n // Sort entries by key for consistent ordering\n const sortedKeys = Object.keys(computedProperties).sort();\n\n // Create a serialized key for the computed definitions\n const sortedDefinitions = {};\n for (const key of sortedKeys) {\n sortedDefinitions[key] = computedProperties[key];\n }\n const definitionsKey = JSON.stringify(sortedDefinitions);\n\n // Check if we already have a canonical RDP for these definitions\n let canonical = this.structuralCache.get(definitionsKey);\n if (!canonical) {\n // Create a canonical RDP object with sorted keys\n const sortedRdp = {};\n for (const key of Object.keys(rdp).sort()) {\n sortedRdp[key] = rdp[key];\n }\n canonical = sortedRdp;\n this.structuralCache.set(definitionsKey, canonical);\n }\n return canonical;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class RidListCanonicalizer {\n cache = new Map();\n canonicalize(rids) {\n const sorted = [...new Set(rids)].sort();\n const key = sorted.join(\"\\0\");\n let canonical = this.cache.get(key);\n if (!canonical) {\n canonical = sorted;\n this.cache.set(key, canonical);\n }\n return canonical;\n }\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function getMetaTagContent(name) {\n const element = document.querySelector(`meta[name=\"${name}\"]`);\n const val = element ? element.getAttribute(\"content\") : null;\n if (val == null) {\n throw new Error(`Missing meta tag: ${name}`);\n }\n return val;\n}\nfunction getViteEnvVar(name) {\n const val = import.meta.env[name];\n if (val == null) {\n throw new Error(`Missing environment variable: ${name}`);\n }\n return val;\n}\nfunction isProduction() {\n return process.env.NODE_ENV === \"production\";\n}\nfunction getConfigValue(metaTagName, viteEnvVarName) {\n return isProduction() ? getMetaTagContent(metaTagName) : getViteEnvVar(viteEnvVarName);\n}\nfunction getOntologyRid(ontologyRid) {\n return isProduction() ? getMetaTagContent(\"osdk-ontologyRid\") : ontologyRid;\n}\nexport function getOsdkConfig(ontologyRid) {\n return {\n clientId: getConfigValue(\"osdk-clientId\", \"VITE_FOUNDRY_CLIENT_ID\"),\n redirectUrl: getConfigValue(\"osdk-redirectUrl\", \"VITE_FOUNDRY_REDIRECT_URL\"),\n foundryUrl: getConfigValue(\"osdk-foundryUrl\", \"VITE_FOUNDRY_API_URL\"),\n ontologyRid: getOntologyRid(ontologyRid)\n };\n}"]}
|