@ikas/component-cli 1.4.0-beta.5 → 1.4.0-beta.50

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 (131) hide show
  1. package/dist/commands/add-sections-to-page.d.ts +3 -0
  2. package/dist/commands/add-sections-to-page.d.ts.map +1 -0
  3. package/dist/commands/add-sections-to-page.js +39 -0
  4. package/dist/commands/add-sections-to-page.js.map +1 -0
  5. package/dist/commands/add-to-page.d.ts +3 -0
  6. package/dist/commands/add-to-page.d.ts.map +1 -0
  7. package/dist/commands/add-to-page.js +41 -0
  8. package/dist/commands/add-to-page.js.map +1 -0
  9. package/dist/commands/build.d.ts.map +1 -1
  10. package/dist/commands/build.js +5 -165
  11. package/dist/commands/build.js.map +1 -1
  12. package/dist/commands/config.d.ts.map +1 -1
  13. package/dist/commands/config.js +514 -114
  14. package/dist/commands/config.js.map +1 -1
  15. package/dist/commands/create-design-tokens.d.ts +7 -0
  16. package/dist/commands/create-design-tokens.d.ts.map +1 -0
  17. package/dist/commands/create-design-tokens.js +127 -0
  18. package/dist/commands/create-design-tokens.js.map +1 -0
  19. package/dist/commands/create-global-variable.d.ts +3 -0
  20. package/dist/commands/create-global-variable.d.ts.map +1 -0
  21. package/dist/commands/create-global-variable.js +53 -0
  22. package/dist/commands/create-global-variable.js.map +1 -0
  23. package/dist/commands/create-page.d.ts +3 -0
  24. package/dist/commands/create-page.d.ts.map +1 -0
  25. package/dist/commands/create-page.js +31 -0
  26. package/dist/commands/create-page.js.map +1 -0
  27. package/dist/commands/delete-theme-globals.d.ts +4 -0
  28. package/dist/commands/delete-theme-globals.d.ts.map +1 -0
  29. package/dist/commands/delete-theme-globals.js +48 -0
  30. package/dist/commands/delete-theme-globals.js.map +1 -0
  31. package/dist/commands/dev.d.ts.map +1 -1
  32. package/dist/commands/dev.js +297 -25
  33. package/dist/commands/dev.js.map +1 -1
  34. package/dist/commands/get-component-props.d.ts +3 -0
  35. package/dist/commands/get-component-props.d.ts.map +1 -0
  36. package/dist/commands/get-component-props.js +32 -0
  37. package/dist/commands/get-component-props.js.map +1 -0
  38. package/dist/commands/get-page-by-type.d.ts +3 -0
  39. package/dist/commands/get-page-by-type.d.ts.map +1 -0
  40. package/dist/commands/get-page-by-type.js +25 -0
  41. package/dist/commands/get-page-by-type.js.map +1 -0
  42. package/dist/commands/get-section-values.d.ts +3 -0
  43. package/dist/commands/get-section-values.d.ts.map +1 -0
  44. package/dist/commands/get-section-values.js +39 -0
  45. package/dist/commands/get-section-values.js.map +1 -0
  46. package/dist/commands/import.d.ts +3 -0
  47. package/dist/commands/import.d.ts.map +1 -0
  48. package/dist/commands/import.js +25 -0
  49. package/dist/commands/import.js.map +1 -0
  50. package/dist/commands/list-entities.d.ts +3 -0
  51. package/dist/commands/list-entities.d.ts.map +1 -0
  52. package/dist/commands/list-entities.js +32 -0
  53. package/dist/commands/list-entities.js.map +1 -0
  54. package/dist/commands/list-imported.d.ts +3 -0
  55. package/dist/commands/list-imported.d.ts.map +1 -0
  56. package/dist/commands/list-imported.js +25 -0
  57. package/dist/commands/list-imported.js.map +1 -0
  58. package/dist/commands/list-page-sections.d.ts +3 -0
  59. package/dist/commands/list-page-sections.d.ts.map +1 -0
  60. package/dist/commands/list-page-sections.js +25 -0
  61. package/dist/commands/list-page-sections.js.map +1 -0
  62. package/dist/commands/list-pages.d.ts +3 -0
  63. package/dist/commands/list-pages.d.ts.map +1 -0
  64. package/dist/commands/list-pages.js +21 -0
  65. package/dist/commands/list-pages.js.map +1 -0
  66. package/dist/commands/list-theme-globals.d.ts +3 -0
  67. package/dist/commands/list-theme-globals.d.ts.map +1 -0
  68. package/dist/commands/list-theme-globals.js +22 -0
  69. package/dist/commands/list-theme-globals.js.map +1 -0
  70. package/dist/commands/publish-theme.d.ts +3 -0
  71. package/dist/commands/publish-theme.d.ts.map +1 -0
  72. package/dist/commands/publish-theme.js +29 -0
  73. package/dist/commands/publish-theme.js.map +1 -0
  74. package/dist/commands/search-products.d.ts +3 -0
  75. package/dist/commands/search-products.d.ts.map +1 -0
  76. package/dist/commands/search-products.js +40 -0
  77. package/dist/commands/search-products.js.map +1 -0
  78. package/dist/commands/update-global-variable.d.ts +3 -0
  79. package/dist/commands/update-global-variable.d.ts.map +1 -0
  80. package/dist/commands/update-global-variable.js +47 -0
  81. package/dist/commands/update-global-variable.js.map +1 -0
  82. package/dist/commands/update-page-sections.d.ts +3 -0
  83. package/dist/commands/update-page-sections.d.ts.map +1 -0
  84. package/dist/commands/update-page-sections.js +39 -0
  85. package/dist/commands/update-page-sections.js.map +1 -0
  86. package/dist/commands/update-section-prop.d.ts +3 -0
  87. package/dist/commands/update-section-prop.d.ts.map +1 -0
  88. package/dist/commands/update-section-prop.js +59 -0
  89. package/dist/commands/update-section-prop.js.map +1 -0
  90. package/dist/commands/upload-image.d.ts +3 -0
  91. package/dist/commands/upload-image.d.ts.map +1 -0
  92. package/dist/commands/upload-image.js +38 -0
  93. package/dist/commands/upload-image.js.map +1 -0
  94. package/dist/commands/upload-images.d.ts +3 -0
  95. package/dist/commands/upload-images.d.ts.map +1 -0
  96. package/dist/commands/upload-images.js +48 -0
  97. package/dist/commands/upload-images.js.map +1 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +49 -0
  100. package/dist/index.js.map +1 -1
  101. package/dist/types.d.ts +28 -1
  102. package/dist/types.d.ts.map +1 -1
  103. package/dist/utils/compile.d.ts +4 -1
  104. package/dist/utils/compile.d.ts.map +1 -1
  105. package/dist/utils/compile.js +517 -48
  106. package/dist/utils/compile.js.map +1 -1
  107. package/dist/utils/component-helpers.d.ts +29 -2
  108. package/dist/utils/component-helpers.d.ts.map +1 -1
  109. package/dist/utils/component-helpers.js +102 -15
  110. package/dist/utils/component-helpers.js.map +1 -1
  111. package/dist/utils/editor-action-client.d.ts +28 -0
  112. package/dist/utils/editor-action-client.d.ts.map +1 -0
  113. package/dist/utils/editor-action-client.js +116 -0
  114. package/dist/utils/editor-action-client.js.map +1 -0
  115. package/dist/utils/load-image.d.ts +16 -0
  116. package/dist/utils/load-image.d.ts.map +1 -0
  117. package/dist/utils/load-image.js +50 -0
  118. package/dist/utils/load-image.js.map +1 -0
  119. package/dist/utils/websocket-server.d.ts +128 -1
  120. package/dist/utils/websocket-server.d.ts.map +1 -1
  121. package/dist/utils/websocket-server.js +116 -0
  122. package/dist/utils/websocket-server.js.map +1 -1
  123. package/package.json +1 -1
  124. package/dist/commands/create.d.ts +0 -9
  125. package/dist/commands/create.d.ts.map +0 -1
  126. package/dist/commands/create.js +0 -9
  127. package/dist/commands/create.js.map +0 -1
  128. package/dist/commands/proxy.d.ts +0 -39
  129. package/dist/commands/proxy.d.ts.map +0 -1
  130. package/dist/commands/proxy.js +0 -212
  131. package/dist/commands/proxy.js.map +0 -1
