@osdk/unit-testing 0.0.0 → 0.10.0-main-46df2e9acb59eb78dbfd83fb4df4bc10247377d7
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 +243 -0
- package/build/browser/api/MockClient.js +2 -0
- package/build/browser/api/MockClient.js.map +1 -0
- package/build/browser/api/MockOsdkObjectOptions.js +2 -0
- package/build/browser/api/MockOsdkObjectOptions.js.map +1 -0
- package/build/browser/api/StubBuilders.js +2 -0
- package/build/browser/api/StubBuilders.js.map +1 -0
- package/build/browser/api/StubClient.js +2 -0
- package/build/browser/api/StubClient.js.map +1 -0
- package/build/browser/api/index.js +2 -0
- package/build/browser/api/index.js.map +1 -0
- package/build/browser/example-function-tests/basicAggregate/basicAggregate.js +49 -0
- package/build/browser/example-function-tests/basicAggregate/basicAggregate.js.map +1 -0
- package/build/browser/example-function-tests/basicFetchPage/basicFetchPage.js +29 -0
- package/build/browser/example-function-tests/basicFetchPage/basicFetchPage.js.map +1 -0
- package/build/browser/example-function-tests/basicQuery/basicQuery.js +27 -0
- package/build/browser/example-function-tests/basicQuery/basicQuery.js.map +1 -0
- package/build/browser/example-function-tests/objectAsInput/objectAsInput.js +26 -0
- package/build/browser/example-function-tests/objectAsInput/objectAsInput.js.map +1 -0
- package/build/browser/example-function-tests/objectSetAsInput/objectSetAsInput.js +29 -0
- package/build/browser/example-function-tests/objectSetAsInput/objectSetAsInput.js.map +1 -0
- package/build/browser/example-function-tests/objectWithLinks/objectWithLinks.js +43 -0
- package/build/browser/example-function-tests/objectWithLinks/objectWithLinks.js.map +1 -0
- package/build/browser/example-function-tests/ontologyEdits/ontologyEdits.js +37 -0
- package/build/browser/example-function-tests/ontologyEdits/ontologyEdits.js.map +1 -0
- package/build/browser/example-function-tests/platformApiWithMsw/platformApiWithMsw.js +25 -0
- package/build/browser/example-function-tests/platformApiWithMsw/platformApiWithMsw.js.map +1 -0
- package/build/browser/example-function-tests/queryWithArrayParams/queryWithArrayParams.js +27 -0
- package/build/browser/example-function-tests/queryWithArrayParams/queryWithArrayParams.js.map +1 -0
- package/build/browser/index.js +21 -0
- package/build/browser/index.js.map +1 -0
- package/build/browser/mock/createMockAttachment.js +31 -0
- package/build/browser/mock/createMockAttachment.js.map +1 -0
- package/build/browser/mock/createMockClient.js +142 -0
- package/build/browser/mock/createMockClient.js.map +1 -0
- package/build/browser/mock/createMockObjectSet.js +36 -0
- package/build/browser/mock/createMockObjectSet.js.map +1 -0
- package/build/browser/mock/createMockObjectSetWithResolver.js +122 -0
- package/build/browser/mock/createMockObjectSetWithResolver.js.map +1 -0
- package/build/browser/mock/createMockOsdkObject.js +235 -0
- package/build/browser/mock/createMockOsdkObject.js.map +1 -0
- package/build/browser/public/experimental.js +21 -0
- package/build/browser/public/experimental.js.map +1 -0
- package/build/cjs/chunk-SEUQK2F4.cjs +445 -0
- package/build/cjs/chunk-SEUQK2F4.cjs.map +1 -0
- package/build/cjs/index.cjs +24 -0
- package/build/cjs/index.cjs.map +1 -0
- package/build/cjs/index.d.cts +99 -0
- package/build/cjs/public/experimental.cjs +24 -0
- package/build/cjs/public/experimental.cjs.map +1 -0
- package/build/cjs/public/experimental.d.cts +3 -0
- package/build/esm/api/MockClient.js +2 -0
- package/build/esm/api/MockClient.js.map +1 -0
- package/build/esm/api/MockOsdkObjectOptions.js +2 -0
- package/build/esm/api/MockOsdkObjectOptions.js.map +1 -0
- package/build/esm/api/StubBuilders.js +2 -0
- package/build/esm/api/StubBuilders.js.map +1 -0
- package/build/esm/api/StubClient.js +2 -0
- package/build/esm/api/StubClient.js.map +1 -0
- package/build/esm/api/index.js +2 -0
- package/build/esm/api/index.js.map +1 -0
- package/build/esm/example-function-tests/basicAggregate/basicAggregate.js +49 -0
- package/build/esm/example-function-tests/basicAggregate/basicAggregate.js.map +1 -0
- package/build/esm/example-function-tests/basicFetchPage/basicFetchPage.js +29 -0
- package/build/esm/example-function-tests/basicFetchPage/basicFetchPage.js.map +1 -0
- package/build/esm/example-function-tests/basicQuery/basicQuery.js +27 -0
- package/build/esm/example-function-tests/basicQuery/basicQuery.js.map +1 -0
- package/build/esm/example-function-tests/objectAsInput/objectAsInput.js +26 -0
- package/build/esm/example-function-tests/objectAsInput/objectAsInput.js.map +1 -0
- package/build/esm/example-function-tests/objectSetAsInput/objectSetAsInput.js +29 -0
- package/build/esm/example-function-tests/objectSetAsInput/objectSetAsInput.js.map +1 -0
- package/build/esm/example-function-tests/objectWithLinks/objectWithLinks.js +43 -0
- package/build/esm/example-function-tests/objectWithLinks/objectWithLinks.js.map +1 -0
- package/build/esm/example-function-tests/ontologyEdits/ontologyEdits.js +37 -0
- package/build/esm/example-function-tests/ontologyEdits/ontologyEdits.js.map +1 -0
- package/build/esm/example-function-tests/platformApiWithMsw/platformApiWithMsw.js +25 -0
- package/build/esm/example-function-tests/platformApiWithMsw/platformApiWithMsw.js.map +1 -0
- package/build/esm/example-function-tests/queryWithArrayParams/queryWithArrayParams.js +27 -0
- package/build/esm/example-function-tests/queryWithArrayParams/queryWithArrayParams.js.map +1 -0
- package/build/esm/index.js +21 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/mock/createMockAttachment.js +31 -0
- package/build/esm/mock/createMockAttachment.js.map +1 -0
- package/build/esm/mock/createMockClient.js +142 -0
- package/build/esm/mock/createMockClient.js.map +1 -0
- package/build/esm/mock/createMockObjectSet.js +36 -0
- package/build/esm/mock/createMockObjectSet.js.map +1 -0
- package/build/esm/mock/createMockObjectSetWithResolver.js +122 -0
- package/build/esm/mock/createMockObjectSetWithResolver.js.map +1 -0
- package/build/esm/mock/createMockOsdkObject.js +235 -0
- package/build/esm/mock/createMockOsdkObject.js.map +1 -0
- package/build/esm/public/experimental.js +21 -0
- package/build/esm/public/experimental.js.map +1 -0
- package/build/types/api/MockClient.d.ts +21 -0
- package/build/types/api/MockClient.d.ts.map +1 -0
- package/build/types/api/MockOsdkObjectOptions.d.ts +14 -0
- package/build/types/api/MockOsdkObjectOptions.d.ts.map +1 -0
- package/build/types/api/StubBuilders.d.ts +28 -0
- package/build/types/api/StubBuilders.d.ts.map +1 -0
- package/build/types/api/StubClient.d.ts +5 -0
- package/build/types/api/StubClient.d.ts.map +1 -0
- package/build/types/api/index.d.ts +4 -0
- package/build/types/api/index.d.ts.map +1 -0
- package/build/types/example-function-tests/basicAggregate/basicAggregate.d.ts +3 -0
- package/build/types/example-function-tests/basicAggregate/basicAggregate.d.ts.map +1 -0
- package/build/types/example-function-tests/basicFetchPage/basicFetchPage.d.ts +4 -0
- package/build/types/example-function-tests/basicFetchPage/basicFetchPage.d.ts.map +1 -0
- package/build/types/example-function-tests/basicQuery/basicQuery.d.ts +3 -0
- package/build/types/example-function-tests/basicQuery/basicQuery.d.ts.map +1 -0
- package/build/types/example-function-tests/objectAsInput/objectAsInput.d.ts +3 -0
- package/build/types/example-function-tests/objectAsInput/objectAsInput.d.ts.map +1 -0
- package/build/types/example-function-tests/objectSetAsInput/objectSetAsInput.d.ts +4 -0
- package/build/types/example-function-tests/objectSetAsInput/objectSetAsInput.d.ts.map +1 -0
- package/build/types/example-function-tests/objectWithLinks/objectWithLinks.d.ts +7 -0
- package/build/types/example-function-tests/objectWithLinks/objectWithLinks.d.ts.map +1 -0
- package/build/types/example-function-tests/ontologyEdits/ontologyEdits.d.ts +7 -0
- package/build/types/example-function-tests/ontologyEdits/ontologyEdits.d.ts.map +1 -0
- package/build/types/example-function-tests/platformApiWithMsw/platformApiWithMsw.d.ts +2 -0
- package/build/types/example-function-tests/platformApiWithMsw/platformApiWithMsw.d.ts.map +1 -0
- package/build/types/example-function-tests/queryWithArrayParams/queryWithArrayParams.d.ts +2 -0
- package/build/types/example-function-tests/queryWithArrayParams/queryWithArrayParams.d.ts.map +1 -0
- package/build/types/index.d.ts +5 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/mock/createMockAttachment.d.ts +2 -0
- package/build/types/mock/createMockAttachment.d.ts.map +1 -0
- package/build/types/mock/createMockClient.d.ts +2 -0
- package/build/types/mock/createMockClient.d.ts.map +1 -0
- package/build/types/mock/createMockObjectSet.d.ts +9 -0
- package/build/types/mock/createMockObjectSet.d.ts.map +1 -0
- package/build/types/mock/createMockObjectSetWithResolver.d.ts +10 -0
- package/build/types/mock/createMockObjectSetWithResolver.d.ts.map +1 -0
- package/build/types/mock/createMockOsdkObject.d.ts +32 -0
- package/build/types/mock/createMockOsdkObject.d.ts.map +1 -0
- package/build/types/public/experimental.d.ts +5 -0
- package/build/types/public/experimental.d.ts.map +1 -0
- package/experimental.d.ts +17 -0
- package/package.json +92 -2
|
@@ -0,0 +1,27 @@
|
|
|
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 { queryTypeReturnsArray } from "@osdk/client.test.ontology";
|
|
18
|
+
export async function queryWithArrayParams(client, people) {
|
|
19
|
+
const result = await client(queryTypeReturnsArray).executeFunction({
|
|
20
|
+
people
|
|
21
|
+
});
|
|
22
|
+
if (!Array.isArray(result)) {
|
|
23
|
+
throw new Error("Expected array result");
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=queryWithArrayParams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryWithArrayParams.js","names":["queryTypeReturnsArray","queryWithArrayParams","client","people","result","executeFunction","Array","isArray","Error"],"sources":["queryWithArrayParams.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 { Client } from \"@osdk/client\";\nimport { queryTypeReturnsArray } from \"@osdk/client.test.ontology\";\n\nexport async function queryWithArrayParams(\n client: Client,\n people: readonly string[],\n): Promise<string[]> {\n const result = await client(queryTypeReturnsArray).executeFunction({\n people,\n });\n\n if (!Array.isArray(result)) {\n throw new Error(\"Expected array result\");\n }\n\n return result;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,qBAAqB,QAAQ,4BAA4B;AAElE,OAAO,eAAeC,oBAAoBA,CACxCC,MAAc,EACdC,MAAyB,EACN;EACnB,MAAMC,MAAM,GAAG,MAAMF,MAAM,CAACF,qBAAqB,CAAC,CAACK,eAAe,CAAC;IACjEF;EACF,CAAC,CAAC;EAEF,IAAI,CAACG,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,EAAE;IAC1B,MAAM,IAAII,KAAK,CAAC,uBAAuB,CAAC;EAC1C;EAEA,OAAOJ,MAAM;AACf","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
export { createMockAttachment } from "./mock/createMockAttachment.js";
|
|
18
|
+
export { createMockClient } from "./mock/createMockClient.js";
|
|
19
|
+
export { createMockObjectSet } from "./mock/createMockObjectSet.js";
|
|
20
|
+
export { createMockOsdkObject } from "./mock/createMockOsdkObject.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["createMockAttachment","createMockClient","createMockObjectSet","createMockOsdkObject"],"sources":["index.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\nexport type {\n AggregateStubBuilder,\n FetchOneStubBuilder,\n FetchPageStubBuilder,\n MockClient,\n MockOsdkObjectOptions,\n QueryStubBuilder,\n StubBuilderFor,\n StubClient,\n} from \"./api/index.js\";\n\nexport { createMockAttachment } from \"./mock/createMockAttachment.js\";\nexport { createMockClient } from \"./mock/createMockClient.js\";\nexport { createMockObjectSet } from \"./mock/createMockObjectSet.js\";\nexport { createMockOsdkObject } from \"./mock/createMockOsdkObject.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA,SAASA,oBAAoB,QAAQ,gCAAgC;AACrE,SAASC,gBAAgB,QAAQ,4BAA4B;AAC7D,SAASC,mBAAmB,QAAQ,+BAA+B;AACnE,SAASC,oBAAoB,QAAQ,gCAAgC","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
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 invariant from "tiny-invariant";
|
|
18
|
+
export function createMockAttachment(rid, blob, metadata) {
|
|
19
|
+
return {
|
|
20
|
+
rid,
|
|
21
|
+
fetchContents() {
|
|
22
|
+
!(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;
|
|
23
|
+
return Promise.resolve(new Response(blob));
|
|
24
|
+
},
|
|
25
|
+
fetchMetadata() {
|
|
26
|
+
!(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;
|
|
27
|
+
return Promise.resolve(metadata);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=createMockAttachment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMockAttachment.js","names":["invariant","createMockAttachment","rid","blob","metadata","fetchContents","process","env","NODE_ENV","Promise","resolve","Response","fetchMetadata"],"sources":["createMockAttachment.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 { Attachment, AttachmentMetadata } from \"@osdk/api\";\nimport invariant from \"tiny-invariant\";\n\nexport function createMockAttachment(\n rid: string,\n blob?: Blob,\n metadata?: AttachmentMetadata,\n): Attachment {\n return {\n rid,\n fetchContents() {\n invariant(\n blob != null,\n `fetchContents was called on mock attachment \"${rid}\" but no blob was provided. `\n + `Pass a Blob as the second argument to createMockAttachment to stub fetchContents.`,\n );\n return Promise.resolve(new Response(blob));\n },\n fetchMetadata() {\n invariant(\n metadata != null,\n `fetchMetadata was called on mock attachment \"${rid}\" but no metadata was provided. `\n + `Pass AttachmentMetadata as the third argument to createMockAttachment to stub fetchMetadata.`,\n );\n return Promise.resolve(metadata);\n },\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,OAAOA,SAAS,MAAM,gBAAgB;AAEtC,OAAO,SAASC,oBAAoBA,CAClCC,GAAW,EACXC,IAAW,EACXC,QAA6B,EACjB;EACZ,OAAO;IACLF,GAAG;IACHG,aAAaA,CAAA,EAAG;MACd,EACEF,IAAI,IAAI,IAAI,IAAAG,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADdR,SAAS,QAEP,gDAAgDE,GAAG,8BAA8B,GAC7E,mFAAmF,IAHzFF,SAAS;MAKT,OAAOS,OAAO,CAACC,OAAO,CAAC,IAAIC,QAAQ,CAACR,IAAI,CAAC,CAAC;IAC5C,CAAC;IACDS,aAAaA,CAAA,EAAG;MACd,EACER,QAAQ,IAAI,IAAI,IAAAE,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADlBR,SAAS,QAEP,gDAAgDE,GAAG,kCAAkC,GACjF,8FAA8F,IAHpGF,SAAS;MAKT,OAAOS,OAAO,CAACC,OAAO,CAACN,QAAQ,CAAC;IAClC;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,142 @@
|
|
|
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 { createPlatformClient } from "@osdk/client";
|
|
18
|
+
import invariant from "tiny-invariant";
|
|
19
|
+
import { createMockObjectSetWithResolver, deepEqual, resolveStub } from "./createMockObjectSetWithResolver.js";
|
|
20
|
+
// Well-known string key used by Foundry Platform APIs to pull the
|
|
21
|
+
// SharedClientContext (baseUrl, tokenProvider, fetch) off a client. Matches
|
|
22
|
+
// the value of `symbolClientContext` in `@osdk/shared.client2`.
|
|
23
|
+
const SYMBOL_CLIENT_CONTEXT = "__osdkClientContext";
|
|
24
|
+
export function createMockClient() {
|
|
25
|
+
const stubs = [];
|
|
26
|
+
const queryStubs = [];
|
|
27
|
+
const resolve = (objectType, calls) => resolveStub(stubs.filter(s => s.objectType === objectType), calls, `No stub for request\n`);
|
|
28
|
+
const resolveQuery = (queryApiName, params) => {
|
|
29
|
+
for (const stub of queryStubs) {
|
|
30
|
+
if (stub.queryApiName !== queryApiName) continue;
|
|
31
|
+
if (deepEqual(stub.params, params)) {
|
|
32
|
+
if (stub.error !== undefined) {
|
|
33
|
+
throw stub.error;
|
|
34
|
+
}
|
|
35
|
+
return stub.value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
throw new Error(`No stub for query '${queryApiName}'`);
|
|
39
|
+
};
|
|
40
|
+
const mockClient = def => {
|
|
41
|
+
!("apiName" in def) ? process.env.NODE_ENV !== "production" ? invariant(false, "Expected ObjectType, Interface, or Query") : invariant(false) : void 0;
|
|
42
|
+
if (def.type === "query") {
|
|
43
|
+
return {
|
|
44
|
+
executeFunction: params => {
|
|
45
|
+
try {
|
|
46
|
+
return Promise.resolve(resolveQuery(def.apiName, params));
|
|
47
|
+
} catch (e) {
|
|
48
|
+
return Promise.reject(e);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return createMockObjectSetWithResolver(def, calls => resolve(def.apiName, calls));
|
|
54
|
+
};
|
|
55
|
+
mockClient.when = callback => {
|
|
56
|
+
let captured;
|
|
57
|
+
// The callback actually runs synchronously but all terminal methods are typed as async.
|
|
58
|
+
void callback(def => {
|
|
59
|
+
return createMockObjectSetWithResolver(def, calls => {
|
|
60
|
+
captured = {
|
|
61
|
+
objectType: def.apiName,
|
|
62
|
+
calls
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
data: [],
|
|
66
|
+
nextPageToken: undefined
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
const register = value => {
|
|
71
|
+
if (captured) stubs.push({
|
|
72
|
+
...captured,
|
|
73
|
+
value
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
thenReturnObjects: register,
|
|
78
|
+
thenReturnObject: register,
|
|
79
|
+
thenReturnAggregation: register
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
mockClient.whenObjectSet = (objectSet, callback) => {
|
|
83
|
+
let capturedCalls;
|
|
84
|
+
const capturingProxy = createMockObjectSetWithResolver(objectSet.$objectSetInternals.def, calls => {
|
|
85
|
+
capturedCalls = calls;
|
|
86
|
+
return {
|
|
87
|
+
data: [],
|
|
88
|
+
nextPageToken: undefined
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
void callback(capturingProxy);
|
|
92
|
+
const register = value => {
|
|
93
|
+
if (capturedCalls) {
|
|
94
|
+
objectSet.__registerStub(capturedCalls, value);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
return {
|
|
98
|
+
thenReturnObjects: register,
|
|
99
|
+
thenReturnObject: register,
|
|
100
|
+
thenReturnAggregation: register
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
mockClient.whenQuery = (query, params) => {
|
|
104
|
+
return {
|
|
105
|
+
thenReturn: result => {
|
|
106
|
+
queryStubs.push({
|
|
107
|
+
queryApiName: query.apiName,
|
|
108
|
+
params,
|
|
109
|
+
value: result
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
thenThrow: error => {
|
|
113
|
+
queryStubs.push({
|
|
114
|
+
queryApiName: query.apiName,
|
|
115
|
+
params,
|
|
116
|
+
error
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
mockClient.clearStubs = () => {
|
|
122
|
+
stubs.length = 0;
|
|
123
|
+
queryStubs.length = 0;
|
|
124
|
+
};
|
|
125
|
+
mockClient.fetchMetadata = async () => {
|
|
126
|
+
process.env.NODE_ENV !== "production" ? invariant(false, "fetchMetadata is not supported in mocks") : invariant(false);
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
// Attach a SharedClientContext so Foundry Platform API helpers
|
|
130
|
+
// (e.g. `Users.getCurrent(client)`) don't crash inside `foundryPlatformFetch`
|
|
131
|
+
// on an undefined `baseUrl` before any request is made. Callers intercept the
|
|
132
|
+
// actual HTTP layer themselves (MSW, vi.spyOn(globalThis, "fetch"), etc.).
|
|
133
|
+
Object.defineProperty(mockClient, SYMBOL_CLIENT_CONTEXT, {
|
|
134
|
+
value: createPlatformClient("https://mock.invalid/", async () => "mock-token"),
|
|
135
|
+
enumerable: false
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// TODO: Implement WriteableClient operations
|
|
139
|
+
|
|
140
|
+
return mockClient;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=createMockClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMockClient.js","names":["createPlatformClient","invariant","createMockObjectSetWithResolver","deepEqual","resolveStub","SYMBOL_CLIENT_CONTEXT","createMockClient","stubs","queryStubs","resolve","objectType","calls","filter","s","resolveQuery","queryApiName","params","stub","error","undefined","value","Error","mockClient","def","process","env","NODE_ENV","type","executeFunction","Promise","apiName","e","reject","when","callback","captured","data","nextPageToken","register","push","thenReturnObjects","thenReturnObject","thenReturnAggregation","whenObjectSet","objectSet","capturedCalls","capturingProxy","$objectSetInternals","__registerStub","whenQuery","query","thenReturn","result","thenThrow","clearStubs","length","fetchMetadata","Object","defineProperty","enumerable"],"sources":["createMockClient.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 CompileTimeMetadata,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n QueryDefinition,\n} from \"@osdk/api\";\nimport { createPlatformClient } from \"@osdk/client\";\nimport invariant from \"tiny-invariant\";\nimport type {\n MockClient,\n ObjectSetStubCallback,\n StubPatternCallback,\n} from \"../api/MockClient.js\";\nimport type { QueryStubBuilder, StubBuilderFor } from \"../api/StubBuilders.js\";\nimport type { StubClient } from \"../api/StubClient.js\";\nimport { type MockObjectSetBranded } from \"./createMockObjectSet.js\";\nimport {\n type Call,\n createMockObjectSetWithResolver,\n deepEqual,\n resolveStub,\n type Stub,\n} from \"./createMockObjectSetWithResolver.js\";\n\ntype ClientStub = Stub & { objectType: string };\n\ntype QueryStub = {\n queryApiName: string;\n params: unknown;\n value?: unknown;\n error?: Error;\n};\n\ntype QueryReturnTypeFromDef<Q extends QueryDefinition> = ReturnType<\n CompileTimeMetadata<Q>[\"signature\"]\n> extends Promise<infer R> ? R : never;\n\ntype QueryParamsFromDef<Q extends QueryDefinition> =\n Parameters<CompileTimeMetadata<Q>[\"signature\"]> extends [infer P] ? P\n : undefined;\n\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\";\n\nexport function createMockClient(): MockClient {\n const stubs: ClientStub[] = [];\n const queryStubs: QueryStub[] = [];\n\n const resolve = (objectType: string, calls: Call[]): unknown =>\n resolveStub(\n stubs.filter(s => s.objectType === objectType),\n calls,\n `No stub for request\\n`,\n );\n\n const resolveQuery = (queryApiName: string, params: unknown): unknown => {\n for (const stub of queryStubs) {\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\n const msg = `No stub for query '${queryApiName}'`;\n throw new Error(msg);\n };\n\n const mockClient = ((\n def: ObjectOrInterfaceDefinition | QueryDefinition,\n ) => {\n invariant(\"apiName\" in def, \"Expected ObjectType, Interface, or Query\");\n\n if (def.type === \"query\") {\n return {\n executeFunction: (params?: unknown) => {\n try {\n return Promise.resolve(resolveQuery(def.apiName, params));\n } catch (e) {\n return Promise.reject(e);\n }\n },\n };\n }\n\n return createMockObjectSetWithResolver(\n def,\n (calls) => resolve(def.apiName, calls),\n );\n }) as MockClient;\n\n mockClient.when = <T>(\n callback: StubPatternCallback<T>,\n ): StubBuilderFor<T> => {\n let captured: { objectType: string; calls: Call[] } | undefined;\n\n const stubClient: StubClient = (def: ObjectOrInterfaceDefinition) => {\n return createMockObjectSetWithResolver(def, (calls) => {\n captured = { objectType: def.apiName, calls };\n return { data: [], nextPageToken: undefined };\n });\n };\n\n // The callback actually runs synchronously but all terminal methods are typed as async.\n void callback(stubClient);\n\n const register = (value: unknown) => {\n if (captured) stubs.push({ ...captured, value });\n };\n\n return {\n thenReturnObjects: register,\n thenReturnObject: register,\n thenReturnAggregation: register,\n } as unknown as StubBuilderFor<T>;\n };\n\n mockClient.whenObjectSet = <\n Q extends ObjectOrInterfaceDefinition,\n T,\n >(\n objectSet: ObjectSet<Q>,\n callback: ObjectSetStubCallback<Q, T>,\n ): StubBuilderFor<T> => {\n let capturedCalls: Call[] | undefined;\n\n const capturingProxy = createMockObjectSetWithResolver(\n objectSet.$objectSetInternals.def,\n (calls) => {\n capturedCalls = calls;\n return { data: [], nextPageToken: undefined };\n },\n );\n\n void callback(capturingProxy);\n\n const branded = objectSet as unknown as MockObjectSetBranded<Q>;\n\n const register = (value: unknown) => {\n if (capturedCalls) {\n branded.__registerStub(capturedCalls, value);\n }\n };\n\n return {\n thenReturnObjects: register,\n thenReturnObject: register,\n thenReturnAggregation: register,\n } as unknown as StubBuilderFor<T>;\n };\n\n mockClient.whenQuery = <Q extends QueryDefinition>(\n query: Q,\n params?: QueryParamsFromDef<Q>,\n ): QueryStubBuilder<QueryReturnTypeFromDef<Q>> => {\n return {\n thenReturn: (result: QueryReturnTypeFromDef<Q>) => {\n queryStubs.push({\n queryApiName: query.apiName,\n params,\n value: result,\n });\n },\n thenThrow: (error: Error) => {\n queryStubs.push({\n queryApiName: query.apiName,\n params,\n error,\n });\n },\n };\n };\n\n mockClient.clearStubs = () => {\n stubs.length = 0;\n queryStubs.length = 0;\n };\n\n mockClient.fetchMetadata = async () => {\n invariant(false, \"fetchMetadata is not supported in mocks\");\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(\n \"https://mock.invalid/\",\n async () => \"mock-token\",\n ),\n enumerable: false,\n });\n\n // TODO: Implement WriteableClient operations\n\n return mockClient;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,SAASA,oBAAoB,QAAQ,cAAc;AACnD,OAAOC,SAAS,MAAM,gBAAgB;AAStC,SAEEC,+BAA+B,EAC/BC,SAAS,EACTC,WAAW,QAEN,sCAAsC;AAmB7C;AACA;AACA;AACA,MAAMC,qBAAqB,GAAG,qBAAqB;AAEnD,OAAO,SAASC,gBAAgBA,CAAA,EAAe;EAC7C,MAAMC,KAAmB,GAAG,EAAE;EAC9B,MAAMC,UAAuB,GAAG,EAAE;EAElC,MAAMC,OAAO,GAAGA,CAACC,UAAkB,EAAEC,KAAa,KAChDP,WAAW,CACTG,KAAK,CAACK,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACH,UAAU,KAAKA,UAAU,CAAC,EAC9CC,KAAK,EACL,uBACF,CAAC;EAEH,MAAMG,YAAY,GAAGA,CAACC,YAAoB,EAAEC,MAAe,KAAc;IACvE,KAAK,MAAMC,IAAI,IAAIT,UAAU,EAAE;MAC7B,IAAIS,IAAI,CAACF,YAAY,KAAKA,YAAY,EAAE;MACxC,IAAIZ,SAAS,CAACc,IAAI,CAACD,MAAM,EAAEA,MAAM,CAAC,EAAE;QAClC,IAAIC,IAAI,CAACC,KAAK,KAAKC,SAAS,EAAE;UAC5B,MAAMF,IAAI,CAACC,KAAK;QAClB;QACA,OAAOD,IAAI,CAACG,KAAK;MACnB;IACF;IAGA,MAAM,IAAIC,KAAK,CADH,sBAAsBN,YAAY,GAC3B,CAAC;EACtB,CAAC;EAED,MAAMO,UAAU,GACdC,GAAkD,IAC/C;IACH,EAAU,SAAS,IAAIA,GAAG,IAAAC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAA1BzB,SAAS,QAAmB,0CAA0C,IAAtEA,SAAS;IAET,IAAIsB,GAAG,CAACI,IAAI,KAAK,OAAO,EAAE;MACxB,OAAO;QACLC,eAAe,EAAGZ,MAAgB,IAAK;UACrC,IAAI;YACF,OAAOa,OAAO,CAACpB,OAAO,CAACK,YAAY,CAACS,GAAG,CAACO,OAAO,EAAEd,MAAM,CAAC,CAAC;UAC3D,CAAC,CAAC,OAAOe,CAAC,EAAE;YACV,OAAOF,OAAO,CAACG,MAAM,CAACD,CAAC,CAAC;UAC1B;QACF;MACF,CAAC;IACH;IAEA,OAAO7B,+BAA+B,CACpCqB,GAAG,EACFZ,KAAK,IAAKF,OAAO,CAACc,GAAG,CAACO,OAAO,EAAEnB,KAAK,CACvC,CAAC;EACH,CAAgB;EAEhBW,UAAU,CAACW,IAAI,GACbC,QAAgC,IACV;IACtB,IAAIC,QAA2D;IAS/D;IACA,KAAKD,QAAQ,CARmBX,GAAgC,IAAK;MACnE,OAAOrB,+BAA+B,CAACqB,GAAG,EAAGZ,KAAK,IAAK;QACrDwB,QAAQ,GAAG;UAAEzB,UAAU,EAAEa,GAAG,CAACO,OAAO;UAAEnB;QAAM,CAAC;QAC7C,OAAO;UAAEyB,IAAI,EAAE,EAAE;UAAEC,aAAa,EAAElB;QAAU,CAAC;MAC/C,CAAC,CAAC;IACJ,CAGwB,CAAC;IAEzB,MAAMmB,QAAQ,GAAIlB,KAAc,IAAK;MACnC,IAAIe,QAAQ,EAAE5B,KAAK,CAACgC,IAAI,CAAC;QAAE,GAAGJ,QAAQ;QAAEf;MAAM,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;MACLoB,iBAAiB,EAAEF,QAAQ;MAC3BG,gBAAgB,EAAEH,QAAQ;MAC1BI,qBAAqB,EAAEJ;IACzB,CAAC;EACH,CAAC;EAEDhB,UAAU,CAACqB,aAAa,GAAG,CAIzBC,SAAuB,EACvBV,QAAqC,KACf;IACtB,IAAIW,aAAiC;IAErC,MAAMC,cAAc,GAAG5C,+BAA+B,CACpD0C,SAAS,CAACG,mBAAmB,CAACxB,GAAG,EAChCZ,KAAK,IAAK;MACTkC,aAAa,GAAGlC,KAAK;MACrB,OAAO;QAAEyB,IAAI,EAAE,EAAE;QAAEC,aAAa,EAAElB;MAAU,CAAC;IAC/C,CACF,CAAC;IAED,KAAKe,QAAQ,CAACY,cAAc,CAAC;IAI7B,MAAMR,QAAQ,GAAIlB,KAAc,IAAK;MACnC,IAAIyB,aAAa,EAAE;QAHLD,SAAS,CAIbI,cAAc,CAACH,aAAa,EAAEzB,KAAK,CAAC;MAC9C;IACF,CAAC;IAED,OAAO;MACLoB,iBAAiB,EAAEF,QAAQ;MAC3BG,gBAAgB,EAAEH,QAAQ;MAC1BI,qBAAqB,EAAEJ;IACzB,CAAC;EACH,CAAC;EAEDhB,UAAU,CAAC2B,SAAS,GAAG,CACrBC,KAAQ,EACRlC,MAA8B,KACkB;IAChD,OAAO;MACLmC,UAAU,EAAGC,MAAiC,IAAK;QACjD5C,UAAU,CAAC+B,IAAI,CAAC;UACdxB,YAAY,EAAEmC,KAAK,CAACpB,OAAO;UAC3Bd,MAAM;UACNI,KAAK,EAAEgC;QACT,CAAC,CAAC;MACJ,CAAC;MACDC,SAAS,EAAGnC,KAAY,IAAK;QAC3BV,UAAU,CAAC+B,IAAI,CAAC;UACdxB,YAAY,EAAEmC,KAAK,CAACpB,OAAO;UAC3Bd,MAAM;UACNE;QACF,CAAC,CAAC;MACJ;IACF,CAAC;EACH,CAAC;EAEDI,UAAU,CAACgC,UAAU,GAAG,MAAM;IAC5B/C,KAAK,CAACgD,MAAM,GAAG,CAAC;IAChB/C,UAAU,CAAC+C,MAAM,GAAG,CAAC;EACvB,CAAC;EAEDjC,UAAU,CAACkC,aAAa,GAAG,YAAY;IACrChC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAAzB,SAAS,QAAQ,yCAAyC,IAA1DA,SAAS;EACX,CAAC;;EAED;EACA;EACA;EACA;EACAwD,MAAM,CAACC,cAAc,CAACpC,UAAU,EAAEjB,qBAAqB,EAAE;IACvDe,KAAK,EAAEpB,oBAAoB,CACzB,uBAAuB,EACvB,YAAY,YACd,CAAC;IACD2D,UAAU,EAAE;EACd,CAAC,CAAC;;EAEF;;EAEA,OAAOrC,UAAU;AACnB","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
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 { createMockObjectSetWithResolver, resolveStub } from "./createMockObjectSetWithResolver.js";
|
|
18
|
+
const MOCK_OBJECT_SET_BRAND = Symbol("MOCK_OBJECT_SET_BRAND");
|
|
19
|
+
export function createMockObjectSet(objectType) {
|
|
20
|
+
const stubs = [];
|
|
21
|
+
const objectSet = createMockObjectSetWithResolver(objectType, calls => resolveStub(stubs, calls, `No stub registered on standalone MockObjectSet\n`));
|
|
22
|
+
objectSet[MOCK_OBJECT_SET_BRAND] = true;
|
|
23
|
+
objectSet.__registerStub = (calls, value) => {
|
|
24
|
+
stubs.push({
|
|
25
|
+
calls,
|
|
26
|
+
value
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
return objectSet;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** @internal */
|
|
33
|
+
export function isMockObjectSet(value) {
|
|
34
|
+
return value != null && typeof value === "object" && MOCK_OBJECT_SET_BRAND in value;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=createMockObjectSet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMockObjectSet.js","names":["createMockObjectSetWithResolver","resolveStub","MOCK_OBJECT_SET_BRAND","Symbol","createMockObjectSet","objectType","stubs","objectSet","calls","__registerStub","value","push","isMockObjectSet"],"sources":["createMockObjectSet.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 { ObjectOrInterfaceDefinition, ObjectSet } from \"@osdk/api\";\nimport {\n type Call,\n createMockObjectSetWithResolver,\n resolveStub,\n type Stub,\n} from \"./createMockObjectSetWithResolver.js\";\n\nconst MOCK_OBJECT_SET_BRAND: unique symbol = Symbol(\"MOCK_OBJECT_SET_BRAND\");\n\nexport type MockObjectSetBranded<Q extends ObjectOrInterfaceDefinition> =\n & ObjectSet<Q>\n & {\n [MOCK_OBJECT_SET_BRAND]: true;\n __registerStub(calls: Call[], value: unknown): void;\n };\n\nexport function createMockObjectSet<Q extends ObjectOrInterfaceDefinition>(\n objectType: Q,\n): ObjectSet<Q> {\n const stubs: Stub[] = [];\n\n const resolve = (calls: Call[]): unknown =>\n resolveStub(\n stubs,\n calls,\n `No stub registered on standalone MockObjectSet\\n`,\n );\n\n const objectSet = createMockObjectSetWithResolver(\n objectType,\n resolve,\n ) as MockObjectSetBranded<Q>;\n\n objectSet[MOCK_OBJECT_SET_BRAND] = true;\n (objectSet as any).__registerStub = (calls: Call[], value: unknown) => {\n stubs.push({ calls, value });\n };\n\n return objectSet;\n}\n\n/** @internal */\nexport function isMockObjectSet(\n value: unknown,\n): value is MockObjectSetBranded<ObjectOrInterfaceDefinition> {\n return value != null\n && typeof value === \"object\"\n && MOCK_OBJECT_SET_BRAND in value;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAEEA,+BAA+B,EAC/BC,WAAW,QAEN,sCAAsC;AAE7C,MAAMC,qBAAoC,GAAGC,MAAM,CAAC,uBAAuB,CAAC;AAS5E,OAAO,SAASC,mBAAmBA,CACjCC,UAAa,EACC;EACd,MAAMC,KAAa,GAAG,EAAE;EASxB,MAAMC,SAAS,GAAGP,+BAA+B,CAC/CK,UAAU,EARKG,KAAa,IAC5BP,WAAW,CACTK,KAAK,EACLE,KAAK,EACL,kDACF,CAKF,CAA4B;EAE5BD,SAAS,CAACL,qBAAqB,CAAC,GAAG,IAAI;EACtCK,SAAS,CAASE,cAAc,GAAG,CAACD,KAAa,EAAEE,KAAc,KAAK;IACrEJ,KAAK,CAACK,IAAI,CAAC;MAAEH,KAAK;MAAEE;IAAM,CAAC,CAAC;EAC9B,CAAC;EAED,OAAOH,SAAS;AAClB;;AAEA;AACA,OAAO,SAASK,eAAeA,CAC7BF,KAAc,EAC8C;EAC5D,OAAOA,KAAK,IAAI,IAAI,IACf,OAAOA,KAAK,KAAK,QAAQ,IACzBR,qBAAqB,IAAIQ,KAAK;AACrC","ignoreList":[]}
|
|
@@ -0,0 +1,122 @@
|
|
|
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 invariant from "tiny-invariant";
|
|
18
|
+
export function createMockObjectSetWithResolver(objectType, resolver, calls = []) {
|
|
19
|
+
const chain = (method, args) => createMockObjectSetWithResolver(objectType, resolver, [...calls, [method, args]]);
|
|
20
|
+
const terminal = (method, args) => resolver([...calls, [method, args]]);
|
|
21
|
+
|
|
22
|
+
// All methods should execute synchronously even if marked as async
|
|
23
|
+
return {
|
|
24
|
+
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)),
|
|
28
|
+
pivotTo: link => chain("pivotTo", link),
|
|
29
|
+
narrowToType: type => chain("narrowToType", type),
|
|
30
|
+
nearestNeighbors: (query, num, prop) => chain("nearestNeighbors", {
|
|
31
|
+
query,
|
|
32
|
+
num,
|
|
33
|
+
prop
|
|
34
|
+
}),
|
|
35
|
+
withProperties: () =>
|
|
36
|
+
// TODO: Add with properties support
|
|
37
|
+
void (process.env.NODE_ENV !== "production" ? invariant(false, "withProperties is not supported in mocks") : invariant(false)),
|
|
38
|
+
fetchPage: async args => terminal("fetchPage", args),
|
|
39
|
+
fetchPageWithErrors: async args => {
|
|
40
|
+
try {
|
|
41
|
+
return {
|
|
42
|
+
type: "ok",
|
|
43
|
+
value: await terminal("fetchPage", args)
|
|
44
|
+
};
|
|
45
|
+
} catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
type: "error",
|
|
48
|
+
error
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
fetchOne: async pk => terminal("fetchOne", pk),
|
|
53
|
+
fetchOneWithErrors: async pk => {
|
|
54
|
+
try {
|
|
55
|
+
return {
|
|
56
|
+
type: "ok",
|
|
57
|
+
value: await terminal("fetchOne", pk)
|
|
58
|
+
};
|
|
59
|
+
} catch (error) {
|
|
60
|
+
return {
|
|
61
|
+
type: "error",
|
|
62
|
+
error
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
aggregate: async req => terminal("aggregate", req),
|
|
67
|
+
asyncIter: args => {
|
|
68
|
+
const data = terminal("asyncIter", args);
|
|
69
|
+
return async function* () {
|
|
70
|
+
for (const item of data) yield item;
|
|
71
|
+
}();
|
|
72
|
+
},
|
|
73
|
+
subscribe: () => void (process.env.NODE_ENV !== "production" ? invariant(false, "subscribe is not supported in mocks") : invariant(false)),
|
|
74
|
+
experimental_asyncIterLinks: () => void (process.env.NODE_ENV !== "production" ? invariant(false, "experimental_asyncIterLinks is not supported in mocks") : invariant(false)),
|
|
75
|
+
$objectSetInternals: {
|
|
76
|
+
def: {}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function resolveStub(stubs, calls, errorMsg) {
|
|
81
|
+
for (const stub of stubs) {
|
|
82
|
+
if (stub.calls.length !== calls.length) continue;
|
|
83
|
+
if (stub.calls.every(([m, a], i) => calls[i][0] === m && deepEqual(a, calls[i][1]))) {
|
|
84
|
+
const terminal = calls[calls.length - 1][0];
|
|
85
|
+
if (terminal === "fetchPage") {
|
|
86
|
+
return {
|
|
87
|
+
data: stub.value,
|
|
88
|
+
nextPageToken: undefined
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return stub.value;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
throw new Error(errorMsg);
|
|
95
|
+
}
|
|
96
|
+
export function deepEqual(a, b) {
|
|
97
|
+
if (a === b) return true;
|
|
98
|
+
|
|
99
|
+
// Support Vitest / Jest asymmetric matchers (e.g. expect.any(String),
|
|
100
|
+
// expect.anything(), expect.stringContaining(...), expect.objectContaining(...))
|
|
101
|
+
// in either position. Without this check, matchers would be compared by their
|
|
102
|
+
// raw object shape and silently never match stub params.
|
|
103
|
+
if (isAsymmetricMatcher(a)) return a.asymmetricMatch(b);
|
|
104
|
+
if (isAsymmetricMatcher(b)) return b.asymmetricMatch(a);
|
|
105
|
+
if (a == null || b == null) return a === b;
|
|
106
|
+
if (typeof a !== typeof b) return false;
|
|
107
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
108
|
+
if (a.length !== b.length) return false;
|
|
109
|
+
return a.every((v, i) => deepEqual(v, b[i]));
|
|
110
|
+
}
|
|
111
|
+
if (typeof a === "object") {
|
|
112
|
+
const aKeys = Object.keys(a);
|
|
113
|
+
const bKeys = Object.keys(b);
|
|
114
|
+
if (aKeys.length !== bKeys.length) return false;
|
|
115
|
+
return aKeys.every(k => deepEqual(a[k], b[k]));
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
function isAsymmetricMatcher(x) {
|
|
120
|
+
return x != null && typeof x === "object" && typeof x.asymmetricMatch === "function";
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=createMockObjectSetWithResolver.js.map
|
|
@@ -0,0 +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","stub","length","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>(\n objectType: Q,\n resolver: Resolver,\n calls: Call[] = [],\n): ObjectSet<Q> {\n const chain = (method: string, args: unknown): ObjectSet<Q> =>\n createMockObjectSetWithResolver(objectType, resolver, [...calls, [\n method,\n 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 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 fetchOne:\n (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 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 (const stub of stubs) {\n if (stub.calls.length !== calls.length) continue;\n if (\n stub.calls.every(([m, a], i) =>\n 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 x != null\n && typeof x === \"object\"\n && typeof (x as { asymmetricMatch?: unknown }).asymmetricMatch\n === \"function\";\n}\n"],"mappings":"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","ignoreList":[]}
|