@osdk/widget.client-react 3.4.0-beta.1 → 3.4.0-beta.10

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/build/browser/client.js +21 -2
  3. package/build/browser/client.js.map +1 -1
  4. package/build/browser/client.test.js +348 -0
  5. package/build/browser/client.test.js.map +1 -0
  6. package/build/browser/context.js +9 -0
  7. package/build/browser/context.js.map +1 -1
  8. package/build/browser/utils/transformEmitEventPayload.js +67 -0
  9. package/build/browser/utils/transformEmitEventPayload.js.map +1 -0
  10. package/build/browser/utils/transformEmitEventPayload.test.js +210 -0
  11. package/build/browser/utils/transformEmitEventPayload.test.js.map +1 -0
  12. package/build/cjs/index.cjs +60 -1
  13. package/build/cjs/index.cjs.map +1 -1
  14. package/build/cjs/index.d.cts +35 -3
  15. package/build/esm/client.js +21 -2
  16. package/build/esm/client.js.map +1 -1
  17. package/build/esm/client.test.js +348 -0
  18. package/build/esm/client.test.js.map +1 -0
  19. package/build/esm/context.js +9 -0
  20. package/build/esm/context.js.map +1 -1
  21. package/build/esm/utils/transformEmitEventPayload.js +67 -0
  22. package/build/esm/utils/transformEmitEventPayload.js.map +1 -0
  23. package/build/esm/utils/transformEmitEventPayload.test.js +210 -0
  24. package/build/esm/utils/transformEmitEventPayload.test.js.map +1 -0
  25. package/build/types/client.d.ts +1 -1
  26. package/build/types/client.d.ts.map +1 -1
  27. package/build/types/client.test.d.ts +3 -0
  28. package/build/types/client.test.d.ts.map +1 -0
  29. package/build/types/context.d.ts +38 -3
  30. package/build/types/context.d.ts.map +1 -1
  31. package/build/types/utils/transformEmitEventPayload.d.ts +41 -0
  32. package/build/types/utils/transformEmitEventPayload.d.ts.map +1 -0
  33. package/build/types/utils/transformEmitEventPayload.test.d.ts +1 -0
  34. package/build/types/utils/transformEmitEventPayload.test.d.ts.map +1 -0
  35. package/package.json +6 -5
