@osdk/unit-testing 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @osdk/unit-testing
2
2
 
3
+ ## 0.23.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 109b7f1: Add support for stubbing unioned, intersected, and subtracted mock object sets.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [4ae6d8b]
12
+ - Updated dependencies [1aff7f4]
13
+ - @osdk/api@2.59.0
14
+ - @osdk/client@2.59.0
15
+
3
16
  ## 0.22.0
4
17
 
5
18
  ### Minor Changes
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright 2026 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 { Employee } from "@osdk/client.test.ontology";
18
+ export async function objectSetArithmetic(client, employees) {
19
+ const employeeSet = client(Employee);
20
+ const [union, standaloneUnion, intersect, subtract] = await Promise.all([employeeSet.union(employees).fetchPage(), employees.union(employeeSet).fetchPage(), employeeSet.intersect(employees).fetchPage(), employeeSet.subtract(employees).fetchPage()]);
21
+ return {
22
+ union: union.data,
23
+ standaloneUnion: standaloneUnion.data,
24
+ intersect: intersect.data,
25
+ subtract: subtract.data
26
+ };
27
+ }
28
+ //# sourceMappingURL=objectSetArithmetic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectSetArithmetic.js","names":["Employee","objectSetArithmetic","client","employees","employeeSet","union","standaloneUnion","intersect","subtract","Promise","all","fetchPage","data"],"sources":["objectSetArithmetic.ts"],"sourcesContent":["/*\n * Copyright 2026 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 { ObjectSet, Osdk } from \"@osdk/api\";\nimport type { Client } from \"@osdk/client\";\nimport { Employee } from \"@osdk/client.test.ontology\";\n\nexport async function objectSetArithmetic(\n client: Client,\n employees: ObjectSet<Employee>,\n): Promise<{\n union: Array<Osdk.Instance<Employee>>;\n standaloneUnion: Array<Osdk.Instance<Employee>>;\n intersect: Array<Osdk.Instance<Employee>>;\n subtract: Array<Osdk.Instance<Employee>>;\n}> {\n const employeeSet = client(Employee);\n const [union, standaloneUnion, intersect, subtract] = await Promise.all([\n employeeSet.union(employees).fetchPage(),\n employees.union(employeeSet).fetchPage(),\n employeeSet.intersect(employees).fetchPage(),\n employeeSet.subtract(employees).fetchPage(),\n ]);\n\n return {\n union: union.data,\n standaloneUnion: standaloneUnion.data,\n intersect: intersect.data,\n subtract: subtract.data,\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,SAASA,QAAQ,QAAQ,4BAA4B;AAErD,OAAO,eAAeC,mBAAmBA,CACvCC,MAAc,EACdC,SAA8B,EAM7B;EACD,MAAMC,WAAW,GAAGF,MAAM,CAACF,QAAQ,CAAC;EACpC,MAAM,CAACK,KAAK,EAAEC,eAAe,EAAEC,SAAS,EAAEC,QAAQ,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CACtEN,WAAW,CAACC,KAAK,CAACF,SAAS,CAAC,CAACQ,SAAS,CAAC,CAAC,EACxCR,SAAS,CAACE,KAAK,CAACD,WAAW,CAAC,CAACO,SAAS,CAAC,CAAC,EACxCP,WAAW,CAACG,SAAS,CAACJ,SAAS,CAAC,CAACQ,SAAS,CAAC,CAAC,EAC5CP,WAAW,CAACI,QAAQ,CAACL,SAAS,CAAC,CAACQ,SAAS,CAAC,CAAC,CAC5C,CAAC;EAEF,OAAO;IACLN,KAAK,EAAEA,KAAK,CAACO,IAAI;IACjBN,eAAe,EAAEA,eAAe,CAACM,IAAI;IACrCL,SAAS,EAAEA,SAAS,CAACK,IAAI;IACzBJ,QAAQ,EAAEA,QAAQ,CAACI;EACrB,CAAC;AACH","ignoreList":[]}
@@ -15,16 +15,20 @@
15
15
  */
16
16
 
17
17
  import invariant from "tiny-invariant";
