@osdk/widget.client-react 3.5.0-beta.2 → 3.5.0-beta.21

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 (36) hide show
  1. package/CHANGELOG.md +177 -0
  2. package/build/browser/client.js.map +1 -1
  3. package/build/browser/context.js.map +1 -1
  4. package/build/browser/utils/extendParametersWithObjectSets.js +1 -1
  5. package/build/browser/utils/extendParametersWithObjectSets.js.map +1 -1
  6. package/build/cjs/index.cjs +1 -1
  7. package/build/cjs/index.cjs.map +1 -1
  8. package/build/cjs/index.d.cts +9 -9
  9. package/build/esm/client.js.map +1 -1
  10. package/build/esm/context.js.map +1 -1
  11. package/build/esm/utils/extendParametersWithObjectSets.js +1 -1
  12. package/build/esm/utils/extendParametersWithObjectSets.js.map +1 -1
  13. package/build/types/client.d.ts +3 -3
  14. package/build/types/client.d.ts.map +1 -1
  15. package/build/types/context.d.ts +7 -7
  16. package/build/types/context.d.ts.map +1 -1
  17. package/build/types/utils/extendParametersWithObjectSets.d.ts.map +1 -1
  18. package/package.json +7 -7
  19. package/build/browser/client.test.js +0 -348
  20. package/build/browser/client.test.js.map +0 -1
  21. package/build/browser/utils/extendParametersWithObjectSets.test.js +0 -372
  22. package/build/browser/utils/extendParametersWithObjectSets.test.js.map +0 -1
  23. package/build/browser/utils/transformEmitEventPayload.test.js +0 -210
  24. package/build/browser/utils/transformEmitEventPayload.test.js.map +0 -1
  25. package/build/esm/client.test.js +0 -348
  26. package/build/esm/client.test.js.map +0 -1
  27. package/build/esm/utils/extendParametersWithObjectSets.test.js +0 -372
  28. package/build/esm/utils/extendParametersWithObjectSets.test.js.map +0 -1
  29. package/build/esm/utils/transformEmitEventPayload.test.js +0 -210
  30. package/build/esm/utils/transformEmitEventPayload.test.js.map +0 -1
  31. package/build/types/client.test.d.ts +0 -3
  32. package/build/types/client.test.d.ts.map +0 -1
  33. package/build/types/utils/extendParametersWithObjectSets.test.d.ts +0 -1
  34. package/build/types/utils/extendParametersWithObjectSets.test.d.ts.map +0 -1
  35. package/build/types/utils/transformEmitEventPayload.test.d.ts +0 -1
  36. package/build/types/utils/transformEmitEventPayload.test.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":["FoundryHostEventTarget","React","useContext","FoundryWidgetContext","createContext","emitEvent","hostEventTarget","asyncParameterValues","parameters","state","values","useFoundryWidgetContext","_useFoundryWidgetContext","withTypes"],"sources":["context.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 { ObjectSet } from \"@osdk/client\";\nimport type {\n EventId,\n EventParameterValueMap,\n ObjectType,\n WidgetMessage,\n} from \"@osdk/widget.api\";\nimport {\n type AsyncParameterValueMap,\n type AsyncValue,\n FoundryHostEventTarget,\n type ParameterConfig,\n type ParameterValueMap,\n type WidgetConfig,\n} from \"@osdk/widget.client\";\nimport React, { useContext } from \"react\";\n\nexport type AugmentedEventParameterValueMap<\n C extends WidgetConfig<C[\"parameters\"]>,\n K extends EventId<C>,\n> = {\n [P in keyof EventParameterValueMap<C, K>]: P extends keyof C[\"parameters\"]\n ? C[\"parameters\"][P] extends { type: \"objectSet\"; objectType: infer T }\n ? T extends ObjectType ? ObjectSet<T>\n : EventParameterValueMap<C, K>[P]\n : EventParameterValueMap<C, K>[P]\n : EventParameterValueMap<C, K>[P];\n};\n\ntype AugmentedEmitEventIdMap<C extends WidgetConfig<C[\"parameters\"]>> = {\n [K in EventId<C>]: {\n eventId: K;\n parameterUpdates: AugmentedEventParameterValueMap<C, K>;\n };\n};\n\ninterface AugmentedWidgetEmitEvent<C extends WidgetConfig<C[\"parameters\"]>>\n extends Omit<WidgetMessage.EmitEvent<C>, \"payload\">\n{\n payload: AugmentedEmitEventIdMap<C>[EventId<C>];\n}\n\n/**\n * Emits a widget event with parameter updates to the host Foundry UI.\n *\n * For object set parameters, pass `ObjectSet<T>` directly.\n * If the same event is emitted multiple times in quick succession and involves Object Set parameters, only the last call will be sent.\n * Errors (e.g., network failures when serializing ObjectSet parameters) are not surfaced to the caller.\n */\nexport type AugmentedEmitEvent<C extends WidgetConfig<C[\"parameters\"]>> = <\n M extends AugmentedWidgetEmitEvent<C>,\n ID extends M[\"payload\"][\"eventId\"],\n>(\n eventId: ID,\n payload: Omit<Extract<M[\"payload\"], { eventId: ID }>, \"eventId\">,\n) => void;\n\nexport interface FoundryWidgetClientContext<\n C extends WidgetConfig<C[\"parameters\"]>,\n> {\n /**\n * Emits a widget event with parameter updates to the host Foundry UI.\n *\n * - For ObjectSet parameters, pass `ObjectSet<T>` directly\n * - If the same event is emitted multiple times rapidly and involves Object Set parameters, only the last call is sent\n * - Errors are not surfaced to the caller\n */\n emitEvent: AugmentedEmitEvent<C>;\n hostEventTarget: FoundryHostEventTarget<C>;\n\n /**\n * Object where the individual parameters have their async state represented\n */\n asyncParameterValues: ExtendedAsyncParameterValueMap<C>;\n\n /**\n * Convenience object that aggregates the value of all parameters, accounting for their loading states\n */\n parameters: {\n values: Partial<ExtendedParameterValueMap<C>>;\n state: AsyncValue<ParameterValueMap<C>>[\"type\"];\n };\n}\n\nexport type ExtendedParameterValueMap<C extends WidgetConfig<C[\"parameters\"]>> =\n {\n [K in keyof C[\"parameters\"]]: K extends keyof ParameterValueMap<C>\n ? C[\"parameters\"][K] extends { type: \"objectSet\"; objectType: infer T }\n ? T extends ObjectType\n ? ParameterValueMap<C>[K] & { objectSet: ObjectSet<T> }\n : ParameterValueMap<C>[K]\n : ParameterValueMap<C>[K]\n : never;\n };\n\nexport type ExtendedAsyncParameterValueMap<\n C extends WidgetConfig<C[\"parameters\"]>,\n> = {\n [K in keyof C[\"parameters\"]]: K extends keyof AsyncParameterValueMap<C>\n ? C[\"parameters\"][K] extends { type: \"objectSet\"; objectType: infer T }\n ? T extends ObjectType ? AsyncParameterValueMap<C>[K] & {\n value: AsyncValue<\n ParameterValueMap<C>[K] & { objectSet: ObjectSet<T> }\n >;\n }\n : AsyncParameterValueMap<C>[K]\n : AsyncParameterValueMap<C>[K]\n : never;\n};\n\nexport const FoundryWidgetContext: React.Context<\n FoundryWidgetClientContext<WidgetConfig<ParameterConfig>>\n> = React.createContext<\n FoundryWidgetClientContext<WidgetConfig<ParameterConfig>>\n>({\n emitEvent: () => {},\n hostEventTarget: new FoundryHostEventTarget<WidgetConfig<ParameterConfig>>(),\n asyncParameterValues: {},\n parameters: {\n state: \"not-started\",\n values: {},\n },\n});\n\n/**\n * @returns The current FoundryWidgetClientContext, in the context of your specific parameter configuration\n */\nexport function useFoundryWidgetContext<\n C extends WidgetConfig<C[\"parameters\"]>,\n>(): FoundryWidgetClientContext<C> {\n return useContext(FoundryWidgetContext) as FoundryWidgetClientContext<C>;\n}\n\nexport namespace useFoundryWidgetContext {\n export function withTypes<\n C extends WidgetConfig<C[\"parameters\"]>,\n >(): () => FoundryWidgetClientContext<C> {\n return () => {\n return useFoundryWidgetContext<C>();\n };\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,SAGEA,sBAAsB,QAIjB,qBAAqB;AAC5B,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;;AA2BzC;AACA;AACA;AACA;AACA;AACA;AACA;;AA8DA,OAAO,MAAMC,oBAEZ,gBAAGF,KAAK,CAACG,aAAa,CAErB;EACAC,SAAS,EAAEA,CAAA,KAAM,CAAC,CAAC;EACnBC,eAAe,EAAE,IAAIN,sBAAsB,CAAgC,CAAC;EAC5EO,oBAAoB,EAAE,CAAC,CAAC;EACxBC,UAAU,EAAE;IACVC,KAAK,EAAE,aAAa;IACpBC,MAAM,EAAE,CAAC;EACX;AACF,CAAC,CAAC;;AAEF;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CAAA,EAEJ;EACjC,OAAOT,UAAU,CAACC,oBAAoB,CAAC;AACzC;AAAC,WAAAS,wBAAA;EAAAA,wBAAA,CAAAC,SAAA,GAGQ,YAEkC;IACvC,OAAO,MAAM;MACX,OAAOF,uBAAuB,CAAI,CAAC;IACrC,CAAC;EACH,CAAC;AAAA,GAPcA,uBAAuB,KAAvBA,uBAAuB","ignoreList":[]}
