cvm-server 0.6.0 → 0.8.0

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 (2) hide show
  1. package/main.cjs +1331 -1090
  2. package/package.json +1 -1
package/main.cjs CHANGED
@@ -2,8 +2,8 @@
2
2
  const mcp_js = require("@modelcontextprotocol/sdk/server/mcp.js");
3
3
  const stdio_js = require("@modelcontextprotocol/sdk/server/stdio.js");
4
4
  const zod = require("zod");
5
- const s$2 = require("typescript");
6
- const M = require("fs");
5
+ const n$1 = require("typescript");
6
+ const P$1 = require("fs");
7
7
  const c$2 = require("path");
8
8
  const mongodb = require("mongodb");
9
9
  const promises = require("fs/promises");
@@ -26,51 +26,51 @@ function _interopNamespaceDefault(e2) {
26
26
  n2.default = e2;
27
27
  return Object.freeze(n2);
28
28
  }
29
- const s__namespace = /* @__PURE__ */ _interopNamespaceDefault(s$2);
30
- const M__namespace = /* @__PURE__ */ _interopNamespaceDefault(M);
29
+ const n__namespace = /* @__PURE__ */ _interopNamespaceDefault(n$1);
30
+ const P__namespace = /* @__PURE__ */ _interopNamespaceDefault(P$1);
31
31
  const c__namespace = /* @__PURE__ */ _interopNamespaceDefault(c$2);
32
32
  const dotenv__namespace = /* @__PURE__ */ _interopNamespaceDefault(dotenv);
