@hewliyang/headless-spreadjs 0.0.2 → 0.0.4

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 (115) hide show
  1. package/README.md +78 -50
  2. package/dist/cli/abort.d.ts +7 -0
  3. package/dist/cli/abort.d.ts.map +1 -0
  4. package/dist/cli/abort.js +35 -0
  5. package/dist/cli/abort.js.map +1 -0
  6. package/dist/cli/client.d.ts +9 -0
  7. package/dist/cli/client.d.ts.map +1 -0
  8. package/dist/cli/client.js +122 -0
  9. package/dist/cli/client.js.map +1 -0
  10. package/dist/cli/commands/clear.d.ts +3 -1
  11. package/dist/cli/commands/clear.d.ts.map +1 -1
  12. package/dist/cli/commands/clear.js +11 -9
  13. package/dist/cli/commands/clear.js.map +1 -1
  14. package/dist/cli/commands/copy.d.ts +3 -1
  15. package/dist/cli/commands/copy.d.ts.map +1 -1
  16. package/dist/cli/commands/copy.js +5 -2
  17. package/dist/cli/commands/copy.js.map +1 -1
  18. package/dist/cli/commands/create.d.ts +3 -1
  19. package/dist/cli/commands/create.d.ts.map +1 -1
  20. package/dist/cli/commands/create.js +2 -2
  21. package/dist/cli/commands/create.js.map +1 -1
  22. package/dist/cli/commands/csv.d.ts +5 -1
  23. package/dist/cli/commands/csv.d.ts.map +1 -1
  24. package/dist/cli/commands/csv.js +38 -13
  25. package/dist/cli/commands/csv.js.map +1 -1
  26. package/dist/cli/commands/deps.d.ts +11 -0
  27. package/dist/cli/commands/deps.d.ts.map +1 -0
  28. package/dist/cli/commands/deps.js +329 -0
  29. package/dist/cli/commands/deps.js.map +1 -0
  30. package/dist/cli/commands/diff.d.ts +7 -0
  31. package/dist/cli/commands/diff.d.ts.map +1 -0
  32. package/dist/cli/commands/diff.js +235 -0
  33. package/dist/cli/commands/diff.js.map +1 -0
  34. package/dist/cli/commands/eval.d.ts +3 -1
  35. package/dist/cli/commands/eval.d.ts.map +1 -1
  36. package/dist/cli/commands/eval.js +23 -8
  37. package/dist/cli/commands/eval.js.map +1 -1
  38. package/dist/cli/commands/get.d.ts +1 -0
  39. package/dist/cli/commands/get.d.ts.map +1 -1
  40. package/dist/cli/commands/get.js +5 -2
  41. package/dist/cli/commands/get.js.map +1 -1
  42. package/dist/cli/commands/info.d.ts +3 -1
  43. package/dist/cli/commands/info.d.ts.map +1 -1
  44. package/dist/cli/commands/info.js +5 -2
  45. package/dist/cli/commands/info.js.map +1 -1
  46. package/dist/cli/commands/objects.d.ts +3 -1
  47. package/dist/cli/commands/objects.d.ts.map +1 -1
  48. package/dist/cli/commands/objects.js +5 -6
  49. package/dist/cli/commands/objects.js.map +1 -1
  50. package/dist/cli/commands/resize.d.ts +1 -0
  51. package/dist/cli/commands/resize.d.ts.map +1 -1
  52. package/dist/cli/commands/resize.js +67 -29
  53. package/dist/cli/commands/resize.js.map +1 -1
  54. package/dist/cli/commands/rows-cols.d.ts +1 -0
  55. package/dist/cli/commands/rows-cols.d.ts.map +1 -1
  56. package/dist/cli/commands/rows-cols.js +101 -45
  57. package/dist/cli/commands/rows-cols.js.map +1 -1
  58. package/dist/cli/commands/screenshot.d.ts +8 -0
  59. package/dist/cli/commands/screenshot.d.ts.map +1 -0
  60. package/dist/cli/commands/screenshot.js +260 -0
  61. package/dist/cli/commands/screenshot.js.map +1 -0
  62. package/dist/cli/commands/search.d.ts +1 -0
  63. package/dist/cli/commands/search.d.ts.map +1 -1
  64. package/dist/cli/commands/search.js +16 -8
  65. package/dist/cli/commands/search.js.map +1 -1
  66. package/dist/cli/commands/set.d.ts +3 -1
  67. package/dist/cli/commands/set.d.ts.map +1 -1
  68. package/dist/cli/commands/set.js +72 -25
  69. package/dist/cli/commands/set.js.map +1 -1
  70. package/dist/cli/commands/sheet.d.ts +3 -1
  71. package/dist/cli/commands/sheet.d.ts.map +1 -1
  72. package/dist/cli/commands/sheet.js +20 -10
  73. package/dist/cli/commands/sheet.js.map +1 -1
  74. package/dist/cli/context.d.ts +18 -6
  75. package/dist/cli/context.d.ts.map +1 -1
  76. package/dist/cli/context.js +93 -8
  77. package/dist/cli/context.js.map +1 -1
  78. package/dist/cli/daemon-entry.d.ts +3 -0
  79. package/dist/cli/daemon-entry.d.ts.map +1 -0
  80. package/dist/cli/daemon-entry.js +4 -0
  81. package/dist/cli/daemon-entry.js.map +1 -0
  82. package/dist/cli/daemon.d.ts +4 -0
  83. package/dist/cli/daemon.d.ts.map +1 -0
  84. package/dist/cli/daemon.js +330 -0
  85. package/dist/cli/daemon.js.map +1 -0
  86. package/dist/cli/dispatch.d.ts +5 -0
  87. package/dist/cli/dispatch.d.ts.map +1 -0
  88. package/dist/cli/dispatch.js +353 -0
  89. package/dist/cli/dispatch.js.map +1 -0
  90. package/dist/cli/file-cache.d.ts +23 -0
  91. package/dist/cli/file-cache.d.ts.map +1 -0
  92. package/dist/cli/file-cache.js +102 -0
  93. package/dist/cli/file-cache.js.map +1 -0
  94. package/dist/cli/index.js +34 -175
  95. package/dist/cli/index.js.map +1 -1
  96. package/dist/cli/main.d.ts +2 -0
  97. package/dist/cli/main.d.ts.map +1 -0
  98. package/dist/cli/main.js +210 -0
  99. package/dist/cli/main.js.map +1 -0
  100. package/dist/cli/output.d.ts +9 -6
  101. package/dist/cli/output.d.ts.map +1 -1
  102. package/dist/cli/output.js +36 -8
  103. package/dist/cli/output.js.map +1 -1
  104. package/dist/cli/styles.d.ts +14 -19
  105. package/dist/cli/styles.d.ts.map +1 -1
  106. package/dist/cli/styles.js +65 -39
  107. package/dist/cli/styles.js.map +1 -1
  108. package/dist/excel-file.d.ts +3 -1
  109. package/dist/excel-file.d.ts.map +1 -1
  110. package/dist/excel-file.js +50 -6
  111. package/dist/excel-file.js.map +1 -1
  112. package/dist/shims.d.ts.map +1 -1
  113. package/dist/shims.js +52 -0
  114. package/dist/shims.js.map +1 -1
  115. package/package.json +9 -1
