@tracecode/harness 0.4.0 → 0.5.1

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 (45) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +67 -80
  3. package/README.md +2 -1
  4. package/dist/browser.cjs +16 -4
  5. package/dist/browser.cjs.map +1 -1
  6. package/dist/browser.d.cts +2 -2
  7. package/dist/browser.d.ts +2 -2
  8. package/dist/browser.js +16 -4
  9. package/dist/browser.js.map +1 -1
  10. package/dist/cli.js +0 -0
  11. package/dist/core.cjs +16 -4
  12. package/dist/core.cjs.map +1 -1
  13. package/dist/core.d.cts +9 -6
  14. package/dist/core.d.ts +9 -6
  15. package/dist/core.js +16 -4
  16. package/dist/core.js.map +1 -1
  17. package/dist/index.cjs +354 -44
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +2 -2
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.js +354 -44
  22. package/dist/index.js.map +1 -1
  23. package/dist/internal/browser.d.cts +1 -1
  24. package/dist/internal/browser.d.ts +1 -1
  25. package/dist/javascript.cjs +262 -26
  26. package/dist/javascript.cjs.map +1 -1
  27. package/dist/javascript.d.cts +4 -4
  28. package/dist/javascript.d.ts +4 -4
  29. package/dist/javascript.js +262 -26
  30. package/dist/javascript.js.map +1 -1
  31. package/dist/python.cjs +76 -14
  32. package/dist/python.cjs.map +1 -1
  33. package/dist/python.d.cts +8 -8
  34. package/dist/python.d.ts +8 -8
  35. package/dist/python.js +76 -14
  36. package/dist/python.js.map +1 -1
  37. package/dist/{runtime-types-Dvgn07z9.d.cts → runtime-types--lBQ6rYu.d.cts} +1 -1
  38. package/dist/{runtime-types-C7d1LFbx.d.ts → runtime-types-DtaaAhHL.d.ts} +1 -1
  39. package/dist/{types-Bzr1Ohcf.d.cts → types-DwIYM3Ku.d.cts} +5 -2
  40. package/dist/{types-Bzr1Ohcf.d.ts → types-DwIYM3Ku.d.ts} +5 -2
  41. package/package.json +13 -11
  42. package/workers/javascript/javascript-worker.js +455 -31
  43. package/workers/python/generated-python-harness-snippets.js +1 -1
  44. package/workers/python/pyodide-worker.js +31 -0
  45. package/workers/python/runtime-core.js +235 -8
@@ -83,16 +83,28 @@ function createConsoleProxy(output) {
83
83
  }
84
84
  function isLikelyTreeNodeValue(value) {
85
85
  if (!value || typeof value !== "object" || Array.isArray(value)) return false;
86
- const hasValue = "val" in value || "value" in value;
87
- const hasTreeLinks = "left" in value || "right" in value;
88
- return hasValue && hasTreeLinks;
86
+ const record = value;
87
+ if (record.__type__ === "TreeNode") return true;
88
+ const ctor = value.constructor;
89
+ return ctor?.name === "TreeNode";
89
90
  }
90
91
  function isLikelyListNodeValue(value) {
91
92
  if (!value || typeof value !== "object" || Array.isArray(value)) return false;
92
- const hasValue = "val" in value || "value" in value;
93
- const hasTreeLinks = "left" in value || "right" in value;
94
- const hasListLinks = "next" in value || "prev" in value;
95
- return hasValue && hasListLinks && !hasTreeLinks;
93
+ const record = value;
94
+ if (record.__type__ === "ListNode") return true;
95
+ const ctor = value.constructor;
96
+ return ctor?.name === "ListNode";
97
+ }
98
+ function getCustomClassName(value) {
99
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
100
+ if (value instanceof Map || value instanceof Set) return null;
101
+ if (isLikelyTreeNodeValue(value) || isLikelyListNodeValue(value)) return null;
102
+ const ctor = value.constructor;
103
+ const name = typeof ctor?.name === "string" ? ctor.name : "";
104
+ if (!name || name === "Object" || name === "Array" || name === "Map" || name === "Set") {
105
+ return null;
106
+ }
107
+ return name;
96
108
  }
97
109
  function serializeValue(value, depth = 0, seen = /* @__PURE__ */ new WeakSet(), nodeRefState = { ids: /* @__PURE__ */ new Map(), nextId: 1 }) {
98
110
  if (depth > 48) return "<max depth>";
@@ -136,22 +148,47 @@ function serializeValue(value, depth = 0, seen = /* @__PURE__ */ new WeakSet(),
136
148
  const nodePrefix = isTree ? "tree" : "list";
137
149
  const nodeId = `${nodePrefix}-${nodeRefState.nextId++}`;
138
150
  nodeRefState.ids.set(objectValue, nodeId);
139
- if (isTree) {
140
- return {
141
- __type__: "TreeNode",
142
- __id__: nodeId,
143
- val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),
144
- left: serializeValue(nodeValue.left ?? null, depth + 1, seen, nodeRefState),
145
- right: serializeValue(nodeValue.right ?? null, depth + 1, seen, nodeRefState)
146
- };
147
- }
148
- return {
151
+ const out2 = isTree ? {
152
+ __type__: "TreeNode",
153
+ __id__: nodeId,
154
+ val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),
155
+ left: serializeValue(nodeValue.left ?? null, depth + 1, seen, nodeRefState),
156
+ right: serializeValue(nodeValue.right ?? null, depth + 1, seen, nodeRefState)
157
+ } : {
149
158
  __type__: "ListNode",
150
159
  __id__: nodeId,
151
160
  val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),
152
161
  next: serializeValue(nodeValue.next ?? null, depth + 1, seen, nodeRefState),
153
162
  ..."prev" in nodeValue ? { prev: serializeValue(nodeValue.prev ?? null, depth + 1, seen, nodeRefState) } : {}
154
163
  };
164
+ const skipped = isTree ? /* @__PURE__ */ new Set(["__id__", "__type__", "__class__", "val", "value", "left", "right"]) : /* @__PURE__ */ new Set(["__id__", "__type__", "__class__", "val", "value", "next", "prev"]);
165
+ for (const [k, v] of Object.entries(nodeValue)) {
166
+ if (skipped.has(k)) continue;
167
+ out2[k] = serializeValue(v, depth + 1, seen, nodeRefState);
168
+ }
169
+ return out2;
170
+ }
171
+ const customClassName = getCustomClassName(value);
172
+ if (customClassName) {
173
+ const objectValue = value;
174
+ const existingId = nodeRefState.ids.get(objectValue);
175
+ if (existingId) {
176
+ return { __ref__: existingId };
177
+ }
178
+ const objectId = `object-${nodeRefState.nextId++}`;
179
+ nodeRefState.ids.set(objectValue, objectId);
180
+ if (seen.has(objectValue)) return { __ref__: objectId };
181
+ seen.add(objectValue);
182
+ const out2 = {
183
+ __type__: "object",
184
+ __class__: customClassName,
185
+ __id__: objectId
186
+ };
187
+ for (const [k, v] of Object.entries(value)) {
188
+ out2[k] = serializeValue(v, depth + 1, seen, nodeRefState);
189
+ }
190
+ seen.delete(objectValue);
191
+ return out2;
155
192
  }
156
193
  if (seen.has(value)) return "<cycle>";
157
194
  seen.add(value);
@@ -242,6 +279,194 @@ function normalizeInputs(inputs) {
242
279
  }
243
280
  return hydrated;
244
281
  }