@@ -0,0 +1,116 @@
1
+ import { WebSocket } from "ws";
2
+ const DEFAULT_PORT = 5201;
3
+ const DEFAULT_TIMEOUT_MS = 10_000;
4
+ /**
5
+ * Open a short-lived WebSocket connection to the running `ikas-component dev`
6
+ * server, send an `editor-action` message, and wait for the editor's reply.
7
+ *
8
+ * The dev server forwards the action to its connected editor client and routes
9
+ * the result back to this socket (matched by requestId).
10
+ */
11
+ export function runEditorAction(action, payload, options = {}) {
12
+ const port = options.port ?? DEFAULT_PORT;
13
+ const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
14
+ const requestId = `cli_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
15
+ return new Promise((resolve, reject) => {
16
+ const ws = new WebSocket(`ws://127.0.0.1:${port}`);
17
+ let settled = false;
18
+ const cleanup = () => {
19
+ try {
20
+ ws.removeAllListeners();
21
+ if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {
22
+ ws.close();
23
+ }
24
+ }
25
+ catch {
26
+ // ignore
27
+ }
28
+ };
29
+ const finish = (fn) => {
30
+ if (settled)
31
+ return;
32
+ settled = true;
33
+ clearTimeout(timer);
34
+ cleanup();
35
+ fn();
36
+ };
37
+ const timer = setTimeout(() => {
38
+ finish(() => reject(new Error(`Timed out after ${timeoutMs}ms waiting for editor response`)));
39
+ }, timeoutMs);
40
+ ws.on("open", () => {
41
+ ws.send(JSON.stringify({
42
+ type: "editor-action",
43
+ requestId,
44
+ action,
45
+ payload: payload ?? {},
46
+ }));
47
+ });
48
+ ws.on("message", (data) => {
49
+ let msg;
50
+ try {
51
+ msg = JSON.parse(data.toString());
52
+ }
53
+ catch {
54
+ return;
55
+ }
56
+ // Ignore unrelated broadcasts (initial-state, component-update, etc.) —
57
+ // the dev server fans those out to every connected client on open.
58
+ if (msg?.type !== "editor-action-result" || msg.requestId !== requestId)
59
+ return;
60
+ finish(() => resolve({
61
+ success: !!msg.success,
62
+ payload: msg.payload,
63
+ error: msg.error,
64
+ }));
65
+ });
66
+ ws.on("error", (err) => {
67
+ finish(() => {
68
+ const e = err;
69
+ if (e.code === "ECONNREFUSED") {
70
+ reject(new Error(`Could not connect to dev server on port ${port}. Run \`ikas-component dev\` in another terminal first.`));
71
+ return;
72
+ }
73
+ reject(err instanceof Error ? err : new Error(String(err)));
74
+ });
75
+ });
76
+ ws.on("close", () => {
77
+ finish(() => reject(new Error("Connection closed before editor response was received")));
78
+ });
79
+ });
80
+ }
81
+ /**
82
+ * Write a single JSON line to stdout and exit — but only AFTER the write has
83
+ * fully flushed to the pipe.
84
+ *
85
+ * Why not `process.stdout.write(...); process.exit(code)`? When stdout is a pipe
86
+ * (which it always is when the MCP server shells out via `execFile`), writes are
87
+ * asynchronous. Calling `process.exit()` immediately after a large write tears
88
+ * the process down before the OS drains the pipe, truncating the JSON mid-stream.
89
+ * The MCP then sees an incomplete object and reports "no parseable JSON". This
90
+ * bites exactly the big batch responses (get-component-props for many ids,
91
+ * list-entities on a large store, add-sections-to-page echoing many sections).
92
+ *
93
+ * Passing the exit to the write callback guarantees the full line is flushed
94
+ * first. The pending write keeps the event loop alive until the callback fires.
95
+ */
96
+ function writeJsonLineAndExit(obj, code) {
97
+ process.stdout.write(JSON.stringify(obj) + "\n", () => process.exit(code));
98
+ // The write callback ends the process; control never meaningfully returns here.
99
+ return undefined;
100
+ }
101
+ /**
102
+ * Standard JSON printer for control commands. Always emits a single line of
103
+ * JSON to stdout; sets exit code 0 on success, 1 on failure. The shape is
104
+ * stable so MCP tools can parse it.
105
+ */
106
+ export function printResultAndExit(result) {
107
+ if (result.success) {
108
+ return writeJsonLineAndExit({ ok: true, ...(result.payload ?? {}) }, 0);
109
+ }
110
+ return writeJsonLineAndExit({ ok: false, error: result.error ?? "Unknown error" }, 1);
111
+ }
112
+ export function printErrorAndExit(error) {
113
+ const message = error instanceof Error ? error.message : String(error);
114
+ return writeJsonLineAndExit({ ok: false, error: message }, 1);
115
+ }
116
+ //# sourceMappingURL=editor-action-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-action-client.js","sourceRoot":"","sources":["../../src/utils/editor-action-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAQlC;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,MAwBkB,EAClB,OAAiC,EACjC,UAAiD,EAAE;IAEnD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAEhF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC;gBACH,EAAE,CAAC,kBAAkB,EAAE,CAAC;gBACxB,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;oBAC/E,EAAE,CAAC,KAAK,EAAE,CAAC;gBACb,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,EAAc,EAAE,EAAE;YAChC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,EAAE,EAAE,CAAC;QACP,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,SAAS,gCAAgC,CAAC,CAAC,CAAC,CAAC;QAChG,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACjB,EAAE,CAAC,IAAI,CACL,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,eAAe;gBACrB,SAAS;gBACT,MAAM;gBACN,OAAO,EAAE,OAAO,IAAI,EAAE;aACvB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,GAAQ,CAAC;YACb,IAAI,CAAC;gBACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;YACD,wEAAwE;YACxE,mEAAmE;YACnE,IAAI,GAAG,EAAE,IAAI,KAAK,sBAAsB,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;gBAAE,OAAO;YAChF,MAAM,CAAC,GAAG,EAAE,CACV,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO;gBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACrB,MAAM,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,GAAG,GAAoC,CAAC;gBAC/C,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBAC9B,MAAM,CACJ,IAAI,KAAK,CACP,2CAA2C,IAAI,yDAAyD,CACzG,CACF,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAOD;;;;;;;;;;;;;;GAcG;AACH,SAAS,oBAAoB,CAAC,GAAY,EAAE,IAAY;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,gFAAgF;IAChF,OAAO,SAAkB,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,oBAAoB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,oBAAoB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,oBAAoB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare const VALID_IMAGE_TYPES: string[];
2
+ export interface ImageSource {
3
+ file?: string;
4
+ url?: string;
5
+ }
6
+ export interface LoadedImage {
7
+ base64: string;
8
+ mimeType: string;
9
+ fileName: string;
10
+ }
11
+ /**
12
+ * Read an image from a local file path or URL and return its base64 (raw, no
13
+ * data: prefix), mime type, and a file name. Validates type and the 10MB limit.
14
+ */
15
+ export declare function loadImageSource(src: ImageSource): Promise<LoadedImage>;
16
+ //# sourceMappingURL=load-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-image.d.ts","sourceRoot":"","sources":["../../src/utils/load-image.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,iBAAiB,UAA6B,CAAC;AAG5D,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAsC5E"}
@@ -0,0 +1,50 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { basename, extname } from "node:path";
3
+ const MIME_BY_EXT = {
4
+ ".png": "image/png",
5
+ ".jpg": "image/jpeg",
6
+ ".jpeg": "image/jpeg",
7
+ ".webp": "image/webp",
8
+ ".gif": "image/gif",
9
+ };
10
+ export const VALID_IMAGE_TYPES = Object.values(MIME_BY_EXT);
11
+ const MAX_SIZE_BYTES = 10 * 1024 * 1024; // 10MB, mirrors the editor's IMAGE_UPLOAD_LIMIT_SIZE
12
+ /**
13
+ * Read an image from a local file path or URL and return its base64 (raw, no
14
+ * data: prefix), mime type, and a file name. Validates type and the 10MB limit.
15
+ */
16
+ export async function loadImageSource(src) {
17
+ if (src.file && src.url) {
18
+ throw new Error("Provide only one of file or url, not both");
19
+ }
20
+ if (src.file) {
21
+ const buffer = await readFile(src.file);
22
+ const ext = extname(src.file).toLowerCase();
23
+ const mimeType = MIME_BY_EXT[ext];
24
+ if (!mimeType) {
25
+ throw new Error(`Unsupported image extension "${ext || "(none)"}" for ${src.file}. Supported: ${Object.keys(MIME_BY_EXT).join(", ")}`);
26
+ }
27
+ if (buffer.byteLength > MAX_SIZE_BYTES) {
28
+ throw new Error(`${src.file} is ${(buffer.byteLength / 1024 / 1024).toFixed(1)}MB; the limit is 10MB`);
29
+ }
30
+ return { base64: buffer.toString("base64"), mimeType, fileName: basename(src.file) };
31
+ }
32
+ if (src.url) {
33
+ const res = await fetch(src.url);
34
+ if (!res.ok) {
35
+ throw new Error(`Failed to fetch ${src.url}: ${res.status} ${res.statusText}`);
36
+ }
37
+ const mimeType = (res.headers.get("content-type") || "").split(";")[0].trim();
38
+ if (!VALID_IMAGE_TYPES.includes(mimeType)) {
39
+ throw new Error(`${src.url} returned content-type "${mimeType || "(none)"}". Supported: ${VALID_IMAGE_TYPES.join(", ")}`);
40
+ }
41
+ const buffer = Buffer.from(await res.arrayBuffer());
42
+ if (buffer.byteLength > MAX_SIZE_BYTES) {
43
+ throw new Error(`${src.url} is ${(buffer.byteLength / 1024 / 1024).toFixed(1)}MB; the limit is 10MB`);
44
+ }
45
+ const urlName = basename(new URL(src.url).pathname) || "image";
46
+ return { base64: buffer.toString("base64"), mimeType, fileName: urlName };
47
+ }
48
+ throw new Error("Provide a file path or url");
49
+ }
50
+ //# sourceMappingURL=load-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-image.js","sourceRoot":"","sources":["../../src/utils/load-image.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ComponentProp } from "../types.js";
1
+ import type { ComponentProp, PropTranslation } from "../types.js";
2
2
  import type { IThemePropGroupData } from "./component-helpers.js";