package/dist/cli/index.js CHANGED
@@ -1,183 +1,42 @@
1
1
  #!/usr/bin/env node
2
- import { clear } from "./commands/clear.js";
3
- import { copy } from "./commands/copy.js";
4
- import { create } from "./commands/create.js";
5
- import { csv } from "./commands/csv.js";
6
- import { evalCode } from "./commands/eval.js";
7
- import { get } from "./commands/get.js";
8
- import { info } from "./commands/info.js";
9
- import { objects } from "./commands/objects.js";
10
- import { resize } from "./commands/resize.js";
11
- import { rowsCols } from "./commands/rows-cols.js";
12
- import { search } from "./commands/search.js";
13
- import { set } from "./commands/set.js";
14
- import { sheet } from "./commands/sheet.js";
15
- const USAGE = `Usage: hsx <command> [args]
16
-
17
- Commands:
18
- create <file> Create a new Excel file
19
- info <file> Show workbook metadata
20
- get <file> <ref> Read cells (Sheet1!A1:C10)
21
- csv <file> <ref> Read range as CSV
22
- set <file> <ref> [json] Write cells (JSON from arg or stdin)
23
- clear <file> <ref> [--type all|styles] Clear a range (default: values only)
24
- search <file> <term> [--sheet S] [--regex] Search for values across sheets
25
- copy <file> <src> <dst> Copy range (formulas + styles)
26
- sheet <file> <op> [args] list | create | delete | rename
27
- rc <file> <op> <dim> [--ref R] [--count N] Insert/delete/hide/freeze rows or columns
28
- resize <file> [--columns A:D] [--width N] Resize column widths or row heights
29
- objects <file> [--sheet <name>] List charts, tables, pivots
30
- eval <file> [code] Execute arbitrary JS (code from arg or stdin)
31
-
32
- Reference format:
33
- Sheet1!A1:C10 range on named sheet
34
- A1:C10 range on active sheet
35
- A1 single cell
36
-
37
- Globals available in eval:
38
- workbook SpreadJS Workbook instance
39
- sheet Active worksheet
40
- GC GC.Spread.Sheets namespace
41
- file ExcelFile wrapper (batch, save, toJSON)`;
42
- function flag(args, name) {
43
- const idx = args.indexOf(name);
44
- return idx !== -1 ? args[idx + 1] : undefined;
45
- }
46
- function hasFlag(args, name) {
47
- return args.includes(name);
48
- }
49
- async function main() {
50
- const args = process.argv.slice(2);
51
- if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
52
- console.log(USAGE);
53
- process.exit(0);
2
+ const MAX_ERROR_MESSAGE_LENGTH = 500;
3
+ const UNSUPPORTED_SPREADJS_FEATURE_ERROR = "SpreadJS failed (the file may contain unsupported features such as form controls)";
4
+ function toErrorMessage(reason) {
5
+ const message = reason instanceof Error ? reason.message : String(reason ?? "");
6
+ const lower = message.toLowerCase();
7
+ const looksLikeUnsupportedSpreadJsFeature = lower.includes("form control") ||
8
+ lower.includes("shape") ||
9
+ lower.includes("chart") ||
10
+ lower.includes("canvas") ||
11
+ lower.includes("getcontext") ||
12
+ lower.includes("todataurl");
13
+ if (looksLikeUnsupportedSpreadJsFeature &&
14
+ message.length > MAX_ERROR_MESSAGE_LENGTH) {
15
+ return UNSUPPORTED_SPREADJS_FEATURE_ERROR;
54
16
  }
55
- const command = args[0];
56
- const rest = args.slice(1);
57
- try {
58
- switch (command) {
59
- case "create": {
60
- const file = requireArg(rest, 0, "create <file>");
61
- await create(file);
62
- break;
63
- }
64
- case "info": {
65
- const file = requireArg(rest, 0, "info <file>");
66
- await info(file);
67
- break;
68
- }
69
- case "get": {
70
- const file = requireArg(rest, 0, "get <file> <ref>");
71
- const ref = requireArg(rest, 1, "get <file> <ref>");
72
- const styles = !hasFlag(rest, "--no-styles");
73
- await get(file, ref, { styles });
74
- break;
75
- }
76
- case "csv": {
77
- const file = requireArg(rest, 0, "csv <file> <ref>");
78
- const ref = requireArg(rest, 1, "csv <file> <ref>");
79
- await csv(file, ref);
80
- break;
81
- }
82
- case "set": {
83
- const file = requireArg(rest, 0, "set <file> <ref> [json]");
84
- const ref = requireArg(rest, 1, "set <file> <ref> [json]");
85
- const json = rest[2]; // optional, reads stdin if missing
86
- await set(file, ref, json);
87
- break;
88
- }
89
- case "clear": {
90
- const file = requireArg(rest, 0, "clear <file> <ref>");
91
- const ref = requireArg(rest, 1, "clear <file> <ref>");
92
- const clearType = (flag(rest, "--type") ?? "values");
93
- await clear(file, ref, clearType);
94
- break;
95
- }
96
- case "search": {
97
- const file = requireArg(rest, 0, "search <file> <term>");
98
- const term = requireArg(rest, 1, "search <file> <term>");
99
- await search(file, term, {
100
- sheet: flag(rest, "--sheet"),
101
- matchCase: hasFlag(rest, "--match-case"),
102
- regex: hasFlag(rest, "--regex"),
103
- maxResults: flag(rest, "--max")
104
- ? parseInt(flag(rest, "--max"), 10)
105
- : undefined,
106
- });
107
- break;
108
- }
109
- case "copy": {
110
- const file = requireArg(rest, 0, "copy <file> <src> <dst>");
111
- const src = requireArg(rest, 1, "copy <file> <src> <dst>");
112
- const dst = requireArg(rest, 2, "copy <file> <src> <dst>");
113
- await copy(file, src, dst);
114
- break;
115
- }
116
- case "sheet": {
117
- const file = requireArg(rest, 0, "sheet <file> <op> [args]");
118
- const op = requireArg(rest, 1, "sheet <file> <op> [args]");
119
- const opArgs = rest.slice(2);
120
- await sheet(file, op, opArgs);
121
- break;
122
- }
123
- case "rc": {
124
- const file = requireArg(rest, 0, "rc <file> <op> <dim>");
125
- const op = requireArg(rest, 1, "rc <file> <op> <dim>");
126
- const dim = requireArg(rest, 2, "rc <file> <op> <dim>");
127
- await rowsCols(file, op, dim, {
128
- sheet: flag(rest, "--sheet"),
129
- ref: flag(rest, "--ref"),
130
- count: flag(rest, "--count")
131
- ? parseInt(flag(rest, "--count"), 10)
132
- : undefined,
133
- });
134
- break;
135
- }
136
- case "resize": {
137
- const file = requireArg(rest, 0, "resize <file> [options]");
138
- await resize(file, flag(rest, "--sheet"), {
139
- columns: flag(rest, "--columns"),
140
- rows: flag(rest, "--rows"),
141
- width: flag(rest, "--width")
142
- ? parseFloat(flag(rest, "--width"))
143
- : undefined,
144
- height: flag(rest, "--height")
145
- ? parseFloat(flag(rest, "--height"))
146
- : undefined,
147
- });
148
- break;
149
- }
150
- case "objects": {
151
- const file = requireArg(rest, 0, "objects <file>");
152
- await objects(file, flag(rest, "--sheet"));
153
- break;
154
- }
155
- case "eval": {
156
- const file = requireArg(rest, 0, "eval <file> [code]");
157
- const code = rest[1]; // optional, reads stdin if missing
158
- await evalCode(file, code);
159
- break;
160
- }
161
- default:
162
- console.error(`Unknown command: ${command}\n`);
163
- console.log(USAGE);
164
- process.exit(1);
165
- }
166
- process.exit(0);
17
+ if (message.length > MAX_ERROR_MESSAGE_LENGTH) {
18
+ return `${message.slice(0, MAX_ERROR_MESSAGE_LENGTH)}...`;
167
19
  }
168
- catch (err) {
169
- const message = err instanceof Error ? err.message : String(err);
170
- process.stderr.write(`${JSON.stringify({ error: message })}\n`);
171
- process.exit(1);
20
+ return message;
21
+ }
22
+ function reportFatalError(reason) {
23
+ const err = reason;
24
+ if (err?.code === "EPIPE") {
25
+ process.exit(0);
172
26
  }
27
+ process.stderr.write(`${JSON.stringify({ error: toErrorMessage(reason) })}\n`);
28
+ process.exit(1);
173
29
  }
174
- function requireArg(args, index, usage) {
175
- const value = args[index];
176
- if (!value || value.startsWith("--")) {
177
- console.error(`Usage: hsx ${usage}`);
178
- process.exit(1);
30
+ function handlePipeError(err) {
31
+ if (err.code === "EPIPE") {
32
+ process.exit(0);
179
33
  }
180
- return value;
181
34
  }
182
- main();
35
+ process.stdout.on("error", handlePipeError);
36
+ process.stderr.on("error", handlePipeError);
37
+ process.on("uncaughtException", reportFatalError);
38
+ process.on("unhandledRejection", reportFatalError);
39
+ const { main } = await import("./main.js");
40
+ await main().catch(reportFatalError);
41
+ export {};
183
42
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,kCAAkC,GACtC,mFAAmF,CAAC;AAEtF,SAAS,cAAc,CAAC,MAAe;IACrC,MAAM,OAAO,GACX,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,mCAAmC,GACvC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC9B,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxB,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE9B,IACE,mCAAmC;QACnC,OAAO,CAAC,MAAM,GAAG,wBAAwB,EACzC,CAAC;QACD,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;QAC9C,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,KAAK,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAe;IACvC,MAAM,GAAG,GAAG,MAA+B,CAAC;IAC5C,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CACzD,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,GAA0B;IACjD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC5C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAE5C,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;AAClD,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;AAEnD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;AAC3C,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function main(): Promise<void>;
2
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AA8IA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAoI1C"}
@@ -0,0 +1,210 @@
1
+ import { createRequire } from "node:module";
2
+ import { registerSignalTimeout } from "./abort.js";
3
+ import { spawnDaemon, tryDaemon, tryExistingDaemon } from "./client.js";
4
+ import { dispatch, USAGE } from "./dispatch.js";
5
+ import { createIoContext, runWithIo } from "./output.js";
6
+ const DEFAULT_TIMEOUT_MS = 30_000;
7
+ function hasFlag(args, name) {
8
+ return args.includes(name);
9
+ }
10
+ function parseTimeoutValue(raw) {
11
+ const value = raw.trim();
12
+ if (!/^\d+(\.\d+)?$/.test(value)) {
13
+ throw new Error("Invalid --timeout value (expected seconds)");
14
+ }
15
+ const seconds = Number.parseFloat(value);
16
+ if (!Number.isFinite(seconds) || seconds <= 0) {
17
+ throw new Error("Invalid --timeout value (expected seconds)");
18
+ }
19
+ return Math.floor(seconds * 1000);
20
+ }
21
+ function parseGlobalOptions(args) {
22
+ const out = [];
23
+ let timeoutMs = DEFAULT_TIMEOUT_MS;
24
+ for (let i = 0; i < args.length; i++) {
25
+ const arg = args[i];
26
+ if (arg === "--timeout") {
27
+ const raw = args[i + 1];
28
+ if (!raw || raw.startsWith("--")) {
29
+ throw new Error("Usage: --timeout <seconds>");
30
+ }
31
+ timeoutMs = parseTimeoutValue(raw);
32
+ i++;
33
+ continue;
34
+ }
35
+ if (arg.startsWith("--timeout=")) {
36
+ timeoutMs = parseTimeoutValue(arg.slice("--timeout=".length));
37
+ continue;
38
+ }
39
+ out.push(arg);
40
+ }
41
+ return { args: out, timeoutMs };
42
+ }
43
+ async function runWithTimeout(fn, timeoutMs) {
44
+ const controller = new AbortController();
45
+ registerSignalTimeout(controller.signal, timeoutMs, `Command timed out after ${Math.ceil(timeoutMs / 1000)}s`);
46
+ let timer = null;
47
+ try {
48
+ return await Promise.race([
49
+ fn(controller.signal),
50
+ new Promise((_, reject) => {
51
+ timer = setTimeout(() => {
52
+ const message = `Command timed out after ${Math.ceil(timeoutMs / 1000)}s`;
53
+ controller.abort(new Error(message));
54
+ reject(new Error(message));
55
+ }, timeoutMs);
56
+ }),
57
+ ]);
58
+ }
59
+ finally {
60
+ if (timer)
61
+ clearTimeout(timer);
62
+ }
63
+ }
64
+ async function writeTo(stream, data) {
65
+ await new Promise((resolve, reject) => {
66
+ let settled = false;
67
+ const finish = (err) => {
68
+ if (settled)
69
+ return;
70
+ settled = true;
71
+ stream.off("error", onError);
72
+ if (err?.code === "EPIPE" ||
73
+ err?.message?.toUpperCase().includes("EPIPE")) {
74
+ resolve();
75
+ return;
76
+ }
77
+ if (err) {
78
+ reject(err);
79
+ return;
80
+ }
81
+ resolve();
82
+ };
83
+ const onError = (err) => finish(err);
84
+ stream.once("error", onError);
85
+ try {
86
+ stream.write(data, (err) => {
87
+ finish(err ?? null);
88
+ });
89
+ }
90
+ catch (err) {
91
+ finish(err);
92
+ }
93
+ });
94
+ }
95
+ async function flushStdStreams() {
96
+ await Promise.all([writeTo(process.stdout, ""), writeTo(process.stderr, "")]);
97
+ }
98
+ async function exitWith(code, output) {
99
+ if (output?.stdout) {
100
+ await writeTo(process.stdout, output.stdout);
101
+ }
102
+ if (output?.stderr) {
103
+ await writeTo(process.stderr, output.stderr);
104
+ }
105
+ await flushStdStreams();
106
+ process.exit(code);
107
+ }
108
+ export async function main() {
109
+ let args;
110
+ let timeoutMs;
111
+ try {
112
+ const parsed = parseGlobalOptions(process.argv.slice(2));
113
+ args = parsed.args;
114
+ timeoutMs = parsed.timeoutMs;
115
+ }
116
+ catch (err) {
117
+ const message = err instanceof Error ? err.message : String(err);
118
+ return exitWith(1, { stderr: `${JSON.stringify({ error: message })}\n` });
119
+ }
120
+ if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
121
+ return exitWith(0, { stdout: `${USAGE}\n` });
122
+ }
123
+ if (args[0] === "--version" || args[0] === "-v") {
124
+ const require = createRequire(import.meta.url);
125
+ const { version } = require("../../package.json");
126
+ return exitWith(0, { stdout: `${version}\n` });
127
+ }
128
+ const noDaemon = hasFlag(args, "--no-daemon");
129
+ const filteredArgs = args.filter((a) => a !== "--no-daemon");
130
+ if (filteredArgs[0] === "daemon") {
131
+ const sub = filteredArgs[1];
132
+ if (sub === "start") {
133
+ try {
134
+ await spawnDaemon(timeoutMs);
135
+ return exitWith(0, {
136
+ stdout: `${JSON.stringify({ daemon: "started" })}\n`,
137
+ });
138
+ }
139
+ catch (err) {
140
+ const message = err instanceof Error ? err.message : String(err);
141
+ return exitWith(1, {
142
+ stderr: `${JSON.stringify({ error: message })}\n`,
143
+ });
144
+ }
145
+ }
146
+ if (sub === "stop" || sub === "status" || sub === "flush") {
147
+ const result = await tryExistingDaemon(filteredArgs, process.cwd(), undefined, timeoutMs);
148
+ if (result) {
149
+ return exitWith(result.exitCode, {
150
+ stdout: result.stdout,
151
+ stderr: result.stderr,
152
+ });
153
+ }
154
+ if (sub === "status") {
155
+ return exitWith(0, {
156
+ stdout: `${JSON.stringify({ running: false })}\n`,
157
+ });
158
+ }
159
+ return exitWith(1, {
160
+ stdout: `${JSON.stringify({ error: "No daemon running" })}\n`,
161
+ });
162
+ }
163
+ return exitWith(1, {
164
+ stderr: "Usage: hsx daemon start|stop|status|flush\n",
165
+ });
166
+ }
167
+ if (!noDaemon) {
168
+ let stdin;
169
+ const command = filteredArgs[0];
170
+ const setJsonArg = filteredArgs[3];
171
+ const evalCodeArg = filteredArgs[2];
172
+ const needsStdin = (command === "set" && (!setJsonArg || setJsonArg === "-")) ||
173
+ (command === "eval" && (!evalCodeArg || evalCodeArg === "-"));
174
+ if (needsStdin && !process.stdin.isTTY) {
175
+ const chunks = [];
176
+ for await (const chunk of process.stdin) {
177
+ chunks.push(chunk);
178
+ }
179
+ stdin = Buffer.concat(chunks).toString("utf-8").trim();
180
+ }
181
+ const result = await tryDaemon(filteredArgs, process.cwd(), stdin, timeoutMs);
182
+ if (result) {
183
+ return exitWith(result.exitCode, {
184
+ stdout: result.stdout,
185
+ stderr: result.stderr,
186
+ });
187
+ }
188
+ if (stdin !== undefined) {
189
+ const io = createIoContext(stdin);
190
+ try {
191
+ await runWithTimeout((signal) => Promise.resolve(runWithIo(io, () => dispatch(filteredArgs, { signal }))), timeoutMs);
192
+ }
193
+ catch (err) {
194
+ const message = err instanceof Error ? err.message : String(err);
195
+ io.stderr += `${JSON.stringify({ error: message })}\n`;
196
+ return exitWith(1, { stdout: io.stdout, stderr: io.stderr });
197
+ }
198
+ return exitWith(0, { stdout: io.stdout, stderr: io.stderr });
199
+ }
200
+ }
201
+ try {
202
+ await runWithTimeout((signal) => dispatch(filteredArgs, { signal }), timeoutMs);
203
+ }
204
+ catch (err) {
205
+ const message = err instanceof Error ? err.message : String(err);
206
+ return exitWith(1, { stderr: `${JSON.stringify({ error: message })}\n` });
207
+ }
208
+ return exitWith(0);
209
+ }
210
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,13 @@
1
- /**
2
- * Structured JSON output helpers for CLI commands.
3
- */
1
+ export interface IoContext {
2
+ stdout: string;
3
+ stderr: string;
4
+ stdin: string | null;
5
+ }
6
+ export declare function runWithIo<T>(io: IoContext, fn: () => T | Promise<T>): T | Promise<T>;
7
+ export declare function createIoContext(stdin?: string): IoContext;
8
+ export declare function writeStdout(data: string): void;
9
+ export declare function writeStderr(data: string): void;
4
10
  export declare function ok(data: unknown): void;
5
11
  export declare function fail(message: string): never;
6
- /**
7
- * Read input from last positional arg or stdin.
8
- */
9
12
  export declare function readInput(argValue: string | undefined): Promise<string>;
10
13
  //# sourceMappingURL=output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAEtC;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAE3C;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAe7E"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAID,wBAAgB,SAAS,CAAC,CAAC,EACzB,EAAE,EAAE,SAAS,EACb,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhB;AAED,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAEzD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAO9C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAO9C;AAED,wBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAEtC;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAE3C;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB7E"}
@@ -1,20 +1,48 @@
1
- /**
2
- * Structured JSON output helpers for CLI commands.
3
- */
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ const ioStore = new AsyncLocalStorage();
3
+ export function runWithIo(io, fn) {
4
+ return ioStore.run(io, fn);
5
+ }
6
+ export function createIoContext(stdin) {
7
+ return { stdout: "", stderr: "", stdin: stdin ?? null };
8
+ }
9
+ export function writeStdout(data) {
10
+ const io = ioStore.getStore();
11
+ if (io) {
12
+ io.stdout += data;
13
+ }
14
+ else {
15
+ process.stdout.write(data);
16
+ }
17
+ }
18
+ export function writeStderr(data) {
19
+ const io = ioStore.getStore();
20
+ if (io) {
21
+ io.stderr += data;
22
+ }
23
+ else {
24
+ process.stderr.write(data);
25
+ }
26
+ }
4
27
  export function ok(data) {
5
- process.stdout.write(`${JSON.stringify(data)}\n`);
28
+ writeStdout(`${JSON.stringify(data)}\n`);
6
29
  }
7
30
  export function fail(message) {
8
31
  throw new Error(message);
9
32
  }
10
- /**
11
- * Read input from last positional arg or stdin.
12
- */
13
33
  export async function readInput(argValue) {
14
34
  if (argValue && argValue !== "-") {
15
35
  return argValue;
16
36
  }
17
- // Read from stdin
37
+ const io = ioStore.getStore();
38
+ if (io?.stdin != null) {
39
+ const text = io.stdin;
40
+ io.stdin = null;
41
+ if (!text) {
42
+ fail("No input provided. Pass as argument or pipe via stdin.");
43
+ }
44
+ return text;
45
+ }
18
46
  const chunks = [];
19
47
  for await (const chunk of process.stdin) {
20
48
  chunks.push(chunk);
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,EAAE,CAAC,IAAa;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAA4B;IAC1D,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAQrD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAa,CAAC;AAEnD,MAAM,UAAU,SAAS,CACvB,EAAa,EACb,EAAwB;IAExB,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC9B,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC9B,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,IAAa;IAC9B,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAA4B;IAC1D,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC9B,IAAI,EAAE,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC;QACtB,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,27 +1,22 @@
1
1
  /**
2
- * Agent-friendly style schema SpreadJS Style conversion.
2
+ * SpreadJS-style cell style serialization and application for CLI I/O.
3
3
  */
4
+ import type { Spread } from "@mescius/spread-sheets";
4
5
  import type { GCNamespace, SpreadStyle, SpreadWorksheet } from "../types.js";
5
- export interface CellStyles {
6
- fontWeight?: "normal" | "bold";
7
- fontStyle?: "normal" | "italic";
8
- fontSize?: number;
9
- fontFamily?: string;
10
- fontColor?: string;
11
- backgroundColor?: string;
12
- horizontalAlignment?: "left" | "center" | "right";
13
- numberFormat?: string;
14
- }
15
- export interface SerializedStyle {
6
+ export interface FontStyleObject {
16
7
  bold?: boolean;
17
8
  italic?: boolean;
18
- fontSize?: number;
9
+ underline?: boolean;
10
+ }
11
+ export interface CellStyle {
12
+ fontStyle?: FontStyleObject;
13
+ fontSize?: string;
19
14
  fontFamily?: string;
20
- fontColor?: string;
21
- backgroundColor?: string;
22
- hAlign?: string;
23
- numberFormat?: string;
15
+ foreColor?: string;
16
+ backColor?: string;
17
+ hAlign?: Spread.Sheets.HorizontalAlign;
18
+ formatter?: string;
24
19
  }
25
- export declare function serializeStyle(style: SpreadStyle): SerializedStyle | null;
26
- export declare function applyStyles(sheet: SpreadWorksheet, row: number, col: number, styles: CellStyles, GC: GCNamespace): void;
20
+ export declare function serializeStyle(style: SpreadStyle): CellStyle | null;
21
+ export declare function applyStyles(sheet: SpreadWorksheet, row: number, col: number, styles: CellStyle, GC: GCNamespace): void;
27
22
  //# sourceMappingURL=styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/cli/styles.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7E,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,eAAe,GAAG,IAAI,CAkDzE;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU,EAClB,EAAE,EAAE,WAAW,GACd,IAAI,CA2CN"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/cli/styles.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8CD,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAoDnE;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,WAAW,GACd,IAAI,CAoDN"}