@makeswift/runtime 0.28.4-canary.1 → 0.28.4-canary.3

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 (105) hide show
  1. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  2. package/dist/cjs/builder/serialization.js +78 -0
  3. package/dist/cjs/builder/serialization.js.map +1 -0
  4. package/dist/cjs/client/index.js +3 -3
  5. package/dist/cjs/controls/index.js +4 -0
  6. package/dist/cjs/controls/index.js.map +1 -1
  7. package/dist/cjs/controls/serialization/base/index.js +77 -0
  8. package/dist/cjs/controls/serialization/base/index.js.map +1 -0
  9. package/dist/cjs/controls/{visitors/message-port-serializer/client-message-port-serialization-visitor.js → serialization/base/visitor.js} +9 -22
  10. package/dist/cjs/controls/serialization/base/visitor.js.map +1 -0
  11. package/dist/cjs/controls/serialization/index.js +55 -0
  12. package/dist/cjs/controls/serialization/index.js.map +1 -0
  13. package/dist/cjs/controls/serialization/message-port/function-serialization.js.map +1 -0
  14. package/dist/cjs/{builder/serialization → controls/serialization/message-port}/index.js +6 -6
  15. package/dist/cjs/controls/serialization/message-port/index.js.map +1 -0
  16. package/dist/cjs/controls/{visitors/message-port-serializer/index.js → serialization/message-port/visitor.js} +25 -13
  17. package/dist/cjs/controls/serialization/message-port/visitor.js.map +1 -0
  18. package/dist/cjs/{builder/serialization/control-serialization.js → prop-controllers/serialization.js} +41 -144
  19. package/dist/cjs/prop-controllers/serialization.js.map +1 -0
  20. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  21. package/dist/esm/builder/serialization.js +59 -0
  22. package/dist/esm/builder/serialization.js.map +1 -0
  23. package/dist/esm/client/index.js +3 -3
  24. package/dist/esm/controls/index.js +4 -0
  25. package/dist/esm/controls/index.js.map +1 -1
  26. package/dist/esm/controls/serialization/base/index.js +76 -0
  27. package/dist/esm/controls/serialization/base/index.js.map +1 -0
  28. package/dist/esm/controls/{visitors/message-port-serializer/client-message-port-serialization-visitor.js → serialization/base/visitor.js} +6 -20
  29. package/dist/esm/controls/serialization/base/visitor.js.map +1 -0
  30. package/dist/esm/controls/serialization/index.js +30 -0
  31. package/dist/esm/controls/serialization/index.js.map +1 -0
  32. package/dist/esm/controls/serialization/message-port/function-serialization.js.map +1 -0
  33. package/dist/esm/controls/serialization/message-port/index.js +3 -0
  34. package/dist/esm/controls/serialization/message-port/index.js.map +1 -0
  35. package/dist/esm/controls/serialization/message-port/visitor.js +24 -0
  36. package/dist/esm/controls/serialization/message-port/visitor.js.map +1 -0
  37. package/dist/esm/{builder/serialization/control-serialization.js → prop-controllers/serialization.js} +11 -136
  38. package/dist/esm/prop-controllers/serialization.js.map +1 -0
  39. package/dist/types/api-handler/handlers/webhook/types.d.ts +4 -4
  40. package/dist/types/builder/serialization.d.ts +23 -0
  41. package/dist/types/builder/serialization.d.ts.map +1 -0
  42. package/dist/types/builder/serialization.test.d.ts +2 -0
  43. package/dist/types/builder/serialization.test.d.ts.map +1 -0
  44. package/dist/types/client/index.d.ts +4 -4
  45. package/dist/types/controls/index.d.ts +1 -1
  46. package/dist/types/controls/index.d.ts.map +1 -1
  47. package/dist/types/controls/serialization/base/index.d.ts +10 -0
  48. package/dist/types/controls/serialization/base/index.d.ts.map +1 -0
  49. package/dist/types/controls/serialization/base/visitor.d.ts +7 -0
  50. package/dist/types/controls/serialization/base/visitor.d.ts.map +1 -0
  51. package/dist/types/controls/serialization/index.d.ts +10 -0
  52. package/dist/types/controls/serialization/index.d.ts.map +1 -0
  53. package/dist/types/controls/{visitors/message-port-serializer → serialization/message-port}/function-serialization.d.ts +1 -1
  54. package/dist/types/controls/serialization/message-port/function-serialization.d.ts.map +1 -0
  55. package/dist/types/controls/serialization/message-port/function-serialization.test.d.ts.map +1 -0
  56. package/dist/types/controls/serialization/message-port/index.d.ts +3 -0
  57. package/dist/types/controls/serialization/message-port/index.d.ts.map +1 -0
  58. package/dist/types/controls/serialization/message-port/visitor.d.ts +7 -0
  59. package/dist/types/controls/serialization/message-port/visitor.d.ts.map +1 -0
  60. package/dist/types/next/components/tests/controls/code-control.test.d.ts +2 -0
  61. package/dist/types/next/components/tests/controls/code-control.test.d.ts.map +1 -0
  62. package/dist/types/{builder/serialization/control-serialization.d.ts → prop-controllers/serialization.d.ts} +11 -29
  63. package/dist/types/prop-controllers/serialization.d.ts.map +1 -0
  64. package/dist/types/slate/BlockPlugin/index.d.ts +3 -3
  65. package/package.json +3 -3
  66. package/dist/cjs/builder/serialization/control-serialization.js.map +0 -1
  67. package/dist/cjs/builder/serialization/controls/types.js +0 -17
  68. package/dist/cjs/builder/serialization/controls/types.js.map +0 -1
  69. package/dist/cjs/builder/serialization/function-serialization.js +0 -57
  70. package/dist/cjs/builder/serialization/function-serialization.js.map +0 -1
  71. package/dist/cjs/builder/serialization/index.js.map +0 -1
  72. package/dist/cjs/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.js.map +0 -1
  73. package/dist/cjs/controls/visitors/message-port-serializer/function-serialization.js.map +0 -1
  74. package/dist/cjs/controls/visitors/message-port-serializer/index.js.map +0 -1
  75. package/dist/esm/builder/serialization/control-serialization.js.map +0 -1
  76. package/dist/esm/builder/serialization/controls/types.js +0 -1
  77. package/dist/esm/builder/serialization/controls/types.js.map +0 -1
  78. package/dist/esm/builder/serialization/function-serialization.js +0 -31
  79. package/dist/esm/builder/serialization/function-serialization.js.map +0 -1
  80. package/dist/esm/builder/serialization/index.js +0 -3
  81. package/dist/esm/builder/serialization/index.js.map +0 -1
  82. package/dist/esm/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.js.map +0 -1
  83. package/dist/esm/controls/visitors/message-port-serializer/function-serialization.js.map +0 -1
  84. package/dist/esm/controls/visitors/message-port-serializer/index.js +0 -13
  85. package/dist/esm/controls/visitors/message-port-serializer/index.js.map +0 -1
  86. package/dist/types/builder/serialization/control-serialization.d.ts.map +0 -1
  87. package/dist/types/builder/serialization/control-serialization.test.d.ts +0 -2
  88. package/dist/types/builder/serialization/control-serialization.test.d.ts.map +0 -1
  89. package/dist/types/builder/serialization/controls/types.d.ts +0 -10
  90. package/dist/types/builder/serialization/controls/types.d.ts.map +0 -1
  91. package/dist/types/builder/serialization/function-serialization.d.ts +0 -12
  92. package/dist/types/builder/serialization/function-serialization.d.ts.map +0 -1
  93. package/dist/types/builder/serialization/function-serialization.test.d.ts.map +0 -1
  94. package/dist/types/builder/serialization/index.d.ts +0 -4
  95. package/dist/types/builder/serialization/index.d.ts.map +0 -1
  96. package/dist/types/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.d.ts +0 -9
  97. package/dist/types/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.d.ts.map +0 -1
  98. package/dist/types/controls/visitors/message-port-serializer/function-serialization.d.ts.map +0 -1
  99. package/dist/types/controls/visitors/message-port-serializer/function-serialization.test.d.ts +0 -2
  100. package/dist/types/controls/visitors/message-port-serializer/function-serialization.test.d.ts.map +0 -1
  101. package/dist/types/controls/visitors/message-port-serializer/index.d.ts +0 -3
  102. package/dist/types/controls/visitors/message-port-serializer/index.d.ts.map +0 -1
  103. /package/dist/cjs/controls/{visitors/message-port-serializer → serialization/message-port}/function-serialization.js +0 -0
  104. /package/dist/esm/controls/{visitors/message-port-serializer → serialization/message-port}/function-serialization.js +0 -0
  105. /package/dist/types/{builder/serialization → controls/serialization/message-port}/function-serialization.test.d.ts +0 -0