3
3
  /**
4
4
  * Shared module data sent to editors (chunk extracted by code splitting)
@@ -10,6 +10,11 @@ export interface ISharedModuleData {
10
10
  compiledClientJs: string;
11
11
  canvasClientJs: string;
12
12
  compiledCss: string;
13
+ /**
14
+ * SHA-256 of the compiled artifacts. Editors compare this to their stored hash and skip
15
+ * applying the update when unchanged, so unrelated saves don't re-flag every component.
16
+ */
17
+ contentHash?: string;
13
18
  }
14
19
  /**
15
20
  * Global style data for a code component project (unscoped CSS)
@@ -17,6 +22,13 @@ export interface ISharedModuleData {
17
22
  export interface IGlobalStyleData {
18
23
  projectId: string;
19
24
  compiledCss: string;
25
+ /**
26
+ * Bumped only when `compiledCss` actually changes between rebuilds. Lets the editor (and
27
+ * the publish UI) show a "globals updated" indicator independently of any component, so
28
+ * designers can publish global-CSS edits as a standalone unit without re-flagging every
29
+ * code component.
30
+ */
31
+ updatedAt?: number;
20
32
  }
21
33
  /**
22
34
  * Code component data sent to editors
@@ -24,7 +36,11 @@ export interface IGlobalStyleData {
24
36
  export interface ICodeComponentData {
25
37
  id: string;
26
38
  name: string;
39
+ /** Code-owned default-locale display label (falls back to name). */
40
+ displayName?: string;
27
41
  projectId?: string;
