@osdk/client 2.7.0-beta.11 → 2.7.0-beta.13
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 +27 -0
- package/build/browser/actions/actions.test.js +0 -8
- package/build/browser/actions/actions.test.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.js +14 -9
- package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
- package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js +13 -4
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +46 -2
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +1 -1
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/observable/internal/Changes.js +1 -1
- package/build/browser/observable/internal/Changes.js.map +1 -1
- package/build/browser/observable/internal/ObservableClientImpl.js +2 -2
- package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +48 -1
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/base-list/BaseListQuery.js +1 -1
- package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
- package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js +3 -2
- package/build/browser/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -1
- package/build/browser/observable/internal/list/InterfaceListQuery.js +24 -9
- package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -1
- package/build/browser/observable/internal/object/ObjectsHelper.js +1 -3
- package/build/browser/observable/internal/object/ObjectsHelper.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -2
- package/build/browser/util/isObjectSpecifiersObject.js.map +1 -1
- package/build/cjs/{chunk-RDZ5NKAI.cjs → chunk-VVKEXIIO.cjs} +30 -14
- package/build/cjs/chunk-VVKEXIIO.cjs.map +1 -0
- package/build/cjs/{chunk-666JN2DO.cjs → chunk-ZFL7RPT6.cjs} +65 -65
- package/build/cjs/{chunk-666JN2DO.cjs.map → chunk-ZFL7RPT6.cjs.map} +1 -1
- package/build/cjs/index.cjs +8 -8
- package/build/cjs/public/internal.cjs +8 -8
- package/build/cjs/public/unstable-do-not-use.cjs +81 -63
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/esm/actions/actions.test.js +0 -8
- package/build/esm/actions/actions.test.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.js +14 -9
- package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js +74 -0
- package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js +13 -4
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +46 -2
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +1 -1
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/observable/internal/Changes.js +1 -1
- package/build/esm/observable/internal/Changes.js.map +1 -1
- package/build/esm/observable/internal/ObservableClientImpl.js +2 -2
- package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +48 -1
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/base-list/BaseListQuery.js +1 -1
- package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
- package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js +3 -2
- package/build/esm/observable/internal/function/FunctionParamsCanonicalizer.js.map +1 -1
- package/build/esm/observable/internal/list/InterfaceListQuery.js +24 -9
- package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -1
- package/build/esm/observable/internal/object/ObjectsHelper.js +1 -3
- package/build/esm/observable/internal/object/ObjectsHelper.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -2
- package/build/esm/util/isObjectSpecifiersObject.js.map +1 -1
- package/build/types/observable/internal/Changes.d.ts.map +1 -1
- package/build/types/observable/internal/Store.test.d.ts.map +1 -1
- package/build/types/observable/internal/function/FunctionParamsCanonicalizer.d.ts.map +1 -1
- package/build/types/observable/internal/list/InterfaceListQuery.d.ts +3 -0
- package/build/types/observable/internal/list/InterfaceListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/object/ObjectsHelper.d.ts.map +1 -1
- package/build/types/util/isObjectSpecifiersObject.d.ts +1 -0
- package/build/types/util/isObjectSpecifiersObject.d.ts.map +1 -1
- package/package.json +9 -9
- package/build/cjs/chunk-RDZ5NKAI.cjs.map +0 -1
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { $ontologyRid, Employee } from "@osdk/client.test.ontology";
|
|
17
|
+
import { $ontologyRid, Employee, Office } from "@osdk/client.test.ontology";
|
|
18
18
|
import { LegacyFauxFoundry, msw, startNodeApiServer } from "@osdk/shared.test";
|
|
19
19
|
import ImportedWebSocket from "isomorphic-ws";
|
|
20
20
|
import pDefer from "p-defer";
|
|
21
|
-
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
|
21
|
+
import { afterEach, beforeAll, beforeEach, describe, expect, expectTypeOf, it, vi } from "vitest";
|
|
22
22
|
import { z } from "zod";
|
|
23
23
|
import { createClient } from "../createClient.js";
|
|
24
24
|
import { createMinimalClient } from "../createMinimalClient.js";
|
|
@@ -379,6 +379,50 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
379
379
|
});
|
|
380
380
|
});
|
|
381
381
|
});
|
|
382
|
+
describe("types", () => {
|
|
383
|
+
it("does not return rid on object type if requested and object has a GTSR", async () => {
|
|
384
|
+
(() => ({
|
|
385
|
+
subscribe: () => {}
|
|
386
|
+
}))(Employee).subscribe({
|
|
387
|
+
onChange: change => {
|
|
388
|
+
change.object.$rid; // This doesn't error because we're forcing the type through, this is expected
|
|
389
|
+
}
|
|
390
|
+
}, {
|
|
391
|
+
// @ts-expect-error
|
|
392
|
+
includeRid: true
|
|
393
|
+
});
|
|
394
|
+
});
|
|
395
|
+
it("does not return rid on object type if not requested", async () => {
|
|
396
|
+
(() => ({
|
|
397
|
+
subscribe: () => {}
|
|
398
|
+
}))(Office).subscribe({
|
|
399
|
+
onChange: change => {
|
|
400
|
+
// @ts-expect-error
|
|
401
|
+
change.object.$rid;
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
});
|
|
405
|
+
it("does return rid on object type if requested and object does not have a GTSR", async () => {
|
|
406
|
+
const client = () => ({
|
|
407
|
+
subscribe: () => {}
|
|
408
|
+
});
|
|
409
|
+
client(Employee).subscribe({
|
|
410
|
+
onChange: change => {
|
|
411
|
+
expectTypeOf(change.object.$rid).toBeString();
|
|
412
|
+
}
|
|
413
|
+
}, {
|
|
414
|
+
includeRid: true,
|
|
415
|
+
properties: ["employeeId"]
|
|
416
|
+
});
|
|
417
|
+
client(Office).subscribe({
|
|
418
|
+
onChange: change => {
|
|
419
|
+
expectTypeOf(change.object.$rid).toBeString();
|
|
420
|
+
}
|
|
421
|
+
}, {
|
|
422
|
+
includeRid: true
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
});
|
|
382
426
|
});
|
|
383
427
|
function respondSuccessToSubscribe(ws, subReq2) {
|
|
384
428
|
sendToClient(ws, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectSetListenerWebsocket.test.js","names":["$ontologyRid","Employee","LegacyFauxFoundry","msw","startNodeApiServer","ImportedWebSocket","pDefer","afterEach","beforeAll","beforeEach","describe","expect","it","vi","z","createClient","createMinimalClient","constructWebsocketUrl","ObjectSetListenerWebsocket","rootLogger","hoisted","pino","pinoPretty","EventEmitter","Promise","resolve","level","build","sync","timestampKey","undefined","errorLikeObjectKeys","errorProps","ignore","destination","write","a","at","slice","console","log","MockedWebSocket","STACK","mock","importOriginal","original","WebSocket","createMockWebSocketConstructor","default","currentSubscriptionId","apiServer","testSetup","addLoggerToApiServer","close","minimalClient","MINIMUM_RECONNECT_DELAY","client","listener","oslwInst","updateReceived","listenerPromise","ontologyRid","logger","child","minimumReconnectDelayMs","onChange","fn","o","object","state","onError","onOutOfDate","onSuccessfulSubscription","objectSetRidCounter","use","http","post","HttpResponse","json","objectSetRid","useFakeTimers","restoreAllMocks","resetHandlers","not","toHaveBeenCalled","ws","unsubscribe","subReq1","subscribeAndExpectWebSocket","expectSubscribeMessages","setWebSocketState","runAllTicks","expectEqualRemoveAndAddListeners","respondSuccessToSubscribe","send","toHaveBeenCalledTimes","requests","propertySet","toEqual","referenceSet","all","expectWebSocketConstructed","advanceTimersByTimeAsync","subReq2","mockImplementationOnce","Error","mockReset","calls","subscriptionClosed","toBe","idNum2","sendObjectUpdateResponse","promise","toMatchInlineSnapshot","sendReferenceUpdatesResponse","unsubscribe2","subscribe","type","apiName","objectType","toString","ws1","ws2Promise","ws2","ws3Promise","ws3","ws4Promise","ws4","ws5Promise","ws5","sendToClient","id","responses","subId","updates","__apiName","employeeId","removeEventListener","addEventListener","length","times","waitFor","toBeCalledTimes","result","JSON","parse","lastCall","mockClear","results","value","OriginalWebSocket","i","ret","_args","webSocketInst","debug","eventEmitter","EventTarget","bind","message","_eventEmitter","readyState","CONNECTING","Object","assign","OPEN","CLOSED","CLOSING","newState","dispatchEvent","Event","name","requestId","request","trace","url","eventNames","c","events","on","SubscribeMessage","string","array","objectSet","MessageEvent","constructor","data","stringify","t"],"sources":["ObjectSetListenerWebsocket.test.ts"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n Logger,\n ObjectSetSubscription,\n Osdk,\n PropertyKeys,\n} from \"@osdk/api\";\nimport { $ontologyRid, Employee } from \"@osdk/client.test.ontology\";\nimport type {\n ObjectSetStreamSubscribeRequests,\n StreamMessage,\n} from \"@osdk/foundry.ontologies\";\nimport {\n LegacyFauxFoundry,\n msw,\n type SetupServer,\n startNodeApiServer,\n} from \"@osdk/shared.test\";\nimport ImportedWebSocket from \"isomorphic-ws\";\nimport type { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport type { MockedClass, MockedFunction, MockedObject } from \"vitest\";\nimport {\n afterEach,\n beforeAll,\n beforeEach,\n describe,\n expect,\n it,\n vi,\n} from \"vitest\";\nimport { z } from \"zod\";\nimport { createClient } from \"../createClient.js\";\nimport { createMinimalClient } from \"../createMinimalClient.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport {\n constructWebsocketUrl,\n ObjectSetListenerWebsocket,\n} from \"./ObjectSetListenerWebsocket.js\";\n\n// it needs to be hoisted because its referenced from our mocked WebSocket\n// which must be hoisted to work\nconst rootLogger = await vi.hoisted(async (): Promise<Logger> => {\n const pino = (await import(\"pino\")).pino;\n const pinoPretty = await import(\"pino-pretty\");\n const { EventEmitter } = await import(\"node:events\");\n class PinoConsoleLogDestination extends EventEmitter {\n write(a: string) {\n // remove trailing newline since console.log adds one\n if (a.at(-1) === \"\\n\") a = a.slice(0, -1);\n\n // This lets the test framework aggregate the logs per test, whereas direct to stdout does not\n console.log(a);\n }\n }\n return Promise.resolve(pino(\n { level: \"info\" },\n (pinoPretty.build)({\n sync: true,\n timestampKey: undefined,\n errorLikeObjectKeys: [\"error\", \"err\", \"exception\"],\n errorProps: \"stack,cause,properties\",\n ignore: \"time,hostname,pid\",\n destination: new PinoConsoleLogDestination(),\n }),\n ));\n});\n\n// make local uses of WebSocket typed right\nconst MockedWebSocket = ImportedWebSocket as unknown as MockedWebSocket;\n\nconst STACK = \"https://stack.palantirCustom.com/foo/first/someStuff/\";\n\nvi.mock(\"isomorphic-ws\", async (importOriginal) => {\n const original = await importOriginal<\n { default: WebSocket }\n >();\n\n const WebSocket = createMockWebSocketConstructor(\n original.default,\n rootLogger,\n );\n return { default: WebSocket, WebSocket };\n});\n\nlet currentSubscriptionId = 0;\n\ndescribe(\"ObjectSetListenerWebsocket\", async () => {\n let apiServer: SetupServer;\n beforeAll(() => {\n const testSetup = startNodeApiServer(\n new LegacyFauxFoundry(STACK),\n createClient,\n );\n ({ apiServer } = testSetup);\n addLoggerToApiServer(testSetup.apiServer, rootLogger);\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n describe(\"basic setup\", () => {\n let minimalClient: MinimalClient;\n\n const MINIMUM_RECONNECT_DELAY = 2_000;\n const OBJECT_SET_EXPIRY_MS = 60_000;\n\n let client: ObjectSetListenerWebsocket;\n let listener: MockedObject<\n Required<\n ObjectSetSubscription.Listener<Employee, any>\n >\n >;\n let oslwInst = 0;\n\n let updateReceived: {\n object: Osdk.Instance<Employee>;\n state: \"ADDED_OR_UPDATED\" | \"REMOVED\";\n } | undefined = undefined;\n\n let listenerPromise: DeferredPromise<void>;\n\n beforeEach(() => {\n minimalClient = createMinimalClient(\n { ontologyRid: $ontologyRid },\n STACK,\n async () => \"myAccessToken\",\n { logger: rootLogger },\n );\n client = new ObjectSetListenerWebsocket({\n ...minimalClient,\n logger: rootLogger.child({ oslwInst: oslwInst++ }),\n }, {\n minimumReconnectDelayMs: MINIMUM_RECONNECT_DELAY,\n });\n\n listenerPromise = pDefer();\n\n listener = {\n onChange: vi.fn((o) => {\n updateReceived = { object: o.object, state: o.state };\n listenerPromise.resolve();\n }),\n onError: vi.fn(),\n onOutOfDate: vi.fn(),\n onSuccessfulSubscription: vi.fn(),\n };\n\n let objectSetRidCounter = 0;\n apiServer.use(\n msw.http.post(\n `${STACK}api/v2/ontologySubscriptions/ontologies/${$ontologyRid}/streamSubscriptions`,\n () =>\n msw.HttpResponse.json({\n objectSetRid: `rid.hi.${objectSetRidCounter++}`,\n }),\n ),\n );\n\n vi.useFakeTimers();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n apiServer.resetHandlers();\n });\n\n it(\"should not send onOutOfDate since it has not subscribed yet\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n\n describe(\"requests subscription\", () => {\n let ws: MockedWebSocket;\n let unsubscribe: () => void;\n let subReq1: ObjectSetStreamSubscribeRequests;\n\n beforeEach(async () => {\n [ws, unsubscribe] = await subscribeAndExpectWebSocket(\n client,\n listener,\n );\n\n subReq1 = await expectSubscribeMessages(ws, 2);\n });\n\n afterEach(() => {\n // just ensure we ended in good states, as we clear these as we consume them\n expect(MockedWebSocket).not.toHaveBeenCalled();\n\n // make sure we are unsubscribed so closing the socket doesn't trigger reconnects\n unsubscribe();\n\n // disconnect the socket\n setWebSocketState(ws, \"close\");\n\n vi.runAllTicks();\n\n // Make sure we cleaned up\n expectEqualRemoveAndAddListeners(ws);\n });\n\n it(\"only sends a single request\", async () => {\n respondSuccessToSubscribe(ws, subReq1);\n // actually this is broken FIXME\n unsubscribe();\n expect(ws.send).toHaveBeenCalledTimes(1);\n });\n\n it(\"correctly requests regular object properties\", () => {\n expect(subReq1.requests[0].propertySet).toEqual([\n \"employeeId\",\n \"fullName\",\n \"office\",\n \"class\",\n \"startDate\",\n \"employeeStatus\",\n \"employeeSensor\",\n \"skillSet\",\n \"skillSetEmbedding\",\n \"favoriteRestaurants\",\n ]);\n });\n\n it(\"correctly requests reference backed properties\", () => {\n expect(subReq1.requests[0].referenceSet).toEqual([\"employeeLocation\"]);\n });\n\n describe(\"socket closed before subscription confirmed\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n\n describe(\"reconnect\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect with exponential backoff\n // First attempt: MINIMUM_RECONNECT_DELAY * 2^0 = 2000ms +/- jitter\n vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY * (1 + 0.3)),\n ]);\n setWebSocketState(ws, \"open\");\n });\n\n describe(\"subscribe and respond\", () => {\n beforeEach(async () => {\n const subReq2 = await expectSubscribeMessages(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n it(\"should not send out of date\", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n });\n });\n\n describe(\"correctly try catches errors in handlers\", () => {\n beforeEach(() => {\n listener.onSuccessfulSubscription.mockImplementationOnce(() => {\n throw new Error(\"I am an error\");\n });\n respondSuccessToSubscribe(ws, subReq1);\n });\n afterEach(() => {\n listener.onSuccessfulSubscription.mockReset();\n });\n\n it(\"should call onError\", async () => {\n expect(listener.onError).toHaveBeenCalled();\n expect(listener.onError.mock.calls[0][0].subscriptionClosed).toBe(\n false,\n );\n });\n });\n\n describe(\"successfully subscribed\", () => {\n beforeEach(() => {\n respondSuccessToSubscribe(ws, subReq1);\n });\n\n it(\"should call onSuccessfulSubscription\", () => {\n expect(listener.onSuccessfulSubscription).toHaveBeenCalled();\n });\n\n it(\"should correctly return regular updates\", async () => {\n const idNum2 = currentSubscriptionId;\n\n sendObjectUpdateResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:undefined\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": undefined,\n \"$propertySecurities\": undefined,\n \"$title\": undefined,\n \"employeeId\": 1,\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n\n it(\"should correctly return reference update\", async () => {\n const idNum2 = currentSubscriptionId;\n\n sendReferenceUpdatesResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:12345\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": \"12345\",\n \"$propertySecurities\": undefined,\n \"$title\": undefined,\n \"employeeId\": \"12345\",\n \"employeeLocation\": GeotimeSeriesPropertyImpl {\n \"lastFetchedValue\": {\n \"time\": \"111\",\n \"value\": {\n \"coordinates\": [\n 100,\n 200,\n ],\n \"type\": \"Point\",\n },\n },\n },\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n\n describe(\"additional subscription\", async () => {\n let unsubscribe2: () => void;\n let subReq2: ObjectSetStreamSubscribeRequests;\n beforeEach(async () => {\n unsubscribe2 = await client.subscribe(\n {\n type: \"object\",\n apiName: \"Employee\",\n },\n {\n type: \"base\",\n objectType: Employee.apiName,\n },\n listener,\n [\"employeeId\"],\n );\n\n subReq2 = await expectSubscribeMessages(ws);\n\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n afterEach(() => {\n unsubscribe2();\n });\n\n it(\"only requests requested properties\", () => {\n expect(subReq2.requests[1].propertySet).toEqual([\"employeeId\"]);\n expect(subReq2.requests[1].referenceSet).toEqual([]);\n });\n\n it(\"does not trigger an out of date \", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n\n describe(\"socket closed abruptly\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n\n describe(\"reconnect, resubscribe successfully\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect with exponential backoff\n // First attempt: MINIMUM_RECONNECT_DELAY * 2^0 = 2000ms +/- jitter\n vi.advanceTimersByTimeAsync(\n MINIMUM_RECONNECT_DELAY * (1 + 0.3),\n ),\n ]);\n setWebSocketState(ws, \"open\");\n\n const subReq2 = await expectSubscribeMessages(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n it(\"should send out of date\", () => {\n expect(listener.onOutOfDate).toHaveBeenCalledTimes(1);\n });\n });\n });\n\n it(\"should not send onOutOfDate for first call\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n\n it(\"should create url correctly\", () => {\n expect(constructWebsocketUrl(STACK, \"ontologyRid1\").toString())\n .toEqual(\n \"wss://stack.palantircustom.com/foo/first/someStuff/api/v2/ontologySubscriptions/ontologies/ontologyRid1/streamSubscriptions\",\n );\n });\n });\n });\n\n describe(\"exponential backoff behavior\", () => {\n let minimalClient: MinimalClient;\n let client: ObjectSetListenerWebsocket;\n let listener: MockedListener;\n\n beforeEach(() => {\n minimalClient = createMinimalClient(\n { ontologyRid: $ontologyRid },\n STACK,\n async () => \"myAccessToken\",\n { logger: rootLogger },\n );\n client = new ObjectSetListenerWebsocket({\n ...minimalClient,\n logger: rootLogger.child({ oslwInst: \"backoff-test\" }),\n }, {\n minimumReconnectDelayMs: 1000,\n });\n\n listener = {\n onChange: vi.fn(),\n onError: vi.fn(),\n onOutOfDate: vi.fn(),\n onSuccessfulSubscription: vi.fn(),\n };\n\n vi.useFakeTimers();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n it(\"should use exponential backoff for reconnection attempts\", async () => {\n // First connection attempt\n const [ws1, unsubscribe] = await subscribeAndExpectWebSocket(\n client,\n listener,\n );\n setWebSocketState(ws1, \"close\");\n\n // Second connection (first reconnect) - should wait ~1000ms (+/- jitter)\n const ws2Promise = expectWebSocketConstructed();\n await vi.advanceTimersByTimeAsync(1300); // 1000ms + max jitter (30%)\n const ws2 = await ws2Promise;\n setWebSocketState(ws2, \"close\");\n\n // Third connection (second reconnect) - should wait ~2000ms (+/- jitter)\n const ws3Promise = expectWebSocketConstructed();\n await vi.advanceTimersByTimeAsync(2600); // 2000ms + max jitter (30%)\n const ws3 = await ws3Promise;\n setWebSocketState(ws3, \"close\");\n\n // Fourth connection (third reconnect) - should wait ~4000ms (+/- jitter)\n const ws4Promise = expectWebSocketConstructed();\n await vi.advanceTimersByTimeAsync(5200); // 4000ms + max jitter (30%)\n const ws4 = await ws4Promise;\n\n // Verify backoff reset on successful connection\n setWebSocketState(ws4, \"open\");\n setWebSocketState(ws4, \"close\");\n\n // After successful connection, backoff should reset to initial delay\n const ws5Promise = expectWebSocketConstructed();\n await vi.advanceTimersByTimeAsync(1300); // Back to 1000ms + max jitter\n const ws5 = await ws5Promise;\n\n unsubscribe();\n setWebSocketState(ws5, \"close\");\n });\n });\n });\n});\n\ninterface RawWebSocketPlus\n extends Pick<ImportedWebSocket, \"addEventListener\" | \"removeEventListener\">\n{\n _eventEmitter: EventTarget;\n readyState: 0 | 1 | 2 | 3;\n send: MockedFunction<ImportedWebSocket[\"send\"]>;\n close: MockedFunction<ImportedWebSocket[\"close\"]>;\n}\n\ninterface MockedWebSocket\n extends MockedClass<typeof ImportedWebSocket>, MockedObject<RawWebSocketPlus>\n{\n}\n\ntype MockedListener = MockedObject<\n Required<\n ObjectSetSubscription.Listener<Employee, PropertyKeys<Employee>>\n >\n>;\n\nfunction respondSuccessToSubscribe(\n ws: MockedWebSocket,\n subReq2: ObjectSetStreamSubscribeRequests,\n) {\n sendToClient<StreamMessage>(\n ws,\n {\n id: subReq2.id,\n type: \"subscribeResponses\",\n responses: [{\n type: \"success\",\n id: `${++currentSubscriptionId}`,\n }],\n },\n );\n}\n\nfunction sendObjectUpdateResponse(\n ws: MockedWebSocket,\n subId: string,\n) {\n const updateMessage: StreamMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n type: \"object\",\n state: \"ADDED_OR_UPDATED\",\n object: {\n __apiName: \"Employee\",\n employeeId: 1,\n },\n }],\n };\n\n sendToClient<StreamMessage>(\n ws,\n updateMessage,\n );\n}\n\nfunction sendReferenceUpdatesResponse(\n ws: MockedWebSocket,\n subId: string,\n) {\n const referenceUpdateMessage: StreamMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n \"type\": \"reference\",\n \"objectType\": \"Employee\",\n \"primaryKey\": { \"employeeId\": \"12345\" },\n \"property\": \"employeeLocation\",\n \"value\": {\n \"timestamp\": \"111\",\n \"type\": \"geotimeSeriesValue\",\n \"position\": [100, 200],\n },\n }],\n };\n\n sendToClient<StreamMessage>(\n ws,\n referenceUpdateMessage,\n );\n}\n\nfunction expectEqualRemoveAndAddListeners(ws: MockedWebSocket) {\n expect(ws.removeEventListener).toHaveBeenCalledTimes(\n ws.addEventListener.mock.calls.length,\n );\n}\n\nasync function expectSubscribeMessages(\n ws: MockedWebSocket,\n times: number = 1,\n): Promise<ObjectSetStreamSubscribeRequests> {\n return await vi.waitFor(() => {\n expect(ws.send).toBeCalledTimes(times);\n const result = JSON.parse(ws.send.mock.lastCall![0].toString());\n ws.send.mockClear();\n return result;\n });\n}\n\nasync function subscribeAndExpectWebSocket(\n client: ObjectSetListenerWebsocket,\n listener: MockedListener,\n): Promise<readonly [MockedWebSocket, () => void]> {\n const [ws, unsubscribe] = await Promise.all([\n expectWebSocketConstructed(),\n client.subscribe<Employee, PropertyKeys<Employee>>(\n {\n apiName: \"Employee\",\n type: \"object\",\n },\n {\n type: \"base\",\n objectType: Employee.apiName,\n },\n listener,\n ),\n ]);\n\n // otherwise the ObjectSetListenerWebSocket is sitting waiting for it to \"connect\"\n setWebSocketState(ws, \"open\");\n\n return [ws, unsubscribe] as const;\n}\n\nasync function expectWebSocketConstructed(): Promise<MockedWebSocket> {\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n\n const ws = await vi.waitFor(() => {\n expect(MockedWebSocket).toHaveBeenCalled();\n expect(MockedWebSocket.mock.results[0].type === \"return\");\n return MockedWebSocket.mock.results[0].value as MockedWebSocket;\n });\n\n expect(MockedWebSocket).toHaveBeenCalledTimes(1);\n MockedWebSocket.mockClear();\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n\n return ws;\n}\n\nfunction createMockWebSocketConstructor(\n OriginalWebSocket: WebSocket,\n logger: Logger,\n): MockedWebSocket {\n let i = 0;\n const ret = vi.fn(function(..._args: any[]): MockedWebSocket {\n const webSocketInst = i++;\n logger.debug(\"WebSocket constructor called\");\n const eventEmitter = new EventTarget();\n\n return {\n addEventListener: vi.fn(\n eventEmitter.addEventListener.bind(eventEmitter),\n ) as any,\n removeEventListener: vi.fn(\n eventEmitter.removeEventListener.bind(eventEmitter),\n ) as any,\n\n send: vi.fn((a, _b: any) => {\n logger.debug(\n { message: JSON.parse(a.toString()), webSocketInst },\n \"send() called\",\n );\n }),\n close: vi.fn(),\n _eventEmitter: eventEmitter,\n readyState: OriginalWebSocket.CONNECTING,\n } satisfies RawWebSocketPlus as any as MockedWebSocket;\n // ^ we only implement some things but the type system wants to think its the full deal,\n // thus the satisfies plus the cast\n }) as any as MockedWebSocket;\n\n Object.assign(ret, {\n OPEN: OriginalWebSocket.OPEN,\n CLOSED: OriginalWebSocket.CLOSED,\n CLOSING: OriginalWebSocket.CLOSING,\n CONNECTING: OriginalWebSocket.CONNECTING,\n });\n\n return ret;\n}\n\nfunction setWebSocketState(ws: MockedWebSocket, readyState: \"open\" | \"close\") {\n const newState = readyState === \"open\"\n ? ImportedWebSocket.OPEN\n : ImportedWebSocket.CLOSED;\n\n if (newState === ws.readyState) return;\n\n ws.readyState = newState;\n ws._eventEmitter.dispatchEvent(new Event(readyState, {}));\n}\n\nfunction addLoggerToApiServer(apiServer: SetupServer, logger: Logger) {\n const z = (\n name: string,\n { requestId, request }: { requestId: string; request: Request },\n ) => logger.trace({ requestId, url: request.url }, name);\n\n const eventNames = [\n \"request:start\",\n \"request:match\",\n \"request:end\",\n \"request:unhandled\",\n \"response:bypass\",\n \"response:mocked\",\n ] as const;\n\n for (const c of eventNames) {\n apiServer.events.on(c as typeof eventNames[number], z.bind(undefined, c));\n }\n}\n\nconst SubscribeMessage = z.object({\n id: z.string(),\n requests: z.array(z.object({\n objectSet: z.object({ id: z.string() }),\n propertySet: z.array(z.string()),\n referenceSet: z.array(z.string()),\n })),\n});\n\nclass MessageEvent extends Event {\n data: string;\n constructor(data: any) {\n super(\"message\");\n this.data = JSON.stringify(data);\n }\n}\n\nfunction sendToClient<T>(ws: MockedWebSocket, t: T) {\n ws._eventEmitter.dispatchEvent(new MessageEvent(t));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ObjectSetListenerWebsocket.test.js","names":["$ontologyRid","Employee","Office","LegacyFauxFoundry","msw","startNodeApiServer","ImportedWebSocket","pDefer","afterEach","beforeAll","beforeEach","describe","expect","expectTypeOf","it","vi","z","createClient","createMinimalClient","constructWebsocketUrl","ObjectSetListenerWebsocket","rootLogger","hoisted","pino","pinoPretty","EventEmitter","Promise","resolve","level","build","sync","timestampKey","undefined","errorLikeObjectKeys","errorProps","ignore","destination","write","a","at","slice","console","log","MockedWebSocket","STACK","mock","importOriginal","original","WebSocket","createMockWebSocketConstructor","default","currentSubscriptionId","apiServer","testSetup","addLoggerToApiServer","close","minimalClient","MINIMUM_RECONNECT_DELAY","client","listener","oslwInst","updateReceived","listenerPromise","ontologyRid","logger","child","minimumReconnectDelayMs","onChange","fn","o","object","state","onError","onOutOfDate","onSuccessfulSubscription","objectSetRidCounter","use","http","post","HttpResponse","json","objectSetRid","useFakeTimers","restoreAllMocks","resetHandlers","not","toHaveBeenCalled","ws","unsubscribe","subReq1","subscribeAndExpectWebSocket","expectSubscribeMessages","setWebSocketState","runAllTicks","expectEqualRemoveAndAddListeners","respondSuccessToSubscribe","send","toHaveBeenCalledTimes","requests","propertySet","toEqual","referenceSet","all","expectWebSocketConstructed","advanceTimersByTimeAsync","subReq2","mockImplementationOnce","Error","mockReset","calls","subscriptionClosed","toBe","idNum2","sendObjectUpdateResponse","promise","toMatchInlineSnapshot","sendReferenceUpdatesResponse","unsubscribe2","subscribe","type","apiName","objectType","toString","ws1","ws2Promise","ws2","ws3Promise","ws3","ws4Promise","ws4","ws5Promise","ws5","change","$rid","includeRid","toBeString","properties","sendToClient","id","responses","subId","updates","__apiName","employeeId","removeEventListener","addEventListener","length","times","waitFor","toBeCalledTimes","result","JSON","parse","lastCall","mockClear","results","value","OriginalWebSocket","i","ret","_args","webSocketInst","debug","eventEmitter","EventTarget","bind","message","_eventEmitter","readyState","CONNECTING","Object","assign","OPEN","CLOSED","CLOSING","newState","dispatchEvent","Event","name","requestId","request","trace","url","eventNames","c","events","on","SubscribeMessage","string","array","objectSet","MessageEvent","constructor","data","stringify","t"],"sources":["ObjectSetListenerWebsocket.test.ts"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n Logger,\n ObjectSetSubscription,\n Osdk,\n PropertyKeys,\n} from \"@osdk/api\";\nimport { $ontologyRid, Employee, Office } from \"@osdk/client.test.ontology\";\nimport type {\n ObjectSetStreamSubscribeRequests,\n StreamMessage,\n} from \"@osdk/foundry.ontologies\";\nimport {\n LegacyFauxFoundry,\n msw,\n type SetupServer,\n startNodeApiServer,\n} from \"@osdk/shared.test\";\nimport ImportedWebSocket from \"isomorphic-ws\";\nimport type { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport type { MockedClass, MockedFunction, MockedObject } from \"vitest\";\nimport {\n afterEach,\n beforeAll,\n beforeEach,\n describe,\n expect,\n expectTypeOf,\n it,\n vi,\n} from \"vitest\";\nimport { z } from \"zod\";\nimport type { Client } from \"../Client.js\";\nimport { createClient } from \"../createClient.js\";\nimport { createMinimalClient } from \"../createMinimalClient.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport {\n constructWebsocketUrl,\n ObjectSetListenerWebsocket,\n} from \"./ObjectSetListenerWebsocket.js\";\n\n// it needs to be hoisted because its referenced from our mocked WebSocket\n// which must be hoisted to work\nconst rootLogger = await vi.hoisted(async (): Promise<Logger> => {\n const pino = (await import(\"pino\")).pino;\n const pinoPretty = await import(\"pino-pretty\");\n const { EventEmitter } = await import(\"node:events\");\n class PinoConsoleLogDestination extends EventEmitter {\n write(a: string) {\n // remove trailing newline since console.log adds one\n if (a.at(-1) === \"\\n\") a = a.slice(0, -1);\n\n // This lets the test framework aggregate the logs per test, whereas direct to stdout does not\n console.log(a);\n }\n }\n return Promise.resolve(pino(\n { level: \"info\" },\n (pinoPretty.build)({\n sync: true,\n timestampKey: undefined,\n errorLikeObjectKeys: [\"error\", \"err\", \"exception\"],\n errorProps: \"stack,cause,properties\",\n ignore: \"time,hostname,pid\",\n destination: new PinoConsoleLogDestination(),\n }),\n ));\n});\n\n// make local uses of WebSocket typed right\nconst MockedWebSocket = ImportedWebSocket as unknown as MockedWebSocket;\n\nconst STACK = \"https://stack.palantirCustom.com/foo/first/someStuff/\";\n\nvi.mock(\"isomorphic-ws\", async (importOriginal) => {\n const original = await importOriginal<\n { default: WebSocket }\n >();\n\n const WebSocket = createMockWebSocketConstructor(\n original.default,\n rootLogger,\n );\n return { default: WebSocket, WebSocket };\n});\n\nlet currentSubscriptionId = 0;\n\ndescribe(\"ObjectSetListenerWebsocket\", async () => {\n let apiServer: SetupServer;\n beforeAll(() => {\n const testSetup = startNodeApiServer(\n new LegacyFauxFoundry(STACK),\n createClient,\n );\n ({ apiServer } = testSetup);\n addLoggerToApiServer(testSetup.apiServer, rootLogger);\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n describe(\"basic setup\", () => {\n let minimalClient: MinimalClient;\n\n const MINIMUM_RECONNECT_DELAY = 2_000;\n const OBJECT_SET_EXPIRY_MS = 60_000;\n\n let client: ObjectSetListenerWebsocket;\n let listener: MockedObject<\n Required<\n ObjectSetSubscription.Listener<Employee, any>\n >\n >;\n let oslwInst = 0;\n\n let updateReceived: {\n object: Osdk.Instance<Employee>;\n state: \"ADDED_OR_UPDATED\" | \"REMOVED\";\n } | undefined = undefined;\n\n let listenerPromise: DeferredPromise<void>;\n\n beforeEach(() => {\n minimalClient = createMinimalClient(\n { ontologyRid: $ontologyRid },\n STACK,\n async () => \"myAccessToken\",\n { logger: rootLogger },\n );\n client = new ObjectSetListenerWebsocket({\n ...minimalClient,\n logger: rootLogger.child({ oslwInst: oslwInst++ }),\n }, {\n minimumReconnectDelayMs: MINIMUM_RECONNECT_DELAY,\n });\n\n listenerPromise = pDefer();\n\n listener = {\n onChange: vi.fn((o) => {\n updateReceived = { object: o.object, state: o.state };\n listenerPromise.resolve();\n }),\n onError: vi.fn(),\n onOutOfDate: vi.fn(),\n onSuccessfulSubscription: vi.fn(),\n };\n\n let objectSetRidCounter = 0;\n apiServer.use(\n msw.http.post(\n `${STACK}api/v2/ontologySubscriptions/ontologies/${$ontologyRid}/streamSubscriptions`,\n () =>\n msw.HttpResponse.json({\n objectSetRid: `rid.hi.${objectSetRidCounter++}`,\n }),\n ),\n );\n\n vi.useFakeTimers();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n apiServer.resetHandlers();\n });\n\n it(\"should not send onOutOfDate since it has not subscribed yet\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n\n describe(\"requests subscription\", () => {\n let ws: MockedWebSocket;\n let unsubscribe: () => void;\n let subReq1: ObjectSetStreamSubscribeRequests;\n\n beforeEach(async () => {\n [ws, unsubscribe] = await subscribeAndExpectWebSocket(\n client,\n listener,\n );\n\n subReq1 = await expectSubscribeMessages(ws, 2);\n });\n\n afterEach(() => {\n // just ensure we ended in good states, as we clear these as we consume them\n expect(MockedWebSocket).not.toHaveBeenCalled();\n\n // make sure we are unsubscribed so closing the socket doesn't trigger reconnects\n unsubscribe();\n\n // disconnect the socket\n setWebSocketState(ws, \"close\");\n\n vi.runAllTicks();\n\n // Make sure we cleaned up\n expectEqualRemoveAndAddListeners(ws);\n });\n\n it(\"only sends a single request\", async () => {\n respondSuccessToSubscribe(ws, subReq1);\n // actually this is broken FIXME\n unsubscribe();\n expect(ws.send).toHaveBeenCalledTimes(1);\n });\n\n it(\"correctly requests regular object properties\", () => {\n expect(subReq1.requests[0].propertySet).toEqual([\n \"employeeId\",\n \"fullName\",\n \"office\",\n \"class\",\n \"startDate\",\n \"employeeStatus\",\n \"employeeSensor\",\n \"skillSet\",\n \"skillSetEmbedding\",\n \"favoriteRestaurants\",\n ]);\n });\n\n it(\"correctly requests reference backed properties\", () => {\n expect(subReq1.requests[0].referenceSet).toEqual([\"employeeLocation\"]);\n });\n\n describe(\"socket closed before subscription confirmed\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n\n describe(\"reconnect\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect with exponential backoff\n // First attempt: MINIMUM_RECONNECT_DELAY * 2^0 = 2000ms +/- jitter\n vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY * (1 + 0.3)),\n ]);\n setWebSocketState(ws, \"open\");\n });\n\n describe(\"subscribe and respond\", () => {\n beforeEach(async () => {\n const subReq2 = await expectSubscribeMessages(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n it(\"should not send out of date\", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n });\n });\n\n describe(\"correctly try catches errors in handlers\", () => {\n beforeEach(() => {\n listener.onSuccessfulSubscription.mockImplementationOnce(() => {\n throw new Error(\"I am an error\");\n });\n respondSuccessToSubscribe(ws, subReq1);\n });\n afterEach(() => {\n listener.onSuccessfulSubscription.mockReset();\n });\n\n it(\"should call onError\", async () => {\n expect(listener.onError).toHaveBeenCalled();\n expect(listener.onError.mock.calls[0][0].subscriptionClosed).toBe(\n false,\n );\n });\n });\n\n describe(\"successfully subscribed\", () => {\n beforeEach(() => {\n respondSuccessToSubscribe(ws, subReq1);\n });\n\n it(\"should call onSuccessfulSubscription\", () => {\n expect(listener.onSuccessfulSubscription).toHaveBeenCalled();\n });\n\n it(\"should correctly return regular updates\", async () => {\n const idNum2 = currentSubscriptionId;\n\n sendObjectUpdateResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:undefined\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": undefined,\n \"$propertySecurities\": undefined,\n \"$title\": undefined,\n \"employeeId\": 1,\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n\n it(\"should correctly return reference update\", async () => {\n const idNum2 = currentSubscriptionId;\n\n sendReferenceUpdatesResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:12345\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": \"12345\",\n \"$propertySecurities\": undefined,\n \"$title\": undefined,\n \"employeeId\": \"12345\",\n \"employeeLocation\": GeotimeSeriesPropertyImpl {\n \"lastFetchedValue\": {\n \"time\": \"111\",\n \"value\": {\n \"coordinates\": [\n 100,\n 200,\n ],\n \"type\": \"Point\",\n },\n },\n },\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n\n describe(\"additional subscription\", async () => {\n let unsubscribe2: () => void;\n let subReq2: ObjectSetStreamSubscribeRequests;\n beforeEach(async () => {\n unsubscribe2 = await client.subscribe(\n {\n type: \"object\",\n apiName: \"Employee\",\n },\n {\n type: \"base\",\n objectType: Employee.apiName,\n },\n listener,\n [\"employeeId\"],\n );\n\n subReq2 = await expectSubscribeMessages(ws);\n\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n afterEach(() => {\n unsubscribe2();\n });\n\n it(\"only requests requested properties\", () => {\n expect(subReq2.requests[1].propertySet).toEqual([\"employeeId\"]);\n expect(subReq2.requests[1].referenceSet).toEqual([]);\n });\n\n it(\"does not trigger an out of date \", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n\n describe(\"socket closed abruptly\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n\n describe(\"reconnect, resubscribe successfully\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect with exponential backoff\n // First attempt: MINIMUM_RECONNECT_DELAY * 2^0 = 2000ms +/- jitter\n vi.advanceTimersByTimeAsync(\n MINIMUM_RECONNECT_DELAY * (1 + 0.3),\n ),\n ]);\n setWebSocketState(ws, \"open\");\n\n const subReq2 = await expectSubscribeMessages(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n it(\"should send out of date\", () => {\n expect(listener.onOutOfDate).toHaveBeenCalledTimes(1);\n });\n });\n });\n\n it(\"should not send onOutOfDate for first call\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n\n it(\"should create url correctly\", () => {\n expect(constructWebsocketUrl(STACK, \"ontologyRid1\").toString())\n .toEqual(\n \"wss://stack.palantircustom.com/foo/first/someStuff/api/v2/ontologySubscriptions/ontologies/ontologyRid1/streamSubscriptions\",\n );\n });\n });\n });\n\n describe(\"exponential backoff behavior\", () => {\n let minimalClient: MinimalClient;\n let client: ObjectSetListenerWebsocket;\n let listener: MockedListener;\n\n beforeEach(() => {\n minimalClient = createMinimalClient(\n { ontologyRid: $ontologyRid },\n STACK,\n async () => \"myAccessToken\",\n { logger: rootLogger },\n );\n client = new ObjectSetListenerWebsocket({\n ...minimalClient,\n logger: rootLogger.child({ oslwInst: \"backoff-test\" }),\n }, {\n minimumReconnectDelayMs: 1000,\n });\n\n listener = {\n onChange: vi.fn(),\n onError: vi.fn(),\n onOutOfDate: vi.fn(),\n onSuccessfulSubscription: vi.fn(),\n };\n\n vi.useFakeTimers();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n it(\"should use exponential backoff for reconnection attempts\", async () => {\n // First connection attempt\n const [ws1, unsubscribe] = await subscribeAndExpectWebSocket(\n client,\n listener,\n );\n setWebSocketState(ws1, \"close\");\n\n // Second connection (first reconnect) - should wait ~1000ms (+/- jitter)\n const ws2Promise = expectWebSocketConstructed();\n await vi.advanceTimersByTimeAsync(1300); // 1000ms + max jitter (30%)\n const ws2 = await ws2Promise;\n setWebSocketState(ws2, \"close\");\n\n // Third connection (second reconnect) - should wait ~2000ms (+/- jitter)\n const ws3Promise = expectWebSocketConstructed();\n await vi.advanceTimersByTimeAsync(2600); // 2000ms + max jitter (30%)\n const ws3 = await ws3Promise;\n setWebSocketState(ws3, \"close\");\n\n // Fourth connection (third reconnect) - should wait ~4000ms (+/- jitter)\n const ws4Promise = expectWebSocketConstructed();\n await vi.advanceTimersByTimeAsync(5200); // 4000ms + max jitter (30%)\n const ws4 = await ws4Promise;\n\n // Verify backoff reset on successful connection\n setWebSocketState(ws4, \"open\");\n setWebSocketState(ws4, \"close\");\n\n // After successful connection, backoff should reset to initial delay\n const ws5Promise = expectWebSocketConstructed();\n await vi.advanceTimersByTimeAsync(1300); // Back to 1000ms + max jitter\n const ws5 = await ws5Promise;\n\n unsubscribe();\n setWebSocketState(ws5, \"close\");\n });\n });\n });\n\n describe(\"types\", () => {\n it(\"does not return rid on object type if requested and object has a GTSR\", async () => {\n const client: Client =\n ((a: any) => ({ subscribe: (a: any, b: any) => {} })) as Client;\n\n client(Employee).subscribe({\n onChange: (change) => {\n change.object.$rid; // This doesn't error because we're forcing the type through, this is expected\n },\n }, {\n // @ts-expect-error\n includeRid: true,\n });\n });\n\n it(\"does not return rid on object type if not requested\", async () => {\n const client: Client =\n ((a: any) => ({ subscribe: (a: any, b: any) => {} })) as Client;\n\n client(Office).subscribe({\n onChange: (change) => {\n // @ts-expect-error\n change.object.$rid;\n },\n });\n });\n\n it(\"does return rid on object type if requested and object does not have a GTSR\", async () => {\n const client: Client =\n ((a: any) => ({ subscribe: (a: any, b: any) => {} })) as Client;\n\n client(Employee).subscribe({\n onChange: (change) => {\n expectTypeOf(change.object.$rid).toBeString();\n },\n }, { includeRid: true, properties: [\"employeeId\"] });\n\n client(Office).subscribe({\n onChange: (change) => {\n expectTypeOf(change.object.$rid).toBeString();\n },\n }, { includeRid: true });\n });\n });\n});\n\ninterface RawWebSocketPlus\n extends Pick<ImportedWebSocket, \"addEventListener\" | \"removeEventListener\">\n{\n _eventEmitter: EventTarget;\n readyState: 0 | 1 | 2 | 3;\n send: MockedFunction<ImportedWebSocket[\"send\"]>;\n close: MockedFunction<ImportedWebSocket[\"close\"]>;\n}\n\ninterface MockedWebSocket\n extends MockedClass<typeof ImportedWebSocket>, MockedObject<RawWebSocketPlus>\n{\n}\n\ntype MockedListener = MockedObject<\n Required<\n ObjectSetSubscription.Listener<Employee, PropertyKeys<Employee>>\n >\n>;\n\nfunction respondSuccessToSubscribe(\n ws: MockedWebSocket,\n subReq2: ObjectSetStreamSubscribeRequests,\n) {\n sendToClient<StreamMessage>(\n ws,\n {\n id: subReq2.id,\n type: \"subscribeResponses\",\n responses: [{\n type: \"success\",\n id: `${++currentSubscriptionId}`,\n }],\n },\n );\n}\n\nfunction sendObjectUpdateResponse(\n ws: MockedWebSocket,\n subId: string,\n) {\n const updateMessage: StreamMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n type: \"object\",\n state: \"ADDED_OR_UPDATED\",\n object: {\n __apiName: \"Employee\",\n employeeId: 1,\n },\n }],\n };\n\n sendToClient<StreamMessage>(\n ws,\n updateMessage,\n );\n}\n\nfunction sendReferenceUpdatesResponse(\n ws: MockedWebSocket,\n subId: string,\n) {\n const referenceUpdateMessage: StreamMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n \"type\": \"reference\",\n \"objectType\": \"Employee\",\n \"primaryKey\": { \"employeeId\": \"12345\" },\n \"property\": \"employeeLocation\",\n \"value\": {\n \"timestamp\": \"111\",\n \"type\": \"geotimeSeriesValue\",\n \"position\": [100, 200],\n },\n }],\n };\n\n sendToClient<StreamMessage>(\n ws,\n referenceUpdateMessage,\n );\n}\n\nfunction expectEqualRemoveAndAddListeners(ws: MockedWebSocket) {\n expect(ws.removeEventListener).toHaveBeenCalledTimes(\n ws.addEventListener.mock.calls.length,\n );\n}\n\nasync function expectSubscribeMessages(\n ws: MockedWebSocket,\n times: number = 1,\n): Promise<ObjectSetStreamSubscribeRequests> {\n return await vi.waitFor(() => {\n expect(ws.send).toBeCalledTimes(times);\n const result = JSON.parse(ws.send.mock.lastCall![0].toString());\n ws.send.mockClear();\n return result;\n });\n}\n\nasync function subscribeAndExpectWebSocket(\n client: ObjectSetListenerWebsocket,\n listener: MockedListener,\n): Promise<readonly [MockedWebSocket, () => void]> {\n const [ws, unsubscribe] = await Promise.all([\n expectWebSocketConstructed(),\n client.subscribe<Employee, PropertyKeys<Employee>>(\n {\n apiName: \"Employee\",\n type: \"object\",\n },\n {\n type: \"base\",\n objectType: Employee.apiName,\n },\n listener,\n ),\n ]);\n\n // otherwise the ObjectSetListenerWebSocket is sitting waiting for it to \"connect\"\n setWebSocketState(ws, \"open\");\n\n return [ws, unsubscribe] as const;\n}\n\nasync function expectWebSocketConstructed(): Promise<MockedWebSocket> {\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n\n const ws = await vi.waitFor(() => {\n expect(MockedWebSocket).toHaveBeenCalled();\n expect(MockedWebSocket.mock.results[0].type === \"return\");\n return MockedWebSocket.mock.results[0].value as MockedWebSocket;\n });\n\n expect(MockedWebSocket).toHaveBeenCalledTimes(1);\n MockedWebSocket.mockClear();\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n\n return ws;\n}\n\nfunction createMockWebSocketConstructor(\n OriginalWebSocket: WebSocket,\n logger: Logger,\n): MockedWebSocket {\n let i = 0;\n const ret = vi.fn(function(..._args: any[]): MockedWebSocket {\n const webSocketInst = i++;\n logger.debug(\"WebSocket constructor called\");\n const eventEmitter = new EventTarget();\n\n return {\n addEventListener: vi.fn(\n eventEmitter.addEventListener.bind(eventEmitter),\n ) as any,\n removeEventListener: vi.fn(\n eventEmitter.removeEventListener.bind(eventEmitter),\n ) as any,\n\n send: vi.fn((a, _b: any) => {\n logger.debug(\n { message: JSON.parse(a.toString()), webSocketInst },\n \"send() called\",\n );\n }),\n close: vi.fn(),\n _eventEmitter: eventEmitter,\n readyState: OriginalWebSocket.CONNECTING,\n } satisfies RawWebSocketPlus as any as MockedWebSocket;\n // ^ we only implement some things but the type system wants to think its the full deal,\n // thus the satisfies plus the cast\n }) as any as MockedWebSocket;\n\n Object.assign(ret, {\n OPEN: OriginalWebSocket.OPEN,\n CLOSED: OriginalWebSocket.CLOSED,\n CLOSING: OriginalWebSocket.CLOSING,\n CONNECTING: OriginalWebSocket.CONNECTING,\n });\n\n return ret;\n}\n\nfunction setWebSocketState(ws: MockedWebSocket, readyState: \"open\" | \"close\") {\n const newState = readyState === \"open\"\n ? ImportedWebSocket.OPEN\n : ImportedWebSocket.CLOSED;\n\n if (newState === ws.readyState) return;\n\n ws.readyState = newState;\n ws._eventEmitter.dispatchEvent(new Event(readyState, {}));\n}\n\nfunction addLoggerToApiServer(apiServer: SetupServer, logger: Logger) {\n const z = (\n name: string,\n { requestId, request }: { requestId: string; request: Request },\n ) => logger.trace({ requestId, url: request.url }, name);\n\n const eventNames = [\n \"request:start\",\n \"request:match\",\n \"request:end\",\n \"request:unhandled\",\n \"response:bypass\",\n \"response:mocked\",\n ] as const;\n\n for (const c of eventNames) {\n apiServer.events.on(c as typeof eventNames[number], z.bind(undefined, c));\n }\n}\n\nconst SubscribeMessage = z.object({\n id: z.string(),\n requests: z.array(z.object({\n objectSet: z.object({ id: z.string() }),\n propertySet: z.array(z.string()),\n referenceSet: z.array(z.string()),\n })),\n});\n\nclass MessageEvent extends Event {\n data: string;\n constructor(data: any) {\n super(\"message\");\n this.data = JSON.stringify(data);\n }\n}\n\nfunction sendToClient<T>(ws: MockedWebSocket, t: T) {\n ws._eventEmitter.dispatchEvent(new MessageEvent(t));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -128,7 +128,7 @@ export function createObjectSet(objectType, clientCtx, objectSet = resolveBaseOb
|
|
|
128
128
|
})), objectType, options, await createWithPk(clientCtx, objectType, objectSet, primaryKey));
|
|
129
129
|
} : undefined,
|
|
130
130
|
subscribe: (listener, opts) => {
|
|
131
|
-
const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(clientCtx).subscribe(objectType, objectSet, listener, opts?.properties);
|
|
131
|
+
const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(clientCtx).subscribe(objectType, objectSet, listener, opts?.properties, opts?.includeRid);
|
|
132
132
|
return {
|
|
133
133
|
unsubscribe: async () => (await pendingSubscribe)()
|
|
134
134
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createObjectSet.js","names":["invariant","createWithPropertiesObjectSet","modernToLegacyWhereClause","aggregate","fetchPageInternal","fetchPageWithErrorsInternal","fetchSingle","fetchSingleWithErrors","augmentRequestContext","resolveBaseObjectSetType","isWireObjectSet","fetchLinksPage","ObjectSetListenerWebsocket","isObjectTypeDefinition","def","type","isObjectSet","o","objectSetDefinitions","get","getWireObjectSet","objectSet","WeakMap","createObjectSet","objectType","clientCtx","base","bind","globalThis","finalMethodCall","fetchPage","fetchPageWithErrors","where","clause","objectSetFactory","pivotTo","createSearchAround","union","objectSets","map","os","intersect","subtract","nearestNeighbors","query","numNeighbors","property","nearestNeighborsQuery","isTextQuery","propertyIdentifier","apiName","asyncIter","args","$nextPageToken","undefined","result","$pageSize","nextPageToken","obj","data","fetchOne","primaryKey","options","createWithPk","fetchOneWithErrors","subscribe","listener","opts","pendingSubscribe","getInstance","properties","unsubscribe","withProperties","definitionMap","Map","derivedProperties","key","Object","keys","derivedPropertyDefinition","narrowToType","objectTypeDef","existingMapping","narrowTypeInterfaceOrObjectMapping","process","env","NODE_ENV","entityType","experimental_asyncIterLinks","links","$objectSetInternals","link","interfaceLink","set","objDef","ontologyProvider","getObjectDefinition","withPk","field","primaryKeyApiName","value"],"sources":["createObjectSet.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n AsyncIterArgs,\n Augments,\n FetchPageResult,\n InterfaceDefinition,\n LinkedType,\n LinkNames,\n LinkTypeApiNamesFor,\n MinimalDirectedObjectLinkInstance,\n NullabilityAdherence,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectSetArgs,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n Result,\n SelectArg,\n SingleOsdkResult,\n} from \"@osdk/api\";\nimport type { MinimalObjectSet } from \"@osdk/api/unstable\";\nimport type {\n DerivedPropertyDefinition,\n ObjectSet as WireObjectSet,\n PropertyApiName,\n} from \"@osdk/foundry.ontologies\";\nimport invariant from \"tiny-invariant\";\nimport { createWithPropertiesObjectSet } from \"../derivedProperties/createWithPropertiesObjectSet.js\";\nimport { modernToLegacyWhereClause } from \"../internal/conversions/modernToLegacyWhereClause.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport { aggregate } from \"../object/aggregate.js\";\nimport {\n fetchPageInternal,\n fetchPageWithErrorsInternal,\n} from \"../object/fetchPage.js\";\nimport { fetchSingle, fetchSingleWithErrors } from \"../object/fetchSingle.js\";\nimport { augmentRequestContext } from \"../util/augmentRequestContext.js\";\nimport { resolveBaseObjectSetType } from \"../util/objectSetUtils.js\";\nimport { isWireObjectSet } from \"../util/WireObjectSet.js\";\nimport { fetchLinksPage } from \"./fetchLinksPage.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\n\nfunction isObjectTypeDefinition(\n def: ObjectOrInterfaceDefinition,\n): def is ObjectTypeDefinition {\n return def.type === \"object\";\n}\n\n/* @internal */\nexport function isObjectSet(o: any): o is ObjectSet<any> {\n return o != null && typeof o === \"object\"\n && isWireObjectSet(objectSetDefinitions.get(o));\n}\n\n/** @internal */\nexport function getWireObjectSet(\n objectSet: ObjectSet<any> | MinimalObjectSet<any>,\n): WireObjectSet {\n return objectSetDefinitions.get(objectSet)!;\n}\n\n/** @internal exported for internal use only */\nexport const objectSetDefinitions = new WeakMap<\n any,\n WireObjectSet\n>();\n\n/** @internal */\nexport function createObjectSet<Q extends ObjectOrInterfaceDefinition>(\n objectType: Q,\n clientCtx: MinimalClient,\n objectSet: WireObjectSet = resolveBaseObjectSetType(objectType),\n): ObjectSet<Q> {\n const base: ObjectSet<Q> = {\n aggregate: (aggregate<Q, any>).bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"aggregate\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"aggregate\"],\n\n fetchPage: fetchPageInternal.bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"fetchPage\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPage\"],\n\n fetchPageWithErrors: fetchPageWithErrorsInternal.bind(\n globalThis,\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchPageWithErrors\" }),\n ),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPageWithErrors\"],\n\n where: (clause) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"filter\",\n objectSet: objectSet,\n where: modernToLegacyWhereClause(clause, objectType),\n });\n },\n\n pivotTo: function<L extends LinkNames<Q>>(\n type: L,\n ): ObjectSet<LinkedType<Q, L>> {\n return createSearchAround(type)();\n },\n\n union: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"union\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n intersect: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"intersect\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n subtract: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"subtract\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n nearestNeighbors: (query, numNeighbors, property) => {\n const nearestNeighborsQuery = isTextQuery(query)\n ? { \"type\": \"text\" as const, \"value\": query }\n : { \"type\": \"vector\" as const, \"value\": query };\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"nearestNeighbors\",\n objectSet,\n propertyIdentifier: {\n type: \"property\",\n apiName: property as PropertyApiName,\n },\n numNeighbors,\n query: nearestNeighborsQuery,\n },\n ) as ObjectSet<Q>;\n },\n\n asyncIter: async function*<\n L extends PropertyKeys<Q>,\n R extends boolean,\n const A extends Augments,\n S extends NullabilityAdherence = NullabilityAdherence.Default,\n T extends boolean = false,\n ORDER_BY_OPTIONS extends ObjectSetArgs.OrderByOptions<L> = never,\n >(\n args?: AsyncIterArgs<Q, L, R, A, S, T, never, ORDER_BY_OPTIONS>,\n ): AsyncIterableIterator<\n SingleOsdkResult<Q, L, R, S, {}, T, ORDER_BY_OPTIONS>\n > {\n let $nextPageToken: string | undefined = undefined;\n do {\n const result: FetchPageResult<\n Q,\n L,\n R,\n S,\n T,\n ORDER_BY_OPTIONS\n > = await fetchPageInternal(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"asyncIter\" }),\n ),\n objectType,\n objectSet,\n { ...args, $pageSize: 10000, $nextPageToken },\n true,\n );\n $nextPageToken = result.nextPageToken;\n\n for (const obj of result.data) {\n yield obj as SingleOsdkResult<Q, L, R, S, {}, T, ORDER_BY_OPTIONS>;\n }\n } while ($nextPageToken != null);\n },\n\n fetchOne: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: PrimaryKeyType<Q>,\n options: A,\n ) => {\n return await fetchSingle(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOne\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Osdk<Q>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOne\"],\n\n fetchOneWithErrors: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: Q extends ObjectTypeDefinition ? PrimaryKeyType<Q>\n : never,\n options: A,\n ) => {\n return await fetchSingleWithErrors(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOneWithErrors\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Result<Osdk<Q>>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOneWithErrors\"],\n\n subscribe: (\n listener,\n opts,\n ) => {\n const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(\n clientCtx,\n ).subscribe(\n objectType,\n objectSet,\n listener,\n opts?.properties,\n );\n\n return { unsubscribe: async () => (await pendingSubscribe)() };\n },\n\n withProperties: (clause) => {\n const definitionMap = new Map<any, DerivedPropertyDefinition>();\n\n const derivedProperties: Record<string, DerivedPropertyDefinition> = {};\n for (const key of Object.keys(clause)) {\n const derivedPropertyDefinition = clause\n [key](createWithPropertiesObjectSet(\n objectType,\n { type: \"methodInput\" },\n definitionMap,\n true,\n ));\n derivedProperties[key] = definitionMap.get(\n derivedPropertyDefinition,\n )!;\n }\n\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"withProperties\",\n derivedProperties: derivedProperties,\n objectSet: objectSet,\n },\n );\n },\n\n narrowToType: (\n objectTypeDef: ObjectTypeDefinition | InterfaceDefinition,\n ) => {\n const existingMapping =\n clientCtx.narrowTypeInterfaceOrObjectMapping[objectTypeDef.apiName];\n invariant(\n !existingMapping || existingMapping === objectTypeDef.type,\n `${objectTypeDef.apiName} was previously used as an ${existingMapping}, but now used as a ${objectTypeDef.type}.`,\n );\n clientCtx.narrowTypeInterfaceOrObjectMapping[objectTypeDef.apiName] =\n objectTypeDef.type;\n\n return clientCtx.objectSetFactory(\n objectTypeDef,\n clientCtx,\n {\n type: \"asType\",\n objectSet: objectSet,\n entityType: objectTypeDef.apiName,\n },\n );\n },\n\n experimental_asyncIterLinks: async function*<\n LINK_TYPE_API_NAME extends LinkTypeApiNamesFor<Q>,\n >(\n links: LINK_TYPE_API_NAME[],\n ): AsyncIterableIterator<\n MinimalDirectedObjectLinkInstance<Q, LINK_TYPE_API_NAME>\n > {\n let $nextPageToken: string | undefined = undefined;\n do {\n const result = await fetchLinksPage(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"asyncIterLinks\" }),\n ),\n objectType,\n objectSet,\n links,\n );\n $nextPageToken = result.nextPageToken;\n\n for (const obj of result.data) {\n yield obj;\n }\n } while ($nextPageToken != null);\n },\n\n $objectSetInternals: {\n def: objectType,\n },\n };\n\n function createSearchAround<L extends LinkNames<Q>>(link: L) {\n return () => {\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n objectType.type === \"object\"\n ? {\n type: \"searchAround\",\n objectSet,\n link,\n }\n : {\n type: \"interfaceLinkSearchAround\",\n objectSet,\n interfaceLink: link,\n },\n );\n };\n }\n\n objectSetDefinitions.set(base, objectSet);\n\n // we are using a type assertion because the marker symbol defined in BaseObjectSet isn't actually used\n // at runtime.\n return base as ObjectSet<Q>;\n}\n\nasync function createWithPk(\n clientCtx: MinimalClient,\n objectType: ObjectTypeDefinition,\n objectSet: WireObjectSet,\n primaryKey: PrimaryKeyType<ObjectTypeDefinition>,\n) {\n const objDef = await clientCtx.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n );\n\n const withPk: WireObjectSet = {\n type: \"filter\",\n objectSet: objectSet,\n where: {\n type: \"eq\",\n field: objDef.primaryKeyApiName,\n value: primaryKey,\n },\n };\n return withPk;\n}\n\nfunction isTextQuery(query: string | number[]): query is string {\n return typeof query === \"string\";\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"createObjectSet.js","names":["invariant","createWithPropertiesObjectSet","modernToLegacyWhereClause","aggregate","fetchPageInternal","fetchPageWithErrorsInternal","fetchSingle","fetchSingleWithErrors","augmentRequestContext","resolveBaseObjectSetType","isWireObjectSet","fetchLinksPage","ObjectSetListenerWebsocket","isObjectTypeDefinition","def","type","isObjectSet","o","objectSetDefinitions","get","getWireObjectSet","objectSet","WeakMap","createObjectSet","objectType","clientCtx","base","bind","globalThis","finalMethodCall","fetchPage","fetchPageWithErrors","where","clause","objectSetFactory","pivotTo","createSearchAround","union","objectSets","map","os","intersect","subtract","nearestNeighbors","query","numNeighbors","property","nearestNeighborsQuery","isTextQuery","propertyIdentifier","apiName","asyncIter","args","$nextPageToken","undefined","result","$pageSize","nextPageToken","obj","data","fetchOne","primaryKey","options","createWithPk","fetchOneWithErrors","subscribe","listener","opts","pendingSubscribe","getInstance","properties","includeRid","unsubscribe","withProperties","definitionMap","Map","derivedProperties","key","Object","keys","derivedPropertyDefinition","narrowToType","objectTypeDef","existingMapping","narrowTypeInterfaceOrObjectMapping","process","env","NODE_ENV","entityType","experimental_asyncIterLinks","links","$objectSetInternals","link","interfaceLink","set","objDef","ontologyProvider","getObjectDefinition","withPk","field","primaryKeyApiName","value"],"sources":["createObjectSet.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n AsyncIterArgs,\n Augments,\n FetchPageResult,\n InterfaceDefinition,\n LinkedType,\n LinkNames,\n LinkTypeApiNamesFor,\n MinimalDirectedObjectLinkInstance,\n NullabilityAdherence,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectSetArgs,\n ObjectSetSubscription,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n Result,\n SelectArg,\n SingleOsdkResult,\n} from \"@osdk/api\";\nimport type { MinimalObjectSet } from \"@osdk/api/unstable\";\nimport type {\n DerivedPropertyDefinition,\n ObjectSet as WireObjectSet,\n PropertyApiName,\n} from \"@osdk/foundry.ontologies\";\nimport invariant from \"tiny-invariant\";\nimport { createWithPropertiesObjectSet } from \"../derivedProperties/createWithPropertiesObjectSet.js\";\nimport { modernToLegacyWhereClause } from \"../internal/conversions/modernToLegacyWhereClause.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport { aggregate } from \"../object/aggregate.js\";\nimport {\n fetchPageInternal,\n fetchPageWithErrorsInternal,\n} from \"../object/fetchPage.js\";\nimport { fetchSingle, fetchSingleWithErrors } from \"../object/fetchSingle.js\";\nimport { augmentRequestContext } from \"../util/augmentRequestContext.js\";\nimport { resolveBaseObjectSetType } from \"../util/objectSetUtils.js\";\nimport { isWireObjectSet } from \"../util/WireObjectSet.js\";\nimport { fetchLinksPage } from \"./fetchLinksPage.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\n\nfunction isObjectTypeDefinition(\n def: ObjectOrInterfaceDefinition,\n): def is ObjectTypeDefinition {\n return def.type === \"object\";\n}\n\n/* @internal */\nexport function isObjectSet(o: any): o is ObjectSet<any> {\n return o != null && typeof o === \"object\"\n && isWireObjectSet(objectSetDefinitions.get(o));\n}\n\n/** @internal */\nexport function getWireObjectSet(\n objectSet: ObjectSet<any> | MinimalObjectSet<any>,\n): WireObjectSet {\n return objectSetDefinitions.get(objectSet)!;\n}\n\n/** @internal exported for internal use only */\nexport const objectSetDefinitions = new WeakMap<\n any,\n WireObjectSet\n>();\n\n/** @internal */\nexport function createObjectSet<Q extends ObjectOrInterfaceDefinition>(\n objectType: Q,\n clientCtx: MinimalClient,\n objectSet: WireObjectSet = resolveBaseObjectSetType(objectType),\n): ObjectSet<Q> {\n const base: ObjectSet<Q> = {\n aggregate: (aggregate<Q, any>).bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"aggregate\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"aggregate\"],\n\n fetchPage: fetchPageInternal.bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"fetchPage\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPage\"],\n\n fetchPageWithErrors: fetchPageWithErrorsInternal.bind(\n globalThis,\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchPageWithErrors\" }),\n ),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPageWithErrors\"],\n\n where: (clause) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"filter\",\n objectSet: objectSet,\n where: modernToLegacyWhereClause(clause, objectType),\n });\n },\n\n pivotTo: function<L extends LinkNames<Q>>(\n type: L,\n ): ObjectSet<LinkedType<Q, L>> {\n return createSearchAround(type)();\n },\n\n union: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"union\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n intersect: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"intersect\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n subtract: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"subtract\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n nearestNeighbors: (query, numNeighbors, property) => {\n const nearestNeighborsQuery = isTextQuery(query)\n ? { \"type\": \"text\" as const, \"value\": query }\n : { \"type\": \"vector\" as const, \"value\": query };\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"nearestNeighbors\",\n objectSet,\n propertyIdentifier: {\n type: \"property\",\n apiName: property as PropertyApiName,\n },\n numNeighbors,\n query: nearestNeighborsQuery,\n },\n ) as ObjectSet<Q>;\n },\n\n asyncIter: async function*<\n L extends PropertyKeys<Q>,\n R extends boolean,\n const A extends Augments,\n S extends NullabilityAdherence = NullabilityAdherence.Default,\n T extends boolean = false,\n ORDER_BY_OPTIONS extends ObjectSetArgs.OrderByOptions<L> = never,\n >(\n args?: AsyncIterArgs<Q, L, R, A, S, T, never, ORDER_BY_OPTIONS>,\n ): AsyncIterableIterator<\n SingleOsdkResult<Q, L, R, S, {}, T, ORDER_BY_OPTIONS>\n > {\n let $nextPageToken: string | undefined = undefined;\n do {\n const result: FetchPageResult<\n Q,\n L,\n R,\n S,\n T,\n ORDER_BY_OPTIONS\n > = await fetchPageInternal(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"asyncIter\" }),\n ),\n objectType,\n objectSet,\n { ...args, $pageSize: 10000, $nextPageToken },\n true,\n );\n $nextPageToken = result.nextPageToken;\n\n for (const obj of result.data) {\n yield obj as SingleOsdkResult<Q, L, R, S, {}, T, ORDER_BY_OPTIONS>;\n }\n } while ($nextPageToken != null);\n },\n\n fetchOne: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: PrimaryKeyType<Q>,\n options: A,\n ) => {\n return await fetchSingle(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOne\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Osdk<Q>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOne\"],\n\n fetchOneWithErrors: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: Q extends ObjectTypeDefinition ? PrimaryKeyType<Q>\n : never,\n options: A,\n ) => {\n return await fetchSingleWithErrors(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOneWithErrors\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Result<Osdk<Q>>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOneWithErrors\"],\n\n subscribe: (\n listener,\n opts,\n ) => {\n const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(\n clientCtx,\n ).subscribe(\n objectType,\n objectSet,\n listener as ObjectSetSubscription.Listener<Q, any>,\n opts?.properties,\n opts?.includeRid,\n );\n\n return { unsubscribe: async () => (await pendingSubscribe)() };\n },\n\n withProperties: (clause) => {\n const definitionMap = new Map<any, DerivedPropertyDefinition>();\n\n const derivedProperties: Record<string, DerivedPropertyDefinition> = {};\n for (const key of Object.keys(clause)) {\n const derivedPropertyDefinition = clause\n [key](createWithPropertiesObjectSet(\n objectType,\n { type: \"methodInput\" },\n definitionMap,\n true,\n ));\n derivedProperties[key] = definitionMap.get(\n derivedPropertyDefinition,\n )!;\n }\n\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"withProperties\",\n derivedProperties: derivedProperties,\n objectSet: objectSet,\n },\n );\n },\n\n narrowToType: (\n objectTypeDef: ObjectTypeDefinition | InterfaceDefinition,\n ) => {\n const existingMapping =\n clientCtx.narrowTypeInterfaceOrObjectMapping[objectTypeDef.apiName];\n invariant(\n !existingMapping || existingMapping === objectTypeDef.type,\n `${objectTypeDef.apiName} was previously used as an ${existingMapping}, but now used as a ${objectTypeDef.type}.`,\n );\n clientCtx.narrowTypeInterfaceOrObjectMapping[objectTypeDef.apiName] =\n objectTypeDef.type;\n\n return clientCtx.objectSetFactory(\n objectTypeDef,\n clientCtx,\n {\n type: \"asType\",\n objectSet: objectSet,\n entityType: objectTypeDef.apiName,\n },\n );\n },\n\n experimental_asyncIterLinks: async function*<\n LINK_TYPE_API_NAME extends LinkTypeApiNamesFor<Q>,\n >(\n links: LINK_TYPE_API_NAME[],\n ): AsyncIterableIterator<\n MinimalDirectedObjectLinkInstance<Q, LINK_TYPE_API_NAME>\n > {\n let $nextPageToken: string | undefined = undefined;\n do {\n const result = await fetchLinksPage(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"asyncIterLinks\" }),\n ),\n objectType,\n objectSet,\n links,\n );\n $nextPageToken = result.nextPageToken;\n\n for (const obj of result.data) {\n yield obj;\n }\n } while ($nextPageToken != null);\n },\n\n $objectSetInternals: {\n def: objectType,\n },\n };\n\n function createSearchAround<L extends LinkNames<Q>>(link: L) {\n return () => {\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n objectType.type === \"object\"\n ? {\n type: \"searchAround\",\n objectSet,\n link,\n }\n : {\n type: \"interfaceLinkSearchAround\",\n objectSet,\n interfaceLink: link,\n },\n );\n };\n }\n\n objectSetDefinitions.set(base, objectSet);\n\n // we are using a type assertion because the marker symbol defined in BaseObjectSet isn't actually used\n // at runtime.\n return base as ObjectSet<Q>;\n}\n\nasync function createWithPk(\n clientCtx: MinimalClient,\n objectType: ObjectTypeDefinition,\n objectSet: WireObjectSet,\n primaryKey: PrimaryKeyType<ObjectTypeDefinition>,\n) {\n const objDef = await clientCtx.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n );\n\n const withPk: WireObjectSet = {\n type: \"filter\",\n objectSet: objectSet,\n where: {\n type: \"eq\",\n field: objDef.primaryKeyApiName,\n value: primaryKey,\n },\n };\n return withPk;\n}\n\nfunction isTextQuery(query: string | number[]): query is string {\n return typeof query === \"string\";\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -23,7 +23,7 @@ export class Changes {
|
|
|
23
23
|
modified = new Set();
|
|
24
24
|
deleted = new Set();
|
|
25
25
|
registerObject = (cacheKey, data, isNew) => {
|
|
26
|
-
this[isNew ? "addedObjects" : "modifiedObjects"].set(data.$apiName, data);
|
|
26
|
+
this[isNew ? "addedObjects" : "modifiedObjects"].set(data.$objectType ?? data.$apiName, data);
|
|
27
27
|
this[isNew ? "added" : "modified"].add(cacheKey);
|
|
28
28
|
};
|
|
29
29
|
deleteObject = cacheKey => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Changes.js","names":["MultiMap","DEBUG_ONLY__cacheKeyToString","Changes","modifiedObjects","addedObjects","added","Set","modified","deleted","registerObject","cacheKey","data","isNew","set","$apiName","add","deleteObject","registerList","key","registerLink","deleteLink","registerObjectSet","registerFunction","isEmpty","size","createChangedObjects","DEBUG_ONLY__changesToString","changes","process","env","NODE_ENV","JSON","stringify","multimapHelper","listHelper","Error","Array","from","map","multimap","Object","fromEntries","associations","type","objects","o","$primaryKey"],"sources":["Changes.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MultiMap } from \"mnemonist\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { AggregationCacheKey } from \"./aggregation/AggregationCacheKey.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport { DEBUG_ONLY__cacheKeyToString } from \"./CacheKey.js\";\nimport type { FunctionCacheKey } from \"./function/FunctionCacheKey.js\";\nimport type { SpecificLinkCacheKey } from \"./links/SpecificLinkCacheKey.js\";\nimport type { ListCacheKey } from \"./list/ListCacheKey.js\";\nimport type { ObjectCacheKey } from \"./object/ObjectCacheKey.js\";\nimport type { ObjectSetCacheKey } from \"./objectset/ObjectSetCacheKey.js\";\n\nexport class Changes {\n modifiedObjects: MultiMap<string, ObjectHolder> = new MultiMap();\n addedObjects: MultiMap<string, ObjectHolder> = new MultiMap();\n\n added: Set<\n | AggregationCacheKey\n | FunctionCacheKey\n | ListCacheKey\n | ObjectCacheKey\n | SpecificLinkCacheKey\n | ObjectSetCacheKey\n > = new Set();\n modified: Set<\n | AggregationCacheKey\n | FunctionCacheKey\n | ListCacheKey\n | ObjectCacheKey\n | SpecificLinkCacheKey\n | ObjectSetCacheKey\n > = new Set();\n deleted: Set<\n | AggregationCacheKey\n | FunctionCacheKey\n | ListCacheKey\n | ObjectCacheKey\n | SpecificLinkCacheKey\n | ObjectSetCacheKey\n > = new Set();\n\n registerObject = (\n cacheKey: ObjectCacheKey,\n data: ObjectHolder,\n isNew: boolean,\n ): void => {\n this[isNew ? \"addedObjects\" : \"modifiedObjects\"].set(data.$
|
|
1
|
+
{"version":3,"file":"Changes.js","names":["MultiMap","DEBUG_ONLY__cacheKeyToString","Changes","modifiedObjects","addedObjects","added","Set","modified","deleted","registerObject","cacheKey","data","isNew","set","$objectType","$apiName","add","deleteObject","registerList","key","registerLink","deleteLink","registerObjectSet","registerFunction","isEmpty","size","createChangedObjects","DEBUG_ONLY__changesToString","changes","process","env","NODE_ENV","JSON","stringify","multimapHelper","listHelper","Error","Array","from","map","multimap","Object","fromEntries","associations","type","objects","o","$primaryKey"],"sources":["Changes.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MultiMap } from \"mnemonist\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { AggregationCacheKey } from \"./aggregation/AggregationCacheKey.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport { DEBUG_ONLY__cacheKeyToString } from \"./CacheKey.js\";\nimport type { FunctionCacheKey } from \"./function/FunctionCacheKey.js\";\nimport type { SpecificLinkCacheKey } from \"./links/SpecificLinkCacheKey.js\";\nimport type { ListCacheKey } from \"./list/ListCacheKey.js\";\nimport type { ObjectCacheKey } from \"./object/ObjectCacheKey.js\";\nimport type { ObjectSetCacheKey } from \"./objectset/ObjectSetCacheKey.js\";\n\nexport class Changes {\n modifiedObjects: MultiMap<string, ObjectHolder> = new MultiMap();\n addedObjects: MultiMap<string, ObjectHolder> = new MultiMap();\n\n added: Set<\n | AggregationCacheKey\n | FunctionCacheKey\n | ListCacheKey\n | ObjectCacheKey\n | SpecificLinkCacheKey\n | ObjectSetCacheKey\n > = new Set();\n modified: Set<\n | AggregationCacheKey\n | FunctionCacheKey\n | ListCacheKey\n | ObjectCacheKey\n | SpecificLinkCacheKey\n | ObjectSetCacheKey\n > = new Set();\n deleted: Set<\n | AggregationCacheKey\n | FunctionCacheKey\n | ListCacheKey\n | ObjectCacheKey\n | SpecificLinkCacheKey\n | ObjectSetCacheKey\n > = new Set();\n\n registerObject = (\n cacheKey: ObjectCacheKey,\n data: ObjectHolder,\n isNew: boolean,\n ): void => {\n this[isNew ? \"addedObjects\" : \"modifiedObjects\"].set(\n data.$objectType ?? data.$apiName,\n data,\n );\n this[isNew ? \"added\" : \"modified\"].add(cacheKey);\n };\n\n deleteObject = (cacheKey: ObjectCacheKey): void => {\n this.deleted.add(cacheKey);\n };\n\n registerList = (key: ListCacheKey): void => {\n this.modified.add(key);\n };\n\n registerLink = (cacheKey: SpecificLinkCacheKey): void => {\n this.modified.add(cacheKey);\n };\n\n deleteLink = (cacheKey: SpecificLinkCacheKey): void => {\n this.deleted.add(cacheKey);\n };\n\n registerObjectSet = (key: ObjectSetCacheKey): void => {\n this.modified.add(key);\n };\n\n registerFunction = (key: FunctionCacheKey): void => {\n this.modified.add(key);\n };\n\n isEmpty(): boolean {\n return (\n this.modifiedObjects.size === 0\n && this.addedObjects.size === 0\n && this.added.size === 0\n && this.modified.size === 0\n && this.deleted.size === 0\n );\n }\n}\n\nexport function createChangedObjects(): Changes {\n return new Changes();\n}\n\nexport function DEBUG_ONLY__changesToString(changes: Changes): string {\n if (process.env.NODE_ENV !== \"production\") {\n return JSON.stringify(\n {\n modifiedObjects: multimapHelper(changes.modifiedObjects),\n addedObjects: multimapHelper(changes.addedObjects),\n added: listHelper(changes.added),\n modified: listHelper(changes.modified),\n },\n null,\n 2,\n );\n } else {\n throw new Error(\"not implemented\");\n }\n}\n\nfunction listHelper(set: Set<CacheKey>) {\n return Array.from(set).map(DEBUG_ONLY__cacheKeyToString);\n}\n\nfunction multimapHelper(\n multimap: MultiMap<string, ObjectHolder>,\n) {\n return Object.fromEntries(\n Array.from(multimap.associations()).map(\n ([type, objects]) => {\n return [type, objects.map(o => o.$primaryKey)];\n },\n ),\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -51,7 +51,7 @@ export class ObservableClientImpl {
|
|
|
51
51
|
observeFunction = (queryDef, params, options, subFn) => {
|
|
52
52
|
const dependsOn = options.dependsOn?.map(dep => typeof dep === "string" ? dep : dep.apiName);
|
|
53
53
|
const dependsOnObjects = options.dependsOnObjects?.map(obj => ({
|
|
54
|
-
$apiName: obj.$apiName,
|
|
54
|
+
$apiName: obj.$objectType ?? obj.$apiName,
|
|
55
55
|
$primaryKey: obj.$primaryKey
|
|
56
56
|
}));
|
|
57
57
|
return this.__experimentalStore.functions.observe({
|
|
@@ -71,7 +71,7 @@ export class ObservableClientImpl {
|
|
|
71
71
|
...options,
|
|
72
72
|
srcType: {
|
|
73
73
|
type: "object",
|
|
74
|
-
apiName: obj.$apiName
|
|
74
|
+
apiName: obj.$objectType ?? obj.$apiName
|
|
75
75
|
},
|
|
76
76
|
linkName,
|
|
77
77
|
pk: obj.$primaryKey
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservableClientImpl.js","names":["Subscription","UnsubscribableWrapper","ObservableClientImpl","constructor","store","__experimentalStore","applyAction","bind","validateAction","observeObject","apiName","pk","options","subFn","objects","observe","observeList","lists","observeAggregation","aggregations","observeFunction","queryDef","params","dependsOn","map","dep","dependsOnObjects","obj","$apiName","$primaryKey","functions","observeLinks","linkName","objectsArray","Array","isArray","parentSub","querySubscription","links","srcType","type","add","observeObjectSet","baseObjectSet","objectSets","invalidateAll","invalidateObjects","invalidateObjectType","undefined","invalidateFunction","invalidateFunctionsByObject","primaryKey","canonicalizeWhereClause","where","whereCanonicalizer","canonicalize"],"sources":["ObservableClientImpl.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ActionDefinition,\n ActionEditResponse,\n ActionValidationResponse,\n AggregateOpts,\n CompileTimeMetadata,\n InterfaceDefinition,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n WirePropertyTypes,\n} from \"@osdk/api\";\nimport { Subscription } from \"rxjs\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport type { FunctionPayload } from \"../FunctionPayload.js\";\nimport type { SpecificLinkPayload } from \"../LinkPayload.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type { ObjectSetPayload } from \"../ObjectSetPayload.js\";\nimport type {\n ObservableClient,\n ObserveAggregationArgs,\n ObserveAggregationOptions,\n ObserveFunctionCallbackArgs,\n ObserveFunctionOptions,\n ObserveListOptions,\n ObserveObjectCallbackArgs,\n ObserveObjectOptions,\n ObserveObjectsCallbackArgs,\n ObserveObjectSetArgs,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport type { Observer } from \"../ObservableClient/common.js\";\nimport type { ObserveLinks } from \"../ObservableClient/ObserveLink.js\";\nimport type { AggregationPayloadBase } from \"./aggregation/AggregationQuery.js\";\nimport type { Canonical } from \"./Canonical.js\";\nimport type { ObserveObjectSetOptions } from \"./objectset/ObjectSetQueryOptions.js\";\nimport type { Store } from \"./Store.js\";\nimport { UnsubscribableWrapper } from \"./UnsubscribableWrapper.js\";\n\n/**\n * Implementation of the public ObservableClient interface.\n * - Delegates all operations to the Store for consistency\n * - Serves as the entry point for reactive data management\n * - Ensures proper method binding and API exposure\n *\n * @internal\n */\nexport class ObservableClientImpl implements ObservableClient {\n __experimentalStore: Store;\n\n constructor(store: Store) {\n this.__experimentalStore = store;\n\n this.applyAction = store.applyAction.bind(store);\n this.validateAction = store.validateAction.bind(store);\n }\n\n public observeObject: <T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: Omit<ObserveObjectOptions<T>, \"apiName\" | \"pk\">,\n subFn: Observer<ObserveObjectCallbackArgs<T>>,\n ) => Unsubscribable = (apiName, pk, options, subFn) => {\n return this.__experimentalStore.objects.observe(\n {\n ...options,\n apiName,\n pk,\n },\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ObjectPayload>,\n );\n };\n\n public observeList: <\n T extends ObjectTypeDefinition | InterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveListOptions<T, RDPs>,\n subFn: Observer<ObserveObjectsCallbackArgs<T, RDPs>>,\n ) => Unsubscribable = (options, subFn) => {\n return this.__experimentalStore.lists.observe(\n options,\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ListPayload>,\n );\n };\n\n public observeAggregation: <\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveAggregationOptions<T, A, RDPs>,\n subFn: Observer<ObserveAggregationArgs<T, A>>,\n ) => Unsubscribable = <\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveAggregationOptions<T, A, RDPs>,\n subFn: Observer<ObserveAggregationArgs<T, A>>,\n ) => {\n return this.__experimentalStore.aggregations.observe(\n options,\n subFn as Observer<AggregationPayloadBase>,\n );\n };\n\n public observeFunction: <Q extends QueryDefinition<unknown>>(\n queryDef: Q,\n params: Record<string, unknown> | undefined,\n options: ObserveFunctionOptions,\n subFn: Observer<ObserveFunctionCallbackArgs<Q>>,\n ) => Unsubscribable = (queryDef, params, options, subFn) => {\n const dependsOn = options.dependsOn?.map(dep =>\n typeof dep === \"string\" ? dep : dep.apiName\n );\n const dependsOnObjects = options.dependsOnObjects?.map(obj => ({\n $apiName: obj.$apiName,\n $primaryKey: obj.$primaryKey,\n }));\n\n return this.__experimentalStore.functions.observe(\n {\n ...options,\n queryDef,\n params,\n dependsOn,\n dependsOnObjects,\n },\n subFn as unknown as Observer<FunctionPayload>,\n );\n };\n\n public observeLinks: <\n T extends ObjectTypeDefinition | InterfaceDefinition,\n L extends keyof CompileTimeMetadata<T>[\"links\"] & string,\n >(\n objects: Osdk.Instance<T> | Array<Osdk.Instance<T>>,\n linkName: L,\n options: ObserveLinks.Options<T, L>,\n subFn: Observer<\n ObserveLinks.CallbackArgs<\n CompileTimeMetadata<T>[\"links\"][L][\"targetType\"]\n >\n >,\n ) => Unsubscribable = (objects, linkName, options, subFn) => {\n // Convert to array if single object provided\n const objectsArray = Array.isArray(objects) ? objects : [objects];\n\n const parentSub = new Subscription();\n\n for (const obj of objectsArray) {\n const querySubscription = this.__experimentalStore.links\n .observe(\n {\n ...options,\n srcType: {\n type: \"object\",\n apiName: obj.$apiName,\n },\n linkName,\n pk: obj.$primaryKey,\n },\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<SpecificLinkPayload>,\n );\n\n parentSub.add(querySubscription);\n }\n\n return new UnsubscribableWrapper(parentSub);\n };\n\n public applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: ObservableClient.ApplyActionOptions,\n ) => Promise<ActionEditResponse>;\n\n public validateAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n ) => Promise<ActionValidationResponse>;\n\n public observeObjectSet<\n T extends ObjectTypeDefinition,\n RDPs extends Record<\n string,\n WirePropertyTypes | undefined | Array<WirePropertyTypes>\n > = {},\n >(\n baseObjectSet: ObjectSet<T>,\n options: ObserveObjectSetOptions<T, RDPs>,\n subFn: Observer<ObserveObjectSetArgs<T, RDPs>>,\n ): Unsubscribable {\n return this.__experimentalStore.objectSets.observe(\n { baseObjectSet, ...options },\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ObjectSetPayload>,\n );\n }\n\n public invalidateAll(): Promise<void> {\n return this.__experimentalStore.invalidateAll();\n }\n\n public invalidateObjects(\n objects:\n | Osdk.Instance<ObjectTypeDefinition>\n | ReadonlyArray<Osdk.Instance<ObjectTypeDefinition>>,\n ): Promise<void> {\n return this.__experimentalStore.invalidateObjects(objects);\n }\n\n public invalidateObjectType<T extends ObjectTypeDefinition>(\n type: T | T[\"apiName\"],\n ): Promise<void> {\n return this.__experimentalStore.invalidateObjectType(type, undefined);\n }\n\n public invalidateFunction(\n apiName: string | QueryDefinition<unknown>,\n params?: Record<string, unknown>,\n ): Promise<void> {\n return this.__experimentalStore.invalidateFunction(apiName, params);\n }\n\n public invalidateFunctionsByObject(\n apiName: string,\n primaryKey: string | number,\n ): Promise<void> {\n return this.__experimentalStore.invalidateFunctionsByObject(\n apiName,\n primaryKey,\n );\n }\n\n public canonicalizeWhereClause<\n T extends ObjectTypeDefinition | InterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(where: WhereClause<T, RDPs>): Canonical<WhereClause<T, RDPs>> {\n return this.__experimentalStore.whereCanonicalizer\n .canonicalize(where) as Canonical<WhereClause<T, RDPs>>;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ObservableClientImpl.js","names":["Subscription","UnsubscribableWrapper","ObservableClientImpl","constructor","store","__experimentalStore","applyAction","bind","validateAction","observeObject","apiName","pk","options","subFn","objects","observe","observeList","lists","observeAggregation","aggregations","observeFunction","queryDef","params","dependsOn","map","dep","dependsOnObjects","obj","$apiName","$objectType","$primaryKey","functions","observeLinks","linkName","objectsArray","Array","isArray","parentSub","querySubscription","links","srcType","type","add","observeObjectSet","baseObjectSet","objectSets","invalidateAll","invalidateObjects","invalidateObjectType","undefined","invalidateFunction","invalidateFunctionsByObject","primaryKey","canonicalizeWhereClause","where","whereCanonicalizer","canonicalize"],"sources":["ObservableClientImpl.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ActionDefinition,\n ActionEditResponse,\n ActionValidationResponse,\n AggregateOpts,\n CompileTimeMetadata,\n InterfaceDefinition,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n WirePropertyTypes,\n} from \"@osdk/api\";\nimport { Subscription } from \"rxjs\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport type { FunctionPayload } from \"../FunctionPayload.js\";\nimport type { SpecificLinkPayload } from \"../LinkPayload.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type { ObjectSetPayload } from \"../ObjectSetPayload.js\";\nimport type {\n ObservableClient,\n ObserveAggregationArgs,\n ObserveAggregationOptions,\n ObserveFunctionCallbackArgs,\n ObserveFunctionOptions,\n ObserveListOptions,\n ObserveObjectCallbackArgs,\n ObserveObjectOptions,\n ObserveObjectsCallbackArgs,\n ObserveObjectSetArgs,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport type { Observer } from \"../ObservableClient/common.js\";\nimport type { ObserveLinks } from \"../ObservableClient/ObserveLink.js\";\nimport type { AggregationPayloadBase } from \"./aggregation/AggregationQuery.js\";\nimport type { Canonical } from \"./Canonical.js\";\nimport type { ObserveObjectSetOptions } from \"./objectset/ObjectSetQueryOptions.js\";\nimport type { Store } from \"./Store.js\";\nimport { UnsubscribableWrapper } from \"./UnsubscribableWrapper.js\";\n\n/**\n * Implementation of the public ObservableClient interface.\n * - Delegates all operations to the Store for consistency\n * - Serves as the entry point for reactive data management\n * - Ensures proper method binding and API exposure\n *\n * @internal\n */\nexport class ObservableClientImpl implements ObservableClient {\n __experimentalStore: Store;\n\n constructor(store: Store) {\n this.__experimentalStore = store;\n\n this.applyAction = store.applyAction.bind(store);\n this.validateAction = store.validateAction.bind(store);\n }\n\n public observeObject: <T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: Omit<ObserveObjectOptions<T>, \"apiName\" | \"pk\">,\n subFn: Observer<ObserveObjectCallbackArgs<T>>,\n ) => Unsubscribable = (apiName, pk, options, subFn) => {\n return this.__experimentalStore.objects.observe(\n {\n ...options,\n apiName,\n pk,\n },\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ObjectPayload>,\n );\n };\n\n public observeList: <\n T extends ObjectTypeDefinition | InterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveListOptions<T, RDPs>,\n subFn: Observer<ObserveObjectsCallbackArgs<T, RDPs>>,\n ) => Unsubscribable = (options, subFn) => {\n return this.__experimentalStore.lists.observe(\n options,\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ListPayload>,\n );\n };\n\n public observeAggregation: <\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveAggregationOptions<T, A, RDPs>,\n subFn: Observer<ObserveAggregationArgs<T, A>>,\n ) => Unsubscribable = <\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveAggregationOptions<T, A, RDPs>,\n subFn: Observer<ObserveAggregationArgs<T, A>>,\n ) => {\n return this.__experimentalStore.aggregations.observe(\n options,\n subFn as Observer<AggregationPayloadBase>,\n );\n };\n\n public observeFunction: <Q extends QueryDefinition<unknown>>(\n queryDef: Q,\n params: Record<string, unknown> | undefined,\n options: ObserveFunctionOptions,\n subFn: Observer<ObserveFunctionCallbackArgs<Q>>,\n ) => Unsubscribable = (queryDef, params, options, subFn) => {\n const dependsOn = options.dependsOn?.map(dep =>\n typeof dep === \"string\" ? dep : dep.apiName\n );\n const dependsOnObjects = options.dependsOnObjects?.map(obj => ({\n $apiName: obj.$objectType ?? obj.$apiName,\n $primaryKey: obj.$primaryKey,\n }));\n\n return this.__experimentalStore.functions.observe(\n {\n ...options,\n queryDef,\n params,\n dependsOn,\n dependsOnObjects,\n },\n subFn as unknown as Observer<FunctionPayload>,\n );\n };\n\n public observeLinks: <\n T extends ObjectTypeDefinition | InterfaceDefinition,\n L extends keyof CompileTimeMetadata<T>[\"links\"] & string,\n >(\n objects: Osdk.Instance<T> | Array<Osdk.Instance<T>>,\n linkName: L,\n options: ObserveLinks.Options<T, L>,\n subFn: Observer<\n ObserveLinks.CallbackArgs<\n CompileTimeMetadata<T>[\"links\"][L][\"targetType\"]\n >\n >,\n ) => Unsubscribable = (objects, linkName, options, subFn) => {\n // Convert to array if single object provided\n const objectsArray = Array.isArray(objects) ? objects : [objects];\n\n const parentSub = new Subscription();\n\n for (const obj of objectsArray) {\n const querySubscription = this.__experimentalStore.links\n .observe(\n {\n ...options,\n srcType: {\n type: \"object\",\n apiName: obj.$objectType ?? obj.$apiName,\n },\n linkName,\n pk: obj.$primaryKey,\n },\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<SpecificLinkPayload>,\n );\n\n parentSub.add(querySubscription);\n }\n\n return new UnsubscribableWrapper(parentSub);\n };\n\n public applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: ObservableClient.ApplyActionOptions,\n ) => Promise<ActionEditResponse>;\n\n public validateAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n ) => Promise<ActionValidationResponse>;\n\n public observeObjectSet<\n T extends ObjectTypeDefinition,\n RDPs extends Record<\n string,\n WirePropertyTypes | undefined | Array<WirePropertyTypes>\n > = {},\n >(\n baseObjectSet: ObjectSet<T>,\n options: ObserveObjectSetOptions<T, RDPs>,\n subFn: Observer<ObserveObjectSetArgs<T, RDPs>>,\n ): Unsubscribable {\n return this.__experimentalStore.objectSets.observe(\n { baseObjectSet, ...options },\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ObjectSetPayload>,\n );\n }\n\n public invalidateAll(): Promise<void> {\n return this.__experimentalStore.invalidateAll();\n }\n\n public invalidateObjects(\n objects:\n | Osdk.Instance<ObjectTypeDefinition>\n | ReadonlyArray<Osdk.Instance<ObjectTypeDefinition>>,\n ): Promise<void> {\n return this.__experimentalStore.invalidateObjects(objects);\n }\n\n public invalidateObjectType<T extends ObjectTypeDefinition>(\n type: T | T[\"apiName\"],\n ): Promise<void> {\n return this.__experimentalStore.invalidateObjectType(type, undefined);\n }\n\n public invalidateFunction(\n apiName: string | QueryDefinition<unknown>,\n params?: Record<string, unknown>,\n ): Promise<void> {\n return this.__experimentalStore.invalidateFunction(apiName, params);\n }\n\n public invalidateFunctionsByObject(\n apiName: string,\n primaryKey: string | number,\n ): Promise<void> {\n return this.__experimentalStore.invalidateFunctionsByObject(\n apiName,\n primaryKey,\n );\n }\n\n public canonicalizeWhereClause<\n T extends ObjectTypeDefinition | InterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(where: WhereClause<T, RDPs>): Canonical<WhereClause<T, RDPs>> {\n return this.__experimentalStore.whereCanonicalizer\n .canonicalize(where) as Canonical<WhereClause<T, RDPs>>;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -804,7 +804,11 @@ describe(Store, () => {
|
|
|
804
804
|
status: "loaded"
|
|
805
805
|
});
|
|
806
806
|
await waitForCall(ifaceSub);
|
|
807
|
-
expectSingleListCallAndClear(ifaceSub, employeesAsServerReturns
|
|
807
|
+
expectSingleListCallAndClear(ifaceSub, employeesAsServerReturns.map(e => expect.objectContaining({
|
|
808
|
+
$apiName: "FooInterface",
|
|
809
|
+
$objectType: "Employee",
|
|
810
|
+
$primaryKey: e.$primaryKey
|
|
811
|
+
})), {
|
|
808
812
|
status: "loaded"
|
|
809
813
|
});
|
|
810
814
|
expectNoMoreCalls(listSub1);
|
|
@@ -814,6 +818,49 @@ describe(Store, () => {
|
|
|
814
818
|
expect(ifaceSub.next).not.toHaveBeenCalled();
|
|
815
819
|
expect(ifaceSub.error).not.toHaveBeenCalled();
|
|
816
820
|
});
|
|
821
|
+
it("cache stores raw objects when loading via interface", async () => {
|
|
822
|
+
defer(cache.lists.observe({
|
|
823
|
+
type: FooInterface,
|
|
824
|
+
orderBy: {},
|
|
825
|
+
mode: "force"
|
|
826
|
+
}, ifaceSub));
|
|
827
|
+
await waitForCall(ifaceSub, 2);
|
|
828
|
+
const pk = employeesAsServerReturns[0].$primaryKey;
|
|
829
|
+
const cached = getObject(cache, "Employee", pk);
|
|
830
|
+
expect(cached?.$apiName).toBe("Employee");
|
|
831
|
+
expect(cached?.$objectType).toBe("Employee");
|
|
832
|
+
});
|
|
833
|
+
it("interface queries return interface view while cache stores raw object", async () => {
|
|
834
|
+
defer(cache.lists.observe({
|
|
835
|
+
type: FooInterface,
|
|
836
|
+
orderBy: {},
|
|
837
|
+
mode: "force"
|
|
838
|
+
}, ifaceSub));
|
|
839
|
+
await waitForCall(ifaceSub, 2);
|
|
840
|
+
const ifacePayload = ifaceSub.next.mock.calls[1][0];
|
|
841
|
+
expect(ifacePayload?.resolvedList?.[0]?.$apiName).toBe("FooInterface");
|
|
842
|
+
expect(ifacePayload?.resolvedList?.[0]?.$objectType).toBe("Employee");
|
|
843
|
+
const pk = employeesAsServerReturns[0].$primaryKey;
|
|
844
|
+
const cached = getObject(cache, "Employee", pk);
|
|
845
|
+
expect(cached?.$apiName).toBe("Employee");
|
|
846
|
+
});
|
|
847
|
+
it("direct query after interface query preserves interface $apiName", async () => {
|
|
848
|
+
const objSub = mockSingleSubCallback();
|
|
849
|
+
defer(cache.lists.observe({
|
|
850
|
+
type: FooInterface,
|
|
851
|
+
orderBy: {},
|
|
852
|
+
mode: "force"
|
|
853
|
+
}, ifaceSub));
|
|
854
|
+
await waitForCall(ifaceSub, 2);
|
|
855
|
+
expect(ifaceSub.next.mock.calls[1][0]?.resolvedList?.[0]?.$apiName).toBe("FooInterface");
|
|
856
|
+
defer(cache.objects.observe({
|
|
857
|
+
apiName: Employee,
|
|
858
|
+
pk: employeesAsServerReturns[0].$primaryKey,
|
|
859
|
+
mode: "force"
|
|
860
|
+
}, objSub));
|
|
861
|
+
await waitForCall(objSub, 2);
|
|
862
|
+
expect(ifaceSub.next.mock.calls.at(-1)?.[0]?.resolvedList?.[0]?.$apiName).toBe("FooInterface");
|
|
863
|
+
});
|
|
817
864
|
it("subsequent load", async () => {
|
|
818
865
|
// Pre-seed with data the server doesn't return
|
|
819
866
|
updateList(cache, {
|