@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.
- package/dist/commands/add-sections-to-page.d.ts +3 -0
- package/dist/commands/add-sections-to-page.d.ts.map +1 -0
- package/dist/commands/add-sections-to-page.js +39 -0
- package/dist/commands/add-sections-to-page.js.map +1 -0
- package/dist/commands/add-to-page.d.ts +3 -0
- package/dist/commands/add-to-page.d.ts.map +1 -0
- package/dist/commands/add-to-page.js +41 -0
- package/dist/commands/add-to-page.js.map +1 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +5 -165
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +514 -114
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/create-design-tokens.d.ts +7 -0
- package/dist/commands/create-design-tokens.d.ts.map +1 -0
- package/dist/commands/create-design-tokens.js +127 -0
- package/dist/commands/create-design-tokens.js.map +1 -0
- package/dist/commands/create-global-variable.d.ts +3 -0
- package/dist/commands/create-global-variable.d.ts.map +1 -0
- package/dist/commands/create-global-variable.js +53 -0
- package/dist/commands/create-global-variable.js.map +1 -0
- package/dist/commands/create-page.d.ts +3 -0
- package/dist/commands/create-page.d.ts.map +1 -0
- package/dist/commands/create-page.js +31 -0
- package/dist/commands/create-page.js.map +1 -0
- package/dist/commands/delete-theme-globals.d.ts +4 -0
- package/dist/commands/delete-theme-globals.d.ts.map +1 -0
- package/dist/commands/delete-theme-globals.js +48 -0
- package/dist/commands/delete-theme-globals.js.map +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +297 -25
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/get-component-props.d.ts +3 -0
- package/dist/commands/get-component-props.d.ts.map +1 -0
- package/dist/commands/get-component-props.js +32 -0
- package/dist/commands/get-component-props.js.map +1 -0
- package/dist/commands/get-page-by-type.d.ts +3 -0
- package/dist/commands/get-page-by-type.d.ts.map +1 -0
- package/dist/commands/get-page-by-type.js +25 -0
- package/dist/commands/get-page-by-type.js.map +1 -0
- package/dist/commands/get-section-values.d.ts +3 -0
- package/dist/commands/get-section-values.d.ts.map +1 -0
- package/dist/commands/get-section-values.js +39 -0
- package/dist/commands/get-section-values.js.map +1 -0
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +25 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/list-entities.d.ts +3 -0
- package/dist/commands/list-entities.d.ts.map +1 -0
- package/dist/commands/list-entities.js +32 -0
- package/dist/commands/list-entities.js.map +1 -0
- package/dist/commands/list-imported.d.ts +3 -0
- package/dist/commands/list-imported.d.ts.map +1 -0
- package/dist/commands/list-imported.js +25 -0
- package/dist/commands/list-imported.js.map +1 -0
- package/dist/commands/list-page-sections.d.ts +3 -0
- package/dist/commands/list-page-sections.d.ts.map +1 -0
- package/dist/commands/list-page-sections.js +25 -0
- package/dist/commands/list-page-sections.js.map +1 -0
- package/dist/commands/list-pages.d.ts +3 -0
- package/dist/commands/list-pages.d.ts.map +1 -0
- package/dist/commands/list-pages.js +21 -0
- package/dist/commands/list-pages.js.map +1 -0
- package/dist/commands/list-theme-globals.d.ts +3 -0
- package/dist/commands/list-theme-globals.d.ts.map +1 -0
- package/dist/commands/list-theme-globals.js +22 -0
- package/dist/commands/list-theme-globals.js.map +1 -0
- package/dist/commands/publish-theme.d.ts +3 -0
- package/dist/commands/publish-theme.d.ts.map +1 -0
- package/dist/commands/publish-theme.js +29 -0
- package/dist/commands/publish-theme.js.map +1 -0
- package/dist/commands/search-products.d.ts +3 -0
- package/dist/commands/search-products.d.ts.map +1 -0
- package/dist/commands/search-products.js +40 -0
- package/dist/commands/search-products.js.map +1 -0
- package/dist/commands/update-global-variable.d.ts +3 -0
- package/dist/commands/update-global-variable.d.ts.map +1 -0
- package/dist/commands/update-global-variable.js +47 -0
- package/dist/commands/update-global-variable.js.map +1 -0
- package/dist/commands/update-page-sections.d.ts +3 -0
- package/dist/commands/update-page-sections.d.ts.map +1 -0
- package/dist/commands/update-page-sections.js +39 -0
- package/dist/commands/update-page-sections.js.map +1 -0
- package/dist/commands/update-section-prop.d.ts +3 -0
- package/dist/commands/update-section-prop.d.ts.map +1 -0
- package/dist/commands/update-section-prop.js +59 -0
- package/dist/commands/update-section-prop.js.map +1 -0
- package/dist/commands/upload-image.d.ts +3 -0
- package/dist/commands/upload-image.d.ts.map +1 -0
- package/dist/commands/upload-image.js +38 -0
- package/dist/commands/upload-image.js.map +1 -0
- package/dist/commands/upload-images.d.ts +3 -0
- package/dist/commands/upload-images.d.ts.map +1 -0
- package/dist/commands/upload-images.js +48 -0
- package/dist/commands/upload-images.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +28 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/compile.d.ts +4 -1
- package/dist/utils/compile.d.ts.map +1 -1
- package/dist/utils/compile.js +517 -48
- package/dist/utils/compile.js.map +1 -1
- package/dist/utils/component-helpers.d.ts +29 -2
- package/dist/utils/component-helpers.d.ts.map +1 -1
- package/dist/utils/component-helpers.js +102 -15
- package/dist/utils/component-helpers.js.map +1 -1
- package/dist/utils/editor-action-client.d.ts +28 -0
- package/dist/utils/editor-action-client.d.ts.map +1 -0
- package/dist/utils/editor-action-client.js +116 -0
- package/dist/utils/editor-action-client.js.map +1 -0
- package/dist/utils/load-image.d.ts +16 -0
- package/dist/utils/load-image.d.ts.map +1 -0
- package/dist/utils/load-image.js +50 -0
- package/dist/utils/load-image.js.map +1 -0
- package/dist/utils/websocket-server.d.ts +128 -1
- package/dist/utils/websocket-server.d.ts.map +1 -1
- package/dist/utils/websocket-server.js +116 -0
- package/dist/utils/websocket-server.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/create.d.ts +0 -9
- package/dist/commands/create.d.ts.map +0 -1
- package/dist/commands/create.js +0 -9
- package/dist/commands/create.js.map +0 -1
- package/dist/commands/proxy.d.ts +0 -39
- package/dist/commands/proxy.d.ts.map +0 -1
- package/dist/commands/proxy.js +0 -212
- 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":"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"}
|
|
@@ -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":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAwC,eAAe,EAAE,MAAM,aAAa,CAAC;AACxG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+GAA+G;IAC/G,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,OAAO,CAAC;QACpB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,wDAAwD;QACxD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,kDAAkD;QAClD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,uDAAuD;QACvD,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kFAAkF;QAClF,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/D,qFAAqF;QACrF,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAChC,yFAAyF;QACzF,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;KAClC,CAAC,CAAC;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,KAAK,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IACnJ,sGAAsG;IACtG,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACzC,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE;QACP,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACjC,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;QACpC,YAAY,CAAC,EAAE,gBAAgB,CAAC;QAChC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE;QACP,SAAS,EAAE,kBAAkB,CAAC;QAC9B,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;QACpC,YAAY,CAAC,EAAE,gBAAgB,CAAC;QAChC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE;QACP,KAAK,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,cAAc,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC,CAAC;KAC5J,CAAC;CACH,GAKD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EACF,YAAY,GACZ,0BAA0B,GAC1B,kBAAkB,GAClB,qBAAqB,GACrB,sBAAsB,GACtB,oBAAoB,GACpB,oBAAoB,GACpB,qBAAqB,GACrB,qBAAqB,GACrB,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,sBAAsB,GACtB,eAAe,GACf,cAAc,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,GACD;IACE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAMD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;QACpC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,GACD;IACE,IAAI,EAAE,8BAA8B,CAAC;IACrC,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,iFAAiF;QACjF,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;QACpC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,GACD;IACE,IAAI,EAAE,6BAA6B,CAAC;IACpC,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;QACpC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAEN;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;KAAE,CAAC;CAC3D,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,aAAa,CAAC;KACrB,CAAC;CACH,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,aAAa,CAAC;KACrB,CAAC;CACH,GACD;IACE,IAAI,EAAE,0BAA0B,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAA;SAAE,CAAC;KAC3F,CAAC;CACH,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACvF,CAAC;CACH,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAA;SAAE,CAAC;KACtF,CAAC;CACH,GACD;IACE,IAAI,EAAE,+BAA+B,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE;YAAE,YAAY,CAAC,EAAE,eAAe,EAAE,CAAA;SAAE,CAAC;KAC/C,CAAC;CACH,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,CAAC;CACH,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,kEAAkE;QAClE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,sGAAsG;QACtG,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE;QACP,KAAK,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,cAAc,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC,CAAC;QAC3J,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;KAC1C,CAAC;CACH,GACD;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAChE,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAClF,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,GAID;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EACF,YAAY,GACZ,0BAA0B,GAC1B,kBAAkB,GAClB,qBAAqB,GACrB,sBAAsB,GACtB,oBAAoB,GACpB,oBAAoB,GACpB,qBAAqB,GACrB,qBAAqB,GACrB,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,sBAAsB,GACtB,eAAe,GACf,cAAc,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,GAGD;IACE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM;QAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;QAAC,aAAa,EAAE,iBAAiB,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAChI,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9F,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7F,wBAAwB,CAAC,EAAE,CACzB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAA;KAAE,KACtF,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/I,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtK,6BAA6B,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,YAAY,CAAC,EAAE,eAAe,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtH,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrG,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5H,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;IAC7N,cAAc,CAAC,EAAE,MAAM,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAClL,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9F,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,IAAI,CAAS;IAGrB,OAAO,CAAC,oBAAoB,CAAqC;gBAErD,IAAI,GAAE,MAAa;IAI/B;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0FrD;;OAEG;YACW,aAAa;IAmW3B;;;;OAIG;IACH,OAAO,CAAC,iCAAiC;IAMzC;;OAEG;IACH,OAAO,CAAC,MAAM;IAMd;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,gBAAgB;IASnC;;OAEG;IACH,wBAAwB,CAAC,SAAS,EAAE,kBAAkB,EAAE,aAAa,CAAC,EAAE,iBAAiB,EAAE,EAAE,YAAY,CAAC,EAAE,gBAAgB;IAY5H;;OAEG;IACH,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAW1D;;OAEG;IACH,yBAAyB,CAAC,WAAW,EAAE,MAAM;IAU7C;;;OAGG;IACH,6BAA6B,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,GAAG,IAAI;IAOxH;;;OAGG;IACH,kCAAkC,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,GAAG,IAAI;IAOhI;;;OAGG;IACH,kCAAkC,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,GAAG,IAAI;IAO3G;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAiCtB"}
|
|
@@ -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
|
*/
|