@@ -0,0 +1,210 @@
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
+ objectType: 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
+ objectType: createMockObjectType()
88
+ },
89
+ objectSetB: {
90
+ displayName: "Object Set B",
91
+ type: "objectSet",
92
+ objectType: 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
+ objectType: 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
+ objectType: 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
@@ -0,0 +1 @@
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","objectType","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 { ObjectType } 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 = (rid = \"ri.object-type.123\"): ObjectType => ({\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 objectType: 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 objectType: createMockObjectType(),\n },\n objectSetB: {\n displayName: \"Object Set B\",\n type: \"objectSet\",\n objectType: 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 objectType: 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 objectType: 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":[]}
@@ -1,6 +1,6 @@
1
1
  import type { Client } from "@osdk/client";
2
2
  import type { ObjectType } from "@osdk/widget.api";
3
- import type { WidgetConfig } from "@osdk/widget.client";
3
+ import { type WidgetConfig } from "@osdk/widget.client";
4
4
  import React from "react";
5
5
  import type { ExtendedAsyncParameterValueMap } from "./context.js";
6
6
  type ExtractObjectTypes<C extends WidgetConfig<C["parameters"]>> = C["parameters"][keyof C["parameters"]] extends infer Param ? Param extends {
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAAc,cAAyB,cAAe;AACtD,cAAc,kBAAkB,kBAAmB;AACnD,cAGE,oBACK,qBAAsB;AAE7B,OAAO,WAA2C,OAAQ;AAC1D,cACE,sCAGK,cAAe;KAMjB,mBAAmB,UAAU,aAAa,EAAE,kBAC/C,EAAE,oBAAoB,EAAE,6BAA6B,QACjD,cAAc;CAAE,MAAM;CAAa,kBAAkB;AAAI,IACvD,WAAW,aAAa;KAK3B,uBAAuB,UAAU,aAAa,EAAE,kBACnD,mBAAmB,mBAAmB,QAAQ;KAE3C,eAAe,UAAU,aAAa,EAAE,kBAAkB;;;;CAI7D,QAAQ;AACT;KAEI,mBAAmB,UAAU,aAAa,EAAE,kBAC7C;CACA,UAAU,MAAM;;;;CAKhB,QAAQ;;;;;;CAOR,gBAAgB,+BAA+B;AAChD,IACC,QAAQ,eAAe,OACtB,uBAAuB,WAAW,OAAO,eAAe,KAAK,CAAE;;;;AAKpE,OAAO,cAAM,gBAAiB,UAAU,aAAa,EAAE,gBAAgB,EACrE,UACA,QACA,eACA,QAAQ,YACc,EAArB,mBAAmB,OAAK,MAAM,aAAa,mBAAmB","names":[],"sources":["../../src/client.tsx"],"version":3,"file":"client.d.ts"}
1
+ {"mappings":"AAgBA,cAAc,cAAyB,cAAe;AACtD,cAAc,kBAAkB,kBAAmB;AACnD,cAKO,oBACA,qBAAsB;AAC7B,OAAO,WAAwD,OAAQ;AACvE,cAEE,sCAGK,cAAe;KAOjB,mBAAmB,UAAU,aAAa,EAAE,kBAC/C,EAAE,oBAAoB,EAAE,6BAA6B,QACjD,cAAc;CAAE,MAAM;CAAa,kBAAkB;AAAI,IACvD,WAAW,aAAa;KAK3B,uBAAuB,UAAU,aAAa,EAAE,kBACnD,mBAAmB,mBAAmB,QAAQ;KAE3C,eAAe,UAAU,aAAa,EAAE,kBAAkB;;;;CAI7D,QAAQ;AACT;KAEI,mBAAmB,UAAU,aAAa,EAAE,kBAC7C;CACA,UAAU,MAAM;;;;CAKhB,QAAQ;;;;;;CAOR,gBAAgB,+BAA+B;AAChD,IACC,QAAQ,eAAe,OACtB,uBAAuB,WAAW,OAAO,eAAe,KAAK,CAAE;;;;AAKpE,OAAO,cAAM,gBAAiB,UAAU,aAAa,EAAE,gBAAgB,EACrE,UACA,QACA,eACA,QAAQ,YACc,EAArB,mBAAmB,OAAK,MAAM,aAAa,mBAAmB","names":[],"sources":["../../src/client.tsx"],"version":3,"file":"client.d.ts"}
@@ -0,0 +1,3 @@
1
+ declare global {
2
+ var IS_REACT_ACT_ENVIRONMENT: boolean;
3
+ }
@@ -0,0 +1 @@
1
+ {"mappings":"eAgBe;CACb,IAAIA;AACL","names":["IS_REACT_ACT_ENVIRONMENT: boolean"],"sources":["../../src/client.test.tsx"],"version":3,"file":"client.test.d.ts"}
@@ -1,9 +1,43 @@
1
1
  import type { ObjectSet } from "@osdk/client";
2
- import type { ObjectType } from "@osdk/widget.api";
3
- import { type AsyncParameterValueMap, type AsyncValue, FoundryHostEventTarget, type FoundryWidgetClient, type ParameterConfig, type ParameterValueMap, type WidgetConfig } from "@osdk/widget.client";
2
+ import type { EventId, EventParameterValueMap, ObjectType, WidgetMessage } from "@osdk/widget.api";
3
+ import { type AsyncParameterValueMap, type AsyncValue, FoundryHostEventTarget, type ParameterConfig, type ParameterValueMap, type WidgetConfig } from "@osdk/widget.client";
4
4
  import React from "react";
5
+ export type AugmentedEventParameterValueMap<
6
+ C extends WidgetConfig<C["parameters"]>,
7
+ K extends EventId<C>
8
+ > = { [P in keyof EventParameterValueMap<C, K>] : P extends keyof C["parameters"] ? C["parameters"][P] extends {
9
+ type: "objectSet"
10
+ objectType: infer T
11
+ } ? T extends ObjectType ? ObjectSet<T> : EventParameterValueMap<C, K>[P] : EventParameterValueMap<C, K>[P] : EventParameterValueMap<C, K>[P] };
12
+ type AugmentedEmitEventIdMap<C extends WidgetConfig<C["parameters"]>> = { [K in EventId<C>] : {
13
+ eventId: K
14
+ parameterUpdates: AugmentedEventParameterValueMap<C, K>
15
+ } };
16
+ interface AugmentedWidgetEmitEvent<C extends WidgetConfig<C["parameters"]>> extends Omit<WidgetMessage.EmitEvent<C>, "payload"> {
17
+ payload: AugmentedEmitEventIdMap<C>[EventId<C>];
18
+ }
19
+ /**
20
+ * Emits a widget event with parameter updates to the host Foundry UI.
21
+ *
22
+ * For object set parameters, pass `ObjectSet<T>` directly.
23
+ * If the same event is emitted multiple times in quick succession and involves Object Set parameters, only the last call will be sent.
24
+ * Errors (e.g., network failures when serializing ObjectSet parameters) are not surfaced to the caller.
25
+ */
26
+ export type AugmentedEmitEvent<C extends WidgetConfig<C["parameters"]>> = <
27
+ M extends AugmentedWidgetEmitEvent<C>,
28
+ ID extends M["payload"]["eventId"]
29
+ >(eventId: ID, payload: Omit<Extract<M["payload"], {
30
+ eventId: ID
31
+ }>, "eventId">) => void;
5
32
  export interface FoundryWidgetClientContext<C extends WidgetConfig<C["parameters"]>> {
6
- emitEvent: FoundryWidgetClient<C>["emitEvent"];
33
+ /**
34
+ * Emits a widget event with parameter updates to the host Foundry UI.
35
+ *
36
+ * - For ObjectSet parameters, pass `ObjectSet<T>` directly
37
+ * - If the same event is emitted multiple times rapidly and involves Object Set parameters, only the last call is sent
38
+ * - Errors are not surfaced to the caller
39
+ */
40
+ emitEvent: AugmentedEmitEvent<C>;
7
41
  hostEventTarget: FoundryHostEventTarget<C>;
8
42
  /**
9
43
  * Object where the individual parameters have their async state represented
@@ -39,3 +73,4 @@ export declare function useFoundryWidgetContext<C extends WidgetConfig<C["parame
39
73
  export declare namespace useFoundryWidgetContext {
40
74
  function withTypes<C extends WidgetConfig<C["parameters"]>>(): () => FoundryWidgetClientContext<C>;
41
75
  }
76
+ export {};
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAAc,iBAAiB,cAAe;AAC9C,cAAc,kBAAkB,kBAAmB;AACnD,cACO,6BACA,YACL,6BACK,0BACA,sBACA,wBACA,oBACA,qBAAsB;AAC7B,OAAO,WAA2B,OAAQ;AAE1C,iBAAiB,2BACf,UAAU,aAAa,EAAE,gBACzB;CACA,WAAW,oBAAoB,GAAG;CAClC,iBAAiB,uBAAuB;;;;CAKxC,sBAAsB,+BAA+B;;;;CAKrD,YAAY;EACV,QAAQ,QAAQ,0BAA0B;EAC1C,OAAO,WAAW,kBAAkB,IAAI;CACzC;AACF;AAED,YAAY,0BAA0B,UAAU,aAAa,EAAE,qBAE1D,WAAW,EAAE,iBAAgB,gBAAgB,kBAAkB,KAC5D,EAAE,cAAc,WAAW;CAAE,MAAM;CAAa,kBAAkB;AAAG,IACnE,UAAU,aACR,kBAAkB,GAAG,KAAK;CAAE,WAAW,UAAU;AAAI,IACvD,kBAAkB,GAAG,KACvB,kBAAkB,GAAG;AAI7B,YAAY,+BACV,UAAU,aAAa,EAAE,qBAExB,WAAW,EAAE,iBAAgB,gBAAgB,uBAAuB,KACjE,EAAE,cAAc,WAAW;CAAE,MAAM;CAAa,kBAAkB;AAAG,IACnE,UAAU,aAAa,uBAAuB,GAAG,KAAK;CACpD,OAAO,WACL,kBAAkB,GAAG,KAAK;EAAE,WAAW,UAAU;CAAI;AAExD,IACD,uBAAuB,GAAG,KAC5B,uBAAuB,GAAG;AAIhC,OAAO,cAAMA,sBAAsB,MAAM,QACvC,2BAA2B,aAAa;;;;AAgB1C,OAAO,iBAAS,wBACd,UAAU,aAAa,EAAE,mBAEkB,2BAA2B;AAGxE,yBAAiB;CACR,SAAS,UACd,UAAU,aAAa,EAAE,yBAChB,2BAA2B","names":["FoundryWidgetContext: React.Context<\n FoundryWidgetClientContext<WidgetConfig<ParameterConfig>>\n>"],"sources":["../../src/context.ts"],"version":3,"file":"context.d.ts"}
1
+ {"mappings":"AAgBA,cAAc,iBAAiB,cAAe;AAC9C,cACE,SACA,wBACA,YACA,qBACK,kBAAmB;AAC1B,cACO,6BACA,YACL,6BACK,sBACA,wBACA,oBACA,qBAAsB;AAC7B,OAAO,WAA2B,OAAQ;AAE1C,YAAY;CACV,UAAU,aAAa,EAAE;CACzB,UAAU,QAAQ;OAEjB,WAAW,uBAAuB,GAAG,MAAK,gBAAgB,EAAE,gBACzD,EAAE,cAAc,WAAW;CAAE,MAAM;CAAa,kBAAkB;AAAG,IACnE,UAAU,aAAa,UAAU,KACjC,uBAAuB,GAAG,GAAG,KAC/B,uBAAuB,GAAG,GAAG,KAC7B,uBAAuB,GAAG,GAAG;KAG9B,wBAAwB,UAAU,aAAa,EAAE,qBACnD,KAAK,QAAQ,MAAK;CACjB,SAAS;CACT,kBAAkB,gCAAgC,GAAG;AACtD;UAGO,yBAAyB,UAAU,aAAa,EAAE,wBAClD,KAAK,cAAc,UAAU,IAAI,WAC3C;CACE,SAAS,wBAAwB,GAAG,QAAQ;AAC7C;;;;;;;;AASD,YAAY,mBAAmB,UAAU,aAAa,EAAE;CACtD,UAAU,yBAAyB;CACnC,WAAW,EAAE,WAAW;EAExBA,SAAS,IACTC,SAAS,KAAK,QAAQ,EAAE,YAAY;CAAE,SAAS;AAAI,IAAG;AAGxD,iBAAiB,2BACf,UAAU,aAAa,EAAE,gBACzB;;;;;;;;CAQA,WAAW,mBAAmB;CAC9B,iBAAiB,uBAAuB;;;;CAKxC,sBAAsB,+BAA+B;;;;CAKrD,YAAY;EACV,QAAQ,QAAQ,0BAA0B;EAC1C,OAAO,WAAW,kBAAkB,IAAI;CACzC;AACF;AAED,YAAY,0BAA0B,UAAU,aAAa,EAAE,qBAE1D,WAAW,EAAE,iBAAgB,gBAAgB,kBAAkB,KAC5D,EAAE,cAAc,WAAW;CAAE,MAAM;CAAa,kBAAkB;AAAG,IACnE,UAAU,aACR,kBAAkB,GAAG,KAAK;CAAE,WAAW,UAAU;AAAI,IACvD,kBAAkB,GAAG,KACvB,kBAAkB,GAAG;AAI7B,YAAY,+BACV,UAAU,aAAa,EAAE,qBAExB,WAAW,EAAE,iBAAgB,gBAAgB,uBAAuB,KACjE,EAAE,cAAc,WAAW;CAAE,MAAM;CAAa,kBAAkB;AAAG,IACnE,UAAU,aAAa,uBAAuB,GAAG,KAAK;CACpD,OAAO,WACL,kBAAkB,GAAG,KAAK;EAAE,WAAW,UAAU;CAAI;AAExD,IACD,uBAAuB,GAAG,KAC5B,uBAAuB,GAAG;AAIhC,OAAO,cAAMC,sBAAsB,MAAM,QACvC,2BAA2B,aAAa;;;;AAgB1C,OAAO,iBAAS,wBACd,UAAU,aAAa,EAAE,mBACtB,2BAA2B;AAIhC,yBAAiB;CACR,SAAS,UACd,UAAU,aAAa,EAAE,yBAChB,2BAA2B","names":["eventId: ID","payload: Omit<Extract<M[\"payload\"], { eventId: ID }>, \"eventId\">","FoundryWidgetContext: React.Context<\n FoundryWidgetClientContext<WidgetConfig<ParameterConfig>>\n>"],"sources":["../../src/context.ts"],"version":3,"file":"context.d.ts"}
@@ -0,0 +1,41 @@
1
+ import type { Client } from "@osdk/client";
2
+ import type { EventId, EventParameterValueMap } from "@osdk/widget.api";
3
+ import type { WidgetConfig } from "@osdk/widget.client";
4
+ import type { AugmentedEventParameterValueMap } from "../context.js";
5
+ type TransformedEmitEventPayload<
6
+ C extends WidgetConfig<C["parameters"]>,
7
+ K extends EventId<C>
8
+ > = {
9
+ parameterUpdates: EventParameterValueMap<C, K>
10
+ };
11
+ type TransformedEmitEventPayloadResult<
12
+ C extends WidgetConfig<C["parameters"]>,
13
+ K extends EventId<C>
14
+ > = {
15
+ type: "async"
16
+ payload: Promise<TransformedEmitEventPayload<C, K>>
17
+ } | {
18
+ type: "passThrough"
19
+ payload: TransformedEmitEventPayload<C, K>
20
+ };
21
+ export declare function transformEmitEventPayload<
22
+ C extends WidgetConfig<C["parameters"]>,
23
+ K extends EventId<C>
24
+ >(config: C, eventId: K, payload: {
25
+ parameterUpdates: AugmentedEventParameterValueMap<C, K>
26
+ }, osdkClient?: Client): TransformedEmitEventPayloadResult<C, K>;
27
+ /**
28
+ * Transforms an augmented emit event payload by creating temporary object sets
29
+ * from ObjectSet instances.
30
+ *
31
+ * Multiple ObjectSet parameters are transformed in parallel for better performance.
32
+ */
33
+ export declare function transformEmitEventPayloadAsync<
34
+ C extends WidgetConfig<C["parameters"]>,
35
+ K extends EventId<C>
36
+ >(config: C, eventId: K, payload: {
37
+ parameterUpdates: AugmentedEventParameterValueMap<C, K>
38
+ }, osdkClient?: Client): Promise<{
39
+ parameterUpdates: EventParameterValueMap<C, K>
40
+ }>;
41
+ export {};
@@ -0,0 +1 @@
1
+ {"mappings":"AAgBA,cAAc,cAAyB,cAAe;AAEtD,cAEE,SACA,8BAEK,kBAAmB;AAC1B,cAAc,oBAAoB,qBAAsB;AACxD,cAAc,uCAAuC,eAAgB;KAKhE;CACH,UAAU,aAAa,EAAE;CACzB,UAAU,QAAQ;IAChB;CACF,kBAAkB,uBAAuB,GAAG;AAC7C;KAEI;CACH,UAAU,aAAa,EAAE;CACzB,UAAU,QAAQ;IAChB;CACF,MAAM;CACN,SAAS,QAAQ,4BAA4B,GAAG;AACjD,IAAG;CACF,MAAM;CACN,SAAS,4BAA4B,GAAG;AACzC;AAED,OAAO,iBAAS;CACd,UAAU,aAAa,EAAE;CACzB,UAAU,QAAQ;EAElBA,QAAQ,GACRC,SAAS,GACTC,SAAS;CAAE,kBAAkB,gCAAgC,GAAG;AAAI,GACpEC,aAAa,SACZ,kCAAkC,GAAG;;;;;;;AAkCxC,OAAO,iBAAe;CACpB,UAAU,aAAa,EAAE;CACzB,UAAU,QAAQ;EAElBH,QAAQ,GACRC,SAAS,GACTC,SAAS;CAAE,kBAAkB,gCAAgC,GAAG;AAAI,GACpEC,aAAa,SACZ,QAAQ;CAAE,kBAAkB,uBAAuB,GAAG;AAAI","names":["config: C","eventId: K","payload: { parameterUpdates: AugmentedEventParameterValueMap<C, K> }","osdkClient?: Client"],"sources":["../../../src/utils/transformEmitEventPayload.ts"],"version":3,"file":"transformEmitEventPayload.d.ts"}
@@ -0,0 +1 @@
1
+ {"mappings":"","names":[],"sources":["../../../src/utils/transformEmitEventPayload.test.ts"],"version":3,"file":"transformEmitEventPayload.test.d.ts"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osdk/widget.client-react",
3
- "version": "3.4.0-beta.1",
3
+ "version": "3.4.0-beta.10",
4
4
  "description": "Wrapper around @osdk/widget.client",
5
5
  "access": "public",
6
6
  "license": "Apache-2.0",
@@ -34,7 +34,7 @@
34
34
  "@types/react-dom": "^18 || ^19",
35
35
  "react": "^18 || ^19",
36
36
  "react-dom": "^18 || ^19",
37
- "@osdk/widget.client": "~3.4.0-beta.1"
37
+ "@osdk/widget.client": "~3.4.0-beta.10"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/react": "^18.3.24",
@@ -43,11 +43,11 @@
43
43
  "react-dom": "18.3.1",
44
44
  "ts-expect": "^1.3.0",
45
45
  "typescript": "~5.5.4",
46
+ "@osdk/client": "~2.7.0-beta.10",
46
47
  "@osdk/monorepo.api-extractor": "~0.6.0-beta.1",
47
- "@osdk/client": "~2.7.0-beta.1",
48
48
  "@osdk/monorepo.tsconfig": "~0.6.0-beta.1",
49
- "@osdk/widget.api": "~3.4.0-beta.1",
50
- "@osdk/widget.client": "~3.4.0-beta.1"
49
+ "@osdk/widget.api": "~3.4.0-beta.10",
50
+ "@osdk/widget.client": "~3.4.0-beta.10"
51
51
  },
52
52
  "publishConfig": {
53
53
  "access": "public"
@@ -73,6 +73,7 @@
73
73
  "clean": "rm -rf lib dist types build tsconfig.tsbuildinfo",
74
74
  "fix-lint": "eslint . --fix && dprint fmt --config $(find-up dprint.json)",
75
75
  "lint": "eslint . && dprint check --config $(find-up dprint.json)",
76
+ "test": "vitest run",
76
77
  "transpileBrowser": "monorepo.tool.transpile -f esm -m normal -t browser",
77
78
  "transpileCjs": "monorepo.tool.transpile -f cjs -m bundle -t node",
78
79
  "transpileEsm": "monorepo.tool.transpile -f esm -m normal -t node",