@osdk/widget.client-react 3.5.0-beta.14 → 3.5.0-beta.16
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 +17 -0
- package/package.json +7 -7
- package/build/browser/client.test.js +0 -348
- package/build/browser/client.test.js.map +0 -1
- package/build/browser/utils/extendParametersWithObjectSets.test.js +0 -372
- package/build/browser/utils/extendParametersWithObjectSets.test.js.map +0 -1
- package/build/browser/utils/transformEmitEventPayload.test.js +0 -210
- package/build/browser/utils/transformEmitEventPayload.test.js.map +0 -1
- package/build/esm/client.test.js +0 -348
- package/build/esm/client.test.js.map +0 -1
- package/build/esm/utils/extendParametersWithObjectSets.test.js +0 -372
- package/build/esm/utils/extendParametersWithObjectSets.test.js.map +0 -1
- package/build/esm/utils/transformEmitEventPayload.test.js +0 -210
- package/build/esm/utils/transformEmitEventPayload.test.js.map +0 -1
- package/build/types/client.test.d.ts +0 -3
- package/build/types/client.test.d.ts.map +0 -1
- package/build/types/utils/extendParametersWithObjectSets.test.d.ts +0 -1
- package/build/types/utils/extendParametersWithObjectSets.test.d.ts.map +0 -1
- package/build/types/utils/transformEmitEventPayload.test.d.ts +0 -1
- package/build/types/utils/transformEmitEventPayload.test.d.ts.map +0 -1
|
@@ -1,372 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { hydrateObjectSetFromRid } from "@osdk/client/internal";
|
|
18
|
-
import { defineConfig } from "@osdk/widget.client";
|
|
19
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
20
|
-
import { extendParametersWithObjectSets } from "./extendParametersWithObjectSets.js";
|
|
21
|
-
vi.mock("@osdk/client/internal", () => ({
|
|
22
|
-
hydrateObjectSetFromRid: vi.fn()
|
|
23
|
-
}));
|
|
24
|
-
describe("extendParametersWithObjectSets", () => {
|
|
25
|
-
const client = vi.fn();
|
|
26
|
-
const cache = new Map();
|
|
27
|
-
|
|
28
|
-
// Test helpers
|
|
29
|
-
const createMockObjectType = (rid = "ri.object-type.123") => ({
|
|
30
|
-
apiName: "MyObjectType",
|
|
31
|
-
type: "object",
|
|
32
|
-
internalDoNotUseMetadata: {
|
|
33
|
-
rid
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
const createLoadedValue = value => ({
|
|
37
|
-
type: "loaded",
|
|
38
|
-
value
|
|
39
|
-
});
|
|
40
|
-
const createObjectSetParam = rid => ({
|
|
41
|
-
type: "objectSet",
|
|
42
|
-
value: createLoadedValue({
|
|
43
|
-
objectSetRid: rid
|
|
44
|
-
})
|
|
45
|
-
});
|
|
46
|
-
const createStringParam = value => ({
|
|
47
|
-
type: "string",
|
|
48
|
-
value: createLoadedValue(value)
|
|
49
|
-
});
|
|
50
|
-
const createNumberParam = value => ({
|
|
51
|
-
type: "number",
|
|
52
|
-
value: createLoadedValue(value)
|
|
53
|
-
});
|
|
54
|
-
const createMockObjectSet = (name = "MockObjectSet") => Symbol(name);
|
|
55
|
-
beforeEach(() => {
|
|
56
|
-
vi.clearAllMocks();
|
|
57
|
-
cache.clear();
|
|
58
|
-
});
|
|
59
|
-
it("should hydrate an object set for a valid objectSetRid", () => {
|
|
60
|
-
const config = defineConfig({
|
|
61
|
-
id: "testWidget",
|
|
62
|
-
name: "Test Widget",
|
|
63
|
-
type: "workshop",
|
|
64
|
-
parameters: {
|
|
65
|
-
myObjectSet: {
|
|
66
|
-
displayName: "My Object Set",
|
|
67
|
-
type: "objectSet",
|
|
68
|
-
allowedType: createMockObjectType()
|
|
69
|
-
},
|
|
70
|
-
myString: {
|
|
71
|
-
displayName: "My String",
|
|
72
|
-
type: "string"
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
events: {}
|
|
76
|
-
});
|
|
77
|
-
const parameters = {
|
|
78
|
-
myString: createStringParam("test string"),
|
|
79
|
-
myObjectSet: createObjectSetParam("ri.object-set.123")
|
|
80
|
-
};
|
|
81
|
-
const mockObjectSet = createMockObjectSet();
|
|
82
|
-
vi.mocked(hydrateObjectSetFromRid).mockReturnValue(mockObjectSet);
|
|
83
|
-
const result = extendParametersWithObjectSets(client, config, parameters, cache);
|
|
84
|
-
expect(result).toEqual({
|
|
85
|
-
myString: parameters.myString,
|
|
86
|
-
myObjectSet: {
|
|
87
|
-
...parameters.myObjectSet,
|
|
88
|
-
value: {
|
|
89
|
-
...parameters.myObjectSet.value,
|
|
90
|
-
value: {
|
|
91
|
-
objectSetRid: "ri.object-set.123",
|
|
92
|
-
objectSet: mockObjectSet
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
it("should pass-through a config with no object set parameters", () => {
|
|
99
|
-
const config = defineConfig({
|
|
100
|
-
id: "testWidget",
|
|
101
|
-
name: "Test Widget",
|
|
102
|
-
type: "workshop",
|
|
103
|
-
parameters: {
|
|
104
|
-
myNumber: {
|
|
105
|
-
displayName: "My Number",
|
|
106
|
-
type: "number"
|
|
107
|
-
},
|
|
108
|
-
myString: {
|
|
109
|
-
displayName: "My String",
|
|
110
|
-
type: "string"
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
events: {}
|
|
114
|
-
});
|
|
115
|
-
const parameters = {
|
|
116
|
-
myString: createStringParam("test string"),
|
|
117
|
-
myNumber: createNumberParam(123)
|
|
118
|
-
};
|
|
119
|
-
const result = extendParametersWithObjectSets(undefined, config, parameters, cache);
|
|
120
|
-
expect(result).toEqual(parameters);
|
|
121
|
-
expect(hydrateObjectSetFromRid).not.toHaveBeenCalled();
|
|
122
|
-
});
|
|
123
|
-
it("should handle multiple object set parameters independently", () => {
|
|
124
|
-
const mockObjectType = createMockObjectType();
|
|
125
|
-
const config = defineConfig({
|
|
126
|
-
id: "testWidget",
|
|
127
|
-
name: "Test Widget",
|
|
128
|
-
type: "workshop",
|
|
129
|
-
parameters: {
|
|
130
|
-
objectsA: {
|
|
131
|
-
displayName: "Object Set A",
|
|
132
|
-
type: "objectSet",
|
|
133
|
-
allowedType: mockObjectType
|
|
134
|
-
},
|
|
135
|
-
objectsB: {
|
|
136
|
-
displayName: "Object Set B",
|
|
137
|
-
type: "objectSet",
|
|
138
|
-
allowedType: mockObjectType
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
events: {}
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
// Setup initial parameters
|
|
145
|
-
const mockObjectSetA = createMockObjectSet("MockObjectSetA");
|
|
146
|
-
const mockObjectSetB = createMockObjectSet("MockObjectSetB");
|
|
147
|
-
vi.mocked(hydrateObjectSetFromRid).mockReturnValueOnce(mockObjectSetA).mockReturnValueOnce(mockObjectSetB);
|
|
148
|
-
let parameters = {
|
|
149
|
-
objectsA: createObjectSetParam("ri.object-set.123"),
|
|
150
|
-
objectsB: createObjectSetParam("ri.object-set.456")
|
|
151
|
-
};
|
|
152
|
-
const result = extendParametersWithObjectSets(client, config, parameters, cache);
|
|
153
|
-
|
|
154
|
-
// Helper to create expected result with hydrated object set
|
|
155
|
-
const expectHydratedParam = (rid, objectSet) => ({
|
|
156
|
-
type: "objectSet",
|
|
157
|
-
value: createLoadedValue({
|
|
158
|
-
objectSetRid: rid,
|
|
159
|
-
objectSet
|
|
160
|
-
})
|
|
161
|
-
});
|
|
162
|
-
expect(result).toEqual({
|
|
163
|
-
objectsA: expectHydratedParam("ri.object-set.123", mockObjectSetA),
|
|
164
|
-
objectsB: expectHydratedParam("ri.object-set.456", mockObjectSetB)
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
// Test parameter update
|
|
168
|
-
const mockObjectSetB2 = createMockObjectSet("MockObjectSetB2");
|
|
169
|
-
vi.mocked(hydrateObjectSetFromRid).mockReturnValueOnce(mockObjectSetB2);
|
|
170
|
-
parameters = {
|
|
171
|
-
...parameters,
|
|
172
|
-
objectsB: createObjectSetParam("ri.object-set.789")
|
|
173
|
-
};
|
|
174
|
-
const result2 = extendParametersWithObjectSets(client, config, parameters, cache);
|
|
175
|
-
expect(result2).toEqual({
|
|
176
|
-
objectsA: expectHydratedParam("ri.object-set.123", mockObjectSetA),
|
|
177
|
-
objectsB: expectHydratedParam("ri.object-set.789", mockObjectSetB2)
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
// Verify cache updated correctly
|
|
181
|
-
expect(cache.get("objectsB")).toMatchObject({
|
|
182
|
-
objectSetRid: "ri.object-set.789",
|
|
183
|
-
objectSet: mockObjectSetB2
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
it("should clear cache and provide no object set when parameter transitions to failed state", () => {
|
|
187
|
-
const config = defineConfig({
|
|
188
|
-
id: "testWidget",
|
|
189
|
-
name: "Test Widget",
|
|
190
|
-
type: "workshop",
|
|
191
|
-
parameters: {
|
|
192
|
-
myObjectSet: {
|
|
193
|
-
displayName: "My Object Set",
|
|
194
|
-
type: "objectSet",
|
|
195
|
-
allowedType: createMockObjectType()
|
|
196
|
-
},
|
|
197
|
-
myString: {
|
|
198
|
-
displayName: "My String",
|
|
199
|
-
type: "string"
|
|
200
|
-
}
|
|
201
|
-
},
|
|
202
|
-
events: {}
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
// Initially load an object set successfully
|
|
206
|
-
const mockObjectSet = createMockObjectSet();
|
|
207
|
-
vi.mocked(hydrateObjectSetFromRid).mockReturnValue(mockObjectSet);
|
|
208
|
-
const initialParameters = {
|
|
209
|
-
myString: createStringParam("test string"),
|
|
210
|
-
myObjectSet: createObjectSetParam("ri.object-set.123")
|
|
211
|
-
};
|
|
212
|
-
const initialResult = extendParametersWithObjectSets(client, config, initialParameters, cache);
|
|
213
|
-
|
|
214
|
-
// Verify initial state - object set is loaded and cached
|
|
215
|
-
expect(initialResult.myObjectSet.value.value).toMatchObject({
|
|
216
|
-
objectSetRid: "ri.object-set.123",
|
|
217
|
-
objectSet: mockObjectSet
|
|
218
|
-
});
|
|
219
|
-
expect(cache.get("myObjectSet")).toMatchObject({
|
|
220
|
-
objectSetRid: "ri.object-set.123",
|
|
221
|
-
objectSet: mockObjectSet
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
// Transition to failed state and omit value
|
|
225
|
-
const failedParameters = {
|
|
226
|
-
myString: createStringParam("test string"),
|
|
227
|
-
myObjectSet: {
|
|
228
|
-
type: "objectSet",
|
|
229
|
-
value: {
|
|
230
|
-
type: "failed",
|
|
231
|
-
error: new Error("Failed to load object set"),
|
|
232
|
-
value: undefined
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
const failedResult = extendParametersWithObjectSets(client, config, failedParameters, cache);
|
|
237
|
-
|
|
238
|
-
// Verify failed state - no object set in result and cache is cleared
|
|
239
|
-
expect(failedResult).toEqual(failedParameters);
|
|
240
|
-
expect(cache.has("myObjectSet")).toBe(false);
|
|
241
|
-
|
|
242
|
-
// Verify hydrateObjectSetFromRid was not called again for the failed state
|
|
243
|
-
expect(hydrateObjectSetFromRid).toHaveBeenCalledTimes(1);
|
|
244
|
-
});
|
|
245
|
-
it("should throw an error when osdkClient is undefined but object set parameters used", () => {
|
|
246
|
-
const config = defineConfig({
|
|
247
|
-
id: "testWidget",
|
|
248
|
-
name: "Test Widget",
|
|
249
|
-
type: "workshop",
|
|
250
|
-
parameters: {
|
|
251
|
-
myObjectSet: {
|
|
252
|
-
displayName: "My Object Set",
|
|
253
|
-
type: "objectSet",
|
|
254
|
-
allowedType: createMockObjectType()
|
|
255
|
-
}
|
|
256
|
-
},
|
|
257
|
-
events: {}
|
|
258
|
-
});
|
|
259
|
-
const parameters = {
|
|
260
|
-
myObjectSet: createObjectSetParam("ri.object-set.123")
|
|
261
|
-
};
|
|
262
|
-
expect(() => extendParametersWithObjectSets(undefined, config, parameters, cache)).toThrow("Not provided an OSDK client");
|
|
263
|
-
});
|
|
264
|
-
it("should pass through loading state without hydration", () => {
|
|
265
|
-
const config = defineConfig({
|
|
266
|
-
id: "testWidget",
|
|
267
|
-
name: "Test Widget",
|
|
268
|
-
type: "workshop",
|
|
269
|
-
parameters: {
|
|
270
|
-
myObjectSet: {
|
|
271
|
-
displayName: "My Object Set",
|
|
272
|
-
type: "objectSet",
|
|
273
|
-
allowedType: createMockObjectType()
|
|
274
|
-
}
|
|
275
|
-
},
|
|
276
|
-
events: {}
|
|
277
|
-
});
|
|
278
|
-
const parameters = {
|
|
279
|
-
myObjectSet: {
|
|
280
|
-
type: "objectSet",
|
|
281
|
-
value: {
|
|
282
|
-
type: "loading",
|
|
283
|
-
value: undefined
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
const result = extendParametersWithObjectSets(client, config, parameters, cache);
|
|
288
|
-
expect(result).toEqual(parameters);
|
|
289
|
-
expect(hydrateObjectSetFromRid).not.toHaveBeenCalled();
|
|
290
|
-
});
|
|
291
|
-
it("should handle transition from loaded to reloading to loaded with new rid", () => {
|
|
292
|
-
const config = defineConfig({
|
|
293
|
-
id: "testWidget",
|
|
294
|
-
name: "Test Widget",
|
|
295
|
-
type: "workshop",
|
|
296
|
-
parameters: {
|
|
297
|
-
myObjectSet: {
|
|
298
|
-
displayName: "My Object Set",
|
|
299
|
-
type: "objectSet",
|
|
300
|
-
allowedType: createMockObjectType()
|
|
301
|
-
}
|
|
302
|
-
},
|
|
303
|
-
events: {}
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
// Step 1: Initial loaded state
|
|
307
|
-
const mockObjectSet1 = createMockObjectSet("InitialObjectSet");
|
|
308
|
-
vi.mocked(hydrateObjectSetFromRid).mockReturnValue(mockObjectSet1);
|
|
309
|
-
const initialParameters = {
|
|
310
|
-
myObjectSet: createObjectSetParam("ri.object-set.123")
|
|
311
|
-
};
|
|
312
|
-
const initialResult = extendParametersWithObjectSets(client, config, initialParameters, cache);
|
|
313
|
-
|
|
314
|
-
// Verify initial state
|
|
315
|
-
expect(initialResult.myObjectSet.value.value).toMatchObject({
|
|
316
|
-
objectSetRid: "ri.object-set.123",
|
|
317
|
-
objectSet: mockObjectSet1
|
|
318
|
-
});
|
|
319
|
-
expect(cache.get("myObjectSet")).toMatchObject({
|
|
320
|
-
objectSetRid: "ri.object-set.123",
|
|
321
|
-
objectSet: mockObjectSet1
|
|
322
|
-
});
|
|
323
|
-
expect(hydrateObjectSetFromRid).toHaveBeenCalledTimes(1);
|
|
324
|
-
expect(hydrateObjectSetFromRid).toHaveBeenCalledWith(client, expect.anything(), "ri.object-set.123");
|
|
325
|
-
|
|
326
|
-
// Step 2: Transition to reloading state (value persists during reload)
|
|
327
|
-
|
|
328
|
-
const reloadingResult = extendParametersWithObjectSets(client, config, {
|
|
329
|
-
myObjectSet: {
|
|
330
|
-
type: "objectSet",
|
|
331
|
-
value: {
|
|
332
|
-
type: "reloading",
|
|
333
|
-
value: {
|
|
334
|
-
objectSetRid: "ri.object-set.123"
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
}, cache);
|
|
339
|
-
|
|
340
|
-
// During reloading, the cached objectSet should be reused (no new hydration)
|
|
341
|
-
expect(reloadingResult.myObjectSet.value.value).toMatchObject({
|
|
342
|
-
objectSetRid: "ri.object-set.123",
|
|
343
|
-
objectSet: mockObjectSet1 // Same object set from cache
|
|
344
|
-
});
|
|
345
|
-
expect(cache.get("myObjectSet")).toMatchObject({
|
|
346
|
-
objectSetRid: "ri.object-set.123",
|
|
347
|
-
objectSet: mockObjectSet1
|
|
348
|
-
});
|
|
349
|
-
expect(hydrateObjectSetFromRid).toHaveBeenCalledTimes(1); // Still only 1 call
|
|
350
|
-
|
|
351
|
-
// Step 3: Transition back to loaded with new rid
|
|
352
|
-
const mockObjectSet2 = createMockObjectSet("UpdatedObjectSet");
|
|
353
|
-
vi.mocked(hydrateObjectSetFromRid).mockReturnValue(mockObjectSet2);
|
|
354
|
-
const newLoadedParameters = {
|
|
355
|
-
myObjectSet: createObjectSetParam("ri.object-set.456")
|
|
356
|
-
};
|
|
357
|
-
const newLoadedResult = extendParametersWithObjectSets(client, config, newLoadedParameters, cache);
|
|
358
|
-
|
|
359
|
-
// Verify new state - new object set hydrated and cache updated
|
|
360
|
-
expect(newLoadedResult.myObjectSet.value.value).toMatchObject({
|
|
361
|
-
objectSetRid: "ri.object-set.456",
|
|
362
|
-
objectSet: mockObjectSet2
|
|
363
|
-
});
|
|
364
|
-
expect(cache.get("myObjectSet")).toMatchObject({
|
|
365
|
-
objectSetRid: "ri.object-set.456",
|
|
366
|
-
objectSet: mockObjectSet2
|
|
367
|
-
});
|
|
368
|
-
expect(hydrateObjectSetFromRid).toHaveBeenCalledTimes(2);
|
|
369
|
-
expect(hydrateObjectSetFromRid).toHaveBeenLastCalledWith(client, expect.anything(), "ri.object-set.456");
|
|
370
|
-
});
|
|
371
|
-
});
|
|
372
|
-
//# sourceMappingURL=extendParametersWithObjectSets.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extendParametersWithObjectSets.test.js","names":["hydrateObjectSetFromRid","defineConfig","beforeEach","describe","expect","it","vi","extendParametersWithObjectSets","mock","fn","client","cache","Map","createMockObjectType","rid","apiName","type","internalDoNotUseMetadata","createLoadedValue","value","createObjectSetParam","objectSetRid","createStringParam","createNumberParam","createMockObjectSet","name","Symbol","clearAllMocks","clear","config","id","parameters","myObjectSet","displayName","allowedType","myString","events","mockObjectSet","mocked","mockReturnValue","result","toEqual","objectSet","myNumber","undefined","not","toHaveBeenCalled","mockObjectType","objectsA","objectsB","mockObjectSetA","mockObjectSetB","mockReturnValueOnce","expectHydratedParam","mockObjectSetB2","result2","get","toMatchObject","initialParameters","initialResult","failedParameters","error","Error","failedResult","has","toBe","toHaveBeenCalledTimes","toThrow","mockObjectSet1","toHaveBeenCalledWith","anything","reloadingResult","mockObjectSet2","newLoadedParameters","newLoadedResult","toHaveBeenLastCalledWith"],"sources":["extendParametersWithObjectSets.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Client, ObjectSet } from \"@osdk/client\";\nimport { hydrateObjectSetFromRid } from \"@osdk/client/internal\";\nimport type {\n AllowedObjectSetParameterType,\n AsyncParameterValueMap,\n} from \"@osdk/widget.api\";\nimport { defineConfig } from \"@osdk/widget.client\";\nimport type { Mock } from \"vitest\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { extendParametersWithObjectSets } from \"./extendParametersWithObjectSets.js\";\n\nvi.mock(\"@osdk/client/internal\", () => ({\n hydrateObjectSetFromRid: vi.fn(),\n}));\n\ndescribe(\"extendParametersWithObjectSets\", () => {\n const client = vi.fn() as Mock<Client> & Client;\n const cache = new Map<\n string,\n { objectSetRid: string; objectSet: ObjectSet }\n >();\n\n // Test helpers\n const createMockObjectType = (\n rid = \"ri.object-type.123\",\n ): AllowedObjectSetParameterType => ({\n apiName: \"MyObjectType\",\n type: \"object\",\n internalDoNotUseMetadata: { rid },\n });\n\n const createLoadedValue = <T>(value: T) => ({\n type: \"loaded\" as const,\n value,\n });\n\n const createObjectSetParam = (rid: string) => ({\n type: \"objectSet\" as const,\n value: createLoadedValue({ objectSetRid: rid }),\n });\n\n const createStringParam = (value: string) => ({\n type: \"string\" as const,\n value: createLoadedValue(value),\n });\n\n const createNumberParam = (value: number) => ({\n type: \"number\" as const,\n value: createLoadedValue(value),\n });\n\n const createMockObjectSet = (name = \"MockObjectSet\") =>\n Symbol(name) as unknown as ObjectSet;\n\n beforeEach(() => {\n vi.clearAllMocks();\n cache.clear();\n });\n\n it(\"should hydrate an object set for a valid objectSetRid\", () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myObjectSet: {\n displayName: \"My Object Set\",\n type: \"objectSet\",\n allowedType: createMockObjectType(),\n },\n myString: {\n displayName: \"My String\",\n type: \"string\",\n },\n },\n events: {},\n });\n\n const parameters: AsyncParameterValueMap<typeof config> = {\n myString: createStringParam(\"test string\"),\n myObjectSet: createObjectSetParam(\"ri.object-set.123\"),\n };\n\n const mockObjectSet = createMockObjectSet();\n vi.mocked(hydrateObjectSetFromRid).mockReturnValue(mockObjectSet);\n\n const result = extendParametersWithObjectSets(\n client,\n config,\n parameters,\n cache,\n );\n\n expect(result).toEqual({\n myString: parameters.myString,\n myObjectSet: {\n ...parameters.myObjectSet,\n value: {\n ...parameters.myObjectSet.value,\n value: {\n objectSetRid: \"ri.object-set.123\",\n objectSet: mockObjectSet,\n },\n },\n },\n });\n });\n\n it(\"should pass-through a config with no object set parameters\", () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myNumber: {\n displayName: \"My Number\",\n type: \"number\",\n },\n myString: {\n displayName: \"My String\",\n type: \"string\",\n },\n },\n events: {},\n });\n\n const parameters: AsyncParameterValueMap<typeof config> = {\n myString: createStringParam(\"test string\"),\n myNumber: createNumberParam(123),\n };\n\n const result = extendParametersWithObjectSets(\n undefined,\n config,\n parameters,\n cache,\n );\n\n expect(result).toEqual(parameters);\n expect(hydrateObjectSetFromRid).not.toHaveBeenCalled();\n });\n\n it(\"should handle multiple object set parameters independently\", () => {\n const mockObjectType = createMockObjectType();\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n objectsA: {\n displayName: \"Object Set A\",\n type: \"objectSet\",\n allowedType: mockObjectType,\n },\n objectsB: {\n displayName: \"Object Set B\",\n type: \"objectSet\",\n allowedType: mockObjectType,\n },\n },\n events: {},\n });\n\n // Setup initial parameters\n const mockObjectSetA = createMockObjectSet(\"MockObjectSetA\");\n const mockObjectSetB = createMockObjectSet(\"MockObjectSetB\");\n\n vi.mocked(hydrateObjectSetFromRid)\n .mockReturnValueOnce(mockObjectSetA)\n .mockReturnValueOnce(mockObjectSetB);\n\n let parameters: AsyncParameterValueMap<typeof config> = {\n objectsA: createObjectSetParam(\"ri.object-set.123\"),\n objectsB: createObjectSetParam(\"ri.object-set.456\"),\n };\n\n const result = extendParametersWithObjectSets(\n client,\n config,\n parameters,\n cache,\n );\n\n // Helper to create expected result with hydrated object set\n const expectHydratedParam = (rid: string, objectSet: ObjectSet) => ({\n type: \"objectSet\",\n value: createLoadedValue({\n objectSetRid: rid,\n objectSet,\n }),\n });\n\n expect(result).toEqual({\n objectsA: expectHydratedParam(\"ri.object-set.123\", mockObjectSetA),\n objectsB: expectHydratedParam(\"ri.object-set.456\", mockObjectSetB),\n });\n\n // Test parameter update\n const mockObjectSetB2 = createMockObjectSet(\"MockObjectSetB2\");\n vi.mocked(hydrateObjectSetFromRid).mockReturnValueOnce(mockObjectSetB2);\n\n parameters = {\n ...parameters,\n objectsB: createObjectSetParam(\"ri.object-set.789\"),\n };\n\n const result2 = extendParametersWithObjectSets(\n client,\n config,\n parameters,\n cache,\n );\n\n expect(result2).toEqual({\n objectsA: expectHydratedParam(\"ri.object-set.123\", mockObjectSetA),\n objectsB: expectHydratedParam(\"ri.object-set.789\", mockObjectSetB2),\n });\n\n // Verify cache updated correctly\n expect(cache.get(\"objectsB\")).toMatchObject({\n objectSetRid: \"ri.object-set.789\",\n objectSet: mockObjectSetB2,\n });\n });\n\n it(\"should clear cache and provide no object set when parameter transitions to failed state\", () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myObjectSet: {\n displayName: \"My Object Set\",\n type: \"objectSet\",\n allowedType: createMockObjectType(),\n },\n myString: {\n displayName: \"My String\",\n type: \"string\",\n },\n },\n events: {},\n });\n\n // Initially load an object set successfully\n const mockObjectSet = createMockObjectSet();\n vi.mocked(hydrateObjectSetFromRid).mockReturnValue(mockObjectSet);\n\n const initialParameters: AsyncParameterValueMap<typeof config> = {\n myString: createStringParam(\"test string\"),\n myObjectSet: createObjectSetParam(\"ri.object-set.123\"),\n };\n\n const initialResult = extendParametersWithObjectSets(\n client,\n config,\n initialParameters,\n cache,\n );\n\n // Verify initial state - object set is loaded and cached\n expect(initialResult.myObjectSet.value.value).toMatchObject({\n objectSetRid: \"ri.object-set.123\",\n objectSet: mockObjectSet,\n });\n expect(cache.get(\"myObjectSet\")).toMatchObject({\n objectSetRid: \"ri.object-set.123\",\n objectSet: mockObjectSet,\n });\n\n // Transition to failed state and omit value\n const failedParameters: AsyncParameterValueMap<typeof config> = {\n myString: createStringParam(\"test string\"),\n myObjectSet: {\n type: \"objectSet\",\n value: {\n type: \"failed\",\n error: new Error(\"Failed to load object set\"),\n value: undefined,\n },\n },\n };\n\n const failedResult = extendParametersWithObjectSets(\n client,\n config,\n failedParameters,\n cache,\n );\n\n // Verify failed state - no object set in result and cache is cleared\n expect(failedResult).toEqual(failedParameters);\n expect(cache.has(\"myObjectSet\")).toBe(false);\n\n // Verify hydrateObjectSetFromRid was not called again for the failed state\n expect(hydrateObjectSetFromRid).toHaveBeenCalledTimes(1);\n });\n\n it(\"should throw an error when osdkClient is undefined but object set parameters used\", () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myObjectSet: {\n displayName: \"My Object Set\",\n type: \"objectSet\",\n allowedType: createMockObjectType(),\n },\n },\n events: {},\n });\n\n const parameters: AsyncParameterValueMap<typeof config> = {\n myObjectSet: createObjectSetParam(\"ri.object-set.123\"),\n };\n\n expect(() =>\n extendParametersWithObjectSets(\n undefined,\n config,\n parameters,\n cache,\n )\n ).toThrow(\"Not provided an OSDK client\");\n });\n\n it(\"should pass through loading state without hydration\", () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myObjectSet: {\n displayName: \"My Object Set\",\n type: \"objectSet\",\n allowedType: createMockObjectType(),\n },\n },\n events: {},\n });\n\n const parameters: AsyncParameterValueMap<typeof config> = {\n myObjectSet: {\n type: \"objectSet\",\n value: {\n type: \"loading\",\n value: undefined,\n },\n },\n };\n\n const result = extendParametersWithObjectSets(\n client,\n config,\n parameters,\n cache,\n );\n\n expect(result).toEqual(parameters);\n expect(hydrateObjectSetFromRid).not.toHaveBeenCalled();\n });\n\n it(\"should handle transition from loaded to reloading to loaded with new rid\", () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myObjectSet: {\n displayName: \"My Object Set\",\n type: \"objectSet\",\n allowedType: createMockObjectType(),\n },\n },\n events: {},\n });\n\n // Step 1: Initial loaded state\n const mockObjectSet1 = createMockObjectSet(\"InitialObjectSet\");\n vi.mocked(hydrateObjectSetFromRid).mockReturnValue(mockObjectSet1);\n\n const initialParameters: AsyncParameterValueMap<typeof config> = {\n myObjectSet: createObjectSetParam(\"ri.object-set.123\"),\n };\n\n const initialResult = extendParametersWithObjectSets(\n client,\n config,\n initialParameters,\n cache,\n );\n\n // Verify initial state\n expect(initialResult.myObjectSet.value.value).toMatchObject({\n objectSetRid: \"ri.object-set.123\",\n objectSet: mockObjectSet1,\n });\n expect(cache.get(\"myObjectSet\")).toMatchObject({\n objectSetRid: \"ri.object-set.123\",\n objectSet: mockObjectSet1,\n });\n expect(hydrateObjectSetFromRid).toHaveBeenCalledTimes(1);\n expect(hydrateObjectSetFromRid).toHaveBeenCalledWith(\n client,\n expect.anything(),\n \"ri.object-set.123\",\n );\n\n // Step 2: Transition to reloading state (value persists during reload)\n const reloadingParameters: AsyncParameterValueMap<typeof config> = {\n myObjectSet: {\n type: \"objectSet\",\n value: {\n type: \"reloading\",\n value: {\n objectSetRid: \"ri.object-set.123\",\n },\n },\n },\n };\n\n const reloadingResult = extendParametersWithObjectSets(\n client,\n config,\n reloadingParameters,\n cache,\n );\n\n // During reloading, the cached objectSet should be reused (no new hydration)\n expect(reloadingResult.myObjectSet.value.value).toMatchObject({\n objectSetRid: \"ri.object-set.123\",\n objectSet: mockObjectSet1, // Same object set from cache\n });\n expect(cache.get(\"myObjectSet\")).toMatchObject({\n objectSetRid: \"ri.object-set.123\",\n objectSet: mockObjectSet1,\n });\n expect(hydrateObjectSetFromRid).toHaveBeenCalledTimes(1); // Still only 1 call\n\n // Step 3: Transition back to loaded with new rid\n const mockObjectSet2 = createMockObjectSet(\"UpdatedObjectSet\");\n vi.mocked(hydrateObjectSetFromRid).mockReturnValue(mockObjectSet2);\n\n const newLoadedParameters: AsyncParameterValueMap<typeof config> = {\n myObjectSet: createObjectSetParam(\"ri.object-set.456\"),\n };\n\n const newLoadedResult = extendParametersWithObjectSets(\n client,\n config,\n newLoadedParameters,\n cache,\n );\n\n // Verify new state - new object set hydrated and cache updated\n expect(newLoadedResult.myObjectSet.value.value).toMatchObject({\n objectSetRid: \"ri.object-set.456\",\n objectSet: mockObjectSet2,\n });\n expect(cache.get(\"myObjectSet\")).toMatchObject({\n objectSetRid: \"ri.object-set.456\",\n objectSet: mockObjectSet2,\n });\n expect(hydrateObjectSetFromRid).toHaveBeenCalledTimes(2);\n expect(hydrateObjectSetFromRid).toHaveBeenLastCalledWith(\n client,\n expect.anything(),\n \"ri.object-set.456\",\n );\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { createAndFetchTempObjectSetRid } from "@osdk/client/internal";
|
|
18
|
-
import { defineConfig } from "@osdk/widget.client";
|
|
19
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
20
|
-
import { transformEmitEventPayload } from "./transformEmitEventPayload.js";
|
|
21
|
-
vi.mock("@osdk/client/internal", () => ({
|
|
22
|
-
createAndFetchTempObjectSetRid: vi.fn()
|
|
23
|
-
}));
|
|
24
|
-
describe("transformEmitEventPayload", () => {
|
|
25
|
-
const client = vi.fn();
|
|
26
|
-
const createMockObjectType = (rid = "ri.object-type.123") => ({
|
|
27
|
-
apiName: "MyObjectType",
|
|
28
|
-
type: "object",
|
|
29
|
-
internalDoNotUseMetadata: {
|
|
30
|
-
rid
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
const mockObjectSet = {};
|
|
34
|
-
beforeEach(() => {
|
|
35
|
-
vi.clearAllMocks();
|
|
36
|
-
});
|
|
37
|
-
it("should transform ObjectSet parameters and pass through others", async () => {
|
|
38
|
-
const config = defineConfig({
|
|
39
|
-
id: "testWidget",
|
|
40
|
-
name: "Test Widget",
|
|
41
|
-
type: "workshop",
|
|
42
|
-
parameters: {
|
|
43
|
-
myObjectSet: {
|
|
44
|
-
displayName: "My Object Set",
|
|
45
|
-
type: "objectSet",
|
|
46
|
-
allowedType: createMockObjectType()
|
|
47
|
-
},
|
|
48
|
-
myString: {
|
|
49
|
-
displayName: "My String",
|
|
50
|
-
type: "string"
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
events: {
|
|
54
|
-
updateMixed: {
|
|
55
|
-
displayName: "Update Mixed",
|
|
56
|
-
parameterUpdateIds: ["myObjectSet", "myString"]
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
vi.mocked(createAndFetchTempObjectSetRid).mockResolvedValue("ri.object-set.456");
|
|
61
|
-
const result = transformEmitEventPayload(config, "updateMixed", {
|
|
62
|
-
parameterUpdates: {
|
|
63
|
-
myObjectSet: mockObjectSet,
|
|
64
|
-
myString: "world"
|
|
65
|
-
}
|
|
66
|
-
}, client);
|
|
67
|
-
expect(result.type).toBe("async");
|
|
68
|
-
const resolved = await result.payload;
|
|
69
|
-
expect(resolved).toEqual({
|
|
70
|
-
parameterUpdates: {
|
|
71
|
-
myObjectSet: {
|
|
72
|
-
objectSetRid: "ri.object-set.456"
|
|
73
|
-
},
|
|
74
|
-
myString: "world"
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
it("should transform multiple ObjectSet parameters", async () => {
|
|
79
|
-
const config = defineConfig({
|
|
80
|
-
id: "testWidget",
|
|
81
|
-
name: "Test Widget",
|
|
82
|
-
type: "workshop",
|
|
83
|
-
parameters: {
|
|
84
|
-
objectSetA: {
|
|
85
|
-
displayName: "Object Set A",
|
|
86
|
-
type: "objectSet",
|
|
87
|
-
allowedType: createMockObjectType()
|
|
88
|
-
},
|
|
89
|
-
objectSetB: {
|
|
90
|
-
displayName: "Object Set B",
|
|
91
|
-
type: "objectSet",
|
|
92
|
-
allowedType: createMockObjectType()
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
events: {
|
|
96
|
-
updateBoth: {
|
|
97
|
-
displayName: "Update Both",
|
|
98
|
-
parameterUpdateIds: ["objectSetA", "objectSetB"]
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
vi.mocked(createAndFetchTempObjectSetRid).mockResolvedValueOnce("ri.object-set.aaa").mockResolvedValueOnce("ri.object-set.bbb");
|
|
103
|
-
const result = transformEmitEventPayload(config, "updateBoth", {
|
|
104
|
-
parameterUpdates: {
|
|
105
|
-
objectSetA: mockObjectSet,
|
|
106
|
-
objectSetB: mockObjectSet
|
|
107
|
-
}
|
|
108
|
-
}, client);
|
|
109
|
-
expect(result.type).toBe("async");
|
|
110
|
-
const resolved = await result.payload;
|
|
111
|
-
expect(createAndFetchTempObjectSetRid).toHaveBeenCalledTimes(2);
|
|
112
|
-
expect(resolved).toEqual({
|
|
113
|
-
parameterUpdates: {
|
|
114
|
-
objectSetA: {
|
|
115
|
-
objectSetRid: "ri.object-set.aaa"
|
|
116
|
-
},
|
|
117
|
-
objectSetB: {
|
|
118
|
-
objectSetRid: "ri.object-set.bbb"
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
it("should throw error when ObjectSet parameter used without client", async () => {
|
|
124
|
-
const config = defineConfig({
|
|
125
|
-
id: "testWidget",
|
|
126
|
-
name: "Test Widget",
|
|
127
|
-
type: "workshop",
|
|
128
|
-
parameters: {
|
|
129
|
-
myObjectSet: {
|
|
130
|
-
displayName: "My Object Set",
|
|
131
|
-
type: "objectSet",
|
|
132
|
-
allowedType: createMockObjectType()
|
|
133
|
-
}
|
|
134
|
-
},
|
|
135
|
-
events: {
|
|
136
|
-
updateObjectSet: {
|
|
137
|
-
displayName: "Update Object Set",
|
|
138
|
-
parameterUpdateIds: ["myObjectSet"]
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
const result = transformEmitEventPayload(config, "updateObjectSet", {
|
|
143
|
-
parameterUpdates: {
|
|
144
|
-
myObjectSet: mockObjectSet
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
expect(result.type).toBe("async");
|
|
148
|
-
await expect(result.payload).rejects.toThrow("Cannot emit event \"updateObjectSet\" with ObjectSet parameter \"myObjectSet\" without an osdk client");
|
|
149
|
-
});
|
|
150
|
-
it("should pass through all parameters when none are ObjectSet type", () => {
|
|
151
|
-
const config = defineConfig({
|
|
152
|
-
id: "testWidget",
|
|
153
|
-
name: "Test Widget",
|
|
154
|
-
type: "workshop",
|
|
155
|
-
parameters: {
|
|
156
|
-
myString: {
|
|
157
|
-
displayName: "My String",
|
|
158
|
-
type: "string"
|
|
159
|
-
},
|
|
160
|
-
myNumber: {
|
|
161
|
-
displayName: "My Number",
|
|
162
|
-
type: "number"
|
|
163
|
-
}
|
|
164
|
-
},
|
|
165
|
-
events: {
|
|
166
|
-
updatePrimitives: {
|
|
167
|
-
displayName: "Update Primitives",
|
|
168
|
-
parameterUpdateIds: ["myString", "myNumber"]
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
const result = transformEmitEventPayload(config, "updatePrimitives", {
|
|
173
|
-
parameterUpdates: {
|
|
174
|
-
myString: "hello",
|
|
175
|
-
myNumber: 42
|
|
176
|
-
}
|
|
177
|
-
}, client);
|
|
178
|
-
expect(result.type).toBe("passThrough");
|
|
179
|
-
expect(result.payload).toEqual({
|
|
180
|
-
parameterUpdates: {
|
|
181
|
-
myString: "hello",
|
|
182
|
-
myNumber: 42
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
expect(createAndFetchTempObjectSetRid).not.toHaveBeenCalled();
|
|
186
|
-
});
|
|
187
|
-
it("should throw error when eventId not found in config", async () => {
|
|
188
|
-
const config = defineConfig({
|
|
189
|
-
id: "testWidget",
|
|
190
|
-
name: "Test Widget",
|
|
191
|
-
type: "workshop",
|
|
192
|
-
parameters: {
|
|
193
|
-
myObjectSet: {
|
|
194
|
-
displayName: "My Object Set",
|
|
195
|
-
type: "objectSet",
|
|
196
|
-
allowedType: createMockObjectType()
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
events: {}
|
|
200
|
-
});
|
|
201
|
-
const result = transformEmitEventPayload(config, "nonExistentEvent", {
|
|
202
|
-
parameterUpdates: {
|
|
203
|
-
myObjectSet: mockObjectSet
|
|
204
|
-
}
|
|
205
|
-
}, client);
|
|
206
|
-
expect(result.type).toBe("async");
|
|
207
|
-
await expect(result.payload).rejects.toThrow("Event with ID \"nonExistentEvent\" not found in widget config");
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
//# sourceMappingURL=transformEmitEventPayload.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transformEmitEventPayload.test.js","names":["createAndFetchTempObjectSetRid","defineConfig","beforeEach","describe","expect","it","vi","transformEmitEventPayload","mock","fn","client","createMockObjectType","rid","apiName","type","internalDoNotUseMetadata","mockObjectSet","clearAllMocks","config","id","name","parameters","myObjectSet","displayName","allowedType","myString","events","updateMixed","parameterUpdateIds","mocked","mockResolvedValue","result","parameterUpdates","toBe","resolved","payload","toEqual","objectSetRid","objectSetA","objectSetB","updateBoth","mockResolvedValueOnce","toHaveBeenCalledTimes","updateObjectSet","rejects","toThrow","myNumber","updatePrimitives","not","toHaveBeenCalled"],"sources":["transformEmitEventPayload.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Client, ObjectSet } from \"@osdk/client\";\nimport { createAndFetchTempObjectSetRid } from \"@osdk/client/internal\";\nimport type { AllowedObjectSetParameterType } from \"@osdk/widget.api\";\nimport { defineConfig } from \"@osdk/widget.client\";\nimport type { Mock } from \"vitest\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { transformEmitEventPayload } from \"./transformEmitEventPayload.js\";\n\nvi.mock(\"@osdk/client/internal\", () => ({\n createAndFetchTempObjectSetRid: vi.fn(),\n}));\n\ndescribe(\"transformEmitEventPayload\", () => {\n const client = vi.fn() as Mock<Client> & Client;\n\n const createMockObjectType = (\n rid = \"ri.object-type.123\",\n ): AllowedObjectSetParameterType => ({\n apiName: \"MyObjectType\",\n type: \"object\",\n internalDoNotUseMetadata: { rid },\n });\n\n const mockObjectSet = {} as ObjectSet;\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"should transform ObjectSet parameters and pass through others\", async () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myObjectSet: {\n displayName: \"My Object Set\",\n type: \"objectSet\",\n allowedType: createMockObjectType(),\n },\n myString: {\n displayName: \"My String\",\n type: \"string\",\n },\n },\n events: {\n updateMixed: {\n displayName: \"Update Mixed\",\n parameterUpdateIds: [\"myObjectSet\", \"myString\"],\n },\n },\n });\n\n vi.mocked(createAndFetchTempObjectSetRid).mockResolvedValue(\n \"ri.object-set.456\",\n );\n\n const result = transformEmitEventPayload(\n config,\n \"updateMixed\",\n { parameterUpdates: { myObjectSet: mockObjectSet, myString: \"world\" } },\n client,\n );\n\n expect(result.type).toBe(\"async\");\n const resolved = await result.payload;\n expect(resolved).toEqual({\n parameterUpdates: {\n myObjectSet: { objectSetRid: \"ri.object-set.456\" },\n myString: \"world\",\n },\n });\n });\n\n it(\"should transform multiple ObjectSet parameters\", async () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n objectSetA: {\n displayName: \"Object Set A\",\n type: \"objectSet\",\n allowedType: createMockObjectType(),\n },\n objectSetB: {\n displayName: \"Object Set B\",\n type: \"objectSet\",\n allowedType: createMockObjectType(),\n },\n },\n events: {\n updateBoth: {\n displayName: \"Update Both\",\n parameterUpdateIds: [\"objectSetA\", \"objectSetB\"],\n },\n },\n });\n\n vi.mocked(createAndFetchTempObjectSetRid)\n .mockResolvedValueOnce(\"ri.object-set.aaa\")\n .mockResolvedValueOnce(\"ri.object-set.bbb\");\n\n const result = transformEmitEventPayload(\n config,\n \"updateBoth\",\n {\n parameterUpdates: {\n objectSetA: mockObjectSet,\n objectSetB: mockObjectSet,\n },\n },\n client,\n );\n\n expect(result.type).toBe(\"async\");\n const resolved = await result.payload;\n expect(createAndFetchTempObjectSetRid).toHaveBeenCalledTimes(2);\n expect(resolved).toEqual({\n parameterUpdates: {\n objectSetA: { objectSetRid: \"ri.object-set.aaa\" },\n objectSetB: { objectSetRid: \"ri.object-set.bbb\" },\n },\n });\n });\n\n it(\"should throw error when ObjectSet parameter used without client\", async () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myObjectSet: {\n displayName: \"My Object Set\",\n type: \"objectSet\",\n allowedType: createMockObjectType(),\n },\n },\n events: {\n updateObjectSet: {\n displayName: \"Update Object Set\",\n parameterUpdateIds: [\"myObjectSet\"],\n },\n },\n });\n\n const result = transformEmitEventPayload(config, \"updateObjectSet\", {\n parameterUpdates: { myObjectSet: mockObjectSet },\n });\n\n expect(result.type).toBe(\"async\");\n await expect(result.payload).rejects.toThrow(\n \"Cannot emit event \\\"updateObjectSet\\\" with ObjectSet parameter \\\"myObjectSet\\\" without an osdk client\",\n );\n });\n\n it(\"should pass through all parameters when none are ObjectSet type\", () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myString: {\n displayName: \"My String\",\n type: \"string\",\n },\n myNumber: {\n displayName: \"My Number\",\n type: \"number\",\n },\n },\n events: {\n updatePrimitives: {\n displayName: \"Update Primitives\",\n parameterUpdateIds: [\"myString\", \"myNumber\"],\n },\n },\n });\n\n const result = transformEmitEventPayload(\n config,\n \"updatePrimitives\",\n { parameterUpdates: { myString: \"hello\", myNumber: 42 } },\n client,\n );\n\n expect(result.type).toBe(\"passThrough\");\n expect(result.payload).toEqual({\n parameterUpdates: { myString: \"hello\", myNumber: 42 },\n });\n expect(createAndFetchTempObjectSetRid).not.toHaveBeenCalled();\n });\n\n it(\"should throw error when eventId not found in config\", async () => {\n const config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myObjectSet: {\n displayName: \"My Object Set\",\n type: \"objectSet\",\n allowedType: createMockObjectType(),\n },\n },\n events: {},\n });\n\n const result = transformEmitEventPayload(\n config,\n \"nonExistentEvent\" as never,\n { parameterUpdates: { myObjectSet: mockObjectSet } } as never,\n client,\n );\n\n expect(result.type).toBe(\"async\");\n await expect(result.payload).rejects.toThrow(\n \"Event with ID \\\"nonExistentEvent\\\" not found in widget config\",\n );\n });\n});\n"],"mappings":"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","ignoreList":[]}
|