@osdk/client 2.5.0-beta.3 → 2.5.0-beta.5
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 +29 -4
- package/build/browser/index.js +2 -0
- package/build/browser/index.js.map +1 -1
- package/build/browser/object/Cache.test.js +1 -1
- package/build/browser/object/Cache.test.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js +1 -0
- package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +6 -0
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js +20 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.test.js +2 -0
- package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/browser/observable/internal/CacheKeys.js.map +1 -1
- package/build/browser/observable/internal/Changes.js.map +1 -1
- package/build/browser/observable/internal/KnownCacheKey.js.map +1 -1
- package/build/browser/observable/internal/OrderByCanonicalizer.js +1 -37
- package/build/browser/observable/internal/OrderByCanonicalizer.js.map +1 -1
- package/build/browser/observable/internal/Store.js +1 -1
- package/build/browser/observable/internal/Store.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +1 -1
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/WeakRefTrie.js +61 -0
- package/build/browser/observable/internal/WeakRefTrie.js.map +1 -0
- package/build/browser/observable/internal/actions/ActionApplication.js.map +1 -0
- package/build/browser/observable/internal/{OptimisticJob.js → actions/OptimisticJob.js} +2 -2
- package/build/browser/observable/internal/actions/OptimisticJob.js.map +1 -0
- package/build/browser/observable/internal/base-list/BaseCollectionQuery.js.map +1 -0
- package/build/browser/observable/internal/base-list/BaseListQuery.js +414 -0
- package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -0
- package/build/browser/observable/internal/base-list/createCollectionConnectable.js.map +1 -0
- package/build/{esm/observable/internal → browser/observable/internal/base-list}/createCollectionConnectable.test.js +1 -1
- package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -0
- package/build/browser/observable/internal/base-list/removeDuplicates.js.map +1 -0
- package/build/browser/observable/internal/links/SpecificLinkCacheKey.js.map +1 -1
- package/build/browser/observable/internal/links/SpecificLinkQuery.js +1 -1
- package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -1
- package/build/browser/observable/internal/{ListCacheKey.js.map → list/ListCacheKey.js.map} +1 -1
- package/build/browser/observable/internal/{ListQuery.js → list/ListQuery.js} +7 -416
- package/build/browser/observable/internal/list/ListQuery.js.map +1 -0
- package/build/browser/observable/internal/list/ListQueryOptions.js +2 -0
- package/build/browser/observable/internal/list/ListQueryOptions.js.map +1 -0
- package/build/browser/observable/internal/list/ListsHelper.js +1 -1
- package/build/browser/observable/internal/list/ListsHelper.js.map +1 -1
- package/build/browser/observable/internal/object/ObjectCacheKey.js +2 -0
- package/build/browser/observable/internal/object/ObjectCacheKey.js.map +1 -0
- package/build/browser/observable/internal/{ObjectQuery.js → object/ObjectQuery.js} +4 -20
- package/build/browser/observable/internal/object/ObjectQuery.js.map +1 -0
- package/build/browser/observable/internal/object/ObjectsHelper.js +15 -1
- package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -1
- package/build/browser/observable/internal/sorting/SortingStrategy.js.map +1 -1
- package/build/browser/observable/internal/testUtils/invalidateList.js.map +1 -1
- package/build/browser/observable/internal/testUtils.js +1 -2
- package/build/browser/observable/internal/testUtils.js.map +1 -1
- package/build/browser/queries/applyQuery.js +1 -1
- package/build/browser/queries/applyQuery.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -2
- package/build/browser/util/extractObjectOrInterfaceType.js +9 -1
- package/build/browser/util/extractObjectOrInterfaceType.js.map +1 -1
- package/build/browser/util/extractObjectOrInterfaceType.test.js +2 -2
- package/build/browser/util/extractObjectOrInterfaceType.test.js.map +1 -1
- package/build/cjs/{chunk-BL56QBYG.cjs → chunk-ELAA4C2C.cjs} +29 -17
- package/build/cjs/chunk-ELAA4C2C.cjs.map +1 -0
- package/build/cjs/{chunk-AOGMSVFN.cjs → chunk-KCMGIMVC.cjs} +91 -69
- package/build/cjs/chunk-KCMGIMVC.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 +568 -572
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/esm/index.js +2 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/object/Cache.test.js +1 -1
- package/build/esm/object/Cache.test.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js +1 -0
- package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +6 -0
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js +20 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.test.js +2 -0
- package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/esm/observable/internal/CacheKeys.js.map +1 -1
- package/build/esm/observable/internal/Changes.js.map +1 -1
- package/build/esm/observable/internal/KnownCacheKey.js.map +1 -1
- package/build/esm/observable/internal/OrderByCanonicalizer.js +1 -37
- package/build/esm/observable/internal/OrderByCanonicalizer.js.map +1 -1
- package/build/esm/observable/internal/Store.js +1 -1
- package/build/esm/observable/internal/Store.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +1 -1
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/WeakRefTrie.js +61 -0
- package/build/esm/observable/internal/WeakRefTrie.js.map +1 -0
- package/build/esm/observable/internal/actions/ActionApplication.js.map +1 -0
- package/build/esm/observable/internal/{OptimisticJob.js → actions/OptimisticJob.js} +2 -2
- package/build/esm/observable/internal/actions/OptimisticJob.js.map +1 -0
- package/build/esm/observable/internal/base-list/BaseCollectionQuery.js.map +1 -0
- package/build/esm/observable/internal/base-list/BaseListQuery.js +414 -0
- package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -0
- package/build/esm/observable/internal/base-list/createCollectionConnectable.js.map +1 -0
- package/build/{browser/observable/internal → esm/observable/internal/base-list}/createCollectionConnectable.test.js +1 -1
- package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -0
- package/build/esm/observable/internal/base-list/removeDuplicates.js.map +1 -0
- package/build/esm/observable/internal/links/SpecificLinkCacheKey.js.map +1 -1
- package/build/esm/observable/internal/links/SpecificLinkQuery.js +1 -1
- package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -1
- package/build/esm/observable/internal/{ListCacheKey.js.map → list/ListCacheKey.js.map} +1 -1
- package/build/esm/observable/internal/{ListQuery.js → list/ListQuery.js} +7 -416
- package/build/esm/observable/internal/list/ListQuery.js.map +1 -0
- package/build/esm/observable/internal/list/ListQueryOptions.js +2 -0
- package/build/esm/observable/internal/list/ListQueryOptions.js.map +1 -0
- package/build/esm/observable/internal/list/ListsHelper.js +1 -1
- package/build/esm/observable/internal/list/ListsHelper.js.map +1 -1
- package/build/esm/observable/internal/object/ObjectCacheKey.js +2 -0
- package/build/esm/observable/internal/object/ObjectCacheKey.js.map +1 -0
- package/build/esm/observable/internal/{ObjectQuery.js → object/ObjectQuery.js} +4 -20
- package/build/esm/observable/internal/object/ObjectQuery.js.map +1 -0
- package/build/esm/observable/internal/object/ObjectsHelper.js +15 -1
- package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -1
- package/build/esm/observable/internal/sorting/SortingStrategy.js.map +1 -1
- package/build/esm/observable/internal/testUtils/invalidateList.js.map +1 -1
- package/build/esm/observable/internal/testUtils.js +1 -2
- package/build/esm/observable/internal/testUtils.js.map +1 -1
- package/build/esm/queries/applyQuery.js +1 -1
- package/build/esm/queries/applyQuery.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -2
- package/build/esm/util/extractObjectOrInterfaceType.js +9 -1
- package/build/esm/util/extractObjectOrInterfaceType.js.map +1 -1
- package/build/esm/util/extractObjectOrInterfaceType.test.js +2 -2
- package/build/esm/util/extractObjectOrInterfaceType.test.js.map +1 -1
- package/build/types/index.d.ts +1 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/observable/internal/Changes.d.ts +2 -2
- package/build/types/observable/internal/Changes.d.ts.map +1 -1
- package/build/types/observable/internal/KnownCacheKey.d.ts +2 -2
- package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -1
- package/build/types/observable/internal/OrderByCanonicalizer.d.ts +0 -7
- package/build/types/observable/internal/OrderByCanonicalizer.d.ts.map +1 -1
- package/build/types/observable/internal/WeakRefTrie.d.ts +13 -0
- package/build/types/observable/internal/WeakRefTrie.d.ts.map +1 -0
- package/build/types/observable/internal/{ActionApplication.d.ts → actions/ActionApplication.d.ts} +2 -2
- package/build/types/observable/internal/{ActionApplication.d.ts.map → actions/ActionApplication.d.ts.map} +1 -1
- package/build/types/observable/internal/{OptimisticJob.d.ts → actions/OptimisticJob.d.ts} +4 -4
- package/build/types/observable/internal/actions/OptimisticJob.d.ts.map +1 -0
- package/build/types/observable/internal/{BaseCollectionQuery.d.ts → base-list/BaseCollectionQuery.d.ts} +4 -4
- package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts.map +1 -0
- package/build/types/observable/internal/{ListQuery.d.ts → base-list/BaseListQuery.d.ts} +8 -91
- package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -0
- package/build/types/observable/internal/{createCollectionConnectable.d.ts → base-list/createCollectionConnectable.d.ts} +3 -3
- package/build/types/observable/internal/base-list/createCollectionConnectable.d.ts.map +1 -0
- package/build/types/observable/internal/base-list/createCollectionConnectable.test.d.ts.map +1 -0
- package/build/types/observable/internal/{removeDuplicates.d.ts → base-list/removeDuplicates.d.ts} +2 -2
- package/build/types/observable/internal/base-list/removeDuplicates.d.ts.map +1 -0
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts +1 -1
- package/build/types/observable/internal/links/SpecificLinkCacheKey.d.ts.map +1 -1
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts +1 -1
- package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -1
- package/build/types/observable/internal/{ListCacheKey.d.ts → list/ListCacheKey.d.ts} +4 -4
- package/build/types/observable/internal/list/ListCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListQuery.d.ts +73 -0
- package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListQueryOptions.d.ts +4 -0
- package/build/types/observable/internal/list/ListQueryOptions.d.ts.map +1 -0
- package/build/types/observable/internal/list/ListsHelper.d.ts +1 -1
- package/build/types/observable/internal/list/ListsHelper.d.ts.map +1 -1
- package/build/types/observable/internal/object/ObjectCacheKey.d.ts +5 -0
- package/build/types/observable/internal/object/ObjectCacheKey.d.ts.map +1 -0
- package/build/types/observable/internal/{ObjectQuery.d.ts → object/ObjectQuery.d.ts} +8 -10
- package/build/types/observable/internal/object/ObjectQuery.d.ts.map +1 -0
- package/build/types/observable/internal/object/ObjectsHelper.d.ts +1 -1
- package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -1
- package/build/types/observable/internal/sorting/SortingStrategy.d.ts +1 -1
- package/build/types/observable/internal/sorting/SortingStrategy.d.ts.map +1 -1
- package/build/types/observable/internal/testUtils.d.ts +1 -1
- package/build/types/observable/internal/testUtils.d.ts.map +1 -1
- package/package.json +23 -23
- package/build/browser/observable/internal/ActionApplication.js.map +0 -1
- package/build/browser/observable/internal/BaseCollectionQuery.js.map +0 -1
- package/build/browser/observable/internal/ListQuery.js.map +0 -1
- package/build/browser/observable/internal/ObjectQuery.js.map +0 -1
- package/build/browser/observable/internal/OptimisticJob.js.map +0 -1
- package/build/browser/observable/internal/createCollectionConnectable.js.map +0 -1
- package/build/browser/observable/internal/createCollectionConnectable.test.js.map +0 -1
- package/build/browser/observable/internal/removeDuplicates.js.map +0 -1
- package/build/cjs/chunk-AOGMSVFN.cjs.map +0 -1
- package/build/cjs/chunk-BL56QBYG.cjs.map +0 -1
- package/build/esm/observable/internal/ActionApplication.js.map +0 -1
- package/build/esm/observable/internal/BaseCollectionQuery.js.map +0 -1
- package/build/esm/observable/internal/ListQuery.js.map +0 -1
- package/build/esm/observable/internal/ObjectQuery.js.map +0 -1
- package/build/esm/observable/internal/OptimisticJob.js.map +0 -1
- package/build/esm/observable/internal/createCollectionConnectable.js.map +0 -1
- package/build/esm/observable/internal/createCollectionConnectable.test.js.map +0 -1
- package/build/esm/observable/internal/removeDuplicates.js.map +0 -1
- package/build/types/observable/internal/BaseCollectionQuery.d.ts.map +0 -1
- package/build/types/observable/internal/ListCacheKey.d.ts.map +0 -1
- package/build/types/observable/internal/ListQuery.d.ts.map +0 -1
- package/build/types/observable/internal/ObjectQuery.d.ts.map +0 -1
- package/build/types/observable/internal/OptimisticJob.d.ts.map +0 -1
- package/build/types/observable/internal/createCollectionConnectable.d.ts.map +0 -1
- package/build/types/observable/internal/createCollectionConnectable.test.d.ts.map +0 -1
- package/build/types/observable/internal/removeDuplicates.d.ts.map +0 -1
- /package/build/browser/observable/internal/{ActionApplication.js → actions/ActionApplication.js} +0 -0
- /package/build/browser/observable/internal/{BaseCollectionQuery.js → base-list/BaseCollectionQuery.js} +0 -0
- /package/build/browser/observable/internal/{createCollectionConnectable.js → base-list/createCollectionConnectable.js} +0 -0
- /package/build/browser/observable/internal/{removeDuplicates.js → base-list/removeDuplicates.js} +0 -0
- /package/build/browser/observable/internal/{ListCacheKey.js → list/ListCacheKey.js} +0 -0
- /package/build/esm/observable/internal/{ActionApplication.js → actions/ActionApplication.js} +0 -0
- /package/build/esm/observable/internal/{BaseCollectionQuery.js → base-list/BaseCollectionQuery.js} +0 -0
- /package/build/esm/observable/internal/{createCollectionConnectable.js → base-list/createCollectionConnectable.js} +0 -0
- /package/build/esm/observable/internal/{removeDuplicates.js → base-list/removeDuplicates.js} +0 -0
- /package/build/esm/observable/internal/{ListCacheKey.js → list/ListCacheKey.js} +0 -0
- /package/build/types/observable/internal/{createCollectionConnectable.test.d.ts → base-list/createCollectionConnectable.test.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# @osdk/client
|
|
2
2
|
|
|
3
|
+
## 2.5.0-beta.5
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3d7461d: Fix applyQuery for marketplace installations
|
|
8
|
+
- 052a96b: Add $link support.
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- Updated dependencies [052a96b]
|
|
13
|
+
- @osdk/api@2.5.0-beta.5
|
|
14
|
+
- @osdk/client.unstable@2.5.0-beta.5
|
|
15
|
+
- @osdk/generator-converters@2.5.0-beta.5
|
|
16
|
+
|
|
17
|
+
## 2.5.0-beta.4
|
|
18
|
+
|
|
19
|
+
### Minor Changes
|
|
20
|
+
|
|
21
|
+
- a00d2ed: Update Platform SDK dependencies
|
|
22
|
+
- a96d89e: Update Platform SDK dependencies
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- Updated dependencies [a00d2ed]
|
|
27
|
+
- Updated dependencies [a96d89e]
|
|
28
|
+
- @osdk/generator-converters@2.5.0-beta.4
|
|
29
|
+
- @osdk/api@2.5.0-beta.4
|
|
30
|
+
- @osdk/client.unstable@2.5.0-beta.4
|
|
31
|
+
|
|
3
32
|
## 2.5.0-beta.3
|
|
4
33
|
|
|
5
34
|
### Minor Changes
|
|
@@ -25,7 +54,6 @@
|
|
|
25
54
|
- 7160276: Add order by relevance support to nearest neighbors
|
|
26
55
|
- 7cdab1d: Update platform sdk dependencies
|
|
27
56
|
- b9e9a88: Refactor Observable Client with enhanced observer architecture
|
|
28
|
-
|
|
29
57
|
- Restructure observable implementation with dedicated observer classes (LinkObservers, ListObservers, ObjectObservers)
|
|
30
58
|
- Improve type safety for link observation operations with enhanced generic constraints
|
|
31
59
|
- Add QuerySubscription and UnsubscribableWrapper for better encapsulation
|
|
@@ -214,7 +242,6 @@
|
|
|
214
242
|
The `useOsdkAction` hook in `@osdk/react` now provides a `validateAction` function that allows you to check if an action is valid without executing it. This is useful for providing real-time validation feedback to users before they commit to performing an action.
|
|
215
243
|
|
|
216
244
|
### New features:
|
|
217
|
-
|
|
218
245
|
- **validateAction**: A new async function that validates action parameters without executing the action
|
|
219
246
|
- **isValidating**: A boolean state that indicates when validation is in progress
|
|
220
247
|
- **validationResult**: Contains the validation response from the server, including whether the action is valid and any validation errors
|
|
@@ -237,7 +264,6 @@
|
|
|
237
264
|
```
|
|
238
265
|
|
|
239
266
|
### Implementation details:
|
|
240
|
-
|
|
241
267
|
- Multiple validation calls can be made - new calls automatically cancel previous pending validations
|
|
242
268
|
- Validation and action execution are mutually exclusive - you cannot validate while an action is being applied and vice versa
|
|
243
269
|
- The underlying `ObservableClient` in `@osdk/client` has been extended with a `validateAction` method to support this functionality
|
|
@@ -2135,7 +2161,6 @@
|
|
|
2135
2161
|
- 97f627e: Supports more than one concurrent subscription
|
|
2136
2162
|
|
|
2137
2163
|
Also:
|
|
2138
|
-
|
|
2139
2164
|
- Introduced an optional pino logger to the client
|
|
2140
2165
|
- Fixes issues with where clauses for equality in subscriptions
|
|
2141
2166
|
- Fixes issues with inconsistent id name and apiName's in the mapping data
|
package/build/browser/index.js
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
/* eslint-disable @typescript-eslint/no-deprecated */
|
|
18
|
+
|
|
17
19
|
export { isOk, NULL_VALUE } from "@osdk/api";
|
|
18
20
|
export { PalantirApiError } from "@osdk/shared.net.errors";
|
|
19
21
|
export { ActionValidationError } from "./actions/ActionValidationError.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["isOk","NULL_VALUE","PalantirApiError","ActionValidationError","createClient","createPlatformClient","createAttachmentUpload","extractDate","extractDateInLocalTime","extractDateInUTC","createObjectSpecifierFromPrimaryKey"],"sources":["index.ts"],"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 type {\n ActionDefinition,\n ActionEditResponse,\n ActionMetadata,\n ActionParam,\n ActionReturnTypeForOptions,\n ActionValidationResponse,\n ApplyActionOptions,\n ApplyBatchActionOptions,\n Attachment,\n CompileTimeMetadata,\n InterfaceDefinition,\n InterfaceMetadata,\n Logger,\n ObjectMetadata,\n ObjectSet,\n ObjectSpecifier,\n ObjectTypeDefinition,\n Osdk,\n OsdkObject,\n OsdkObjectCreatePropertyType,\n OsdkObjectPropertyType,\n PageResult,\n PropertyDef,\n PropertyKeys,\n PropertyValueWireToClient,\n QueryDefinition,\n QueryParam,\n QueryResult,\n Range,\n Result,\n SingleLinkAccessor,\n ThreeDimensionalAggregation,\n TwoDimensionalAggregation,\n VersionBound,\n WhereClause,\n} from \"@osdk/api\";\nexport {
|
|
1
|
+
{"version":3,"file":"index.js","names":["isOk","NULL_VALUE","PalantirApiError","ActionValidationError","createClient","createPlatformClient","createAttachmentUpload","extractDate","extractDateInLocalTime","extractDateInUTC","createObjectSpecifierFromPrimaryKey"],"sources":["index.ts"],"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\n/* eslint-disable @typescript-eslint/no-deprecated */\n\nexport { isOk, NULL_VALUE } from \"@osdk/api\";\nexport type {\n ActionDefinition,\n ActionEditResponse,\n ActionMetadata,\n ActionParam,\n ActionReturnTypeForOptions,\n ActionValidationResponse,\n ApplyActionOptions,\n ApplyBatchActionOptions,\n Attachment,\n CompileTimeMetadata,\n InterfaceDefinition,\n InterfaceMetadata,\n Logger,\n ObjectMetadata,\n ObjectSet,\n ObjectSpecifier,\n ObjectTypeDefinition,\n Osdk,\n OsdkObject,\n OsdkObjectCreatePropertyType,\n OsdkObjectPropertyType,\n PageResult,\n PropertyDef,\n PropertyKeys,\n PropertyValueWireToClient,\n QueryDefinition,\n QueryParam,\n QueryResult,\n Range,\n Result,\n SingleLinkAccessor,\n ThreeDimensionalAggregation,\n TwoDimensionalAggregation,\n VersionBound,\n WhereClause,\n} from \"@osdk/api\";\nexport { PalantirApiError } from \"@osdk/shared.net.errors\";\n\nexport { ActionValidationError } from \"./actions/ActionValidationError.js\";\nexport type { Client } from \"./Client.js\";\nexport { createClient } from \"./createClient.js\";\nexport { createPlatformClient } from \"./createPlatformClient.js\";\nexport type { PlatformClient } from \"./createPlatformClient.js\";\nexport { createAttachmentUpload } from \"./object/AttachmentUpload.js\";\nexport type { ResultOrError } from \"./ResultOrError.js\";\n\nexport {\n extractDate,\n extractDateInLocalTime,\n extractDateInUTC,\n} from \"./util/datetimeConverters.js\";\n\nexport { createObjectSpecifierFromPrimaryKey } from \"./util/objectSpecifierUtils.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAASA,IAAI,EAAEC,UAAU,QAAQ,WAAW;AAsC5C,SAASC,gBAAgB,QAAQ,yBAAyB;AAE1D,SAASC,qBAAqB,QAAQ,oCAAoC;AAE1E,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,oBAAoB,QAAQ,2BAA2B;AAEhE,SAASC,sBAAsB,QAAQ,8BAA8B;AAGrE,SACEC,WAAW,EACXC,sBAAsB,EACtBC,gBAAgB,QACX,8BAA8B;AAErC,SAASC,mCAAmC,QAAQ,gCAAgC","ignoreList":[]}
|
|
@@ -90,7 +90,7 @@ describe("AsyncCache", () => {
|
|
|
90
90
|
asyncSetSpy = vi.spyOn(asyncCache, "set");
|
|
91
91
|
asyncCacheSpies = {
|
|
92
92
|
get: vi.spyOn(asyncCache, "get"),
|
|
93
|
-
set:
|
|
93
|
+
set: asyncSetSpy,
|
|
94
94
|
getOrUndefined: vi.spyOn(asyncCache, "getOrUndefined")
|
|
95
95
|
};
|
|
96
96
|
await expectSaneCalls();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cache.test.js","names":["pDefer","promiseStateAsync","pStateAsync","beforeAll","beforeEach","describe","expect","it","vi","createAsyncClientCache","createClientCache","createSpys","cache","get","spyOn","remove","set","fauxClient","clientCacheKey","fauxClient2","client","key","Promise","resolve","toEqual","mock","fn","setTimeout","all","toHaveBeenCalledTimes","factoryFn","inProgress","asyncCache","asyncCacheSpies","asyncSetSpy","factoryDefers","getPromises","expectedAsyncSets","expectedFactoryCalls","successfulFetches","pendingFetches","expectedPending","mockImplementation","defer","push","promise","Set","createSyncCacheMock","mockReturnValueOnce","getOrUndefined","expectSaneCalls","initiateAsyncCacheGetFor","has","add","before","getStats","toStrictEqual","asyncCacheGetCalls","resolveFactoryCall","num","value","toBe","calls","toContain","not","delete","fulfilledFactoryCalls","rejectFactoryCall","error","reject","Error","i","length","results","type","rejects","toThrowError","map","d","filter","a","rejectedFactoryCalls","stats","size","itRejectsAllRequestsOf","settledResults","toMatchObject","itDoesNotRejectLastRequestRightAway","at","describeRejectsFactoryCall","describeResolvesFactoryCall","describeAsyncCacheGetFor","itFulfillsAsyncCacheGets","indexes","join","itLeavesAsyncGetPromisesInStates","states","p","itHasOnlyInvokedFactoryNTimes","n","itReturnsForAsyncGet","toHaveBeenCalled","undefined"],"sources":["Cache.test.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport type { PromiseState } from \"p-state\";\nimport { promiseStateAsync as pStateAsync } from \"p-state\";\nimport type { Mock, MockInstance } from \"vitest\";\nimport { beforeAll, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport type { AsyncClientCache, AsyncFactory } from \"./Cache.js\";\nimport { createAsyncClientCache, createClientCache } from \"./Cache.js\";\n\nfunction createSpys(cache: ReturnType<typeof createClientCache>) {\n return {\n get: vi.spyOn(cache, \"get\"),\n remove: vi.spyOn(cache, \"remove\"),\n set: vi.spyOn(cache, \"set\"),\n };\n}\n\ndescribe(\"AsyncCache\", () => {\n beforeAll(() => {\n });\n const fauxClient = { clientCacheKey: {} } as MinimalClient;\n const fauxClient2 = { clientCacheKey: {} } as MinimalClient;\n\n it(\"keeps clients separate\", async () => {\n const cache = createAsyncClientCache((client: MinimalClient, key: string) =>\n Promise.resolve(key)\n );\n await cache.set(fauxClient, \"k\", \"v\");\n expect(await cache.get(fauxClient2, \"k\")).toEqual(\"k\");\n });\n\n it(\"has a client and its copy access the same cache\", async () => {\n const cache = createAsyncClientCache((client: MinimalClient, key: string) =>\n Promise.resolve(key)\n );\n await cache.set(fauxClient, \"k\", \"v\");\n expect(await cache.get({ ...fauxClient }, \"k\")).toEqual(\"v\");\n });\n\n it(\"does not double factory\", async () => {\n const resolveToKey = (client: MinimalClient, key: string) =>\n new Promise<string>((resolve, reject) => {\n setTimeout(() => resolve(key), 100);\n });\n\n const mock = vi.fn(resolveToKey);\n const cache = createAsyncClientCache(mock);\n\n await Promise.all([\n cache.get(fauxClient, \"a\"),\n cache.get(fauxClient, \"a\"),\n cache.get(fauxClient, \"a\"),\n cache.get(fauxClient, \"b\"),\n cache.get(fauxClient, \"b\"),\n cache.get(fauxClient, \"b\"),\n cache.get(fauxClient, \"b\"),\n ]);\n\n expect(mock).toHaveBeenCalledTimes(2);\n });\n\n describe(\"race checks\", () => {\n let factoryFn: Mock<AsyncFactory<any, any>>;\n let cache: ReturnType<typeof createSpys>;\n let inProgress: ReturnType<typeof createSpys>;\n let asyncCache: AsyncClientCache<string, string>;\n let asyncCacheSpies: {\n [K in keyof typeof asyncCache]: MockInstance<typeof asyncCache[K]>;\n };\n let asyncSetSpy: MockInstance<typeof asyncCache.set>;\n let factoryDefers: DeferredPromise<string>[];\n let getPromises: Promise<string>[];\n\n let expectedAsyncSets: number;\n let expectedFactoryCalls: number;\n\n let successfulFetches: Set<string>;\n let pendingFetches: Set<string>;\n let expectedPending: Record<string, number> = {};\n\n beforeEach(async () => {\n factoryFn = vi.fn();\n factoryFn.mockImplementation(() => {\n const defer = pDefer<string>();\n factoryDefers.push(defer);\n return defer.promise;\n });\n\n getPromises = [];\n factoryDefers = [];\n\n expectedAsyncSets = 0;\n expectedFactoryCalls = 0;\n\n successfulFetches = new Set();\n pendingFetches = new Set();\n expectedPending = {};\n\n const createSyncCacheMock = vi.fn();\n\n cache = createSpys(createClientCache() as any);\n inProgress = createSpys(createClientCache() as any);\n createSyncCacheMock.mockReturnValueOnce(cache);\n createSyncCacheMock.mockReturnValueOnce(inProgress);\n\n asyncCache = createAsyncClientCache<string, string>(\n factoryFn,\n createSyncCacheMock as any,\n );\n\n asyncSetSpy = vi.spyOn(asyncCache, \"set\");\n asyncCacheSpies = {\n get: vi.spyOn(asyncCache, \"get\"),\n set: vi.spyOn(asyncCache, \"set\"),\n getOrUndefined: vi.spyOn(asyncCache, \"getOrUndefined\"),\n };\n\n await expectSaneCalls();\n });\n\n function initiateAsyncCacheGetFor(key: string) {\n return async () => {\n if (!successfulFetches.has(key)) {\n expectedPending[key] = (expectedPending[key] ?? 0) + 1;\n if (!pendingFetches.has(key)) {\n pendingFetches.add(key);\n expectedFactoryCalls++;\n expectedAsyncSets++;\n }\n }\n\n // check before and after make sense so that `expectSaneCalls` can work\n const before = await getStats();\n getPromises.push(asyncCache.get(fauxClient, key));\n expect(await getStats()).toStrictEqual({\n ...before,\n asyncCacheGetCalls: before.asyncCacheGetCalls + 1,\n // may or may not bump the unique keys\n });\n\n await expectSaneCalls();\n };\n }\n\n function resolveFactoryCall(\n num: number,\n key: string,\n value = `${key}Result`,\n ) {\n return async () => {\n // <preconditions>\n expect(await pStateAsync(factoryDefers[num].promise)).toBe(\n \"pending\",\n );\n expect(factoryFn.mock.calls[num][1]).toBe(key);\n expect(pendingFetches).toContain(key);\n expect(successfulFetches).not.toContain(key);\n // </preconditions>\n\n // Update expectations\n pendingFetches.delete(value);\n successfulFetches.add(value);\n\n // check before and after make sense so that `expectSaneCalls` can work\n const before = await getStats();\n factoryDefers[num].resolve(value);\n expect(await getStats()).toStrictEqual({\n ...before,\n fulfilledFactoryCalls: before.fulfilledFactoryCalls + 1,\n });\n\n await expectSaneCalls();\n };\n }\n\n function rejectFactoryCall(\n num: number,\n key: string,\n error = `${key}Error`,\n ) {\n return async () => {\n expect(factoryFn.mock.calls[num][1]).toBe(key);\n expect(pendingFetches).toContain(key);\n\n pendingFetches.delete(key);\n factoryDefers[num].reject(new Error(error));\n\n // we need to ensure the outstanding get promises are rejected\n for (let i = 0; i < asyncCacheSpies.get.mock.calls.length; i++) {\n if (asyncCacheSpies.get.mock.calls[i][1] === key) {\n if (asyncCacheSpies.get.mock.results[i].type === \"return\") {\n await expect(getPromises[i]).rejects.toThrowError();\n }\n }\n }\n\n await expectSaneCalls();\n };\n }\n\n async function getStats() {\n return {\n fulfilledFactoryCalls: (await Promise.all(\n factoryDefers.map(d => pStateAsync(d.promise)),\n )).filter(a => a === \"fulfilled\").length,\n rejectedFactoryCalls: (await Promise.all(\n factoryDefers.map(d => pStateAsync(d.promise)),\n )).filter(a => a === \"rejected\").length,\n asyncCacheGetCalls: asyncCacheSpies.get.mock.calls.length,\n };\n }\n\n async function expectSaneCalls() {\n const stats = await getStats();\n\n // both of these should be connected\n expect(factoryFn).toHaveBeenCalledTimes(expectedFactoryCalls);\n expect(inProgress.set).toHaveBeenCalledTimes(expectedFactoryCalls);\n\n expect(asyncSetSpy).toHaveBeenCalledTimes(expectedAsyncSets);\n\n // inProgress should be removed after a success or failure\n expect(inProgress.remove).toHaveBeenCalledTimes(\n stats.fulfilledFactoryCalls + stats.rejectedFactoryCalls,\n );\n\n // the inner cache gets checked once per async get\n expect(cache.get).toHaveBeenCalledTimes(stats.asyncCacheGetCalls);\n\n // the inner cache only gets set after a successful factory call\n expect(cache.set).toHaveBeenCalledTimes(successfulFetches.size);\n }\n\n function itRejectsAllRequestsOf(key: string) {\n it(`rejects all ${key} requests`, () => {\n for (\n let i = 0;\n i < asyncCacheSpies.get.mock.calls.length;\n i++\n ) {\n if (asyncCacheSpies.get.mock.calls[i][1] === key) {\n expect(asyncCacheSpies.get.mock.settledResults[i].type).toBe(\n \"rejected\",\n );\n expect(asyncCacheSpies.get.mock.settledResults[i].value)\n .toMatchObject(new Error(\"aError\"));\n }\n }\n });\n }\n\n function itDoesNotRejectLastRequestRightAway() {\n it(\"does not reject right away\", () => {\n expect(asyncCacheSpies.get.mock.results.at(-1)?.type).toBe(\n \"return\",\n );\n });\n }\n\n function describeRejectsFactoryCall(\n num: number,\n key: string,\n fn: () => void,\n ) {\n return describe(`rejects factory request ${num} for ${key}`, () => {\n beforeEach(rejectFactoryCall(num, key));\n itRejectsAllRequestsOf(\"a\");\n\n fn();\n });\n }\n\n function describeResolvesFactoryCall(\n num: number,\n key: string,\n fn: () => void,\n ) {\n return describe(`resolves factory request ${num} for ${key}`, () => {\n beforeEach(resolveFactoryCall(num, key));\n fn();\n });\n }\n\n function describeAsyncCacheGetFor(key: string, fn: () => void) {\n return describe(`gets a request for '${key}'`, () => {\n beforeEach(initiateAsyncCacheGetFor(key));\n itDoesNotRejectLastRequestRightAway();\n\n fn();\n });\n }\n\n function itFulfillsAsyncCacheGets(indexes: number[], value: string) {\n it(`fulfills the AsyncCache.get()'s ${indexes.join(\", \")} with '${value}'`, async () => {\n for (const i of indexes) {\n expect(await pStateAsync(getPromises[i])).toBe(\"fulfilled\");\n expect(await getPromises[i]).toBe(value);\n }\n });\n }\n\n function itLeavesAsyncGetPromisesInStates(states: PromiseState[]) {\n it(`leaves the AsyncCache.get()'s in states [${states.join(\", \")}]`, async () => {\n expect(await Promise.all(getPromises.map(p => pStateAsync(p))))\n .toStrictEqual(states);\n for (let i = 0; i < states.length; i++) {\n expect(await pStateAsync(getPromises[i])).toBe(states[i]);\n }\n });\n }\n\n function itHasOnlyInvokedFactoryNTimes(n: number) {\n it(`has only invoked the factory ${n} times`, () => {\n expect(factoryFn).toHaveBeenCalledTimes(n);\n });\n }\n\n function itReturnsForAsyncGet(results: any[]) {\n it(\"returns for async get\", () => {\n expect(asyncCacheSpies.get.mock.settledResults.map(a => a.value))\n .toEqual(results);\n });\n }\n\n it(\"has a minimal base state\", () => {\n expect(cache.get).not.toHaveBeenCalled();\n expect(inProgress.get).not.toHaveBeenCalled();\n expect(factoryFn).not.toHaveBeenCalled();\n expect(inProgress.set).not.toHaveBeenCalled();\n });\n\n describeAsyncCacheGetFor(\"a\", () => {\n itLeavesAsyncGetPromisesInStates([\"pending\"]);\n itHasOnlyInvokedFactoryNTimes(1);\n\n describeAsyncCacheGetFor(\"a\", () => {\n itLeavesAsyncGetPromisesInStates([\"pending\", \"pending\"]);\n itHasOnlyInvokedFactoryNTimes(1);\n\n describe(\"before the first resolves\", () => {\n itLeavesAsyncGetPromisesInStates([\"pending\", \"pending\"]);\n itHasOnlyInvokedFactoryNTimes(1);\n\n describeRejectsFactoryCall(0, \"a\", () => {\n itLeavesAsyncGetPromisesInStates([\"rejected\", \"rejected\"]);\n describeAsyncCacheGetFor(\"a\", () => {\n itDoesNotRejectLastRequestRightAway();\n itHasOnlyInvokedFactoryNTimes(2);\n });\n });\n\n describeAsyncCacheGetFor(\"b\", () => {\n itLeavesAsyncGetPromisesInStates([\"pending\", \"pending\", \"pending\"]);\n itHasOnlyInvokedFactoryNTimes(2);\n\n describeResolvesFactoryCall(1, \"b\", () => {\n itLeavesAsyncGetPromisesInStates([\n \"pending\",\n \"pending\",\n \"fulfilled\",\n ]);\n\n itReturnsForAsyncGet([\n undefined,\n undefined,\n \"bResult\",\n ]);\n });\n });\n\n describeResolvesFactoryCall(0, \"a\", () => {\n itFulfillsAsyncCacheGets([0, 1], \"aResult\");\n itLeavesAsyncGetPromisesInStates([\n \"fulfilled\",\n \"fulfilled\",\n ]);\n\n describeAsyncCacheGetFor(\"a\", () => {\n itHasOnlyInvokedFactoryNTimes(1);\n itLeavesAsyncGetPromisesInStates([\n \"fulfilled\",\n \"fulfilled\",\n \"fulfilled\",\n ]);\n itReturnsForAsyncGet([\n \"aResult\",\n \"aResult\",\n \"aResult\",\n ]);\n });\n });\n });\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Cache.test.js","names":["pDefer","promiseStateAsync","pStateAsync","beforeAll","beforeEach","describe","expect","it","vi","createAsyncClientCache","createClientCache","createSpys","cache","get","spyOn","remove","set","fauxClient","clientCacheKey","fauxClient2","client","key","Promise","resolve","toEqual","mock","fn","setTimeout","all","toHaveBeenCalledTimes","factoryFn","inProgress","asyncCache","asyncCacheSpies","asyncSetSpy","factoryDefers","getPromises","expectedAsyncSets","expectedFactoryCalls","successfulFetches","pendingFetches","expectedPending","mockImplementation","defer","push","promise","Set","createSyncCacheMock","mockReturnValueOnce","getOrUndefined","expectSaneCalls","initiateAsyncCacheGetFor","has","add","before","getStats","toStrictEqual","asyncCacheGetCalls","resolveFactoryCall","num","value","toBe","calls","toContain","not","delete","fulfilledFactoryCalls","rejectFactoryCall","error","reject","Error","i","length","results","type","rejects","toThrowError","map","d","filter","a","rejectedFactoryCalls","stats","size","itRejectsAllRequestsOf","settledResults","toMatchObject","itDoesNotRejectLastRequestRightAway","at","describeRejectsFactoryCall","describeResolvesFactoryCall","describeAsyncCacheGetFor","itFulfillsAsyncCacheGets","indexes","join","itLeavesAsyncGetPromisesInStates","states","p","itHasOnlyInvokedFactoryNTimes","n","itReturnsForAsyncGet","toHaveBeenCalled","undefined"],"sources":["Cache.test.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport type { PromiseState } from \"p-state\";\nimport { promiseStateAsync as pStateAsync } from \"p-state\";\nimport type { Mock, MockInstance } from \"vitest\";\nimport { beforeAll, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport type { AsyncClientCache, AsyncFactory } from \"./Cache.js\";\nimport { createAsyncClientCache, createClientCache } from \"./Cache.js\";\n\nfunction createSpys(cache: ReturnType<typeof createClientCache>) {\n return {\n get: vi.spyOn(cache, \"get\"),\n remove: vi.spyOn(cache, \"remove\"),\n set: vi.spyOn(cache, \"set\"),\n };\n}\n\ndescribe(\"AsyncCache\", () => {\n beforeAll(() => {\n });\n const fauxClient = { clientCacheKey: {} } as MinimalClient;\n const fauxClient2 = { clientCacheKey: {} } as MinimalClient;\n\n it(\"keeps clients separate\", async () => {\n const cache = createAsyncClientCache((client: MinimalClient, key: string) =>\n Promise.resolve(key)\n );\n await cache.set(fauxClient, \"k\", \"v\");\n expect(await cache.get(fauxClient2, \"k\")).toEqual(\"k\");\n });\n\n it(\"has a client and its copy access the same cache\", async () => {\n const cache = createAsyncClientCache((client: MinimalClient, key: string) =>\n Promise.resolve(key)\n );\n await cache.set(fauxClient, \"k\", \"v\");\n expect(await cache.get({ ...fauxClient }, \"k\")).toEqual(\"v\");\n });\n\n it(\"does not double factory\", async () => {\n const resolveToKey = (client: MinimalClient, key: string) =>\n new Promise<string>((resolve, reject) => {\n setTimeout(() => resolve(key), 100);\n });\n\n const mock = vi.fn(resolveToKey);\n const cache = createAsyncClientCache(mock);\n\n await Promise.all([\n cache.get(fauxClient, \"a\"),\n cache.get(fauxClient, \"a\"),\n cache.get(fauxClient, \"a\"),\n cache.get(fauxClient, \"b\"),\n cache.get(fauxClient, \"b\"),\n cache.get(fauxClient, \"b\"),\n cache.get(fauxClient, \"b\"),\n ]);\n\n expect(mock).toHaveBeenCalledTimes(2);\n });\n\n describe(\"race checks\", () => {\n let factoryFn: Mock<AsyncFactory<any, any>>;\n let cache: ReturnType<typeof createSpys>;\n let inProgress: ReturnType<typeof createSpys>;\n let asyncCache: AsyncClientCache<string, string>;\n let asyncCacheSpies: {\n [K in keyof typeof asyncCache]: MockInstance<typeof asyncCache[K]>;\n };\n let asyncSetSpy: MockInstance<typeof asyncCache.set>;\n let factoryDefers: DeferredPromise<string>[];\n let getPromises: Promise<string>[];\n\n let expectedAsyncSets: number;\n let expectedFactoryCalls: number;\n\n let successfulFetches: Set<string>;\n let pendingFetches: Set<string>;\n let expectedPending: Record<string, number> = {};\n\n beforeEach(async () => {\n factoryFn = vi.fn();\n factoryFn.mockImplementation(() => {\n const defer = pDefer<string>();\n factoryDefers.push(defer);\n return defer.promise;\n });\n\n getPromises = [];\n factoryDefers = [];\n\n expectedAsyncSets = 0;\n expectedFactoryCalls = 0;\n\n successfulFetches = new Set();\n pendingFetches = new Set();\n expectedPending = {};\n\n const createSyncCacheMock = vi.fn();\n\n cache = createSpys(createClientCache() as any);\n inProgress = createSpys(createClientCache() as any);\n createSyncCacheMock.mockReturnValueOnce(cache);\n createSyncCacheMock.mockReturnValueOnce(inProgress);\n\n asyncCache = createAsyncClientCache<string, string>(\n factoryFn,\n createSyncCacheMock as any,\n );\n\n asyncSetSpy = vi.spyOn(asyncCache, \"set\");\n asyncCacheSpies = {\n get: vi.spyOn(asyncCache, \"get\"),\n set: asyncSetSpy,\n getOrUndefined: vi.spyOn(asyncCache, \"getOrUndefined\"),\n };\n\n await expectSaneCalls();\n });\n\n function initiateAsyncCacheGetFor(key: string) {\n return async () => {\n if (!successfulFetches.has(key)) {\n expectedPending[key] = (expectedPending[key] ?? 0) + 1;\n if (!pendingFetches.has(key)) {\n pendingFetches.add(key);\n expectedFactoryCalls++;\n expectedAsyncSets++;\n }\n }\n\n // check before and after make sense so that `expectSaneCalls` can work\n const before = await getStats();\n getPromises.push(asyncCache.get(fauxClient, key));\n expect(await getStats()).toStrictEqual({\n ...before,\n asyncCacheGetCalls: before.asyncCacheGetCalls + 1,\n // may or may not bump the unique keys\n });\n\n await expectSaneCalls();\n };\n }\n\n function resolveFactoryCall(\n num: number,\n key: string,\n value = `${key}Result`,\n ) {\n return async () => {\n // <preconditions>\n expect(await pStateAsync(factoryDefers[num].promise)).toBe(\n \"pending\",\n );\n expect(factoryFn.mock.calls[num][1]).toBe(key);\n expect(pendingFetches).toContain(key);\n expect(successfulFetches).not.toContain(key);\n // </preconditions>\n\n // Update expectations\n pendingFetches.delete(value);\n successfulFetches.add(value);\n\n // check before and after make sense so that `expectSaneCalls` can work\n const before = await getStats();\n factoryDefers[num].resolve(value);\n expect(await getStats()).toStrictEqual({\n ...before,\n fulfilledFactoryCalls: before.fulfilledFactoryCalls + 1,\n });\n\n await expectSaneCalls();\n };\n }\n\n function rejectFactoryCall(\n num: number,\n key: string,\n error = `${key}Error`,\n ) {\n return async () => {\n expect(factoryFn.mock.calls[num][1]).toBe(key);\n expect(pendingFetches).toContain(key);\n\n pendingFetches.delete(key);\n factoryDefers[num].reject(new Error(error));\n\n // we need to ensure the outstanding get promises are rejected\n for (let i = 0; i < asyncCacheSpies.get.mock.calls.length; i++) {\n if (asyncCacheSpies.get.mock.calls[i][1] === key) {\n if (asyncCacheSpies.get.mock.results[i].type === \"return\") {\n await expect(getPromises[i]).rejects.toThrowError();\n }\n }\n }\n\n await expectSaneCalls();\n };\n }\n\n async function getStats() {\n return {\n fulfilledFactoryCalls: (await Promise.all(\n factoryDefers.map(d => pStateAsync(d.promise)),\n )).filter(a => a === \"fulfilled\").length,\n rejectedFactoryCalls: (await Promise.all(\n factoryDefers.map(d => pStateAsync(d.promise)),\n )).filter(a => a === \"rejected\").length,\n asyncCacheGetCalls: asyncCacheSpies.get.mock.calls.length,\n };\n }\n\n async function expectSaneCalls() {\n const stats = await getStats();\n\n // both of these should be connected\n expect(factoryFn).toHaveBeenCalledTimes(expectedFactoryCalls);\n expect(inProgress.set).toHaveBeenCalledTimes(expectedFactoryCalls);\n\n expect(asyncSetSpy).toHaveBeenCalledTimes(expectedAsyncSets);\n\n // inProgress should be removed after a success or failure\n expect(inProgress.remove).toHaveBeenCalledTimes(\n stats.fulfilledFactoryCalls + stats.rejectedFactoryCalls,\n );\n\n // the inner cache gets checked once per async get\n expect(cache.get).toHaveBeenCalledTimes(stats.asyncCacheGetCalls);\n\n // the inner cache only gets set after a successful factory call\n expect(cache.set).toHaveBeenCalledTimes(successfulFetches.size);\n }\n\n function itRejectsAllRequestsOf(key: string) {\n it(`rejects all ${key} requests`, () => {\n for (\n let i = 0;\n i < asyncCacheSpies.get.mock.calls.length;\n i++\n ) {\n if (asyncCacheSpies.get.mock.calls[i][1] === key) {\n expect(asyncCacheSpies.get.mock.settledResults[i].type).toBe(\n \"rejected\",\n );\n expect(asyncCacheSpies.get.mock.settledResults[i].value)\n .toMatchObject(new Error(\"aError\"));\n }\n }\n });\n }\n\n function itDoesNotRejectLastRequestRightAway() {\n it(\"does not reject right away\", () => {\n expect(asyncCacheSpies.get.mock.results.at(-1)?.type).toBe(\n \"return\",\n );\n });\n }\n\n function describeRejectsFactoryCall(\n num: number,\n key: string,\n fn: () => void,\n ) {\n return describe(`rejects factory request ${num} for ${key}`, () => {\n beforeEach(rejectFactoryCall(num, key));\n itRejectsAllRequestsOf(\"a\");\n\n fn();\n });\n }\n\n function describeResolvesFactoryCall(\n num: number,\n key: string,\n fn: () => void,\n ) {\n return describe(`resolves factory request ${num} for ${key}`, () => {\n beforeEach(resolveFactoryCall(num, key));\n fn();\n });\n }\n\n function describeAsyncCacheGetFor(key: string, fn: () => void) {\n return describe(`gets a request for '${key}'`, () => {\n beforeEach(initiateAsyncCacheGetFor(key));\n itDoesNotRejectLastRequestRightAway();\n\n fn();\n });\n }\n\n function itFulfillsAsyncCacheGets(indexes: number[], value: string) {\n it(`fulfills the AsyncCache.get()'s ${indexes.join(\", \")} with '${value}'`, async () => {\n for (const i of indexes) {\n expect(await pStateAsync(getPromises[i])).toBe(\"fulfilled\");\n expect(await getPromises[i]).toBe(value);\n }\n });\n }\n\n function itLeavesAsyncGetPromisesInStates(states: PromiseState[]) {\n it(`leaves the AsyncCache.get()'s in states [${states.join(\", \")}]`, async () => {\n expect(await Promise.all(getPromises.map(p => pStateAsync(p))))\n .toStrictEqual(states);\n for (let i = 0; i < states.length; i++) {\n expect(await pStateAsync(getPromises[i])).toBe(states[i]);\n }\n });\n }\n\n function itHasOnlyInvokedFactoryNTimes(n: number) {\n it(`has only invoked the factory ${n} times`, () => {\n expect(factoryFn).toHaveBeenCalledTimes(n);\n });\n }\n\n function itReturnsForAsyncGet(results: any[]) {\n it(\"returns for async get\", () => {\n expect(asyncCacheSpies.get.mock.settledResults.map(a => a.value))\n .toEqual(results);\n });\n }\n\n it(\"has a minimal base state\", () => {\n expect(cache.get).not.toHaveBeenCalled();\n expect(inProgress.get).not.toHaveBeenCalled();\n expect(factoryFn).not.toHaveBeenCalled();\n expect(inProgress.set).not.toHaveBeenCalled();\n });\n\n describeAsyncCacheGetFor(\"a\", () => {\n itLeavesAsyncGetPromisesInStates([\"pending\"]);\n itHasOnlyInvokedFactoryNTimes(1);\n\n describeAsyncCacheGetFor(\"a\", () => {\n itLeavesAsyncGetPromisesInStates([\"pending\", \"pending\"]);\n itHasOnlyInvokedFactoryNTimes(1);\n\n describe(\"before the first resolves\", () => {\n itLeavesAsyncGetPromisesInStates([\"pending\", \"pending\"]);\n itHasOnlyInvokedFactoryNTimes(1);\n\n describeRejectsFactoryCall(0, \"a\", () => {\n itLeavesAsyncGetPromisesInStates([\"rejected\", \"rejected\"]);\n describeAsyncCacheGetFor(\"a\", () => {\n itDoesNotRejectLastRequestRightAway();\n itHasOnlyInvokedFactoryNTimes(2);\n });\n });\n\n describeAsyncCacheGetFor(\"b\", () => {\n itLeavesAsyncGetPromisesInStates([\"pending\", \"pending\", \"pending\"]);\n itHasOnlyInvokedFactoryNTimes(2);\n\n describeResolvesFactoryCall(1, \"b\", () => {\n itLeavesAsyncGetPromisesInStates([\n \"pending\",\n \"pending\",\n \"fulfilled\",\n ]);\n\n itReturnsForAsyncGet([\n undefined,\n undefined,\n \"bResult\",\n ]);\n });\n });\n\n describeResolvesFactoryCall(0, \"a\", () => {\n itFulfillsAsyncCacheGets([0, 1], \"aResult\");\n itLeavesAsyncGetPromisesInStates([\n \"fulfilled\",\n \"fulfilled\",\n ]);\n\n describeAsyncCacheGetFor(\"a\", () => {\n itHasOnlyInvokedFactoryNTimes(1);\n itLeavesAsyncGetPromisesInStates([\n \"fulfilled\",\n \"fulfilled\",\n \"fulfilled\",\n ]);\n itReturnsForAsyncGet([\n \"aResult\",\n \"aResult\",\n \"aResult\",\n ]);\n });\n });\n });\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -38,6 +38,7 @@ function customInspect(_depth, options, localInspect) {
|
|
|
38
38
|
let ret = `Osdk<${options.stylize(this[ObjectDefRef]?.apiName ?? this[InterfaceDefRef]?.apiName ?? "", "special")}> {\n`;
|
|
39
39
|
for (const k of new Set(["$apiName", "$objectType", "$primaryKey", ...Reflect.ownKeys(this)])) {
|
|
40
40
|
if (typeof k === "symbol") continue;
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion
|
|
41
42
|
ret += ` ${options.stylize(k.toString(), "undefined")}: ${localInspect(this[k], newOptions)}\n`;
|
|
42
43
|
}
|
|
43
44
|
if (this[UnderlyingOsdkObject] !== this) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OsdkCustomInspectPrototype.js","names":["InterfaceDefRef","ObjectDefRef","UnderlyingOsdkObject","nodejsUtilInspectCustom","Symbol","for","OsdkCustomInspectPrototype","Object","create","value","customInspect","_depth","options","localInspect","newOptions","depth","ret","stylize","apiName","k","Set","Reflect","ownKeys","toString","replace"],"sources":["OsdkCustomInspectPrototype.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { ObjectOrInterfaceDefinition, Osdk } from \"@osdk/api\";\nimport type { inspect, InspectOptionsStylized } from \"node:util\";\nimport type { HolderBase } from \"./InternalSymbols.js\";\nimport {\n InterfaceDefRef,\n ObjectDefRef,\n UnderlyingOsdkObject,\n} from \"./InternalSymbols.js\";\n\nconst nodejsUtilInspectCustom: unique symbol = Symbol.for(\n \"nodejs.util.inspect.custom\",\n);\n\nexport const OsdkCustomInspectPrototype: {\n [nodejsUtilInspectCustom]: typeof customInspect;\n} = Object.create(null, {\n [nodejsUtilInspectCustom]: { value: customInspect },\n});\n\n/**\n * A custom `util.inspect`/`console.log` for nodejs. Not emitted in the browser version\n * @param this\n * @param _depth\n * @param options\n * @param inspect\n * @returns\n */\nfunction customInspect(\n this:\n & HolderBase<ObjectOrInterfaceDefinition>\n & Osdk<any>,\n _depth: number,\n options: InspectOptionsStylized,\n localInspect: typeof inspect,\n): string {\n const newOptions = {\n ...options,\n depth: options.depth == null ? null : options.depth - 1,\n };\n\n let ret = `Osdk<${\n options.stylize(\n this[ObjectDefRef]?.apiName ?? this[InterfaceDefRef]?.apiName ?? \"\",\n \"special\",\n )\n }> {\\n`;\n\n for (\n const k of new Set([\n \"$apiName\",\n \"$objectType\",\n \"$primaryKey\",\n ...Reflect.ownKeys(this),\n ])\n ) {\n if (typeof k === \"symbol\") continue;\n ret += ` ${options.stylize(k.toString(), \"undefined\")}: ${\n localInspect(this[k as any], newOptions)\n }\\n`;\n }\n\n if (this[UnderlyingOsdkObject] !== this) {\n ret += \"\\n\";\n ret += ` ${options.stylize(\"$as\", \"special\")}: ${\n localInspect(this[UnderlyingOsdkObject], newOptions).replace(\n /\\n/g,\n `\\n `,\n )\n }`;\n ret += \"\\n\";\n }\n\n ret += \"}\";\n return ret;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,SACEA,eAAe,EACfC,YAAY,EACZC,oBAAoB,QACf,sBAAsB;AAE7B,MAAMC,uBAAsC,GAAGC,MAAM,CAACC,GAAG,CACvD,4BACF,CAAC;AAED,OAAO,MAAMC,0BAEZ,GAAGC,MAAM,CAACC,MAAM,CAAC,IAAI,EAAE;EACtB,CAACL,uBAAuB,GAAG;IAAEM,KAAK,EAAEC;EAAc;AACpD,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,aAAaA,CAIpBC,MAAc,EACdC,OAA+B,EAC/BC,YAA4B,EACpB;EACR,MAAMC,UAAU,GAAG;IACjB,GAAGF,OAAO;IACVG,KAAK,EAAEH,OAAO,CAACG,KAAK,IAAI,IAAI,GAAG,IAAI,GAAGH,OAAO,CAACG,KAAK,GAAG;EACxD,CAAC;EAED,IAAIC,GAAG,GAAG,QACRJ,OAAO,CAACK,OAAO,CACb,IAAI,CAAChB,YAAY,CAAC,EAAEiB,OAAO,IAAI,IAAI,CAAClB,eAAe,CAAC,EAAEkB,OAAO,IAAI,EAAE,EACnE,SACF,CAAC,OACI;EAEP,KACE,MAAMC,CAAC,IAAI,IAAIC,GAAG,CAAC,CACjB,UAAU,EACV,aAAa,EACb,aAAa,EACb,GAAGC,OAAO,CAACC,OAAO,CAAC,IAAI,CAAC,CACzB,CAAC,EACF;IACA,IAAI,OAAOH,CAAC,KAAK,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"OsdkCustomInspectPrototype.js","names":["InterfaceDefRef","ObjectDefRef","UnderlyingOsdkObject","nodejsUtilInspectCustom","Symbol","for","OsdkCustomInspectPrototype","Object","create","value","customInspect","_depth","options","localInspect","newOptions","depth","ret","stylize","apiName","k","Set","Reflect","ownKeys","toString","replace"],"sources":["OsdkCustomInspectPrototype.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { ObjectOrInterfaceDefinition, Osdk } from \"@osdk/api\";\nimport type { inspect, InspectOptionsStylized } from \"node:util\";\nimport type { HolderBase } from \"./InternalSymbols.js\";\nimport {\n InterfaceDefRef,\n ObjectDefRef,\n UnderlyingOsdkObject,\n} from \"./InternalSymbols.js\";\n\nconst nodejsUtilInspectCustom: unique symbol = Symbol.for(\n \"nodejs.util.inspect.custom\",\n);\n\nexport const OsdkCustomInspectPrototype: {\n [nodejsUtilInspectCustom]: typeof customInspect;\n} = Object.create(null, {\n [nodejsUtilInspectCustom]: { value: customInspect },\n});\n\n/**\n * A custom `util.inspect`/`console.log` for nodejs. Not emitted in the browser version\n * @param this\n * @param _depth\n * @param options\n * @param inspect\n * @returns\n */\nfunction customInspect(\n this:\n & HolderBase<ObjectOrInterfaceDefinition>\n & Osdk<any>,\n _depth: number,\n options: InspectOptionsStylized,\n localInspect: typeof inspect,\n): string {\n const newOptions = {\n ...options,\n depth: options.depth == null ? null : options.depth - 1,\n };\n\n let ret = `Osdk<${\n options.stylize(\n this[ObjectDefRef]?.apiName ?? this[InterfaceDefRef]?.apiName ?? \"\",\n \"special\",\n )\n }> {\\n`;\n\n for (\n const k of new Set([\n \"$apiName\",\n \"$objectType\",\n \"$primaryKey\",\n ...Reflect.ownKeys(this),\n ])\n ) {\n if (typeof k === \"symbol\") continue;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion\n ret += ` ${options.stylize(k.toString(), \"undefined\")}: ${\n localInspect(this[k as any], newOptions)\n }\\n`;\n }\n\n if (this[UnderlyingOsdkObject] !== this) {\n ret += \"\\n\";\n ret += ` ${options.stylize(\"$as\", \"special\")}: ${\n localInspect(this[UnderlyingOsdkObject], newOptions).replace(\n /\\n/g,\n `\\n `,\n )\n }`;\n ret += \"\\n\";\n }\n\n ret += \"}\";\n return ret;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,SACEA,eAAe,EACfC,YAAY,EACZC,oBAAoB,QACf,sBAAsB;AAE7B,MAAMC,uBAAsC,GAAGC,MAAM,CAACC,GAAG,CACvD,4BACF,CAAC;AAED,OAAO,MAAMC,0BAEZ,GAAGC,MAAM,CAACC,MAAM,CAAC,IAAI,EAAE;EACtB,CAACL,uBAAuB,GAAG;IAAEM,KAAK,EAAEC;EAAc;AACpD,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,aAAaA,CAIpBC,MAAc,EACdC,OAA+B,EAC/BC,YAA4B,EACpB;EACR,MAAMC,UAAU,GAAG;IACjB,GAAGF,OAAO;IACVG,KAAK,EAAEH,OAAO,CAACG,KAAK,IAAI,IAAI,GAAG,IAAI,GAAGH,OAAO,CAACG,KAAK,GAAG;EACxD,CAAC;EAED,IAAIC,GAAG,GAAG,QACRJ,OAAO,CAACK,OAAO,CACb,IAAI,CAAChB,YAAY,CAAC,EAAEiB,OAAO,IAAI,IAAI,CAAClB,eAAe,CAAC,EAAEkB,OAAO,IAAI,EAAE,EACnE,SACF,CAAC,OACI;EAEP,KACE,MAAMC,CAAC,IAAI,IAAIC,GAAG,CAAC,CACjB,UAAU,EACV,aAAa,EACb,aAAa,EACb,GAAGC,OAAO,CAACC,OAAO,CAAC,IAAI,CAAC,CACzB,CAAC,EACF;IACA,IAAI,OAAOH,CAAC,KAAK,QAAQ,EAAE;IAC3B;IACAH,GAAG,IAAI,KAAKJ,OAAO,CAACK,OAAO,CAACE,CAAC,CAACI,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,KACpDV,YAAY,CAAC,IAAI,CAACM,CAAC,CAAQ,EAAEL,UAAU,CAAC,IACtC;EACN;EAEA,IAAI,IAAI,CAACZ,oBAAoB,CAAC,KAAK,IAAI,EAAE;IACvCc,GAAG,IAAI,IAAI;IACXA,GAAG,IAAI,KAAKJ,OAAO,CAACK,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,KAC3CJ,YAAY,CAAC,IAAI,CAACX,oBAAoB,CAAC,EAAEY,UAAU,CAAC,CAACU,OAAO,CAC1D,KAAK,EACL,MACF,CAAC,EACD;IACFR,GAAG,IAAI,IAAI;EACb;EAEAA,GAAG,IAAI,GAAG;EACV,OAAOA,GAAG;AACZ","ignoreList":[]}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { extractNamespace } from "../../internal/conversions/modernToLegacyWhereClause.js";
|
|
18
|
+
import { get$linkForInterface } from "./getDollarLink.js";
|
|
18
19
|
import { InterfaceDefRef, ObjectDefRef, UnderlyingOsdkObject } from "./InternalSymbols.js";
|
|
19
20
|
/** @internal */
|
|
20
21
|
export function createOsdkInterface(underlying, interfaceDef) {
|
|
@@ -63,6 +64,11 @@ export function createOsdkInterface(underlying, interfaceDef) {
|
|
|
63
64
|
},
|
|
64
65
|
enumerable: false
|
|
65
66
|
},
|
|
67
|
+
"$link": {
|
|
68
|
+
get: function () {
|
|
69
|
+
return get$linkForInterface(this);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
66
72
|
[InterfaceDefRef]: {
|
|
67
73
|
value: interfaceDef
|
|
68
74
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOsdkInterface.js","names":["extractNamespace","InterfaceDefRef","ObjectDefRef","UnderlyingOsdkObject","createOsdkInterface","underlying","interfaceDef","objApiNamespace","apiName","Object","freeze","defineProperties","value","enumerable","$as","$objectType","$primaryKey","$objectSpecifier","$title","$rid","clone","fromEntries","keys","properties","map","p","objDef","apiNamespace","targetPropName","interfaceMap","update","$clone","key","Error","remappedProps","mapProperty","filter","x","propertyName"],"sources":["createOsdkInterface.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { extractNamespace } from \"../../internal/conversions/modernToLegacyWhereClause.js\";\nimport type { FetchedObjectTypeDefinition } from \"../../ontology/OntologyProvider.js\";\nimport type { InterfaceHolder } from \"./InterfaceHolder.js\";\nimport {\n InterfaceDefRef,\n ObjectDefRef,\n UnderlyingOsdkObject,\n} from \"./InternalSymbols.js\";\nimport type { ObjectHolder } from \"./ObjectHolder.js\";\n\n/** @internal */\nexport function createOsdkInterface<\n Q extends FetchedObjectTypeDefinition,\n>(\n underlying: ObjectHolder,\n interfaceDef: InterfaceMetadata,\n): InterfaceHolder {\n const [objApiNamespace] = extractNamespace(interfaceDef.apiName);\n\n return Object.freeze(\n Object.defineProperties({}, {\n // first to minimize hidden classes\n [UnderlyingOsdkObject]: { value: underlying },\n\n \"$apiName\": { value: interfaceDef.apiName, enumerable: true },\n \"$as\": {\n value: underlying.$as,\n enumerable: false,\n },\n \"$objectType\": {\n value: underlying.$objectType,\n enumerable: \"$objectType\" in underlying,\n },\n \"$primaryKey\": {\n value: underlying.$primaryKey,\n enumerable: \"$primaryKey\" in underlying,\n },\n \"$objectSpecifier\": {\n value: underlying.$objectSpecifier,\n enumerable: \"$objectSpecifier\" in underlying,\n },\n \"$title\": {\n value: underlying.$title,\n enumerable: \"$title\" in underlying,\n },\n \"$rid\": {\n value: (underlying as any).$rid,\n enumerable: \"$rid\" in underlying,\n },\n \"$clone\": {\n value: clone,\n enumerable: false,\n },\n \"$__EXPERIMENTAL__NOT_SUPPORTED_YET__metadata\": {\n value: {\n \"ObjectMetadata\": underlying[ObjectDefRef],\n \"InterfaceMetadata\": interfaceDef,\n },\n enumerable: false,\n },\n\n [InterfaceDefRef]: { value: interfaceDef },\n\n ...Object.fromEntries(\n Object.keys(interfaceDef.properties).map(p => {\n const objDef = underlying[ObjectDefRef];\n\n const [apiNamespace, apiName] = extractNamespace(p);\n\n const targetPropName = objDef\n .interfaceMap![interfaceDef.apiName][p];\n\n return [apiNamespace === objApiNamespace ? apiName : p, {\n enumerable: targetPropName in underlying,\n value: underlying[targetPropName as keyof typeof underlying],\n }];\n }),\n ),\n }) as InterfaceHolder,\n );\n function clone(update: Record<string, any> | undefined) {\n if (update == null) {\n return underlying.$clone().$as(interfaceDef);\n }\n\n for (const key of Object.keys(update)) {\n if (!(key in interfaceDef.properties)) {\n throw new Error(\n `Invalid property ${key} for interface ${interfaceDef.apiName}`,\n );\n }\n }\n\n const remappedProps = Object.fromEntries(\n Object.keys(update).map(p => mapProperty(p, update[p])).filter(x =>\n x != null\n ),\n );\n\n return underlying.$clone(remappedProps).$as(interfaceDef);\n }\n function mapProperty(propertyName: string, value: any) {\n const objDef = underlying[ObjectDefRef];\n const targetPropName =\n objDef.interfaceMap![interfaceDef.apiName][propertyName];\n // If the underlying object does not implement the SPT, throw errors\n if (targetPropName == null) {\n throw new Error(\n `Cannot clone interface with ${propertyName} as property is not implemented by the underlying object type ${objDef.apiName}`,\n );\n }\n return [targetPropName, value];\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,gBAAgB,QAAQ,yDAAyD;
|
|
1
|
+
{"version":3,"file":"createOsdkInterface.js","names":["extractNamespace","get$linkForInterface","InterfaceDefRef","ObjectDefRef","UnderlyingOsdkObject","createOsdkInterface","underlying","interfaceDef","objApiNamespace","apiName","Object","freeze","defineProperties","value","enumerable","$as","$objectType","$primaryKey","$objectSpecifier","$title","$rid","clone","get","fromEntries","keys","properties","map","p","objDef","apiNamespace","targetPropName","interfaceMap","update","$clone","key","Error","remappedProps","mapProperty","filter","x","propertyName"],"sources":["createOsdkInterface.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { extractNamespace } from \"../../internal/conversions/modernToLegacyWhereClause.js\";\nimport type { FetchedObjectTypeDefinition } from \"../../ontology/OntologyProvider.js\";\nimport { get$linkForInterface } from \"./getDollarLink.js\";\nimport type { InterfaceHolder } from \"./InterfaceHolder.js\";\nimport {\n InterfaceDefRef,\n ObjectDefRef,\n UnderlyingOsdkObject,\n} from \"./InternalSymbols.js\";\nimport type { ObjectHolder } from \"./ObjectHolder.js\";\n\n/** @internal */\nexport function createOsdkInterface<\n Q extends FetchedObjectTypeDefinition,\n>(\n underlying: ObjectHolder,\n interfaceDef: InterfaceMetadata,\n): InterfaceHolder {\n const [objApiNamespace] = extractNamespace(interfaceDef.apiName);\n\n return Object.freeze(\n Object.defineProperties({}, {\n // first to minimize hidden classes\n [UnderlyingOsdkObject]: { value: underlying },\n\n \"$apiName\": { value: interfaceDef.apiName, enumerable: true },\n \"$as\": {\n value: underlying.$as,\n enumerable: false,\n },\n \"$objectType\": {\n value: underlying.$objectType,\n enumerable: \"$objectType\" in underlying,\n },\n \"$primaryKey\": {\n value: underlying.$primaryKey,\n enumerable: \"$primaryKey\" in underlying,\n },\n \"$objectSpecifier\": {\n value: underlying.$objectSpecifier,\n enumerable: \"$objectSpecifier\" in underlying,\n },\n \"$title\": {\n value: underlying.$title,\n enumerable: \"$title\" in underlying,\n },\n \"$rid\": {\n value: (underlying as any).$rid,\n enumerable: \"$rid\" in underlying,\n },\n \"$clone\": {\n value: clone,\n enumerable: false,\n },\n \"$__EXPERIMENTAL__NOT_SUPPORTED_YET__metadata\": {\n value: {\n \"ObjectMetadata\": underlying[ObjectDefRef],\n \"InterfaceMetadata\": interfaceDef,\n },\n enumerable: false,\n },\n\n \"$link\": {\n get: function(this: InterfaceHolder) {\n return get$linkForInterface(this);\n },\n },\n\n [InterfaceDefRef]: { value: interfaceDef },\n\n ...Object.fromEntries(\n Object.keys(interfaceDef.properties).map(p => {\n const objDef = underlying[ObjectDefRef];\n\n const [apiNamespace, apiName] = extractNamespace(p);\n\n const targetPropName = objDef\n .interfaceMap![interfaceDef.apiName][p];\n\n return [apiNamespace === objApiNamespace ? apiName : p, {\n enumerable: targetPropName in underlying,\n value: underlying[targetPropName as keyof typeof underlying],\n }];\n }),\n ),\n }) as InterfaceHolder,\n );\n function clone(update: Record<string, any> | undefined) {\n if (update == null) {\n return underlying.$clone().$as(interfaceDef);\n }\n\n for (const key of Object.keys(update)) {\n if (!(key in interfaceDef.properties)) {\n throw new Error(\n `Invalid property ${key} for interface ${interfaceDef.apiName}`,\n );\n }\n }\n\n const remappedProps = Object.fromEntries(\n Object.keys(update).map(p => mapProperty(p, update[p])).filter(x =>\n x != null\n ),\n );\n\n return underlying.$clone(remappedProps).$as(interfaceDef);\n }\n function mapProperty(propertyName: string, value: any) {\n const objDef = underlying[ObjectDefRef];\n const targetPropName =\n objDef.interfaceMap![interfaceDef.apiName][propertyName];\n // If the underlying object does not implement the SPT, throw errors\n if (targetPropName == null) {\n throw new Error(\n `Cannot clone interface with ${propertyName} as property is not implemented by the underlying object type ${objDef.apiName}`,\n );\n }\n return [targetPropName, value];\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,gBAAgB,QAAQ,yDAAyD;AAE1F,SAASC,oBAAoB,QAAQ,oBAAoB;AAEzD,SACEC,eAAe,EACfC,YAAY,EACZC,oBAAoB,QACf,sBAAsB;AAG7B;AACA,OAAO,SAASC,mBAAmBA,CAGjCC,UAAwB,EACxBC,YAA+B,EACd;EACjB,MAAM,CAACC,eAAe,CAAC,GAAGR,gBAAgB,CAACO,YAAY,CAACE,OAAO,CAAC;EAEhE,OAAOC,MAAM,CAACC,MAAM,CAClBD,MAAM,CAACE,gBAAgB,CAAC,CAAC,CAAC,EAAE;IAC1B;IACA,CAACR,oBAAoB,GAAG;MAAES,KAAK,EAAEP;IAAW,CAAC;IAE7C,UAAU,EAAE;MAAEO,KAAK,EAAEN,YAAY,CAACE,OAAO;MAAEK,UAAU,EAAE;IAAK,CAAC;IAC7D,KAAK,EAAE;MACLD,KAAK,EAAEP,UAAU,CAACS,GAAG;MACrBD,UAAU,EAAE;IACd,CAAC;IACD,aAAa,EAAE;MACbD,KAAK,EAAEP,UAAU,CAACU,WAAW;MAC7BF,UAAU,EAAE,aAAa,IAAIR;IAC/B,CAAC;IACD,aAAa,EAAE;MACbO,KAAK,EAAEP,UAAU,CAACW,WAAW;MAC7BH,UAAU,EAAE,aAAa,IAAIR;IAC/B,CAAC;IACD,kBAAkB,EAAE;MAClBO,KAAK,EAAEP,UAAU,CAACY,gBAAgB;MAClCJ,UAAU,EAAE,kBAAkB,IAAIR;IACpC,CAAC;IACD,QAAQ,EAAE;MACRO,KAAK,EAAEP,UAAU,CAACa,MAAM;MACxBL,UAAU,EAAE,QAAQ,IAAIR;IAC1B,CAAC;IACD,MAAM,EAAE;MACNO,KAAK,EAAGP,UAAU,CAASc,IAAI;MAC/BN,UAAU,EAAE,MAAM,IAAIR;IACxB,CAAC;IACD,QAAQ,EAAE;MACRO,KAAK,EAAEQ,KAAK;MACZP,UAAU,EAAE;IACd,CAAC;IACD,8CAA8C,EAAE;MAC9CD,KAAK,EAAE;QACL,gBAAgB,EAAEP,UAAU,CAACH,YAAY,CAAC;QAC1C,mBAAmB,EAAEI;MACvB,CAAC;MACDO,UAAU,EAAE;IACd,CAAC;IAED,OAAO,EAAE;MACPQ,GAAG,EAAE,SAAAA,CAAA,EAAgC;QACnC,OAAOrB,oBAAoB,CAAC,IAAI,CAAC;MACnC;IACF,CAAC;IAED,CAACC,eAAe,GAAG;MAAEW,KAAK,EAAEN;IAAa,CAAC;IAE1C,GAAGG,MAAM,CAACa,WAAW,CACnBb,MAAM,CAACc,IAAI,CAACjB,YAAY,CAACkB,UAAU,CAAC,CAACC,GAAG,CAACC,CAAC,IAAI;MAC5C,MAAMC,MAAM,GAAGtB,UAAU,CAACH,YAAY,CAAC;MAEvC,MAAM,CAAC0B,YAAY,EAAEpB,OAAO,CAAC,GAAGT,gBAAgB,CAAC2B,CAAC,CAAC;MAEnD,MAAMG,cAAc,GAAGF,MAAM,CAC1BG,YAAY,CAAExB,YAAY,CAACE,OAAO,CAAC,CAACkB,CAAC,CAAC;MAEzC,OAAO,CAACE,YAAY,KAAKrB,eAAe,GAAGC,OAAO,GAAGkB,CAAC,EAAE;QACtDb,UAAU,EAAEgB,cAAc,IAAIxB,UAAU;QACxCO,KAAK,EAAEP,UAAU,CAACwB,cAAc;MAClC,CAAC,CAAC;IACJ,CAAC,CACH;EACF,CAAC,CACH,CAAC;EACD,SAAST,KAAKA,CAACW,MAAuC,EAAE;IACtD,IAAIA,MAAM,IAAI,IAAI,EAAE;MAClB,OAAO1B,UAAU,CAAC2B,MAAM,CAAC,CAAC,CAAClB,GAAG,CAACR,YAAY,CAAC;IAC9C;IAEA,KAAK,MAAM2B,GAAG,IAAIxB,MAAM,CAACc,IAAI,CAACQ,MAAM,CAAC,EAAE;MACrC,IAAI,EAAEE,GAAG,IAAI3B,YAAY,CAACkB,UAAU,CAAC,EAAE;QACrC,MAAM,IAAIU,KAAK,CACb,oBAAoBD,GAAG,kBAAkB3B,YAAY,CAACE,OAAO,EAC/D,CAAC;MACH;IACF;IAEA,MAAM2B,aAAa,GAAG1B,MAAM,CAACa,WAAW,CACtCb,MAAM,CAACc,IAAI,CAACQ,MAAM,CAAC,CAACN,GAAG,CAACC,CAAC,IAAIU,WAAW,CAACV,CAAC,EAAEK,MAAM,CAACL,CAAC,CAAC,CAAC,CAAC,CAACW,MAAM,CAACC,CAAC,IAC9DA,CAAC,IAAI,IACP,CACF,CAAC;IAED,OAAOjC,UAAU,CAAC2B,MAAM,CAACG,aAAa,CAAC,CAACrB,GAAG,CAACR,YAAY,CAAC;EAC3D;EACA,SAAS8B,WAAWA,CAACG,YAAoB,EAAE3B,KAAU,EAAE;IACrD,MAAMe,MAAM,GAAGtB,UAAU,CAACH,YAAY,CAAC;IACvC,MAAM2B,cAAc,GAClBF,MAAM,CAACG,YAAY,CAAExB,YAAY,CAACE,OAAO,CAAC,CAAC+B,YAAY,CAAC;IAC1D;IACA,IAAIV,cAAc,IAAI,IAAI,EAAE;MAC1B,MAAM,IAAIK,KAAK,CACb,+BAA+BK,YAAY,iEAAiEZ,MAAM,CAACnB,OAAO,EAC5H,CAAC;IACH;IACA,OAAO,CAACqB,cAAc,EAAEjB,KAAK,CAAC;EAChC;AACF","ignoreList":[]}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import { getWireObjectSet } from "../../objectSet/createObjectSet.js";
|
|
18
18
|
import { fetchSingle, fetchSingleWithErrors } from "../fetchSingle.js";
|
|
19
|
-
import { ClientRef, ObjectDefRef, UnderlyingOsdkObject } from "./InternalSymbols.js";
|
|
19
|
+
import { ClientRef, InterfaceDefRef, ObjectDefRef, UnderlyingOsdkObject } from "./InternalSymbols.js";
|
|
20
20
|
/** @internal */
|
|
21
21
|
export function get$link(holder) {
|
|
22
22
|
const client = holder[ClientRef];
|
|
@@ -34,4 +34,23 @@ export function get$link(holder) {
|
|
|
34
34
|
return [linkName, value];
|
|
35
35
|
})));
|
|
36
36
|
}
|
|
37
|
+
|
|
38
|
+
/** @internal */
|
|
39
|
+
export function get$linkForInterface(holder) {
|
|
40
|
+
const client = holder[UnderlyingOsdkObject][ClientRef];
|
|
41
|
+
const objDef = holder[UnderlyingOsdkObject][ObjectDefRef];
|
|
42
|
+
const interfaceDef = holder[InterfaceDefRef];
|
|
43
|
+
const rawObj = holder[UnderlyingOsdkObject];
|
|
44
|
+
return Object.freeze(Object.fromEntries(Object.keys(interfaceDef.links).map(linkName => {
|
|
45
|
+
const linkDef = interfaceDef.links[linkName];
|
|
46
|
+
const objectSet = client.objectSetFactory(interfaceDef, client).intersect(client.objectSetFactory(objDef, client).where({
|
|
47
|
+
[objDef.primaryKeyApiName]: rawObj.$primaryKey
|
|
48
|
+
})).pivotTo(linkName);
|
|
49
|
+
const value = !linkDef.multiplicity ? {
|
|
50
|
+
fetchOne: options => fetchSingle(client, objDef, options ?? {}, getWireObjectSet(objectSet)),
|
|
51
|
+
fetchOneWithErrors: options => fetchSingleWithErrors(client, objDef, options ?? {}, getWireObjectSet(objectSet))
|
|
52
|
+
} : objectSet;
|
|
53
|
+
return [linkName, value];
|
|
54
|
+
})));
|
|
55
|
+
}
|
|
37
56
|
//# sourceMappingURL=getDollarLink.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDollarLink.js","names":["getWireObjectSet","fetchSingle","fetchSingleWithErrors","ClientRef","ObjectDefRef","UnderlyingOsdkObject","get$link","holder","client","objDef","rawObj","Object","freeze","fromEntries","keys","links","map","linkName","linkDef","objectSet","objectSetFactory","where","primaryKeyApiName","$primaryKey","pivotTo","value","multiplicity","fetchOne","options","fetchOneWithErrors"],"sources":["getDollarLink.ts"],"sourcesContent":["/*\n * Copyright 2024 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 {\n ObjectSet,\n OsdkObjectLinksObject,\n SelectArg,\n SingleLinkAccessor,\n WhereClause,\n} from \"@osdk/api\";\nimport { getWireObjectSet } from \"../../objectSet/createObjectSet.js\";\nimport { fetchSingle, fetchSingleWithErrors } from \"../fetchSingle.js\";\nimport {\n ClientRef,\n ObjectDefRef,\n UnderlyingOsdkObject,\n} from \"./InternalSymbols.js\";\nimport type { ObjectHolder } from \"./ObjectHolder.js\";\n\n/** @internal */\nexport function get$link(\n holder: ObjectHolder,\n): OsdkObjectLinksObject<any> {\n const client = holder[ClientRef];\n const objDef = holder[ObjectDefRef];\n const rawObj = holder[UnderlyingOsdkObject];\n return Object.freeze(Object.fromEntries(\n Object.keys(objDef.links).map(\n (linkName) => {\n const linkDef = objDef.links[linkName as keyof typeof objDef.links];\n const objectSet =\n (client.objectSetFactory(objDef, client) as ObjectSet<any>)\n .where({\n [objDef.primaryKeyApiName]: rawObj.$primaryKey,\n } as WhereClause<any>)\n .pivotTo(linkName);\n\n const value = !linkDef.multiplicity\n ? {\n fetchOne: <A extends SelectArg<any, any, any, any>>(\n options?: A,\n ) =>\n fetchSingle(\n client,\n objDef,\n options ?? {},\n getWireObjectSet(objectSet),\n ),\n fetchOneWithErrors: <A extends SelectArg<any, any, any, any>>(\n options?: A,\n ) =>\n fetchSingleWithErrors(\n client,\n objDef,\n options ?? {},\n getWireObjectSet(objectSet),\n ),\n } as SingleLinkAccessor<any>\n : objectSet;\n\n return [linkName, value];\n },\n ),\n ));\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,SAASA,gBAAgB,QAAQ,oCAAoC;AACrE,SAASC,WAAW,EAAEC,qBAAqB,QAAQ,mBAAmB;
|
|
1
|
+
{"version":3,"file":"getDollarLink.js","names":["getWireObjectSet","fetchSingle","fetchSingleWithErrors","ClientRef","InterfaceDefRef","ObjectDefRef","UnderlyingOsdkObject","get$link","holder","client","objDef","rawObj","Object","freeze","fromEntries","keys","links","map","linkName","linkDef","objectSet","objectSetFactory","where","primaryKeyApiName","$primaryKey","pivotTo","value","multiplicity","fetchOne","options","fetchOneWithErrors","get$linkForInterface","interfaceDef","intersect"],"sources":["getDollarLink.ts"],"sourcesContent":["/*\n * Copyright 2024 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 {\n ObjectSet,\n OsdkObjectLinksObject,\n SelectArg,\n SingleLinkAccessor,\n WhereClause,\n} from \"@osdk/api\";\nimport { getWireObjectSet } from \"../../objectSet/createObjectSet.js\";\nimport { fetchSingle, fetchSingleWithErrors } from \"../fetchSingle.js\";\nimport type { InterfaceHolder } from \"./InterfaceHolder.js\";\nimport {\n ClientRef,\n InterfaceDefRef,\n ObjectDefRef,\n UnderlyingOsdkObject,\n} from \"./InternalSymbols.js\";\nimport type { ObjectHolder } from \"./ObjectHolder.js\";\n\n/** @internal */\nexport function get$link(\n holder: ObjectHolder,\n): OsdkObjectLinksObject<any> {\n const client = holder[ClientRef];\n const objDef = holder[ObjectDefRef];\n const rawObj = holder[UnderlyingOsdkObject];\n return Object.freeze(Object.fromEntries(\n Object.keys(objDef.links).map(\n (linkName) => {\n const linkDef = objDef.links[linkName as keyof typeof objDef.links];\n const objectSet =\n (client.objectSetFactory(objDef, client) as ObjectSet<any>)\n .where({\n [objDef.primaryKeyApiName]: rawObj.$primaryKey,\n } as WhereClause<any>)\n .pivotTo(linkName);\n\n const value = !linkDef.multiplicity\n ? {\n fetchOne: <A extends SelectArg<any, any, any, any>>(\n options?: A,\n ) =>\n fetchSingle(\n client,\n objDef,\n options ?? {},\n getWireObjectSet(objectSet),\n ),\n fetchOneWithErrors: <A extends SelectArg<any, any, any, any>>(\n options?: A,\n ) =>\n fetchSingleWithErrors(\n client,\n objDef,\n options ?? {},\n getWireObjectSet(objectSet),\n ),\n } as SingleLinkAccessor<any>\n : objectSet;\n\n return [linkName, value];\n },\n ),\n ));\n}\n\n/** @internal */\nexport function get$linkForInterface(\n holder: InterfaceHolder,\n): OsdkObjectLinksObject<any> {\n const client = holder[UnderlyingOsdkObject][ClientRef];\n const objDef = holder[UnderlyingOsdkObject][ObjectDefRef];\n const interfaceDef = holder[InterfaceDefRef];\n const rawObj = holder[UnderlyingOsdkObject];\n return Object.freeze(Object.fromEntries(\n Object.keys(interfaceDef.links).map(\n (linkName) => {\n const linkDef =\n interfaceDef.links[linkName as keyof typeof objDef.links];\n const objectSet =\n (client.objectSetFactory(interfaceDef, client) as ObjectSet<any>)\n .intersect(\n (client.objectSetFactory(objDef, client) as ObjectSet<any>)\n .where({\n [objDef.primaryKeyApiName]: rawObj.$primaryKey,\n } as WhereClause<any>),\n )\n .pivotTo(linkName);\n\n const value = !linkDef.multiplicity\n ? {\n fetchOne: <A extends SelectArg<any, any, any, any>>(\n options?: A,\n ) =>\n fetchSingle(\n client,\n objDef,\n options ?? {},\n getWireObjectSet(objectSet),\n ),\n fetchOneWithErrors: <A extends SelectArg<any, any, any, any>>(\n options?: A,\n ) =>\n fetchSingleWithErrors(\n client,\n objDef,\n options ?? {},\n getWireObjectSet(objectSet),\n ),\n } as SingleLinkAccessor<any>\n : objectSet;\n\n return [linkName, value];\n },\n ),\n ));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -47,6 +47,8 @@ describe("convertWireToOsdkObjects", () => {
|
|
|
47
47
|
expect(Object.keys(employee).sort()).toEqual(["employeeId", "$title", "fullName", "office", "class", "startDate", "employeeSensor", "employeeStatus", "$apiName", "$objectType", "$primaryKey", "$objectSpecifier", "employeeLocation"].sort());
|
|
48
48
|
expect(Object.keys(employee.$as)).toEqual([]);
|
|
49
49
|
expect(Object.keys(employee.$link)).toEqual(["lead", "officeLink", "peeps"]);
|
|
50
|
+
const asFoo = employee.$as(FooInterface);
|
|
51
|
+
expect(Object.keys(asFoo.$link)).toEqual(["toBar"]);
|
|
50
52
|
});
|
|
51
53
|
it("stringifies properties on objects and interfaces correctly", async () => {
|
|
52
54
|
const {
|