33
- var R = Object.defineProperty;
34
- var h$1 = (n2, l2, e2) => l2 in n2 ? R(n2, l2, { enumerable: true, configurable: true, writable: true, value: e2 }) : n2[l2] = e2;
35
- var u$1 = (n2, l2, e2) => h$1(n2, typeof l2 != "symbol" ? l2 + "" : l2, e2);
36
- var r$1 = /* @__PURE__ */ ((n2) => (n2.PUSH = "PUSH", n2.PUSH_UNDEFINED = "PUSH_UNDEFINED", n2.POP = "POP", n2.LOAD = "LOAD", n2.STORE = "STORE", n2.CONCAT = "CONCAT", n2.ARRAY_NEW = "ARRAY_NEW", n2.ARRAY_PUSH = "ARRAY_PUSH", n2.ARRAY_GET = "ARRAY_GET", n2.ARRAY_SET = "ARRAY_SET", n2.ARRAY_LEN = "ARRAY_LEN", n2.STRING_LEN = "STRING_LEN", n2.STRING_SUBSTRING = "STRING_SUBSTRING", n2.STRING_INDEXOF = "STRING_INDEXOF", n2.STRING_SPLIT = "STRING_SPLIT", n2.STRING_SLICE = "STRING_SLICE", n2.STRING_CHARAT = "STRING_CHARAT", n2.STRING_TOUPPERCASE = "STRING_TOUPPERCASE", n2.STRING_TOLOWERCASE = "STRING_TOLOWERCASE", n2.LENGTH = "LENGTH", n2.JSON_PARSE = "JSON_PARSE", n2.TYPEOF = "TYPEOF", n2.ADD = "ADD", n2.SUB = "SUB", n2.MUL = "MUL", n2.DIV = "DIV", n2.MOD = "MOD", n2.UNARY_MINUS = "UNARY_MINUS", n2.UNARY_PLUS = "UNARY_PLUS", n2.INC = "INC", n2.DEC = "DEC", n2.EQ = "EQ", n2.NEQ = "NEQ", n2.LT = "LT", n2.GT = "GT", n2.LTE = "LTE", n2.GTE = "GTE", n2.EQ_STRICT = "EQ_STRICT", n2.NEQ_STRICT = "NEQ_STRICT", n2.JUMP = "JUMP", n2.JUMP_IF = "JUMP_IF", n2.JUMP_IF_FALSE = "JUMP_IF_FALSE", n2.JUMP_IF_TRUE = "JUMP_IF_TRUE", n2.CALL = "CALL", n2.RETURN = "RETURN", n2.AND = "AND", n2.OR = "OR", n2.NOT = "NOT", n2.BREAK = "BREAK", n2.CONTINUE = "CONTINUE", n2.ITER_START = "ITER_START", n2.ITER_NEXT = "ITER_NEXT", n2.ITER_END = "ITER_END", n2.FS_LIST_FILES = "FS_LIST_FILES", n2.CC = "CC", n2.PRINT = "PRINT", n2.HALT = "HALT", n2))(r$1 || {});
37
- function I(n2) {
38
- const l2 = [], e2 = [];
39
- let o2 = false, T = false;
40
- const a2 = s__namespace.createSourceFile(
33
+ var f$1 = Object.defineProperty;
34
+ var p$2 = (e2, t2, i2) => t2 in e2 ? f$1(e2, t2, { enumerable: true, configurable: true, writable: true, value: i2 }) : e2[t2] = i2;
35
+ var m$2 = (e2, t2, i2) => p$2(e2, typeof t2 != "symbol" ? t2 + "" : t2, i2);
36
+ var s$2 = /* @__PURE__ */ ((e2) => (e2.PUSH = "PUSH", e2.PUSH_UNDEFINED = "PUSH_UNDEFINED", e2.POP = "POP", e2.LOAD = "LOAD", e2.STORE = "STORE", e2.CONCAT = "CONCAT", e2.ARRAY_NEW = "ARRAY_NEW", e2.ARRAY_PUSH = "ARRAY_PUSH", e2.ARRAY_GET = "ARRAY_GET", e2.ARRAY_SET = "ARRAY_SET", e2.ARRAY_LEN = "ARRAY_LEN", e2.STRING_LEN = "STRING_LEN", e2.STRING_SUBSTRING = "STRING_SUBSTRING", e2.STRING_INDEXOF = "STRING_INDEXOF", e2.STRING_SPLIT = "STRING_SPLIT", e2.STRING_SLICE = "STRING_SLICE", e2.STRING_CHARAT = "STRING_CHARAT", e2.STRING_TOUPPERCASE = "STRING_TOUPPERCASE", e2.STRING_TOLOWERCASE = "STRING_TOLOWERCASE", e2.LENGTH = "LENGTH", e2.JSON_PARSE = "JSON_PARSE", e2.TYPEOF = "TYPEOF", e2.ADD = "ADD", e2.SUB = "SUB", e2.MUL = "MUL", e2.DIV = "DIV", e2.MOD = "MOD", e2.UNARY_MINUS = "UNARY_MINUS", e2.UNARY_PLUS = "UNARY_PLUS", e2.INC = "INC", e2.DEC = "DEC", e2.EQ = "EQ", e2.NEQ = "NEQ", e2.LT = "LT", e2.GT = "GT", e2.LTE = "LTE", e2.GTE = "GTE", e2.EQ_STRICT = "EQ_STRICT", e2.NEQ_STRICT = "NEQ_STRICT", e2.JUMP = "JUMP", e2.JUMP_IF = "JUMP_IF", e2.JUMP_IF_FALSE = "JUMP_IF_FALSE", e2.JUMP_IF_TRUE = "JUMP_IF_TRUE", e2.CALL = "CALL", e2.RETURN = "RETURN", e2.AND = "AND", e2.OR = "OR", e2.NOT = "NOT", e2.BREAK = "BREAK", e2.CONTINUE = "CONTINUE", e2.ITER_START = "ITER_START", e2.ITER_NEXT = "ITER_NEXT", e2.ITER_END = "ITER_END", e2.FS_LIST_FILES = "FS_LIST_FILES", e2.CC = "CC", e2.PRINT = "PRINT", e2.HALT = "HALT", e2))(s$2 || {});
37
+ function A(e2) {
38
+ const t2 = [], i2 = [];
39
+ let r2 = false, a2 = false;
40
+ const l2 = n__namespace.createSourceFile(
41
41
  "program.ts",
42
- n2,
43
- s__namespace.ScriptTarget.Latest,
42
+ e2,
43
+ n__namespace.ScriptTarget.Latest,
44
44
  true
45
45
  );
46
- function t2(i2) {
47
- if (s__namespace.isFunctionDeclaration(i2) && i2.name && i2.name.text === "main" && (o2 = true, i2.parameters.length > 0 && l2.push("main() must not have parameters")), s__namespace.isExpressionStatement(i2) && i2.parent === a2) {
48
- const c2 = i2.expression;
49
- s__namespace.isCallExpression(c2) && s__namespace.isIdentifier(c2.expression) && c2.expression.text === "main" && (T = true);
46
+ function S(o2) {
47
+ if (n__namespace.isFunctionDeclaration(o2) && o2.name && o2.name.text === "main" && (r2 = true, o2.parameters.length > 0 && t2.push("main() must not have parameters")), n__namespace.isExpressionStatement(o2) && o2.parent === l2) {
48
+ const c2 = o2.expression;
49
+ n__namespace.isCallExpression(c2) && n__namespace.isIdentifier(c2.expression) && c2.expression.text === "main" && (a2 = true);
50
50
  }
51
- if (s__namespace.isCallExpression(i2) && s__namespace.isIdentifier(i2.expression)) {
52
- const c2 = i2.expression.text;
53
- ["setTimeout", "fetch", "require", "import"].includes(c2) && l2.push(`Unsupported function: ${c2}`);
51
+ if (n__namespace.isCallExpression(o2) && n__namespace.isIdentifier(o2.expression)) {
52
+ const c2 = o2.expression.text;
53
+ ["setTimeout", "fetch", "require", "import"].includes(c2) && t2.push(`Unsupported function: ${c2}`);
54
54
  }
55
- s__namespace.forEachChild(i2, t2);
55
+ n__namespace.forEachChild(o2, S);
56
56
  }
57
- return t2(a2), o2 || l2.push("Program must have a main() function"), o2 && !T && l2.push("main() must be called at the top level"), l2.length === 0 && e2.push({ op: r$1.HALT }), {
58
- bytecode: e2,
59
- errors: l2,
60
- hasMain: o2
57
+ return S(l2), r2 || t2.push("Program must have a main() function"), r2 && !a2 && t2.push("main() must be called at the top level"), t2.length === 0 && i2.push({ op: s$2.HALT }), {
58
+ bytecode: i2,
59
+ errors: t2,
60
+ hasMain: r2
61
61
  };
62
62
  }
63
- let N$1 = class N {
63
+ class R {
64
64
  constructor() {
65
- u$1(this, "bytecode", []);
66
- u$1(this, "contextStack", []);
65
+ m$2(this, "bytecode", []);
66
+ m$2(this, "contextStack", []);
67
67
  }
68
68
  /**
69
69
  * Emit an instruction and return its index
70
70
  */
71
- emit(l2, e2) {
72
- const o2 = this.bytecode.length;
73
- return this.bytecode.push({ op: l2, arg: e2 }), o2;
71
+ emit(t2, i2) {
72
+ const r2 = this.bytecode.length;
73
+ return this.bytecode.push({ op: t2, arg: i2 }), r2;
74
74
  }
75
75
  /**
76
76
  * Get the current address (next instruction index)
@@ -81,20 +81,20 @@ let N$1 = class N {
81
81
  /**
82
82
  * Patch a jump instruction with the target address
83
83
  */
84
- patchJump(l2, e2) {
85
- l2 >= 0 && l2 < this.bytecode.length && (this.bytecode[l2].arg = e2);
84
+ patchJump(t2, i2) {
85
+ t2 >= 0 && t2 < this.bytecode.length && (this.bytecode[t2].arg = i2);
86
86
  }
87
87
  /**
88
88
  * Patch multiple jump instructions with the same target
89
89
  */
90
- patchJumps(l2, e2) {
91
- l2.forEach((o2) => this.patchJump(o2, e2));
90
+ patchJumps(t2, i2) {
91
+ t2.forEach((r2) => this.patchJump(r2, i2));
92
92
  }
93
93
  /**
94
94
  * Push a new jump context onto the stack
95
95
  */
96
- pushContext(l2) {
97
- this.contextStack.push(l2);
96
+ pushContext(t2) {
97
+ this.contextStack.push(t2);
98
98
  }
99
99
  /**
100
100
  * Pop the current jump context from the stack
@@ -112,9 +112,11 @@ let N$1 = class N {
112
112
  * Find the nearest loop context (for break/continue)
113
113
  */
114
114
  findLoopContext() {
115
- for (let l2 = this.contextStack.length - 1; l2 >= 0; l2--)
116
- if (this.contextStack[l2].type === "loop" || this.contextStack[l2].type === "foreach")
117
- return this.contextStack[l2];
115
+ for (let t2 = this.contextStack.length - 1; t2 >= 0; t2--) {
116
+ const i2 = this.contextStack[t2];
117
+ if (i2.type === "loop" || i2.type === "foreach")
118
+ return i2;
119
+ }
118
120
  return null;
119
121
  }
120
122
  /**
@@ -135,281 +137,333 @@ let N$1 = class N {
135
137
  getUnclosedContexts() {
136
138
  return [...this.contextStack];
137
139
  }
140
+ }
141
+ const h$1 = (e2, t2, { compileExpression: i2, compileStatement: r2 }) => {
142
+ i2(e2.expression);
143
+ const a2 = t2.emit(s$2.JUMP_IF_FALSE, -1), l2 = {
144
+ type: "if",
145
+ endTargets: []
146
+ };
147
+ if (e2.elseStatement ? l2.elseTarget = a2 : l2.endTargets.push(a2), t2.pushContext(l2), r2(e2.thenStatement), e2.elseStatement) {
148
+ const o2 = t2.emit(s$2.JUMP, -1);
149
+ l2.endTargets.push(o2);
150
+ const c2 = t2.currentAddress();
151
+ t2.patchJump(a2, c2), r2(e2.elseStatement);
152
+ }
153
+ const S = t2.popContext();
154
+ if (S) {
155
+ const o2 = t2.currentAddress();
156
+ t2.patchJumps(S.endTargets, o2);
157
+ }
158
+ }, I = (e2, t2, { compileExpression: i2, compileStatement: r2 }) => {
159
+ const a2 = t2.currentAddress();
160
+ i2(e2.expression);
161
+ const S = {
162
+ type: "loop",
163
+ breakTargets: [t2.emit(s$2.JUMP_IF_FALSE, -1)],
164
+ continueTargets: [],
165
+ endTargets: [],
166
+ startAddress: a2
167
+ };
168
+ t2.pushContext(S), r2(e2.statement), t2.emit(s$2.JUMP, a2);
169
+ const o2 = t2.popContext();
170
+ if (o2) {
171
+ const c2 = t2.currentAddress();
172
+ t2.patchJumps(o2.breakTargets || [], c2);
173
+ }
174
+ }, y$1 = (e2, t2, { compileExpression: i2, compileStatement: r2 }) => {
175
+ const a2 = e2.initializer, l2 = e2.expression;
176
+ let S;
177
+ if (n__namespace.isVariableDeclarationList(a2))
178
+ S = a2.declarations[0].name.getText();
179
+ else if (n__namespace.isIdentifier(a2))
180
+ S = a2.text;
181
+ else
182
+ throw new Error("Unsupported for-of variable declaration");
183
+ i2(l2), t2.emit(s$2.ITER_START);
184
+ const o2 = t2.currentAddress();
185
+ t2.emit(s$2.ITER_NEXT);
186
+ const c2 = t2.emit(s$2.JUMP_IF_FALSE, -1);
187
+ t2.emit(s$2.STORE, S);
188
+ const x2 = {
189
+ type: "foreach",
190
+ breakTargets: [c2],
191
+ continueTargets: [],
192
+ endTargets: [],
193
+ startAddress: o2,
194
+ iterVariable: S
195
+ };
196
+ t2.pushContext(x2), r2(e2.statement), t2.emit(s$2.JUMP, o2);
197
+ const u2 = t2.popContext();
198
+ if (u2) {
199
+ const E2 = t2.currentAddress();
200
+ t2.patchJumps(u2.breakTargets || [], E2), t2.emit(s$2.ITER_END);
201
+ }
202
+ }, N$1 = (e2, t2, { compileStatement: i2 }) => {
203
+ e2.statements.forEach((r2) => {
204
+ i2(r2);
205
+ });
206
+ }, g$1 = (e2, t2, { compileExpression: i2 }) => {
207
+ const r2 = e2.declarationList.declarations[0];
208
+ r2.initializer && (i2(r2.initializer), t2.emit(s$2.STORE, r2.name.getText()));
209
+ }, P = (e2, t2, { compileExpression: i2 }) => {
210
+ const r2 = e2.expression;
211
+ if (n__namespace.isBinaryExpression(r2)) {
212
+ const a2 = r2.operatorToken.kind;
213
+ if (a2 === n__namespace.SyntaxKind.PlusEqualsToken || a2 === n__namespace.SyntaxKind.MinusEqualsToken || a2 === n__namespace.SyntaxKind.AsteriskEqualsToken || a2 === n__namespace.SyntaxKind.SlashEqualsToken || a2 === n__namespace.SyntaxKind.PercentEqualsToken) {
214
+ if (n__namespace.isIdentifier(r2.left)) {
215
+ switch (t2.emit(s$2.LOAD, r2.left.text), i2(r2.right), a2) {
216
+ case n__namespace.SyntaxKind.PlusEqualsToken:
217
+ n__namespace.isStringLiteral(r2.right) ? t2.emit(s$2.CONCAT) : t2.emit(s$2.ADD);
218
+ break;
219
+ case n__namespace.SyntaxKind.MinusEqualsToken:
220
+ t2.emit(s$2.SUB);
221
+ break;
222
+ case n__namespace.SyntaxKind.AsteriskEqualsToken:
223
+ t2.emit(s$2.MUL);
224
+ break;
225
+ case n__namespace.SyntaxKind.SlashEqualsToken:
226
+ t2.emit(s$2.DIV);
227
+ break;
228
+ case n__namespace.SyntaxKind.PercentEqualsToken:
229
+ t2.emit(s$2.MOD);
230
+ break;
231
+ }
232
+ t2.emit(s$2.STORE, r2.left.text);
233
+ } else if (n__namespace.isElementAccessExpression(r2.left))
234
+ throw new Error("Compound assignment to array elements not yet supported");
235
+ return;
236
+ } else if (a2 === n__namespace.SyntaxKind.EqualsToken) {
237
+ if (i2(r2.right), n__namespace.isIdentifier(r2.left))
238
+ t2.emit(s$2.STORE, r2.left.text);
239
+ else if (n__namespace.isElementAccessExpression(r2.left)) {
240
+ const l2 = `__temp_${t2.getBytecode().length}`;
241
+ t2.emit(s$2.STORE, l2), i2(r2.left.expression), i2(r2.left.argumentExpression), t2.emit(s$2.LOAD, l2), t2.emit(s$2.ARRAY_SET);
242
+ }
243
+ return;
244
+ }
245
+ }
246
+ n__namespace.isCallExpression(r2) && n__namespace.isPropertyAccessExpression(r2.expression) && r2.expression.expression.getText() === "console" && r2.expression.name.getText() === "log" ? (r2.arguments.forEach((a2) => {
247
+ i2(a2);
248
+ }), t2.emit(s$2.PRINT)) : n__namespace.isCallExpression(r2) && n__namespace.isIdentifier(r2.expression) && r2.expression.text === "CC" ? (r2.arguments.length > 0 && i2(r2.arguments[0]), t2.emit(s$2.CC), t2.emit(s$2.POP)) : n__namespace.isCallExpression(r2) && n__namespace.isPropertyAccessExpression(r2.expression) && r2.expression.name.getText() === "push" ? (i2(r2.expression.expression), r2.arguments.length > 0 && i2(r2.arguments[0]), t2.emit(s$2.ARRAY_PUSH)) : (n__namespace.isPostfixUnaryExpression(r2) || n__namespace.isPrefixUnaryExpression(r2)) && (i2(r2), t2.emit(s$2.POP));
249
+ }, k = (e2, t2, { compileExpression: i2 }) => {
250
+ e2.expression ? i2(e2.expression) : t2.emit(s$2.PUSH, null), t2.emit(s$2.RETURN);
251
+ }, _ = (e2, t2, i2) => {
252
+ const r2 = t2.findLoopContext();
253
+ if (r2) {
254
+ r2.type === "foreach" && t2.emit(s$2.ITER_END);
255
+ const a2 = t2.emit(s$2.BREAK, -1);
256
+ r2.breakTargets = r2.breakTargets || [], r2.breakTargets.push(a2);
257
+ } else
258
+ throw new Error("break statement not in loop");
259
+ }, U$1 = (e2, t2, i2) => {
260
+ const r2 = t2.findLoopContext();
261
+ if (r2 && r2.startAddress !== void 0) {
262
+ const a2 = t2.emit(s$2.CONTINUE, r2.startAddress);
263
+ r2.continueTargets = r2.continueTargets || [], r2.continueTargets.push(a2);
264
+ } else
265
+ throw new Error("continue statement not in loop");
266
+ }, L$1 = {
267
+ [n__namespace.SyntaxKind.IfStatement]: h$1,
268
+ [n__namespace.SyntaxKind.WhileStatement]: I,
269
+ [n__namespace.SyntaxKind.ForOfStatement]: y$1,
270
+ [n__namespace.SyntaxKind.Block]: N$1,
271
+ [n__namespace.SyntaxKind.VariableStatement]: g$1,
272
+ [n__namespace.SyntaxKind.ExpressionStatement]: P,
273
+ [n__namespace.SyntaxKind.ReturnStatement]: k,
274
+ [n__namespace.SyntaxKind.BreakStatement]: _,
275
+ [n__namespace.SyntaxKind.ContinueStatement]: U$1
276
+ }, d$1 = (e2, t2, i2) => {
277
+ t2.emit(s$2.PUSH, e2.text);
278
+ }, K = (e2, t2, i2) => {
279
+ t2.emit(s$2.PUSH, Number(e2.text));
280
+ }, b$1 = (e2, t2, i2) => {
281
+ t2.emit(s$2.PUSH, true);
282
+ }, F$1 = (e2, t2, i2) => {
283
+ t2.emit(s$2.PUSH, false);
284
+ }, D$1 = (e2, t2, i2) => {
285
+ t2.emit(s$2.PUSH, null);
286
+ }, G$1 = (e2, t2, i2) => {
287
+ e2.text === "undefined" ? t2.emit(s$2.PUSH_UNDEFINED) : t2.emit(s$2.LOAD, e2.text);
288
+ }, M$1 = (e2, t2, { compileExpression: i2 }) => {
289
+ t2.emit(s$2.ARRAY_NEW), e2.elements.forEach((r2) => {
290
+ i2(r2), t2.emit(s$2.ARRAY_PUSH);
291
+ });
292
+ }, H$1 = (e2, t2, { compileExpression: i2 }) => {
293
+ i2(e2.expression);
294
+ }, C$1 = (e2, t2, { compileExpression: i2 }) => {
295
+ e2.name.text === "length" && (i2(e2.expression), t2.emit(s$2.LENGTH));
296
+ }, J = (e2, t2, { compileExpression: i2 }) => {
297
+ i2(e2.expression), e2.argumentExpression && i2(e2.argumentExpression), t2.emit(s$2.ARRAY_GET);
298
+ }, w$2 = (e2, t2, { compileExpression: i2 }) => {
299
+ switch (e2.operator) {
300
+ case n__namespace.SyntaxKind.ExclamationToken:
301
+ i2(e2.operand), t2.emit(s$2.NOT);
302
+ break;
303
+ case n__namespace.SyntaxKind.MinusToken:
304
+ i2(e2.operand), t2.emit(s$2.UNARY_MINUS);
305
+ break;
306
+ case n__namespace.SyntaxKind.PlusToken:
307
+ i2(e2.operand), t2.emit(s$2.UNARY_PLUS);
308
+ break;
309
+ case n__namespace.SyntaxKind.PlusPlusToken:
310
+ n__namespace.isIdentifier(e2.operand) && (t2.emit(s$2.PUSH, e2.operand.text), t2.emit(s$2.INC, false));
311
+ break;
312
+ case n__namespace.SyntaxKind.MinusMinusToken:
313
+ n__namespace.isIdentifier(e2.operand) && (t2.emit(s$2.PUSH, e2.operand.text), t2.emit(s$2.DEC, false));
314
+ break;
315
+ }
316
+ }, B = (e2, t2, { compileExpression: i2 }) => {
317
+ switch (e2.operator) {
318
+ case n__namespace.SyntaxKind.PlusPlusToken:
319
+ n__namespace.isIdentifier(e2.operand) && (t2.emit(s$2.PUSH, e2.operand.text), t2.emit(s$2.INC, true));
320
+ break;
321
+ case n__namespace.SyntaxKind.MinusMinusToken:
322
+ n__namespace.isIdentifier(e2.operand) && (t2.emit(s$2.PUSH, e2.operand.text), t2.emit(s$2.DEC, true));
323
+ break;
324
+ }
138
325
  };
139
- function k(n2) {
140
- const l2 = I(n2);
141
- if (l2.errors.length > 0)
326
+ function T$1(e2, t2) {
327
+ return !!(n__namespace.isStringLiteral(e2) || n__namespace.isStringLiteral(t2) || n__namespace.isBinaryExpression(e2) && e2.operatorToken.kind === n__namespace.SyntaxKind.PlusToken && T$1(e2.left, e2.right) || n__namespace.isBinaryExpression(t2) && t2.operatorToken.kind === n__namespace.SyntaxKind.PlusToken && T$1(t2.left, t2.right));
328
+ }
329
+ const Y$1 = (e2, t2, { compileExpression: i2 }) => {
330
+ const r2 = e2.operatorToken.kind;
331
+ switch (i2(e2.left), i2(e2.right), r2) {
332
+ case n__namespace.SyntaxKind.PlusToken:
333
+ T$1(e2.left, e2.right) ? t2.emit(s$2.CONCAT) : t2.emit(s$2.ADD);
334
+ break;
335
+ case n__namespace.SyntaxKind.MinusToken:
336
+ t2.emit(s$2.SUB);
337
+ break;
338
+ case n__namespace.SyntaxKind.AsteriskToken:
339
+ t2.emit(s$2.MUL);
340
+ break;
341
+ case n__namespace.SyntaxKind.SlashToken:
342
+ t2.emit(s$2.DIV);
343
+ break;
344
+ case n__namespace.SyntaxKind.PercentToken:
345
+ t2.emit(s$2.MOD);
346
+ break;
347
+ case n__namespace.SyntaxKind.EqualsEqualsToken:
348
+ t2.emit(s$2.EQ);
349
+ break;
350
+ case n__namespace.SyntaxKind.ExclamationEqualsToken:
351
+ t2.emit(s$2.NEQ);
352
+ break;
353
+ case n__namespace.SyntaxKind.LessThanToken:
354
+ t2.emit(s$2.LT);
355
+ break;
356
+ case n__namespace.SyntaxKind.GreaterThanToken:
357
+ t2.emit(s$2.GT);
358
+ break;
359
+ case n__namespace.SyntaxKind.LessThanEqualsToken:
360
+ t2.emit(s$2.LTE);
361
+ break;
362
+ case n__namespace.SyntaxKind.GreaterThanEqualsToken:
363
+ t2.emit(s$2.GTE);
364
+ break;
365
+ case n__namespace.SyntaxKind.EqualsEqualsEqualsToken:
366
+ t2.emit(s$2.EQ_STRICT);
367
+ break;
368
+ case n__namespace.SyntaxKind.ExclamationEqualsEqualsToken:
369
+ t2.emit(s$2.NEQ_STRICT);
370
+ break;
371
+ case n__namespace.SyntaxKind.AmpersandAmpersandToken:
372
+ t2.emit(s$2.AND);
373
+ break;
374
+ case n__namespace.SyntaxKind.BarBarToken:
375
+ t2.emit(s$2.OR);
376
+ break;
377
+ }
378
+ }, q$1 = (e2, t2, { compileExpression: i2 }) => {
379
+ i2(e2.condition);
380
+ const r2 = t2.emit(s$2.JUMP_IF_FALSE, -1);
381
+ i2(e2.whenTrue);
382
+ const a2 = t2.emit(s$2.JUMP, -1), l2 = t2.currentAddress();
383
+ t2.patchJump(r2, l2), i2(e2.whenFalse);
384
+ const S = t2.currentAddress();
385
+ t2.patchJump(a2, S);
386
+ }, Q = (e2, t2, { compileExpression: i2 }) => {
387
+ i2(e2.expression), t2.emit(s$2.TYPEOF);
388
+ }, V$1 = (e2, t2, { compileExpression: i2 }) => {
389
+ if (n__namespace.isPropertyAccessExpression(e2.expression) && n__namespace.isIdentifier(e2.expression.expression) && e2.expression.expression.text === "fs" && e2.expression.name.text === "listFiles")
390
+ e2.arguments.length > 0 ? i2(e2.arguments[0]) : t2.emit(s$2.PUSH, "."), e2.arguments.length > 1 && i2(e2.arguments[1]), t2.emit(s$2.FS_LIST_FILES);
391
+ else if (n__namespace.isPropertyAccessExpression(e2.expression) && n__namespace.isIdentifier(e2.expression.expression) && e2.expression.expression.text === "JSON" && e2.expression.name.text === "parse")
392
+ e2.arguments.length > 0 && i2(e2.arguments[0]), t2.emit(s$2.JSON_PARSE);
393
+ else if (n__namespace.isIdentifier(e2.expression) && e2.expression.text === "CC")
394
+ e2.arguments.length > 0 && i2(e2.arguments[0]), t2.emit(s$2.CC);
395
+ else if (n__namespace.isPropertyAccessExpression(e2.expression)) {
396
+ const r2 = e2.expression.name.text;
397
+ if (r2 === "substring")
398
+ i2(e2.expression.expression), e2.arguments.length > 0 ? i2(e2.arguments[0]) : t2.emit(s$2.PUSH, 0), e2.arguments.length > 1 && i2(e2.arguments[1]), t2.emit(s$2.STRING_SUBSTRING);
399
+ else if (r2 === "indexOf")
400
+ i2(e2.expression.expression), e2.arguments.length > 0 ? i2(e2.arguments[0]) : t2.emit(s$2.PUSH, ""), t2.emit(s$2.STRING_INDEXOF);
401
+ else if (r2 === "split")
402
+ i2(e2.expression.expression), e2.arguments.length > 0 ? i2(e2.arguments[0]) : t2.emit(s$2.PUSH, ""), t2.emit(s$2.STRING_SPLIT);
403
+ else if (r2 === "slice")
404
+ i2(e2.expression.expression), e2.arguments.length > 0 ? i2(e2.arguments[0]) : t2.emit(s$2.PUSH, 0), e2.arguments.length > 1 && i2(e2.arguments[1]), t2.emit(s$2.STRING_SLICE);
405
+ else if (r2 === "charAt")
406
+ i2(e2.expression.expression), e2.arguments.length > 0 ? i2(e2.arguments[0]) : t2.emit(s$2.PUSH, 0), t2.emit(s$2.STRING_CHARAT);
407
+ else if (r2 === "toUpperCase")
408
+ i2(e2.expression.expression), t2.emit(s$2.STRING_TOUPPERCASE);
409
+ else if (r2 === "toLowerCase")
410
+ i2(e2.expression.expression), t2.emit(s$2.STRING_TOLOWERCASE);
411
+ else
412
+ throw new Error(`Method call '${r2}' is not supported`);
413
+ } else
414
+ throw new Error("Unsupported call expression");
415
+ }, v = {
416
+ [n__namespace.SyntaxKind.StringLiteral]: d$1,
417
+ [n__namespace.SyntaxKind.NumericLiteral]: K,
418
+ [n__namespace.SyntaxKind.TrueKeyword]: b$1,
419
+ [n__namespace.SyntaxKind.FalseKeyword]: F$1,
420
+ [n__namespace.SyntaxKind.NullKeyword]: D$1,
421
+ [n__namespace.SyntaxKind.Identifier]: G$1,
422
+ [n__namespace.SyntaxKind.ArrayLiteralExpression]: M$1,
423
+ [n__namespace.SyntaxKind.BinaryExpression]: Y$1,
424
+ [n__namespace.SyntaxKind.PrefixUnaryExpression]: w$2,
425
+ [n__namespace.SyntaxKind.PostfixUnaryExpression]: B,
426
+ [n__namespace.SyntaxKind.CallExpression]: V$1,
427
+ [n__namespace.SyntaxKind.PropertyAccessExpression]: C$1,
428
+ [n__namespace.SyntaxKind.ElementAccessExpression]: J,
429
+ [n__namespace.SyntaxKind.ConditionalExpression]: q$1,
430
+ [n__namespace.SyntaxKind.TypeOfExpression]: Q,
431
+ [n__namespace.SyntaxKind.ParenthesizedExpression]: H$1
432
+ };
433
+ function j(e2) {
434
+ const t2 = A(e2);
435
+ if (t2.errors.length > 0)
142
436
  return {
143
437
  success: false,
144
438
  bytecode: [],
145
- errors: l2.errors
439
+ errors: t2.errors
146
440
  };
147
- const e2 = new N$1(), o2 = s__namespace.createSourceFile("program.ts", n2, s__namespace.ScriptTarget.Latest, true);
148
- function T(t2) {
149
- if (s__namespace.isIfStatement(t2)) {
150
- a2(t2.expression);
151
- const i2 = e2.emit(r$1.JUMP_IF_FALSE, -1), c2 = {
152
- type: "if",
153
- endTargets: []
154
- };
155
- if (t2.elseStatement ? c2.elseTarget = i2 : c2.endTargets.push(i2), e2.pushContext(c2), T(t2.thenStatement), t2.elseStatement) {
156
- const x = e2.emit(r$1.JUMP, -1);
157
- c2.endTargets.push(x);
158
- const S = e2.currentAddress();
159
- e2.patchJump(i2, S), T(t2.elseStatement);
160
- }
161
- const m2 = e2.popContext();
162
- if (m2) {
163
- const x = e2.currentAddress();
164
- e2.patchJumps(m2.endTargets, x);
165
- }
166
- } else if (s__namespace.isWhileStatement(t2)) {
167
- const i2 = e2.currentAddress();
168
- a2(t2.expression);
169
- const m2 = {
170
- type: "loop",
171
- breakTargets: [e2.emit(r$1.JUMP_IF_FALSE, -1)],
172
- continueTargets: [],
173
- endTargets: [],
174
- startAddress: i2
175
- };
176
- e2.pushContext(m2), T(t2.statement), e2.emit(r$1.JUMP, i2);
177
- const x = e2.popContext();
178
- if (x) {
179
- const S = e2.currentAddress();
180
- e2.patchJumps(x.breakTargets || [], S);
181
- }
182
- } else if (s__namespace.isForOfStatement(t2)) {
183
- const i2 = t2.initializer, c2 = t2.expression;
184
- let m2;
185
- if (s__namespace.isVariableDeclarationList(i2))
186
- m2 = i2.declarations[0].name.getText();
187
- else if (s__namespace.isIdentifier(i2))
188
- m2 = i2.text;
189
- else
190
- throw new Error("Unsupported for-of variable declaration");
191
- a2(c2), e2.emit(r$1.ITER_START);
192
- const x = e2.currentAddress();
193
- e2.emit(r$1.ITER_NEXT);
194
- const S = e2.emit(r$1.JUMP_IF_FALSE, -1);
195
- e2.emit(r$1.STORE, m2);
196
- const A2 = {
197
- type: "foreach",
198
- breakTargets: [S],
199
- continueTargets: [],
200
- endTargets: [],
201
- startAddress: x,
202
- iterVariable: m2
203
- };
204
- e2.pushContext(A2), T(t2.statement), e2.emit(r$1.JUMP, x);
205
- const f2 = e2.popContext();
206
- if (f2) {
207
- e2.emit(r$1.ITER_END);
208
- const p2 = e2.currentAddress();
209
- e2.patchJumps(f2.breakTargets || [], p2);
210
- }
211
- } else if (s__namespace.isBlock(t2))
212
- t2.statements.forEach((i2) => {
213
- T(i2);
214
- });
215
- else if (s__namespace.isExpressionStatement(t2)) {
216
- const i2 = t2.expression;
217
- if (s__namespace.isBinaryExpression(i2)) {
218
- const c2 = i2.operatorToken.kind;
219
- if (c2 === s__namespace.SyntaxKind.PlusEqualsToken || c2 === s__namespace.SyntaxKind.MinusEqualsToken || c2 === s__namespace.SyntaxKind.AsteriskEqualsToken || c2 === s__namespace.SyntaxKind.SlashEqualsToken || c2 === s__namespace.SyntaxKind.PercentEqualsToken) {
220
- if (s__namespace.isIdentifier(i2.left)) {
221
- switch (e2.emit(r$1.LOAD, i2.left.text), a2(i2.right), c2) {
222
- case s__namespace.SyntaxKind.PlusEqualsToken:
223
- s__namespace.isStringLiteral(i2.right) ? e2.emit(r$1.CONCAT) : e2.emit(r$1.ADD);
224
- break;
225
- case s__namespace.SyntaxKind.MinusEqualsToken:
226
- e2.emit(r$1.SUB);
227
- break;
228
- case s__namespace.SyntaxKind.AsteriskEqualsToken:
229
- e2.emit(r$1.MUL);
230
- break;
231
- case s__namespace.SyntaxKind.SlashEqualsToken:
232
- e2.emit(r$1.DIV);
233
- break;
234
- case s__namespace.SyntaxKind.PercentEqualsToken:
235
- e2.emit(r$1.MOD);
236
- break;
237
- }
238
- e2.emit(r$1.STORE, i2.left.text);
239
- } else if (s__namespace.isElementAccessExpression(i2.left))
240
- throw new Error("Compound assignment to array elements not yet supported");
241
- return;
242
- } else if (c2 === s__namespace.SyntaxKind.EqualsToken) {
243
- if (a2(i2.right), s__namespace.isIdentifier(i2.left))
244
- e2.emit(r$1.STORE, i2.left.text);
245
- else if (s__namespace.isElementAccessExpression(i2.left)) {
246
- const m2 = `__temp_${e2.getBytecode().length}`;
247
- e2.emit(r$1.STORE, m2), a2(i2.left.expression), a2(i2.left.argumentExpression), e2.emit(r$1.LOAD, m2), e2.emit(r$1.ARRAY_SET);
248
- }
249
- return;
250
- }
251
- }
252
- s__namespace.isCallExpression(i2) && s__namespace.isPropertyAccessExpression(i2.expression) && i2.expression.expression.getText() === "console" && i2.expression.name.getText() === "log" ? (i2.arguments.forEach((c2) => {
253
- a2(c2);
254
- }), e2.emit(r$1.PRINT)) : s__namespace.isCallExpression(i2) && s__namespace.isIdentifier(i2.expression) && i2.expression.text === "CC" ? (i2.arguments.length > 0 && a2(i2.arguments[0]), e2.emit(r$1.CC), e2.emit(r$1.POP)) : s__namespace.isCallExpression(i2) && s__namespace.isPropertyAccessExpression(i2.expression) && i2.expression.name.getText() === "push" ? (a2(i2.expression.expression), i2.arguments.length > 0 && a2(i2.arguments[0]), e2.emit(r$1.ARRAY_PUSH)) : (s__namespace.isPostfixUnaryExpression(i2) || s__namespace.isPrefixUnaryExpression(i2)) && (a2(i2), e2.emit(r$1.POP));
255
- } else if (s__namespace.isVariableStatement(t2)) {
256
- const i2 = t2.declarationList.declarations[0];
257
- i2.initializer && (a2(i2.initializer), e2.emit(r$1.STORE, i2.name.getText()));
258
- } else if (s__namespace.isReturnStatement(t2))
259
- t2.expression ? a2(t2.expression) : e2.emit(r$1.PUSH, null), e2.emit(r$1.RETURN);
260
- else if (s__namespace.isBreakStatement(t2)) {
261
- const i2 = e2.findLoopContext();
262
- if (i2) {
263
- i2.type === "foreach" && e2.emit(r$1.ITER_END);
264
- const c2 = e2.emit(r$1.BREAK, -1);
265
- i2.breakTargets = i2.breakTargets || [], i2.breakTargets.push(c2);
266
- } else
267
- throw new Error("break statement not in loop");
268
- } else if (s__namespace.isContinueStatement(t2)) {
269
- const i2 = e2.findLoopContext();
270
- if (i2 && i2.startAddress !== void 0) {
271
- const c2 = e2.emit(r$1.CONTINUE, i2.startAddress);
272
- i2.continueTargets = i2.continueTargets || [], i2.continueTargets.push(c2);
273
- } else
274
- throw new Error("continue statement not in loop");
275
- }
276
- }
277
- function a2(t2) {
278
- if (s__namespace.isStringLiteral(t2))
279
- e2.emit(r$1.PUSH, t2.text);
280
- else if (s__namespace.isNumericLiteral(t2))
281
- e2.emit(r$1.PUSH, Number(t2.text));
282
- else if (t2.kind === s__namespace.SyntaxKind.TrueKeyword)
283
- e2.emit(r$1.PUSH, true);
284
- else if (t2.kind === s__namespace.SyntaxKind.FalseKeyword)
285
- e2.emit(r$1.PUSH, false);
286
- else if (t2.kind === s__namespace.SyntaxKind.NullKeyword)
287
- e2.emit(r$1.PUSH, null);
288
- else if (s__namespace.isArrayLiteralExpression(t2))
289
- e2.emit(r$1.ARRAY_NEW), t2.elements.forEach((i2) => {
290
- a2(i2), e2.emit(r$1.ARRAY_PUSH);
291
- });
292
- else if (s__namespace.isElementAccessExpression(t2))
293
- a2(t2.expression), t2.argumentExpression && a2(t2.argumentExpression), e2.emit(r$1.ARRAY_GET);
294
- else if (s__namespace.isPropertyAccessExpression(t2) && t2.name.text === "length")
295
- a2(t2.expression), e2.emit(r$1.LENGTH);
296
- else if (s__namespace.isIdentifier(t2))
297
- t2.text === "undefined" ? e2.emit(r$1.PUSH_UNDEFINED) : e2.emit(r$1.LOAD, t2.text);
298
- else if (s__namespace.isCallExpression(t2)) {
299
- if (s__namespace.isPropertyAccessExpression(t2.expression) && s__namespace.isIdentifier(t2.expression.expression) && t2.expression.expression.text === "fs" && t2.expression.name.text === "listFiles")
300
- t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, "."), t2.arguments.length > 1 && a2(t2.arguments[1]), e2.emit(r$1.FS_LIST_FILES);
301
- else if (s__namespace.isPropertyAccessExpression(t2.expression) && s__namespace.isIdentifier(t2.expression.expression) && t2.expression.expression.text === "JSON" && t2.expression.name.text === "parse")
302
- t2.arguments.length > 0 && a2(t2.arguments[0]), e2.emit(r$1.JSON_PARSE);
303
- else if (s__namespace.isIdentifier(t2.expression) && t2.expression.text === "CC")
304
- t2.arguments.length > 0 && a2(t2.arguments[0]), e2.emit(r$1.CC);
305
- else if (s__namespace.isPropertyAccessExpression(t2.expression)) {
306
- const i2 = t2.expression.name.text;
307
- i2 === "substring" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, 0), t2.arguments.length > 1 && a2(t2.arguments[1]), e2.emit(r$1.STRING_SUBSTRING)) : i2 === "indexOf" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, ""), e2.emit(r$1.STRING_INDEXOF)) : i2 === "split" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, ""), e2.emit(r$1.STRING_SPLIT)) : i2 === "slice" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, 0), t2.arguments.length > 1 && a2(t2.arguments[1]), e2.emit(r$1.STRING_SLICE)) : i2 === "charAt" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, 0), e2.emit(r$1.STRING_CHARAT)) : i2 === "toUpperCase" ? (a2(t2.expression.expression), e2.emit(r$1.STRING_TOUPPERCASE)) : i2 === "toLowerCase" && (a2(t2.expression.expression), e2.emit(r$1.STRING_TOLOWERCASE));
308
- }
309
- } else if (s__namespace.isParenthesizedExpression(t2))
310
- a2(t2.expression);
311
- else if (s__namespace.isBinaryExpression(t2)) {
312
- const i2 = t2.operatorToken.kind;
313
- switch (a2(t2.left), a2(t2.right), i2) {
314
- case s__namespace.SyntaxKind.PlusToken:
315
- E(t2.left, t2.right) ? e2.emit(r$1.CONCAT) : e2.emit(r$1.ADD);
316
- break;
317
- case s__namespace.SyntaxKind.MinusToken:
318
- e2.emit(r$1.SUB);
319
- break;
320
- case s__namespace.SyntaxKind.AsteriskToken:
321
- e2.emit(r$1.MUL);
322
- break;
323
- case s__namespace.SyntaxKind.SlashToken:
324
- e2.emit(r$1.DIV);
325
- break;
326
- case s__namespace.SyntaxKind.PercentToken:
327
- e2.emit(r$1.MOD);
328
- break;
329
- case s__namespace.SyntaxKind.EqualsEqualsToken:
330
- e2.emit(r$1.EQ);
331
- break;
332
- case s__namespace.SyntaxKind.ExclamationEqualsToken:
333
- e2.emit(r$1.NEQ);
334
- break;
335
- case s__namespace.SyntaxKind.LessThanToken:
336
- e2.emit(r$1.LT);
337
- break;
338
- case s__namespace.SyntaxKind.GreaterThanToken:
339
- e2.emit(r$1.GT);
340
- break;
341
- case s__namespace.SyntaxKind.LessThanEqualsToken:
342
- e2.emit(r$1.LTE);
343
- break;
344
- case s__namespace.SyntaxKind.GreaterThanEqualsToken:
345
- e2.emit(r$1.GTE);
346
- break;
347
- case s__namespace.SyntaxKind.EqualsEqualsEqualsToken:
348
- e2.emit(r$1.EQ_STRICT);
349
- break;
350
- case s__namespace.SyntaxKind.ExclamationEqualsEqualsToken:
351
- e2.emit(r$1.NEQ_STRICT);
352
- break;
353
- case s__namespace.SyntaxKind.AmpersandAmpersandToken:
354
- e2.emit(r$1.AND);
355
- break;
356
- case s__namespace.SyntaxKind.BarBarToken:
357
- e2.emit(r$1.OR);
358
- break;
359
- }
360
- } else if (s__namespace.isPrefixUnaryExpression(t2))
361
- switch (t2.operator) {
362
- case s__namespace.SyntaxKind.ExclamationToken:
363
- a2(t2.operand), e2.emit(r$1.NOT);
364
- break;
365
- case s__namespace.SyntaxKind.MinusToken:
366
- a2(t2.operand), e2.emit(r$1.UNARY_MINUS);
367
- break;
368
- case s__namespace.SyntaxKind.PlusToken:
369
- a2(t2.operand), e2.emit(r$1.UNARY_PLUS);
370
- break;
371
- case s__namespace.SyntaxKind.PlusPlusToken:
372
- s__namespace.isIdentifier(t2.operand) && (e2.emit(r$1.PUSH, t2.operand.text), e2.emit(r$1.INC, false));
373
- break;
374
- case s__namespace.SyntaxKind.MinusMinusToken:
375
- s__namespace.isIdentifier(t2.operand) && (e2.emit(r$1.PUSH, t2.operand.text), e2.emit(r$1.DEC, false));
376
- break;
377
- }
378
- else if (s__namespace.isPostfixUnaryExpression(t2))
379
- switch (t2.operator) {
380
- case s__namespace.SyntaxKind.PlusPlusToken:
381
- s__namespace.isIdentifier(t2.operand) && (e2.emit(r$1.PUSH, t2.operand.text), e2.emit(r$1.INC, true));
382
- break;
383
- case s__namespace.SyntaxKind.MinusMinusToken:
384
- s__namespace.isIdentifier(t2.operand) && (e2.emit(r$1.PUSH, t2.operand.text), e2.emit(r$1.DEC, true));
385
- break;
386
- }
387
- else if (s__namespace.isTypeOfExpression(t2))
388
- a2(t2.expression), e2.emit(r$1.TYPEOF);
389
- else if (s__namespace.isConditionalExpression(t2)) {
390
- a2(t2.condition);
391
- const i2 = e2.emit(r$1.JUMP_IF_FALSE, -1);
392
- a2(t2.whenTrue);
393
- const c2 = e2.emit(r$1.JUMP, -1), m2 = e2.currentAddress();
394
- e2.patchJump(i2, m2), a2(t2.whenFalse);
395
- const x = e2.currentAddress();
396
- e2.patchJump(c2, x);
397
- }
398
- }
399
- return o2.forEachChild((t2) => {
400
- var i2;
401
- s__namespace.isFunctionDeclaration(t2) && ((i2 = t2.name) == null ? void 0 : i2.text) === "main" && t2.body && t2.body.statements.forEach((c2) => {
402
- T(c2);
441
+ const i2 = new R(), r2 = n__namespace.createSourceFile("program.ts", e2, n__namespace.ScriptTarget.Latest, true), a2 = {
442
+ compileStatement: l2,
443
+ compileExpression: S,
444
+ reportError: (o2, c2) => {
445
+ throw new Error(c2);
446
+ }
447
+ };
448
+ function l2(o2) {
449
+ const c2 = L$1[o2.kind];
450
+ c2 && c2(o2, i2, a2);
451
+ }
452
+ function S(o2) {
453
+ const c2 = v[o2.kind];
454
+ c2 && c2(o2, i2, a2);
455
+ }
456
+ return r2.forEachChild((o2) => {
457
+ var c2;
458
+ n__namespace.isFunctionDeclaration(o2) && ((c2 = o2.name) == null ? void 0 : c2.text) === "main" && o2.body && o2.body.statements.forEach((x2) => {
459
+ l2(x2);
403
460
  });
404
- }), e2.emit(r$1.HALT), {
461
+ }), i2.emit(s$2.HALT), {
405
462
  success: true,
406
- bytecode: e2.getBytecode(),
463
+ bytecode: i2.getBytecode(),
407
464
  errors: []
408
465
  };
409
466
  }
410
- function E(n2, l2) {
411
- return !!(s__namespace.isStringLiteral(n2) || s__namespace.isStringLiteral(l2) || s__namespace.isBinaryExpression(n2) && n2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && E(n2.left, n2.right) || s__namespace.isBinaryExpression(l2) && l2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && E(l2.left, l2.right));
412
- }
413
467
  function n(r2) {
414
468
  return typeof r2 == "string";
415
469
  }
@@ -434,7 +488,7 @@ function c$1(r2) {
434
488
  function y(r2) {
435
489
  return i(r2) ? r2 : f(r2) || o(r2) ? false : t(r2) ? r2 !== 0 : n(r2) ? r2 !== "" : e(r2) ? true : !!r2;
436
490
  }
437
- function m(r2) {
491
+ function m$1(r2) {
438
492
  return n(r2) ? "string" : t(r2) ? "number" : i(r2) ? "boolean" : f(r2) ? "null" : o(r2) ? "undefined" : e(r2) ? "array" : "unknown";
439
493
  }
440
494
  function d(r2) {
@@ -466,7 +520,7 @@ class h {
466
520
  this.dataDir = t2, this.programsDir = c__namespace.join(t2, "programs"), this.executionsDir = c__namespace.join(t2, "executions"), this.outputsDir = c__namespace.join(t2, "outputs");
467
521
  }
468
522
  async connect() {
469
- await M.promises.mkdir(this.dataDir, { recursive: true }), await M.promises.mkdir(this.programsDir, { recursive: true }), await M.promises.mkdir(this.executionsDir, { recursive: true }), await M.promises.mkdir(this.outputsDir, { recursive: true }), this.connected = true;
523
+ await P$1.promises.mkdir(this.dataDir, { recursive: true }), await P$1.promises.mkdir(this.programsDir, { recursive: true }), await P$1.promises.mkdir(this.executionsDir, { recursive: true }), await P$1.promises.mkdir(this.outputsDir, { recursive: true }), this.connected = true;
470
524
  }
471
525
  async disconnect() {
472
526
  this.connected = false;
@@ -477,13 +531,13 @@ class h {
477
531
  async saveProgram(t2) {
478
532
  if (!this.connected) throw new Error("Not connected");
479
533
  const n2 = c__namespace.join(this.programsDir, `${t2.id}.json`), e2 = JSON.stringify(t2, null, 2);
480
- await M.promises.writeFile(n2, e2, "utf-8");
534
+ await P$1.promises.writeFile(n2, e2, "utf-8");
481
535
  }
482
536
  async getProgram(t2) {
483
537
  if (!this.connected) throw new Error("Not connected");
484
538
  const n2 = c__namespace.join(this.programsDir, `${t2}.json`);
485
539
  try {
486
- const e2 = await M.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e2);
540
+ const e2 = await P$1.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e2);
487
541
  return o2.created = new Date(o2.created), o2.updated && (o2.updated = new Date(o2.updated)), o2;
488
542
  } catch (e2) {
489
543
  if (e2.code === "ENOENT")
@@ -494,13 +548,13 @@ class h {
494
548
  async saveExecution(t2) {
495
549
  if (!this.connected) throw new Error("Not connected");
496
550
  const n2 = c__namespace.join(this.executionsDir, `${t2.id}.json`), e2 = JSON.stringify(t2, null, 2);
497
- await M.promises.writeFile(n2, e2, "utf-8");
551
+ await P$1.promises.writeFile(n2, e2, "utf-8");
498
552
  }
499
553
  async getExecution(t2) {
500
554
  if (!this.connected) throw new Error("Not connected");
501
555
  const n2 = c__namespace.join(this.executionsDir, `${t2}.json`);
502
556
  try {
503
- const e2 = await M.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e2);
557
+ const e2 = await P$1.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e2);
504
558
  return o2.created = new Date(o2.created), o2.updated && (o2.updated = new Date(o2.updated)), o2;
505
559
  } catch (e2) {
506
560
  if (e2.code === "ENOENT")
@@ -513,13 +567,13 @@ class h {
513
567
  const e2 = c__namespace.join(this.outputsDir, `${t2}.output`), o2 = n2.join(`
514
568
  `) + `
515
569
  `;
516
- await M.promises.appendFile(e2, o2, "utf-8");
570
+ await P$1.promises.appendFile(e2, o2, "utf-8");
517
571
  }
518
572
  async getOutput(t2) {
519
573
  if (!this.connected) throw new Error("Not connected");
520
574
  const n2 = c__namespace.join(this.outputsDir, `${t2}.output`);
521
575
  try {
522
- return (await M.promises.readFile(n2, "utf-8")).split(`
576
+ return (await P$1.promises.readFile(n2, "utf-8")).split(`
523
577
  `).filter((o2) => o2.length > 0);
524
578
  } catch (e2) {
525
579
  if (e2.code === "ENOENT")
@@ -606,736 +660,924 @@ class g {
606
660
  }
607
661
  }
608
662
  }
609
- var C = Object.defineProperty;
610
- var G = (g2, a2, s2) => a2 in g2 ? C(g2, a2, { enumerable: true, configurable: true, writable: true, value: s2 }) : g2[a2] = s2;
611
- var N2 = (g2, a2, s2) => G(g2, typeof a2 != "symbol" ? a2 + "" : a2, s2);
612
- class A {
613
- execute(a2, s2) {
614
- const r2 = {
615
- pc: (s2 == null ? void 0 : s2.pc) ?? 0,
616
- stack: (s2 == null ? void 0 : s2.stack) ?? [],
617
- variables: (s2 == null ? void 0 : s2.variables) ?? /* @__PURE__ */ new Map(),
663
+ var T = Object.defineProperty;
664
+ var w$1 = (e2, r2, t2) => r2 in e2 ? T(e2, r2, { enumerable: true, configurable: true, writable: true, value: t2 }) : e2[r2] = t2;
665
+ var E = (e2, r2, t2) => w$1(e2, typeof r2 != "symbol" ? r2 + "" : r2, t2);
666
+ const C = {
667
+ [s$2.ADD]: {
668
+ stackIn: 2,
669
+ stackOut: 1,
670
+ execute: (e2) => {
671
+ const r2 = e2.stack.pop(), t2 = e2.stack.pop(), s2 = d(t2), c2 = d(r2);
672
+ e2.stack.push(s2 + c2);
673
+ }
674
+ },
675
+ [s$2.SUB]: {
676
+ stackIn: 2,
677
+ stackOut: 1,
678
+ execute: (e2) => {
679
+ const r2 = e2.stack.pop(), t2 = e2.stack.pop(), s2 = d(t2), c2 = d(r2);
680
+ e2.stack.push(s2 - c2);
681
+ }
682
+ },
683
+ [s$2.MUL]: {
684
+ stackIn: 2,
685
+ stackOut: 1,
686
+ execute: (e2) => {
687
+ const r2 = e2.stack.pop(), t2 = e2.stack.pop(), s2 = d(t2), c2 = d(r2);
688
+ e2.stack.push(s2 * c2);
689
+ }
690
+ },
691
+ [s$2.DIV]: {
692
+ stackIn: 2,
693
+ stackOut: 1,
694
+ execute: (e2, r2) => {
695
+ const t2 = e2.stack.pop(), s2 = e2.stack.pop(), c2 = d(s2), n2 = d(t2);
696
+ if (n2 === 0)
697
+ return {
698
+ type: "DivisionByZero",
699
+ message: "Division by zero",
700
+ pc: e2.pc,
701
+ opcode: r2.op
702
+ };
703
+ e2.stack.push(c2 / n2);
704
+ }
705
+ },
706
+ [s$2.MOD]: {
707
+ stackIn: 2,
708
+ stackOut: 1,
709
+ execute: (e2) => {
710
+ const r2 = e2.stack.pop(), t2 = e2.stack.pop(), s2 = d(t2), c2 = d(r2);
711
+ e2.stack.push(s2 % c2);
712
+ }
713
+ },
714
+ [s$2.UNARY_MINUS]: {
715
+ stackIn: 1,
716
+ stackOut: 1,
717
+ execute: (e2) => {
718
+ const r2 = e2.stack.pop(), t2 = d(r2);
719
+ e2.stack.push(-t2);
720
+ }
721
+ },
722
+ [s$2.UNARY_PLUS]: {
723
+ stackIn: 1,
724
+ stackOut: 1,
725
+ execute: (e2) => {
726
+ const r2 = e2.stack.pop(), t2 = d(r2);
727
+ e2.stack.push(t2);
728
+ }
729
+ }
730
+ }, b = {
731
+ [s$2.PUSH]: {
732
+ stackIn: 0,
733
+ stackOut: 1,
734
+ execute: (e2, r2) => {
735
+ e2.stack.push(r2.arg);
736
+ }
737
+ },
738
+ [s$2.PUSH_UNDEFINED]: {
739
+ stackIn: 0,
740
+ stackOut: 1,
741
+ execute: (e2) => {
742
+ e2.stack.push(s$1());
743
+ }
744
+ },
745
+ [s$2.POP]: {
746
+ stackIn: 1,
747
+ stackOut: 0,
748
+ execute: (e2) => {
749
+ e2.stack.pop();
750
+ }
751
+ }
752
+ }, U = {
753
+ [s$2.PRINT]: {
754
+ stackIn: 1,
755
+ stackOut: 0,
756
+ execute: (e2) => {
757
+ const r2 = e2.stack.pop();
758
+ r2 !== void 0 && e2.output.push(c$1(r2));
759
+ }
760
+ },
761
+ [s$2.CC]: {
762
+ stackIn: 1,
763
+ stackOut: 0,
764
+ controlsPC: true,
765
+ // CC pauses execution
766
+ execute: (e2, r2) => {
767
+ const t2 = e2.stack.pop();
768
+ e2.ccPrompt = c$1(t2), e2.status = "waiting_cc";
769
+ }
770
+ }
771
+ }, G = {
772
+ [s$2.HALT]: {
773
+ stackIn: 0,
774
+ stackOut: 0,
775
+ controlsPC: true,
776
+ execute: (e2) => {
777
+ e2.status = "complete";
778
+ }
779
+ },
780
+ [s$2.JUMP]: {
781
+ stackIn: 0,
782
+ stackOut: 0,
783
+ controlsPC: true,
784
+ execute: (e2, r2) => {
785
+ if (r2.arg === void 0)
786
+ return {
787
+ type: "RuntimeError",
788
+ message: "JUMP requires a target address",
789
+ pc: e2.pc,
790
+ opcode: r2.op
791
+ };
792
+ const t2 = r2.arg;
793
+ if (t2 < 0)
794
+ return {
795
+ type: "RuntimeError",
796
+ message: `Invalid jump target: ${t2}`,
797
+ pc: e2.pc,
798
+ opcode: r2.op
799
+ };
800
+ e2.pc = t2;
801
+ }
802
+ },
803
+ [s$2.JUMP_IF_FALSE]: {
804
+ stackIn: 1,
805
+ stackOut: 0,
806
+ controlsPC: true,
807
+ execute: (e2, r2) => {
808
+ const t2 = e2.stack.pop();
809
+ if (r2.arg === void 0)
810
+ return {
811
+ type: "RuntimeError",
812
+ message: "JUMP_IF_FALSE requires a target address",
813
+ pc: e2.pc,
814
+ opcode: r2.op
815
+ };
816
+ const s2 = r2.arg;
817
+ if (s2 < 0)
818
+ return {
819
+ type: "RuntimeError",
820
+ message: `Invalid jump target: ${s2}`,
821
+ pc: e2.pc,
822
+ opcode: r2.op
823
+ };
824
+ y(t2) ? e2.pc++ : e2.pc = s2;
825
+ }
826
+ }
827
+ }, L = {
828
+ [s$2.LOAD]: {
829
+ stackIn: 0,
830
+ stackOut: 1,
831
+ execute: (e2, r2) => {
832
+ const t2 = r2.arg;
833
+ e2.variables.has(t2) ? e2.stack.push(e2.variables.get(t2)) : e2.stack.push(s$1());
834
+ }
835
+ },
836
+ [s$2.STORE]: {
837
+ stackIn: 1,
838
+ stackOut: 0,
839
+ execute: (e2, r2) => {
840
+ const t2 = e2.stack.pop();
841
+ e2.variables.set(r2.arg, t2);
842
+ }
843
+ }
844
+ }, M = {
845
+ [s$2.ITER_START]: {
846
+ stackIn: 1,
847
+ stackOut: 0,
848
+ execute: (e$1, r2) => {
849
+ const t2 = e$1.stack.pop();
850
+ if (t2 == null)
851
+ return {
852
+ type: "TypeError",
853
+ message: "TypeError: Cannot iterate over null or undefined",
854
+ pc: e$1.pc,
855
+ opcode: r2.op
856
+ };
857
+ if (!e(t2))
858
+ return {
859
+ type: "TypeError",
860
+ message: "TypeError: Cannot iterate over non-array value",
861
+ pc: e$1.pc,
862
+ opcode: r2.op
863
+ };
864
+ if (e$1.iterators.length >= 10)
865
+ return {
866
+ type: "RuntimeError",
867
+ message: "RuntimeError: Maximum iterator depth exceeded",
868
+ pc: e$1.pc,
869
+ opcode: r2.op
870
+ };
871
+ e$1.iterators.push({
872
+ array: t2,
873
+ index: 0,
874
+ length: t2.elements.length
875
+ });
876
+ }
877
+ },
878
+ [s$2.ITER_NEXT]: {
879
+ stackIn: 0,
880
+ stackOut: 2,
881
+ // Pushes element and hasMore flag
882
+ execute: (e2, r2) => {
883
+ if (e2.iterators.length === 0)
884
+ return {
885
+ type: "RuntimeError",
886
+ message: "ITER_NEXT: No active iterator",
887
+ pc: e2.pc,
888
+ opcode: r2.op
889
+ };
890
+ const t2 = e2.iterators[e2.iterators.length - 1];
891
+ t2.index < t2.length ? (t2.index < t2.array.elements.length ? e2.stack.push(t2.array.elements[t2.index]) : e2.stack.push(s$1()), e2.stack.push(true), t2.index++) : (e2.stack.push(null), e2.stack.push(false));
892
+ }
893
+ },
894
+ [s$2.ITER_END]: {
895
+ stackIn: 0,
896
+ stackOut: 0,
897
+ execute: (e2, r2) => {
898
+ if (e2.iterators.length === 0)
899
+ return {
900
+ type: "RuntimeError",
901
+ message: "ITER_END: No active iterator",
902
+ pc: e2.pc,
903
+ opcode: r2.op
904
+ };
905
+ e2.iterators.pop();
906
+ }
907
+ }
908
+ };
909
+ function m(e2, r2, t2) {
910
+ const s2 = e2.stack.pop(), c2 = e2.stack.pop(), n2 = t2(c2, s2);
911
+ e2.stack.push(n2);
912
+ }
913
+ const V = {
914
+ [s$2.EQ]: {
915
+ stackIn: 2,
916
+ stackOut: 1,
917
+ execute: (e2, r2) => m(e2, r2, (t2, s2) => {
918
+ if (f(t2) && o(s2) || o(t2) && f(s2))
919
+ return true;
920
+ if (o(t2) && o(s2))
921
+ return true;
922
+ {
923
+ const c2 = d(t2), n2 = d(s2);
924
+ return !isNaN(c2) && !isNaN(n2) ? c2 === n2 : c$1(t2) === c$1(s2);
925
+ }
926
+ })
927
+ },
928
+ [s$2.NEQ]: {
929
+ stackIn: 2,
930
+ stackOut: 1,
931
+ execute: (e2, r2) => m(e2, r2, (t2, s2) => {
932
+ if (f(t2) && o(s2) || o(t2) && f(s2))
933
+ return false;
934
+ if (o(t2) && o(s2))
935
+ return false;
936
+ {
937
+ const c2 = d(t2), n2 = d(s2);
938
+ return !isNaN(c2) && !isNaN(n2) ? c2 !== n2 : c$1(t2) !== c$1(s2);
939
+ }
940
+ })
941
+ },
942
+ [s$2.LT]: {
943
+ stackIn: 2,
944
+ stackOut: 1,
945
+ execute: (e2, r2) => m(e2, r2, (t2, s2) => {
946
+ const c2 = d(t2), n2 = d(s2);
947
+ return c2 < n2;
948
+ })
949
+ },
950
+ [s$2.GT]: {
951
+ stackIn: 2,
952
+ stackOut: 1,
953
+ execute: (e2, r2) => m(e2, r2, (t2, s2) => {
954
+ const c2 = d(t2), n2 = d(s2);
955
+ return c2 > n2;
956
+ })
957
+ },
958
+ [s$2.LTE]: {
959
+ stackIn: 2,
960
+ stackOut: 1,
961
+ execute: (e2, r2) => m(e2, r2, (t2, s2) => {
962
+ const c2 = d(t2), n2 = d(s2);
963
+ return c2 <= n2;
964
+ })
965
+ },
966
+ [s$2.GTE]: {
967
+ stackIn: 2,
968
+ stackOut: 1,
969
+ execute: (e2, r2) => m(e2, r2, (t2, s2) => {
970
+ const c2 = d(t2), n2 = d(s2);
971
+ return c2 >= n2;
972
+ })
973
+ },
974
+ [s$2.EQ_STRICT]: {
975
+ stackIn: 2,
976
+ stackOut: 1,
977
+ execute: (e2, r2) => m(e2, r2, (t2, s2) => t2 === s2)
978
+ },
979
+ [s$2.NEQ_STRICT]: {
980
+ stackIn: 2,
981
+ stackOut: 1,
982
+ execute: (e2, r2) => m(e2, r2, (t2, s2) => t2 !== s2)
983
+ }
984
+ }, F = {
985
+ [s$2.AND]: {
986
+ stackIn: 2,
987
+ stackOut: 1,
988
+ execute: (e2, r2) => {
989
+ const t2 = e2.stack.pop(), s2 = e2.stack.pop(), c2 = y(s2) ? t2 : s2;
990
+ e2.stack.push(c2);
991
+ }
992
+ },
993
+ [s$2.OR]: {
994
+ stackIn: 2,
995
+ stackOut: 1,
996
+ execute: (e2, r2) => {
997
+ const t2 = e2.stack.pop(), s2 = e2.stack.pop(), c2 = y(s2) ? s2 : t2;
998
+ e2.stack.push(c2);
999
+ }
1000
+ },
1001
+ [s$2.NOT]: {
1002
+ stackIn: 1,
1003
+ stackOut: 1,
1004
+ execute: (e2, r2) => {
1005
+ const t2 = e2.stack.pop(), s2 = !y(t2);
1006
+ e2.stack.push(s2);
1007
+ }
1008
+ }
1009
+ }, D = {
1010
+ [s$2.ARRAY_NEW]: {
1011
+ stackIn: 0,
1012
+ stackOut: 1,
1013
+ execute: (e2, r2) => {
1014
+ e2.stack.push(p$1());
1015
+ }
1016
+ },
1017
+ [s$2.ARRAY_PUSH]: {
1018
+ stackIn: 2,
1019
+ stackOut: 1,
1020
+ execute: (e$1, r2) => {
1021
+ const t2 = e$1.stack.pop(), s2 = e$1.stack.pop();
1022
+ if (!e(s2))
1023
+ return {
1024
+ type: "RuntimeError",
1025
+ message: "ARRAY_PUSH requires an array",
1026
+ pc: e$1.pc,
1027
+ opcode: r2.op
1028
+ };
1029
+ s2.elements.push(t2), e$1.stack.push(s2);
1030
+ }
1031
+ },
1032
+ [s$2.ARRAY_GET]: {
1033
+ stackIn: 2,
1034
+ stackOut: 1,
1035
+ execute: (e$1, r2) => {
1036
+ const t$1 = e$1.stack.pop(), s2 = e$1.stack.pop();
1037
+ if (!e(s2))
1038
+ return {
1039
+ type: "RuntimeError",
1040
+ message: "ARRAY_GET requires an array",
1041
+ pc: e$1.pc,
1042
+ opcode: r2.op
1043
+ };
1044
+ if (!t(t$1))
1045
+ return {
1046
+ type: "RuntimeError",
1047
+ message: "ARRAY_GET requires numeric index",
1048
+ pc: e$1.pc,
1049
+ opcode: r2.op
1050
+ };
1051
+ const c2 = s2.elements[t$1] ?? null;
1052
+ e$1.stack.push(c2);
1053
+ }
1054
+ },
1055
+ [s$2.ARRAY_SET]: {
1056
+ stackIn: 3,
1057
+ stackOut: 0,
1058
+ execute: (e$1, r2) => {
1059
+ const t$1 = e$1.stack.pop(), s2 = e$1.stack.pop(), c2 = e$1.stack.pop();
1060
+ if (!e(c2))
1061
+ return {
1062
+ type: "RuntimeError",
1063
+ message: "ARRAY_SET requires an array",
1064
+ pc: e$1.pc,
1065
+ opcode: r2.op
1066
+ };
1067
+ if (!t(s2))
1068
+ return {
1069
+ type: "RuntimeError",
1070
+ message: "ARRAY_SET requires numeric index",
1071
+ pc: e$1.pc,
1072
+ opcode: r2.op
1073
+ };
1074
+ const n2 = Math.floor(s2);
1075
+ if (n2 < 0)
1076
+ return {
1077
+ type: "RuntimeError",
1078
+ message: "ARRAY_SET: Negative index not allowed",
1079
+ pc: e$1.pc,
1080
+ opcode: r2.op
1081
+ };
1082
+ c2.elements[n2] = t$1;
1083
+ }
1084
+ },
1085
+ [s$2.ARRAY_LEN]: {
1086
+ stackIn: 1,
1087
+ stackOut: 1,
1088
+ execute: (e$1, r2) => {
1089
+ const t2 = e$1.stack.pop();
1090
+ if (!e(t2))
1091
+ return {
1092
+ type: "RuntimeError",
1093
+ message: "ARRAY_LEN requires an array",
1094
+ pc: e$1.pc,
1095
+ opcode: r2.op
1096
+ };
1097
+ e$1.stack.push(t2.elements.length);
1098
+ }
1099
+ }
1100
+ }, q = {
1101
+ [s$2.CONCAT]: {
1102
+ stackIn: 2,
1103
+ stackOut: 1,
1104
+ execute: (e2, r2) => {
1105
+ const t2 = e2.stack.pop(), s2 = e2.stack.pop();
1106
+ e2.stack.push(c$1(s2) + c$1(t2));
1107
+ }
1108
+ },
1109
+ [s$2.STRING_LEN]: {
1110
+ stackIn: 1,
1111
+ stackOut: 1,
1112
+ execute: (e2, r2) => {
1113
+ const t2 = e2.stack.pop();
1114
+ if (!n(t2))
1115
+ return {
1116
+ type: "RuntimeError",
1117
+ message: "STRING_LEN requires a string",
1118
+ pc: e2.pc,
1119
+ opcode: r2.op
1120
+ };
1121
+ e2.stack.push(t2.length);
1122
+ }
1123
+ },
1124
+ [s$2.LENGTH]: {
1125
+ stackIn: 1,
1126
+ stackOut: 1,
1127
+ execute: (e$1, r2) => {
1128
+ const t2 = e$1.stack.pop();
1129
+ if (n(t2))
1130
+ e$1.stack.push(t2.length);
1131
+ else if (e(t2))
1132
+ e$1.stack.push(t2.elements.length);
1133
+ else
1134
+ return {
1135
+ type: "RuntimeError",
1136
+ message: "LENGTH requires a string or array",
1137
+ pc: e$1.pc,
1138
+ opcode: r2.op
1139
+ };
1140
+ }
1141
+ },
1142
+ [s$2.JSON_PARSE]: {
1143
+ stackIn: 1,
1144
+ stackOut: 1,
1145
+ execute: (e2, r2) => {
1146
+ const t2 = e2.stack.pop();
1147
+ if (!n(t2))
1148
+ return {
1149
+ type: "RuntimeError",
1150
+ message: "JSON_PARSE requires a string",
1151
+ pc: e2.pc,
1152
+ opcode: r2.op
1153
+ };
1154
+ try {
1155
+ const s2 = JSON.parse(t2);
1156
+ Array.isArray(s2) ? e2.stack.push(p$1(s2)) : e2.stack.push(p$1());
1157
+ } catch {
1158
+ e2.stack.push(p$1());
1159
+ }
1160
+ }
1161
+ },
1162
+ [s$2.TYPEOF]: {
1163
+ stackIn: 1,
1164
+ stackOut: 1,
1165
+ execute: (e2, r2) => {
1166
+ const t2 = e2.stack.pop();
1167
+ e2.stack.push(m$1(t2));
1168
+ }
1169
+ }
1170
+ }, H = {
1171
+ [s$2.INC]: {
1172
+ stackIn: 1,
1173
+ stackOut: 1,
1174
+ execute: (e2, r2) => {
1175
+ const t2 = e2.stack.pop();
1176
+ if (typeof t2 != "string")
1177
+ return {
1178
+ type: "RuntimeError",
1179
+ message: "INC: Invalid variable name",
1180
+ pc: e2.pc,
1181
+ opcode: r2.op
1182
+ };
1183
+ const s2 = e2.variables.get(t2) ?? 0, c2 = d(s2) + 1;
1184
+ e2.variables.set(t2, c2);
1185
+ const n2 = r2.arg === true;
1186
+ e2.stack.push(n2 ? d(s2) : c2);
1187
+ }
1188
+ },
1189
+ [s$2.DEC]: {
1190
+ stackIn: 1,
1191
+ stackOut: 1,
1192
+ execute: (e2, r2) => {
1193
+ const t2 = e2.stack.pop();
1194
+ if (typeof t2 != "string")
1195
+ return {
1196
+ type: "RuntimeError",
1197
+ message: "DEC: Invalid variable name",
1198
+ pc: e2.pc,
1199
+ opcode: r2.op
1200
+ };
1201
+ const s2 = e2.variables.get(t2) ?? 0, c2 = d(s2) - 1;
1202
+ e2.variables.set(t2, c2);
1203
+ const n2 = r2.arg === true;
1204
+ e2.stack.push(n2 ? d(s2) : c2);
1205
+ }
1206
+ }
1207
+ }, Y = {
1208
+ [s$2.RETURN]: {
1209
+ stackIn: 0,
1210
+ stackOut: 0,
1211
+ controlsPC: true,
1212
+ execute: (e2, r2) => {
1213
+ const t2 = e2.stack.pop() ?? null;
1214
+ e2.returnValue = t2, e2.status = "complete";
1215
+ }
1216
+ },
1217
+ [s$2.BREAK]: {
1218
+ stackIn: 0,
1219
+ stackOut: 0,
1220
+ controlsPC: true,
1221
+ execute: (e2, r2) => {
1222
+ if (r2.arg === void 0)
1223
+ return {
1224
+ type: "RuntimeError",
1225
+ message: "BREAK requires a target address",
1226
+ pc: e2.pc,
1227
+ opcode: r2.op
1228
+ };
1229
+ const t2 = r2.arg;
1230
+ if (t2 < 0)
1231
+ return {
1232
+ type: "RuntimeError",
1233
+ message: `Invalid break target: ${t2}`,
1234
+ pc: e2.pc,
1235
+ opcode: r2.op
1236
+ };
1237
+ e2.pc = t2;
1238
+ }
1239
+ },
1240
+ [s$2.CONTINUE]: {
1241
+ stackIn: 0,
1242
+ stackOut: 0,
1243
+ controlsPC: true,
1244
+ execute: (e2, r2) => {
1245
+ if (r2.arg === void 0)
1246
+ return {
1247
+ type: "RuntimeError",
1248
+ message: "CONTINUE requires a target address",
1249
+ pc: e2.pc,
1250
+ opcode: r2.op
1251
+ };
1252
+ const t2 = r2.arg;
1253
+ if (t2 < 0)
1254
+ return {
1255
+ type: "RuntimeError",
1256
+ message: `Invalid continue target: ${t2}`,
1257
+ pc: e2.pc,
1258
+ opcode: r2.op
1259
+ };
1260
+ e2.pc = t2;
1261
+ }
1262
+ },
1263
+ [s$2.FS_LIST_FILES]: {
1264
+ stackIn: 1,
1265
+ // Minimum 1 argument (path), optionally 2 (path + options)
1266
+ stackOut: 0,
1267
+ controlsPC: true,
1268
+ execute: (e$1, r2) => {
1269
+ if (e$1.stack.length < 1)
1270
+ return {
1271
+ type: "StackUnderflow",
1272
+ message: "FS_LIST_FILES: Stack underflow",
1273
+ pc: e$1.pc,
1274
+ opcode: r2.op
1275
+ };
1276
+ let t2, s2 = {};
1277
+ const c2 = e$1.stack[e$1.stack.length - 1];
1278
+ if (e$1.stack.length >= 2 && typeof c2 == "object" && c2 !== null && !e(c2) && (s2 = e$1.stack.pop()), t2 = e$1.stack.pop(), !n(t2))
1279
+ return {
1280
+ type: "RuntimeError",
1281
+ message: "FS_LIST_FILES requires a string path",
1282
+ pc: e$1.pc,
1283
+ opcode: r2.op
1284
+ };
1285
+ e$1.fsOperation = {
1286
+ type: "listFiles",
1287
+ path: t2,
1288
+ options: s2
1289
+ }, e$1.status = "waiting_fs";
1290
+ }
1291
+ },
1292
+ // String method handlers
1293
+ [s$2.STRING_SUBSTRING]: {
1294
+ stackIn: 2,
1295
+ // Minimum 2 (string, start), optionally 3 (string, start, end)
1296
+ stackOut: 1,
1297
+ execute: (e2, r2) => {
1298
+ if (e2.stack.length < 2)
1299
+ return {
1300
+ type: "StackUnderflow",
1301
+ message: "STRING_SUBSTRING: Stack underflow",
1302
+ pc: e2.pc,
1303
+ opcode: r2.op
1304
+ };
1305
+ const t2 = e2.stack.length;
1306
+ let s2, c2, n$12;
1307
+ const a2 = e2.stack[t2 - 1], i2 = e2.stack[t2 - 2];
1308
+ if (t2 >= 3 && typeof a2 == "number" && typeof i2 == "number" ? (n$12 = e2.stack.pop(), c2 = e2.stack.pop(), s2 = e2.stack.pop()) : (c2 = e2.stack.pop(), s2 = e2.stack.pop(), n$12 = void 0), !n(s2))
1309
+ return {
1310
+ type: "RuntimeError",
1311
+ message: "STRING_SUBSTRING requires a string",
1312
+ pc: e2.pc,
1313
+ opcode: r2.op
1314
+ };
1315
+ if (typeof c2 != "number")
1316
+ return {
1317
+ type: "RuntimeError",
1318
+ message: "STRING_SUBSTRING requires numeric start index",
1319
+ pc: e2.pc,
1320
+ opcode: r2.op
1321
+ };
1322
+ const p2 = s2.length;
1323
+ c2 < 0 && (c2 = Math.max(0, p2 + c2)), n$12 !== void 0 && n$12 < 0 && (n$12 = Math.max(0, p2 + n$12));
1324
+ const I2 = n$12 !== void 0 ? s2.substring(c2, n$12) : s2.substring(c2);
1325
+ e2.stack.push(I2);
1326
+ }
1327
+ },
1328
+ [s$2.STRING_INDEXOF]: {
1329
+ stackIn: 2,
1330
+ stackOut: 1,
1331
+ execute: (e2, r2) => {
1332
+ const t2 = e2.stack.pop(), s2 = e2.stack.pop();
1333
+ if (!n(s2) || !n(t2))
1334
+ return {
1335
+ type: "RuntimeError",
1336
+ message: "STRING_INDEXOF requires string arguments",
1337
+ pc: e2.pc,
1338
+ opcode: r2.op
1339
+ };
1340
+ e2.stack.push(s2.indexOf(t2));
1341
+ }
1342
+ },
1343
+ [s$2.STRING_SPLIT]: {
1344
+ stackIn: 2,
1345
+ stackOut: 1,
1346
+ execute: (e2, r2) => {
1347
+ const t2 = e2.stack.pop(), s2 = e2.stack.pop();
1348
+ if (!n(s2) || !n(t2))
1349
+ return {
1350
+ type: "RuntimeError",
1351
+ message: "STRING_SPLIT requires string arguments",
1352
+ pc: e2.pc,
1353
+ opcode: r2.op
1354
+ };
1355
+ let c2;
1356
+ t2 === "" ? c2 = s2.split("") : c2 = s2.split(t2), e2.stack.push(p$1(c2));
1357
+ }
1358
+ },
1359
+ [s$2.STRING_SLICE]: {
1360
+ stackIn: 2,
1361
+ // Minimum 2 (string, start), optionally 3 (string, start, end)
1362
+ stackOut: 1,
1363
+ execute: (e2, r2) => {
1364
+ if (e2.stack.length < 2)
1365
+ return {
1366
+ type: "StackUnderflow",
1367
+ message: "STRING_SLICE: Stack underflow",
1368
+ pc: e2.pc,
1369
+ opcode: r2.op
1370
+ };
1371
+ const t2 = e2.stack.length;
1372
+ let s2, c2, n$12;
1373
+ const a2 = e2.stack.length >= 1 ? e2.stack[t2 - 1] : void 0, i2 = e2.stack.length >= 2 ? e2.stack[t2 - 2] : void 0;
1374
+ if (t2 >= 3 && typeof a2 == "number" && typeof i2 == "number" ? (n$12 = e2.stack.pop(), c2 = e2.stack.pop(), s2 = e2.stack.pop()) : (c2 = e2.stack.pop(), s2 = e2.stack.pop(), n$12 = void 0), !n(s2))
1375
+ return {
1376
+ type: "RuntimeError",
1377
+ message: "STRING_SLICE requires a string",
1378
+ pc: e2.pc,
1379
+ opcode: r2.op
1380
+ };
1381
+ if (typeof c2 != "number")
1382
+ return {
1383
+ type: "RuntimeError",
1384
+ message: "STRING_SLICE requires numeric start index",
1385
+ pc: e2.pc,
1386
+ opcode: r2.op
1387
+ };
1388
+ const p2 = n$12 !== void 0 ? s2.slice(c2, n$12) : s2.slice(c2);
1389
+ e2.stack.push(p2);
1390
+ }
1391
+ },
1392
+ [s$2.STRING_CHARAT]: {
1393
+ stackIn: 2,
1394
+ stackOut: 1,
1395
+ execute: (e2, r2) => {
1396
+ const t2 = e2.stack.pop(), s2 = e2.stack.pop();
1397
+ if (!n(s2))
1398
+ return {
1399
+ type: "RuntimeError",
1400
+ message: "STRING_CHARAT requires a string",
1401
+ pc: e2.pc,
1402
+ opcode: r2.op
1403
+ };
1404
+ if (typeof t2 != "number")
1405
+ return {
1406
+ type: "RuntimeError",
1407
+ message: "STRING_CHARAT requires numeric index",
1408
+ pc: e2.pc,
1409
+ opcode: r2.op
1410
+ };
1411
+ const c2 = s2.charAt(t2);
1412
+ e2.stack.push(c2);
1413
+ }
1414
+ },
1415
+ [s$2.STRING_TOUPPERCASE]: {
1416
+ stackIn: 1,
1417
+ stackOut: 1,
1418
+ execute: (e2, r2) => {
1419
+ const t2 = e2.stack.pop();
1420
+ if (!n(t2))
1421
+ return {
1422
+ type: "RuntimeError",
1423
+ message: "STRING_TOUPPERCASE requires a string",
1424
+ pc: e2.pc,
1425
+ opcode: r2.op
1426
+ };
1427
+ e2.stack.push(t2.toUpperCase());
1428
+ }
1429
+ },
1430
+ [s$2.STRING_TOLOWERCASE]: {
1431
+ stackIn: 1,
1432
+ stackOut: 1,
1433
+ execute: (e2, r2) => {
1434
+ const t2 = e2.stack.pop();
1435
+ if (!n(t2))
1436
+ return {
1437
+ type: "RuntimeError",
1438
+ message: "STRING_TOLOWERCASE requires a string",
1439
+ pc: e2.pc,
1440
+ opcode: r2.op
1441
+ };
1442
+ e2.stack.push(t2.toLowerCase());
1443
+ }
1444
+ }
1445
+ }, $ = {
1446
+ ...C,
1447
+ ...b,
1448
+ ...U,
1449
+ ...G,
1450
+ ...L,
1451
+ ...M,
1452
+ ...V,
1453
+ ...F,
1454
+ ...D,
1455
+ ...q,
1456
+ ...H,
1457
+ ...Y
1458
+ };
1459
+ class N {
1460
+ validateStack(r2, t2, s2) {
1461
+ if (s2.stack.length < r2.stackIn)
1462
+ return {
1463
+ type: "StackUnderflow",
1464
+ message: `${s$2[t2.op]}: Stack underflow`,
1465
+ pc: s2.pc,
1466
+ opcode: t2.op
1467
+ };
1468
+ }
1469
+ execute(r2, t2) {
1470
+ const s2 = {
1471
+ pc: (t2 == null ? void 0 : t2.pc) ?? 0,
1472
+ stack: (t2 == null ? void 0 : t2.stack) ?? [],
1473
+ variables: (t2 == null ? void 0 : t2.variables) ?? /* @__PURE__ */ new Map(),
618
1474
  status: "running",
619
- output: (s2 == null ? void 0 : s2.output) ?? [],
620
- iterators: (s2 == null ? void 0 : s2.iterators) ?? [],
621
- ...s2
1475
+ output: (t2 == null ? void 0 : t2.output) ?? [],
1476
+ iterators: (t2 == null ? void 0 : t2.iterators) ?? [],
1477
+ ...t2
622
1478
  };
623
- for (; r2.status === "running" && r2.pc < a2.length; ) {
624
- const n$1 = a2[r2.pc];
625
- switch (n$1.op) {
626
- case r$1.HALT:
627
- r2.status = "complete";
628
- break;
629
- case r$1.PUSH:
630
- r2.stack.push(n$1.arg), r2.pc++;
631
- break;
632
- case r$1.PUSH_UNDEFINED:
633
- r2.stack.push(s$1()), r2.pc++;
634
- break;
635
- case r$1.POP:
636
- r2.stack.pop(), r2.pc++;
637
- break;
638
- case r$1.LOAD: {
639
- const t2 = n$1.arg;
640
- r2.variables.has(t2) ? r2.stack.push(r2.variables.get(t2)) : r2.stack.push(s$1()), r2.pc++;
641
- break;
642
- }
643
- case r$1.STORE:
644
- const f$1 = r2.stack.pop();
645
- if (f$1 === void 0) {
646
- r2.status = "error", r2.error = "STORE: Stack underflow";
647
- break;
648
- }
649
- r2.variables.set(n$1.arg, f$1), r2.pc++;
650
- break;
651
- case r$1.CONCAT:
652
- const u2 = r2.stack.pop(), l2 = r2.stack.pop();
653
- if (l2 === void 0 || u2 === void 0) {
654
- r2.status = "error", r2.error = "CONCAT: Stack underflow";
655
- break;
656
- }
657
- r2.stack.push(c$1(l2) + c$1(u2)), r2.pc++;
658
- break;
659
- case r$1.PRINT:
660
- const k2 = r2.stack.pop();
661
- k2 !== void 0 && r2.output.push(c$1(k2)), r2.pc++;
662
- break;
663
- case r$1.CC: {
664
- const t2 = r2.stack.pop();
665
- if (t2 === void 0) {
666
- r2.status = "error", r2.error = "CC: Stack underflow";
667
- break;
668
- }
669
- r2.ccPrompt = c$1(t2), r2.status = "waiting_cc";
670
- break;
671
- }
672
- // Array operations
673
- case r$1.ARRAY_NEW:
674
- r2.stack.push(p$1()), r2.pc++;
675
- break;
676
- case r$1.ARRAY_PUSH: {
677
- const t2 = r2.stack.pop(), e$1 = r2.stack.pop();
678
- if (t2 === void 0 || e$1 === void 0) {
679
- r2.status = "error", r2.error = "ARRAY_PUSH: Stack underflow";
680
- break;
681
- }
682
- if (!e(e$1)) {
683
- r2.status = "error", r2.error = "ARRAY_PUSH requires an array";
684
- break;
685
- }
686
- e$1.elements.push(t2), r2.stack.push(e$1), r2.pc++;
687
- break;
688
- }
689
- case r$1.ARRAY_GET: {
690
- const t$1 = r2.stack.pop(), e$1 = r2.stack.pop();
691
- if (t$1 === void 0 || e$1 === void 0) {
692
- r2.status = "error", r2.error = "ARRAY_GET: Stack underflow";
693
- break;
694
- }
695
- if (!e(e$1)) {
696
- r2.status = "error", r2.error = "ARRAY_GET requires an array";
697
- break;
698
- }
699
- if (!t(t$1)) {
700
- r2.status = "error", r2.error = "ARRAY_GET requires numeric index";
701
- break;
702
- }
703
- const o2 = e$1.elements[t$1] ?? null;
704
- r2.stack.push(o2), r2.pc++;
705
- break;
706
- }
707
- case r$1.ARRAY_SET: {
708
- const t$1 = r2.stack.pop(), e$1 = r2.stack.pop(), o2 = r2.stack.pop();
709
- if (t$1 === void 0 || e$1 === void 0 || o2 === void 0) {
710
- r2.status = "error", r2.error = "ARRAY_SET: Stack underflow";
711
- break;
712
- }
713
- if (!e(o2)) {
714
- r2.status = "error", r2.error = "ARRAY_SET requires an array";
715
- break;
716
- }
717
- if (!t(e$1)) {
718
- r2.status = "error", r2.error = "ARRAY_SET requires numeric index";
719
- break;
720
- }
721
- const i2 = Math.floor(e$1);
722
- if (i2 < 0) {
723
- r2.status = "error", r2.error = "ARRAY_SET: Negative index not allowed";
724
- break;
725
- }
726
- o2.elements[i2] = t$1, r2.pc++;
727
- break;
728
- }
729
- case r$1.ARRAY_LEN: {
730
- const t2 = r2.stack.pop();
731
- if (t2 === void 0) {
732
- r2.status = "error", r2.error = "ARRAY_LEN: Stack underflow";
733
- break;
734
- }
735
- if (!e(t2)) {
736
- r2.status = "error", r2.error = "ARRAY_LEN requires an array";
737
- break;
738
- }
739
- r2.stack.push(t2.elements.length), r2.pc++;
740
- break;
741
- }
742
- case r$1.STRING_LEN: {
743
- const t2 = r2.stack.pop();
744
- if (t2 === void 0) {
745
- r2.status = "error", r2.error = "STRING_LEN: Stack underflow";
746
- break;
747
- }
748
- if (!n(t2)) {
749
- r2.status = "error", r2.error = "STRING_LEN requires a string";
750
- break;
751
- }
752
- r2.stack.push(t2.length), r2.pc++;
753
- break;
754
- }
755
- case r$1.LENGTH: {
756
- const t2 = r2.stack.pop();
757
- if (t2 === void 0) {
758
- r2.status = "error", r2.error = "LENGTH: Stack underflow";
759
- break;
760
- }
761
- if (n(t2))
762
- r2.stack.push(t2.length);
763
- else if (e(t2))
764
- r2.stack.push(t2.elements.length);
765
- else {
766
- r2.status = "error", r2.error = "LENGTH requires a string or array";
767
- break;
768
- }
769
- r2.pc++;
770
- break;
771
- }
772
- case r$1.JSON_PARSE: {
773
- const t2 = r2.stack.pop();
774
- if (t2 === void 0) {
775
- r2.status = "error", r2.error = "JSON_PARSE: Stack underflow";
776
- break;
777
- }
778
- if (!n(t2)) {
779
- r2.status = "error", r2.error = "JSON_PARSE requires a string";
780
- break;
781
- }
782
- try {
783
- const e2 = JSON.parse(t2);
784
- Array.isArray(e2) ? r2.stack.push(p$1(e2)) : r2.stack.push(p$1());
785
- } catch {
786
- r2.stack.push(p$1());
787
- }
788
- r2.pc++;
789
- break;
790
- }
791
- case r$1.TYPEOF: {
792
- const t2 = r2.stack.pop();
793
- if (t2 === void 0) {
794
- r2.status = "error", r2.error = "TYPEOF: Stack underflow";
795
- break;
796
- }
797
- r2.stack.push(m(t2)), r2.pc++;
798
- break;
799
- }
800
- // Arithmetic operations
801
- case r$1.ADD: {
802
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
803
- if (e2 === void 0 || t2 === void 0) {
804
- r2.status = "error", r2.error = "ADD: Stack underflow";
805
- break;
806
- }
807
- const o2 = d(e2), i2 = d(t2);
808
- r2.stack.push(o2 + i2), r2.pc++;
809
- break;
810
- }
811
- case r$1.SUB: {
812
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
813
- if (e2 === void 0 || t2 === void 0) {
814
- r2.status = "error", r2.error = "SUB: Stack underflow";
815
- break;
816
- }
817
- const o2 = d(e2), i2 = d(t2);
818
- r2.stack.push(o2 - i2), r2.pc++;
819
- break;
820
- }
821
- case r$1.MUL: {
822
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
823
- if (e2 === void 0 || t2 === void 0) {
824
- r2.status = "error", r2.error = "MUL: Stack underflow";
825
- break;
826
- }
827
- const o2 = d(e2), i2 = d(t2);
828
- r2.stack.push(o2 * i2), r2.pc++;
829
- break;
830
- }
831
- case r$1.DIV: {
832
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
833
- if (e2 === void 0 || t2 === void 0) {
834
- r2.status = "error", r2.error = "DIV: Stack underflow";
835
- break;
836
- }
837
- const o2 = d(e2), i2 = d(t2);
838
- if (i2 === 0) {
839
- r2.status = "error", r2.error = "Division by zero";
840
- break;
841
- }
842
- r2.stack.push(o2 / i2), r2.pc++;
843
- break;
844
- }
845
- case r$1.MOD: {
846
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
847
- if (e2 === void 0 || t2 === void 0) {
848
- r2.status = "error", r2.error = "MOD: Stack underflow";
849
- break;
850
- }
851
- const o2 = d(e2), i2 = d(t2);
852
- r2.stack.push(o2 % i2), r2.pc++;
853
- break;
854
- }
855
- // Unary operations
856
- case r$1.UNARY_MINUS: {
857
- const t2 = r2.stack.pop();
858
- if (t2 === void 0) {
859
- r2.status = "error", r2.error = "UNARY_MINUS: Stack underflow";
860
- break;
861
- }
862
- const e2 = d(t2);
863
- r2.stack.push(-e2), r2.pc++;
864
- break;
865
- }
866
- case r$1.UNARY_PLUS: {
867
- const t2 = r2.stack.pop();
868
- if (t2 === void 0) {
869
- r2.status = "error", r2.error = "UNARY_PLUS: Stack underflow";
870
- break;
871
- }
872
- const e2 = d(t2);
873
- r2.stack.push(e2), r2.pc++;
874
- break;
875
- }
876
- case r$1.INC: {
877
- const t2 = r2.stack.pop();
878
- if (t2 === void 0 || typeof t2 != "string") {
879
- r2.status = "error", r2.error = "INC: Invalid variable name";
880
- break;
881
- }
882
- const e2 = r2.variables.get(t2) ?? 0, o2 = d(e2) + 1;
883
- r2.variables.set(t2, o2);
884
- const i2 = n$1.arg === true;
885
- r2.stack.push(i2 ? d(e2) : o2), r2.pc++;
886
- break;
887
- }
888
- case r$1.DEC: {
889
- const t2 = r2.stack.pop();
890
- if (t2 === void 0 || typeof t2 != "string") {
891
- r2.status = "error", r2.error = "DEC: Invalid variable name";
892
- break;
893
- }
894
- const e2 = r2.variables.get(t2) ?? 0, o2 = d(e2) - 1;
895
- r2.variables.set(t2, o2);
896
- const i2 = n$1.arg === true;
897
- r2.stack.push(i2 ? d(e2) : o2), r2.pc++;
1479
+ for (; s2.status === "running" && s2.pc < r2.length; ) {
1480
+ const c2 = r2[s2.pc], n2 = $[c2.op];
1481
+ if (n2) {
1482
+ const a2 = this.validateStack(n2, c2, s2);
1483
+ if (a2) {
1484
+ s2.status = "error", s2.error = a2.message;
898
1485
  break;
899
1486
  }
900
- // Comparison operations
901
- case r$1.EQ: {
902
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
903
- if (e2 === void 0 || t2 === void 0) {
904
- r2.status = "error", r2.error = "EQ: Stack underflow";
905
- break;
906
- }
907
- if (f(e2) && o(t2) || o(e2) && f(t2))
908
- r2.stack.push(true);
909
- else if (o(e2) && o(t2))
910
- r2.stack.push(true);
911
- else {
912
- const o2 = d(e2), i2 = d(t2);
913
- !isNaN(o2) && !isNaN(i2) ? r2.stack.push(o2 === i2) : r2.stack.push(c$1(e2) === c$1(t2));
914
- }
915
- r2.pc++;
1487
+ if ((c2.op === s$2.JUMP || c2.op === s$2.JUMP_IF_FALSE || c2.op === s$2.BREAK || c2.op === s$2.CONTINUE) && c2.arg !== void 0 && c2.arg >= r2.length) {
1488
+ s2.status = "error";
1489
+ const p2 = c2.op === s$2.JUMP || c2.op === s$2.JUMP_IF_FALSE ? "jump" : c2.op === s$2.BREAK ? "break" : "continue";
1490
+ s2.error = `Invalid ${p2} target: ${c2.arg}`;
916
1491
  break;
917
1492
  }
918
- case r$1.NEQ: {
919
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
920
- if (e2 === void 0 || t2 === void 0) {
921
- r2.status = "error", r2.error = "NEQ: Stack underflow";
922
- break;
923
- }
924
- if (f(e2) && o(t2) || o(e2) && f(t2))
925
- r2.stack.push(false);
926
- else if (o(e2) && o(t2))
927
- r2.stack.push(false);
928
- else {
929
- const o2 = d(e2), i2 = d(t2);
930
- !isNaN(o2) && !isNaN(i2) ? r2.stack.push(o2 !== i2) : r2.stack.push(c$1(e2) !== c$1(t2));
931
- }
932
- r2.pc++;
933
- break;
934
- }
935
- case r$1.LT: {
936
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
937
- if (e2 === void 0 || t2 === void 0) {
938
- r2.status = "error", r2.error = "LT: Stack underflow";
939
- break;
940
- }
941
- const o2 = d(e2), i2 = d(t2);
942
- r2.stack.push(o2 < i2), r2.pc++;
943
- break;
944
- }
945
- case r$1.GT: {
946
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
947
- if (e2 === void 0 || t2 === void 0) {
948
- r2.status = "error", r2.error = "GT: Stack underflow";
949
- break;
950
- }
951
- const o2 = d(e2), i2 = d(t2);
952
- r2.stack.push(o2 > i2), r2.pc++;
953
- break;
954
- }
955
- case r$1.LTE: {
956
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
957
- if (e2 === void 0 || t2 === void 0) {
958
- r2.status = "error", r2.error = "LTE: Stack underflow";
959
- break;
960
- }
961
- const o2 = d(e2), i2 = d(t2);
962
- r2.stack.push(o2 <= i2), r2.pc++;
963
- break;
964
- }
965
- case r$1.GTE: {
966
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
967
- if (e2 === void 0 || t2 === void 0) {
968
- r2.status = "error", r2.error = "GTE: Stack underflow";
969
- break;
970
- }
971
- const o2 = d(e2), i2 = d(t2);
972
- r2.stack.push(o2 >= i2), r2.pc++;
973
- break;
974
- }
975
- case r$1.EQ_STRICT: {
976
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
977
- if (e2 === void 0 || t2 === void 0) {
978
- r2.status = "error", r2.error = "EQ_STRICT: Stack underflow";
979
- break;
980
- }
981
- r2.stack.push(e2 === t2), r2.pc++;
982
- break;
983
- }
984
- case r$1.NEQ_STRICT: {
985
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
986
- if (e2 === void 0 || t2 === void 0) {
987
- r2.status = "error", r2.error = "NEQ_STRICT: Stack underflow";
988
- break;
989
- }
990
- r2.stack.push(e2 !== t2), r2.pc++;
991
- break;
992
- }
993
- // Jump operations
994
- case r$1.JUMP: {
995
- if (n$1.arg === void 0) {
996
- r2.status = "error", r2.error = "JUMP requires a target address";
997
- break;
998
- }
999
- const t2 = n$1.arg;
1000
- if (t2 < 0 || t2 >= a2.length) {
1001
- r2.status = "error", r2.error = `Invalid jump target: ${t2}`;
1002
- break;
1003
- }
1004
- r2.pc = t2;
1005
- break;
1006
- }
1007
- case r$1.JUMP_IF_FALSE: {
1008
- const t2 = r2.stack.pop();
1009
- if (t2 === void 0) {
1010
- r2.status = "error", r2.error = "JUMP_IF_FALSE: Stack underflow";
1011
- break;
1012
- }
1013
- if (n$1.arg === void 0) {
1014
- r2.status = "error", r2.error = "JUMP_IF_FALSE requires a target address";
1015
- break;
1016
- }
1017
- const e2 = n$1.arg;
1018
- if (e2 < 0 || e2 >= a2.length) {
1019
- r2.status = "error", r2.error = `Invalid jump target: ${e2}`;
1020
- break;
1021
- }
1022
- y(t2) ? r2.pc++ : r2.pc = e2;
1493
+ const i2 = n2.execute(s2, c2);
1494
+ if (i2) {
1495
+ s2.status = "error", s2.error = i2.message;
1023
1496
  break;
1024
1497
  }
1025
- case r$1.ITER_START: {
1026
- if (r2.stack.length === 0) {
1027
- r2.status = "error", r2.error = "ITER_START: Stack underflow";
1028
- break;
1029
- }
1030
- const t2 = r2.stack.pop();
1031
- if (t2 == null) {
1032
- r2.status = "error", r2.error = "TypeError: Cannot iterate over null or undefined";
1033
- break;
1034
- }
1035
- if (!e(t2)) {
1036
- r2.status = "error", r2.error = "TypeError: Cannot iterate over non-array value";
1037
- break;
1038
- }
1039
- if (r2.iterators.length >= 10) {
1040
- r2.status = "error", r2.error = "RuntimeError: Maximum iterator depth exceeded";
1041
- break;
1042
- }
1043
- const e$1 = p$1([...t2.elements]);
1044
- r2.iterators.push({
1045
- array: e$1,
1046
- index: 0
1047
- }), r2.pc++;
1048
- break;
1049
- }
1050
- case r$1.ITER_NEXT: {
1051
- if (r2.iterators.length === 0) {
1052
- r2.status = "error", r2.error = "ITER_NEXT: No active iterator";
1053
- break;
1054
- }
1055
- const t2 = r2.iterators[r2.iterators.length - 1];
1056
- t2.index < t2.array.elements.length ? (r2.stack.push(t2.array.elements[t2.index]), r2.stack.push(true), t2.index++) : (r2.stack.push(null), r2.stack.push(false)), r2.pc++;
1057
- break;
1058
- }
1059
- case r$1.ITER_END: {
1060
- if (r2.iterators.length === 0) {
1061
- r2.status = "error", r2.error = "ITER_END: No active iterator";
1062
- break;
1063
- }
1064
- r2.iterators.pop(), r2.pc++;
1065
- break;
1066
- }
1067
- // Logical operators
1068
- case r$1.AND: {
1069
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
1070
- if (e2 === void 0 || t2 === void 0) {
1071
- r2.status = "error", r2.error = "AND: Stack underflow";
1072
- break;
1073
- }
1074
- y(e2) ? r2.stack.push(t2) : r2.stack.push(e2), r2.pc++;
1075
- break;
1076
- }
1077
- case r$1.OR: {
1078
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
1079
- if (e2 === void 0 || t2 === void 0) {
1080
- r2.status = "error", r2.error = "OR: Stack underflow";
1081
- break;
1082
- }
1083
- y(e2) ? r2.stack.push(e2) : r2.stack.push(t2), r2.pc++;
1084
- break;
1085
- }
1086
- case r$1.NOT: {
1087
- const t2 = r2.stack.pop();
1088
- if (t2 === void 0) {
1089
- r2.status = "error", r2.error = "NOT: Stack underflow";
1090
- break;
1091
- }
1092
- r2.stack.push(!y(t2)), r2.pc++;
1093
- break;
1094
- }
1095
- case r$1.RETURN: {
1096
- const t2 = r2.stack.pop() ?? null;
1097
- r2.returnValue = t2, r2.status = "complete";
1098
- break;
1099
- }
1100
- // String methods
1101
- case r$1.STRING_SUBSTRING: {
1102
- if (r2.stack.length < 2) {
1103
- r2.status = "error", r2.error = "STRING_SUBSTRING: Stack underflow";
1104
- break;
1105
- }
1106
- const t2 = r2.stack.length;
1107
- let e2, o2, i2;
1108
- const w2 = r2.stack[t2 - 1], _ = r2.stack[t2 - 2];
1109
- if (t2 >= 3 && typeof w2 == "number" && typeof _ == "number" ? (i2 = r2.stack.pop(), o2 = r2.stack.pop(), e2 = r2.stack.pop()) : (o2 = r2.stack.pop(), e2 = r2.stack.pop(), i2 = void 0), !n(e2)) {
1110
- r2.status = "error", r2.error = "STRING_SUBSTRING requires a string";
1111
- break;
1112
- }
1113
- if (typeof o2 != "number") {
1114
- r2.status = "error", r2.error = "STRING_SUBSTRING requires numeric start index";
1115
- break;
1116
- }
1117
- const S = e2.length;
1118
- o2 < 0 && (o2 = Math.max(0, S + o2)), i2 !== void 0 && i2 < 0 && (i2 = Math.max(0, S + i2));
1119
- const O = i2 !== void 0 ? e2.substring(o2, i2) : e2.substring(o2);
1120
- r2.stack.push(O), r2.pc++;
1121
- break;
1122
- }
1123
- case r$1.STRING_INDEXOF: {
1124
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
1125
- if (t2 === void 0 || e2 === void 0) {
1126
- r2.status = "error", r2.error = "STRING_INDEXOF: Stack underflow";
1127
- break;
1128
- }
1129
- if (!n(e2) || !n(t2)) {
1130
- r2.status = "error", r2.error = "STRING_INDEXOF requires string arguments";
1131
- break;
1132
- }
1133
- r2.stack.push(e2.indexOf(t2)), r2.pc++;
1134
- break;
1135
- }
1136
- case r$1.STRING_SPLIT: {
1137
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
1138
- if (t2 === void 0 || e2 === void 0) {
1139
- r2.status = "error", r2.error = "STRING_SPLIT: Stack underflow";
1140
- break;
1141
- }
1142
- if (!n(e2) || !n(t2)) {
1143
- r2.status = "error", r2.error = "STRING_SPLIT requires string arguments";
1144
- break;
1145
- }
1146
- let o2;
1147
- t2 === "" ? o2 = e2.split("") : o2 = e2.split(t2), r2.stack.push(p$1(o2)), r2.pc++;
1148
- break;
1149
- }
1150
- case r$1.STRING_SLICE: {
1151
- if (r2.stack.length < 2) {
1152
- r2.status = "error", r2.error = "STRING_SLICE: Stack underflow";
1153
- break;
1154
- }
1155
- const t2 = r2.stack.length;
1156
- let e2, o2, i2;
1157
- const w2 = r2.stack[t2 - 1], _ = r2.stack[t2 - 2];
1158
- if (t2 >= 3 && typeof w2 == "number" && typeof _ == "number" ? (i2 = r2.stack.pop(), o2 = r2.stack.pop(), e2 = r2.stack.pop()) : (o2 = r2.stack.pop(), e2 = r2.stack.pop(), i2 = void 0), !n(e2)) {
1159
- r2.status = "error", r2.error = "STRING_SLICE requires a string";
1160
- break;
1161
- }
1162
- if (typeof o2 != "number") {
1163
- r2.status = "error", r2.error = "STRING_SLICE requires numeric start index";
1164
- break;
1165
- }
1166
- const S = i2 !== void 0 ? e2.slice(o2, i2) : e2.slice(o2);
1167
- r2.stack.push(S), r2.pc++;
1168
- break;
1169
- }
1170
- case r$1.STRING_CHARAT: {
1171
- const t2 = r2.stack.pop(), e2 = r2.stack.pop();
1172
- if (t2 === void 0 || e2 === void 0) {
1173
- r2.status = "error", r2.error = "STRING_CHARAT: Stack underflow";
1174
- break;
1175
- }
1176
- if (!n(e2)) {
1177
- r2.status = "error", r2.error = "STRING_CHARAT requires a string";
1178
- break;
1179
- }
1180
- if (typeof t2 != "number") {
1181
- r2.status = "error", r2.error = "STRING_CHARAT requires numeric index";
1182
- break;
1183
- }
1184
- const o2 = e2.charAt(t2);
1185
- r2.stack.push(o2), r2.pc++;
1186
- break;
1187
- }
1188
- case r$1.STRING_TOUPPERCASE: {
1189
- const t2 = r2.stack.pop();
1190
- if (t2 === void 0) {
1191
- r2.status = "error", r2.error = "STRING_TOUPPERCASE: Stack underflow";
1192
- break;
1193
- }
1194
- if (!n(t2)) {
1195
- r2.status = "error", r2.error = "STRING_TOUPPERCASE requires a string";
1196
- break;
1197
- }
1198
- r2.stack.push(t2.toUpperCase()), r2.pc++;
1199
- break;
1200
- }
1201
- case r$1.STRING_TOLOWERCASE: {
1202
- const t2 = r2.stack.pop();
1203
- if (t2 === void 0) {
1204
- r2.status = "error", r2.error = "STRING_TOLOWERCASE: Stack underflow";
1205
- break;
1206
- }
1207
- if (!n(t2)) {
1208
- r2.status = "error", r2.error = "STRING_TOLOWERCASE requires a string";
1209
- break;
1210
- }
1211
- r2.stack.push(t2.toLowerCase()), r2.pc++;
1212
- break;
1213
- }
1214
- case r$1.BREAK: {
1215
- if (n$1.arg === void 0) {
1216
- r2.status = "error", r2.error = "BREAK requires a target address";
1217
- break;
1218
- }
1219
- const t2 = n$1.arg;
1220
- if (t2 < 0 || t2 >= a2.length) {
1221
- r2.status = "error", r2.error = `Invalid break target: ${t2}`;
1222
- break;
1223
- }
1224
- r2.pc = t2;
1225
- break;
1226
- }
1227
- case r$1.CONTINUE: {
1228
- if (n$1.arg === void 0) {
1229
- r2.status = "error", r2.error = "CONTINUE requires a target address";
1230
- break;
1231
- }
1232
- const t2 = n$1.arg;
1233
- if (t2 < 0 || t2 >= a2.length) {
1234
- r2.status = "error", r2.error = `Invalid continue target: ${t2}`;
1235
- break;
1236
- }
1237
- r2.pc = t2;
1238
- break;
1239
- }
1240
- case r$1.FS_LIST_FILES: {
1241
- if (r2.stack.length < 1) {
1242
- r2.status = "error", r2.error = "FS_LIST_FILES: Stack underflow";
1243
- break;
1244
- }
1245
- let t2, e$1 = {};
1246
- const o2 = r2.stack[r2.stack.length - 1];
1247
- if (r2.stack.length >= 2 && typeof o2 == "object" && o2 !== null && !e(o2) && (e$1 = r2.stack.pop()), t2 = r2.stack.pop(), !n(t2)) {
1248
- r2.status = "error", r2.error = "FS_LIST_FILES requires a string path";
1249
- break;
1250
- }
1251
- r2.fsOperation = {
1252
- type: "listFiles",
1253
- path: t2,
1254
- options: e$1
1255
- }, r2.status = "waiting_fs";
1256
- break;
1257
- }
1258
- default:
1259
- r2.status = "error", r2.error = `Unknown opcode: ${n$1.op} (type: ${typeof n$1.op})`;
1498
+ n2.controlsPC || s2.pc++;
1499
+ continue;
1260
1500
  }
1501
+ s2.status = "error", s2.error = `Unknown opcode: ${s$2[c2.op]}`;
1502
+ break;
1261
1503
  }
1262
- return r2;
1504
+ return s2;
1263
1505
  }
1264
- resume(a2, s2, r2) {
1265
- if (a2.status !== "waiting_cc")
1506
+ resume(r2, t2, s2) {
1507
+ if (r2.status !== "waiting_cc")
1266
1508
  throw new Error("Cannot resume: VM not waiting for CC");
1267
- const n2 = {
1268
- ...a2,
1269
- stack: [...a2.stack, s2],
1509
+ const c2 = {
1510
+ ...r2,
1511
+ stack: [...r2.stack, t2],
1270
1512
  status: "running",
1271
1513
  ccPrompt: void 0,
1272
- pc: a2.pc + 1
1514
+ pc: r2.pc + 1
1273
1515
  };
1274
- return this.execute(r2, n2);
1516
+ return this.execute(s2, c2);
1275
1517
  }
1276
- resumeWithFsResult(a2, s2, r2) {
1277
- if (a2.status !== "waiting_fs")
1518
+ resumeWithFsResult(r2, t2, s2) {
1519
+ if (r2.status !== "waiting_fs")
1278
1520
  throw new Error("Cannot resume: VM not waiting for FS operation");
1279
- const n2 = {
1280
- ...a2,
1281
- stack: [...a2.stack, s2],
1521
+ const c2 = {
1522
+ ...r2,
1523
+ stack: [...r2.stack, t2],
1282
1524
  status: "running",
1283
1525
  fsOperation: void 0,
1284
- pc: a2.pc + 1
1526
+ pc: r2.pc + 1
1285
1527
  };
1286
- return this.execute(r2, n2);
1528
+ return this.execute(s2, c2);
1287
1529
  }
1288
1530
  }
1289
- class P {
1531
+ class x {
1290
1532
  constructor() {
1291
- N2(this, "sandboxPaths", []);
1292
- const a2 = process.env.CVM_SANDBOX_PATHS, s2 = process.env.CVM_SANDBOX_ROOT;
1293
- a2 ? this.sandboxPaths = a2.split(",").map((r2) => c__namespace.resolve(r2.trim())) : s2 && (this.sandboxPaths = [c__namespace.resolve(s2)]);
1294
- }
1295
- isPathAllowed(a2) {
1296
- const s2 = c__namespace.resolve(a2);
1297
- return s2.includes("..") || this.sandboxPaths.length === 0 ? false : this.sandboxPaths.some(
1298
- (r2) => s2.startsWith(r2)
1533
+ E(this, "sandboxPaths", []);
1534
+ const r2 = process.env.CVM_SANDBOX_PATHS, t2 = process.env.CVM_SANDBOX_ROOT;
1535
+ r2 ? this.sandboxPaths = r2.split(",").map((s2) => c__namespace.resolve(s2.trim())) : t2 && (this.sandboxPaths = [c__namespace.resolve(t2)]);
1536
+ }
1537
+ isPathAllowed(r2) {
1538
+ const t2 = c__namespace.resolve(r2);
1539
+ return t2.includes("..") || this.sandboxPaths.length === 0 ? false : this.sandboxPaths.some(
1540
+ (s2) => t2.startsWith(s2)
1299
1541
  );
1300
1542
  }
1301
- listFiles(a2, s2 = {}) {
1302
- const r2 = p$1();
1303
- if (!this.isPathAllowed(a2))
1304
- return r2;
1543
+ listFiles(r2, t2 = {}) {
1544
+ const s2 = p$1();
1545
+ if (!this.isPathAllowed(r2))
1546
+ return s2;
1305
1547
  try {
1306
- const n2 = c__namespace.resolve(a2);
1307
- this.listFilesRecursive(n2, n2, r2.elements, s2);
1548
+ const c2 = c__namespace.resolve(r2);
1549
+ this.listFilesRecursive(c2, c2, s2.elements, t2);
1308
1550
  } catch {
1309
1551
  }
1310
- return r2;
1552
+ return s2;
1311
1553
  }
1312
- matchesPattern(a2, s2) {
1313
- let r2 = s2.replace(/\./g, "\\.").replace(/\*\*/g, "__DOUBLESTAR__").replace(/\*/g, "[^/]*").replace(/__DOUBLESTAR__/g, ".*").replace(/\?/g, ".");
1314
- r2 = "^" + r2 + "$";
1554
+ matchesPattern(r2, t2) {
1555
+ let s2 = t2.replace(/\./g, "\\.").replace(/\*\*/g, "__DOUBLESTAR__").replace(/\*/g, "[^/]*").replace(/__DOUBLESTAR__/g, ".*").replace(/\?/g, ".");
1556
+ s2 = "^" + s2 + "$";
1315
1557
  try {
1316
- return new RegExp(r2).test(a2);
1558
+ return new RegExp(s2).test(r2);
1317
1559
  } catch {
1318
1560
  return true;
1319
1561
  }
1320
1562
  }
1321
- listFilesRecursive(a2, s2, r2, n2, f2 = 0) {
1563
+ listFilesRecursive(r2, t2, s2, c2, n2 = 0) {
1322
1564
  try {
1323
- const u2 = M__namespace.readdirSync(s2, { withFileTypes: true });
1324
- for (const l2 of u2) {
1325
- const k2 = c__namespace.join(s2, l2.name), t2 = c__namespace.relative(a2, k2);
1326
- l2.isSymbolicLink() || n2.filter && !this.matchesPattern(t2, n2.filter) || (r2.push(k2), l2.isDirectory() && n2.recursive && this.listFilesRecursive(a2, k2, r2, n2, f2 + 1));
1565
+ const a2 = P__namespace.readdirSync(t2, { withFileTypes: true });
1566
+ for (const i2 of a2) {
1567
+ const p2 = c__namespace.join(t2, i2.name), I2 = c__namespace.relative(r2, p2);
1568
+ i2.isSymbolicLink() || c2.filter && !this.matchesPattern(I2, c2.filter) || (s2.push(p2), i2.isDirectory() && c2.recursive && this.listFilesRecursive(r2, p2, s2, c2, n2 + 1));
1327
1569
  }
1328
1570
  } catch {
1329
1571
  }
1330
1572
  }
1331
1573
  }
1332
- new P();
1333
- class $ {
1334
- constructor(a2, s2) {
1335
- N2(this, "vms", /* @__PURE__ */ new Map());
1336
- N2(this, "storage");
1337
- N2(this, "fileSystem");
1338
- a2 ? this.storage = a2 : this.storage = g.create(), this.fileSystem = s2 || new P();
1574
+ new x();
1575
+ class X {
1576
+ constructor(r2, t2) {
1577
+ E(this, "vms", /* @__PURE__ */ new Map());
1578
+ E(this, "storage");
1579
+ E(this, "fileSystem");
1580
+ r2 ? this.storage = r2 : this.storage = g.create(), this.fileSystem = t2 || new x();
1339
1581
  }
1340
1582
  /**
1341
1583
  * Initialize the VMManager (connect to database)
@@ -1352,153 +1594,152 @@ class $ {
1352
1594
  /**
1353
1595
  * Load and compile a program from source code
1354
1596
  */
1355
- async loadProgram(a2, s2) {
1356
- const r2 = k(s2);
1357
- if (!r2.success)
1358
- throw new Error(`Compilation failed: ${r2.errors.join(", ")}`);
1359
- const n2 = {
1360
- id: a2,
1361
- name: a2,
1362
- source: s2,
1363
- bytecode: r2.bytecode,
1597
+ async loadProgram(r2, t2) {
1598
+ const s2 = j(t2);
1599
+ if (!s2.success)
1600
+ throw new Error(`Compilation failed: ${s2.errors.join(", ")}`);
1601
+ const c2 = {
1602
+ id: r2,
1603
+ name: r2,
1604
+ source: t2,
1605
+ bytecode: s2.bytecode,
1364
1606
  // VM decides internal format
1365
1607
  created: /* @__PURE__ */ new Date()
1366
1608
  };
1367
- await this.storage.saveProgram(n2);
1609
+ await this.storage.saveProgram(c2);
1368
1610
  }
1369
1611
  /**
1370
1612
  * Start execution of a loaded program
1371
1613
  */
1372
- async startExecution(a2, s2) {
1373
- if (!await this.storage.getProgram(a2))
1374
- throw new Error(`Program not found: ${a2}`);
1375
- const n2 = {
1376
- id: s2,
1377
- programId: a2,
1614
+ async startExecution(r2, t2) {
1615
+ if (!await this.storage.getProgram(r2))
1616
+ throw new Error(`Program not found: ${r2}`);
1617
+ const c2 = {
1618
+ id: t2,
1619
+ programId: r2,
1378
1620
  state: "READY",
1379
1621
  pc: 0,
1380
1622
  stack: [],
1381
1623
  variables: {},
1382
1624
  created: /* @__PURE__ */ new Date()
1383
1625
  };
1384
- await this.storage.saveExecution(n2);
1385
- const f2 = new A();
1386
- this.vms.set(s2, f2);
1626
+ await this.storage.saveExecution(c2);
1627
+ const n2 = new N();
1628
+ this.vms.set(t2, n2);
1387
1629
  }
1388
1630
  /**
1389
1631
  * Get next action from execution (Claude polls this)
1390
1632
  * This is READ-ONLY - just returns current state
1391
1633
  */
1392
- async getNext(a2) {
1393
- const s2 = await this.storage.getExecution(a2);
1394
- if (!s2)
1395
- throw new Error(`Execution not found: ${a2}`);
1396
- if (s2.state === "READY") {
1397
- const r2 = await this.storage.getProgram(s2.programId);
1398
- if (!r2)
1399
- throw new Error(`Program not found: ${s2.programId}`);
1400
- let n2 = this.vms.get(a2);
1401
- n2 || (n2 = new A(), this.vms.set(a2, n2));
1402
- const f2 = {
1634
+ async getNext(r2) {
1635
+ const t2 = await this.storage.getExecution(r2);
1636
+ if (!t2)
1637
+ throw new Error(`Execution not found: ${r2}`);
1638
+ if (t2.state === "READY") {
1639
+ const s2 = await this.storage.getProgram(t2.programId);
1640
+ if (!s2)
1641
+ throw new Error(`Program not found: ${t2.programId}`);
1642
+ let c2 = this.vms.get(r2);
1643
+ c2 || (c2 = new N(), this.vms.set(r2, c2));
1644
+ const n2 = {
1403
1645
  pc: 0,
1404
1646
  stack: [],
1405
1647
  variables: /* @__PURE__ */ new Map(),
1406
1648
  output: []
1407
- }, u2 = n2.execute(r2.bytecode, f2);
1408
- if (u2.output.length > 0 && await this.storage.appendOutput(a2, u2.output), s2.pc = u2.pc, s2.stack = u2.stack, s2.variables = Object.fromEntries(u2.variables), u2.status === "complete")
1409
- return s2.state = "COMPLETED", u2.returnValue !== void 0 && (s2.returnValue = u2.returnValue), await this.storage.saveExecution(s2), this.vms.delete(a2), {
1649
+ }, a2 = c2.execute(s2.bytecode, n2);
1650
+ if (a2.output.length > 0 && await this.storage.appendOutput(r2, a2.output), t2.pc = a2.pc, t2.stack = a2.stack, t2.variables = Object.fromEntries(a2.variables), t2.iterators = a2.iterators, a2.status === "complete")
1651
+ return t2.state = "COMPLETED", a2.returnValue !== void 0 && (t2.returnValue = a2.returnValue), await this.storage.saveExecution(t2), this.vms.delete(r2), {
1410
1652
  type: "completed",
1411
1653
  message: "Execution completed",
1412
- result: u2.returnValue
1654
+ result: a2.returnValue
1413
1655
  };
1414
- if (u2.status === "waiting_cc")
1415
- return s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt = u2.ccPrompt, await this.storage.saveExecution(s2), {
1656
+ if (a2.status === "waiting_cc")
1657
+ return t2.state = "AWAITING_COGNITIVE_RESULT", t2.ccPrompt = a2.ccPrompt, await this.storage.saveExecution(t2), {
1416
1658
  type: "waiting",
1417
- message: u2.ccPrompt || "Waiting for input"
1659
+ message: a2.ccPrompt || "Waiting for input"
1418
1660
  };
1419
- if (u2.status === "waiting_fs") {
1420
- if (u2.fsOperation) {
1421
- const l2 = this.fileSystem.listFiles(u2.fsOperation.path, u2.fsOperation.options), k2 = n2.resumeWithFsResult(u2, l2, r2.bytecode);
1422
- return k2.output.length > 0 && await this.storage.appendOutput(a2, k2.output), s2.pc = k2.pc, s2.stack = k2.stack, s2.variables = Object.fromEntries(k2.variables), k2.status === "complete" ? (s2.state = "COMPLETED", k2.returnValue !== void 0 && (s2.returnValue = k2.returnValue), await this.storage.saveExecution(s2), this.vms.delete(a2), {
1661
+ if (a2.status === "waiting_fs") {
1662
+ if (a2.fsOperation) {
1663
+ const i2 = this.fileSystem.listFiles(a2.fsOperation.path, a2.fsOperation.options), p2 = c2.resumeWithFsResult(a2, i2, s2.bytecode);
1664
+ return p2.output.length > 0 && await this.storage.appendOutput(r2, p2.output), t2.pc = p2.pc, t2.stack = p2.stack, t2.variables = Object.fromEntries(p2.variables), t2.iterators = p2.iterators, p2.status === "complete" ? (t2.state = "COMPLETED", p2.returnValue !== void 0 && (t2.returnValue = p2.returnValue), await this.storage.saveExecution(t2), this.vms.delete(r2), {
1423
1665
  type: "completed",
1424
1666
  message: "Execution completed",
1425
- result: k2.returnValue
1426
- }) : k2.status === "error" ? (s2.state = "ERROR", s2.error = k2.error, await this.storage.saveExecution(s2), this.vms.delete(a2), {
1667
+ result: p2.returnValue
1668
+ }) : p2.status === "error" ? (t2.state = "ERROR", t2.error = p2.error, await this.storage.saveExecution(t2), this.vms.delete(r2), {
1427
1669
  type: "error",
1428
- error: k2.error
1429
- }) : k2.status === "waiting_cc" ? (s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt = k2.ccPrompt, await this.storage.saveExecution(s2), {
1670
+ error: p2.error
1671
+ }) : p2.status === "waiting_cc" ? (t2.state = "AWAITING_COGNITIVE_RESULT", t2.ccPrompt = p2.ccPrompt, await this.storage.saveExecution(t2), {
1430
1672
  type: "waiting",
1431
- message: k2.ccPrompt || "Waiting for input"
1432
- }) : (s2.state = "RUNNING", await this.storage.saveExecution(s2), this.getNext(a2));
1673
+ message: p2.ccPrompt || "Waiting for input"
1674
+ }) : (t2.state = "RUNNING", await this.storage.saveExecution(t2), this.getNext(r2));
1433
1675
  }
1434
- } else if (u2.status === "error")
1435
- return s2.state = "ERROR", s2.error = u2.error, await this.storage.saveExecution(s2), this.vms.delete(a2), {
1676
+ } else if (a2.status === "error")
1677
+ return t2.state = "ERROR", t2.error = a2.error, await this.storage.saveExecution(t2), this.vms.delete(r2), {
1436
1678
  type: "error",
1437
- error: u2.error
1679
+ error: a2.error
1438
1680
  };
1439
1681
  }
1440
- if (s2.state === "COMPLETED")
1682
+ if (t2.state === "COMPLETED")
1441
1683
  return {
1442
1684
  type: "completed",
1443
1685
  message: "Execution completed"
1444
1686
  };
1445
- if (s2.state === "ERROR")
1687
+ if (t2.state === "ERROR")
1446
1688
  return {
1447
1689
  type: "error",
1448
- error: s2.error || "Unknown error"
1690
+ error: t2.error || "Unknown error"
1449
1691
  };
1450
- if (s2.state === "AWAITING_COGNITIVE_RESULT")
1692
+ if (t2.state === "AWAITING_COGNITIVE_RESULT")
1451
1693
  return {
1452
1694
  type: "waiting",
1453
- message: s2.ccPrompt || "Waiting for input"
1695
+ message: t2.ccPrompt || "Waiting for input"
1454
1696
  };
1455
- throw new Error(`Unexpected execution state: ${s2.state}`);
1697
+ throw new Error(`Unexpected execution state: ${t2.state}`);
1456
1698
  }
1457
1699
  /**
1458
1700
  * Report result from cognitive operation and continue execution
1459
1701
  */
1460
- async reportCCResult(a2, s2) {
1461
- const r2 = await this.storage.getExecution(a2);
1462
- if (!r2)
1463
- throw new Error(`Execution not found: ${a2}`);
1464
- const n2 = await this.storage.getProgram(r2.programId);
1465
- if (!n2)
1466
- throw new Error(`Program not found: ${r2.programId}`);
1467
- let f2 = this.vms.get(a2);
1468
- f2 || (f2 = new A(), this.vms.set(a2, f2));
1469
- const u2 = {
1470
- pc: r2.pc,
1471
- stack: r2.stack,
1472
- variables: new Map(Object.entries(r2.variables)),
1702
+ async reportCCResult(r2, t2) {
1703
+ const s2 = await this.storage.getExecution(r2);
1704
+ if (!s2)
1705
+ throw new Error(`Execution not found: ${r2}`);
1706
+ const c2 = await this.storage.getProgram(s2.programId);
1707
+ if (!c2)
1708
+ throw new Error(`Program not found: ${s2.programId}`);
1709
+ let n2 = this.vms.get(r2);
1710
+ n2 || (n2 = new N(), this.vms.set(r2, n2));
1711
+ const a2 = {
1712
+ pc: s2.pc,
1713
+ stack: s2.stack,
1714
+ variables: new Map(Object.entries(s2.variables)),
1473
1715
  status: "waiting_cc",
1474
1716
  output: [],
1475
1717
  // Start with empty output for resumed execution
1476
1718
  ccPrompt: void 0,
1477
- iterators: []
1478
- // TODO: persist iterators in future
1479
- }, l2 = f2.resume(u2, s2, n2.bytecode);
1480
- l2.output.length > 0 && await this.storage.appendOutput(a2, l2.output), r2.pc = l2.pc, r2.stack = l2.stack, r2.variables = Object.fromEntries(l2.variables), l2.status === "complete" ? (r2.state = "COMPLETED", l2.returnValue !== void 0 && (r2.returnValue = l2.returnValue), this.vms.delete(a2)) : l2.status === "error" ? (r2.state = "ERROR", r2.error = l2.error, this.vms.delete(a2)) : l2.status === "waiting_cc" ? (r2.state = "AWAITING_COGNITIVE_RESULT", r2.ccPrompt = l2.ccPrompt) : r2.state = "RUNNING", await this.storage.saveExecution(r2);
1719
+ iterators: s2.iterators || []
1720
+ }, i2 = n2.resume(a2, t2, c2.bytecode);
1721
+ i2.output.length > 0 && await this.storage.appendOutput(r2, i2.output), s2.pc = i2.pc, s2.stack = i2.stack, s2.variables = Object.fromEntries(i2.variables), s2.iterators = i2.iterators, i2.status === "complete" ? (s2.state = "COMPLETED", i2.returnValue !== void 0 && (s2.returnValue = i2.returnValue), this.vms.delete(r2)) : i2.status === "error" ? (s2.state = "ERROR", s2.error = i2.error, this.vms.delete(r2)) : i2.status === "waiting_cc" ? (s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt = i2.ccPrompt) : s2.state = "RUNNING", await this.storage.saveExecution(s2);
1481
1722
  }
1482
1723
  /**
1483
1724
  * Get current execution status
1484
1725
  */
1485
- async getExecutionStatus(a2) {
1486
- const s2 = await this.storage.getExecution(a2);
1487
- if (!s2)
1488
- throw new Error(`Execution not found: ${a2}`);
1726
+ async getExecutionStatus(r2) {
1727
+ const t2 = await this.storage.getExecution(r2);
1728
+ if (!t2)
1729
+ throw new Error(`Execution not found: ${r2}`);
1489
1730
  return {
1490
- id: s2.id,
1491
- state: s2.state,
1492
- pc: s2.pc,
1493
- stack: s2.stack,
1494
- variables: s2.variables
1731
+ id: t2.id,
1732
+ state: t2.state,
1733
+ pc: t2.pc,
1734
+ stack: t2.stack,
1735
+ variables: t2.variables
1495
1736
  };
1496
1737
  }
1497
1738
  /**
1498
1739
  * Get output for an execution
1499
1740
  */
1500
- async getExecutionOutput(a2) {
1501
- return await this.storage.getOutput(a2);
1741
+ async getExecutionOutput(r2) {
1742
+ return await this.storage.getOutput(r2);
1502
1743
  }
1503
1744
  }
1504
1745
  var a = Object.defineProperty;
@@ -1510,7 +1751,7 @@ class w {
1510
1751
  s(this, "transport", null);
1511
1752
  s(this, "vmManager");
1512
1753
  s(this, "version");
1513
- this.version = r2, this.vmManager = new $(), this.server = new mcp_js.McpServer({
1754
+ this.version = r2, this.vmManager = new X(), this.server = new mcp_js.McpServer({
1514
1755
  name: "cvm-server",
1515
1756
  version: this.version
1516
1757
  }), this.setupTools();
@@ -1764,7 +2005,7 @@ async function main() {
1764
2005
  ];
1765
2006
  for (const packageJsonPath of possiblePaths) {
1766
2007
  try {
1767
- const packageJson = JSON.parse(M.readFileSync(packageJsonPath, "utf-8"));
2008
+ const packageJson = JSON.parse(P$1.readFileSync(packageJsonPath, "utf-8"));
1768
2009
  if (packageJson.name === "cvm-server" && packageJson.version) {
1769
2010
  version = packageJson.version;
1770
2011
  break;