42
+ /** Studio-authored per-locale overrides of the component's own name, sent so the editor can diff on connect */
43
+ translations?: PropTranslation[];
28
44
  props: Array<{
29
45
  id: string;
30
46
  name: string;
@@ -46,6 +62,8 @@ export interface ICodeComponentData {
46
62
  }>;
47
63
  /** For COMPONENT/COMPONENT_LIST props — restrict which components can be selected */
48
64
  filteredComponentIds?: string[];
65
+ /** Studio-authored per-locale label overrides, sent so the editor can diff on connect */
66
+ translations?: PropTranslation[];
49
67
  }>;
50
68
  compiledServerJs: string;
51
69
  compiledClientJs: string;
@@ -76,6 +94,13 @@ export interface ICodeComponentData {
76
94
  customTypes?: Array<Record<string, any>>;
77
95
  /** Project-prefixed shared-module IDs this component depends on (transitive). */
78
96
  usedSharedModuleIds?: string[];
97
+ /**
98
+ * SHA-256 of the editor-relevant fields (compiled artifacts, props, prop groups, custom
99
+ * types, type/header/footer flags, name, projectId, usedSharedModuleIds). Editors compare
100
+ * this to their stored hash and skip applying the update when unchanged. Recomputed every
101
+ * rebuild — when it matches, no `updatedAt` bump and no "has updates" badge.
102
+ */
103
+ contentHash?: string;
79
104
  }