1
+ {"version":3,"file":"context.js","names":["FoundryHostEventTarget","React","useContext","FoundryWidgetContext","createContext","emitEvent","hostEventTarget","asyncParameterValues","parameters","state","values","useFoundryWidgetContext","_useFoundryWidgetContext","withTypes"],"sources":["context.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 { ObjectSet } from \"@osdk/client\";\nimport type {\n AllowedObjectSetParameterType,\n EventId,\n EventParameterValueMap,\n WidgetMessage,\n} from \"@osdk/widget.api\";\nimport {\n type AsyncParameterValueMap,\n type AsyncValue,\n FoundryHostEventTarget,\n type ParameterConfig,\n type ParameterValueMap,\n type WidgetConfig,\n} from \"@osdk/widget.client\";\nimport React, { useContext } from \"react\";\n\nexport type AugmentedEventParameterValueMap<\n C extends WidgetConfig<C[\"parameters\"]>,\n K extends EventId<C>,\n> = {\n [P in keyof EventParameterValueMap<C, K>]: P extends keyof C[\"parameters\"]\n ? C[\"parameters\"][P] extends { type: \"objectSet\"; allowedType: infer T }\n ? T extends AllowedObjectSetParameterType ? ObjectSet<T>\n : EventParameterValueMap<C, K>[P]\n : EventParameterValueMap<C, K>[P]\n : EventParameterValueMap<C, K>[P];\n};\n\ntype AugmentedEmitEventIdMap<C extends WidgetConfig<C[\"parameters\"]>> = {\n [K in EventId<C>]: {\n eventId: K;\n parameterUpdates: AugmentedEventParameterValueMap<C, K>;\n };\n};\n\ninterface AugmentedWidgetEmitEvent<C extends WidgetConfig<C[\"parameters\"]>>\n extends Omit<WidgetMessage.EmitEvent<C>, \"payload\">\n{\n payload: AugmentedEmitEventIdMap<C>[EventId<C>];\n}\n\n/**\n * Emits a widget event with parameter updates to the host Foundry UI.\n *\n * For object set parameters, pass `ObjectSet<T>` directly.\n * If the same event is emitted multiple times in quick succession and involves Object Set parameters, only the last call will be sent.\n * Errors (e.g., network failures when serializing ObjectSet parameters) are not surfaced to the caller.\n */\nexport type AugmentedEmitEvent<C extends WidgetConfig<C[\"parameters\"]>> = <\n M extends AugmentedWidgetEmitEvent<C>,\n ID extends M[\"payload\"][\"eventId\"],\n>(\n eventId: ID,\n payload: Omit<Extract<M[\"payload\"], { eventId: ID }>, \"eventId\">,\n) => void;\n\nexport interface FoundryWidgetClientContext<\n C extends WidgetConfig<C[\"parameters\"]>,\n> {\n /**\n * Emits a widget event with parameter updates to the host Foundry UI.\n *\n * - For ObjectSet parameters, pass `ObjectSet<T>` directly\n * - If the same event is emitted multiple times rapidly and involves Object Set parameters, only the last call is sent\n * - Errors are not surfaced to the caller\n */\n emitEvent: AugmentedEmitEvent<C>;\n hostEventTarget: FoundryHostEventTarget<C>;\n\n /**\n * Object where the individual parameters have their async state represented\n */\n asyncParameterValues: ExtendedAsyncParameterValueMap<C>;\n\n /**\n * Convenience object that aggregates the value of all parameters, accounting for their loading states\n */\n parameters: {\n values: Partial<ExtendedParameterValueMap<C>>;\n state: AsyncValue<ParameterValueMap<C>>[\"type\"];\n };\n}\n\nexport type ExtendedParameterValueMap<C extends WidgetConfig<C[\"parameters\"]>> =\n {\n [K in keyof C[\"parameters\"]]: K extends keyof ParameterValueMap<C>\n ? C[\"parameters\"][K] extends { type: \"objectSet\"; allowedType: infer T }\n ? T extends AllowedObjectSetParameterType\n ? ParameterValueMap<C>[K] & { objectSet: ObjectSet<T> }\n : ParameterValueMap<C>[K]\n : ParameterValueMap<C>[K]\n : never;\n };\n\nexport type ExtendedAsyncParameterValueMap<\n C extends WidgetConfig<C[\"parameters\"]>,\n> = {\n [K in keyof C[\"parameters\"]]: K extends keyof AsyncParameterValueMap<C>\n ? C[\"parameters\"][K] extends { type: \"objectSet\"; allowedType: infer T }\n ? T extends AllowedObjectSetParameterType\n ? AsyncParameterValueMap<C>[K] & {\n value: AsyncValue<\n ParameterValueMap<C>[K] & { objectSet: ObjectSet<T> }\n >;\n }\n : AsyncParameterValueMap<C>[K]\n : AsyncParameterValueMap<C>[K]\n : never;\n};\n\nexport const FoundryWidgetContext: React.Context<\n FoundryWidgetClientContext<WidgetConfig<ParameterConfig>>\n> = React.createContext<\n FoundryWidgetClientContext<WidgetConfig<ParameterConfig>>\n>({\n emitEvent: () => {},\n hostEventTarget: new FoundryHostEventTarget<WidgetConfig<ParameterConfig>>(),\n asyncParameterValues: {},\n parameters: {\n state: \"not-started\",\n values: {},\n },\n});\n\n/**\n * @returns The current FoundryWidgetClientContext, in the context of your specific parameter configuration\n */\nexport function useFoundryWidgetContext<\n C extends WidgetConfig<C[\"parameters\"]>,\n>(): FoundryWidgetClientContext<C> {\n return useContext(FoundryWidgetContext) as FoundryWidgetClientContext<C>;\n}\n\nexport namespace useFoundryWidgetContext {\n export function withTypes<\n C extends WidgetConfig<C[\"parameters\"]>,\n >(): () => FoundryWidgetClientContext<C> {\n return () => {\n return useFoundryWidgetContext<C>();\n };\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,SAGEA,sBAAsB,QAIjB,qBAAqB;AAC5B,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;;AA2BzC;AACA;AACA;AACA;AACA;AACA;AACA;;AA+DA,OAAO,MAAMC,oBAEZ,gBAAGF,KAAK,CAACG,aAAa,CAErB;EACAC,SAAS,EAAEA,CAAA,KAAM,CAAC,CAAC;EACnBC,eAAe,EAAE,IAAIN,sBAAsB,CAAgC,CAAC;EAC5EO,oBAAoB,EAAE,CAAC,CAAC;EACxBC,UAAU,EAAE;IACVC,KAAK,EAAE,aAAa;IACpBC,MAAM,EAAE,CAAC;EACX;AACF,CAAC,CAAC;;AAEF;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CAAA,EAEJ;EACjC,OAAOT,UAAU,CAACC,oBAAoB,CAAC;AACzC;AAAC,WAAAS,wBAAA;EAAAA,wBAAA,CAAAC,SAAA,GAGQ,YAEkC;IACvC,OAAO,MAAM;MACX,OAAOF,uBAAuB,CAAI,CAAC;IACrC,CAAC;EACH,CAAC;AAAA,GAPcA,uBAAuB,KAAvBA,uBAAuB","ignoreList":[]}
@@ -32,7 +32,7 @@ export function extendParametersWithObjectSets(osdkClient, config, parameters, c
32
32
  if (parameterValue != null) {
33
33
  if (typeof parameterValue === "object" && "objectSetRid" in parameterValue && typeof parameterValue.objectSetRid === "string") {
34
34
  const objectSetRid = parameterValue.objectSetRid;
35
- const objectSet = getOrHydrateObjectSet(osdkClient, cache, parameterId, objectSetRid, param.objectType);
35
+ const objectSet = getOrHydrateObjectSet(osdkClient, cache, parameterId, objectSetRid, param.allowedType);
36
36
  parameterValue.objectSet = objectSet;
37
37
  } else {
38
38
  throw new Error(`Invalid object set parameter value for parameter "${parameterId}"`);
@@ -1 +1 @@
1
- {"version":3,"file":"extendParametersWithObjectSets.js","names":["hydrateObjectSetFromRid","extendParametersWithObjectSets","osdkClient","config","parameters","cache","extendedParameters","parameterId","Object","keys","param","type","parameterValue","value","objectSetRid","objectSet","getOrHydrateObjectSet","objectType","Error","delete","paramKey","definition","cached","get","set"],"sources":["extendParametersWithObjectSets.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, ObjectTypeDefinition } from \"@osdk/client\";\nimport { hydrateObjectSetFromRid } from \"@osdk/client/internal\";\nimport type { AsyncParameterValueMap, WidgetConfig } from \"@osdk/widget.api\";\nimport type { ExtendedAsyncParameterValueMap } from \"../context.js\";\n\n/**\n * Patches parameter values with hydrated object sets for object set parameters.\n *\n * The cache is used to avoid redundant hydration of the same object set RID, which\n * can cause unnecessary re-renders in React components consuming the parameters.\n */\nexport function extendParametersWithObjectSets<\n C extends WidgetConfig<C[\"parameters\"]>,\n>(\n osdkClient: Client | undefined,\n config: C,\n parameters: AsyncParameterValueMap<C>,\n cache: Map<string, { objectSetRid: string; objectSet: ObjectSet }>,\n): ExtendedAsyncParameterValueMap<C> {\n const extendedParameters = {\n ...parameters,\n } as ExtendedAsyncParameterValueMap<C>;\n\n for (const parameterId of Object.keys(extendedParameters)) {\n const param = config.parameters[parameterId];\n if (\n param.type === \"objectSet\"\n && extendedParameters[parameterId].type === \"objectSet\"\n ) {\n const parameterValue = extendedParameters[parameterId].value.value;\n if (parameterValue != null) {\n if (\n typeof parameterValue === \"object\"\n && \"objectSetRid\" in parameterValue\n && typeof parameterValue.objectSetRid === \"string\"\n ) {\n const objectSetRid = parameterValue.objectSetRid;\n const objectSet = getOrHydrateObjectSet(\n osdkClient,\n cache,\n parameterId,\n objectSetRid,\n param.objectType as ObjectTypeDefinition,\n );\n (parameterValue as any).objectSet = objectSet;\n } else {\n throw new Error(\n `Invalid object set parameter value for parameter \"${parameterId}\"`,\n );\n }\n } else {\n cache.delete(parameterId);\n }\n }\n }\n\n return extendedParameters;\n}\n\nfunction getOrHydrateObjectSet<T extends ObjectTypeDefinition>(\n osdkClient: Client | undefined,\n cache: Map<string, { objectSetRid: string; objectSet: ObjectSet<T> }>,\n paramKey: string,\n objectSetRid: string,\n definition: T,\n) {\n if (osdkClient == null) {\n throw new Error(\"Not provided an OSDK client\");\n }\n const cached = cache.get(paramKey);\n if (cached?.objectSetRid === objectSetRid) {\n return cached.objectSet;\n }\n const objectSet = hydrateObjectSetFromRid(\n osdkClient,\n definition,\n objectSetRid,\n );\n cache.set(paramKey, { objectSetRid, objectSet });\n return objectSet;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,uBAAuB,QAAQ,uBAAuB;AAI/D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,8BAA8BA,CAG5CC,UAA8B,EAC9BC,MAAS,EACTC,UAAqC,EACrCC,KAAkE,EAC/B;EACnC,MAAMC,kBAAkB,GAAG;IACzB,GAAGF;EACL,CAAsC;EAEtC,KAAK,MAAMG,WAAW,IAAIC,MAAM,CAACC,IAAI,CAACH,kBAAkB,CAAC,EAAE;IACzD,MAAMI,KAAK,GAAGP,MAAM,CAACC,UAAU,CAACG,WAAW,CAAC;IAC5C,IACEG,KAAK,CAACC,IAAI,KAAK,WAAW,IACvBL,kBAAkB,CAACC,WAAW,CAAC,CAACI,IAAI,KAAK,WAAW,EACvD;MACA,MAAMC,cAAc,GAAGN,kBAAkB,CAACC,WAAW,CAAC,CAACM,KAAK,CAACA,KAAK;MAClE,IAAID,cAAc,IAAI,IAAI,EAAE;QAC1B,IACE,OAAOA,cAAc,KAAK,QAAQ,IAC/B,cAAc,IAAIA,cAAc,IAChC,OAAOA,cAAc,CAACE,YAAY,KAAK,QAAQ,EAClD;UACA,MAAMA,YAAY,GAAGF,cAAc,CAACE,YAAY;UAChD,MAAMC,SAAS,GAAGC,qBAAqB,CACrCd,UAAU,EACVG,KAAK,EACLE,WAAW,EACXO,YAAY,EACZJ,KAAK,CAACO,UACR,CAAC;UACAL,cAAc,CAASG,SAAS,GAAGA,SAAS;QAC/C,CAAC,MAAM;UACL,MAAM,IAAIG,KAAK,CACb,qDAAqDX,WAAW,GAClE,CAAC;QACH;MACF,CAAC,MAAM;QACLF,KAAK,CAACc,MAAM,CAACZ,WAAW,CAAC;MAC3B;IACF;EACF;EAEA,OAAOD,kBAAkB;AAC3B;AAEA,SAASU,qBAAqBA,CAC5Bd,UAA8B,EAC9BG,KAAqE,EACrEe,QAAgB,EAChBN,YAAoB,EACpBO,UAAa,EACb;EACA,IAAInB,UAAU,IAAI,IAAI,EAAE;IACtB,MAAM,IAAIgB,KAAK,CAAC,6BAA6B,CAAC;EAChD;EACA,MAAMI,MAAM,GAAGjB,KAAK,CAACkB,GAAG,CAACH,QAAQ,CAAC;EAClC,IAAIE,MAAM,EAAER,YAAY,KAAKA,YAAY,EAAE;IACzC,OAAOQ,MAAM,CAACP,SAAS;EACzB;EACA,MAAMA,SAAS,GAAGf,uBAAuB,CACvCE,UAAU,EACVmB,UAAU,EACVP,YACF,CAAC;EACDT,KAAK,CAACmB,GAAG,CAACJ,QAAQ,EAAE;IAAEN,YAAY;IAAEC;EAAU,CAAC,CAAC;EAChD,OAAOA,SAAS;AAClB","ignoreList":[]}
1
+ {"version":3,"file":"extendParametersWithObjectSets.js","names":["hydrateObjectSetFromRid","extendParametersWithObjectSets","osdkClient","config","parameters","cache","extendedParameters","parameterId","Object","keys","param","type","parameterValue","value","objectSetRid","objectSet","getOrHydrateObjectSet","allowedType","Error","delete","paramKey","definition","cached","get","set"],"sources":["extendParametersWithObjectSets.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 WidgetConfig,\n} from \"@osdk/widget.api\";\nimport type { ExtendedAsyncParameterValueMap } from \"../context.js\";\n\n/**\n * Patches parameter values with hydrated object sets for object set parameters.\n *\n * The cache is used to avoid redundant hydration of the same object set RID, which\n * can cause unnecessary re-renders in React components consuming the parameters.\n */\nexport function extendParametersWithObjectSets<\n C extends WidgetConfig<C[\"parameters\"]>,\n>(\n osdkClient: Client | undefined,\n config: C,\n parameters: AsyncParameterValueMap<C>,\n cache: Map<string, { objectSetRid: string; objectSet: ObjectSet }>,\n): ExtendedAsyncParameterValueMap<C> {\n const extendedParameters = {\n ...parameters,\n } as ExtendedAsyncParameterValueMap<C>;\n\n for (const parameterId of Object.keys(extendedParameters)) {\n const param = config.parameters[parameterId];\n if (\n param.type === \"objectSet\"\n && extendedParameters[parameterId].type === \"objectSet\"\n ) {\n const parameterValue = extendedParameters[parameterId].value.value;\n if (parameterValue != null) {\n if (\n typeof parameterValue === \"object\"\n && \"objectSetRid\" in parameterValue\n && typeof parameterValue.objectSetRid === \"string\"\n ) {\n const objectSetRid = parameterValue.objectSetRid;\n const objectSet = getOrHydrateObjectSet(\n osdkClient,\n cache,\n parameterId,\n objectSetRid,\n param.allowedType,\n );\n (parameterValue as any).objectSet = objectSet;\n } else {\n throw new Error(\n `Invalid object set parameter value for parameter \"${parameterId}\"`,\n );\n }\n } else {\n cache.delete(parameterId);\n }\n }\n }\n\n return extendedParameters;\n}\n\nfunction getOrHydrateObjectSet<T extends AllowedObjectSetParameterType>(\n osdkClient: Client | undefined,\n cache: Map<string, { objectSetRid: string; objectSet: ObjectSet<T> }>,\n paramKey: string,\n objectSetRid: string,\n definition: T,\n) {\n if (osdkClient == null) {\n throw new Error(\"Not provided an OSDK client\");\n }\n const cached = cache.get(paramKey);\n if (cached?.objectSetRid === objectSetRid) {\n return cached.objectSet;\n }\n const objectSet = hydrateObjectSetFromRid(\n osdkClient,\n definition,\n objectSetRid,\n );\n cache.set(paramKey, { objectSetRid, objectSet });\n return objectSet;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,uBAAuB,QAAQ,uBAAuB;AAQ/D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,8BAA8BA,CAG5CC,UAA8B,EAC9BC,MAAS,EACTC,UAAqC,EACrCC,KAAkE,EAC/B;EACnC,MAAMC,kBAAkB,GAAG;IACzB,GAAGF;EACL,CAAsC;EAEtC,KAAK,MAAMG,WAAW,IAAIC,MAAM,CAACC,IAAI,CAACH,kBAAkB,CAAC,EAAE;IACzD,MAAMI,KAAK,GAAGP,MAAM,CAACC,UAAU,CAACG,WAAW,CAAC;IAC5C,IACEG,KAAK,CAACC,IAAI,KAAK,WAAW,IACvBL,kBAAkB,CAACC,WAAW,CAAC,CAACI,IAAI,KAAK,WAAW,EACvD;MACA,MAAMC,cAAc,GAAGN,kBAAkB,CAACC,WAAW,CAAC,CAACM,KAAK,CAACA,KAAK;MAClE,IAAID,cAAc,IAAI,IAAI,EAAE;QAC1B,IACE,OAAOA,cAAc,KAAK,QAAQ,IAC/B,cAAc,IAAIA,cAAc,IAChC,OAAOA,cAAc,CAACE,YAAY,KAAK,QAAQ,EAClD;UACA,MAAMA,YAAY,GAAGF,cAAc,CAACE,YAAY;UAChD,MAAMC,SAAS,GAAGC,qBAAqB,CACrCd,UAAU,EACVG,KAAK,EACLE,WAAW,EACXO,YAAY,EACZJ,KAAK,CAACO,WACR,CAAC;UACAL,cAAc,CAASG,SAAS,GAAGA,SAAS;QAC/C,CAAC,MAAM;UACL,MAAM,IAAIG,KAAK,CACb,qDAAqDX,WAAW,GAClE,CAAC;QACH;MACF,CAAC,MAAM;QACLF,KAAK,CAACc,MAAM,CAACZ,WAAW,CAAC;MAC3B;IACF;EACF;EAEA,OAAOD,kBAAkB;AAC3B;AAEA,SAASU,qBAAqBA,CAC5Bd,UAA8B,EAC9BG,KAAqE,EACrEe,QAAgB,EAChBN,YAAoB,EACpBO,UAAa,EACb;EACA,IAAInB,UAAU,IAAI,IAAI,EAAE;IACtB,MAAM,IAAIgB,KAAK,CAAC,6BAA6B,CAAC;EAChD;EACA,MAAMI,MAAM,GAAGjB,KAAK,CAACkB,GAAG,CAACH,QAAQ,CAAC;EAClC,IAAIE,MAAM,EAAER,YAAY,KAAKA,YAAY,EAAE;IACzC,OAAOQ,MAAM,CAACP,SAAS;EACzB;EACA,MAAMA,SAAS,GAAGf,uBAAuB,CACvCE,UAAU,EACVmB,UAAU,EACVP,YACF,CAAC;EACDT,KAAK,CAACmB,GAAG,CAACJ,QAAQ,EAAE;IAAEN,YAAY;IAAEC;EAAU,CAAC,CAAC;EAChD,OAAOA,SAAS;AAClB","ignoreList":[]}
@@ -1,12 +1,12 @@
1
1
  import type { Client } from "@osdk/client";
2
- import type { ObjectType } from "@osdk/widget.api";
2
+ import type { AllowedObjectSetParameterType } from "@osdk/widget.api";
3
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 {
7
7
  type: "objectSet"
8
- objectType: infer OT
9
- } ? OT extends ObjectType ? OT : never : never : never;
8
+ allowedType: infer AT
9
+ } ? AT extends AllowedObjectSetParameterType ? AT : never : never : never;
10
10
  type HasObjectSetParameters<C extends WidgetConfig<C["parameters"]>> = ExtractObjectTypes<C> extends never ? false : true;
11
11
  type ObjectSetProps<C extends WidgetConfig<C["parameters"]>> = {
12
12
  /**
@@ -1 +1 @@
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"}
1
+ {"mappings":"AAgBA,cAAc,cAAyB,cAAe;AACtD,cAAc,qCAAqC,kBAAmB;AACtE,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,mBAAmB;AAAI,IACxD,WAAW,gCAAgC;KAK9C,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,5 +1,5 @@
1
1
  import type { ObjectSet } from "@osdk/client";
2
- import type { EventId, EventParameterValueMap, ObjectType, WidgetMessage } from "@osdk/widget.api";
2
+ import type { AllowedObjectSetParameterType, EventId, EventParameterValueMap, WidgetMessage } from "@osdk/widget.api";
3
3
  import { type AsyncParameterValueMap, type AsyncValue, FoundryHostEventTarget, type ParameterConfig, type ParameterValueMap, type WidgetConfig } from "@osdk/widget.client";
4
4
  import React from "react";
5
5
  export type AugmentedEventParameterValueMap<
@@ -7,8 +7,8 @@ export type AugmentedEventParameterValueMap<
7
7
  K extends EventId<C>
8
8
  > = { [P in keyof EventParameterValueMap<C, K>] : P extends keyof C["parameters"] ? C["parameters"][P] extends {
9
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] };
10
+ allowedType: infer T
11
+ } ? T extends AllowedObjectSetParameterType ? ObjectSet<T> : EventParameterValueMap<C, K>[P] : EventParameterValueMap<C, K>[P] : EventParameterValueMap<C, K>[P] };
12
12
  type AugmentedEmitEventIdMap<C extends WidgetConfig<C["parameters"]>> = { [K in EventId<C>] : {
13
13
  eventId: K
14
14
  parameterUpdates: AugmentedEventParameterValueMap<C, K>
@@ -53,14 +53,14 @@ export interface FoundryWidgetClientContext<C extends WidgetConfig<C["parameters
53
53
  }
54
54
  export type ExtendedParameterValueMap<C extends WidgetConfig<C["parameters"]>> = { [K in keyof C["parameters"]] : K extends keyof ParameterValueMap<C> ? C["parameters"][K] extends {
55
55
  type: "objectSet"
56
- objectType: infer T
57
- } ? T extends ObjectType ? ParameterValueMap<C>[K] & {
56
+ allowedType: infer T
57
+ } ? T extends AllowedObjectSetParameterType ? ParameterValueMap<C>[K] & {
58
58
  objectSet: ObjectSet<T>
59
59
  } : ParameterValueMap<C>[K] : ParameterValueMap<C>[K] : never };
60
60
  export type ExtendedAsyncParameterValueMap<C extends WidgetConfig<C["parameters"]>> = { [K in keyof C["parameters"]] : K extends keyof AsyncParameterValueMap<C> ? C["parameters"][K] extends {
61
61
  type: "objectSet"
62
- objectType: infer T
63
- } ? T extends ObjectType ? AsyncParameterValueMap<C>[K] & {
62
+ allowedType: infer T
63
+ } ? T extends AllowedObjectSetParameterType ? AsyncParameterValueMap<C>[K] & {
64
64
  value: AsyncValue<ParameterValueMap<C>[K] & {
65
65
  objectSet: ObjectSet<T>
66
66
  }>
@@ -1 +1 @@
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"}
1
+ {"mappings":"AAgBA,cAAc,iBAAiB,cAAe;AAC9C,cACE,+BACA,SACA,wBACA,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,mBAAmB;AAAG,IACpE,UAAU,gCAAgC,UAAU,KACpD,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,mBAAmB;AAAG,IACpE,UAAU,gCACR,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,mBAAmB;AAAG,IACpE,UAAU,gCACR,uBAAuB,GAAG,KAAK;CAC/B,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"}
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAAc,QAAQ,iBAAuC,cAAe;AAE5E,cAAc,wBAAwB,oBAAoB,kBAAmB;AAC7E,cAAc,sCAAsC,eAAgB;;;;;;;AAQpE,OAAO,iBAAS,+BACd,UAAU,aAAa,EAAE,gBAEzBA,YAAY,oBACZC,QAAQ,GACRC,YAAY,uBAAuB,IACnCC,OAAO,YAAY;CAAE;CAAsB,WAAW;AAAW,KAChE,+BAA+B","names":["osdkClient: Client | undefined","config: C","parameters: AsyncParameterValueMap<C>","cache: Map<string, { objectSetRid: string; objectSet: ObjectSet }>"],"sources":["../../../src/utils/extendParametersWithObjectSets.ts"],"version":3,"file":"extendParametersWithObjectSets.d.ts"}
1
+ {"mappings":"AAgBA,cAAc,QAAQ,iBAAiB,cAAe;AAEtD,cAEE,wBACA,oBACK,kBAAmB;AAC1B,cAAc,sCAAsC,eAAgB;;;;;;;AAQpE,OAAO,iBAAS,+BACd,UAAU,aAAa,EAAE,gBAEzBA,YAAY,oBACZC,QAAQ,GACRC,YAAY,uBAAuB,IACnCC,OAAO,YAAY;CAAE;CAAsB,WAAW;AAAW,KAChE,+BAA+B","names":["osdkClient: Client | undefined","config: C","parameters: AsyncParameterValueMap<C>","cache: Map<string, { objectSetRid: string; objectSet: ObjectSet }>"],"sources":["../../../src/utils/extendParametersWithObjectSets.ts"],"version":3,"file":"extendParametersWithObjectSets.d.ts"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osdk/widget.client-react",
3
- "version": "3.5.0-beta.2",
3
+ "version": "3.5.0-beta.21",
4
4
  "description": "Wrapper around @osdk/widget.client",
5
5
  "access": "public",
6
6
  "license": "Apache-2.0",
@@ -29,12 +29,12 @@
29
29
  }
30
30
  },
31
31
  "peerDependencies": {
32
- "@osdk/client": "^2",
33
32
  "@types/react": "^18 || ^19",
34
33
  "@types/react-dom": "^18 || ^19",
35
34
  "react": "^18 || ^19",
36
35
  "react-dom": "^18 || ^19",
37
- "@osdk/widget.client": "~3.5.0-beta.2"
36
+ "@osdk/widget.client": "~3.5.0-beta.21",
37
+ "@osdk/client": "~2.8.0-beta.21"
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.8.0-beta.2",
47
- "@osdk/monorepo.tsconfig": "~0.7.0-beta.1",
48
46
  "@osdk/monorepo.api-extractor": "~0.7.0-beta.1",
49
- "@osdk/widget.api": "~3.5.0-beta.2",
50
- "@osdk/widget.client": "~3.5.0-beta.2"
47
+ "@osdk/client": "~2.8.0-beta.21",
48
+ "@osdk/monorepo.tsconfig": "~0.7.0-beta.1",
49
+ "@osdk/widget.api": "~3.5.0-beta.21",
50
+ "@osdk/widget.client": "~3.5.0-beta.21"
51
51
  },
52
52
  "publishConfig": {
53
53
  "access": "public"
@@ -1,348 +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
- globalThis.IS_REACT_ACT_ENVIRONMENT = true;
18
- import { defineConfig, FoundryHostEventTarget } from "@osdk/widget.client";
19
- import { act } from "react";
20
- import { createRoot } from "react-dom/client";
21
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
22
- import { FoundryWidget } from "./client.js";
23
- import { useFoundryWidgetContext } from "./context.js";
24
- import { transformEmitEventPayload } from "./utils/transformEmitEventPayload.js";
25
-
26
- // Mocks
27
- const mockEmitEvent = vi.fn();
28
- const mockWidgetClient = {
29
- subscribe: vi.fn(),
30
- unsubscribe: vi.fn(),
31
- ready: vi.fn(),
32
- resize: vi.fn(),
33
- emitEvent: mockEmitEvent,
34
- hostEventTarget: new FoundryHostEventTarget()
35
- };
36
- vi.mock("./utils/transformEmitEventPayload.js", () => ({
37
- transformEmitEventPayload: vi.fn()
38
- }));
39
- vi.mock("@osdk/widget.client", async () => {
40
- const actual = await vi.importActual("@osdk/widget.client");
41
- return {
42
- ...actual,
43
- createFoundryWidgetClient: vi.fn(() => mockWidgetClient)
44
- };
45
- });
46
-
47
- // Test config
48
- const config = defineConfig({
49
- id: "testWidget",
50
- name: "Test Widget",
51
- type: "workshop",
52
- parameters: {
53
- myParam: {
54
- displayName: "My Param",
55
- type: "string"
56
- }
57
- },
58
- events: {
59
- eventA: {
60
- displayName: "Event A",
61
- parameterUpdateIds: ["myParam"]
62
- },
63
- eventB: {
64
- displayName: "Event B",
65
- parameterUpdateIds: ["myParam"]
66
- }
67
- }
68
- });
69
- describe("FoundryWidget emitEvent race condition handling", () => {
70
- const client = vi.fn();
71
- let container;
72
- let root;
73
- function EmitEventCapture({
74
- emitEventRef
75
- }) {
76
- const context = useFoundryWidgetContext();
77
- emitEventRef.current = context.emitEvent;
78
- return null;
79
- }
80
- const mountWidget = async () => {
81
- container = document.createElement("div");
82
- document.body.appendChild(container);
83
- root = createRoot(container);
84
- const emitEventRef = {
85
- current: null
86
- };
87
- act(() => {
88
- root.render(/*#__PURE__*/React.createElement(FoundryWidget, {
89
- config: config,
90
- client: client
91
- }, /*#__PURE__*/React.createElement(EmitEventCapture, {
92
- emitEventRef: emitEventRef
93
- })));
94
- });
95
- await act(async () => {
96
- await vi.runAllTimersAsync();
97
- });
98
- return emitEventRef.current;
99
- };
100
- const unmountWidget = () => {
101
- act(() => {
102
- root.unmount();
103
- });
104
- document.body.removeChild(container);
105
- };
106
- const createDeferredTransformMock = () => {
107
- const pending = [];
108
- vi.mocked(transformEmitEventPayload).mockImplementation((_config, _eventId, payload) => ({
109
- type: "async",
110
- payload: new Promise(resolve => {
111
- pending.push({
112
- payload: payload,
113
- resolve: resolve
114
- });
115
- })
116
- }));
117
- return {
118
- get pendingCount() {
119
- return pending.length;
120
- },
121
- resolveAll() {
122
- pending.forEach(({
123
- payload,
124
- resolve
125
- }) => resolve(payload));
126
- },
127
- resolveNext() {
128
- const next = pending.shift();
129
- if (next) next.resolve(next.payload);
130
- },
131
- resolveAtIndex(index) {
132
- const item = pending[index];
133
- if (item) {
134
- pending.splice(index, 1);
135
- item.resolve(item.payload);
136
- }
137
- }
138
- };
139
- };
140
- beforeEach(() => {
141
- vi.clearAllMocks();
142
- vi.useFakeTimers();
143
- mockWidgetClient.hostEventTarget = new FoundryHostEventTarget();
144
- });
145
- afterEach(() => {
146
- unmountWidget();
147
- vi.useRealTimers();
148
- });
149
- it("should emit both events when different events are called", async () => {
150
- const deferred = createDeferredTransformMock();
151
- const emit = await mountWidget();
152
- act(() => {
153
- emit("eventA", {
154
- parameterUpdates: {
155
- myParam: "valueA"
156
- }
157
- });
158
- emit("eventB", {
159
- parameterUpdates: {
160
- myParam: "valueB"
161
- }
162
- });
163
- });
164
- expect(deferred.pendingCount).toBe(2);
165
- await act(async () => {
166
- deferred.resolveAll();
167
- await vi.runAllTimersAsync();
168
- });
169
-
170
- // Both events should be emitted
171
- expect(mockEmitEvent).toHaveBeenCalledTimes(2);
172
- expect(mockEmitEvent).toHaveBeenCalledWith("eventA", {
173
- parameterUpdates: {
174
- myParam: "valueA"
175
- }
176
- });
177
- expect(mockEmitEvent).toHaveBeenCalledWith("eventB", {
178
- parameterUpdates: {
179
- myParam: "valueB"
180
- }
181
- });
182
- });
183
- it("should only emit the last call even when transforms resolve out of order", async () => {
184
- const deferred = createDeferredTransformMock();
185
- const emit = await mountWidget();
186
-
187
- // Call emitEvent 3 times rapidly
188
- act(() => {
189
- emit("eventA", {
190
- parameterUpdates: {
191
- myParam: "first"
192
- }
193
- });
194
- emit("eventA", {
195
- parameterUpdates: {
196
- myParam: "second"
197
- }
198
- });
199
- emit("eventA", {
200
- parameterUpdates: {
201
- myParam: "third"
202
- }
203
- });
204
- });
205
- expect(deferred.pendingCount).toBe(3);
206
-
207
- // Resolve in different order: second first, then third, then first
208
- // This proves only the last *call* emits, not just the last to resolve
209
- await act(async () => {
210
- deferred.resolveAtIndex(1); // "second" resolves first - should not emit
211
- await vi.runAllTimersAsync();
212
- });
213
-
214
- // No emit yet since "second" wasn't the last call
215
- expect(mockEmitEvent).toHaveBeenCalledTimes(0);
216
- await act(async () => {
217
- deferred.resolveAtIndex(1); // "third" resolves second (now at index 1)
218
- await vi.runAllTimersAsync();
219
- });
220
-
221
- // Now "third" should emit because it was the last call
222
- expect(mockEmitEvent).toHaveBeenCalledTimes(1);
223
- expect(mockEmitEvent).toHaveBeenCalledWith("eventA", {
224
- parameterUpdates: {
225
- myParam: "third"
226
- }
227
- });
228
- await act(async () => {
229
- deferred.resolveAtIndex(0); // "first" resolves last - should not emit
230
- await vi.runAllTimersAsync();
231
- });
232
-
233
- // Still only one emit - all stale calls are ignored
234
- expect(mockEmitEvent).toHaveBeenCalledTimes(1);
235
- });
236
- it("should emit all calls when they complete sequentially", async () => {
237
- const deferred = createDeferredTransformMock();
238
- const emit = await mountWidget();
239
-
240
- // First call
241
- act(() => {
242
- emit("eventA", {
243
- parameterUpdates: {
244
- myParam: "first"
245
- }
246
- });
247
- });
248
-
249
- // Complete first call before making second
250
- await act(async () => {
251
- deferred.resolveNext();
252
- await vi.runAllTimersAsync();
253
- });
254
- expect(mockEmitEvent).toHaveBeenCalledTimes(1);
255
- expect(mockEmitEvent).toHaveBeenLastCalledWith("eventA", {
256
- parameterUpdates: {
257
- myParam: "first"
258
- }
259
- });
260
-
261
- // Second call after first completed
262
- act(() => {
263
- emit("eventA", {
264
- parameterUpdates: {
265
- myParam: "second"
266
- }
267
- });
268
- });
269
- await act(async () => {
270
- deferred.resolveNext();
271
- await vi.runAllTimersAsync();
272
- });
273
-
274
- // Both sequential calls should be emitted
275
- expect(mockEmitEvent).toHaveBeenCalledTimes(2);
276
- expect(mockEmitEvent).toHaveBeenLastCalledWith("eventA", {
277
- parameterUpdates: {
278
- myParam: "second"
279
- }
280
- });
281
- });
282
- it("should emit all rapid calls synchronously when passThrough type is returned", async () => {
283
- // Mock transformEmitEventPayload to return passThrough (synchronous) results
284
- vi.mocked(transformEmitEventPayload).mockImplementation((_config, _eventId, payload) => ({
285
- type: "passThrough",
286
- payload: payload
287
- }));
288
- const emit = await mountWidget();
289
-
290
- // Emit 5 events rapidly - all should go through synchronously
291
- act(() => {
292
- emit("eventA", {
293
- parameterUpdates: {
294
- myParam: "first"
295
- }
296
- });
297
- emit("eventA", {
298
- parameterUpdates: {
299
- myParam: "second"
300
- }
301
- });
302
- emit("eventA", {
303
- parameterUpdates: {
304
- myParam: "third"
305
- }
306
- });
307
- emit("eventA", {
308
- parameterUpdates: {
309
- myParam: "fourth"
310
- }
311
- });
312
- emit("eventA", {
313
- parameterUpdates: {
314
- myParam: "fifth"
315
- }
316
- });
317
- });
318
-
319
- // All 5 should be emitted immediately without waiting for any async operations
320
- expect(mockEmitEvent).toHaveBeenCalledTimes(5);
321
- expect(mockEmitEvent).toHaveBeenNthCalledWith(1, "eventA", {
322
- parameterUpdates: {
323
- myParam: "first"
324
- }
325
- });
326
- expect(mockEmitEvent).toHaveBeenNthCalledWith(2, "eventA", {
327
- parameterUpdates: {
328
- myParam: "second"
329
- }
330
- });
331
- expect(mockEmitEvent).toHaveBeenNthCalledWith(3, "eventA", {
332
- parameterUpdates: {
333
- myParam: "third"
334
- }
335
- });
336
- expect(mockEmitEvent).toHaveBeenNthCalledWith(4, "eventA", {
337
- parameterUpdates: {
338
- myParam: "fourth"
339
- }
340
- });
341
- expect(mockEmitEvent).toHaveBeenNthCalledWith(5, "eventA", {
342
- parameterUpdates: {
343
- myParam: "fifth"
344
- }
345
- });
346
- });
347
- });
348
- //# sourceMappingURL=client.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.js","names":["globalThis","IS_REACT_ACT_ENVIRONMENT","defineConfig","FoundryHostEventTarget","act","createRoot","afterEach","beforeEach","describe","expect","it","vi","FoundryWidget","useFoundryWidgetContext","transformEmitEventPayload","mockEmitEvent","fn","mockWidgetClient","subscribe","unsubscribe","ready","resize","emitEvent","hostEventTarget","mock","actual","importActual","createFoundryWidgetClient","config","id","name","type","parameters","myParam","displayName","events","eventA","parameterUpdateIds","eventB","client","container","root","EmitEventCapture","emitEventRef","context","current","mountWidget","document","createElement","body","appendChild","render","React","runAllTimersAsync","unmountWidget","unmount","removeChild","createDeferredTransformMock","pending","mocked","mockImplementation","_config","_eventId","payload","Promise","resolve","push","pendingCount","length","resolveAll","forEach","resolveNext","next","shift","resolveAtIndex","index","item","splice","clearAllMocks","useFakeTimers","useRealTimers","deferred","emit","parameterUpdates","toBe","toHaveBeenCalledTimes","toHaveBeenCalledWith","toHaveBeenLastCalledWith","toHaveBeenNthCalledWith"],"sources":["client.test.tsx"],"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\ndeclare global {\n var IS_REACT_ACT_ENVIRONMENT: boolean;\n}\nglobalThis.IS_REACT_ACT_ENVIRONMENT = true;\n\nimport type { Client } from \"@osdk/client\";\nimport { defineConfig, FoundryHostEventTarget } from \"@osdk/widget.client\";\nimport { act } from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport type { Mock } from \"vitest\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { FoundryWidget } from \"./client.js\";\nimport { useFoundryWidgetContext } from \"./context.js\";\nimport { transformEmitEventPayload } from \"./utils/transformEmitEventPayload.js\";\n\n// Mocks\nconst mockEmitEvent = vi.fn();\nconst mockWidgetClient = {\n subscribe: vi.fn(),\n unsubscribe: vi.fn(),\n ready: vi.fn(),\n resize: vi.fn(),\n emitEvent: mockEmitEvent,\n hostEventTarget: new FoundryHostEventTarget(),\n};\n\nvi.mock(\"./utils/transformEmitEventPayload.js\", () => ({\n transformEmitEventPayload: vi.fn(),\n}));\n\nvi.mock(\"@osdk/widget.client\", async () => {\n const actual = await vi.importActual(\"@osdk/widget.client\");\n return {\n ...actual,\n createFoundryWidgetClient: vi.fn(() => mockWidgetClient),\n };\n});\n\n// Test config\nconst config = defineConfig({\n id: \"testWidget\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {\n myParam: {\n displayName: \"My Param\",\n type: \"string\",\n },\n },\n events: {\n eventA: {\n displayName: \"Event A\",\n parameterUpdateIds: [\"myParam\"],\n },\n eventB: {\n displayName: \"Event B\",\n parameterUpdateIds: [\"myParam\"],\n },\n },\n});\n\ndescribe(\"FoundryWidget emitEvent race condition handling\", () => {\n type EmitEventFn = (eventId: string, payload: unknown) => void;\n\n const client = vi.fn() as Mock<Client> & Client;\n let container: HTMLDivElement;\n let root: Root;\n\n function EmitEventCapture(\n { emitEventRef }: { emitEventRef: { current: EmitEventFn } },\n ) {\n const context = useFoundryWidgetContext<typeof config>();\n emitEventRef.current = context.emitEvent as EmitEventFn;\n return null;\n }\n\n const mountWidget = async () => {\n container = document.createElement(\"div\");\n document.body.appendChild(container);\n root = createRoot(container);\n\n const emitEventRef = { current: null as unknown as EmitEventFn };\n\n act(() => {\n root.render(\n <FoundryWidget config={config} client={client}>\n <EmitEventCapture emitEventRef={emitEventRef} />\n </FoundryWidget>,\n );\n });\n\n await act(async () => {\n await vi.runAllTimersAsync();\n });\n\n return emitEventRef.current;\n };\n\n const unmountWidget = () => {\n act(() => {\n root.unmount();\n });\n document.body.removeChild(container);\n };\n\n const createDeferredTransformMock = () => {\n const pending: Array<{\n payload: { parameterUpdates: { myParam: string } };\n resolve: (value: { parameterUpdates: { myParam: string } }) => void;\n }> = [];\n\n vi.mocked(transformEmitEventPayload).mockImplementation(\n (_config, _eventId, payload) => ({\n type: \"async\" as const,\n payload: new Promise((resolve) => {\n pending.push({\n payload: payload as { parameterUpdates: { myParam: string } },\n resolve: resolve as (\n value: { parameterUpdates: { myParam: string } },\n ) => void,\n });\n }),\n }),\n );\n\n return {\n get pendingCount() {\n return pending.length;\n },\n resolveAll() {\n pending.forEach(({ payload, resolve }) => resolve(payload));\n },\n resolveNext() {\n const next = pending.shift();\n if (next) next.resolve(next.payload);\n },\n resolveAtIndex(index: number) {\n const item = pending[index];\n if (item) {\n pending.splice(index, 1);\n item.resolve(item.payload);\n }\n },\n };\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n vi.useFakeTimers();\n mockWidgetClient.hostEventTarget = new FoundryHostEventTarget();\n });\n\n afterEach(() => {\n unmountWidget();\n vi.useRealTimers();\n });\n\n it(\"should emit both events when different events are called\", async () => {\n const deferred = createDeferredTransformMock();\n const emit = await mountWidget();\n\n act(() => {\n emit(\"eventA\", { parameterUpdates: { myParam: \"valueA\" } });\n emit(\"eventB\", { parameterUpdates: { myParam: \"valueB\" } });\n });\n\n expect(deferred.pendingCount).toBe(2);\n\n await act(async () => {\n deferred.resolveAll();\n await vi.runAllTimersAsync();\n });\n\n // Both events should be emitted\n expect(mockEmitEvent).toHaveBeenCalledTimes(2);\n expect(mockEmitEvent).toHaveBeenCalledWith(\"eventA\", {\n parameterUpdates: { myParam: \"valueA\" },\n });\n expect(mockEmitEvent).toHaveBeenCalledWith(\"eventB\", {\n parameterUpdates: { myParam: \"valueB\" },\n });\n });\n\n it(\"should only emit the last call even when transforms resolve out of order\", async () => {\n const deferred = createDeferredTransformMock();\n const emit = await mountWidget();\n\n // Call emitEvent 3 times rapidly\n act(() => {\n emit(\"eventA\", { parameterUpdates: { myParam: \"first\" } });\n emit(\"eventA\", { parameterUpdates: { myParam: \"second\" } });\n emit(\"eventA\", { parameterUpdates: { myParam: \"third\" } });\n });\n\n expect(deferred.pendingCount).toBe(3);\n\n // Resolve in different order: second first, then third, then first\n // This proves only the last *call* emits, not just the last to resolve\n await act(async () => {\n deferred.resolveAtIndex(1); // \"second\" resolves first - should not emit\n await vi.runAllTimersAsync();\n });\n\n // No emit yet since \"second\" wasn't the last call\n expect(mockEmitEvent).toHaveBeenCalledTimes(0);\n\n await act(async () => {\n deferred.resolveAtIndex(1); // \"third\" resolves second (now at index 1)\n await vi.runAllTimersAsync();\n });\n\n // Now \"third\" should emit because it was the last call\n expect(mockEmitEvent).toHaveBeenCalledTimes(1);\n expect(mockEmitEvent).toHaveBeenCalledWith(\"eventA\", {\n parameterUpdates: { myParam: \"third\" },\n });\n\n await act(async () => {\n deferred.resolveAtIndex(0); // \"first\" resolves last - should not emit\n await vi.runAllTimersAsync();\n });\n\n // Still only one emit - all stale calls are ignored\n expect(mockEmitEvent).toHaveBeenCalledTimes(1);\n });\n\n it(\"should emit all calls when they complete sequentially\", async () => {\n const deferred = createDeferredTransformMock();\n const emit = await mountWidget();\n\n // First call\n act(() => {\n emit(\"eventA\", { parameterUpdates: { myParam: \"first\" } });\n });\n\n // Complete first call before making second\n await act(async () => {\n deferred.resolveNext();\n await vi.runAllTimersAsync();\n });\n\n expect(mockEmitEvent).toHaveBeenCalledTimes(1);\n expect(mockEmitEvent).toHaveBeenLastCalledWith(\"eventA\", {\n parameterUpdates: { myParam: \"first\" },\n });\n\n // Second call after first completed\n act(() => {\n emit(\"eventA\", { parameterUpdates: { myParam: \"second\" } });\n });\n\n await act(async () => {\n deferred.resolveNext();\n await vi.runAllTimersAsync();\n });\n\n // Both sequential calls should be emitted\n expect(mockEmitEvent).toHaveBeenCalledTimes(2);\n expect(mockEmitEvent).toHaveBeenLastCalledWith(\"eventA\", {\n parameterUpdates: { myParam: \"second\" },\n });\n });\n\n it(\"should emit all rapid calls synchronously when passThrough type is returned\", async () => {\n // Mock transformEmitEventPayload to return passThrough (synchronous) results\n vi.mocked(transformEmitEventPayload).mockImplementation(\n (_config, _eventId, payload) => ({\n type: \"passThrough\" as const,\n payload: payload as { parameterUpdates: { myParam: string } },\n }),\n );\n\n const emit = await mountWidget();\n\n // Emit 5 events rapidly - all should go through synchronously\n act(() => {\n emit(\"eventA\", { parameterUpdates: { myParam: \"first\" } });\n emit(\"eventA\", { parameterUpdates: { myParam: \"second\" } });\n emit(\"eventA\", { parameterUpdates: { myParam: \"third\" } });\n emit(\"eventA\", { parameterUpdates: { myParam: \"fourth\" } });\n emit(\"eventA\", { parameterUpdates: { myParam: \"fifth\" } });\n });\n\n // All 5 should be emitted immediately without waiting for any async operations\n expect(mockEmitEvent).toHaveBeenCalledTimes(5);\n expect(mockEmitEvent).toHaveBeenNthCalledWith(1, \"eventA\", {\n parameterUpdates: { myParam: \"first\" },\n });\n expect(mockEmitEvent).toHaveBeenNthCalledWith(2, \"eventA\", {\n parameterUpdates: { myParam: \"second\" },\n });\n expect(mockEmitEvent).toHaveBeenNthCalledWith(3, \"eventA\", {\n parameterUpdates: { myParam: \"third\" },\n });\n expect(mockEmitEvent).toHaveBeenNthCalledWith(4, \"eventA\", {\n parameterUpdates: { myParam: \"fourth\" },\n });\n expect(mockEmitEvent).toHaveBeenNthCalledWith(5, \"eventA\", {\n parameterUpdates: { myParam: \"fifth\" },\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}