@@ -28,7 +28,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
28
28
  return import_request_response.ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
29
29
  }
30
30
  return import_request_response.ApiResponse.json({
31
- version: "0.28.4-canary.1",
31
+ version: "0.28.4-canary.3",
32
32
  interactionMode: true,
33
33
  clientSideNavigation: false,
34
34
  elementFromPoint: false,
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var serialization_exports = {};
21
+ __export(serialization_exports, {
22
+ deserializeControl: () => deserializeControl,
23
+ deserializeControls: () => deserializeControls,
24
+ serializeControl: () => serializeControl,
25
+ serializeControls: () => serializeControls
26
+ });
27
+ module.exports = __toCommonJS(serialization_exports);
28
+ var import_controls = require("@makeswift/controls");
29
+ var import_serialization = require("../prop-controllers/serialization");
30
+ var import_descriptors = require("../prop-controllers/descriptors");
31
+ var import_base = require("../controls/serialization/base");
32
+ var import_message_port = require("../controls/serialization/message-port");
33
+ var import_serialization2 = require("../controls/serialization");
34
+ __reExport(serialization_exports, require("../prop-controllers/serialization"), module.exports);
35
+ function serializeControl(control) {
36
+ if ((0, import_descriptors.isLegacyDescriptor)(control)) {
37
+ return (0, import_serialization.serializeLegacyControl)(control);
38
+ }
39
+ const messagePortVisitor = new import_message_port.ClientMessagePortSerializationVisitor();
40
+ const serializedControl = control.accept(messagePortVisitor);
41
+ return [serializedControl, messagePortVisitor.getTransferables()];
42
+ }
43
+ function isSerializedLegacyControl(control) {
44
+ return "options" in control;
45
+ }
46
+ function deserializeControl(serializedControl, options) {
47
+ if (isSerializedLegacyControl(serializedControl)) {
48
+ const record = options?.plugins ? (0, import_controls.deserializeObject)(serializedControl, options?.plugins) : serializedControl;
49
+ return (0, import_serialization.deserializeLegacyControl)(record);
50
+ }
51
+ const plugins = [import_message_port.functionDeserializationPlugin, ...options?.plugins ?? []];
52
+ return (0, import_base.deserializeControl)(serializedControl, { plugins });
53
+ }
54
+ function serializeControls(controls) {
55
+ return Object.entries(controls).reduce(
56
+ ([accControls, accTransferables], [key, control]) => {
57
+ const [serializedControl, transferables] = serializeControl(control);
58
+ return [{ ...accControls, [key]: serializedControl }, [...accTransferables, ...transferables]];
59
+ },
60
+ [{}, []]
61
+ );
62
+ }
63
+ function deserializeControls(serializedControls, { onError, plugins } = {}) {
64
+ return (0, import_serialization2.deserializeControlRecords)(
65
+ serializedControls,
66
+ (serializedControl, options) => deserializeControl(serializedControl, options),
67
+ { onError, plugins }
68
+ );
69
+ }
70
+ // Annotate the CommonJS export names for ESM import in node:
71
+ 0 && (module.exports = {
72
+ deserializeControl,
73
+ deserializeControls,
74
+ serializeControl,
75
+ serializeControls,
76
+ ...require("../prop-controllers/serialization")
77
+ });
78
+ //# sourceMappingURL=serialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/builder/serialization.ts"],"sourcesContent":["import {\n type Data,\n ControlDefinition as UnifiedControlDefinition,\n type SerializedRecord,\n DeserializationPlugin,\n deserializeObject,\n} from '@makeswift/controls'\n\nimport {\n type SerializedLegacyControl,\n type DeserializedLegacyControl,\n serializeLegacyControl,\n deserializeLegacyControl,\n} from '../prop-controllers/serialization'\n\nimport { type Descriptor, isLegacyDescriptor } from '../prop-controllers/descriptors'\n\nimport { deserializeControl as deserializeUnifiedControl } from '../controls/serialization/base'\nimport {\n type DeserializedFunction,\n type SerializedFunction,\n ClientMessagePortSerializationVisitor,\n functionDeserializationPlugin,\n} from '../controls/serialization/message-port'\n\nimport {\n type DeserializeControlRecordsOptions,\n deserializeControlRecords,\n} from '../controls/serialization'\n\nexport * from '../prop-controllers/serialization'\n\nexport type SerializedControl<T extends Data = Data> = SerializedLegacyControl<T> | SerializedRecord\n\nexport type DeserializedControl<T extends Data = Data> =\n | DeserializedLegacyControl<T>\n | UnifiedControlDefinition\n\nexport function serializeControl<T extends Data>(\n control: Descriptor<T>,\n): [SerializedControl<T>, Transferable[]] {\n if (isLegacyDescriptor(control)) {\n return serializeLegacyControl(control)\n }\n\n const messagePortVisitor = new ClientMessagePortSerializationVisitor()\n const serializedControl = control.accept(messagePortVisitor)\n return [serializedControl, messagePortVisitor.getTransferables()]\n}\n\nfunction isSerializedLegacyControl<T extends Data>(\n control: SerializedControl<T>,\n): control is SerializedLegacyControl<T> {\n return 'options' in control\n}\n\nexport type DeserializeControlOptions = {\n plugins?: DeserializationPlugin<any>[]\n}\n\nexport function deserializeControl<T extends Data>(\n serializedControl: SerializedControl<T>,\n options?: DeserializeControlOptions,\n): DeserializedControl<T> {\n if (isSerializedLegacyControl(serializedControl)) {\n // Parity with controls deserialization logic below: \"preprocess\" serialized\n // legacy controls if the caller provided custom deserialization plugins\n const record = options?.plugins\n ? deserializeObject(serializedControl, options?.plugins)\n : serializedControl\n return deserializeLegacyControl(record as SerializedLegacyControl<T>)\n }\n\n const plugins = [functionDeserializationPlugin, ...(options?.plugins ?? [])]\n return deserializeUnifiedControl(serializedControl, { plugins })\n}\n\nexport function serializeControls(\n controls: Record<string, Descriptor>,\n): [Record<string, SerializedControl>, Transferable[]] {\n return Object.entries(controls).reduce(\n ([accControls, accTransferables], [key, control]) => {\n const [serializedControl, transferables] = serializeControl(control)\n\n return [{ ...accControls, [key]: serializedControl }, [...accTransferables, ...transferables]]\n },\n [{}, []] as [Record<string, SerializedControl>, Transferable[]],\n )\n}\n\nexport function deserializeControls(\n serializedControls: Record<string, unknown>,\n { onError, plugins }: DeserializeControlRecordsOptions = {},\n): Record<string, DeserializedControl> {\n return deserializeControlRecords<DeserializedControl>(\n serializedControls,\n (serializedControl, options) => deserializeControl(serializedControl, options),\n { onError, plugins },\n )\n}\n\ntype AnyFunction = (...args: any[]) => any\n\nexport type Serialize<T> = T extends AnyFunction\n ? SerializedFunction<T>\n : T extends Record<string, unknown>\n ? { [K in keyof T]: Serialize<T[K]> }\n : T\n\nexport type Deserialize<T> =\n T extends SerializedFunction<infer U>\n ? DeserializedFunction<U>\n : T extends Record<string, unknown>\n ? { [K in keyof T]: Deserialize<T[K]> }\n : T\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMO;AAEP,2BAKO;AAEP,yBAAoD;AAEpD,kBAAgE;AAChE,0BAKO;AAEP,IAAAA,wBAGO;AAEP,kCAAc,8CA9Bd;AAsCO,SAAS,iBACd,SACwC;AACxC,UAAI,uCAAmB,OAAO,GAAG;AAC/B,eAAO,6CAAuB,OAAO;AAAA,EACvC;AAEA,QAAM,qBAAqB,IAAI,0DAAsC;AACrE,QAAM,oBAAoB,QAAQ,OAAO,kBAAkB;AAC3D,SAAO,CAAC,mBAAmB,mBAAmB,iBAAiB,CAAC;AAClE;AAEA,SAAS,0BACP,SACuC;AACvC,SAAO,aAAa;AACtB;AAMO,SAAS,mBACd,mBACA,SACwB;AACxB,MAAI,0BAA0B,iBAAiB,GAAG;AAGhD,UAAM,SAAS,SAAS,cACpB,mCAAkB,mBAAmB,SAAS,OAAO,IACrD;AACJ,eAAO,+CAAyB,MAAoC;AAAA,EACtE;AAEA,QAAM,UAAU,CAAC,mDAA+B,GAAI,SAAS,WAAW,CAAC,CAAE;AAC3E,aAAO,YAAAC,oBAA0B,mBAAmB,EAAE,QAAQ,CAAC;AACjE;AAEO,SAAS,kBACd,UACqD;AACrD,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,CAAC,aAAa,gBAAgB,GAAG,CAAC,KAAK,OAAO,MAAM;AACnD,YAAM,CAAC,mBAAmB,aAAa,IAAI,iBAAiB,OAAO;AAEnE,aAAO,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,GAAG,kBAAkB,GAAG,CAAC,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAAA,IAC/F;AAAA,IACA,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,EACT;AACF;AAEO,SAAS,oBACd,oBACA,EAAE,SAAS,QAAQ,IAAsC,CAAC,GACrB;AACrC,aAAO;AAAA,IACL;AAAA,IACA,CAAC,mBAAmB,YAAY,mBAAmB,mBAAmB,OAAO;AAAA,IAC7E,EAAE,SAAS,QAAQ;AAAA,EACrB;AACF;","names":["import_serialization","deserializeUnifiedControl"]}
@@ -214,7 +214,7 @@ Received "${apiKey}" instead.`
214
214
  }
215
215
  this.apiKey = apiKey;
216
216
  this.graphqlClient = new import_client.GraphQLClient(new URL("graphql", runtime.apiOrigin).href, {
217
- "makeswift-runtime-version": "0.28.4-canary.1"
217
+ "makeswift-runtime-version": "0.28.4-canary.3"
218
218
  });
219
219
  this.runtime = runtime;
220
220
  }
@@ -226,7 +226,7 @@ Received "${apiKey}" instead.`
226
226
  const requestHeaders = new Headers({
227
227
  "x-api-key": this.apiKey,
228
228
  "makeswift-site-api-key": this.apiKey,
229
- "makeswift-runtime-version": "0.28.4-canary.1"
229
+ "makeswift-runtime-version": "0.28.4-canary.3"
230
230
  });
231
231
  if (siteVersion?.token) {
232
232
  requestUrl.searchParams.set("version", siteVersion.version);
@@ -951,7 +951,7 @@ Received "${apiKey}" instead.`
951
951
  headers: {
952
952
  "x-api-key": this.apiKey,
953
953
  "makeswift-site-api-key": this.apiKey,
954
- "makeswift-runtime-version": "0.28.4-canary.1",
954
+ "makeswift-runtime-version": "0.28.4-canary.3",
955
955
  "content-type": "application/json"
956
956
  },
957
957
  body: JSON.stringify({ token }),
@@ -63,6 +63,8 @@ __export(controls_exports, {
63
63
  TextAreaDefinition: () => import_controls.TextAreaDefinition,
64
64
  TextInput: () => import_controls.TextInput,
65
65
  TextInputDefinition: () => import_controls.TextInputDefinition,
66
+ unstable_Code: () => import_controls.unstable_Code,
67
+ unstable_CodeDefinition: () => import_controls.unstable_CodeDefinition,
66
68
  unstable_IconRadioGroup: () => import_controls.unstable_IconRadioGroup,
67
69
  unstable_StyleV2: () => import_style_v2.unstable_StyleV2,
68
70
  unstable_Typography: () => import_controls.unstable_Typography,
@@ -122,6 +124,8 @@ var import_style_v2 = require("./style-v2/style-v2");
122
124
  TextAreaDefinition,
123
125
  TextInput,
124
126
  TextInputDefinition,
127
+ unstable_Code,
128
+ unstable_CodeDefinition,
125
129
  unstable_IconRadioGroup,
126
130
  unstable_StyleV2,
127
131
  unstable_Typography,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/controls/index.ts"],"sourcesContent":["export * from './control'\n\nexport {\n ControlDefinition,\n Checkbox,\n CheckboxDefinition,\n Color,\n ColorDefinition,\n Combobox,\n ComboboxDefinition,\n Font,\n FontDefinition,\n Group,\n GroupDefinition,\n GroupControl,\n IconRadioGroupDefinition,\n type IconRadioGroupIcon,\n unstable_IconRadioGroup,\n Image,\n ImageDefinition,\n List,\n ListDefinition,\n ListControl,\n Number,\n NumberDefinition,\n Select,\n SelectDefinition,\n Shape,\n ShapeDefinition,\n ShapeControl,\n Style,\n StyleDefinition,\n type StyleProperty,\n StyleControl,\n TextInput,\n TextInputDefinition,\n TextArea,\n TextAreaDefinition,\n unstable_Typography,\n unstable_TypographyDefinition,\n} from '@makeswift/controls'\n\nexport { Link, LinkDefinition } from './link'\nexport { RichTextV1Definition, RichTextV1Control } from './rich-text'\nexport { RichText, RichTextV2Definition, RichTextV2Control } from './rich-text-v2'\nexport { Slot, SlotDefinition, SlotControl } from './slot'\nexport { unstable_StyleV2, StyleV2Definition, StyleV2Control } from './style-v2/style-v2'\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAAc,sBAAd;AAEA,sBAsCO;AAEP,kBAAqC;AACrC,uBAAwD;AACxD,0BAAkE;AAClE,kBAAkD;AAClD,sBAAoE;","names":[]}
1
+ {"version":3,"sources":["../../../src/controls/index.ts"],"sourcesContent":["export * from './control'\n\nexport {\n ControlDefinition,\n Checkbox,\n CheckboxDefinition,\n unstable_Code,\n unstable_CodeDefinition,\n Color,\n ColorDefinition,\n Combobox,\n ComboboxDefinition,\n Font,\n FontDefinition,\n Group,\n GroupDefinition,\n GroupControl,\n IconRadioGroupDefinition,\n type IconRadioGroupIcon,\n unstable_IconRadioGroup,\n Image,\n ImageDefinition,\n List,\n ListDefinition,\n ListControl,\n Number,\n NumberDefinition,\n Select,\n SelectDefinition,\n Shape,\n ShapeDefinition,\n ShapeControl,\n Style,\n StyleDefinition,\n type StyleProperty,\n StyleControl,\n TextInput,\n TextInputDefinition,\n TextArea,\n TextAreaDefinition,\n unstable_Typography,\n unstable_TypographyDefinition,\n} from '@makeswift/controls'\n\nexport { Link, LinkDefinition } from './link'\nexport { RichTextV1Definition, RichTextV1Control } from './rich-text'\nexport { RichText, RichTextV2Definition, RichTextV2Control } from './rich-text-v2'\nexport { Slot, SlotDefinition, SlotControl } from './slot'\nexport { unstable_StyleV2, StyleV2Definition, StyleV2Control } from './style-v2/style-v2'\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAAc,sBAAd;AAEA,sBAwCO;AAEP,kBAAqC;AACrC,uBAAwD;AACxD,0BAAkE;AAClE,kBAAkD;AAClD,sBAAoE;","names":[]}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var base_exports = {};
20
+ __export(base_exports, {
21
+ deserializeControl: () => deserializeControl,
22
+ deserializeUnifiedControlDef: () => deserializeUnifiedControlDef,
23
+ serializeControls: () => serializeControls
24
+ });
25
+ module.exports = __toCommonJS(base_exports);
26
+ var import_controls = require("@makeswift/controls");
27
+ var import__ = require("../../index");
28
+ function serializeControls(controls, visitor) {
29
+ return Object.entries(controls).reduce(
30
+ (acc, [key, control]) => {
31
+ return { ...acc, [key]: control.accept(visitor) };
32
+ },
33
+ {}
34
+ );
35
+ }
36
+ function deserializeControl(serializedControl, options) {
37
+ const plugins = options?.plugins ?? [];
38
+ return deserializeUnifiedControlDef((0, import_controls.deserializeRecord)(serializedControl, plugins));
39
+ }
40
+ function deserializeUnifiedControlDef(record) {
41
+ const deserializeMethod = {
42
+ [import__.CheckboxDefinition.type]: import__.CheckboxDefinition.deserialize,
43
+ [import__.unstable_CodeDefinition.type]: import__.unstable_CodeDefinition.deserialize,
44
+ [import__.ColorDefinition.type]: import__.ColorDefinition.deserialize,
45
+ [import__.ComboboxDefinition.type]: import__.ComboboxDefinition.deserialize,
46
+ [import__.FontDefinition.type]: import__.FontDefinition.deserialize,
47
+ [import__.GroupDefinition.type]: (record2) => import__.GroupDefinition.deserialize(record2, deserializeUnifiedControlDef),
48
+ [import__.IconRadioGroupDefinition.type]: import__.IconRadioGroupDefinition.deserialize,
49
+ [import__.ImageDefinition.type]: import__.ImageDefinition.deserialize,
50
+ [import__.LinkDefinition.type]: import__.LinkDefinition.deserialize,
51
+ [import__.ListDefinition.type]: (record2) => import__.ListDefinition.deserialize(record2, deserializeUnifiedControlDef),
52
+ [import__.NumberDefinition.type]: import__.NumberDefinition.deserialize,
53
+ [import__.RichTextV1Definition.type]: import__.RichTextV1Definition.deserialize,
54
+ [import__.RichTextV2Definition.type]: (record2) => import__.RichTextV2Definition.deserialize(record2, deserializeUnifiedControlDef),
55
+ [import__.SelectDefinition.type]: import__.SelectDefinition.deserialize,
56
+ [import__.ShapeDefinition.type]: (record2) => import__.ShapeDefinition.deserialize(record2, deserializeUnifiedControlDef),
57
+ [import_controls.ShapeV2Definition.type]: (record2) => import_controls.ShapeV2Definition.deserialize(record2, deserializeUnifiedControlDef),
58
+ [import__.SlotDefinition.type]: import__.SlotDefinition.deserialize,
59
+ [import__.StyleDefinition.type]: import__.StyleDefinition.deserialize,
60
+ [import__.StyleV2Definition.type]: (record2) => import__.StyleV2Definition.deserialize(record2, deserializeUnifiedControlDef),
61
+ [import__.TextAreaDefinition.type]: import__.TextAreaDefinition.deserialize,
62
+ [import__.TextInputDefinition.type]: import__.TextInputDefinition.deserialize,
63
+ [import__.unstable_TypographyDefinition.type]: import__.unstable_TypographyDefinition.deserialize
64
+ };
65
+ const deserialize = deserializeMethod[record.type] ?? null;
66
+ if (deserialize == null) {
67
+ throw new Error(`Unknown control type: ${record.type}`);
68
+ }
69
+ return deserialize(record);
70
+ }
71
+ // Annotate the CommonJS export names for ESM import in node:
72
+ 0 && (module.exports = {
73
+ deserializeControl,
74
+ deserializeUnifiedControlDef,
75
+ serializeControls
76
+ });
77
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/base/index.ts"],"sourcesContent":["import {\n ControlDefinition,\n type SerializedRecord,\n type DeserializedRecord,\n ShapeV2Definition,\n DeserializationPlugin,\n deserializeRecord,\n} from '@makeswift/controls'\n\nimport {\n CheckboxDefinition,\n unstable_CodeDefinition,\n ColorDefinition,\n ComboboxDefinition,\n FontDefinition,\n GroupDefinition,\n IconRadioGroupDefinition,\n ImageDefinition,\n LinkDefinition,\n ListDefinition,\n NumberDefinition,\n RichTextV1Definition,\n RichTextV2Definition,\n SelectDefinition,\n ShapeDefinition,\n SlotDefinition,\n StyleDefinition,\n StyleV2Definition,\n TextAreaDefinition,\n TextInputDefinition,\n unstable_TypographyDefinition,\n} from '../../index'\n\nimport { BaseControlSerializationVisitor } from './visitor'\n\nexport { type SerializedRecord, type DeserializedRecord } from '@makeswift/controls'\n\nexport function serializeControls(\n controls: Record<string, ControlDefinition>,\n visitor: BaseControlSerializationVisitor,\n): Record<string, SerializedRecord> {\n return Object.entries(controls).reduce<Record<string, SerializedRecord>>(\n (acc, [key, control]) => {\n return { ...acc, [key]: control.accept(visitor) }\n },\n {},\n )\n}\n\nexport type DeserializeControlOptions = {\n plugins: DeserializationPlugin<any>[]\n}\n\nexport function deserializeControl(\n serializedControl: SerializedRecord,\n options: DeserializeControlOptions,\n): ControlDefinition {\n const plugins = options?.plugins ?? []\n\n return deserializeUnifiedControlDef(deserializeRecord(serializedControl, plugins))\n}\n\nexport function deserializeUnifiedControlDef(record: DeserializedRecord): ControlDefinition {\n type DeserializeMethod = (data: DeserializedRecord) => ControlDefinition\n const deserializeMethod: Record<string, DeserializeMethod> = {\n [CheckboxDefinition.type]: CheckboxDefinition.deserialize,\n [unstable_CodeDefinition.type]: unstable_CodeDefinition.deserialize,\n [ColorDefinition.type]: ColorDefinition.deserialize,\n [ComboboxDefinition.type]: ComboboxDefinition.deserialize,\n [FontDefinition.type]: FontDefinition.deserialize,\n [GroupDefinition.type]: record =>\n GroupDefinition.deserialize(record, deserializeUnifiedControlDef),\n [IconRadioGroupDefinition.type]: IconRadioGroupDefinition.deserialize,\n [ImageDefinition.type]: ImageDefinition.deserialize,\n [LinkDefinition.type]: LinkDefinition.deserialize,\n [ListDefinition.type]: record =>\n ListDefinition.deserialize(record, deserializeUnifiedControlDef),\n [NumberDefinition.type]: NumberDefinition.deserialize,\n [RichTextV1Definition.type]: RichTextV1Definition.deserialize,\n [RichTextV2Definition.type]: record =>\n RichTextV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [SelectDefinition.type]: SelectDefinition.deserialize,\n [ShapeDefinition.type]: record =>\n ShapeDefinition.deserialize(record, deserializeUnifiedControlDef),\n [ShapeV2Definition.type]: record =>\n ShapeV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [SlotDefinition.type]: SlotDefinition.deserialize,\n [StyleDefinition.type]: StyleDefinition.deserialize,\n [StyleV2Definition.type]: record =>\n StyleV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [TextAreaDefinition.type]: TextAreaDefinition.deserialize,\n [TextInputDefinition.type]: TextInputDefinition.deserialize,\n [unstable_TypographyDefinition.type]: unstable_TypographyDefinition.deserialize,\n } as const\n\n const deserialize = deserializeMethod[record.type] ?? null\n if (deserialize == null) {\n throw new Error(`Unknown control type: ${record.type}`)\n }\n\n return deserialize(record)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAOO;AAEP,eAsBO;AAMA,SAAS,kBACd,UACA,SACkC;AAClC,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,KAAK,OAAO,MAAM;AACvB,aAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,QAAQ,OAAO,OAAO,EAAE;AAAA,IAClD;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAMO,SAAS,mBACd,mBACA,SACmB;AACnB,QAAM,UAAU,SAAS,WAAW,CAAC;AAErC,SAAO,iCAA6B,mCAAkB,mBAAmB,OAAO,CAAC;AACnF;AAEO,SAAS,6BAA6B,QAA+C;AAE1F,QAAM,oBAAuD;AAAA,IAC3D,CAAC,4BAAmB,IAAI,GAAG,4BAAmB;AAAA,IAC9C,CAAC,iCAAwB,IAAI,GAAG,iCAAwB;AAAA,IACxD,CAAC,yBAAgB,IAAI,GAAG,yBAAgB;AAAA,IACxC,CAAC,4BAAmB,IAAI,GAAG,4BAAmB;AAAA,IAC9C,CAAC,wBAAe,IAAI,GAAG,wBAAe;AAAA,IACtC,CAAC,yBAAgB,IAAI,GAAG,CAAAA,YACtB,yBAAgB,YAAYA,SAAQ,4BAA4B;AAAA,IAClE,CAAC,kCAAyB,IAAI,GAAG,kCAAyB;AAAA,IAC1D,CAAC,yBAAgB,IAAI,GAAG,yBAAgB;AAAA,IACxC,CAAC,wBAAe,IAAI,GAAG,wBAAe;AAAA,IACtC,CAAC,wBAAe,IAAI,GAAG,CAAAA,YACrB,wBAAe,YAAYA,SAAQ,4BAA4B;AAAA,IACjE,CAAC,0BAAiB,IAAI,GAAG,0BAAiB;AAAA,IAC1C,CAAC,8BAAqB,IAAI,GAAG,8BAAqB;AAAA,IAClD,CAAC,8BAAqB,IAAI,GAAG,CAAAA,YAC3B,8BAAqB,YAAYA,SAAQ,4BAA4B;AAAA,IACvE,CAAC,0BAAiB,IAAI,GAAG,0BAAiB;AAAA,IAC1C,CAAC,yBAAgB,IAAI,GAAG,CAAAA,YACtB,yBAAgB,YAAYA,SAAQ,4BAA4B;AAAA,IAClE,CAAC,kCAAkB,IAAI,GAAG,CAAAA,YACxB,kCAAkB,YAAYA,SAAQ,4BAA4B;AAAA,IACpE,CAAC,wBAAe,IAAI,GAAG,wBAAe;AAAA,IACtC,CAAC,yBAAgB,IAAI,GAAG,yBAAgB;AAAA,IACxC,CAAC,2BAAkB,IAAI,GAAG,CAAAA,YACxB,2BAAkB,YAAYA,SAAQ,4BAA4B;AAAA,IACpE,CAAC,4BAAmB,IAAI,GAAG,4BAAmB;AAAA,IAC9C,CAAC,6BAAoB,IAAI,GAAG,6BAAoB;AAAA,IAChD,CAAC,uCAA8B,IAAI,GAAG,uCAA8B;AAAA,EACtE;AAEA,QAAM,cAAc,kBAAkB,OAAO,IAAI,KAAK;AACtD,MAAI,eAAe,MAAM;AACvB,UAAM,IAAI,MAAM,yBAAyB,OAAO,IAAI,EAAE;AAAA,EACxD;AAEA,SAAO,YAAY,MAAM;AAC3B;","names":["record"]}
@@ -16,33 +16,20 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var client_message_port_serialization_visitor_exports = {};
20
- __export(client_message_port_serialization_visitor_exports, {
21
- ClientMessagePortSerializationVisitor: () => ClientMessagePortSerializationVisitor
19
+ var visitor_exports = {};
20
+ __export(visitor_exports, {
21
+ BaseControlSerializationVisitor: () => BaseControlSerializationVisitor
22
22
  });
23
- module.exports = __toCommonJS(client_message_port_serialization_visitor_exports);
23
+ module.exports = __toCommonJS(visitor_exports);
24
24
  var import_controls = require("@makeswift/controls");
25
25
  var import_rich_text_v2 = require("../../rich-text-v2");
26
- var import_function_serialization = require("./function-serialization");
27
- class ClientMessagePortSerializationVisitor extends import_controls.ControlSerializationVisitor {
28
- transferables = [];
29
- constructor() {
30
- const serializeFunctionPlugin = {
31
- match: import_controls.isFunction,
32
- serialize: (val) => {
33
- const r = (0, import_function_serialization.serializeFunction)(val);
34
- this.transferables.push(r);
35
- return r;
36
- }
37
- };
26
+ class BaseControlSerializationVisitor extends import_controls.ControlSerializationVisitor {
27
+ constructor(plugins) {
38
28
  const serializeDefinitionPlugin = {
39
29
  match: (val) => val instanceof import_controls.ControlDefinition,
40
30
  serialize: (val) => val.accept(this)
41
31
  };
42
- super([serializeFunctionPlugin, serializeDefinitionPlugin]);
43
- }
44
- getTransferables() {
45
- return [...this.transferables];
32
+ super([serializeDefinitionPlugin, ...plugins]);
46
33
  }
47
34
  visitRichTextV2(def) {
48
35
  const { plugins, ...config } = def.config;
@@ -67,6 +54,6 @@ class ClientMessagePortSerializationVisitor extends import_controls.ControlSeria
67
54
  }
68
55
  // Annotate the CommonJS export names for ESM import in node:
69
56
  0 && (module.exports = {
70
- ClientMessagePortSerializationVisitor
57
+ BaseControlSerializationVisitor
71
58
  });
72
- //# sourceMappingURL=client-message-port-serialization-visitor.js.map
59
+ //# sourceMappingURL=visitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/base/visitor.ts"],"sourcesContent":["import {\n ControlDefinition,\n SerializedRecord,\n serializeObject,\n SerializationPlugin,\n ControlSerializationVisitor,\n} from '@makeswift/controls'\n\nimport { RichTextV2Definition } from '../../rich-text-v2'\n\nexport class BaseControlSerializationVisitor extends ControlSerializationVisitor {\n constructor(plugins: SerializationPlugin<any>[]) {\n const serializeDefinitionPlugin: SerializationPlugin<ControlDefinition> = {\n match: (val: unknown) => val instanceof ControlDefinition,\n serialize: (val: ControlDefinition) => val.accept(this),\n }\n\n super([serializeDefinitionPlugin, ...plugins])\n }\n\n visitRichTextV2(def: RichTextV2Definition): SerializedRecord {\n const { plugins, ...config } = def.config\n\n // serialize only the plugin control definition, if any\n const pluginDefs = plugins.map(({ control }) =>\n control\n ? {\n control: {\n definition: control.definition,\n // FIXME: remove getValue/onChange stubs once we released a version of the builder\n // built against the runtime where these can be optional\n getValue: () => undefined,\n onChange: () => {},\n },\n }\n : {},\n )\n\n const serialized = serializeObject(\n { config: { ...config, plugins: pluginDefs } },\n this.serializationPlugins,\n ) as SerializedRecord\n\n return { ...serialized, type: RichTextV2Definition.type }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMO;AAEP,0BAAqC;AAE9B,MAAM,wCAAwC,4CAA4B;AAAA,EAC/E,YAAY,SAAqC;AAC/C,UAAM,4BAAoE;AAAA,MACxE,OAAO,CAAC,QAAiB,eAAe;AAAA,MACxC,WAAW,CAAC,QAA2B,IAAI,OAAO,IAAI;AAAA,IACxD;AAEA,UAAM,CAAC,2BAA2B,GAAG,OAAO,CAAC;AAAA,EAC/C;AAAA,EAEA,gBAAgB,KAA6C;AAC3D,UAAM,EAAE,SAAS,GAAG,OAAO,IAAI,IAAI;AAGnC,UAAM,aAAa,QAAQ;AAAA,MAAI,CAAC,EAAE,QAAQ,MACxC,UACI;AAAA,QACE,SAAS;AAAA,UACP,YAAY,QAAQ;AAAA;AAAA;AAAA,UAGpB,UAAU,MAAM;AAAA,UAChB,UAAU,MAAM;AAAA,UAAC;AAAA,QACnB;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAEA,UAAM,iBAAa;AAAA,MACjB,EAAE,QAAQ,EAAE,GAAG,QAAQ,SAAS,WAAW,EAAE;AAAA,MAC7C,KAAK;AAAA,IACP;AAEA,WAAO,EAAE,GAAG,YAAY,MAAM,yCAAqB,KAAK;AAAA,EAC1D;AACF;","names":[]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var serialization_exports = {};
20
+ __export(serialization_exports, {
21
+ deserializeControlRecords: () => deserializeControlRecords,
22
+ isSerializedRecord: () => isSerializedRecord
23
+ });
24
+ module.exports = __toCommonJS(serialization_exports);
25
+ function isSerializedRecord(r) {
26
+ return r != null && typeof r === "object" && "type" in r && typeof r.type === "string";
27
+ }
28
+ function deserializeControlRecords(serializedControls, deserialize, { onError, plugins } = {}) {
29
+ return Object.entries(serializedControls).reduce(
30
+ (deserializedControls, [key, serializedControl]) => {
31
+ try {
32
+ if (!isSerializedRecord(serializedControl)) {
33
+ throw new Error(
34
+ `Expected serialized control data, got ${JSON.stringify(serializedControl)}`
35
+ );
36
+ }
37
+ const deserializedControl = deserialize(serializedControl, { plugins });
38
+ return { ...deserializedControls, [key]: deserializedControl };
39
+ } catch (err) {
40
+ const error = err instanceof Error ? new Error(`Could not deserialize control for "${key}": ${err.message}`, {
41
+ cause: err
42
+ }) : new Error(`Could not deserialize control for "${key}", unknown error: ${err}`);
43
+ onError?.(error, { key, serializedControl });
44
+ return deserializedControls;
45
+ }
46
+ },
47
+ {}
48
+ );
49
+ }
50
+ // Annotate the CommonJS export names for ESM import in node:
51
+ 0 && (module.exports = {
52
+ deserializeControlRecords,
53
+ isSerializedRecord
54
+ });
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/controls/serialization/index.ts"],"sourcesContent":["import { type SerializedRecord, type DeserializeControlOptions } from './base'\n\nexport function isSerializedRecord(r: unknown): r is SerializedRecord {\n return r != null && typeof r === 'object' && 'type' in r && typeof r.type === 'string'\n}\n\nexport type DeserializeControlRecordsOptions = {\n onError?: (err: Error, context: { key: string; serializedControl: unknown }) => void\n} & Partial<Pick<DeserializeControlOptions, 'plugins'>>\n\nexport function deserializeControlRecords<T>(\n serializedControls: Record<string, unknown>,\n deserialize: (\n serializedControl: SerializedRecord,\n options?: Partial<DeserializeControlOptions>,\n ) => T,\n { onError, plugins }: DeserializeControlRecordsOptions = {},\n): Record<string, T> {\n return Object.entries(serializedControls).reduce<Record<string, T>>(\n (deserializedControls, [key, serializedControl]) => {\n try {\n if (!isSerializedRecord(serializedControl)) {\n throw new Error(\n `Expected serialized control data, got ${JSON.stringify(serializedControl)}`,\n )\n }\n const deserializedControl = deserialize(serializedControl, { plugins })\n return { ...deserializedControls, [key]: deserializedControl }\n } catch (err: unknown) {\n const error =\n err instanceof Error\n ? new Error(`Could not deserialize control for \"${key}\": ${err.message}`, {\n cause: err,\n })\n : new Error(`Could not deserialize control for \"${key}\", unknown error: ${err}`)\n\n onError?.(error, { key, serializedControl })\n\n return deserializedControls\n }\n },\n {},\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,mBAAmB,GAAmC;AACpE,SAAO,KAAK,QAAQ,OAAO,MAAM,YAAY,UAAU,KAAK,OAAO,EAAE,SAAS;AAChF;AAMO,SAAS,0BACd,oBACA,aAIA,EAAE,SAAS,QAAQ,IAAsC,CAAC,GACvC;AACnB,SAAO,OAAO,QAAQ,kBAAkB,EAAE;AAAA,IACxC,CAAC,sBAAsB,CAAC,KAAK,iBAAiB,MAAM;AAClD,UAAI;AACF,YAAI,CAAC,mBAAmB,iBAAiB,GAAG;AAC1C,gBAAM,IAAI;AAAA,YACR,yCAAyC,KAAK,UAAU,iBAAiB,CAAC;AAAA,UAC5E;AAAA,QACF;AACA,cAAM,sBAAsB,YAAY,mBAAmB,EAAE,QAAQ,CAAC;AACtE,eAAO,EAAE,GAAG,sBAAsB,CAAC,GAAG,GAAG,oBAAoB;AAAA,MAC/D,SAAS,KAAc;AACrB,cAAM,QACJ,eAAe,QACX,IAAI,MAAM,sCAAsC,GAAG,MAAM,IAAI,OAAO,IAAI;AAAA,UACtE,OAAO;AAAA,QACT,CAAC,IACD,IAAI,MAAM,sCAAsC,GAAG,qBAAqB,GAAG,EAAE;AAEnF,kBAAU,OAAO,EAAE,KAAK,kBAAkB,CAAC;AAE3C,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/message-port/function-serialization.ts"],"sourcesContent":["import {\n DeserializationPlugin,\n type AnyFunction,\n type SerializedFunctionReturnType,\n type DeserializedFunction,\n} from '@makeswift/controls'\n\nexport { type DeserializedFunction } from '@makeswift/controls'\n\ndeclare const SerializedFunctionTag: unique symbol\n\ntype ResolveCallPromise<T extends AnyFunction> = (value: SerializedFunctionReturnType<T>) => void\n\ntype OnMessageHandler<T extends AnyFunction> = MessagePort['onmessage'] & {\n newCall?(resolve: ResolveCallPromise<T>): number\n}\n\nexport type SerializedFunction<T extends AnyFunction> = MessagePort & {\n onmessage: OnMessageHandler<T>\n readonly [SerializedFunctionTag]: T\n}\n\nexport function isSerializedFunction(value: any): value is SerializedFunction<AnyFunction> {\n return value instanceof MessagePort\n}\n\ntype CallID = number\n\nexport function serializeFunction<T extends AnyFunction>(func: T): SerializedFunction<T> {\n type CallMessageEvent = MessageEvent<[CallID, Parameters<T>]>\n\n const messageChannel = new MessageChannel()\n\n messageChannel.port1.onmessage = ({ data: [callId, args] }: CallMessageEvent) => {\n Promise.resolve()\n .then(() => func.apply(null, args))\n .then(result => messageChannel.port1.postMessage([callId, result]))\n }\n\n return messageChannel.port2 as SerializedFunction<T>\n}\n\nfunction onmessageHandler<T extends AnyFunction>(): OnMessageHandler<T> {\n type ResultMessageEvent = MessageEvent<[CallID, SerializedFunctionReturnType<T>]>\n let nextCallId = 0\n const calls = new Map<CallID, ResolveCallPromise<T>>()\n\n const result: OnMessageHandler<T> = ({ data: [callId, result] }: ResultMessageEvent) => {\n calls.get(callId)?.(result)\n calls.delete(callId)\n }\n\n result.newCall = (resolve: ResolveCallPromise<T>) => {\n const callId = nextCallId++\n calls.set(callId, resolve)\n return callId\n }\n\n return result\n}\n\nexport function deserializeFunction<T extends AnyFunction>(\n serializedFunction: SerializedFunction<T>,\n): DeserializedFunction<T> {\n if (serializedFunction.onmessage == null) {\n serializedFunction.onmessage = onmessageHandler<T>()\n }\n\n return function deserializedFunction(...args) {\n return new Promise(resolve => {\n const { newCall } = serializedFunction.onmessage\n if (newCall == null) {\n throw new Error(\n `Deserialized function call failed: 'onmessage' handler is missing 'newCall' method`,\n )\n }\n\n const callId = newCall(resolve)\n serializedFunction.postMessage([callId, args])\n })\n }\n}\n\nexport const functionDeserializationPlugin: DeserializationPlugin<\n SerializedFunction<AnyFunction>,\n DeserializedFunction<AnyFunction>\n> = {\n match: isSerializedFunction,\n deserialize: value => deserializeFunction(value),\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBO,SAAS,qBAAqB,OAAsD;AACzF,SAAO,iBAAiB;AAC1B;AAIO,SAAS,kBAAyC,MAAgC;AAGvF,QAAM,iBAAiB,IAAI,eAAe;AAE1C,iBAAe,MAAM,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,MAAwB;AAC/E,YAAQ,QAAQ,EACb,KAAK,MAAM,KAAK,MAAM,MAAM,IAAI,CAAC,EACjC,KAAK,YAAU,eAAe,MAAM,YAAY,CAAC,QAAQ,MAAM,CAAC,CAAC;AAAA,EACtE;AAEA,SAAO,eAAe;AACxB;AAEA,SAAS,mBAA+D;AAEtE,MAAI,aAAa;AACjB,QAAM,QAAQ,oBAAI,IAAmC;AAErD,QAAM,SAA8B,CAAC,EAAE,MAAM,CAAC,QAAQA,OAAM,EAAE,MAA0B;AACtF,UAAM,IAAI,MAAM,IAAIA,OAAM;AAC1B,UAAM,OAAO,MAAM;AAAA,EACrB;AAEA,SAAO,UAAU,CAAC,YAAmC;AACnD,UAAM,SAAS;AACf,UAAM,IAAI,QAAQ,OAAO;AACzB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,oBACd,oBACyB;AACzB,MAAI,mBAAmB,aAAa,MAAM;AACxC,uBAAmB,YAAY,iBAAoB;AAAA,EACrD;AAEA,SAAO,SAAS,wBAAwB,MAAM;AAC5C,WAAO,IAAI,QAAQ,aAAW;AAC5B,YAAM,EAAE,QAAQ,IAAI,mBAAmB;AACvC,UAAI,WAAW,MAAM;AACnB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,SAAS,QAAQ,OAAO;AAC9B,yBAAmB,YAAY,CAAC,QAAQ,IAAI,CAAC;AAAA,IAC/C,CAAC;AAAA,EACH;AACF;AAEO,MAAM,gCAGT;AAAA,EACF,OAAO;AAAA,EACP,aAAa,WAAS,oBAAoB,KAAK;AACjD;","names":["result"]}
@@ -13,13 +13,13 @@ var __copyProps = (to, from, except, desc) => {
13
13
  };
14
14
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
15
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
- var serialization_exports = {};
17
- module.exports = __toCommonJS(serialization_exports);
18
- __reExport(serialization_exports, require("./control-serialization"), module.exports);
19
- __reExport(serialization_exports, require("./function-serialization"), module.exports);
16
+ var message_port_exports = {};
17
+ module.exports = __toCommonJS(message_port_exports);
18
+ __reExport(message_port_exports, require("./function-serialization"), module.exports);
19
+ __reExport(message_port_exports, require("./visitor"), module.exports);
20
20
  // Annotate the CommonJS export names for ESM import in node:
21
21
  0 && (module.exports = {
22
- ...require("./control-serialization"),
23
- ...require("./function-serialization")
22
+ ...require("./function-serialization"),
23
+ ...require("./visitor")
24
24
  });
25
25
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/message-port/index.ts"],"sourcesContent":["export * from './function-serialization'\nexport * from './visitor'\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,iCAAc,qCAAd;AACA,iCAAc,sBADd;","names":[]}
@@ -16,21 +16,33 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var message_port_serializer_exports = {};
20
- __export(message_port_serializer_exports, {
21
- ClientMessagePortSerializationVisitor: () => import_client_message_port_serialization_visitor.ClientMessagePortSerializationVisitor,
22
- deserializeFunction: () => import_function_serialization.deserializeFunction,
23
- functionDeserializationPlugin: () => import_function_serialization.functionDeserializationPlugin,
24
- serializeFunction: () => import_function_serialization.serializeFunction
19
+ var visitor_exports = {};
20
+ __export(visitor_exports, {
21
+ ClientMessagePortSerializationVisitor: () => ClientMessagePortSerializationVisitor
25
22
  });
26
- module.exports = __toCommonJS(message_port_serializer_exports);
27
- var import_client_message_port_serialization_visitor = require("./client-message-port-serialization-visitor");
23
+ module.exports = __toCommonJS(visitor_exports);
24
+ var import_controls = require("@makeswift/controls");
25
+ var import_visitor = require("../base/visitor");
28
26
  var import_function_serialization = require("./function-serialization");
27
+ class ClientMessagePortSerializationVisitor extends import_visitor.BaseControlSerializationVisitor {
28
+ transferables = [];
29
+ constructor() {
30
+ const serializeFunctionPlugin = {
31
+ match: import_controls.isFunction,
32
+ serialize: (val) => {
33
+ const r = (0, import_function_serialization.serializeFunction)(val);
34
+ this.transferables.push(r);
35
+ return r;
36
+ }
37
+ };
38
+ super([serializeFunctionPlugin]);
39
+ }
40
+ getTransferables() {
41
+ return [...this.transferables];
42
+ }
43
+ }
29
44
  // Annotate the CommonJS export names for ESM import in node:
30
45
  0 && (module.exports = {
31
- ClientMessagePortSerializationVisitor,
32
- deserializeFunction,
33
- functionDeserializationPlugin,
34
- serializeFunction
46
+ ClientMessagePortSerializationVisitor
35
47
  });
36
- //# sourceMappingURL=index.js.map
48
+ //# sourceMappingURL=visitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/message-port/visitor.ts"],"sourcesContent":["import { AnyFunction, SerializationPlugin, isFunction } from '@makeswift/controls'\n\nimport { BaseControlSerializationVisitor } from '../base/visitor'\nimport { serializeFunction } from './function-serialization'\n\nexport class ClientMessagePortSerializationVisitor extends BaseControlSerializationVisitor {\n private transferables: Transferable[] = []\n\n constructor() {\n const serializeFunctionPlugin: SerializationPlugin<AnyFunction> = {\n match: isFunction,\n serialize: (val: AnyFunction) => {\n const r = serializeFunction(val)\n this.transferables.push(r)\n return r\n },\n }\n\n super([serializeFunctionPlugin])\n }\n\n getTransferables(): Transferable[] {\n return [...this.transferables]\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAA6D;AAE7D,qBAAgD;AAChD,oCAAkC;AAE3B,MAAM,8CAA8C,+CAAgC;AAAA,EACjF,gBAAgC,CAAC;AAAA,EAEzC,cAAc;AACZ,UAAM,0BAA4D;AAAA,MAChE,OAAO;AAAA,MACP,WAAW,CAAC,QAAqB;AAC/B,cAAM,QAAI,iDAAkB,GAAG;AAC/B,aAAK,cAAc,KAAK,CAAC;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,CAAC,uBAAuB,CAAC;AAAA,EACjC;AAAA,EAEA,mBAAmC;AACjC,WAAO,CAAC,GAAG,KAAK,aAAa;AAAA,EAC/B;AACF;","names":[]}