80
105
  /**
81
106
  * Messages from dev server to editor
@@ -129,6 +154,44 @@ export type DevServerMessage = {
129
154
  enumOptions?: Record<string, string>;
130
155
  }>;
131
156
  };
157
+ } | {
158
+ type: "editor-action";
159
+ requestId: string;
160
+ action: "list-pages" | "list-imported-components" | "import-component" | "add-section-to-page" | "add-sections-to-page" | "list-page-sections" | "get-section-values" | "get-component-props" | "update-section-prop" | "upload-image" | "search-products" | "list-entities" | "get-page-by-type" | "update-page-sections" | "upload-images" | "list-locales";
161
+ payload?: any;
162
+ } | {
163
+ type: "editor-action-result";
164
+ requestId: string;
165
+ success: boolean;
166
+ payload?: any;
167
+ error?: string;
168
+ } | {
169
+ type: "apply-prop-translation";
170
+ payload: {
171
+ componentId: string;
172
+ propName: string;
173
+ locale: string;
174
+ translation: PropTranslation | null;
175
+ timestamp: number;
176
+ };
177
+ } | {
178
+ type: "apply-prop-group-translation";
179
+ payload: {
180
+ componentId: string;
181
+ /** Global group id (`${componentId}_pg_${localId}`), matching editor storage. */
182
+ propGroupId: string;
183
+ locale: string;
184
+ translation: PropTranslation | null;
185
+ timestamp: number;
186
+ };
187
+ } | {
188
+ type: "apply-component-translation";
189
+ payload: {
190
+ componentId: string;
191
+ locale: string;
192
+ translation: PropTranslation | null;
193
+ timestamp: number;
194
+ };
132
195
  };