18
+ const mockObjectSetDefinitions = new WeakMap();
18
19
  export function createMockObjectSetWithResolver(objectType, resolver, calls = []) {
19
20
  const chain = (method, args) => createMockObjectSetWithResolver(objectType, resolver, [...calls, [method, args]]);
20
21
  const terminal = (method, args) => resolver([...calls, [method, args]]);
21
-
22
- // All methods should execute synchronously even if marked as async
23
- return {
22
+ const setOperation = (method, objectSets) => chain(method, objectSets.map(operand => {
23
+ const definition = mockObjectSetDefinitions.get(operand);
24
+ !definition ? process.env.NODE_ENV !== "production" ? invariant(false, `${method} only supports mock object sets`) : invariant(false) : void 0;
25
+ return definition;
26
+ }));
27
+ const objectSet = {
24
28
  where: clause => chain("where", clause),
25
- union: () => void (process.env.NODE_ENV !== "production" ? invariant(false, "union is not supported in mocks") : invariant(false)),
26
- intersect: () => void (process.env.NODE_ENV !== "production" ? invariant(false, "intersect is not supported in mocks") : invariant(false)),
27
- subtract: () => void (process.env.NODE_ENV !== "production" ? invariant(false, "subtract is not supported in mocks") : invariant(false)),
29
+ union: (...objectSets) => setOperation("union", objectSets),
30
+ intersect: (...objectSets) => setOperation("intersect", objectSets),
31
+ subtract: (...objectSets) => setOperation("subtract", objectSets),
28
32
  pivotTo: link => chain("pivotTo", link),
29
33
  narrowToType: type => chain("narrowToType", type),
30
34
  nearestNeighbors: (query, num, prop) => chain("nearestNeighbors", {
@@ -79,6 +83,10 @@ export function createMockObjectSetWithResolver(objectType, resolver, calls = []
79
83
  def: {}
80
84
  }
81
85
  };
86
+ mockObjectSetDefinitions.set(objectSet, {
87
+ calls
88
+ });
89
+ return objectSet;
82
90
  }
83
91
  export function resolveStub(stubs, calls, errorMsg) {
84
92
  for (let s = stubs.length - 1; s >= 0; s--) {
@@ -1 +1 @@
1
- {"version":3,"file":"createMockObjectSetWithResolver.js","names":["invariant","createMockObjectSetWithResolver","objectType","resolver","calls","chain","method","args","terminal","where","clause","union","process","env","NODE_ENV","intersect","subtract","pivotTo","link","narrowToType","type","nearestNeighbors","query","num","prop","withProperties","fetchPage","fetchPageWithErrors","value","error","fetchOne","pk","fetchOneWithErrors","aggregate","req","asyncIter","data","item","subscribe","experimental_asyncIterLinks","$objectSetInternals","def","resolveStub","stubs","errorMsg","s","length","stub","every","m","a","i","deepEqual","nextPageToken","undefined","Error","b","isAsymmetricMatcher","asymmetricMatch","Array","isArray","v","aKeys","Object","keys","bKeys","k","x"],"sources":["createMockObjectSetWithResolver.ts"],"sourcesContent":["/*\n * Copyright 2026 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 AggregateOpts,\n AggregationsResults,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n Osdk,\n PageResult,\n WhereClause,\n} from \"@osdk/api\";\nimport invariant from \"tiny-invariant\";\n\nexport type Call = [method: string, args: unknown];\n\nexport type Resolver = (calls: Call[]) => unknown;\n\nexport type Stub = { calls: Call[]; value: unknown };\n\nexport function createMockObjectSetWithResolver<\n Q extends ObjectOrInterfaceDefinition,\n>(objectType: Q, resolver: Resolver, calls: Call[] = []): ObjectSet<Q> {\n const chain = (method: string, args: unknown): ObjectSet<Q> =>\n createMockObjectSetWithResolver(objectType, resolver, [\n ...calls,\n [method, args],\n ]);\n\n const terminal = <T>(method: string, args: unknown): T =>\n resolver([...calls, [method, args]]) as T;\n\n // All methods should execute synchronously even if marked as async\n return {\n where: (clause: WhereClause<Q>) => chain(\"where\", clause),\n union: () =>\n void invariant(false, \"union is not supported in mocks\") as any,\n intersect: () =>\n void invariant(false, \"intersect is not supported in mocks\") as any,\n subtract: () =>\n void invariant(false, \"subtract is not supported in mocks\") as any,\n pivotTo: (link: string) => chain(\"pivotTo\", link) as any,\n narrowToType: (type: ObjectOrInterfaceDefinition) =>\n chain(\"narrowToType\", type) as any,\n nearestNeighbors: (query: unknown, num: number, prop: string) =>\n chain(\"nearestNeighbors\", { query, num, prop }),\n withProperties: () =>\n // TODO: Add with properties support\n void invariant(false, \"withProperties is not supported in mocks\") as any,\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchPage: async (args?: unknown) =>\n terminal<PageResult<Osdk.Instance<Q>>>(\"fetchPage\", args) as any,\n fetchPageWithErrors: async (args?: unknown) => {\n try {\n return {\n type: \"ok\" as const,\n value: await terminal(\"fetchPage\", args),\n } as any;\n } catch (error) {\n return { type: \"error\" as const, error };\n }\n },\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchOne: (async (pk: unknown) =>\n terminal<Osdk.Instance<Q>>(\"fetchOne\", pk)) as any,\n fetchOneWithErrors: (async (pk: unknown) => {\n try {\n return {\n type: \"ok\" as const,\n value: await terminal(\"fetchOne\", pk),\n } as any;\n } catch (error) {\n return { type: \"error\" as const, error } as any;\n }\n }) as any,\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n aggregate: async (req: AggregateOpts<Q>) =>\n terminal<AggregationsResults<Q, AggregateOpts<Q>>>(\n \"aggregate\",\n req,\n ) as any,\n asyncIter: (args?: unknown) => {\n const data = terminal<Osdk.Instance<Q>[]>(\"asyncIter\", args);\n return (async function* () {\n for (const item of data) yield item;\n })();\n },\n\n subscribe: () =>\n void invariant(false, \"subscribe is not supported in mocks\") as any,\n experimental_asyncIterLinks: () =>\n void invariant(\n false,\n \"experimental_asyncIterLinks is not supported in mocks\",\n ) as any,\n $objectSetInternals: {\n def: {} as Q,\n },\n } satisfies ObjectSet<Q>;\n}\n\nexport function resolveStub(\n stubs: Stub[],\n calls: Call[],\n errorMsg: string,\n): unknown {\n for (let s = stubs.length - 1; s >= 0; s--) {\n const stub = stubs[s];\n if (stub.calls.length !== calls.length) continue;\n if (\n stub.calls.every(\n ([m, a], i) => calls[i][0] === m && deepEqual(a, calls[i][1]),\n )\n ) {\n const terminal = calls[calls.length - 1][0];\n if (terminal === \"fetchPage\") {\n return { data: stub.value, nextPageToken: undefined };\n }\n return stub.value;\n }\n }\n throw new Error(errorMsg);\n}\n\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n\n // Support Vitest / Jest asymmetric matchers (e.g. expect.any(String),\n // expect.anything(), expect.stringContaining(...), expect.objectContaining(...))\n // in either position. Without this check, matchers would be compared by their\n // raw object shape and silently never match stub params.\n if (isAsymmetricMatcher(a)) return a.asymmetricMatch(b);\n if (isAsymmetricMatcher(b)) return b.asymmetricMatch(a);\n\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((v, i) => deepEqual(v, b[i]));\n }\n if (typeof a === \"object\") {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b as object);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every((k) =>\n deepEqual((a as any)[k], (b as Record<string, unknown>)[k]),\n );\n }\n return false;\n}\n\nfunction isAsymmetricMatcher(\n x: unknown,\n): x is { asymmetricMatch: (other: unknown) => boolean } {\n return (\n x != null &&\n typeof x === \"object\" &&\n typeof (x as { asymmetricMatch?: unknown }).asymmetricMatch === \"function\"\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createMockObjectSetWithResolver.js","names":["invariant","mockObjectSetDefinitions","WeakMap","createMockObjectSetWithResolver","objectType","resolver","calls","chain","method","args","terminal","setOperation","objectSets","map","operand","definition","get","process","env","NODE_ENV","objectSet","where","clause","union","intersect","subtract","pivotTo","link","narrowToType","type","nearestNeighbors","query","num","prop","withProperties","fetchPage","fetchPageWithErrors","value","error","fetchOne","pk","fetchOneWithErrors","aggregate","req","asyncIter","data","item","subscribe","experimental_asyncIterLinks","$objectSetInternals","def","set","resolveStub","stubs","errorMsg","s","length","stub","every","m","a","i","deepEqual","nextPageToken","undefined","Error","b","isAsymmetricMatcher","asymmetricMatch","Array","isArray","v","aKeys","Object","keys","bKeys","k","x"],"sources":["createMockObjectSetWithResolver.ts"],"sourcesContent":["/*\n * Copyright 2026 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 AggregateOpts,\n AggregationsResults,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n Osdk,\n PageResult,\n WhereClause,\n} from \"@osdk/api\";\nimport invariant from \"tiny-invariant\";\n\nexport type Call = [method: string, args: unknown];\n\nexport type Resolver = (calls: Call[]) => unknown;\n\nexport type Stub = { calls: Call[]; value: unknown };\n\ntype MockObjectSetDefinition = {\n calls: Call[];\n};\n\nconst mockObjectSetDefinitions = new WeakMap<object, MockObjectSetDefinition>();\n\nexport function createMockObjectSetWithResolver<\n Q extends ObjectOrInterfaceDefinition,\n>(objectType: Q, resolver: Resolver, calls: Call[] = []): ObjectSet<Q> {\n const chain = (method: string, args: unknown): ObjectSet<Q> =>\n createMockObjectSetWithResolver(objectType, resolver, [\n ...calls,\n [method, args],\n ]);\n\n const terminal = <T>(method: string, args: unknown): T =>\n resolver([...calls, [method, args]]) as T;\n\n const setOperation = (\n method: \"union\" | \"intersect\" | \"subtract\",\n objectSets: ReadonlyArray<ObjectSet<Q>>,\n ): ObjectSet<Q> =>\n chain(\n method,\n objectSets.map((operand) => {\n const definition = mockObjectSetDefinitions.get(operand);\n invariant(definition, `${method} only supports mock object sets`);\n return definition;\n }),\n );\n\n const objectSet = {\n where: (clause: WhereClause<Q>) => chain(\"where\", clause),\n union: (...objectSets: ReadonlyArray<ObjectSet<Q>>) =>\n setOperation(\"union\", objectSets),\n intersect: (...objectSets: ReadonlyArray<ObjectSet<Q>>) =>\n setOperation(\"intersect\", objectSets),\n subtract: (...objectSets: ReadonlyArray<ObjectSet<Q>>) =>\n setOperation(\"subtract\", objectSets),\n pivotTo: (link: string) => chain(\"pivotTo\", link) as any,\n narrowToType: (type: ObjectOrInterfaceDefinition) =>\n chain(\"narrowToType\", type) as any,\n nearestNeighbors: (query: unknown, num: number, prop: string) =>\n chain(\"nearestNeighbors\", { query, num, prop }),\n withProperties: () =>\n // TODO: Add with properties support\n void invariant(false, \"withProperties is not supported in mocks\") as any,\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchPage: async (args?: unknown) =>\n terminal<PageResult<Osdk.Instance<Q>>>(\"fetchPage\", args) as any,\n fetchPageWithErrors: async (args?: unknown) => {\n try {\n return {\n type: \"ok\" as const,\n value: await terminal(\"fetchPage\", args),\n } as any;\n } catch (error) {\n return { type: \"error\" as const, error };\n }\n },\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchOne: (async (pk: unknown) =>\n terminal<Osdk.Instance<Q>>(\"fetchOne\", pk)) as any,\n fetchOneWithErrors: (async (pk: unknown) => {\n try {\n return {\n type: \"ok\" as const,\n value: await terminal(\"fetchOne\", pk),\n } as any;\n } catch (error) {\n return { type: \"error\" as const, error } as any;\n }\n }) as any,\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n aggregate: async (req: AggregateOpts<Q>) =>\n terminal<AggregationsResults<Q, AggregateOpts<Q>>>(\n \"aggregate\",\n req,\n ) as any,\n asyncIter: (args?: unknown) => {\n const data = terminal<Osdk.Instance<Q>[]>(\"asyncIter\", args);\n return (async function* () {\n for (const item of data) yield item;\n })();\n },\n\n subscribe: () =>\n void invariant(false, \"subscribe is not supported in mocks\") as any,\n experimental_asyncIterLinks: () =>\n void invariant(\n false,\n \"experimental_asyncIterLinks is not supported in mocks\",\n ) as any,\n $objectSetInternals: {\n def: {} as Q,\n },\n } satisfies ObjectSet<Q>;\n\n mockObjectSetDefinitions.set(objectSet, {\n calls,\n });\n\n return objectSet;\n}\n\nexport function resolveStub(\n stubs: Stub[],\n calls: Call[],\n errorMsg: string,\n): unknown {\n for (let s = stubs.length - 1; s >= 0; s--) {\n const stub = stubs[s];\n if (stub.calls.length !== calls.length) continue;\n if (\n stub.calls.every(\n ([m, a], i) => calls[i][0] === m && deepEqual(a, calls[i][1]),\n )\n ) {\n const terminal = calls[calls.length - 1][0];\n if (terminal === \"fetchPage\") {\n return { data: stub.value, nextPageToken: undefined };\n }\n return stub.value;\n }\n }\n throw new Error(errorMsg);\n}\n\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n\n // Support Vitest / Jest asymmetric matchers (e.g. expect.any(String),\n // expect.anything(), expect.stringContaining(...), expect.objectContaining(...))\n // in either position. Without this check, matchers would be compared by their\n // raw object shape and silently never match stub params.\n if (isAsymmetricMatcher(a)) return a.asymmetricMatch(b);\n if (isAsymmetricMatcher(b)) return b.asymmetricMatch(a);\n\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((v, i) => deepEqual(v, b[i]));\n }\n if (typeof a === \"object\") {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b as object);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every((k) =>\n deepEqual((a as any)[k], (b as Record<string, unknown>)[k]),\n );\n }\n return false;\n}\n\nfunction isAsymmetricMatcher(\n x: unknown,\n): x is { asymmetricMatch: (other: unknown) => boolean } {\n return (\n x != null &&\n typeof x === \"object\" &&\n typeof (x as { asymmetricMatch?: unknown }).asymmetricMatch === \"function\"\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -21,14 +21,20 @@ function createMockAttachment(rid, blob, metadata) {
21
21
  }
22
22
  };
23
23
  }
24
+ var mockObjectSetDefinitions = /* @__PURE__ */ new WeakMap();
24
25
  function createMockObjectSetWithResolver(objectType, resolver, calls = []) {
25
26
  const chain = (method, args) => createMockObjectSetWithResolver(objectType, resolver, [...calls, [method, args]]);
26
27
  const terminal = (method, args) => resolver([...calls, [method, args]]);
27
- return {
28
+ const setOperation = (method, objectSets) => chain(method, objectSets.map((operand) => {
29
+ const definition = mockObjectSetDefinitions.get(operand);
30
+ !definition ? process.env.NODE_ENV !== "production" ? invariant4__default.default(false, `${method} only supports mock object sets`) : invariant4__default.default(false) : void 0;
31
+ return definition;
32
+ }));
33
+ const objectSet = {
28
34
  where: (clause) => chain("where", clause),
29
- union: () => void (process.env.NODE_ENV !== "production" ? invariant4__default.default(false, "union is not supported in mocks") : invariant4__default.default(false) ),
30
- intersect: () => void (process.env.NODE_ENV !== "production" ? invariant4__default.default(false, "intersect is not supported in mocks") : invariant4__default.default(false) ),
31
- subtract: () => void (process.env.NODE_ENV !== "production" ? invariant4__default.default(false, "subtract is not supported in mocks") : invariant4__default.default(false) ),
35
+ union: (...objectSets) => setOperation("union", objectSets),
36
+ intersect: (...objectSets) => setOperation("intersect", objectSets),
37
+ subtract: (...objectSets) => setOperation("subtract", objectSets),
32
38
  pivotTo: (link) => chain("pivotTo", link),
33
39
  narrowToType: (type) => chain("narrowToType", type),
34
40
  nearestNeighbors: (query, num, prop) => chain("nearestNeighbors", {
@@ -84,6 +90,10 @@ function createMockObjectSetWithResolver(objectType, resolver, calls = []) {
84
90
  def: {}
85
91
  }
86
92
  };
93
+ mockObjectSetDefinitions.set(objectSet, {
94
+ calls
95
+ });
96
+ return objectSet;
87
97
  }
88
98
  function resolveStub(stubs, calls, errorMsg) {
89
99
  for (let s = stubs.length - 1; s >= 0; s--) {
@@ -451,5 +461,5 @@ exports.createMockAttachment = createMockAttachment;
451
461
  exports.createMockClient = createMockClient;
452
462
  exports.createMockObjectSet = createMockObjectSet;
453
463
  exports.createMockOsdkObject = createMockOsdkObject;
454
- //# sourceMappingURL=chunk-4WVZEICG.cjs.map
455
- //# sourceMappingURL=chunk-4WVZEICG.cjs.map
464
+ //# sourceMappingURL=chunk-LJILKHB4.cjs.map
465
+ //# sourceMappingURL=chunk-LJILKHB4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/mock/createMockAttachment.ts","../../src/mock/createMockObjectSetWithResolver.ts","../../src/mock/createMockClient.ts","../../src/mock/createMockObjectSet.ts","../../src/mock/createMockOsdkObject.ts"],"names":["invariant","createPlatformClient"],"mappings":"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","file":"chunk-LJILKHB4.cjs","sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nexport function createMockAttachment(rid, blob, metadata) {\n return {\n rid,\n fetchContents() {\n !(blob != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `fetchContents was called on mock attachment \"${rid}\" but no blob was provided. ` + `Pass a Blob as the second argument to createMockAttachment to stub fetchContents.`) : invariant(false) : void 0;\n return Promise.resolve(new Response(blob));\n },\n fetchMetadata() {\n !(metadata != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `fetchMetadata was called on mock attachment \"${rid}\" but no metadata was provided. ` + `Pass AttachmentMetadata as the third argument to createMockAttachment to stub fetchMetadata.`) : invariant(false) : void 0;\n return Promise.resolve(metadata);\n }\n };\n}","/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nconst mockObjectSetDefinitions = new WeakMap();\nexport function createMockObjectSetWithResolver(objectType, resolver, calls = []) {\n const chain = (method, args) => createMockObjectSetWithResolver(objectType, resolver, [...calls, [method, args]]);\n const terminal = (method, args) => resolver([...calls, [method, args]]);\n const setOperation = (method, objectSets) => chain(method, objectSets.map(operand => {\n const definition = mockObjectSetDefinitions.get(operand);\n !definition ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${method} only supports mock object sets`) : invariant(false) : void 0;\n return definition;\n }));\n const objectSet = {\n where: clause => chain(\"where\", clause),\n union: (...objectSets) => setOperation(\"union\", objectSets),\n intersect: (...objectSets) => setOperation(\"intersect\", objectSets),\n subtract: (...objectSets) => setOperation(\"subtract\", objectSets),\n pivotTo: link => chain(\"pivotTo\", link),\n narrowToType: type => chain(\"narrowToType\", type),\n nearestNeighbors: (query, num, prop) => chain(\"nearestNeighbors\", {\n query,\n num,\n prop\n }),\n withProperties: () =>\n // TODO: Add with properties support\n void (!false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"withProperties is not supported in mocks\") : invariant(false) : void 0),\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchPage: async args => terminal(\"fetchPage\", args),\n fetchPageWithErrors: async args => {\n try {\n return {\n type: \"ok\",\n value: await terminal(\"fetchPage\", args)\n };\n } catch (error) {\n return {\n type: \"error\",\n error\n };\n }\n },\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchOne: async pk => terminal(\"fetchOne\", pk),\n fetchOneWithErrors: async pk => {\n try {\n return {\n type: \"ok\",\n value: await terminal(\"fetchOne\", pk)\n };\n } catch (error) {\n return {\n type: \"error\",\n error\n };\n }\n },\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n aggregate: async req => terminal(\"aggregate\", req),\n asyncIter: args => {\n const data = terminal(\"asyncIter\", args);\n return async function* () {\n for (const item of data) yield item;\n }();\n },\n subscribe: () => void (!false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"subscribe is not supported in mocks\") : invariant(false) : void 0),\n experimental_asyncIterLinks: () => void (!false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"experimental_asyncIterLinks is not supported in mocks\") : invariant(false) : void 0),\n $objectSetInternals: {\n def: {}\n }\n };\n mockObjectSetDefinitions.set(objectSet, {\n calls\n });\n return objectSet;\n}\nexport function resolveStub(stubs, calls, errorMsg) {\n for (let s = stubs.length - 1; s >= 0; s--) {\n const stub = stubs[s];\n if (stub.calls.length !== calls.length) continue;\n if (stub.calls.every(([m, a], i) => calls[i][0] === m && deepEqual(a, calls[i][1]))) {\n const terminal = calls[calls.length - 1][0];\n if (terminal === \"fetchPage\") {\n return {\n data: stub.value,\n nextPageToken: undefined\n };\n }\n return stub.value;\n }\n }\n throw new Error(errorMsg);\n}\nexport function deepEqual(a, b) {\n if (a === b) return true;\n\n // Support Vitest / Jest asymmetric matchers (e.g. expect.any(String),\n // expect.anything(), expect.stringContaining(...), expect.objectContaining(...))\n // in either position. Without this check, matchers would be compared by their\n // raw object shape and silently never match stub params.\n if (isAsymmetricMatcher(a)) return a.asymmetricMatch(b);\n if (isAsymmetricMatcher(b)) return b.asymmetricMatch(a);\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((v, i) => deepEqual(v, b[i]));\n }\n if (typeof a === \"object\") {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every(k => deepEqual(a[k], b[k]));\n }\n return false;\n}\nfunction isAsymmetricMatcher(x) {\n return x != null && typeof x === \"object\" && typeof x.asymmetricMatch === \"function\";\n}","/*\n * Copyright 2026 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 { createPlatformClient } from \"@osdk/client\";\nimport invariant from \"tiny-invariant\";\nimport { createMockObjectSetWithResolver, deepEqual, resolveStub } from \"./createMockObjectSetWithResolver.js\";\n// Well-known string key used by Foundry Platform APIs to pull the\n// SharedClientContext (baseUrl, tokenProvider, fetch) off a client. Matches\n// the value of `symbolClientContext` in `@osdk/shared.client2`.\nconst SYMBOL_CLIENT_CONTEXT = \"__osdkClientContext\";\nexport function createMockClient() {\n const stubs = [];\n const queryStubs = [];\n const resolve = (objectType, calls) => resolveStub(stubs.filter(s => s.objectType === objectType), calls, `No stub for request\\n`);\n const resolveQuery = (queryApiName, params) => {\n for (let i = queryStubs.length - 1; i >= 0; i--) {\n const stub = queryStubs[i];\n if (stub.queryApiName !== queryApiName) continue;\n if (deepEqual(stub.params, params)) {\n if (stub.error !== undefined) {\n throw stub.error;\n }\n return stub.value;\n }\n }\n const msg = `No stub for query '${queryApiName}'`;\n throw new Error(msg);\n };\n const mockClient = def => {\n !(\"apiName\" in def) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Expected ObjectType, Interface, or Query\") : invariant(false) : void 0;\n if (def.type === \"query\") {\n return {\n executeFunction: params => {\n try {\n return Promise.resolve(resolveQuery(def.apiName, params));\n } catch (e) {\n return Promise.reject(e);\n }\n }\n };\n }\n return createMockObjectSetWithResolver(def, calls => resolve(def.apiName, calls));\n };\n mockClient.when = callback => {\n let captured;\n const stubClient = def => {\n return createMockObjectSetWithResolver(def, calls => {\n captured = {\n objectType: def.apiName,\n calls\n };\n return {\n data: [],\n nextPageToken: undefined\n };\n });\n };\n\n // The callback actually runs synchronously but all terminal methods are typed as async.\n void callback(stubClient);\n const register = value => {\n if (captured) stubs.push({\n ...captured,\n value\n });\n };\n return {\n thenReturnObjects: register,\n thenReturnObject: register,\n thenReturnAggregation: register\n };\n };\n mockClient.whenObjectSet = (objectSet, callback) => {\n let capturedCalls;\n const capturingProxy = createMockObjectSetWithResolver(objectSet.$objectSetInternals.def, calls => {\n capturedCalls = calls;\n return {\n data: [],\n nextPageToken: undefined\n };\n });\n void callback(capturingProxy);\n const branded = objectSet;\n const register = value => {\n if (capturedCalls) {\n branded.__registerStub(capturedCalls, value);\n }\n };\n return {\n thenReturnObjects: register,\n thenReturnObject: register,\n thenReturnAggregation: register\n };\n };\n mockClient.whenQuery = (query, params) => {\n return {\n thenReturn: result => {\n queryStubs.push({\n queryApiName: query.apiName,\n params,\n value: result\n });\n },\n thenThrow: error => {\n queryStubs.push({\n queryApiName: query.apiName,\n params,\n error\n });\n }\n };\n };\n mockClient.clearStubs = () => {\n stubs.length = 0;\n queryStubs.length = 0;\n };\n\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n mockClient.fetchMetadata = async () => {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"fetchMetadata is not supported in mocks\") : invariant(false) : void 0;\n };\n\n // Attach a SharedClientContext so Foundry Platform API helpers\n // (e.g. `Users.getCurrent(client)`) don't crash inside `foundryPlatformFetch`\n // on an undefined `baseUrl` before any request is made. Callers intercept the\n // actual HTTP layer themselves (MSW, vi.spyOn(globalThis, \"fetch\"), etc.).\n Object.defineProperty(mockClient, SYMBOL_CLIENT_CONTEXT, {\n value: createPlatformClient(\"https://mock.invalid/\",\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n async () => \"mock-token\"),\n enumerable: false\n });\n\n // TODO: Implement WriteableClient operations\n\n return mockClient;\n}","/*\n * Copyright 2026 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 { createMockObjectSetWithResolver, resolveStub } from \"./createMockObjectSetWithResolver.js\";\nconst MOCK_OBJECT_SET_BRAND = Symbol(\"MOCK_OBJECT_SET_BRAND\");\nexport function createMockObjectSet(objectType) {\n const stubs = [];\n const resolve = calls => resolveStub(stubs, calls, `No stub registered on standalone MockObjectSet\\n`);\n const objectSet = createMockObjectSetWithResolver(objectType, resolve);\n objectSet[MOCK_OBJECT_SET_BRAND] = true;\n objectSet.__registerStub = (calls, value) => {\n stubs.push({\n calls,\n value\n });\n };\n return objectSet;\n}\n\n/** @internal */\nexport function isMockObjectSet(value) {\n return value != null && typeof value === \"object\" && MOCK_OBJECT_SET_BRAND in value;\n}","/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nimport { isMockObjectSet } from \"./createMockObjectSet.js\";\n\n// TODO: Add support for RDPs\n\nfunction createSingleLinkStub(linked) {\n if (linked instanceof Error) {\n return {\n fetchOne: () => Promise.reject(linked),\n fetchOneWithErrors: () => Promise.resolve({\n error: linked\n })\n };\n }\n return {\n fetchOne: () => Promise.resolve(linked),\n fetchOneWithErrors: () => Promise.resolve({\n value: linked\n })\n };\n}\nfunction createMissingLinkStub(linkName, objectApiName, primaryKey) {\n const makeError = () => new Error(`Link \"${linkName}\" was not configured on mock ${objectApiName} ` + `object with primary key ${primaryKey}. ` + `Pass it via the \\`links\\` option on createMockOsdkObject, or ` + `pass an Error instance to simulate a link failure.`);\n return {\n fetchOne: () => Promise.reject(makeError()),\n fetchOneWithErrors: () => Promise.resolve({\n error: makeError()\n }),\n fetchPage: () => Promise.reject(makeError()),\n asyncIter: () => {\n throw makeError();\n },\n aggregate: () => {\n throw makeError();\n }\n };\n}\nfunction createManyLinkStub(linkedObjects) {\n return {\n fetchOne: primaryKey => {\n if (linkedObjects.length > 0 && linkedObjects[0].$primaryKey == null) {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `fetchOne requires primaryKeyApiName to be set on linked objects`) : invariant(false) : void 0;\n }\n const found = linkedObjects.find(obj => obj.$primaryKey === primaryKey);\n !(found != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `fetchOne could not find object with primary key ${String(primaryKey)}`) : invariant(false) : void 0;\n return Promise.resolve(found);\n },\n fetchPage: () => Promise.resolve({\n data: linkedObjects,\n nextPageToken: undefined\n }),\n asyncIter: () => {\n let index = 0;\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n async next() {\n if (index < linkedObjects.length) {\n return {\n value: linkedObjects[index++],\n done: false\n };\n }\n return {\n value: undefined,\n done: true\n };\n }\n };\n },\n aggregate: () => {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `aggregate is not supported on mock link stubs.`) : invariant(false) : void 0;\n }\n };\n}\n\n/**\n * Creates a mock OSDK object for testing purposes.\n *\n * The mock object has the same shape as a real OSDK object including:\n * - $apiName, $objectType, $primaryKey, $title, $rid\n * - All provided properties\n * - Stub implementations that throw errors for unsupported operations\n *\n * Note: The primary key property must be included in the provided properties.\n * The primary key API name is read from the object type definition's\n * `primaryKeyApiName` field (set on generated object consts).\n *\n * @example\n * ```typescript\n * const employee = createMockOsdkObject(\n * Employee,\n * { employeeId: 1, fullName: \"John Doe\" },\n * { titlePropertyApiName: \"fullName\" },\n * );\n *\n * expect(employee.$primaryKey).toBe(1);\n * expect(employee.$title).toBe(\"John Doe\");\n * ```\n *\n * @param objectType - The object type definition (e.g., Employee)\n * @param properties - The properties for the mock object\n * @param options - Configuration including links, titlePropertyApiName, and $rid\n * @returns A frozen mock OSDK object\n */\nexport function createMockOsdkObject(objectType, properties, options = {}) {\n const {\n links,\n titlePropertyApiName\n } = options;\n const primaryKeyApiName = objectType.primaryKeyApiName;\n !(primaryKeyApiName != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Object type \"${objectType.apiName}\" does not have a primaryKeyApiName defined. ` + `Ensure you are using a generated object type constant that includes primaryKeyApiName.`) : invariant(false) : void 0;\n if (properties == null) {\n properties = {};\n }\n !(primaryKeyApiName in properties) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Primary key property \"${primaryKeyApiName}\" must be provided in properties for ${objectType.apiName}. ` + `Include \"${primaryKeyApiName}\" in the properties argument.`) : invariant(false) : void 0;\n if (titlePropertyApiName != null) {\n !(titlePropertyApiName in properties) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `titlePropertyApiName \"${titlePropertyApiName}\" was specified but not found in properties for ${objectType.apiName}`) : invariant(false) : void 0;\n }\n const $primaryKey = properties[primaryKeyApiName];\n const $title = titlePropertyApiName != null ? properties[titlePropertyApiName] : undefined;\n const $rid = options.$rid ?? `ri.mock.main.object.${objectType.apiName}.${String($primaryKey)}`;\n const mockObject = {\n $apiName: objectType.apiName,\n $objectType: objectType.apiName,\n ...properties\n };\n Object.defineProperty(mockObject, \"$primaryKey\", {\n get() {\n return $primaryKey;\n },\n enumerable: true\n });\n Object.defineProperty(mockObject, \"$title\", {\n get() {\n return $title;\n },\n enumerable: true\n });\n\n // Define $rid\n Object.defineProperty(mockObject, \"$rid\", {\n get() {\n return $rid;\n },\n enumerable: true\n });\n Object.defineProperty(mockObject, \"$objectSpecifier\", {\n get() {\n return `${objectType.apiName}:${String($primaryKey)}`;\n },\n enumerable: true\n });\n Object.defineProperty(mockObject, \"$link\", {\n get() {\n const linkAccessors = {};\n for (const [linkName, linkValue] of Object.entries(links ?? {})) {\n if (linkValue == null) {\n continue;\n }\n if (isMockObjectSet(linkValue)) {\n linkAccessors[linkName] = linkValue;\n } else if (Array.isArray(linkValue)) {\n linkAccessors[linkName] = createManyLinkStub(linkValue);\n } else {\n linkAccessors[linkName] = createSingleLinkStub(linkValue);\n }\n }\n return new Proxy(linkAccessors, {\n get(target, prop) {\n if (typeof prop === \"symbol\" || prop in target) {\n return target[prop];\n }\n return createMissingLinkStub(prop, objectType.apiName, String($primaryKey));\n }\n });\n },\n enumerable: true\n });\n Object.defineProperty(mockObject, \"$as\", {\n value: function $as() {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `$as is not supported on mock objects.`) : invariant(false) : void 0;\n },\n enumerable: false\n });\n Object.defineProperty(mockObject, \"$clone\", {\n value: function $clone(updates) {\n if (updates == null) {\n return createMockOsdkObject(objectType, {\n ...properties\n }, options);\n }\n if (primaryKeyApiName in updates) {\n !(updates[primaryKeyApiName] === $primaryKey) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update ${objectType.apiName} object with differing primary key values`) : invariant(false) : void 0;\n }\n const newProperties = {\n ...properties,\n ...updates\n };\n return createMockOsdkObject(objectType, newProperties, options);\n },\n enumerable: false\n });\n Object.defineProperty(mockObject, \"$__EXPERIMENTAL__NOT_SUPPORTED_YET__metadata\", {\n get() {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `$__EXPERIMENTAL__NOT_SUPPORTED_YET__metadata is not supported on mock objects.`) : invariant(false) : void 0;\n },\n enumerable: false\n });\n Object.defineProperty(mockObject, \"$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue\", {\n value: function $__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue() {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue is not supported on mock objects.`) : invariant(false) : void 0;\n },\n enumerable: false\n });\n return Object.freeze(mockObject);\n}"]}
@@ -1,24 +1,24 @@
1
1
  'use strict';
2
2
 
3
- var chunk4WVZEICG_cjs = require('./chunk-4WVZEICG.cjs');
3
+ var chunkLJILKHB4_cjs = require('./chunk-LJILKHB4.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "createMockAttachment", {
8
8
  enumerable: true,
9
- get: function () { return chunk4WVZEICG_cjs.createMockAttachment; }
9
+ get: function () { return chunkLJILKHB4_cjs.createMockAttachment; }
10
10
  });
11
11
  Object.defineProperty(exports, "createMockClient", {
12
12
  enumerable: true,
13
- get: function () { return chunk4WVZEICG_cjs.createMockClient; }
13
+ get: function () { return chunkLJILKHB4_cjs.createMockClient; }
14
14
  });
15
15
  Object.defineProperty(exports, "createMockObjectSet", {
16
16
  enumerable: true,
17
- get: function () { return chunk4WVZEICG_cjs.createMockObjectSet; }
17
+ get: function () { return chunkLJILKHB4_cjs.createMockObjectSet; }
18
18
  });
19
19
  Object.defineProperty(exports, "createMockOsdkObject", {
20
20
  enumerable: true,
21
- get: function () { return chunk4WVZEICG_cjs.createMockOsdkObject; }
21
+ get: function () { return chunkLJILKHB4_cjs.createMockOsdkObject; }
22
22
  });
23
23
  //# sourceMappingURL=index.cjs.map
24
24
  //# sourceMappingURL=index.cjs.map
@@ -1,24 +1,24 @@
1
1
  'use strict';
2
2
 
3
- var chunk4WVZEICG_cjs = require('../chunk-4WVZEICG.cjs');
3
+ var chunkLJILKHB4_cjs = require('../chunk-LJILKHB4.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "createMockAttachment", {
8
8
  enumerable: true,
9
- get: function () { return chunk4WVZEICG_cjs.createMockAttachment; }
9
+ get: function () { return chunkLJILKHB4_cjs.createMockAttachment; }
10
10
  });
11
11
  Object.defineProperty(exports, "createMockClient", {
12
12
  enumerable: true,
13
- get: function () { return chunk4WVZEICG_cjs.createMockClient; }
13
+ get: function () { return chunkLJILKHB4_cjs.createMockClient; }
14
14
  });
15
15
  Object.defineProperty(exports, "createMockObjectSet", {
16
16
  enumerable: true,
17
- get: function () { return chunk4WVZEICG_cjs.createMockObjectSet; }
17
+ get: function () { return chunkLJILKHB4_cjs.createMockObjectSet; }
18
18
  });
19
19
  Object.defineProperty(exports, "createMockOsdkObject", {
20
20
  enumerable: true,
21
- get: function () { return chunk4WVZEICG_cjs.createMockOsdkObject; }
21
+ get: function () { return chunkLJILKHB4_cjs.createMockOsdkObject; }
22
22
  });
23
23
  //# sourceMappingURL=experimental.cjs.map
24
24
  //# sourceMappingURL=experimental.cjs.map
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright 2026 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 { Employee } from "@osdk/client.test.ontology";
18
+ export async function objectSetArithmetic(client, employees) {
19
+ const employeeSet = client(Employee);
20
+ const [union, standaloneUnion, intersect, subtract] = await Promise.all([employeeSet.union(employees).fetchPage(), employees.union(employeeSet).fetchPage(), employeeSet.intersect(employees).fetchPage(), employeeSet.subtract(employees).fetchPage()]);
21
+ return {
22
+ union: union.data,
23
+ standaloneUnion: standaloneUnion.data,
24
+ intersect: intersect.data,
25
+ subtract: subtract.data
26
+ };
27
+ }
28
+ //# sourceMappingURL=objectSetArithmetic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectSetArithmetic.js","names":["Employee","objectSetArithmetic","client","employees","employeeSet","union","standaloneUnion","intersect","subtract","Promise","all","fetchPage","data"],"sources":["objectSetArithmetic.ts"],"sourcesContent":["/*\n * Copyright 2026 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 { ObjectSet, Osdk } from \"@osdk/api\";\nimport type { Client } from \"@osdk/client\";\nimport { Employee } from \"@osdk/client.test.ontology\";\n\nexport async function objectSetArithmetic(\n client: Client,\n employees: ObjectSet<Employee>,\n): Promise<{\n union: Array<Osdk.Instance<Employee>>;\n standaloneUnion: Array<Osdk.Instance<Employee>>;\n intersect: Array<Osdk.Instance<Employee>>;\n subtract: Array<Osdk.Instance<Employee>>;\n}> {\n const employeeSet = client(Employee);\n const [union, standaloneUnion, intersect, subtract] = await Promise.all([\n employeeSet.union(employees).fetchPage(),\n employees.union(employeeSet).fetchPage(),\n employeeSet.intersect(employees).fetchPage(),\n employeeSet.subtract(employees).fetchPage(),\n ]);\n\n return {\n union: union.data,\n standaloneUnion: standaloneUnion.data,\n intersect: intersect.data,\n subtract: subtract.data,\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,SAASA,QAAQ,QAAQ,4BAA4B;AAErD,OAAO,eAAeC,mBAAmBA,CACvCC,MAAc,EACdC,SAA8B,EAM7B;EACD,MAAMC,WAAW,GAAGF,MAAM,CAACF,QAAQ,CAAC;EACpC,MAAM,CAACK,KAAK,EAAEC,eAAe,EAAEC,SAAS,EAAEC,QAAQ,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CACtEN,WAAW,CAACC,KAAK,CAACF,SAAS,CAAC,CAACQ,SAAS,CAAC,CAAC,EACxCR,SAAS,CAACE,KAAK,CAACD,WAAW,CAAC,CAACO,SAAS,CAAC,CAAC,EACxCP,WAAW,CAACG,SAAS,CAACJ,SAAS,CAAC,CAACQ,SAAS,CAAC,CAAC,EAC5CP,WAAW,CAACI,QAAQ,CAACL,SAAS,CAAC,CAACQ,SAAS,CAAC,CAAC,CAC5C,CAAC;EAEF,OAAO;IACLN,KAAK,EAAEA,KAAK,CAACO,IAAI;IACjBN,eAAe,EAAEA,eAAe,CAACM,IAAI;IACrCL,SAAS,EAAEA,SAAS,CAACK,IAAI;IACzBJ,QAAQ,EAAEA,QAAQ,CAACI;EACrB,CAAC;AACH","ignoreList":[]}
@@ -15,16 +15,20 @@
15
15
  */
16
16
 
17
17
  import invariant from "tiny-invariant";
18
+ const mockObjectSetDefinitions = new WeakMap();
18
19
  export function createMockObjectSetWithResolver(objectType, resolver, calls = []) {
19
20
  const chain = (method, args) => createMockObjectSetWithResolver(objectType, resolver, [...calls, [method, args]]);
20
21
  const terminal = (method, args) => resolver([...calls, [method, args]]);
21
-
22
- // All methods should execute synchronously even if marked as async
23
- return {
22
+ const setOperation = (method, objectSets) => chain(method, objectSets.map(operand => {
23
+ const definition = mockObjectSetDefinitions.get(operand);
24
+ !definition ? process.env.NODE_ENV !== "production" ? invariant(false, `${method} only supports mock object sets`) : invariant(false) : void 0;
25
+ return definition;
26
+ }));
27
+ const objectSet = {
24
28
  where: clause => chain("where", clause),
25
- union: () => void (process.env.NODE_ENV !== "production" ? invariant(false, "union is not supported in mocks") : invariant(false)),
26
- intersect: () => void (process.env.NODE_ENV !== "production" ? invariant(false, "intersect is not supported in mocks") : invariant(false)),
27
- subtract: () => void (process.env.NODE_ENV !== "production" ? invariant(false, "subtract is not supported in mocks") : invariant(false)),
29
+ union: (...objectSets) => setOperation("union", objectSets),
30
+ intersect: (...objectSets) => setOperation("intersect", objectSets),
31
+ subtract: (...objectSets) => setOperation("subtract", objectSets),
28
32
  pivotTo: link => chain("pivotTo", link),
29
33
  narrowToType: type => chain("narrowToType", type),
30
34
  nearestNeighbors: (query, num, prop) => chain("nearestNeighbors", {
@@ -79,6 +83,10 @@ export function createMockObjectSetWithResolver(objectType, resolver, calls = []
79
83
  def: {}
80
84
  }
81
85
  };
86
+ mockObjectSetDefinitions.set(objectSet, {
87
+ calls
88
+ });
89
+ return objectSet;
82
90
  }
83
91
  export function resolveStub(stubs, calls, errorMsg) {
84
92
  for (let s = stubs.length - 1; s >= 0; s--) {
@@ -1 +1 @@
1
- {"version":3,"file":"createMockObjectSetWithResolver.js","names":["invariant","createMockObjectSetWithResolver","objectType","resolver","calls","chain","method","args","terminal","where","clause","union","process","env","NODE_ENV","intersect","subtract","pivotTo","link","narrowToType","type","nearestNeighbors","query","num","prop","withProperties","fetchPage","fetchPageWithErrors","value","error","fetchOne","pk","fetchOneWithErrors","aggregate","req","asyncIter","data","item","subscribe","experimental_asyncIterLinks","$objectSetInternals","def","resolveStub","stubs","errorMsg","s","length","stub","every","m","a","i","deepEqual","nextPageToken","undefined","Error","b","isAsymmetricMatcher","asymmetricMatch","Array","isArray","v","aKeys","Object","keys","bKeys","k","x"],"sources":["createMockObjectSetWithResolver.ts"],"sourcesContent":["/*\n * Copyright 2026 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 AggregateOpts,\n AggregationsResults,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n Osdk,\n PageResult,\n WhereClause,\n} from \"@osdk/api\";\nimport invariant from \"tiny-invariant\";\n\nexport type Call = [method: string, args: unknown];\n\nexport type Resolver = (calls: Call[]) => unknown;\n\nexport type Stub = { calls: Call[]; value: unknown };\n\nexport function createMockObjectSetWithResolver<\n Q extends ObjectOrInterfaceDefinition,\n>(objectType: Q, resolver: Resolver, calls: Call[] = []): ObjectSet<Q> {\n const chain = (method: string, args: unknown): ObjectSet<Q> =>\n createMockObjectSetWithResolver(objectType, resolver, [\n ...calls,\n [method, args],\n ]);\n\n const terminal = <T>(method: string, args: unknown): T =>\n resolver([...calls, [method, args]]) as T;\n\n // All methods should execute synchronously even if marked as async\n return {\n where: (clause: WhereClause<Q>) => chain(\"where\", clause),\n union: () =>\n void invariant(false, \"union is not supported in mocks\") as any,\n intersect: () =>\n void invariant(false, \"intersect is not supported in mocks\") as any,\n subtract: () =>\n void invariant(false, \"subtract is not supported in mocks\") as any,\n pivotTo: (link: string) => chain(\"pivotTo\", link) as any,\n narrowToType: (type: ObjectOrInterfaceDefinition) =>\n chain(\"narrowToType\", type) as any,\n nearestNeighbors: (query: unknown, num: number, prop: string) =>\n chain(\"nearestNeighbors\", { query, num, prop }),\n withProperties: () =>\n // TODO: Add with properties support\n void invariant(false, \"withProperties is not supported in mocks\") as any,\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchPage: async (args?: unknown) =>\n terminal<PageResult<Osdk.Instance<Q>>>(\"fetchPage\", args) as any,\n fetchPageWithErrors: async (args?: unknown) => {\n try {\n return {\n type: \"ok\" as const,\n value: await terminal(\"fetchPage\", args),\n } as any;\n } catch (error) {\n return { type: \"error\" as const, error };\n }\n },\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchOne: (async (pk: unknown) =>\n terminal<Osdk.Instance<Q>>(\"fetchOne\", pk)) as any,\n fetchOneWithErrors: (async (pk: unknown) => {\n try {\n return {\n type: \"ok\" as const,\n value: await terminal(\"fetchOne\", pk),\n } as any;\n } catch (error) {\n return { type: \"error\" as const, error } as any;\n }\n }) as any,\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n aggregate: async (req: AggregateOpts<Q>) =>\n terminal<AggregationsResults<Q, AggregateOpts<Q>>>(\n \"aggregate\",\n req,\n ) as any,\n asyncIter: (args?: unknown) => {\n const data = terminal<Osdk.Instance<Q>[]>(\"asyncIter\", args);\n return (async function* () {\n for (const item of data) yield item;\n })();\n },\n\n subscribe: () =>\n void invariant(false, \"subscribe is not supported in mocks\") as any,\n experimental_asyncIterLinks: () =>\n void invariant(\n false,\n \"experimental_asyncIterLinks is not supported in mocks\",\n ) as any,\n $objectSetInternals: {\n def: {} as Q,\n },\n } satisfies ObjectSet<Q>;\n}\n\nexport function resolveStub(\n stubs: Stub[],\n calls: Call[],\n errorMsg: string,\n): unknown {\n for (let s = stubs.length - 1; s >= 0; s--) {\n const stub = stubs[s];\n if (stub.calls.length !== calls.length) continue;\n if (\n stub.calls.every(\n ([m, a], i) => calls[i][0] === m && deepEqual(a, calls[i][1]),\n )\n ) {\n const terminal = calls[calls.length - 1][0];\n if (terminal === \"fetchPage\") {\n return { data: stub.value, nextPageToken: undefined };\n }\n return stub.value;\n }\n }\n throw new Error(errorMsg);\n}\n\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n\n // Support Vitest / Jest asymmetric matchers (e.g. expect.any(String),\n // expect.anything(), expect.stringContaining(...), expect.objectContaining(...))\n // in either position. Without this check, matchers would be compared by their\n // raw object shape and silently never match stub params.\n if (isAsymmetricMatcher(a)) return a.asymmetricMatch(b);\n if (isAsymmetricMatcher(b)) return b.asymmetricMatch(a);\n\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((v, i) => deepEqual(v, b[i]));\n }\n if (typeof a === \"object\") {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b as object);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every((k) =>\n deepEqual((a as any)[k], (b as Record<string, unknown>)[k]),\n );\n }\n return false;\n}\n\nfunction isAsymmetricMatcher(\n x: unknown,\n): x is { asymmetricMatch: (other: unknown) => boolean } {\n return (\n x != null &&\n typeof x === \"object\" &&\n typeof (x as { asymmetricMatch?: unknown }).asymmetricMatch === \"function\"\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createMockObjectSetWithResolver.js","names":["invariant","mockObjectSetDefinitions","WeakMap","createMockObjectSetWithResolver","objectType","resolver","calls","chain","method","args","terminal","setOperation","objectSets","map","operand","definition","get","process","env","NODE_ENV","objectSet","where","clause","union","intersect","subtract","pivotTo","link","narrowToType","type","nearestNeighbors","query","num","prop","withProperties","fetchPage","fetchPageWithErrors","value","error","fetchOne","pk","fetchOneWithErrors","aggregate","req","asyncIter","data","item","subscribe","experimental_asyncIterLinks","$objectSetInternals","def","set","resolveStub","stubs","errorMsg","s","length","stub","every","m","a","i","deepEqual","nextPageToken","undefined","Error","b","isAsymmetricMatcher","asymmetricMatch","Array","isArray","v","aKeys","Object","keys","bKeys","k","x"],"sources":["createMockObjectSetWithResolver.ts"],"sourcesContent":["/*\n * Copyright 2026 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 AggregateOpts,\n AggregationsResults,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n Osdk,\n PageResult,\n WhereClause,\n} from \"@osdk/api\";\nimport invariant from \"tiny-invariant\";\n\nexport type Call = [method: string, args: unknown];\n\nexport type Resolver = (calls: Call[]) => unknown;\n\nexport type Stub = { calls: Call[]; value: unknown };\n\ntype MockObjectSetDefinition = {\n calls: Call[];\n};\n\nconst mockObjectSetDefinitions = new WeakMap<object, MockObjectSetDefinition>();\n\nexport function createMockObjectSetWithResolver<\n Q extends ObjectOrInterfaceDefinition,\n>(objectType: Q, resolver: Resolver, calls: Call[] = []): ObjectSet<Q> {\n const chain = (method: string, args: unknown): ObjectSet<Q> =>\n createMockObjectSetWithResolver(objectType, resolver, [\n ...calls,\n [method, args],\n ]);\n\n const terminal = <T>(method: string, args: unknown): T =>\n resolver([...calls, [method, args]]) as T;\n\n const setOperation = (\n method: \"union\" | \"intersect\" | \"subtract\",\n objectSets: ReadonlyArray<ObjectSet<Q>>,\n ): ObjectSet<Q> =>\n chain(\n method,\n objectSets.map((operand) => {\n const definition = mockObjectSetDefinitions.get(operand);\n invariant(definition, `${method} only supports mock object sets`);\n return definition;\n }),\n );\n\n const objectSet = {\n where: (clause: WhereClause<Q>) => chain(\"where\", clause),\n union: (...objectSets: ReadonlyArray<ObjectSet<Q>>) =>\n setOperation(\"union\", objectSets),\n intersect: (...objectSets: ReadonlyArray<ObjectSet<Q>>) =>\n setOperation(\"intersect\", objectSets),\n subtract: (...objectSets: ReadonlyArray<ObjectSet<Q>>) =>\n setOperation(\"subtract\", objectSets),\n pivotTo: (link: string) => chain(\"pivotTo\", link) as any,\n narrowToType: (type: ObjectOrInterfaceDefinition) =>\n chain(\"narrowToType\", type) as any,\n nearestNeighbors: (query: unknown, num: number, prop: string) =>\n chain(\"nearestNeighbors\", { query, num, prop }),\n withProperties: () =>\n // TODO: Add with properties support\n void invariant(false, \"withProperties is not supported in mocks\") as any,\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchPage: async (args?: unknown) =>\n terminal<PageResult<Osdk.Instance<Q>>>(\"fetchPage\", args) as any,\n fetchPageWithErrors: async (args?: unknown) => {\n try {\n return {\n type: \"ok\" as const,\n value: await terminal(\"fetchPage\", args),\n } as any;\n } catch (error) {\n return { type: \"error\" as const, error };\n }\n },\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchOne: (async (pk: unknown) =>\n terminal<Osdk.Instance<Q>>(\"fetchOne\", pk)) as any,\n fetchOneWithErrors: (async (pk: unknown) => {\n try {\n return {\n type: \"ok\" as const,\n value: await terminal(\"fetchOne\", pk),\n } as any;\n } catch (error) {\n return { type: \"error\" as const, error } as any;\n }\n }) as any,\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n aggregate: async (req: AggregateOpts<Q>) =>\n terminal<AggregationsResults<Q, AggregateOpts<Q>>>(\n \"aggregate\",\n req,\n ) as any,\n asyncIter: (args?: unknown) => {\n const data = terminal<Osdk.Instance<Q>[]>(\"asyncIter\", args);\n return (async function* () {\n for (const item of data) yield item;\n })();\n },\n\n subscribe: () =>\n void invariant(false, \"subscribe is not supported in mocks\") as any,\n experimental_asyncIterLinks: () =>\n void invariant(\n false,\n \"experimental_asyncIterLinks is not supported in mocks\",\n ) as any,\n $objectSetInternals: {\n def: {} as Q,\n },\n } satisfies ObjectSet<Q>;\n\n mockObjectSetDefinitions.set(objectSet, {\n calls,\n });\n\n return objectSet;\n}\n\nexport function resolveStub(\n stubs: Stub[],\n calls: Call[],\n errorMsg: string,\n): unknown {\n for (let s = stubs.length - 1; s >= 0; s--) {\n const stub = stubs[s];\n if (stub.calls.length !== calls.length) continue;\n if (\n stub.calls.every(\n ([m, a], i) => calls[i][0] === m && deepEqual(a, calls[i][1]),\n )\n ) {\n const terminal = calls[calls.length - 1][0];\n if (terminal === \"fetchPage\") {\n return { data: stub.value, nextPageToken: undefined };\n }\n return stub.value;\n }\n }\n throw new Error(errorMsg);\n}\n\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n\n // Support Vitest / Jest asymmetric matchers (e.g. expect.any(String),\n // expect.anything(), expect.stringContaining(...), expect.objectContaining(...))\n // in either position. Without this check, matchers would be compared by their\n // raw object shape and silently never match stub params.\n if (isAsymmetricMatcher(a)) return a.asymmetricMatch(b);\n if (isAsymmetricMatcher(b)) return b.asymmetricMatch(a);\n\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((v, i) => deepEqual(v, b[i]));\n }\n if (typeof a === \"object\") {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b as object);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every((k) =>\n deepEqual((a as any)[k], (b as Record<string, unknown>)[k]),\n );\n }\n return false;\n}\n\nfunction isAsymmetricMatcher(\n x: unknown,\n): x is { asymmetricMatch: (other: unknown) => boolean } {\n return (\n x != null &&\n typeof x === \"object\" &&\n typeof (x as { asymmetricMatch?: unknown }).asymmetricMatch === \"function\"\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import type { ObjectSet, Osdk } from "@osdk/api";
2
+ import type { Client } from "@osdk/client";
3
+ import { Employee } from "@osdk/client.test.ontology";
4
+ export declare function objectSetArithmetic(client: Client, employees: ObjectSet<Employee>): Promise<{
5
+ union: Array<Osdk.Instance<Employee>>
6
+ standaloneUnion: Array<Osdk.Instance<Employee>>
7
+ intersect: Array<Osdk.Instance<Employee>>
8
+ subtract: Array<Osdk.Instance<Employee>>
9
+ }>;
@@ -0,0 +1 @@
1
+ {"mappings":"AAgBA,cAAc,WAAW,YAAY,WAAY;AACjD,cAAc,cAAc,cAAe;AAC3C,SAAS,gBAAgB,4BAA6B;AAEtD,OAAO,iBAAe,oBACpBA,QAAQ,QACRC,WAAW,UAAU,YACpB,QAAQ;CACT,OAAO,MAAM,KAAK,SAAS;CAC3B,iBAAiB,MAAM,KAAK,SAAS;CACrC,WAAW,MAAM,KAAK,SAAS;CAC/B,UAAU,MAAM,KAAK,SAAS;AAC/B","names":["client: Client","employees: ObjectSet<Employee>"],"sources":["../../../../src/example-function-tests/objectSetArithmetic/objectSetArithmetic.ts"],"version":3,"file":"objectSetArithmetic.d.ts"}
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAGE,6BACA,iBAIK,WAAY;AAGnB,YAAY,QAAQ,gBAAgB;AAEpC,YAAY,YAAYA,OAAO;AAE/B,YAAY,OAAO;CAAE,OAAO;CAAQ;AAAgB;AAEpD,OAAO,iBAAS,gCACd,UAAU,6BACVC,YAAY,GAAGC,UAAU,UAAUF,QAAO,SAAc,UAAU;AA+EpE,OAAO,iBAAS,YACdG,OAAO,QACPH,OAAO,QACPI;AAoBF,OAAO,iBAAS,UAAUC,YAAYC","names":["calls: Call[]","objectType: Q","resolver: Resolver","stubs: Stub[]","errorMsg: string","a: unknown","b: unknown"],"sources":["../../../src/mock/createMockObjectSetWithResolver.ts"],"version":3,"file":"createMockObjectSetWithResolver.d.ts"}
1
+ {"mappings":"AAgBA,cAGE,6BACA,iBAIK,WAAY;AAGnB,YAAY,QAAQ,gBAAgB;AAEpC,YAAY,YAAYA,OAAO;AAE/B,YAAY,OAAO;CAAE,OAAO;CAAQ;AAAgB;AAQpD,OAAO,iBAAS,gCACd,UAAU,6BACVC,YAAY,GAAGC,UAAU,UAAUF,QAAO,SAAc,UAAU;AAiGpE,OAAO,iBAAS,YACdG,OAAO,QACPH,OAAO,QACPI;AAoBF,OAAO,iBAAS,UAAUC,YAAYC","names":["calls: Call[]","objectType: Q","resolver: Resolver","stubs: Stub[]","errorMsg: string","a: unknown","b: unknown"],"sources":["../../../src/mock/createMockObjectSetWithResolver.ts"],"version":3,"file":"createMockObjectSetWithResolver.d.ts"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osdk/unit-testing",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "",
5
5
  "access": "public",
6
6
  "license": "Apache-2.0",
@@ -41,9 +41,9 @@
41
41
  "tiny-invariant": "^1.3.3"
42
42
  },
43
43
  "peerDependencies": {
44
- "@osdk/api": "^2.58.0",
45
- "@osdk/client": "^2.58.0",
46
- "@osdk/functions": "^1.20.0"
44
+ "@osdk/api": "^2.59.0",
45
+ "@osdk/functions": "^1.20.0",
46
+ "@osdk/client": "^2.59.0"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@microsoft/api-documenter": "^7.26.32",
@@ -52,12 +52,12 @@
52
52
  "msw": "^2.11.1",
53
53
  "typescript": "~5.5.4",
54
54
  "vitest": "^3.2.4",
55
- "@osdk/api": "~2.58.0",
56
- "@osdk/client.test.ontology": "~2.58.0",
57
- "@osdk/client": "~2.58.0",
55
+ "@osdk/api": "~2.59.0",
56
+ "@osdk/client": "~2.59.0",
57
+ "@osdk/monorepo.api-extractor": "~0.7.0",
58
58
  "@osdk/functions": "~1.20.0",
59
- "@osdk/monorepo.tsconfig": "~0.7.0",
60
- "@osdk/monorepo.api-extractor": "~0.7.0"
59
+ "@osdk/client.test.ontology": "~2.59.0",
60
+ "@osdk/monorepo.tsconfig": "~0.7.0"
61
61
  },
62
62
  "publishConfig": {
63
63
  "access": "public"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/mock/createMockAttachment.ts","../../src/mock/createMockObjectSetWithResolver.ts","../../src/mock/createMockClient.ts","../../src/mock/createMockObjectSet.ts","../../src/mock/createMockOsdkObject.ts"],"names":["invariant","createPlatformClient"],"mappings":"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","file":"chunk-4WVZEICG.cjs","sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nexport function createMockAttachment(rid, blob, metadata) {\n return {\n rid,\n fetchContents() {\n !(blob != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `fetchContents was called on mock attachment \"${rid}\" but no blob was provided. ` + `Pass a Blob as the second argument to createMockAttachment to stub fetchContents.`) : invariant(false) : void 0;\n return Promise.resolve(new Response(blob));\n },\n fetchMetadata() {\n !(metadata != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `fetchMetadata was called on mock attachment \"${rid}\" but no metadata was provided. ` + `Pass AttachmentMetadata as the third argument to createMockAttachment to stub fetchMetadata.`) : invariant(false) : void 0;\n return Promise.resolve(metadata);\n }\n };\n}","/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nexport function createMockObjectSetWithResolver(objectType, resolver, calls = []) {\n const chain = (method, args) => createMockObjectSetWithResolver(objectType, resolver, [...calls, [method, args]]);\n const terminal = (method, args) => resolver([...calls, [method, args]]);\n\n // All methods should execute synchronously even if marked as async\n return {\n where: clause => chain(\"where\", clause),\n union: () => void (!false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"union is not supported in mocks\") : invariant(false) : void 0),\n intersect: () => void (!false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"intersect is not supported in mocks\") : invariant(false) : void 0),\n subtract: () => void (!false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"subtract is not supported in mocks\") : invariant(false) : void 0),\n pivotTo: link => chain(\"pivotTo\", link),\n narrowToType: type => chain(\"narrowToType\", type),\n nearestNeighbors: (query, num, prop) => chain(\"nearestNeighbors\", {\n query,\n num,\n prop\n }),\n withProperties: () =>\n // TODO: Add with properties support\n void (!false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"withProperties is not supported in mocks\") : invariant(false) : void 0),\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchPage: async args => terminal(\"fetchPage\", args),\n fetchPageWithErrors: async args => {\n try {\n return {\n type: \"ok\",\n value: await terminal(\"fetchPage\", args)\n };\n } catch (error) {\n return {\n type: \"error\",\n error\n };\n }\n },\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n fetchOne: async pk => terminal(\"fetchOne\", pk),\n fetchOneWithErrors: async pk => {\n try {\n return {\n type: \"ok\",\n value: await terminal(\"fetchOne\", pk)\n };\n } catch (error) {\n return {\n type: \"error\",\n error\n };\n }\n },\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n aggregate: async req => terminal(\"aggregate\", req),\n asyncIter: args => {\n const data = terminal(\"asyncIter\", args);\n return async function* () {\n for (const item of data) yield item;\n }();\n },\n subscribe: () => void (!false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"subscribe is not supported in mocks\") : invariant(false) : void 0),\n experimental_asyncIterLinks: () => void (!false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"experimental_asyncIterLinks is not supported in mocks\") : invariant(false) : void 0),\n $objectSetInternals: {\n def: {}\n }\n };\n}\nexport function resolveStub(stubs, calls, errorMsg) {\n for (let s = stubs.length - 1; s >= 0; s--) {\n const stub = stubs[s];\n if (stub.calls.length !== calls.length) continue;\n if (stub.calls.every(([m, a], i) => calls[i][0] === m && deepEqual(a, calls[i][1]))) {\n const terminal = calls[calls.length - 1][0];\n if (terminal === \"fetchPage\") {\n return {\n data: stub.value,\n nextPageToken: undefined\n };\n }\n return stub.value;\n }\n }\n throw new Error(errorMsg);\n}\nexport function deepEqual(a, b) {\n if (a === b) return true;\n\n // Support Vitest / Jest asymmetric matchers (e.g. expect.any(String),\n // expect.anything(), expect.stringContaining(...), expect.objectContaining(...))\n // in either position. Without this check, matchers would be compared by their\n // raw object shape and silently never match stub params.\n if (isAsymmetricMatcher(a)) return a.asymmetricMatch(b);\n if (isAsymmetricMatcher(b)) return b.asymmetricMatch(a);\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((v, i) => deepEqual(v, b[i]));\n }\n if (typeof a === \"object\") {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every(k => deepEqual(a[k], b[k]));\n }\n return false;\n}\nfunction isAsymmetricMatcher(x) {\n return x != null && typeof x === \"object\" && typeof x.asymmetricMatch === \"function\";\n}","/*\n * Copyright 2026 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 { createPlatformClient } from \"@osdk/client\";\nimport invariant from \"tiny-invariant\";\nimport { createMockObjectSetWithResolver, deepEqual, resolveStub } from \"./createMockObjectSetWithResolver.js\";\n// Well-known string key used by Foundry Platform APIs to pull the\n// SharedClientContext (baseUrl, tokenProvider, fetch) off a client. Matches\n// the value of `symbolClientContext` in `@osdk/shared.client2`.\nconst SYMBOL_CLIENT_CONTEXT = \"__osdkClientContext\";\nexport function createMockClient() {\n const stubs = [];\n const queryStubs = [];\n const resolve = (objectType, calls) => resolveStub(stubs.filter(s => s.objectType === objectType), calls, `No stub for request\\n`);\n const resolveQuery = (queryApiName, params) => {\n for (let i = queryStubs.length - 1; i >= 0; i--) {\n const stub = queryStubs[i];\n if (stub.queryApiName !== queryApiName) continue;\n if (deepEqual(stub.params, params)) {\n if (stub.error !== undefined) {\n throw stub.error;\n }\n return stub.value;\n }\n }\n const msg = `No stub for query '${queryApiName}'`;\n throw new Error(msg);\n };\n const mockClient = def => {\n !(\"apiName\" in def) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Expected ObjectType, Interface, or Query\") : invariant(false) : void 0;\n if (def.type === \"query\") {\n return {\n executeFunction: params => {\n try {\n return Promise.resolve(resolveQuery(def.apiName, params));\n } catch (e) {\n return Promise.reject(e);\n }\n }\n };\n }\n return createMockObjectSetWithResolver(def, calls => resolve(def.apiName, calls));\n };\n mockClient.when = callback => {\n let captured;\n const stubClient = def => {\n return createMockObjectSetWithResolver(def, calls => {\n captured = {\n objectType: def.apiName,\n calls\n };\n return {\n data: [],\n nextPageToken: undefined\n };\n });\n };\n\n // The callback actually runs synchronously but all terminal methods are typed as async.\n void callback(stubClient);\n const register = value => {\n if (captured) stubs.push({\n ...captured,\n value\n });\n };\n return {\n thenReturnObjects: register,\n thenReturnObject: register,\n thenReturnAggregation: register\n };\n };\n mockClient.whenObjectSet = (objectSet, callback) => {\n let capturedCalls;\n const capturingProxy = createMockObjectSetWithResolver(objectSet.$objectSetInternals.def, calls => {\n capturedCalls = calls;\n return {\n data: [],\n nextPageToken: undefined\n };\n });\n void callback(capturingProxy);\n const branded = objectSet;\n const register = value => {\n if (capturedCalls) {\n branded.__registerStub(capturedCalls, value);\n }\n };\n return {\n thenReturnObjects: register,\n thenReturnObject: register,\n thenReturnAggregation: register\n };\n };\n mockClient.whenQuery = (query, params) => {\n return {\n thenReturn: result => {\n queryStubs.push({\n queryApiName: query.apiName,\n params,\n value: result\n });\n },\n thenThrow: error => {\n queryStubs.push({\n queryApiName: query.apiName,\n params,\n error\n });\n }\n };\n };\n mockClient.clearStubs = () => {\n stubs.length = 0;\n queryStubs.length = 0;\n };\n\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n mockClient.fetchMetadata = async () => {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"fetchMetadata is not supported in mocks\") : invariant(false) : void 0;\n };\n\n // Attach a SharedClientContext so Foundry Platform API helpers\n // (e.g. `Users.getCurrent(client)`) don't crash inside `foundryPlatformFetch`\n // on an undefined `baseUrl` before any request is made. Callers intercept the\n // actual HTTP layer themselves (MSW, vi.spyOn(globalThis, \"fetch\"), etc.).\n Object.defineProperty(mockClient, SYMBOL_CLIENT_CONTEXT, {\n value: createPlatformClient(\"https://mock.invalid/\",\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n async () => \"mock-token\"),\n enumerable: false\n });\n\n // TODO: Implement WriteableClient operations\n\n return mockClient;\n}","/*\n * Copyright 2026 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 { createMockObjectSetWithResolver, resolveStub } from \"./createMockObjectSetWithResolver.js\";\nconst MOCK_OBJECT_SET_BRAND = Symbol(\"MOCK_OBJECT_SET_BRAND\");\nexport function createMockObjectSet(objectType) {\n const stubs = [];\n const resolve = calls => resolveStub(stubs, calls, `No stub registered on standalone MockObjectSet\\n`);\n const objectSet = createMockObjectSetWithResolver(objectType, resolve);\n objectSet[MOCK_OBJECT_SET_BRAND] = true;\n objectSet.__registerStub = (calls, value) => {\n stubs.push({\n calls,\n value\n });\n };\n return objectSet;\n}\n\n/** @internal */\nexport function isMockObjectSet(value) {\n return value != null && typeof value === \"object\" && MOCK_OBJECT_SET_BRAND in value;\n}","/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nimport { isMockObjectSet } from \"./createMockObjectSet.js\";\n\n// TODO: Add support for RDPs\n\nfunction createSingleLinkStub(linked) {\n if (linked instanceof Error) {\n return {\n fetchOne: () => Promise.reject(linked),\n fetchOneWithErrors: () => Promise.resolve({\n error: linked\n })\n };\n }\n return {\n fetchOne: () => Promise.resolve(linked),\n fetchOneWithErrors: () => Promise.resolve({\n value: linked\n })\n };\n}\nfunction createMissingLinkStub(linkName, objectApiName, primaryKey) {\n const makeError = () => new Error(`Link \"${linkName}\" was not configured on mock ${objectApiName} ` + `object with primary key ${primaryKey}. ` + `Pass it via the \\`links\\` option on createMockOsdkObject, or ` + `pass an Error instance to simulate a link failure.`);\n return {\n fetchOne: () => Promise.reject(makeError()),\n fetchOneWithErrors: () => Promise.resolve({\n error: makeError()\n }),\n fetchPage: () => Promise.reject(makeError()),\n asyncIter: () => {\n throw makeError();\n },\n aggregate: () => {\n throw makeError();\n }\n };\n}\nfunction createManyLinkStub(linkedObjects) {\n return {\n fetchOne: primaryKey => {\n if (linkedObjects.length > 0 && linkedObjects[0].$primaryKey == null) {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `fetchOne requires primaryKeyApiName to be set on linked objects`) : invariant(false) : void 0;\n }\n const found = linkedObjects.find(obj => obj.$primaryKey === primaryKey);\n !(found != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `fetchOne could not find object with primary key ${String(primaryKey)}`) : invariant(false) : void 0;\n return Promise.resolve(found);\n },\n fetchPage: () => Promise.resolve({\n data: linkedObjects,\n nextPageToken: undefined\n }),\n asyncIter: () => {\n let index = 0;\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n // oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\n async next() {\n if (index < linkedObjects.length) {\n return {\n value: linkedObjects[index++],\n done: false\n };\n }\n return {\n value: undefined,\n done: true\n };\n }\n };\n },\n aggregate: () => {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `aggregate is not supported on mock link stubs.`) : invariant(false) : void 0;\n }\n };\n}\n\n/**\n * Creates a mock OSDK object for testing purposes.\n *\n * The mock object has the same shape as a real OSDK object including:\n * - $apiName, $objectType, $primaryKey, $title, $rid\n * - All provided properties\n * - Stub implementations that throw errors for unsupported operations\n *\n * Note: The primary key property must be included in the provided properties.\n * The primary key API name is read from the object type definition's\n * `primaryKeyApiName` field (set on generated object consts).\n *\n * @example\n * ```typescript\n * const employee = createMockOsdkObject(\n * Employee,\n * { employeeId: 1, fullName: \"John Doe\" },\n * { titlePropertyApiName: \"fullName\" },\n * );\n *\n * expect(employee.$primaryKey).toBe(1);\n * expect(employee.$title).toBe(\"John Doe\");\n * ```\n *\n * @param objectType - The object type definition (e.g., Employee)\n * @param properties - The properties for the mock object\n * @param options - Configuration including links, titlePropertyApiName, and $rid\n * @returns A frozen mock OSDK object\n */\nexport function createMockOsdkObject(objectType, properties, options = {}) {\n const {\n links,\n titlePropertyApiName\n } = options;\n const primaryKeyApiName = objectType.primaryKeyApiName;\n !(primaryKeyApiName != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Object type \"${objectType.apiName}\" does not have a primaryKeyApiName defined. ` + `Ensure you are using a generated object type constant that includes primaryKeyApiName.`) : invariant(false) : void 0;\n if (properties == null) {\n properties = {};\n }\n !(primaryKeyApiName in properties) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Primary key property \"${primaryKeyApiName}\" must be provided in properties for ${objectType.apiName}. ` + `Include \"${primaryKeyApiName}\" in the properties argument.`) : invariant(false) : void 0;\n if (titlePropertyApiName != null) {\n !(titlePropertyApiName in properties) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `titlePropertyApiName \"${titlePropertyApiName}\" was specified but not found in properties for ${objectType.apiName}`) : invariant(false) : void 0;\n }\n const $primaryKey = properties[primaryKeyApiName];\n const $title = titlePropertyApiName != null ? properties[titlePropertyApiName] : undefined;\n const $rid = options.$rid ?? `ri.mock.main.object.${objectType.apiName}.${String($primaryKey)}`;\n const mockObject = {\n $apiName: objectType.apiName,\n $objectType: objectType.apiName,\n ...properties\n };\n Object.defineProperty(mockObject, \"$primaryKey\", {\n get() {\n return $primaryKey;\n },\n enumerable: true\n });\n Object.defineProperty(mockObject, \"$title\", {\n get() {\n return $title;\n },\n enumerable: true\n });\n\n // Define $rid\n Object.defineProperty(mockObject, \"$rid\", {\n get() {\n return $rid;\n },\n enumerable: true\n });\n Object.defineProperty(mockObject, \"$objectSpecifier\", {\n get() {\n return `${objectType.apiName}:${String($primaryKey)}`;\n },\n enumerable: true\n });\n Object.defineProperty(mockObject, \"$link\", {\n get() {\n const linkAccessors = {};\n for (const [linkName, linkValue] of Object.entries(links ?? {})) {\n if (linkValue == null) {\n continue;\n }\n if (isMockObjectSet(linkValue)) {\n linkAccessors[linkName] = linkValue;\n } else if (Array.isArray(linkValue)) {\n linkAccessors[linkName] = createManyLinkStub(linkValue);\n } else {\n linkAccessors[linkName] = createSingleLinkStub(linkValue);\n }\n }\n return new Proxy(linkAccessors, {\n get(target, prop) {\n if (typeof prop === \"symbol\" || prop in target) {\n return target[prop];\n }\n return createMissingLinkStub(prop, objectType.apiName, String($primaryKey));\n }\n });\n },\n enumerable: true\n });\n Object.defineProperty(mockObject, \"$as\", {\n value: function $as() {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `$as is not supported on mock objects.`) : invariant(false) : void 0;\n },\n enumerable: false\n });\n Object.defineProperty(mockObject, \"$clone\", {\n value: function $clone(updates) {\n if (updates == null) {\n return createMockOsdkObject(objectType, {\n ...properties\n }, options);\n }\n if (primaryKeyApiName in updates) {\n !(updates[primaryKeyApiName] === $primaryKey) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update ${objectType.apiName} object with differing primary key values`) : invariant(false) : void 0;\n }\n const newProperties = {\n ...properties,\n ...updates\n };\n return createMockOsdkObject(objectType, newProperties, options);\n },\n enumerable: false\n });\n Object.defineProperty(mockObject, \"$__EXPERIMENTAL__NOT_SUPPORTED_YET__metadata\", {\n get() {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `$__EXPERIMENTAL__NOT_SUPPORTED_YET__metadata is not supported on mock objects.`) : invariant(false) : void 0;\n },\n enumerable: false\n });\n Object.defineProperty(mockObject, \"$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue\", {\n value: function $__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue() {\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, `$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue is not supported on mock objects.`) : invariant(false) : void 0;\n },\n enumerable: false\n });\n return Object.freeze(mockObject);\n}"]}