@osdk/client 2.5.0-beta.1 → 2.5.0-beta.2
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 +26 -0
- package/build/browser/Client.js +1 -1
- package/build/browser/Client.js.map +1 -1
- package/build/browser/intellisense.test.helpers/orderBySuggestionIsRight.js +8 -1
- package/build/browser/intellisense.test.helpers/orderBySuggestionIsRight.js.map +1 -1
- package/build/browser/intellisense.test.js +14 -4
- package/build/browser/intellisense.test.js.map +1 -1
- package/build/browser/object/Cache.js +1 -1
- package/build/browser/object/Cache.js.map +1 -1
- package/build/browser/object/SimpleCache.js +1 -1
- package/build/browser/object/SimpleCache.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.js +4 -0
- package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/browser/object/fetchPage.js +8 -4
- package/build/browser/object/fetchPage.js.map +1 -1
- package/build/browser/object/geotimeseriesreference.test.js +0 -2
- package/build/browser/object/geotimeseriesreference.test.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +3 -1
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/observable/LinkPayload.js +2 -0
- package/build/browser/observable/LinkPayload.js.map +1 -0
- package/build/browser/observable/ObjectPayload.js.map +1 -1
- package/build/browser/observable/ObservableClient/ObserveLink.js +17 -0
- package/build/browser/observable/ObservableClient/ObserveLink.js.map +1 -0
- package/build/browser/observable/ObservableClient/common.js +2 -0
- package/build/browser/observable/ObservableClient/common.js.map +1 -0
- package/build/browser/observable/ObservableClient.js +20 -0
- package/build/browser/observable/ObservableClient.js.map +1 -1
- package/build/browser/observable/Unsubscribable.js +2 -0
- package/build/browser/observable/Unsubscribable.js.map +1 -0
- package/build/browser/observable/internal/AbstractHelper.js +50 -0
- package/build/browser/observable/internal/AbstractHelper.js.map +1 -0
- package/build/browser/observable/internal/BaseCollectionQuery.js +2 -0
- package/build/browser/observable/internal/BaseCollectionQuery.js.map +1 -0
- package/build/browser/observable/internal/BulkObjectLoader.js +3 -3
- package/build/browser/observable/internal/BulkObjectLoader.js.map +1 -1
- package/build/browser/observable/internal/CacheKeys.js +17 -2
- package/build/browser/observable/internal/CacheKeys.js.map +1 -1
- package/build/browser/observable/internal/Changes.js +6 -0
- package/build/browser/observable/internal/Changes.js.map +1 -1
- package/build/browser/observable/internal/KnownCacheKey.js +2 -0
- package/build/browser/observable/internal/KnownCacheKey.js.map +1 -0
- package/build/browser/observable/internal/Layer.js.map +1 -1
- package/build/browser/observable/internal/ListCacheKey.js +2 -0
- package/build/browser/observable/internal/ListCacheKey.js.map +1 -0
- package/build/browser/observable/internal/ListQuery.js +399 -161
- package/build/browser/observable/internal/ListQuery.js.map +1 -1
- package/build/browser/observable/internal/ObjectQuery.js +27 -2
- package/build/browser/observable/internal/ObjectQuery.js.map +1 -1
- package/build/browser/observable/internal/ObservableClientImpl.js +42 -2
- package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/browser/observable/internal/OptimisticJob.js +12 -3
- package/build/browser/observable/internal/OptimisticJob.js.map +1 -1
- package/build/browser/observable/internal/Query.js +17 -3
- package/build/browser/observable/internal/Query.js.map +1 -1
- package/build/browser/observable/internal/QuerySubscription.js +41 -0
- package/build/browser/observable/internal/QuerySubscription.js.map +1 -0
- package/build/browser/observable/internal/Store.invalidation.test.js +481 -0
- package/build/browser/observable/internal/Store.invalidation.test.js.map +1 -0
- package/build/browser/observable/internal/Store.js +38 -91
- package/build/browser/observable/internal/Store.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +318 -63
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/UnsubscribableWrapper.js +30 -0
- package/build/browser/observable/internal/UnsubscribableWrapper.js.map +1 -0
- package/build/browser/observable/internal/createCollectionConnectable.js +50 -0
- package/build/browser/observable/internal/createCollectionConnectable.js.map +1 -0
- package/build/browser/observable/internal/createCollectionConnectable.test.js +599 -0
- package/build/browser/observable/internal/createCollectionConnectable.test.js.map +1 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.js +216 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.js.map +1 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.test.js +382 -0
- package/build/browser/observable/internal/getObjectTypesThatInvalidate.test.js.map +1 -0
- package/build/browser/observable/internal/isObjectInstance.js +23 -0
- package/build/browser/observable/internal/isObjectInstance.js.map +1 -0
- package/build/browser/observable/internal/links/LinksHelper.js +37 -0
- package/build/browser/observable/internal/links/LinksHelper.js.map +1 -0
- package/build/browser/observable/internal/links/SpecificLinkCacheKey.js +2 -0
- package/build/browser/observable/internal/links/SpecificLinkCacheKey.js.map +1 -0
- package/build/browser/observable/internal/links/SpecificLinkQuery.js +185 -0
- package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -0
- package/build/browser/observable/internal/list/ListsHelper.js +49 -0
- package/build/browser/observable/internal/list/ListsHelper.js.map +1 -0
- package/build/browser/observable/internal/object/ObjectsHelper.js +34 -0
- package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -0
- package/build/browser/observable/internal/removeDuplicates.js +36 -0
- package/build/browser/observable/internal/removeDuplicates.js.map +1 -0
- package/build/browser/observable/internal/sorting/SortingStrategy.js +78 -0
- package/build/browser/observable/internal/sorting/SortingStrategy.js.map +1 -0
- package/build/browser/observable/internal/testUtils/invalidateList.js +23 -0
- package/build/browser/observable/internal/testUtils/invalidateList.js.map +1 -0
- package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +69 -0
- package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -0
- package/build/browser/observable/internal/testUtils/observeObject/expectStandardObserveObject.js +56 -0
- package/build/browser/observable/internal/testUtils/observeObject/expectStandardObserveObject.js.map +1 -0
- package/build/browser/observable/internal/testUtils.js +70 -7
- package/build/browser/observable/internal/testUtils.js.map +1 -1
- package/build/browser/public/unstable-do-not-use.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -2
- package/build/browser/util/streamutils.js +1 -1
- package/build/browser/util/streamutils.js.map +1 -1
- package/build/cjs/{chunk-URDXPIRU.cjs → chunk-N5DMNYGH.cjs} +58 -54
- package/build/cjs/chunk-N5DMNYGH.cjs.map +1 -0
- package/build/cjs/{chunk-BJYCRD5Y.cjs → chunk-NWD33DSJ.cjs} +23 -19
- package/build/cjs/chunk-NWD33DSJ.cjs.map +1 -0
- package/build/cjs/index.cjs +7 -7
- package/build/cjs/public/internal.cjs +8 -8
- package/build/cjs/public/unstable-do-not-use.cjs +779 -268
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/cjs/public/unstable-do-not-use.d.cts +161 -12
- package/build/esm/Client.js +1 -1
- package/build/esm/Client.js.map +1 -1
- package/build/esm/intellisense.test.helpers/orderBySuggestionIsRight.js +8 -1
- package/build/esm/intellisense.test.helpers/orderBySuggestionIsRight.js.map +1 -1
- package/build/esm/intellisense.test.js +14 -4
- package/build/esm/intellisense.test.js.map +1 -1
- package/build/esm/object/Cache.js +1 -1
- package/build/esm/object/Cache.js.map +1 -1
- package/build/esm/object/SimpleCache.js +1 -1
- package/build/esm/object/SimpleCache.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.js +4 -0
- package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/esm/object/fetchPage.js +8 -4
- package/build/esm/object/fetchPage.js.map +1 -1
- package/build/esm/object/geotimeseriesreference.test.js +0 -2
- package/build/esm/object/geotimeseriesreference.test.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +3 -1
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/observable/LinkPayload.js +2 -0
- package/build/esm/observable/LinkPayload.js.map +1 -0
- package/build/esm/observable/ObjectPayload.js.map +1 -1
- package/build/esm/observable/ObservableClient/ObserveLink.js +17 -0
- package/build/esm/observable/ObservableClient/ObserveLink.js.map +1 -0
- package/build/esm/observable/ObservableClient/common.js +2 -0
- package/build/esm/observable/ObservableClient/common.js.map +1 -0
- package/build/esm/observable/ObservableClient.js +20 -0
- package/build/esm/observable/ObservableClient.js.map +1 -1
- package/build/esm/observable/Unsubscribable.js +2 -0
- package/build/esm/observable/Unsubscribable.js.map +1 -0
- package/build/esm/observable/internal/AbstractHelper.js +50 -0
- package/build/esm/observable/internal/AbstractHelper.js.map +1 -0
- package/build/esm/observable/internal/BaseCollectionQuery.js +2 -0
- package/build/esm/observable/internal/BaseCollectionQuery.js.map +1 -0
- package/build/esm/observable/internal/BulkObjectLoader.js +3 -3
- package/build/esm/observable/internal/BulkObjectLoader.js.map +1 -1
- package/build/esm/observable/internal/CacheKeys.js +17 -2
- package/build/esm/observable/internal/CacheKeys.js.map +1 -1
- package/build/esm/observable/internal/Changes.js +6 -0
- package/build/esm/observable/internal/Changes.js.map +1 -1
- package/build/esm/observable/internal/KnownCacheKey.js +2 -0
- package/build/esm/observable/internal/KnownCacheKey.js.map +1 -0
- package/build/esm/observable/internal/Layer.js.map +1 -1
- package/build/esm/observable/internal/ListCacheKey.js +2 -0
- package/build/esm/observable/internal/ListCacheKey.js.map +1 -0
- package/build/esm/observable/internal/ListQuery.js +399 -161
- package/build/esm/observable/internal/ListQuery.js.map +1 -1
- package/build/esm/observable/internal/ObjectQuery.js +27 -2
- package/build/esm/observable/internal/ObjectQuery.js.map +1 -1
- package/build/esm/observable/internal/ObservableClientImpl.js +42 -2
- package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/esm/observable/internal/OptimisticJob.js +12 -3
- package/build/esm/observable/internal/OptimisticJob.js.map +1 -1
- package/build/esm/observable/internal/Query.js +17 -3
- package/build/esm/observable/internal/Query.js.map +1 -1
- package/build/esm/observable/internal/QuerySubscription.js +41 -0
- package/build/esm/observable/internal/QuerySubscription.js.map +1 -0
- package/build/esm/observable/internal/Store.invalidation.test.js +481 -0
- package/build/esm/observable/internal/Store.invalidation.test.js.map +1 -0
- package/build/esm/observable/internal/Store.js +38 -91
- package/build/esm/observable/internal/Store.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +318 -63
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/UnsubscribableWrapper.js +30 -0
- package/build/esm/observable/internal/UnsubscribableWrapper.js.map +1 -0
- package/build/esm/observable/internal/createCollectionConnectable.js +50 -0
- package/build/esm/observable/internal/createCollectionConnectable.js.map +1 -0
- package/build/esm/observable/internal/createCollectionConnectable.test.js +599 -0
- package/build/esm/observable/internal/createCollectionConnectable.test.js.map +1 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.js +216 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.js.map +1 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.test.js +382 -0
- package/build/esm/observable/internal/getObjectTypesThatInvalidate.test.js.map +1 -0
- package/build/esm/observable/internal/isObjectInstance.js +23 -0
- package/build/esm/observable/internal/isObjectInstance.js.map +1 -0
- package/build/esm/observable/internal/links/LinksHelper.js +37 -0
- package/build/esm/observable/internal/links/LinksHelper.js.map +1 -0
- package/build/esm/observable/internal/links/SpecificLinkCacheKey.js +2 -0
- package/build/esm/observable/internal/links/SpecificLinkCacheKey.js.map +1 -0
- package/build/esm/observable/internal/links/SpecificLinkQuery.js +185 -0
- package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -0
- package/build/esm/observable/internal/list/ListsHelper.js +49 -0
- package/build/esm/observable/internal/list/ListsHelper.js.map +1 -0
- package/build/esm/observable/internal/object/ObjectsHelper.js +34 -0
- package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -0
- package/build/esm/observable/internal/removeDuplicates.js +36 -0
- package/build/esm/observable/internal/removeDuplicates.js.map +1 -0
- package/build/esm/observable/internal/sorting/SortingStrategy.js +78 -0
- package/build/esm/observable/internal/sorting/SortingStrategy.js.map +1 -0
- package/build/esm/observable/internal/testUtils/invalidateList.js +23 -0
- package/build/esm/observable/internal/testUtils/invalidateList.js.map +1 -0
- package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +69 -0
- package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -0
- package/build/esm/observable/internal/testUtils/observeObject/expectStandardObserveObject.js +56 -0
- package/build/esm/observable/internal/testUtils/observeObject/expectStandardObserveObject.js.map +1 -0
- package/build/esm/observable/internal/testUtils.js +70 -7
- package/build/esm/observable/internal/testUtils.js.map +1 -1
- package/build/esm/public/unstable-do-not-use.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -2
- package/build/esm/util/streamutils.js +1 -1
- package/build/esm/util/streamutils.js.map +1 -1
- package/build/types/Client.d.ts +1 -1
- package/build/types/object/fetchPage.d.ts.map +1 -1
- package/build/types/observable/LinkPayload.d.ts +9 -0
- package/build/types/observable/LinkPayload.d.ts.map +1 -0
- package/build/types/observable/ObjectPayload.d.ts +4 -0
- package/build/types/observable/ObjectPayload.d.ts.map +1 -1
- package/build/types/observable/ObservableClient/ObserveLink.d.ts +32 -0
- package/build/types/observable/ObservableClient/ObserveLink.d.ts.map +1 -0
- package/build/types/observable/ObservableClient/common.d.ts +67 -0
- package/build/types/observable/ObservableClient/common.d.ts.map +1 -0
- package/build/types/observable/ObservableClient.d.ts +82 -15
- package/build/types/observable/ObservableClient.d.ts.map +1 -1
- package/build/types/observable/Unsubscribable.d.ts +3 -0
- package/build/types/observable/Unsubscribable.d.ts.map +1 -0
- package/build/types/observable/internal/AbstractHelper.d.ts +15 -0
- package/build/types/observable/internal/AbstractHelper.d.ts.map +1 -0
- package/build/types/observable/internal/BaseCollectionQuery.d.ts +64 -0
- package/build/types/observable/internal/BaseCollectionQuery.d.ts.map +1 -0
- package/build/types/observable/internal/BulkObjectLoader.d.ts.map +1 -1
- package/build/types/observable/internal/CacheKeys.d.ts +10 -4
- package/build/types/observable/internal/CacheKeys.d.ts.map +1 -1
- package/build/types/observable/internal/Changes.d.ts +7 -4
- package/build/types/observable/internal/Changes.d.ts.map +1 -1
- package/build/types/observable/internal/KnownCacheKey.d.ts +4 -0
- package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/Layer.d.ts +7 -7
- package/build/types/observable/internal/Layer.d.ts.map +1 -1
- package/build/types/observable/internal/ListCacheKey.d.ts +7 -0
- package/build/types/observable/internal/ListCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/ListQuery.d.ts +160 -21
- package/build/types/observable/internal/ListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/ObjectQuery.d.ts +3 -1
- package/build/types/observable/internal/ObjectQuery.d.ts.map +1 -1
- package/build/types/observable/internal/OptimisticJob.d.ts.map +1 -1
- package/build/types/observable/internal/Query.d.ts +6 -5
- package/build/types/observable/internal/Query.d.ts.map +1 -1
- package/build/types/observable/internal/QuerySubscription.d.ts +1 -0
- package/build/types/observable/internal/QuerySubscription.d.ts.map +1 -0
- package/build/types/observable/internal/Store.d.ts +34 -31
- package/build/types/observable/internal/Store.d.ts.map +1 -1
- package/build/types/observable/internal/Store.invalidation.test.d.ts +1 -0
- package/build/types/observable/internal/Store.invalidation.test.d.ts.map +1 -0
- package/build/types/observable/internal/Store.test.d.ts +4 -1
- package/build/types/observable/internal/Store.test.d.ts.map +1 -1
- package/build/types/observable/internal/UnsubscribableWrapper.d.ts +1 -0
- package/build/types/observable/internal/UnsubscribableWrapper.d.ts.map +1 -0
- package/build/types/observable/internal/createCollectionConnectable.d.ts +38 -0
- package/build/types/observable/internal/createCollectionConnectable.d.ts.map +1 -0
- package/build/types/observable/internal/createCollectionConnectable.test.d.ts +1 -0
- package/build/types/observable/internal/createCollectionConnectable.test.d.ts.map +1 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.d.ts +9 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.d.ts.map +1 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.test.d.ts +1 -0
- package/build/types/observable/internal/getObjectTypesThatInvalidate.test.d.ts.map +1 -0
- package/build/types/observable/internal/isObjectInstance.d.ts +5 -0
- package/build/types/observable/internal/isObjectInstance.d.ts.map +1 -0
- package/build/types/observable/internal/links/LinksHelper.d.ts +29 -0
- package/build/types/observable/internal/links/LinksHelper.d.ts.map +1 -0
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts +17 -0
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts +45 -0
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListsHelper.d.ts +17 -0
- package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -0
- package/build/types/observable/internal/object/ObjectsHelper.d.ts +11 -0
- package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -0
- package/build/types/observable/internal/removeDuplicates.d.ts +11 -0
- package/build/types/observable/internal/removeDuplicates.d.ts.map +1 -0
- package/build/types/observable/internal/sorting/SortingStrategy.d.ts +41 -0
- package/build/types/observable/internal/sorting/SortingStrategy.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils/invalidateList.d.ts +9 -0
- package/build/types/observable/internal/testUtils/invalidateList.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils/observeLink/expectStandardObserveLink.d.ts +46 -0
- package/build/types/observable/internal/testUtils/observeLink/expectStandardObserveLink.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils/observeObject/expectStandardObserveObject.d.ts +26 -0
- package/build/types/observable/internal/testUtils/observeObject/expectStandardObserveObject.d.ts.map +1 -0
- package/build/types/observable/internal/testUtils.d.ts +25 -3
- package/build/types/observable/internal/testUtils.d.ts.map +1 -1
- package/build/types/public/unstable-do-not-use.d.ts +4 -2
- package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
- package/package.json +10 -10
- package/build/cjs/chunk-BJYCRD5Y.cjs.map +0 -1
- package/build/cjs/chunk-URDXPIRU.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createCollectionConnectable.test.js","names":["BehaviorSubject","beforeEach","describe","expect","it","vi","createCollectionConnectable","actualCreateCollectionConnectable","createClientMockHelper","mockObserver","waitForCall","mockEmployee1","$apiName","$primaryKey","$objectType","$title","employeeId","fullName","mockEmployee2","mockEmployee3","mockStore","createPayload","mockListCacheKey","client","getSubject","fn","type","otherKeys","params","data","resolvedData","status","isOptimistic","lastUpdated","count","length","objectKey1","objectKey2","subjectPayload","cacheKey","value","Date","now","subject","mocked","mockImplementation","undefined","connectable","subscription","connect","observer","subscribe","next","toHaveBeenCalledWith","objectContaining","unsubscribe","mockReturnValue","basePayload","mockClear","objectKey3","initialPayload","observer1","observer2","toHaveBeenCalledTimes","not","toHaveBeenCalled","errorThrowingCreatePayload","Error","error","message"],"sources":["createCollectionConnectable.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Osdk } from \"@osdk/api\";\nimport type { Employee } from \"@osdk/client.test.ontology\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { Status } from \"../ObservableClient/common.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport { createCollectionConnectable as actualCreateCollectionConnectable } from \"./createCollectionConnectable.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport type { Store, SubjectPayload } from \"./Store.js\";\nimport {\n createClientMockHelper,\n mockObserver,\n waitForCall,\n} from \"./testUtils.js\";\n\n// Test payload type for our collection\ninterface TestPayload {\n data: any[];\n status: Status;\n isOptimistic: boolean;\n lastUpdated: number;\n count: number;\n}\n\n// Mock object instances for testing\nconst mockEmployee1: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 1,\n $objectType: \"Employee\",\n $title: \"Employee 1\",\n employeeId: 1,\n fullName: \"John Doe\",\n} as any;\n\nconst mockEmployee2: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 2,\n $objectType: \"Employee\",\n $title: \"Employee 2\",\n employeeId: 2,\n fullName: \"Jane Smith\",\n} as any;\n\nconst mockEmployee3: Osdk.Instance<Employee> & ObjectHolder = {\n $apiName: \"Employee\",\n $primaryKey: 3,\n $objectType: \"Employee\",\n $title: \"Employee 3\",\n employeeId: 3,\n fullName: \"Bob Johnson\",\n} as any;\n\ndescribe(\"createCollectionConnectable\", () => {\n let mockStore: Store;\n let createPayload: ReturnType<typeof vi.fn>;\n let mockListCacheKey: CacheKey<any, any, any, any>;\n\n beforeEach(() => {\n const { client } = createClientMockHelper();\n\n // Mock the store with minimal required methods\n mockStore = {\n getSubject: vi.fn(),\n } as any;\n\n // Mock cache key for list\n mockListCacheKey = {\n type: \"list\",\n otherKeys: [\"Employee\", {}, {}],\n } as CacheKey<any, any, any, any>;\n\n // Create payload function that mimics real usage\n createPayload = vi.fn((params) => ({\n data: params.resolvedData,\n status: params.status,\n isOptimistic: params.isOptimistic,\n lastUpdated: params.lastUpdated,\n count: params.resolvedData.length,\n }));\n });\n\n describe(\"basic functionality\", () => {\n it(\"should create a connectable observable with resolved data\", async () => {\n // Mock object cache keys\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2],\n } as ObjectCacheKey;\n\n // Create subject payload with mock data\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1, objectKey2],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject to return object observables\n vi.mocked(mockStore.getSubject).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n createPayload,\n );\n\n // Connect and subscribe\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // Wait for the observable to emit\n await waitForCall(observer);\n\n // Verify the result\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2],\n status: \"loaded\",\n isOptimistic: false,\n count: 2,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle empty data correctly\", async () => {\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [],\n status: \"loaded\",\n isOptimistic: false,\n count: 0,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle null/undefined data\", async () => {\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: null as any,\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [],\n status: \"loaded\",\n isOptimistic: false,\n count: 0,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"optimistic updates\", () => {\n it(\"should propagate optimistic flag correctly\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loading\",\n lastUpdated: Date.now(),\n isOptimistic: true, // This is an optimistic update\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockStore.getSubject).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"loading\",\n isOptimistic: true, // Should preserve optimistic flag\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"status transitions\", () => {\n it(\"should handle different status values\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const basePayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"init\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(basePayload);\n\n vi.mocked(mockStore.getSubject).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // Wait for initial emission\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"init\",\n isOptimistic: false,\n count: 1,\n }),\n );\n\n observer.next.mockClear();\n\n // Test transition to loading\n subject.next({\n ...basePayload,\n status: \"loading\",\n lastUpdated: Date.now(),\n });\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n status: \"loading\",\n isOptimistic: false,\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"multiple objects\", () => {\n it(\"should handle multiple objects in collection\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2],\n } as ObjectCacheKey;\n\n const objectKey3: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 3],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1, objectKey2, objectKey3],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject for all three objects\n vi.mocked(mockStore.getSubject).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey3) {\n return new BehaviorSubject({\n cacheKey: objectKey3,\n value: mockEmployee3,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2, mockEmployee3],\n status: \"loaded\",\n isOptimistic: false,\n count: 3,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle objects being added/removed from collection\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const objectKey2: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 2],\n } as ObjectCacheKey;\n\n // Start with one object\n const initialPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(initialPayload);\n\n vi.mocked(mockStore.getSubject).mockImplementation((cacheKey: any) => {\n if (cacheKey === objectKey1) {\n return new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n if (cacheKey === objectKey2) {\n return new BehaviorSubject({\n cacheKey: objectKey2,\n value: mockEmployee2,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any);\n }\n return new BehaviorSubject(undefined as any);\n }) as any;\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n // First check - single object\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n observer.next.mockClear();\n\n // Add second object\n subject.next({\n ...initialPayload,\n value: {\n data: [objectKey1, objectKey2],\n },\n lastUpdated: Date.now(),\n });\n\n // Second check - two objects\n await waitForCall(observer);\n\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1, mockEmployee2],\n count: 2,\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"subscription behavior\", () => {\n it(\"should support multiple subscribers\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockStore.getSubject).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer1 = mockObserver<TestPayload>();\n const observer2 = mockObserver<TestPayload>();\n\n connectable.subscribe(observer1);\n connectable.subscribe(observer2);\n\n await waitForCall(observer1);\n await waitForCall(observer2);\n\n // Both observers should receive the data\n expect(observer1.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n expect(observer2.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should use ReplaySubject behavior (last value replayed)\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockStore.getSubject).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer1 = mockObserver<TestPayload>();\n\n // Subscribe first observer\n connectable.subscribe(observer1);\n\n await waitForCall(observer1);\n expect(observer1.next).toHaveBeenCalledTimes(1);\n observer1.next.mockClear();\n\n // Subscribe second observer after first has already received data\n const observer2 = mockObserver<TestPayload>();\n connectable.subscribe(observer2);\n\n await waitForCall(observer2);\n\n // Second observer should immediately receive the last value (ReplaySubject behavior)\n expect(observer2.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [mockEmployee1],\n count: 1,\n }),\n );\n\n // First observer should not receive additional calls\n expect(observer1.next).not.toHaveBeenCalled();\n\n subscription.unsubscribe();\n });\n });\n\n describe(\"error handling\", () => {\n it(\"should handle store.getSubject returning undefined object entry\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n // Mock store.getSubject to return undefined entry - this creates an object with undefined value\n vi.mocked(mockStore.getSubject).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: undefined, // This is the key - undefined value\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n createPayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer);\n\n // Should handle undefined object entry gracefully by filtering it out\n expect(observer.next).toHaveBeenCalledWith(\n expect.objectContaining({\n data: [undefined], // The function maps the undefined value from the store\n status: \"loaded\",\n count: 1,\n }),\n );\n\n subscription.unsubscribe();\n });\n\n it(\"should handle createPayload function throwing errors\", async () => {\n const objectKey1: ObjectCacheKey = {\n type: \"object\",\n otherKeys: [\"Employee\", 1],\n } as ObjectCacheKey;\n\n const subjectPayload: SubjectPayload<typeof mockListCacheKey> = {\n cacheKey: mockListCacheKey,\n value: {\n data: [objectKey1],\n },\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n };\n\n const subject = new BehaviorSubject(subjectPayload);\n\n vi.mocked(mockStore.getSubject).mockReturnValue(\n new BehaviorSubject({\n cacheKey: objectKey1,\n value: mockEmployee1,\n status: \"loaded\",\n lastUpdated: Date.now(),\n isOptimistic: false,\n } as any),\n );\n\n // Mock createPayload to throw an error\n const errorThrowingCreatePayload = vi.fn(() => {\n throw new Error(\"Test error in createPayload\");\n });\n\n const connectable = actualCreateCollectionConnectable(\n subject,\n mockStore,\n errorThrowingCreatePayload,\n );\n\n const subscription = connectable.connect();\n const observer = mockObserver<TestPayload>();\n\n connectable.subscribe(observer);\n\n await waitForCall(observer.error);\n\n // Should call the error handler\n expect(observer.error).toHaveBeenCalledWith(\n expect.objectContaining({\n message: \"Test error in createPayload\",\n }),\n );\n\n subscription.unsubscribe();\n });\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,SAASA,eAAe,QAAQ,MAAM;AACtC,SAASC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,QAAQ;AAI7D,SAASC,2BAA2B,IAAIC,iCAAiC,QAAQ,kCAAkC;AAGnH,SACEC,sBAAsB,EACtBC,YAAY,EACZC,WAAW,QACN,gBAAgB;;AAEvB;;AASA;AACA,MAAMC,aAAqD,GAAG;EAC5DC,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE,UAAU;EACvBC,MAAM,EAAE,YAAY;EACpBC,UAAU,EAAE,CAAC;EACbC,QAAQ,EAAE;AACZ,CAAQ;AAER,MAAMC,aAAqD,GAAG;EAC5DN,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE,UAAU;EACvBC,MAAM,EAAE,YAAY;EACpBC,UAAU,EAAE,CAAC;EACbC,QAAQ,EAAE;AACZ,CAAQ;AAER,MAAME,aAAqD,GAAG;EAC5DP,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE,UAAU;EACvBC,MAAM,EAAE,YAAY;EACpBC,UAAU,EAAE,CAAC;EACbC,QAAQ,EAAE;AACZ,CAAQ;AAERf,QAAQ,CAAC,6BAA6B,EAAE,MAAM;EAC5C,IAAIkB,SAAgB;EACpB,IAAIC,aAAuC;EAC3C,IAAIC,gBAA8C;EAElDrB,UAAU,CAAC,MAAM;IACf,MAAM;MAAEsB;IAAO,CAAC,GAAGf,sBAAsB,CAAC,CAAC;;IAE3C;IACAY,SAAS,GAAG;MACVI,UAAU,EAAEnB,EAAE,CAACoB,EAAE,CAAC;IACpB,CAAQ;;IAER;IACAH,gBAAgB,GAAG;MACjBI,IAAI,EAAE,MAAM;MACZC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAChC,CAAiC;;IAEjC;IACAN,aAAa,GAAGhB,EAAE,CAACoB,EAAE,CAAEG,MAAM,KAAM;MACjCC,IAAI,EAAED,MAAM,CAACE,YAAY;MACzBC,MAAM,EAAEH,MAAM,CAACG,MAAM;MACrBC,YAAY,EAAEJ,MAAM,CAACI,YAAY;MACjCC,WAAW,EAAEL,MAAM,CAACK,WAAW;MAC/BC,KAAK,EAAEN,MAAM,CAACE,YAAY,CAACK;IAC7B,CAAC,CAAC,CAAC;EACL,CAAC,CAAC;EAEFjC,QAAQ,CAAC,qBAAqB,EAAE,MAAM;IACpCE,EAAE,CAAC,2DAA2D,EAAE,YAAY;MAC1E;MACA,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAMU,UAA0B,GAAG;QACjCX,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;;MAEnB;MACA,MAAMW,cAAuD,GAAG;QAC9DC,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE,CAACO,UAAU,EAAEC,UAAU;QAC/B,CAAC;QACDN,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAACsC,cAAc,CAAC;;MAEnD;MACAjC,EAAE,CAACuC,MAAM,CAACxB,SAAS,CAACI,UAAU,CAAC,CAACqB,kBAAkB,CAAEN,QAAa,IAAK;QACpE,IAAIA,QAAQ,KAAKH,UAAU,EAAE;UAC3B,OAAO,IAAIpC,eAAe,CAAC;YACzBuC,QAAQ,EAAEH,UAAU;YACpBI,KAAK,EAAE7B,aAAa;YACpBoB,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBV,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,IAAIO,QAAQ,KAAKF,UAAU,EAAE;UAC3B,OAAO,IAAIrC,eAAe,CAAC;YACzBuC,QAAQ,EAAEF,UAAU;YACpBG,KAAK,EAAEtB,aAAa;YACpBa,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBV,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,OAAO,IAAIhC,eAAe,CAAC8C,SAAgB,CAAC;MAC9C,CAAC,CAAC;MAEF,MAAMC,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACTC,aACF,CAAC;;MAED;MACA,MAAM2B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAGzC,YAAY,CAAc,CAAC;MAE5CsC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;;MAE/B;MACA,MAAMxC,WAAW,CAACwC,QAAQ,CAAC;;MAE3B;MACA/C,MAAM,CAAC+C,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAAClB,aAAa,EAAEO,aAAa,CAAC;QACpCa,MAAM,EAAE,QAAQ;QAChBC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDc,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEFnD,EAAE,CAAC,oCAAoC,EAAE,YAAY;MACnD,MAAMkC,cAAuD,GAAG;QAC9DC,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE;QACR,CAAC;QACDE,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAACsC,cAAc,CAAC;MAEnD,MAAMS,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACTC,aACF,CAAC;MAED,MAAM2B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAGzC,YAAY,CAAc,CAAC;MAE5CsC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAMxC,WAAW,CAACwC,QAAQ,CAAC;MAE3B/C,MAAM,CAAC+C,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,EAAE;QACRE,MAAM,EAAE,QAAQ;QAChBC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDc,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEFnD,EAAE,CAAC,mCAAmC,EAAE,YAAY;MAClD,MAAMkC,cAAuD,GAAG;QAC9DC,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE;QACR,CAAC;QACDE,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAACsC,cAAc,CAAC;MAEnD,MAAMS,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACTC,aACF,CAAC;MAED,MAAM2B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAGzC,YAAY,CAAc,CAAC;MAE5CsC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAMxC,WAAW,CAACwC,QAAQ,CAAC;MAE3B/C,MAAM,CAAC+C,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,EAAE;QACRE,MAAM,EAAE,QAAQ;QAChBC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDc,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFrD,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACnCE,EAAE,CAAC,4CAA4C,EAAE,YAAY;MAC3D,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAMW,cAAuD,GAAG;QAC9DC,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,SAAS;QACjBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE,IAAI,CAAE;MACtB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAACsC,cAAc,CAAC;MAEnDjC,EAAE,CAACuC,MAAM,CAACxB,SAAS,CAACI,UAAU,CAAC,CAACgC,eAAe,CAC7C,IAAIxD,eAAe,CAAC;QAClBuC,QAAQ,EAAEH,UAAU;QACpBI,KAAK,EAAE7B,aAAa;QACpBoB,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;MAED,MAAMe,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACTC,aACF,CAAC;MAED,MAAM2B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAGzC,YAAY,CAAc,CAAC;MAE5CsC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAMxC,WAAW,CAACwC,QAAQ,CAAC;MAE3B/C,MAAM,CAAC+C,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBoB,MAAM,EAAE,SAAS;QACjBC,YAAY,EAAE,IAAI;QAAE;QACpBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDc,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFrD,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACnCE,EAAE,CAAC,uCAAuC,EAAE,YAAY;MACtD,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAM8B,WAAoD,GAAG;QAC3DlB,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,MAAM;QACdE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAACyD,WAAW,CAAC;MAEhDpD,EAAE,CAACuC,MAAM,CAACxB,SAAS,CAACI,UAAU,CAAC,CAACgC,eAAe,CAC7C,IAAIxD,eAAe,CAAC;QAClBuC,QAAQ,EAAEH,UAAU;QACpBI,KAAK,EAAE7B,aAAa;QACpBoB,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;MAED,MAAMe,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACTC,aACF,CAAC;MAED,MAAM2B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAGzC,YAAY,CAAc,CAAC;MAE5CsC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;;MAE/B;MACA,MAAMxC,WAAW,CAACwC,QAAQ,CAAC;MAE3B/C,MAAM,CAAC+C,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBoB,MAAM,EAAE,MAAM;QACdC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDgB,QAAQ,CAACE,IAAI,CAACM,SAAS,CAAC,CAAC;;MAEzB;MACAf,OAAO,CAACS,IAAI,CAAC;QACX,GAAGK,WAAW;QACd1B,MAAM,EAAE,SAAS;QACjBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC;MACxB,CAAC,CAAC;MAEF,MAAMhC,WAAW,CAACwC,QAAQ,CAAC;MAE3B/C,MAAM,CAAC+C,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBoB,MAAM,EAAE,SAAS;QACjBC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDc,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFrD,QAAQ,CAAC,kBAAkB,EAAE,MAAM;IACjCE,EAAE,CAAC,8CAA8C,EAAE,YAAY;MAC7D,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAMU,UAA0B,GAAG;QACjCX,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAMgC,UAA0B,GAAG;QACjCjC,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAMW,cAAuD,GAAG;QAC9DC,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE,CAACO,UAAU,EAAEC,UAAU,EAAEsB,UAAU;QAC3C,CAAC;QACD5B,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAACsC,cAAc,CAAC;;MAEnD;MACAjC,EAAE,CAACuC,MAAM,CAACxB,SAAS,CAACI,UAAU,CAAC,CAACqB,kBAAkB,CAAEN,QAAa,IAAK;QACpE,IAAIA,QAAQ,KAAKH,UAAU,EAAE;UAC3B,OAAO,IAAIpC,eAAe,CAAC;YACzBuC,QAAQ,EAAEH,UAAU;YACpBI,KAAK,EAAE7B,aAAa;YACpBoB,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBV,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,IAAIO,QAAQ,KAAKF,UAAU,EAAE;UAC3B,OAAO,IAAIrC,eAAe,CAAC;YACzBuC,QAAQ,EAAEF,UAAU;YACpBG,KAAK,EAAEtB,aAAa;YACpBa,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBV,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,IAAIO,QAAQ,KAAKoB,UAAU,EAAE;UAC3B,OAAO,IAAI3D,eAAe,CAAC;YACzBuC,QAAQ,EAAEoB,UAAU;YACpBnB,KAAK,EAAErB,aAAa;YACpBY,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBV,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,OAAO,IAAIhC,eAAe,CAAC8C,SAAgB,CAAC;MAC9C,CAAC,CAAC;MAEF,MAAMC,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACTC,aACF,CAAC;MAED,MAAM2B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAGzC,YAAY,CAAc,CAAC;MAE5CsC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAMxC,WAAW,CAACwC,QAAQ,CAAC;MAE3B/C,MAAM,CAAC+C,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAAClB,aAAa,EAAEO,aAAa,EAAEC,aAAa,CAAC;QACnDY,MAAM,EAAE,QAAQ;QAChBC,YAAY,EAAE,KAAK;QACnBE,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDc,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEFnD,EAAE,CAAC,2DAA2D,EAAE,YAAY;MAC1E,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAMU,UAA0B,GAAG;QACjCX,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;;MAEnB;MACA,MAAMiC,cAAuD,GAAG;QAC9DrB,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAAC4D,cAAc,CAAC;MAEnDvD,EAAE,CAACuC,MAAM,CAACxB,SAAS,CAACI,UAAU,CAAC,CAACqB,kBAAkB,CAAEN,QAAa,IAAK;QACpE,IAAIA,QAAQ,KAAKH,UAAU,EAAE;UAC3B,OAAO,IAAIpC,eAAe,CAAC;YACzBuC,QAAQ,EAAEH,UAAU;YACpBI,KAAK,EAAE7B,aAAa;YACpBoB,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBV,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,IAAIO,QAAQ,KAAKF,UAAU,EAAE;UAC3B,OAAO,IAAIrC,eAAe,CAAC;YACzBuC,QAAQ,EAAEF,UAAU;YACpBG,KAAK,EAAEtB,aAAa;YACpBa,MAAM,EAAE,QAAQ;YAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;YACvBV,YAAY,EAAE;UAChB,CAAQ,CAAC;QACX;QACA,OAAO,IAAIhC,eAAe,CAAC8C,SAAgB,CAAC;MAC9C,CAAC,CAAC;MAEF,MAAMC,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACTC,aACF,CAAC;MAED,MAAM2B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAGzC,YAAY,CAAc,CAAC;MAE5CsC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;;MAE/B;MACA,MAAMxC,WAAW,CAACwC,QAAQ,CAAC;MAE3B/C,MAAM,CAAC+C,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBuB,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDgB,QAAQ,CAACE,IAAI,CAACM,SAAS,CAAC,CAAC;;MAEzB;MACAf,OAAO,CAACS,IAAI,CAAC;QACX,GAAGQ,cAAc;QACjBpB,KAAK,EAAE;UACLX,IAAI,EAAE,CAACO,UAAU,EAAEC,UAAU;QAC/B,CAAC;QACDJ,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC;MACxB,CAAC,CAAC;;MAEF;MACA,MAAMhC,WAAW,CAACwC,QAAQ,CAAC;MAE3B/C,MAAM,CAAC+C,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAAClB,aAAa,EAAEO,aAAa,CAAC;QACpCgB,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDc,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFrD,QAAQ,CAAC,uBAAuB,EAAE,MAAM;IACtCE,EAAE,CAAC,qCAAqC,EAAE,YAAY;MACpD,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAMW,cAAuD,GAAG;QAC9DC,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAACsC,cAAc,CAAC;MAEnDjC,EAAE,CAACuC,MAAM,CAACxB,SAAS,CAACI,UAAU,CAAC,CAACgC,eAAe,CAC7C,IAAIxD,eAAe,CAAC;QAClBuC,QAAQ,EAAEH,UAAU;QACpBI,KAAK,EAAE7B,aAAa;QACpBoB,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;MAED,MAAMe,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACTC,aACF,CAAC;MAED,MAAM2B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMY,SAAS,GAAGpD,YAAY,CAAc,CAAC;MAC7C,MAAMqD,SAAS,GAAGrD,YAAY,CAAc,CAAC;MAE7CsC,WAAW,CAACI,SAAS,CAACU,SAAS,CAAC;MAChCd,WAAW,CAACI,SAAS,CAACW,SAAS,CAAC;MAEhC,MAAMpD,WAAW,CAACmD,SAAS,CAAC;MAC5B,MAAMnD,WAAW,CAACoD,SAAS,CAAC;;MAE5B;MACA3D,MAAM,CAAC0D,SAAS,CAACT,IAAI,CAAC,CAACC,oBAAoB,CACzClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBuB,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAED/B,MAAM,CAAC2D,SAAS,CAACV,IAAI,CAAC,CAACC,oBAAoB,CACzClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBuB,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDc,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEFnD,EAAE,CAAC,yDAAyD,EAAE,YAAY;MACxE,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAMW,cAAuD,GAAG;QAC9DC,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAACsC,cAAc,CAAC;MAEnDjC,EAAE,CAACuC,MAAM,CAACxB,SAAS,CAACI,UAAU,CAAC,CAACgC,eAAe,CAC7C,IAAIxD,eAAe,CAAC;QAClBuC,QAAQ,EAAEH,UAAU;QACpBI,KAAK,EAAE7B,aAAa;QACpBoB,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;MAED,MAAMe,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACTC,aACF,CAAC;MAED,MAAM2B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMY,SAAS,GAAGpD,YAAY,CAAc,CAAC;;MAE7C;MACAsC,WAAW,CAACI,SAAS,CAACU,SAAS,CAAC;MAEhC,MAAMnD,WAAW,CAACmD,SAAS,CAAC;MAC5B1D,MAAM,CAAC0D,SAAS,CAACT,IAAI,CAAC,CAACW,qBAAqB,CAAC,CAAC,CAAC;MAC/CF,SAAS,CAACT,IAAI,CAACM,SAAS,CAAC,CAAC;;MAE1B;MACA,MAAMI,SAAS,GAAGrD,YAAY,CAAc,CAAC;MAC7CsC,WAAW,CAACI,SAAS,CAACW,SAAS,CAAC;MAEhC,MAAMpD,WAAW,CAACoD,SAAS,CAAC;;MAE5B;MACA3D,MAAM,CAAC2D,SAAS,CAACV,IAAI,CAAC,CAACC,oBAAoB,CACzClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAAClB,aAAa,CAAC;QACrBuB,KAAK,EAAE;MACT,CAAC,CACH,CAAC;;MAED;MACA/B,MAAM,CAAC0D,SAAS,CAACT,IAAI,CAAC,CAACY,GAAG,CAACC,gBAAgB,CAAC,CAAC;MAE7CjB,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFrD,QAAQ,CAAC,gBAAgB,EAAE,MAAM;IAC/BE,EAAE,CAAC,iEAAiE,EAAE,YAAY;MAChF,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAMW,cAAuD,GAAG;QAC9DC,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAACsC,cAAc,CAAC;;MAEnD;MACAjC,EAAE,CAACuC,MAAM,CAACxB,SAAS,CAACI,UAAU,CAAC,CAACgC,eAAe,CAC7C,IAAIxD,eAAe,CAAC;QAClBuC,QAAQ,EAAEH,UAAU;QACpBI,KAAK,EAAEM,SAAS;QAAE;QAClBf,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;MAED,MAAMe,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACTC,aACF,CAAC;MAED,MAAM2B,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAGzC,YAAY,CAAc,CAAC;MAE5CsC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAMxC,WAAW,CAACwC,QAAQ,CAAC;;MAE3B;MACA/C,MAAM,CAAC+C,QAAQ,CAACE,IAAI,CAAC,CAACC,oBAAoB,CACxClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBzB,IAAI,EAAE,CAACiB,SAAS,CAAC;QAAE;QACnBf,MAAM,EAAE,QAAQ;QAChBG,KAAK,EAAE;MACT,CAAC,CACH,CAAC;MAEDc,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEFnD,EAAE,CAAC,sDAAsD,EAAE,YAAY;MACrE,MAAMgC,UAA0B,GAAG;QACjCV,IAAI,EAAE,QAAQ;QACdC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;MAC3B,CAAmB;MAEnB,MAAMW,cAAuD,GAAG;QAC9DC,QAAQ,EAAEjB,gBAAgB;QAC1BkB,KAAK,EAAE;UACLX,IAAI,EAAE,CAACO,UAAU;QACnB,CAAC;QACDL,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAC;MAED,MAAMW,OAAO,GAAG,IAAI3C,eAAe,CAACsC,cAAc,CAAC;MAEnDjC,EAAE,CAACuC,MAAM,CAACxB,SAAS,CAACI,UAAU,CAAC,CAACgC,eAAe,CAC7C,IAAIxD,eAAe,CAAC;QAClBuC,QAAQ,EAAEH,UAAU;QACpBI,KAAK,EAAE7B,aAAa;QACpBoB,MAAM,EAAE,QAAQ;QAChBE,WAAW,EAAEQ,IAAI,CAACC,GAAG,CAAC,CAAC;QACvBV,YAAY,EAAE;MAChB,CAAQ,CACV,CAAC;;MAED;MACA,MAAMkC,0BAA0B,GAAG7D,EAAE,CAACoB,EAAE,CAAC,MAAM;QAC7C,MAAM,IAAI0C,KAAK,CAAC,6BAA6B,CAAC;MAChD,CAAC,CAAC;MAEF,MAAMpB,WAAW,GAAGxC,iCAAiC,CACnDoC,OAAO,EACPvB,SAAS,EACT8C,0BACF,CAAC;MAED,MAAMlB,YAAY,GAAGD,WAAW,CAACE,OAAO,CAAC,CAAC;MAC1C,MAAMC,QAAQ,GAAGzC,YAAY,CAAc,CAAC;MAE5CsC,WAAW,CAACI,SAAS,CAACD,QAAQ,CAAC;MAE/B,MAAMxC,WAAW,CAACwC,QAAQ,CAACkB,KAAK,CAAC;;MAEjC;MACAjE,MAAM,CAAC+C,QAAQ,CAACkB,KAAK,CAAC,CAACf,oBAAoB,CACzClD,MAAM,CAACmD,gBAAgB,CAAC;QACtBe,OAAO,EAAE;MACX,CAAC,CACH,CAAC;MAEDrB,YAAY,CAACO,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import invariant from "tiny-invariant";
|
|
18
|
+
// Suppose we did an object set that is basically
|
|
19
|
+
// A.where()
|
|
20
|
+
// pivot(B).where()
|
|
21
|
+
// pivot(C).where()
|
|
22
|
+
// pivot(A).where()
|
|
23
|
+
//
|
|
24
|
+
// Any change to A needs to invalidate the chain because of the inner most A.
|
|
25
|
+
//
|
|
26
|
+
// But B.pivotTo(A) does not need all A's to invalidate the chain.
|
|
27
|
+
//
|
|
28
|
+
// For now we are keeping things conservative and just invalidating A either way,
|
|
29
|
+
// but we can make this better.
|
|
30
|
+
|
|
31
|
+
export async function getObjectTypesThatInvalidate(mc, objectSet) {
|
|
32
|
+
const counts = {};
|
|
33
|
+
const resultType = await calcObjectSet(objectSet, {
|
|
34
|
+
counts,
|
|
35
|
+
methodInput: undefined,
|
|
36
|
+
ontologyProvider: mc.ontologyProvider
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// we need to uncount the final result type
|
|
40
|
+
const tweaked = {
|
|
41
|
+
...counts,
|
|
42
|
+
[resultType.apiName]: counts[resultType.apiName] - 1
|
|
43
|
+
};
|
|
44
|
+
return {
|
|
45
|
+
resultType,
|
|
46
|
+
counts,
|
|
47
|
+
invalidationSet: new Set(Object.entries(tweaked).filter(([, v]) => v > 0).map(([k]) => k))
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async function calcObjectSet(os, ctx) {
|
|
51
|
+
const op = ctx.ontologyProvider;
|
|
52
|
+
async function bumpObject(apiName) {
|
|
53
|
+
const objectType = await op.getObjectDefinition(apiName);
|
|
54
|
+
ctx.counts[apiName] = (ctx.counts[apiName] ?? 0) + 1;
|
|
55
|
+
return objectType;
|
|
56
|
+
}
|
|
57
|
+
async function bumpInterface(apiName) {
|
|
58
|
+
const interfaceDef = await op.getInterfaceDefinition(apiName);
|
|
59
|
+
for (const s of interfaceDef.implementedBy ?? []) {
|
|
60
|
+
ctx.counts[s] = (ctx.counts[s] ?? 0) + 1;
|
|
61
|
+
}
|
|
62
|
+
return interfaceDef;
|
|
63
|
+
}
|
|
64
|
+
switch (os.type) {
|
|
65
|
+
case "base":
|
|
66
|
+
return await bumpObject(os.objectType);
|
|
67
|
+
case "interfaceBase":
|
|
68
|
+
return await bumpInterface(os.interfaceType);
|
|
69
|
+
case "interfaceLinkSearchAround":
|
|
70
|
+
{
|
|
71
|
+
const srcDef = await calcObjectSet(os.objectSet, ctx);
|
|
72
|
+
!(srcDef.type === "interface") ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
73
|
+
for (const [k, v] of Object.entries(srcDef.links)) {
|
|
74
|
+
if (k === os.interfaceLink) {
|
|
75
|
+
if (v.targetType === "object") {
|
|
76
|
+
return await bumpObject(v.targetType);
|
|
77
|
+
}
|
|
78
|
+
return await bumpInterface(v.targetType);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// if we got here then we did not find the link and something is wrong.
|
|
83
|
+
throw new Error(`Could not find link ${os.interfaceLink} in object set ${JSON.stringify(os.objectSet)}`);
|
|
84
|
+
}
|
|
85
|
+
case "searchAround":
|
|
86
|
+
{
|
|
87
|
+
const contextDef = await calcObjectSet(os.objectSet, ctx);
|
|
88
|
+
!(contextDef.type === "object") ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
|
|
89
|
+
for (const [k, v] of Object.entries(contextDef.links)) {
|
|
90
|
+
if (k === os.link) {
|
|
91
|
+
return await bumpObject(v.targetType);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// if we got here then we did not find the link and something is wrong.
|
|
96
|
+
throw new Error(`Could not find link ${os.link} in object set ${JSON.stringify(os.objectSet)}`);
|
|
97
|
+
}
|
|
98
|
+
case "filter":
|
|
99
|
+
// for the simple version of this, we can ignore the filter being based on any RDPs because
|
|
100
|
+
// our RDP handling will ensure we invalidate based on those.
|
|
101
|
+
return calcObjectSet(os.objectSet, ctx);
|
|
102
|
+
case "union":
|
|
103
|
+
case "subtract":
|
|
104
|
+
case "intersect":
|
|
105
|
+
// all of these entries need their counts to be merged as the max of each
|
|
106
|
+
|
|
107
|
+
// suppose you have a simple `Union(A, A)`. We would end up with A:2
|
|
108
|
+
// but we only need A:1.
|
|
109
|
+
|
|
110
|
+
// suppose you have `Union(A->B, A->B)`. Now you end up with A:2, B:2,
|
|
111
|
+
// but we only want A:1, B:1.
|
|
112
|
+
|
|
113
|
+
// suppose you have `Union(A->B->A->B, A->B)`. Now you end up with A:3, B:2,
|
|
114
|
+
// but we only want A:2, B:2.
|
|
115
|
+
|
|
116
|
+
const returnTypes = await Promise.all(os.objectSets.map(async os => {
|
|
117
|
+
const counts = {};
|
|
118
|
+
const r = await calcObjectSet(os, {
|
|
119
|
+
...ctx,
|
|
120
|
+
counts
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
r,
|
|
124
|
+
counts
|
|
125
|
+
};
|
|
126
|
+
}));
|
|
127
|
+
for (const {
|
|
128
|
+
counts
|
|
129
|
+
} of returnTypes) {
|
|
130
|
+
for (const [k, v] of Object.entries(counts)) {
|
|
131
|
+
ctx.counts[k] = Math.max(ctx.counts[k] ?? 0, v);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (returnTypes.length === 0) {
|
|
135
|
+
throw new Error(`Could not find any context types for set operation`);
|
|
136
|
+
}
|
|
137
|
+
const allMatch = returnTypes.every(({
|
|
138
|
+
r
|
|
139
|
+
}) => r.apiName === returnTypes[0].r.apiName);
|
|
140
|
+
if (!allMatch) {
|
|
141
|
+
throw new Error(`Incompatible context types found for set operation`);
|
|
142
|
+
}
|
|
143
|
+
return returnTypes[0].r;
|
|
144
|
+
case "withProperties":
|
|
145
|
+
// Everything in an RDP chain needs to invalidate us for now
|
|
146
|
+
for (const [, v] of Object.entries(os.derivedProperties)) {
|
|
147
|
+
await calcRdp(v, {
|
|
148
|
+
...ctx,
|
|
149
|
+
methodInput: os.objectSet
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return calcObjectSet(os.objectSet, {
|
|
153
|
+
...ctx,
|
|
154
|
+
methodInput: os.objectSet
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// used by rdps
|
|
158
|
+
case "methodInput":
|
|
159
|
+
!ctx.methodInput ? process.env.NODE_ENV !== "production" ? invariant(false, "methodInput must be provided") : invariant(false) : void 0;
|
|
160
|
+
|
|
161
|
+
// we only call this to get the context type, so we give it a new ctx
|
|
162
|
+
// otherwise it will double count everything
|
|
163
|
+
return await calcObjectSet(ctx.methodInput, {
|
|
164
|
+
...ctx,
|
|
165
|
+
counts: {}
|
|
166
|
+
});
|
|
167
|
+
case "asType":
|
|
168
|
+
// we don't currently support this anywhere.
|
|
169
|
+
case "asBaseObjectTypes":
|
|
170
|
+
// We don't currently support this because it could return multiple object types conceptually
|
|
171
|
+
// internally, we actually use it this way but we shouldn't be finding that object sets.
|
|
172
|
+
case "reference":
|
|
173
|
+
// reference is particularly problematic because we cannot answer the question about
|
|
174
|
+
// which types without loading the object set definition (and it can change).
|
|
175
|
+
case "static":
|
|
176
|
+
// static is also a problem as we cannot know what the types are without loading them
|
|
177
|
+
throw new Error(`Unsupported ObjectSet type ${os.type}`);
|
|
178
|
+
case "nearestNeighbors":
|
|
179
|
+
return calcObjectSet(os.objectSet, ctx);
|
|
180
|
+
default:
|
|
181
|
+
throw new Error(`Unhandled ObjectSet type ${os.type}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async function calcRdp(dpd, ctx) {
|
|
185
|
+
switch (dpd.type) {
|
|
186
|
+
// Operates on object sets
|
|
187
|
+
case "selection":
|
|
188
|
+
return await calcObjectSet(dpd.objectSet, ctx);
|
|
189
|
+
|
|
190
|
+
// Operates on single property
|
|
191
|
+
case "negate":
|
|
192
|
+
case "extract":
|
|
193
|
+
case "absoluteValue":
|
|
194
|
+
return await calcRdp(dpd.property, ctx);
|
|
195
|
+
|
|
196
|
+
// Operates on many (unordered) properties
|
|
197
|
+
case "least":
|
|
198
|
+
case "greatest":
|
|
199
|
+
case "add":
|
|
200
|
+
case "multiply":
|
|
201
|
+
return await Promise.all(dpd.properties.map(innerDpd => calcRdp(innerDpd, ctx)));
|
|
202
|
+
|
|
203
|
+
// Operates on 2 ordered properties
|
|
204
|
+
case "subtract":
|
|
205
|
+
case "divide":
|
|
206
|
+
return await Promise.all([calcRdp(dpd.left, ctx), calcRdp(dpd.right, ctx)]);
|
|
207
|
+
|
|
208
|
+
// Operates on a single property name
|
|
209
|
+
case "property":
|
|
210
|
+
// noop
|
|
211
|
+
return;
|
|
212
|
+
default:
|
|
213
|
+
throw new Error(`Unhandled DerivedPropertyDefinition type ${dpd.type}`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=getObjectTypesThatInvalidate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getObjectTypesThatInvalidate.js","names":["invariant","getObjectTypesThatInvalidate","mc","objectSet","counts","resultType","calcObjectSet","methodInput","undefined","ontologyProvider","tweaked","apiName","invalidationSet","Set","Object","entries","filter","v","map","k","os","ctx","op","bumpObject","objectType","getObjectDefinition","bumpInterface","interfaceDef","getInterfaceDefinition","s","implementedBy","type","interfaceType","srcDef","process","env","NODE_ENV","links","interfaceLink","targetType","Error","JSON","stringify","contextDef","link","returnTypes","Promise","all","objectSets","r","Math","max","length","allMatch","every","derivedProperties","calcRdp","dpd","property","properties","innerDpd","left","right"],"sources":["getObjectTypesThatInvalidate.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { InterfaceMetadata } from \"@osdk/api\";\nimport type {\n DerivedPropertyDefinition,\n ObjectSet as WireObjectSet,\n} from \"@osdk/foundry.ontologies\";\nimport invariant from \"tiny-invariant\";\nimport type { MinimalClient } from \"../../MinimalClientContext.js\";\nimport type {\n FetchedObjectTypeDefinition,\n OntologyProvider,\n} from \"../../ontology/OntologyProvider.js\";\n\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(\n mc: MinimalClient,\n objectSet: WireObjectSet,\n): Promise<{\n resultType: FetchedObjectTypeDefinition | InterfaceMetadata;\n counts: Record<string, number>;\n invalidationSet: Set<string>;\n}> {\n const counts: Record<string, number> = {};\n\n const resultType = await calcObjectSet(\n objectSet,\n { counts, methodInput: undefined, 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\n return {\n resultType,\n counts,\n invalidationSet: new Set(\n Object.entries(tweaked).filter(([, v]) => v > 0).map(([k]) => k),\n ),\n };\n}\n\ninterface Ctx {\n counts: Record<string, number>;\n methodInput: WireObjectSet | undefined;\n ontologyProvider: OntologyProvider;\n}\n\nasync function calcObjectSet(\n os: WireObjectSet,\n ctx: Ctx,\n): Promise<FetchedObjectTypeDefinition | InterfaceMetadata> {\n const op = ctx.ontologyProvider;\n\n async function bumpObject(apiName: string) {\n const objectType = await op.getObjectDefinition(apiName);\n ctx.counts[apiName] = (ctx.counts[apiName] ?? 0) + 1;\n\n return objectType;\n }\n\n async function bumpInterface(apiName: string) {\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\n switch (os.type) {\n case \"base\":\n return await bumpObject(os.objectType);\n\n case \"interfaceBase\":\n return await bumpInterface(os.interfaceType);\n\n case \"interfaceLinkSearchAround\": {\n const srcDef = await calcObjectSet(os.objectSet, ctx);\n invariant(srcDef.type === \"interface\");\n\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(\n `Could not find link ${os.interfaceLink} in object set ${\n JSON.stringify(os.objectSet)\n }`,\n );\n }\n\n case \"searchAround\": {\n const contextDef = await calcObjectSet(os.objectSet, ctx);\n invariant(contextDef.type === \"object\");\n\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(\n `Could not find link ${os.link} in object set ${\n JSON.stringify(os.objectSet)\n }`,\n );\n }\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\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(\n os.objectSets.map(async (os) => {\n const counts: Record<string, number> = {};\n const r = await calcObjectSet(os, { ...ctx, counts });\n return { r, counts };\n }),\n );\n\n for (const { counts } 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\n if (returnTypes.length === 0) {\n throw new Error(\n `Could not find any context types for set operation`,\n );\n }\n\n const allMatch = returnTypes.every(({ r }) =>\n r.apiName === returnTypes[0].r.apiName\n );\n\n if (!allMatch) {\n throw new Error(\n `Incompatible context types found for set operation`,\n );\n }\n\n return returnTypes[0].r;\n\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, { ...ctx, methodInput: os.objectSet });\n }\n return calcObjectSet(os.objectSet, { ...ctx, methodInput: os.objectSet });\n\n // used by rdps\n case \"methodInput\":\n invariant(ctx.methodInput, \"methodInput must be provided\");\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, { ...ctx, 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\n case \"nearestNeighbors\":\n return calcObjectSet(os.objectSet, ctx);\n\n default:\n throw new Error(\n `Unhandled ObjectSet type ${(os as any).type}`,\n );\n }\n}\n\nasync function calcRdp(\n dpd: DerivedPropertyDefinition,\n ctx: Ctx,\n): Promise<unknown> {\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(\n dpd.properties.map(innerDpd => calcRdp(innerDpd, ctx)),\n );\n\n // Operates on 2 ordered properties\n case \"subtract\":\n case \"divide\":\n return await Promise.all([\n calcRdp(dpd.left, ctx),\n calcRdp(dpd.right, ctx),\n ]);\n\n // Operates on a single property name\n case \"property\":\n // noop\n return;\n\n default:\n throw new Error(\n `Unhandled DerivedPropertyDefinition type ${(dpd as any).type}`,\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|