133
196
  /**
134
197
  * Messages from editor to dev server
@@ -161,6 +224,18 @@ export type EditorMessage = {
161
224
  propName: string;
162
225
  prop: ComponentProp;
163
226
  };
227
+ } | {
228
+ type: "update-prop-localization";
229
+ requestId: string;
230
+ payload: {
231
+ componentId: string;
232
+ propName: string;
233
+ updates: {
234
+ displayName?: string;
235
+ description?: string;
236
+ translations?: PropTranslation[];
237
+ };
238
+ };
164
239
  } | {
165
240
  type: "delete-prop";
166
241
  requestId: string;
@@ -189,6 +264,16 @@ export type EditorMessage = {
189
264
  propGroup: {
190
265
  name?: string;
191
266
  description?: string;
267
+ translations?: PropTranslation[];
268
+ };
269
+ };
270
+ } | {
271
+ type: "update-component-localization";
272
+ requestId: string;
273
+ payload: {
274
+ componentId: string;
275
+ updates: {
276
+ translations?: PropTranslation[];
192
277
  };
193
278
  };
194
279
  } | {
@@ -253,6 +338,17 @@ export type EditorMessage = {
253
338
  payload: {
254
339
  enumId: string;
255
340
  };
341
+ } | {
342
+ type: "editor-action";
343
+ requestId: string;
344
+ action: "list-pages" | "list-imported-components" | "import-component" | "add-section-to-page" | "add-sections-to-page" | "list-page-sections" | "get-section-values" | "get-component-props" | "update-section-prop" | "upload-image" | "search-products" | "list-entities" | "get-page-by-type" | "update-page-sections" | "upload-images" | "list-locales";
345
+ payload?: any;
346
+ } | {
347
+ type: "editor-action-result";
348
+ requestId: string;
349
+ success: boolean;
350
+ payload?: any;
351
+ error?: string;
256
352
  };
257
353
  /**
258
354
  * Handlers for editor messages that require action from dev.ts
@@ -268,6 +364,11 @@ export interface EditorMessageHandlers {
268
364
  }>;
269
365
  onAddProp?: (componentId: string, prop: ComponentProp) => Promise<void>;
270
366
  onUpdateProp?: (componentId: string, propName: string, prop: ComponentProp) => Promise<void>;
367
+ onUpdatePropLocalization?: (componentId: string, propName: string, updates: {
368
+ displayName?: string;
369
+ description?: string;
370
+ translations?: PropTranslation[];
371
+ }) => Promise<void>;
271
372
  onDeleteProp?: (componentId: string, propName: string) => Promise<void>;
272
373
  onAddPropGroup?: (componentId: string, propGroup: {
273
374
  id: string;
@@ -278,6 +379,10 @@ export interface EditorMessageHandlers {
278
379
  onUpdatePropGroup?: (componentId: string, propGroupId: string, propGroup: {
279
380
  name?: string;
280
381
  description?: string;
382
+ translations?: PropTranslation[];
383
+ }) => Promise<void>;
384
+ onUpdateComponentLocalization?: (componentId: string, updates: {
385
+ translations?: PropTranslation[];
281
386
  }) => Promise<void>;
282
387
  onDeletePropGroup?: (componentId: string, propGroupId: string) => Promise<void>;
283
388
  onMovePropToGroup?: (componentId: string, propName: string, groupId: string | null) => Promise<void>;
@@ -312,6 +417,7 @@ export declare class DevServerWebSocket {
312
417
  private httpServer;
313
418
  private clients;
314
419
  private port;
420
+ private pendingEditorActions;
315
421
  constructor(port?: number);
316
422
  /**
317
423
  * Start the WebSocket server
@@ -321,6 +427,12 @@ export declare class DevServerWebSocket {
321
427
  * Handle incoming messages from editor
322
428
  */