282
+ function buildTreeNodeFromLevelOrder(values) {
283
+ if (!Array.isArray(values) || values.length === 0) return null;
284
+ const firstValue = values[0];
285
+ if (firstValue === null || firstValue === void 0) return null;
286
+ const root = {
287
+ val: firstValue,
288
+ value: firstValue,
289
+ left: null,
290
+ right: null
291
+ };
292
+ const queue = [root];
293
+ let index = 1;
294
+ while (queue.length > 0 && index < values.length) {
295
+ const node = queue.shift();
296
+ if (!node) break;
297
+ const leftValue = values[index++];
298
+ if (leftValue !== null && leftValue !== void 0) {
299
+ const leftNode = {
300
+ val: leftValue,
301
+ value: leftValue,
302
+ left: null,
303
+ right: null
304
+ };
305
+ node.left = leftNode;
306
+ queue.push(leftNode);
307
+ }
308
+ if (index >= values.length) break;
309
+ const rightValue = values[index++];
310
+ if (rightValue !== null && rightValue !== void 0) {
311
+ const rightNode = {
312
+ val: rightValue,
313
+ value: rightValue,
314
+ left: null,
315
+ right: null
316
+ };
317
+ node.right = rightNode;
318
+ queue.push(rightNode);
319
+ }
320
+ }
321
+ return root;
322
+ }
323
+ function materializeTreeInput(value) {
324
+ if (value === null || value === void 0) return value;
325
+ if (Array.isArray(value)) {
326
+ return buildTreeNodeFromLevelOrder(value);
327
+ }
328
+ if (!isPlainObjectRecord(value)) {
329
+ return value;
330
+ }
331
+ const record = value;
332
+ if (isLikelyTreeNodeValue(record)) {
333
+ const node = {
334
+ val: record.val ?? record.value ?? null,
335
+ value: record.val ?? record.value ?? null,
336
+ left: materializeTreeInput(record.left ?? null),
337
+ right: materializeTreeInput(record.right ?? null)
338
+ };
339
+ for (const [key, nested] of Object.entries(record)) {
340
+ if (key === "__id__" || key === "__type__" || key === "val" || key === "value" || key === "left" || key === "right") continue;
341
+ node[key] = materializeTreeInput(nested);
342
+ }
343
+ return node;
344
+ }
345
+ const taggedRecord = value;
346
+ if (taggedRecord.__type__ === "TreeNode") {
347
+ const node = {
348
+ val: taggedRecord.val ?? taggedRecord.value ?? null,
349
+ value: taggedRecord.val ?? taggedRecord.value ?? null,
350
+ left: materializeTreeInput(taggedRecord.left ?? null),
351
+ right: materializeTreeInput(taggedRecord.right ?? null)
352
+ };
353
+ for (const [key, nested] of Object.entries(taggedRecord)) {
354
+ if (key === "__id__" || key === "__type__" || key === "val" || key === "value" || key === "left" || key === "right") continue;
355
+ node[key] = materializeTreeInput(nested);
356
+ }
357
+ return node;
358
+ }
359
+ return value;
360
+ }
361
+ function materializeListInput(value, refs = /* @__PURE__ */ new Map(), materialized = /* @__PURE__ */ new WeakMap()) {
362
+ if (value === null || value === void 0) return value;
363
+ if (Array.isArray(value)) {
364
+ if (value.length === 0) return null;
365
+ const head = {
366
+ val: value[0],
367
+ value: value[0],
368
+ next: null
369
+ };
370
+ let current = head;
371
+ for (let i = 1; i < value.length; i++) {
372
+ const nextNode = { val: value[i], value: value[i], next: null };
373
+ current.next = nextNode;
374
+ current = nextNode;
375
+ }
376
+ return head;
377
+ }
378
+ if (!isPlainObjectRecord(value)) {
379
+ return value;
380
+ }
381
+ const record = value;
382
+ if (typeof record.__ref__ === "string") {
383
+ return refs.get(record.__ref__) ?? null;
384
+ }
385
+ const taggedRecord = value;
386
+ if (isLikelyListNodeValue(record) || taggedRecord.__type__ === "ListNode") {
387
+ const existingMaterialized = materialized.get(record);
388
+ if (existingMaterialized) {
389
+ return existingMaterialized;
390
+ }
391
+ const node = {
392
+ val: taggedRecord.val ?? taggedRecord.value ?? null,
393
+ value: taggedRecord.val ?? taggedRecord.value ?? null,
394
+ next: null
395
+ };
396
+ materialized.set(record, node);
397
+ if (typeof taggedRecord.__id__ === "string" && taggedRecord.__id__.length > 0) {
398
+ refs.set(taggedRecord.__id__, node);
399
+ }
400
+ node.next = materializeListInput(taggedRecord.next ?? null, refs, materialized);
401
+ for (const [key, nested] of Object.entries(taggedRecord)) {
402
+ if (key === "__id__" || key === "__type__" || key === "__class__" || key === "val" || key === "value" || key === "next") continue;
403
+ node[key] = materializeListInput(nested, refs, materialized);
404
+ }
405
+ return node;
406
+ }
407
+ return value;
408
+ }
409
+ function detectMaterializerKind(ts, typeNode) {
410
+ if (!typeNode) return null;
411
+ if (ts.isParenthesizedTypeNode(typeNode)) {
412
+ return detectMaterializerKind(ts, typeNode.type);
413
+ }
414
+ if (ts.isUnionTypeNode(typeNode)) {
415
+ for (const child of typeNode.types) {
416
+ const resolved = detectMaterializerKind(ts, child);
417
+ if (resolved) return resolved;
418
+ }
419
+ return null;
420
+ }
421
+ if (ts.isTypeReferenceNode(typeNode)) {
422
+ const typeNameText = typeNode.typeName.getText();
423
+ if (typeNameText === "TreeNode") return "tree";
424
+ if (typeNameText === "ListNode") return "list";
425
+ return null;
426
+ }
427
+ return null;
428
+ }
429
+ function collectInputMaterializers(ts, functionLikeNode) {
430
+ const out = {};
431
+ for (const parameter of functionLikeNode.parameters ?? []) {
432
+ if (!ts.isIdentifier(parameter.name)) continue;
433
+ if (parameter.name.text === "this") continue;
434
+ const kind = detectMaterializerKind(ts, parameter.type);
435
+ if (kind) {
436
+ out[parameter.name.text] = kind;
437
+ }
438
+ }
439
+ return out;
440
+ }
441
+ async function resolveInputMaterializers(code, functionName, executionStyle, language) {
442
+ if (!functionName || executionStyle === "ops-class" || language !== "typescript") {
443
+ return {};
444
+ }
445
+ try {
446
+ const ts = await getTypeScriptModule();
447
+ const sourceFile = ts.createSourceFile(
448
+ "runtime-input.ts",
449
+ code,
450
+ ts.ScriptTarget.ES2020,
451
+ true,
452
+ ts.ScriptKind.TS
453
+ );
454
+ const target = findFunctionLikeNode(ts, sourceFile, functionName, executionStyle);
455
+ if (!target) return {};
456
+ return collectInputMaterializers(ts, target);
457
+ } catch {
458
+ return {};
459
+ }
460
+ }
461
+ function applyInputMaterializers(inputs, materializers) {
462
+ if (Object.keys(materializers).length === 0) return inputs;
463
+ const next = { ...inputs };
464
+ for (const [name, kind] of Object.entries(materializers)) {
465
+ if (!Object.prototype.hasOwnProperty.call(next, name)) continue;
466
+ next[name] = kind === "tree" ? materializeTreeInput(next[name]) : materializeListInput(next[name]);
467
+ }
468
+ return next;
469
+ }
245
470
  function collectSimpleParameterNames(ts, functionLikeNode) {
246
471
  const names = [];
247
472
  for (const parameter of functionLikeNode.parameters ?? []) {
@@ -295,14 +520,20 @@ function findFunctionLikeNode(ts, sourceFile, functionName, executionStyle) {
295
520
  visit(sourceFile);
296
521
  return found;
297
522
  }
298
- async function resolveOrderedInputKeys(code, functionName, inputs, executionStyle) {
523
+ async function resolveOrderedInputKeys(code, functionName, inputs, executionStyle, language = "javascript") {
299
524
  const fallbackKeys = Object.keys(inputs);
300
525
  if (!functionName || executionStyle === "ops-class" || fallbackKeys.length <= 1) {
301
526
  return fallbackKeys;
302
527
  }
303
528
  try {
304
529
  const ts = await getTypeScriptModule();
305
- const sourceFile = ts.createSourceFile("runtime-input.js", code, ts.ScriptTarget.ES2020, true, ts.ScriptKind.JS);
530
+ const sourceFile = ts.createSourceFile(
531
+ `runtime-input.${language === "typescript" ? "ts" : "js"}`,
532
+ code,
533
+ ts.ScriptTarget.ES2020,
534
+ true,
535
+ language === "typescript" ? ts.ScriptKind.TS : ts.ScriptKind.JS
536
+ );
306
537
  const target = findFunctionLikeNode(ts, sourceFile, functionName, executionStyle);
307
538
  if (!target) {
308
539
  return fallbackKeys;
@@ -446,20 +677,22 @@ async function transpileTypeScript(code) {
446
677
  }
447
678
  return transpiled.outputText;
448
679
  }
449
- async function executeJavaScriptCode(code, functionName, inputs, executionStyle = "function") {
680
+ async function executeJavaScriptCode(code, functionName, inputs, executionStyle = "function", language = "javascript") {
450
681
  const consoleOutput = [];
451
682
  const consoleProxy = createConsoleProxy(consoleOutput);
452
683
  const normalizedInputs = normalizeInputs(inputs);
684
+ const materializers = await resolveInputMaterializers(code, functionName, executionStyle, language);
685
+ const materializedInputs = applyInputMaterializers(normalizedInputs, materializers);
453
686
  try {
454
687
  let output;
455
688
  if (executionStyle === "ops-class") {
456
- const { operations, argumentsList } = getOpsClassInputs(normalizedInputs);
689
+ const { operations, argumentsList } = getOpsClassInputs(materializedInputs);
457
690
  const runner = buildRunner(code, executionStyle, []);
458
691
  output = await Promise.resolve(runner(consoleProxy, functionName, operations, argumentsList));
459
692
  } else {
460
- const inputKeys = await resolveOrderedInputKeys(code, functionName, normalizedInputs, executionStyle);
693
+ const inputKeys = await resolveOrderedInputKeys(code, functionName, materializedInputs, executionStyle, language);
461
694
  const argNames = inputKeys.map((_, index) => `__arg${index}`);
462
- const argValues = inputKeys.map((key) => normalizedInputs[key]);
695
+ const argValues = inputKeys.map((key) => materializedInputs[key]);
463
696
  const runner = buildRunner(code, executionStyle, argNames);
464
697
  output = await Promise.resolve(runner(consoleProxy, functionName, ...argValues));
465
698
  }
@@ -478,9 +711,9 @@ async function executeJavaScriptCode(code, functionName, inputs, executionStyle
478
711
  };
479
712
  }
480
713
  }
481
- async function executeJavaScriptWithTracing(code, functionName, inputs, executionStyle = "function") {
714
+ async function executeJavaScriptWithTracing(code, functionName, inputs, executionStyle = "function", language = "javascript") {
482
715
  const startedAt = performanceNow();
483
- const codeResult = await executeJavaScriptCode(code, functionName ?? "", inputs, executionStyle);
716
+ const codeResult = await executeJavaScriptCode(code, functionName ?? "", inputs, executionStyle, language);
484
717
  const executionTimeMs = performanceNow() - startedAt;
485
718
  if (!codeResult.success) {
486
719
  return {
@@ -505,8 +738,11 @@ async function executeJavaScriptWithTracing(code, functionName, inputs, executio
505
738
  };
506
739
  }
507
740
  async function executeTypeScriptCode(code, functionName, inputs, executionStyle = "function") {
741
+ const normalizedInputs = normalizeInputs(inputs);
742
+ const materializers = await resolveInputMaterializers(code, functionName, executionStyle, "typescript");
743
+ const materializedInputs = applyInputMaterializers(normalizedInputs, materializers);
508
744
  const transpiledCode = await transpileTypeScript(code);
509
- return executeJavaScriptCode(transpiledCode, functionName, inputs, executionStyle);
745
+ return executeJavaScriptCode(transpiledCode, functionName, materializedInputs, executionStyle, "typescript");
510
746
  }
511
747
  export {
512
748
  TYPESCRIPT_RUNTIME_DECLARATIONS,
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/harness-javascript/src/typescript-runtime-declarations.ts","../packages/harness-javascript/src/javascript-executor.ts"],"sourcesContent":["export const TYPESCRIPT_RUNTIME_DECLARATIONS = `\ndeclare class ListNode {\n val: any;\n next: ListNode | SerializedListNode | SerializedRef | null;\n prev?: ListNode | SerializedListNode | SerializedRef | null;\n constructor(val?: any, next?: ListNode | null);\n}\n\ndeclare class TreeNode {\n val: any;\n left: TreeNode | SerializedTreeNode | SerializedRef | null;\n right: TreeNode | SerializedTreeNode | SerializedRef | null;\n constructor(val?: any, left?: TreeNode | null, right?: TreeNode | null);\n}\n\ntype SerializedRef = { __ref__: string };\n\ntype SerializedListNode = {\n __id__?: string;\n __type__?: 'ListNode';\n val?: any;\n next?: SerializedListNode | SerializedRef | ListNode | null;\n prev?: SerializedListNode | SerializedRef | ListNode | null;\n};\n\ntype SerializedTreeNode = {\n __id__?: string;\n __type__?: 'TreeNode';\n val?: any;\n left?: SerializedTreeNode | SerializedRef | TreeNode | null;\n right?: SerializedTreeNode | SerializedRef | TreeNode | null;\n};\n`;\n\nexport function withTypeScriptRuntimeDeclarations(sourceCode: string): string {\n return `${sourceCode}\\n\\n${TYPESCRIPT_RUNTIME_DECLARATIONS}\\n`;\n}\n\n","import type { RuntimeExecutionStyle } from '../../harness-core/src/runtime-types';\nimport type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\nimport { withTypeScriptRuntimeDeclarations } from './typescript-runtime-declarations';\n\ntype TypeScriptModule = typeof import('typescript');\n\nlet typeScriptModulePromise: Promise<TypeScriptModule> | null = null;\n\ntype DynamicRunner = (...args: unknown[]) => unknown;\n\nasync function getTypeScriptModule(): Promise<TypeScriptModule> {\n if (!typeScriptModulePromise) {\n const specifier = 'typescript';\n typeScriptModulePromise = import(/* webpackIgnore: true */ specifier);\n }\n return typeScriptModulePromise;\n}\n\nfunction performanceNow(): number {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now();\n }\n return Date.now();\n}\n\nfunction formatConsoleArg(value: unknown): string {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean' || value === null || value === undefined) {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction createConsoleProxy(output: string[]): Console {\n const capture = (...args: unknown[]) => {\n output.push(args.map(formatConsoleArg).join(' '));\n };\n\n return {\n ...console,\n log: capture,\n info: capture,\n warn: capture,\n error: capture,\n debug: capture,\n };\n}\n\nfunction isLikelyTreeNodeValue(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const hasValue = 'val' in value || 'value' in value;\n const hasTreeLinks = 'left' in value || 'right' in value;\n return hasValue && hasTreeLinks;\n}\n\nfunction isLikelyListNodeValue(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const hasValue = 'val' in value || 'value' in value;\n const hasTreeLinks = 'left' in value || 'right' in value;\n const hasListLinks = 'next' in value || 'prev' in value;\n return hasValue && hasListLinks && !hasTreeLinks;\n}\n\nfunction serializeValue(\n value: unknown,\n depth = 0,\n seen = new WeakSet<object>(),\n nodeRefState: { ids: Map<object, string>; nextId: number } = { ids: new Map<object, string>(), nextId: 1 }\n): unknown {\n if (depth > 48) return '<max depth>';\n if (value === null || value === undefined) return value;\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'bigint') {\n return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);\n }\n if (typeof value === 'function') {\n return '<function>';\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => serializeValue(item, depth + 1, seen));\n }\n\n if (value instanceof Set) {\n return {\n __type__: 'set',\n values: [...value].map((item) => serializeValue(item, depth + 1, seen, nodeRefState)),\n };\n }\n\n if (value instanceof Map) {\n return {\n __type__: 'map',\n entries: [...value.entries()].map(([k, v]) => [\n serializeValue(k, depth + 1, seen, nodeRefState),\n serializeValue(v, depth + 1, seen, nodeRefState),\n ]),\n };\n }\n\n if (typeof value === 'object') {\n if (isLikelyTreeNodeValue(value) || isLikelyListNodeValue(value)) {\n const objectValue = value as object;\n const nodeValue = value as Record<string, unknown>;\n const existingId = nodeRefState.ids.get(objectValue);\n if (existingId) {\n return { __ref__: existingId };\n }\n\n const isTree = isLikelyTreeNodeValue(value);\n const nodePrefix = isTree ? 'tree' : 'list';\n const nodeId = `${nodePrefix}-${nodeRefState.nextId++}`;\n nodeRefState.ids.set(objectValue, nodeId);\n\n if (isTree) {\n return {\n __type__: 'TreeNode',\n __id__: nodeId,\n val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),\n left: serializeValue(nodeValue.left ?? null, depth + 1, seen, nodeRefState),\n right: serializeValue(nodeValue.right ?? null, depth + 1, seen, nodeRefState),\n };\n }\n\n return {\n __type__: 'ListNode',\n __id__: nodeId,\n val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),\n next: serializeValue(nodeValue.next ?? null, depth + 1, seen, nodeRefState),\n ...('prev' in nodeValue\n ? { prev: serializeValue(nodeValue.prev ?? null, depth + 1, seen, nodeRefState) }\n : {}),\n };\n }\n\n if (seen.has(value as object)) return '<cycle>';\n seen.add(value as object);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = serializeValue(v, depth + 1, seen, nodeRefState);\n }\n seen.delete(value as object);\n return out;\n }\n\n return String(value);\n}\n\nfunction extractUserErrorLine(error: unknown): number | undefined {\n if (typeof error === 'object' && error && '__tracecodeLine' in error) {\n const line = Number((error as { __tracecodeLine?: unknown }).__tracecodeLine);\n if (Number.isFinite(line)) return line;\n }\n\n const stack =\n typeof error === 'object' && error && 'stack' in error\n ? String((error as { stack?: unknown }).stack ?? '')\n : '';\n if (!stack) return undefined;\n const match = stack.match(/<anonymous>:(\\d+):\\d+/);\n if (!match) return undefined;\n const line = Number.parseInt(match[1], 10);\n return Number.isFinite(line) ? line : undefined;\n}\n\nfunction isPlainObjectRecord(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nfunction collectReferenceTargets(\n value: unknown,\n byId: Map<string, Record<string, unknown>>,\n seen: WeakSet<object>\n): void {\n if (value === null || value === undefined) return;\n if (typeof value !== 'object') return;\n if (seen.has(value)) return;\n seen.add(value);\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectReferenceTargets(item, byId, seen);\n }\n return;\n }\n\n if (!isPlainObjectRecord(value)) return;\n if (typeof value.__id__ === 'string' && value.__id__.length > 0 && !byId.has(value.__id__)) {\n byId.set(value.__id__, value);\n }\n\n for (const nested of Object.values(value)) {\n collectReferenceTargets(nested, byId, seen);\n }\n}\n\nfunction resolveReferenceGraph(\n value: unknown,\n byId: Map<string, Record<string, unknown>>,\n resolved: WeakMap<object, unknown>\n): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value !== 'object') return value;\n\n if (resolved.has(value)) {\n return resolved.get(value);\n }\n\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n resolved.set(value, out);\n for (const item of value) {\n out.push(resolveReferenceGraph(item, byId, resolved));\n }\n return out;\n }\n\n if (!isPlainObjectRecord(value)) {\n return value;\n }\n\n const keys = Object.keys(value);\n if (keys.length === 1 && typeof value.__ref__ === 'string') {\n const target = byId.get(value.__ref__);\n if (!target) return null;\n return resolveReferenceGraph(target, byId, resolved);\n }\n\n const out: Record<string, unknown> = {};\n resolved.set(value, out);\n for (const [key, nested] of Object.entries(value)) {\n out[key] = resolveReferenceGraph(nested, byId, resolved);\n }\n return out;\n}\n\nfunction normalizeInputs(inputs: Record<string, unknown>): Record<string, unknown> {\n if (!inputs || typeof inputs !== 'object' || Array.isArray(inputs)) return {};\n const byId = new Map<string, Record<string, unknown>>();\n collectReferenceTargets(inputs, byId, new WeakSet<object>());\n if (byId.size === 0) {\n return inputs;\n }\n const hydrated = resolveReferenceGraph(inputs, byId, new WeakMap<object, unknown>());\n if (!hydrated || typeof hydrated !== 'object' || Array.isArray(hydrated)) {\n return inputs;\n }\n return hydrated as Record<string, unknown>;\n}\n\ntype FunctionLikeNode =\n | import('typescript').FunctionDeclaration\n | import('typescript').FunctionExpression\n | import('typescript').ArrowFunction\n | import('typescript').MethodDeclaration;\n\nfunction collectSimpleParameterNames(\n ts: TypeScriptModule,\n functionLikeNode: FunctionLikeNode\n): string[] | null {\n const names: string[] = [];\n\n for (const parameter of functionLikeNode.parameters ?? []) {\n if (!ts.isIdentifier(parameter.name)) {\n return null;\n }\n if (parameter.name.text === 'this') {\n continue;\n }\n names.push(parameter.name.text);\n }\n\n return names;\n}\n\nfunction getPropertyNameText(ts: TypeScriptModule, name: import('typescript').PropertyName | undefined): string | null {\n if (!name) return null;\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n return null;\n}\n\nfunction findFunctionLikeNode(\n ts: TypeScriptModule,\n sourceFile: import('typescript').SourceFile,\n functionName: string,\n executionStyle: RuntimeExecutionStyle\n): FunctionLikeNode | null {\n let found: FunctionLikeNode | null = null;\n\n const visit = (node: import('typescript').Node): void => {\n if (found) return;\n\n if (executionStyle === 'solution-method' && ts.isClassDeclaration(node) && node.name?.text === 'Solution') {\n for (const member of node.members) {\n if (found) break;\n\n if (ts.isMethodDeclaration(member) && getPropertyNameText(ts, member.name) === functionName) {\n found = member;\n break;\n }\n\n if (\n ts.isPropertyDeclaration(member) &&\n getPropertyNameText(ts, member.name) === functionName &&\n member.initializer &&\n (ts.isArrowFunction(member.initializer) || ts.isFunctionExpression(member.initializer))\n ) {\n found = member.initializer;\n break;\n }\n }\n return;\n }\n\n if (executionStyle === 'function') {\n if (ts.isFunctionDeclaration(node) && node.name?.text === functionName) {\n found = node;\n return;\n }\n\n if (\n ts.isVariableDeclaration(node) &&\n ts.isIdentifier(node.name) &&\n node.name.text === functionName &&\n node.initializer &&\n (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer))\n ) {\n found = node.initializer;\n return;\n }\n }\n\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return found;\n}\n\nasync function resolveOrderedInputKeys(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle\n): Promise<string[]> {\n const fallbackKeys = Object.keys(inputs);\n if (!functionName || executionStyle === 'ops-class' || fallbackKeys.length <= 1) {\n return fallbackKeys;\n }\n\n try {\n const ts = await getTypeScriptModule();\n const sourceFile = ts.createSourceFile('runtime-input.js', code, ts.ScriptTarget.ES2020, true, ts.ScriptKind.JS);\n const target = findFunctionLikeNode(ts, sourceFile, functionName, executionStyle);\n if (!target) {\n return fallbackKeys;\n }\n\n const parameterNames = collectSimpleParameterNames(ts, target);\n if (!parameterNames || parameterNames.length === 0) {\n return fallbackKeys;\n }\n\n const matchedKeys = parameterNames.filter((name) => Object.prototype.hasOwnProperty.call(inputs, name));\n if (matchedKeys.length === 0) {\n return fallbackKeys;\n }\n\n const extras = fallbackKeys.filter((key) => !matchedKeys.includes(key));\n return [...matchedKeys, ...extras];\n } catch {\n return fallbackKeys;\n }\n}\n\nfunction buildRunner(code: string, executionStyle: RuntimeExecutionStyle, argNames: string[]): DynamicRunner {\n if (executionStyle === 'function') {\n return new Function(\n 'console',\n '__functionName',\n ...argNames,\n `\"use strict\";\n${code}\nlet __target;\ntry {\n __target = eval(__functionName);\n} catch (_err) {\n __target = undefined;\n}\nif (typeof __target !== 'function') {\n throw new Error('Function \"' + __functionName + '\" not found');\n}\nreturn __target(${argNames.join(', ')});`\n ) as DynamicRunner;\n }\n\n if (executionStyle === 'solution-method') {\n return new Function(\n 'console',\n '__functionName',\n ...argNames,\n `\"use strict\";\n${code}\nif (typeof Solution !== 'function') {\n throw new Error('Class \"Solution\" not found');\n}\nconst __solver = new Solution();\nconst __method = __solver[__functionName];\nif (typeof __method !== 'function') {\n throw new Error('Method \"Solution.' + __functionName + '\" not found');\n}\nreturn __method.call(__solver, ${argNames.join(', ')});`\n ) as DynamicRunner;\n }\n\n if (executionStyle === 'ops-class') {\n return new Function(\n 'console',\n '__className',\n '__operations',\n '__arguments',\n `\"use strict\";\n${code}\nif (!Array.isArray(__operations) || !Array.isArray(__arguments)) {\n throw new Error('ops-class execution requires inputs.operations and inputs.arguments (or ops/args)');\n}\nif (__operations.length !== __arguments.length) {\n throw new Error('operations and arguments must have the same length');\n}\nlet __targetClass;\ntry {\n __targetClass = eval(__className);\n} catch (_err) {\n __targetClass = undefined;\n}\nif (typeof __targetClass !== 'function') {\n throw new Error('Class \"' + __className + '\" not found');\n}\nlet __instance = null;\nconst __out = [];\nfor (let __i = 0; __i < __operations.length; __i++) {\n const __op = __operations[__i];\n let __callArgs = __arguments[__i];\n if (__callArgs === null || __callArgs === undefined) {\n __callArgs = [];\n }\n if (!Array.isArray(__callArgs)) {\n __callArgs = [__callArgs];\n }\n if (__i === 0) {\n __instance = new __targetClass(...__callArgs);\n __out.push(null);\n continue;\n }\n if (!__instance || typeof __instance[__op] !== 'function') {\n throw new Error('Required method \"' + __op + '\" is not implemented on ' + (__className || 'target class'));\n }\n __out.push(__instance[__op](...__callArgs));\n}\nreturn __out;`\n ) as DynamicRunner;\n }\n\n throw new Error(`Execution style \"${executionStyle}\" is not supported for JavaScript runtime yet.`);\n}\n\nfunction getOpsClassInputs(inputs: Record<string, unknown>): {\n operations: unknown[] | null;\n argumentsList: unknown[] | null;\n} {\n const operations = Array.isArray(inputs.operations)\n ? inputs.operations\n : (Array.isArray(inputs.ops) ? inputs.ops : null);\n const argumentsList = Array.isArray(inputs.arguments)\n ? inputs.arguments\n : (Array.isArray(inputs.args) ? inputs.args : null);\n return { operations, argumentsList };\n}\n\nasync function transpileTypeScript(code: string): Promise<string> {\n const ts = await getTypeScriptModule();\n const transpileInput = withTypeScriptRuntimeDeclarations(code);\n const transpiled = ts.transpileModule(transpileInput, {\n compilerOptions: {\n target: ts.ScriptTarget.ES2020,\n module: ts.ModuleKind.None,\n strict: false,\n esModuleInterop: true,\n },\n reportDiagnostics: true,\n fileName: 'solution.ts',\n });\n\n const diagnostics = Array.isArray(transpiled.diagnostics) ? transpiled.diagnostics : [];\n const errors = diagnostics.filter((diag) => diag.category === ts.DiagnosticCategory.Error);\n if (errors.length > 0) {\n const first = errors[0];\n const messageText = ts.flattenDiagnosticMessageText(first.messageText, '\\n');\n let lineNumber: number | undefined;\n if (first.file && typeof first.start === 'number') {\n const position = first.file.getLineAndCharacterOfPosition(first.start);\n lineNumber = position.line + 1;\n }\n const error = new Error(\n lineNumber\n ? `TypeScript transpilation failed (line ${lineNumber}): ${messageText}`\n : `TypeScript transpilation failed: ${messageText}`\n );\n if (lineNumber) {\n (error as Error & { __tracecodeLine?: number }).__tracecodeLine = lineNumber;\n }\n throw error;\n }\n\n return transpiled.outputText;\n}\n\nexport async function executeJavaScriptCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n): Promise<CodeExecutionResult> {\n const consoleOutput: string[] = [];\n const consoleProxy = createConsoleProxy(consoleOutput);\n const normalizedInputs = normalizeInputs(inputs);\n\n try {\n let output: unknown;\n\n if (executionStyle === 'ops-class') {\n const { operations, argumentsList } = getOpsClassInputs(normalizedInputs);\n const runner = buildRunner(code, executionStyle, []);\n output = await Promise.resolve(runner(consoleProxy, functionName, operations, argumentsList));\n } else {\n const inputKeys = await resolveOrderedInputKeys(code, functionName, normalizedInputs, executionStyle);\n const argNames = inputKeys.map((_, index) => `__arg${index}`);\n const argValues = inputKeys.map((key) => normalizedInputs[key]);\n const runner = buildRunner(code, executionStyle, argNames);\n output = await Promise.resolve(runner(consoleProxy, functionName, ...argValues));\n }\n\n return {\n success: true,\n output: serializeValue(output),\n consoleOutput,\n };\n } catch (error) {\n return {\n success: false,\n output: null,\n error: error instanceof Error ? error.message : String(error),\n errorLine: extractUserErrorLine(error),\n consoleOutput,\n };\n }\n}\n\nexport async function executeJavaScriptWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n): Promise<ExecutionResult> {\n const startedAt = performanceNow();\n const codeResult = await executeJavaScriptCode(code, functionName ?? '', inputs, executionStyle);\n const executionTimeMs = performanceNow() - startedAt;\n\n if (!codeResult.success) {\n return {\n success: false,\n error: codeResult.error,\n errorLine: codeResult.errorLine,\n trace: [],\n executionTimeMs,\n consoleOutput: codeResult.consoleOutput ?? [],\n lineEventCount: 0,\n traceStepCount: 0,\n };\n }\n\n return {\n success: true,\n output: codeResult.output,\n trace: [],\n executionTimeMs,\n consoleOutput: codeResult.consoleOutput ?? [],\n lineEventCount: 0,\n traceStepCount: 0,\n };\n}\n\nexport async function executeTypeScriptCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n): Promise<CodeExecutionResult> {\n const transpiledCode = await transpileTypeScript(code);\n return executeJavaScriptCode(transpiledCode, functionName, inputs, executionStyle);\n}\n"],"mappings":"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","names":["line","out"]}
1
+ {"version":3,"sources":["../packages/harness-javascript/src/typescript-runtime-declarations.ts","../packages/harness-javascript/src/javascript-executor.ts"],"sourcesContent":["export const TYPESCRIPT_RUNTIME_DECLARATIONS = `\ndeclare class ListNode {\n val: any;\n next: ListNode | SerializedListNode | SerializedRef | null;\n prev?: ListNode | SerializedListNode | SerializedRef | null;\n constructor(val?: any, next?: ListNode | null);\n}\n\ndeclare class TreeNode {\n val: any;\n left: TreeNode | SerializedTreeNode | SerializedRef | null;\n right: TreeNode | SerializedTreeNode | SerializedRef | null;\n constructor(val?: any, left?: TreeNode | null, right?: TreeNode | null);\n}\n\ntype SerializedRef = { __ref__: string };\n\ntype SerializedListNode = {\n __id__?: string;\n __type__?: 'ListNode';\n val?: any;\n next?: SerializedListNode | SerializedRef | ListNode | null;\n prev?: SerializedListNode | SerializedRef | ListNode | null;\n};\n\ntype SerializedTreeNode = {\n __id__?: string;\n __type__?: 'TreeNode';\n val?: any;\n left?: SerializedTreeNode | SerializedRef | TreeNode | null;\n right?: SerializedTreeNode | SerializedRef | TreeNode | null;\n};\n`;\n\nexport function withTypeScriptRuntimeDeclarations(sourceCode: string): string {\n return `${sourceCode}\\n\\n${TYPESCRIPT_RUNTIME_DECLARATIONS}\\n`;\n}\n\n","import type { RuntimeExecutionStyle } from '../../harness-core/src/runtime-types';\nimport type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\nimport { withTypeScriptRuntimeDeclarations } from './typescript-runtime-declarations';\n\ntype TypeScriptModule = typeof import('typescript');\n\nlet typeScriptModulePromise: Promise<TypeScriptModule> | null = null;\n\ntype DynamicRunner = (...args: unknown[]) => unknown;\n\nasync function getTypeScriptModule(): Promise<TypeScriptModule> {\n if (!typeScriptModulePromise) {\n const specifier = 'typescript';\n typeScriptModulePromise = import(/* webpackIgnore: true */ specifier);\n }\n return typeScriptModulePromise;\n}\n\nfunction performanceNow(): number {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now();\n }\n return Date.now();\n}\n\nfunction formatConsoleArg(value: unknown): string {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean' || value === null || value === undefined) {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction createConsoleProxy(output: string[]): Console {\n const capture = (...args: unknown[]) => {\n output.push(args.map(formatConsoleArg).join(' '));\n };\n\n return {\n ...console,\n log: capture,\n info: capture,\n warn: capture,\n error: capture,\n debug: capture,\n };\n}\n\nfunction isLikelyTreeNodeValue(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n if (record.__type__ === 'TreeNode') return true;\n const ctor = (value as { constructor?: { name?: unknown } }).constructor;\n return ctor?.name === 'TreeNode';\n}\n\nfunction isLikelyListNodeValue(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n if (record.__type__ === 'ListNode') return true;\n const ctor = (value as { constructor?: { name?: unknown } }).constructor;\n return ctor?.name === 'ListNode';\n}\n\nfunction getCustomClassName(value: unknown): string | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n if (value instanceof Map || value instanceof Set) return null;\n if (isLikelyTreeNodeValue(value) || isLikelyListNodeValue(value)) return null;\n const ctor = (value as { constructor?: { name?: unknown } }).constructor;\n const name = typeof ctor?.name === 'string' ? ctor.name : '';\n if (!name || name === 'Object' || name === 'Array' || name === 'Map' || name === 'Set') {\n return null;\n }\n return name;\n}\n\nfunction serializeValue(\n value: unknown,\n depth = 0,\n seen = new WeakSet<object>(),\n nodeRefState: { ids: Map<object, string>; nextId: number } = { ids: new Map<object, string>(), nextId: 1 }\n): unknown {\n if (depth > 48) return '<max depth>';\n if (value === null || value === undefined) return value;\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'bigint') {\n return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);\n }\n if (typeof value === 'function') {\n return '<function>';\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => serializeValue(item, depth + 1, seen));\n }\n\n if (value instanceof Set) {\n return {\n __type__: 'set',\n values: [...value].map((item) => serializeValue(item, depth + 1, seen, nodeRefState)),\n };\n }\n\n if (value instanceof Map) {\n return {\n __type__: 'map',\n entries: [...value.entries()].map(([k, v]) => [\n serializeValue(k, depth + 1, seen, nodeRefState),\n serializeValue(v, depth + 1, seen, nodeRefState),\n ]),\n };\n }\n\n if (typeof value === 'object') {\n if (isLikelyTreeNodeValue(value) || isLikelyListNodeValue(value)) {\n const objectValue = value as object;\n const nodeValue = value as Record<string, unknown>;\n const existingId = nodeRefState.ids.get(objectValue);\n if (existingId) {\n return { __ref__: existingId };\n }\n\n const isTree = isLikelyTreeNodeValue(value);\n const nodePrefix = isTree ? 'tree' : 'list';\n const nodeId = `${nodePrefix}-${nodeRefState.nextId++}`;\n nodeRefState.ids.set(objectValue, nodeId);\n\n const out: Record<string, unknown> = isTree\n ? {\n __type__: 'TreeNode',\n __id__: nodeId,\n val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),\n left: serializeValue(nodeValue.left ?? null, depth + 1, seen, nodeRefState),\n right: serializeValue(nodeValue.right ?? null, depth + 1, seen, nodeRefState),\n }\n : {\n __type__: 'ListNode',\n __id__: nodeId,\n val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),\n next: serializeValue(nodeValue.next ?? null, depth + 1, seen, nodeRefState),\n ...('prev' in nodeValue\n ? { prev: serializeValue(nodeValue.prev ?? null, depth + 1, seen, nodeRefState) }\n : {}),\n };\n\n const skipped = isTree\n ? new Set(['__id__', '__type__', '__class__', 'val', 'value', 'left', 'right'])\n : new Set(['__id__', '__type__', '__class__', 'val', 'value', 'next', 'prev']);\n for (const [k, v] of Object.entries(nodeValue)) {\n if (skipped.has(k)) continue;\n out[k] = serializeValue(v, depth + 1, seen, nodeRefState);\n }\n return out;\n }\n\n const customClassName = getCustomClassName(value);\n if (customClassName) {\n const objectValue = value as object;\n const existingId = nodeRefState.ids.get(objectValue);\n if (existingId) {\n return { __ref__: existingId };\n }\n\n const objectId = `object-${nodeRefState.nextId++}`;\n nodeRefState.ids.set(objectValue, objectId);\n\n if (seen.has(objectValue)) return { __ref__: objectId };\n seen.add(objectValue);\n const out: Record<string, unknown> = {\n __type__: 'object',\n __class__: customClassName,\n __id__: objectId,\n };\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = serializeValue(v, depth + 1, seen, nodeRefState);\n }\n seen.delete(objectValue);\n return out;\n }\n\n if (seen.has(value as object)) return '<cycle>';\n seen.add(value as object);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = serializeValue(v, depth + 1, seen, nodeRefState);\n }\n seen.delete(value as object);\n return out;\n }\n\n return String(value);\n}\n\nfunction extractUserErrorLine(error: unknown): number | undefined {\n if (typeof error === 'object' && error && '__tracecodeLine' in error) {\n const line = Number((error as { __tracecodeLine?: unknown }).__tracecodeLine);\n if (Number.isFinite(line)) return line;\n }\n\n const stack =\n typeof error === 'object' && error && 'stack' in error\n ? String((error as { stack?: unknown }).stack ?? '')\n : '';\n if (!stack) return undefined;\n const match = stack.match(/<anonymous>:(\\d+):\\d+/);\n if (!match) return undefined;\n const line = Number.parseInt(match[1], 10);\n return Number.isFinite(line) ? line : undefined;\n}\n\nfunction isPlainObjectRecord(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nfunction collectReferenceTargets(\n value: unknown,\n byId: Map<string, Record<string, unknown>>,\n seen: WeakSet<object>\n): void {\n if (value === null || value === undefined) return;\n if (typeof value !== 'object') return;\n if (seen.has(value)) return;\n seen.add(value);\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectReferenceTargets(item, byId, seen);\n }\n return;\n }\n\n if (!isPlainObjectRecord(value)) return;\n if (typeof value.__id__ === 'string' && value.__id__.length > 0 && !byId.has(value.__id__)) {\n byId.set(value.__id__, value);\n }\n\n for (const nested of Object.values(value)) {\n collectReferenceTargets(nested, byId, seen);\n }\n}\n\nfunction resolveReferenceGraph(\n value: unknown,\n byId: Map<string, Record<string, unknown>>,\n resolved: WeakMap<object, unknown>\n): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value !== 'object') return value;\n\n if (resolved.has(value)) {\n return resolved.get(value);\n }\n\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n resolved.set(value, out);\n for (const item of value) {\n out.push(resolveReferenceGraph(item, byId, resolved));\n }\n return out;\n }\n\n if (!isPlainObjectRecord(value)) {\n return value;\n }\n\n const keys = Object.keys(value);\n if (keys.length === 1 && typeof value.__ref__ === 'string') {\n const target = byId.get(value.__ref__);\n if (!target) return null;\n return resolveReferenceGraph(target, byId, resolved);\n }\n\n const out: Record<string, unknown> = {};\n resolved.set(value, out);\n for (const [key, nested] of Object.entries(value)) {\n out[key] = resolveReferenceGraph(nested, byId, resolved);\n }\n return out;\n}\n\nfunction normalizeInputs(inputs: Record<string, unknown>): Record<string, unknown> {\n if (!inputs || typeof inputs !== 'object' || Array.isArray(inputs)) return {};\n const byId = new Map<string, Record<string, unknown>>();\n collectReferenceTargets(inputs, byId, new WeakSet<object>());\n if (byId.size === 0) {\n return inputs;\n }\n const hydrated = resolveReferenceGraph(inputs, byId, new WeakMap<object, unknown>());\n if (!hydrated || typeof hydrated !== 'object' || Array.isArray(hydrated)) {\n return inputs;\n }\n return hydrated as Record<string, unknown>;\n}\n\ntype InputMaterializerKind = 'tree' | 'list';\n\nfunction buildTreeNodeFromLevelOrder(values: unknown[]): Record<string, unknown> | null {\n if (!Array.isArray(values) || values.length === 0) return null;\n const firstValue = values[0];\n if (firstValue === null || firstValue === undefined) return null;\n const root: Record<string, unknown> = {\n val: firstValue,\n value: firstValue,\n left: null,\n right: null,\n };\n const queue: Record<string, unknown>[] = [root];\n let index = 1;\n\n while (queue.length > 0 && index < values.length) {\n const node = queue.shift();\n if (!node) break;\n\n const leftValue = values[index++];\n if (leftValue !== null && leftValue !== undefined) {\n const leftNode: Record<string, unknown> = {\n val: leftValue,\n value: leftValue,\n left: null,\n right: null,\n };\n node.left = leftNode;\n queue.push(leftNode);\n }\n\n if (index >= values.length) break;\n\n const rightValue = values[index++];\n if (rightValue !== null && rightValue !== undefined) {\n const rightNode: Record<string, unknown> = {\n val: rightValue,\n value: rightValue,\n left: null,\n right: null,\n };\n node.right = rightNode;\n queue.push(rightNode);\n }\n }\n return root;\n}\n\nfunction materializeTreeInput(value: unknown): unknown {\n if (value === null || value === undefined) return value;\n if (Array.isArray(value)) {\n return buildTreeNodeFromLevelOrder(value);\n }\n if (!isPlainObjectRecord(value)) {\n return value;\n }\n const record = value as Record<string, unknown>;\n if (isLikelyTreeNodeValue(record)) {\n const node: Record<string, unknown> = {\n val: record.val ?? record.value ?? null,\n value: record.val ?? record.value ?? null,\n left: materializeTreeInput(record.left ?? null),\n right: materializeTreeInput(record.right ?? null),\n };\n for (const [key, nested] of Object.entries(record)) {\n if (key === '__id__' || key === '__type__' || key === 'val' || key === 'value' || key === 'left' || key === 'right') continue;\n node[key] = materializeTreeInput(nested);\n }\n return node;\n }\n const taggedRecord = value as Record<string, unknown> & { __type__?: unknown };\n if (taggedRecord.__type__ === 'TreeNode') {\n const node: Record<string, unknown> = {\n val: taggedRecord.val ?? taggedRecord.value ?? null,\n value: taggedRecord.val ?? taggedRecord.value ?? null,\n left: materializeTreeInput(taggedRecord.left ?? null),\n right: materializeTreeInput(taggedRecord.right ?? null),\n };\n for (const [key, nested] of Object.entries(taggedRecord)) {\n if (key === '__id__' || key === '__type__' || key === 'val' || key === 'value' || key === 'left' || key === 'right') continue;\n node[key] = materializeTreeInput(nested);\n }\n return node;\n }\n return value;\n}\n\nfunction materializeListInput(\n value: unknown,\n refs: Map<string, Record<string, unknown>> = new Map(),\n materialized: WeakMap<object, Record<string, unknown>> = new WeakMap()\n): unknown {\n if (value === null || value === undefined) return value;\n if (Array.isArray(value)) {\n if (value.length === 0) return null;\n const head: Record<string, unknown> = {\n val: value[0],\n value: value[0],\n next: null,\n };\n let current: Record<string, unknown> = head;\n for (let i = 1; i < value.length; i++) {\n const nextNode: Record<string, unknown> = { val: value[i], value: value[i], next: null };\n current.next = nextNode;\n current = nextNode;\n }\n return head;\n }\n if (!isPlainObjectRecord(value)) {\n return value;\n }\n const record = value as Record<string, unknown>;\n if (typeof record.__ref__ === 'string') {\n return refs.get(record.__ref__) ?? null;\n }\n const taggedRecord = value as Record<string, unknown> & { __type__?: unknown };\n if (isLikelyListNodeValue(record) || taggedRecord.__type__ === 'ListNode') {\n const existingMaterialized = materialized.get(record as object);\n if (existingMaterialized) {\n return existingMaterialized;\n }\n const node: Record<string, unknown> = {\n val: taggedRecord.val ?? taggedRecord.value ?? null,\n value: taggedRecord.val ?? taggedRecord.value ?? null,\n next: null,\n };\n materialized.set(record as object, node);\n if (typeof taggedRecord.__id__ === 'string' && taggedRecord.__id__.length > 0) {\n refs.set(taggedRecord.__id__, node);\n }\n node.next = materializeListInput(taggedRecord.next ?? null, refs, materialized);\n for (const [key, nested] of Object.entries(taggedRecord)) {\n if (key === '__id__' || key === '__type__' || key === '__class__' || key === 'val' || key === 'value' || key === 'next') continue;\n node[key] = materializeListInput(nested, refs, materialized);\n }\n return node;\n }\n return value;\n}\n\nfunction detectMaterializerKind(\n ts: TypeScriptModule,\n typeNode: import('typescript').TypeNode | undefined\n): InputMaterializerKind | null {\n if (!typeNode) return null;\n if (ts.isParenthesizedTypeNode(typeNode)) {\n return detectMaterializerKind(ts, typeNode.type);\n }\n if (ts.isUnionTypeNode(typeNode)) {\n for (const child of typeNode.types) {\n const resolved = detectMaterializerKind(ts, child);\n if (resolved) return resolved;\n }\n return null;\n }\n if (ts.isTypeReferenceNode(typeNode)) {\n const typeNameText = typeNode.typeName.getText();\n if (typeNameText === 'TreeNode') return 'tree';\n if (typeNameText === 'ListNode') return 'list';\n return null;\n }\n return null;\n}\n\nfunction collectInputMaterializers(\n ts: TypeScriptModule,\n functionLikeNode: FunctionLikeNode\n): Record<string, InputMaterializerKind> {\n const out: Record<string, InputMaterializerKind> = {};\n for (const parameter of functionLikeNode.parameters ?? []) {\n if (!ts.isIdentifier(parameter.name)) continue;\n if (parameter.name.text === 'this') continue;\n const kind = detectMaterializerKind(ts, parameter.type);\n if (kind) {\n out[parameter.name.text] = kind;\n }\n }\n return out;\n}\n\nasync function resolveInputMaterializers(\n code: string,\n functionName: string,\n executionStyle: RuntimeExecutionStyle,\n language: 'javascript' | 'typescript'\n): Promise<Record<string, InputMaterializerKind>> {\n if (!functionName || executionStyle === 'ops-class' || language !== 'typescript') {\n return {};\n }\n\n try {\n const ts = await getTypeScriptModule();\n const sourceFile = ts.createSourceFile(\n 'runtime-input.ts',\n code,\n ts.ScriptTarget.ES2020,\n true,\n ts.ScriptKind.TS\n );\n const target = findFunctionLikeNode(ts, sourceFile, functionName, executionStyle);\n if (!target) return {};\n return collectInputMaterializers(ts, target);\n } catch {\n return {};\n }\n}\n\nfunction applyInputMaterializers(\n inputs: Record<string, unknown>,\n materializers: Record<string, InputMaterializerKind>\n): Record<string, unknown> {\n if (Object.keys(materializers).length === 0) return inputs;\n const next: Record<string, unknown> = { ...inputs };\n for (const [name, kind] of Object.entries(materializers)) {\n if (!Object.prototype.hasOwnProperty.call(next, name)) continue;\n next[name] = kind === 'tree' ? materializeTreeInput(next[name]) : materializeListInput(next[name]);\n }\n return next;\n}\n\ntype FunctionLikeNode =\n | import('typescript').FunctionDeclaration\n | import('typescript').FunctionExpression\n | import('typescript').ArrowFunction\n | import('typescript').MethodDeclaration;\n\nfunction collectSimpleParameterNames(\n ts: TypeScriptModule,\n functionLikeNode: FunctionLikeNode\n): string[] | null {\n const names: string[] = [];\n\n for (const parameter of functionLikeNode.parameters ?? []) {\n if (!ts.isIdentifier(parameter.name)) {\n return null;\n }\n if (parameter.name.text === 'this') {\n continue;\n }\n names.push(parameter.name.text);\n }\n\n return names;\n}\n\nfunction getPropertyNameText(ts: TypeScriptModule, name: import('typescript').PropertyName | undefined): string | null {\n if (!name) return null;\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n return null;\n}\n\nfunction findFunctionLikeNode(\n ts: TypeScriptModule,\n sourceFile: import('typescript').SourceFile,\n functionName: string,\n executionStyle: RuntimeExecutionStyle\n): FunctionLikeNode | null {\n let found: FunctionLikeNode | null = null;\n\n const visit = (node: import('typescript').Node): void => {\n if (found) return;\n\n if (executionStyle === 'solution-method' && ts.isClassDeclaration(node) && node.name?.text === 'Solution') {\n for (const member of node.members) {\n if (found) break;\n\n if (ts.isMethodDeclaration(member) && getPropertyNameText(ts, member.name) === functionName) {\n found = member;\n break;\n }\n\n if (\n ts.isPropertyDeclaration(member) &&\n getPropertyNameText(ts, member.name) === functionName &&\n member.initializer &&\n (ts.isArrowFunction(member.initializer) || ts.isFunctionExpression(member.initializer))\n ) {\n found = member.initializer;\n break;\n }\n }\n return;\n }\n\n if (executionStyle === 'function') {\n if (ts.isFunctionDeclaration(node) && node.name?.text === functionName) {\n found = node;\n return;\n }\n\n if (\n ts.isVariableDeclaration(node) &&\n ts.isIdentifier(node.name) &&\n node.name.text === functionName &&\n node.initializer &&\n (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer))\n ) {\n found = node.initializer;\n return;\n }\n }\n\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return found;\n}\n\nasync function resolveOrderedInputKeys(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle,\n language: 'javascript' | 'typescript' = 'javascript'\n): Promise<string[]> {\n const fallbackKeys = Object.keys(inputs);\n if (!functionName || executionStyle === 'ops-class' || fallbackKeys.length <= 1) {\n return fallbackKeys;\n }\n\n try {\n const ts = await getTypeScriptModule();\n const sourceFile = ts.createSourceFile(\n `runtime-input.${language === 'typescript' ? 'ts' : 'js'}`,\n code,\n ts.ScriptTarget.ES2020,\n true,\n language === 'typescript' ? ts.ScriptKind.TS : ts.ScriptKind.JS\n );\n const target = findFunctionLikeNode(ts, sourceFile, functionName, executionStyle);\n if (!target) {\n return fallbackKeys;\n }\n\n const parameterNames = collectSimpleParameterNames(ts, target);\n if (!parameterNames || parameterNames.length === 0) {\n return fallbackKeys;\n }\n\n const matchedKeys = parameterNames.filter((name) => Object.prototype.hasOwnProperty.call(inputs, name));\n if (matchedKeys.length === 0) {\n return fallbackKeys;\n }\n\n const extras = fallbackKeys.filter((key) => !matchedKeys.includes(key));\n return [...matchedKeys, ...extras];\n } catch {\n return fallbackKeys;\n }\n}\n\nfunction buildRunner(code: string, executionStyle: RuntimeExecutionStyle, argNames: string[]): DynamicRunner {\n if (executionStyle === 'function') {\n return new Function(\n 'console',\n '__functionName',\n ...argNames,\n `\"use strict\";\n${code}\nlet __target;\ntry {\n __target = eval(__functionName);\n} catch (_err) {\n __target = undefined;\n}\nif (typeof __target !== 'function') {\n throw new Error('Function \"' + __functionName + '\" not found');\n}\nreturn __target(${argNames.join(', ')});`\n ) as DynamicRunner;\n }\n\n if (executionStyle === 'solution-method') {\n return new Function(\n 'console',\n '__functionName',\n ...argNames,\n `\"use strict\";\n${code}\nif (typeof Solution !== 'function') {\n throw new Error('Class \"Solution\" not found');\n}\nconst __solver = new Solution();\nconst __method = __solver[__functionName];\nif (typeof __method !== 'function') {\n throw new Error('Method \"Solution.' + __functionName + '\" not found');\n}\nreturn __method.call(__solver, ${argNames.join(', ')});`\n ) as DynamicRunner;\n }\n\n if (executionStyle === 'ops-class') {\n return new Function(\n 'console',\n '__className',\n '__operations',\n '__arguments',\n `\"use strict\";\n${code}\nif (!Array.isArray(__operations) || !Array.isArray(__arguments)) {\n throw new Error('ops-class execution requires inputs.operations and inputs.arguments (or ops/args)');\n}\nif (__operations.length !== __arguments.length) {\n throw new Error('operations and arguments must have the same length');\n}\nlet __targetClass;\ntry {\n __targetClass = eval(__className);\n} catch (_err) {\n __targetClass = undefined;\n}\nif (typeof __targetClass !== 'function') {\n throw new Error('Class \"' + __className + '\" not found');\n}\nlet __instance = null;\nconst __out = [];\nfor (let __i = 0; __i < __operations.length; __i++) {\n const __op = __operations[__i];\n let __callArgs = __arguments[__i];\n if (__callArgs === null || __callArgs === undefined) {\n __callArgs = [];\n }\n if (!Array.isArray(__callArgs)) {\n __callArgs = [__callArgs];\n }\n if (__i === 0) {\n __instance = new __targetClass(...__callArgs);\n __out.push(null);\n continue;\n }\n if (!__instance || typeof __instance[__op] !== 'function') {\n throw new Error('Required method \"' + __op + '\" is not implemented on ' + (__className || 'target class'));\n }\n __out.push(__instance[__op](...__callArgs));\n}\nreturn __out;`\n ) as DynamicRunner;\n }\n\n throw new Error(`Execution style \"${executionStyle}\" is not supported for JavaScript runtime yet.`);\n}\n\nfunction getOpsClassInputs(inputs: Record<string, unknown>): {\n operations: unknown[] | null;\n argumentsList: unknown[] | null;\n} {\n const operations = Array.isArray(inputs.operations)\n ? inputs.operations\n : (Array.isArray(inputs.ops) ? inputs.ops : null);\n const argumentsList = Array.isArray(inputs.arguments)\n ? inputs.arguments\n : (Array.isArray(inputs.args) ? inputs.args : null);\n return { operations, argumentsList };\n}\n\nasync function transpileTypeScript(code: string): Promise<string> {\n const ts = await getTypeScriptModule();\n const transpileInput = withTypeScriptRuntimeDeclarations(code);\n const transpiled = ts.transpileModule(transpileInput, {\n compilerOptions: {\n target: ts.ScriptTarget.ES2020,\n module: ts.ModuleKind.None,\n strict: false,\n esModuleInterop: true,\n },\n reportDiagnostics: true,\n fileName: 'solution.ts',\n });\n\n const diagnostics = Array.isArray(transpiled.diagnostics) ? transpiled.diagnostics : [];\n const errors = diagnostics.filter((diag) => diag.category === ts.DiagnosticCategory.Error);\n if (errors.length > 0) {\n const first = errors[0];\n const messageText = ts.flattenDiagnosticMessageText(first.messageText, '\\n');\n let lineNumber: number | undefined;\n if (first.file && typeof first.start === 'number') {\n const position = first.file.getLineAndCharacterOfPosition(first.start);\n lineNumber = position.line + 1;\n }\n const error = new Error(\n lineNumber\n ? `TypeScript transpilation failed (line ${lineNumber}): ${messageText}`\n : `TypeScript transpilation failed: ${messageText}`\n );\n if (lineNumber) {\n (error as Error & { __tracecodeLine?: number }).__tracecodeLine = lineNumber;\n }\n throw error;\n }\n\n return transpiled.outputText;\n}\n\nexport async function executeJavaScriptCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function',\n language: 'javascript' | 'typescript' = 'javascript'\n): Promise<CodeExecutionResult> {\n const consoleOutput: string[] = [];\n const consoleProxy = createConsoleProxy(consoleOutput);\n const normalizedInputs = normalizeInputs(inputs);\n const materializers = await resolveInputMaterializers(code, functionName, executionStyle, language);\n const materializedInputs = applyInputMaterializers(normalizedInputs, materializers);\n\n try {\n let output: unknown;\n\n if (executionStyle === 'ops-class') {\n const { operations, argumentsList } = getOpsClassInputs(materializedInputs);\n const runner = buildRunner(code, executionStyle, []);\n output = await Promise.resolve(runner(consoleProxy, functionName, operations, argumentsList));\n } else {\n const inputKeys = await resolveOrderedInputKeys(code, functionName, materializedInputs, executionStyle, language);\n const argNames = inputKeys.map((_, index) => `__arg${index}`);\n const argValues = inputKeys.map((key) => materializedInputs[key]);\n const runner = buildRunner(code, executionStyle, argNames);\n output = await Promise.resolve(runner(consoleProxy, functionName, ...argValues));\n }\n\n return {\n success: true,\n output: serializeValue(output),\n consoleOutput,\n };\n } catch (error) {\n return {\n success: false,\n output: null,\n error: error instanceof Error ? error.message : String(error),\n errorLine: extractUserErrorLine(error),\n consoleOutput,\n };\n }\n}\n\nexport async function executeJavaScriptWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function',\n language: 'javascript' | 'typescript' = 'javascript'\n): Promise<ExecutionResult> {\n const startedAt = performanceNow();\n const codeResult = await executeJavaScriptCode(code, functionName ?? '', inputs, executionStyle, language);\n const executionTimeMs = performanceNow() - startedAt;\n\n if (!codeResult.success) {\n return {\n success: false,\n error: codeResult.error,\n errorLine: codeResult.errorLine,\n trace: [],\n executionTimeMs,\n consoleOutput: codeResult.consoleOutput ?? [],\n lineEventCount: 0,\n traceStepCount: 0,\n };\n }\n\n return {\n success: true,\n output: codeResult.output,\n trace: [],\n executionTimeMs,\n consoleOutput: codeResult.consoleOutput ?? [],\n lineEventCount: 0,\n traceStepCount: 0,\n };\n}\n\nexport async function executeTypeScriptCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n): Promise<CodeExecutionResult> {\n const normalizedInputs = normalizeInputs(inputs);\n const materializers = await resolveInputMaterializers(code, functionName, executionStyle, 'typescript');\n const materializedInputs = applyInputMaterializers(normalizedInputs, materializers);\n const transpiledCode = await transpileTypeScript(code);\n return executeJavaScriptCode(transpiledCode, functionName, materializedInputs, executionStyle, 'typescript');\n}\n"],"mappings":"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","names":["out","line"]}