323
429
  private handleMessage;
430
+ /**
431
+ * Remove pending editor-action entries originated by a disconnecting client,
432
+ * so we don't leak entries and don't accidentally route a future reply to a
433
+ * dead socket.
434
+ */
435
+ private dropPendingEditorActionsForClient;
324
436
  /**
325
437
  * Send message to a specific client
326
438
  */
@@ -341,6 +453,21 @@ export declare class DevServerWebSocket {
341
453
  * Broadcast a component deletion
342
454
  */
343
455
  broadcastComponentDeleted(componentId: string): void;
456
+ /**
457
+ * Authoritatively push a single prop translation (config → editor).
458
+ * `translation: null` removes that locale's row in studio.
459
+ */
460
+ broadcastApplyPropTranslation(componentId: string, propName: string, locale: string, translation: PropTranslation | null): void;
461
+ /**
462
+ * Authoritatively push a single prop-group translation (config → editor).
463
+ * `propGroupId` is the global id; `translation: null` removes that locale's row.
464
+ */
465
+ broadcastApplyPropGroupTranslation(componentId: string, propGroupId: string, locale: string, translation: PropTranslation | null): void;
466
+ /**
467
+ * Authoritatively push a single component name translation (config → editor).
468
+ * `translation: null` removes that locale's row.
469
+ */
470
+ broadcastApplyComponentTranslation(componentId: string, locale: string, translation: PropTranslation | null): void;
344
471
  /**
345
472
  * Get number of connected clients
346
473
  */
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-server.d.ts","sourceRoot":"","sources":["../../src/utils/websocket-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket-server.d.ts","sourceRoot":"","sources":["../../src/utils/websocket-server.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,9 @@ export class DevServerWebSocket {
9
9
  httpServer = null;
10
10
  clients = new Set();
11
11
  port;
12
+ // Tracks in-flight editor-action requests: requestId → originating control-client ws.
13
+ // Used to route `editor-action-result` from the editor back to the right sender.
14
+ pendingEditorActions = new Map();
12
15
  constructor(port = 5201) {
13
16
  this.port = port;
14
17
  }
@@ -71,11 +74,13 @@ export class DevServerWebSocket {
71
74
  });
72
75
  ws.on("close", () => {
73
76
  this.clients.delete(ws);
77
+ this.dropPendingEditorActionsForClient(ws);
74
78
  console.log(chalk.yellow(" Editor disconnected"));
75
79
  });
76
80
  ws.on("error", (error) => {
77
81
  console.error(chalk.red(" WebSocket error:"), error.message);
78
82
  this.clients.delete(ws);
83
+ this.dropPendingEditorActionsForClient(ws);
79
84
  });
80
85
  });
81
86
  this.httpServer.on("error", (error) => {
@@ -195,6 +200,20 @@ export class DevServerWebSocket {
195
200
  }
196
201
  break;
197
202
  }
203
+ case "update-prop-localization": {
204
+ if (!handlers.onUpdatePropLocalization) {
205
+ this.sendTo(ws, { type: "command-error", requestId: message.requestId, error: "update-prop-localization not supported" });
206
+ break;
207
+ }
208
+ try {
209
+ await handlers.onUpdatePropLocalization(message.payload.componentId, message.payload.propName, message.payload.updates);
210
+ this.sendTo(ws, { type: "command-success", requestId: message.requestId });
211
+ }
212
+ catch (e) {
213
+ this.sendTo(ws, { type: "command-error", requestId: message.requestId, error: e.message || "Failed to update prop localization" });
214
+ }
215
+ break;
216
+ }
198
217
  case "delete-prop": {
199
218
  if (!handlers.onDeleteProp) {
200
219
  this.sendTo(ws, {
@@ -248,6 +267,20 @@ export class DevServerWebSocket {
248
267
  }
249
268
  break;
250
269
  }
270
+ case "update-component-localization": {
271
+ if (!handlers.onUpdateComponentLocalization) {
272
+ this.sendTo(ws, { type: "command-error", requestId: message.requestId, error: "update-component-localization not supported" });
273
+ break;
274
+ }
275
+ try {
276
+ await handlers.onUpdateComponentLocalization(message.payload.componentId, message.payload.updates);
277
+ this.sendTo(ws, { type: "command-success", requestId: message.requestId });
278
+ }
279
+ catch (e) {
280
+ this.sendTo(ws, { type: "command-error", requestId: message.requestId, error: e.message || "Failed to update component localization" });
281
+ }
282
+ break;
283
+ }
251
284
  case "delete-prop-group": {
252
285
  if (!handlers.onDeletePropGroup) {
253
286
  this.sendTo(ws, { type: "command-error", requestId: message.requestId, error: "delete-prop-group not supported" });
@@ -345,6 +378,48 @@ export class DevServerWebSocket {
345
378
  }
346
379
  break;
347
380
  }
381
+ case "editor-action": {
382
+ // Control client (e.g., `ikas-component list-pages`) asks the dev server
383
+ // to forward an action to the connected editor. Track the sender so we
384
+ // can route the editor's reply back, then broadcast to all other clients.
385
+ const otherClients = Array.from(this.clients).filter((c) => c !== ws && c.readyState === WebSocket.OPEN);
386
+ if (otherClients.length === 0) {
387
+ this.sendTo(ws, {
388
+ type: "editor-action-result",
389
+ requestId: message.requestId,
390
+ success: false,
391
+ error: "No editor connected — open the editor and try again",
392
+ });
393
+ break;
394
+ }
395
+ this.pendingEditorActions.set(message.requestId, ws);
396
+ const forwarded = {
397
+ type: "editor-action",
398
+ requestId: message.requestId,
399
+ action: message.action,
400
+ payload: message.payload,
401
+ };
402
+ for (const client of otherClients) {
403
+ this.sendTo(client, forwarded);
404
+ }
405
+ break;
406
+ }
407
+ case "editor-action-result": {
408
+ // Editor replied to a previously forwarded `editor-action`. Route the
409
+ // result back to the original control-client sender.
410
+ const sender = this.pendingEditorActions.get(message.requestId);
411
+ this.pendingEditorActions.delete(message.requestId);
412
+ if (sender && sender.readyState === WebSocket.OPEN) {
413
+ this.sendTo(sender, {
414
+ type: "editor-action-result",
415
+ requestId: message.requestId,
416
+ success: message.success,
417
+ payload: message.payload,
418
+ error: message.error,
419
+ });
420
+ }
421
+ break;
422
+ }
348
423
  default: {
349
424
  const unknownMessage = message;
350
425
  if (unknownMessage.requestId) {
@@ -358,6 +433,17 @@ export class DevServerWebSocket {
358
433
  }
359
434
  }
360
435
  }
436
+ /**
437
+ * Remove pending editor-action entries originated by a disconnecting client,
438
+ * so we don't leak entries and don't accidentally route a future reply to a
439
+ * dead socket.
440
+ */
441
+ dropPendingEditorActionsForClient(ws) {
442
+ for (const [requestId, sender] of this.pendingEditorActions) {
443
+ if (sender === ws)
444
+ this.pendingEditorActions.delete(requestId);
445
+ }
446
+ }
361
447
  /**
362
448
  * Send message to a specific client
363
449
  */
@@ -416,6 +502,36 @@ export class DevServerWebSocket {
416
502
  }
417
503
  });
418
504
  }
505
+ /**
506
+ * Authoritatively push a single prop translation (config → editor).
507
+ * `translation: null` removes that locale's row in studio.
508
+ */
509
+ broadcastApplyPropTranslation(componentId, propName, locale, translation) {
510
+ this.broadcast({
511
+ type: "apply-prop-translation",
512
+ payload: { componentId, propName, locale, translation, timestamp: Date.now() }
513
+ });
514
+ }
515
+ /**
516
+ * Authoritatively push a single prop-group translation (config → editor).
517
+ * `propGroupId` is the global id; `translation: null` removes that locale's row.
518
+ */
519
+ broadcastApplyPropGroupTranslation(componentId, propGroupId, locale, translation) {
520
+ this.broadcast({
521
+ type: "apply-prop-group-translation",
522
+ payload: { componentId, propGroupId, locale, translation, timestamp: Date.now() }
523
+ });
524
+ }
525
+ /**
526
+ * Authoritatively push a single component name translation (config → editor).
527
+ * `translation: null` removes that locale's row.
528
+ */
529
+ broadcastApplyComponentTranslation(componentId, locale, translation) {
530
+ this.broadcast({
531
+ type: "apply-component-translation",
532
+ payload: { componentId, locale, translation, timestamp: Date.now() }
533
+ });
534
+ }
419
535
  /**
420
536
  * Get number of connected clients
421
537
  */