@tracecode/harness 0.5.0 → 0.6.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.
- package/CHANGELOG.md +23 -0
- package/LICENSE +67 -80
- package/README.md +31 -4
- package/dist/browser.cjs +974 -19
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +3 -2
- package/dist/browser.d.ts +3 -2
- package/dist/browser.js +974 -19
- package/dist/browser.js.map +1 -1
- package/dist/cli.cjs +24 -0
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +24 -0
- package/dist/cli.js.map +1 -1
- package/dist/core.cjs +611 -4
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +20 -6
- package/dist/core.d.ts +20 -6
- package/dist/core.js +605 -4
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +1055 -52
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1049 -52
- package/dist/index.js.map +1 -1
- package/dist/internal/browser.cjs +211 -0
- package/dist/internal/browser.cjs.map +1 -1
- package/dist/internal/browser.d.cts +62 -6
- package/dist/internal/browser.d.ts +62 -6
- package/dist/internal/browser.js +210 -0
- package/dist/internal/browser.js.map +1 -1
- package/dist/javascript.cjs +37 -19
- package/dist/javascript.cjs.map +1 -1
- package/dist/javascript.d.cts +2 -2
- package/dist/javascript.d.ts +2 -2
- package/dist/javascript.js +37 -19
- package/dist/javascript.js.map +1 -1
- package/dist/python.cjs +14 -14
- package/dist/python.cjs.map +1 -1
- package/dist/python.d.cts +8 -8
- package/dist/python.d.ts +8 -8
- package/dist/python.js +14 -14
- package/dist/python.js.map +1 -1
- package/dist/{runtime-types-DtaaAhHL.d.ts → runtime-types-89nchXlY.d.cts} +8 -4
- package/dist/{runtime-types--lBQ6rYu.d.cts → runtime-types-CCQ-ZLc9.d.ts} +8 -4
- package/dist/{types-DwIYM3Ku.d.cts → types-zyvpJKCi.d.cts} +1 -0
- package/dist/{types-DwIYM3Ku.d.ts → types-zyvpJKCi.d.ts} +1 -0
- package/package.json +12 -6
- package/workers/java/.build/classes/harness/browser/JavaRewriteLibrary.class +0 -0
- package/workers/java/java-worker.js +712 -0
- package/workers/java/src/harness/browser/JavaRewriteLibrary.java +54 -0
- package/workers/javascript/javascript-worker.js +343 -63
- package/workers/python/generated-python-harness-snippets.js +3 -3
- package/workers/python/pyodide-worker.js +419 -68
- package/workers/python/runtime-core.js +52 -3
- package/workers/vendor/java-browser-spike-helper.jar +0 -0
- package/workers/vendor/java-practice-rewriter.jar +0 -0
- package/workers/vendor/java-rewrite-bridge.jar +0 -0
- package/workers/vendor/javaparser-core-3.25.10.jar +0 -0
- package/workers/vendor/jdk.compiler-17.jar +0 -0
package/dist/javascript.js.map
CHANGED
|
@@ -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 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 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 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 return {\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 }\n const taggedRecord = value as Record<string, unknown> & { __type__?: unknown };\n if (taggedRecord.__type__ === 'TreeNode') {\n return {\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 }\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 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"]}
|
|
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"]}
|
package/dist/python.cjs
CHANGED
|
@@ -139,7 +139,7 @@ def _serialize(obj, depth=0, node_refs=None):
|
|
|
139
139
|
except TypeError:
|
|
140
140
|
sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]
|
|
141
141
|
return {"__type__": "set", "values": sorted_vals}
|
|
142
|
-
elif (
|
|
142
|
+
elif isinstance(obj, TreeNode):
|
|
143
143
|
obj_ref = id(obj)
|
|
144
144
|
if obj_ref in node_refs:
|
|
145
145
|
return {"__ref__": node_refs[obj_ref]}
|
|
@@ -155,7 +155,7 @@ def _serialize(obj, depth=0, node_refs=None):
|
|
|
155
155
|
if hasattr(obj, 'right'):
|
|
156
156
|
result["right"] = _serialize(obj.right, depth + 1, node_refs)
|
|
157
157
|
return result
|
|
158
|
-
elif (
|
|
158
|
+
elif isinstance(obj, ListNode):
|
|
159
159
|
obj_ref = id(obj)
|
|
160
160
|
if obj_ref in node_refs:
|
|
161
161
|
return {"__ref__": node_refs[obj_ref]}
|
|
@@ -233,14 +233,14 @@ def _serialize(obj, depth=0):
|
|
|
233
233
|
return {"__type__": "set", "values": sorted([_serialize(x, depth + 1) for x in obj])}
|
|
234
234
|
except TypeError:
|
|
235
235
|
return {"__type__": "set", "values": [_serialize(x, depth + 1) for x in obj]}
|
|
236
|
-
elif (
|
|
236
|
+
elif isinstance(obj, TreeNode):
|
|
237
237
|
result = {"__type__": "TreeNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
|
|
238
238
|
if hasattr(obj, 'left'):
|
|
239
239
|
result["left"] = _serialize(obj.left, depth + 1)
|
|
240
240
|
if hasattr(obj, 'right'):
|
|
241
241
|
result["right"] = _serialize(obj.right, depth + 1)
|
|
242
242
|
return result
|
|
243
|
-
elif (
|
|
243
|
+
elif isinstance(obj, ListNode):
|
|
244
244
|
result = {"__type__": "ListNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
|
|
245
245
|
result["next"] = _serialize(obj.next, depth + 1)
|
|
246
246
|
return result
|
|
@@ -315,14 +315,14 @@ def _serialize(obj, depth=0):
|
|
|
315
315
|
return {"__type__": "set", "values": sorted([_serialize(x, depth + 1) for x in obj])}
|
|
316
316
|
except TypeError:
|
|
317
317
|
return {"__type__": "set", "values": [_serialize(x, depth + 1) for x in obj]}
|
|
318
|
-
elif
|
|
318
|
+
elif isinstance(obj, TreeNode):
|
|
319
319
|
result = {"__type__": "TreeNode", "val": _serialize(getattr(obj, 'val', None), depth + 1)}
|
|
320
320
|
if hasattr(obj, 'left'):
|
|
321
321
|
result["left"] = _serialize(obj.left, depth + 1)
|
|
322
322
|
if hasattr(obj, 'right'):
|
|
323
323
|
result["right"] = _serialize(obj.right, depth + 1)
|
|
324
324
|
return result
|
|
325
|
-
elif
|
|
325
|
+
elif isinstance(obj, ListNode):
|
|
326
326
|
result = {"__type__": "ListNode", "val": _serialize(getattr(obj, 'val', None), depth + 1)}
|
|
327
327
|
result["next"] = _serialize(obj.next, depth + 1)
|
|
328
328
|
return result
|
|
@@ -354,14 +354,14 @@ def _serialize(obj, depth=0):
|
|
|
354
354
|
return {"__type__": "set", "values": sorted([_serialize(x, depth + 1) for x in obj])}
|
|
355
355
|
except TypeError:
|
|
356
356
|
return {"__type__": "set", "values": [_serialize(x, depth + 1) for x in obj]}
|
|
357
|
-
elif (
|
|
357
|
+
elif isinstance(obj, TreeNode):
|
|
358
358
|
result = {"__type__": "TreeNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
|
|
359
359
|
if hasattr(obj, 'left'):
|
|
360
360
|
result["left"] = _serialize(obj.left, depth + 1)
|
|
361
361
|
if hasattr(obj, 'right'):
|
|
362
362
|
result["right"] = _serialize(obj.right, depth + 1)
|
|
363
363
|
return result
|
|
364
|
-
elif (
|
|
364
|
+
elif isinstance(obj, ListNode):
|
|
365
365
|
result = {"__type__": "ListNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
|
|
366
366
|
result["next"] = _serialize(obj.next, depth + 1)
|
|
367
367
|
return result
|
|
@@ -589,7 +589,7 @@ def _serialize(obj, depth=0, node_refs=None):
|
|
|
589
589
|
except TypeError:
|
|
590
590
|
sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]
|
|
591
591
|
return {"__type__": "set", "values": sorted_vals}
|
|
592
|
-
elif (
|
|
592
|
+
elif isinstance(obj, TreeNode):
|
|
593
593
|
obj_ref = id(obj)
|
|
594
594
|
if obj_ref in node_refs:
|
|
595
595
|
return {"__ref__": node_refs[obj_ref]}
|
|
@@ -605,7 +605,7 @@ def _serialize(obj, depth=0, node_refs=None):
|
|
|
605
605
|
if hasattr(obj, 'right'):
|
|
606
606
|
result["right"] = _serialize(obj.right, depth + 1, node_refs)
|
|
607
607
|
return result
|
|
608
|
-
elif (
|
|
608
|
+
elif isinstance(obj, ListNode):
|
|
609
609
|
obj_ref = id(obj)
|
|
610
610
|
if obj_ref in node_refs:
|
|
611
611
|
return {"__ref__": node_refs[obj_ref]}
|
|
@@ -683,14 +683,14 @@ def _serialize(obj, depth=0):
|
|
|
683
683
|
return {"__type__": "set", "values": sorted([_serialize(x, depth + 1) for x in obj])}
|
|
684
684
|
except TypeError:
|
|
685
685
|
return {"__type__": "set", "values": [_serialize(x, depth + 1) for x in obj]}
|
|
686
|
-
elif (
|
|
686
|
+
elif isinstance(obj, TreeNode):
|
|
687
687
|
result = {"__type__": "TreeNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
|
|
688
688
|
if hasattr(obj, 'left'):
|
|
689
689
|
result["left"] = _serialize(obj.left, depth + 1)
|
|
690
690
|
if hasattr(obj, 'right'):
|
|
691
691
|
result["right"] = _serialize(obj.right, depth + 1)
|
|
692
692
|
return result
|
|
693
|
-
elif (
|
|
693
|
+
elif isinstance(obj, ListNode):
|
|
694
694
|
result = {"__type__": "ListNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
|
|
695
695
|
result["next"] = _serialize(obj.next, depth + 1)
|
|
696
696
|
return result
|
|
@@ -765,14 +765,14 @@ def _serialize(obj, depth=0):
|
|
|
765
765
|
return {"__type__": "set", "values": sorted([_serialize(x, depth + 1) for x in obj])}
|
|
766
766
|
except TypeError:
|
|
767
767
|
return {"__type__": "set", "values": [_serialize(x, depth + 1) for x in obj]}
|
|
768
|
-
elif
|
|
768
|
+
elif isinstance(obj, TreeNode):
|
|
769
769
|
result = {"__type__": "TreeNode", "val": _serialize(getattr(obj, 'val', None), depth + 1)}
|
|
770
770
|
if hasattr(obj, 'left'):
|
|
771
771
|
result["left"] = _serialize(obj.left, depth + 1)
|
|
772
772
|
if hasattr(obj, 'right'):
|
|
773
773
|
result["right"] = _serialize(obj.right, depth + 1)
|
|
774
774
|
return result
|
|
775
|
-
elif
|
|
775
|
+
elif isinstance(obj, ListNode):
|
|
776
776
|
result = {"__type__": "ListNode", "val": _serialize(getattr(obj, 'val', None), depth + 1)}
|
|
777
777
|
result["next"] = _serialize(obj.next, depth + 1)
|
|
778
778
|
return result
|
package/dist/python.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/harness-python/src/index.ts","../packages/harness-python/src/generated/python-harness-snippets.ts","../packages/harness-python/src/python-harness.ts","../packages/harness-python/src/python-harness-template.ts"],"sourcesContent":["export * from './python-harness';\nexport * from './python-harness-template';\nexport * from './generated/python-harness-snippets';\n","/**\n * AUTO-GENERATED FILE. DO NOT EDIT MANUALLY.\n *\n * Source: packages/harness-python/src/python-harness-template.ts\n * Generator: scripts/generate-python-harness-artifacts.ts\n */\n\n// @ts-nocheck\n\nexport function toPythonLiteral(value){if(value===null||value===void 0){return\"None\"}if(typeof value===\"boolean\"){return value?\"True\":\"False\"}if(typeof value===\"number\"){return String(value)}if(typeof value===\"string\"){return JSON.stringify(value)}if(Array.isArray(value)){return\"[\"+value.map(toPythonLiteral).join(\", \")+\"]\"}if(typeof value===\"object\"){const entries=Object.entries(value).map(([k,v])=>`${JSON.stringify(k)}: ${toPythonLiteral(v)}`).join(\", \");return\"{\"+entries+\"}\"}return JSON.stringify(value)}\n\nexport const PYTHON_CLASS_DEFINITIONS = \"\\nclass TreeNode:\\n def __init__(self, val=0, left=None, right=None):\\n self.val = val\\n self.value = val\\n self.left = left\\n self.right = right\\n def __getitem__(self, key):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\\n if key == 'left': return self.left\\n if key == 'right': return self.right\\n raise KeyError(key)\\n def get(self, key, default=None):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\\n if key == 'left': return self.left\\n if key == 'right': return self.right\\n return default\\n def __repr__(self):\\n return f\\\"TreeNode({getattr(self, 'val', getattr(self, 'value', None))})\\\"\\n\\nclass ListNode:\\n def __init__(self, val=0, next=None):\\n self.val = val\\n self.value = val\\n self.next = next\\n def __getitem__(self, key):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\\n if key == 'next': return self.next\\n raise KeyError(key)\\n def get(self, key, default=None):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\\n if key == 'next': return self.next\\n return default\\n def __repr__(self):\\n return f\\\"ListNode({getattr(self, 'val', getattr(self, 'value', None))})\\\"\\n\";\n\nexport const PYTHON_CONVERSION_HELPERS = \"\\ndef _ensure_node_value_aliases(node):\\n if node is None:\\n return node\\n try:\\n has_val = hasattr(node, 'val')\\n has_value = hasattr(node, 'value')\\n if has_value and not has_val:\\n try:\\n setattr(node, 'val', getattr(node, 'value'))\\n except Exception:\\n pass\\n elif has_val and not has_value:\\n try:\\n setattr(node, 'value', getattr(node, 'val'))\\n except Exception:\\n pass\\n except Exception:\\n pass\\n return node\\n\\ndef _dict_to_tree(d):\\n if d is None:\\n return None\\n if not isinstance(d, dict):\\n return d\\n if 'val' not in d and 'value' not in d:\\n return d\\n node = TreeNode(d.get('val', d.get('value', 0)))\\n _ensure_node_value_aliases(node)\\n node.left = _dict_to_tree(d.get('left'))\\n node.right = _dict_to_tree(d.get('right'))\\n return node\\n\\ndef _dict_to_list(d, _refs=None):\\n if _refs is None:\\n _refs = {}\\n if d is None:\\n return None\\n if not isinstance(d, dict):\\n return d\\n if '__ref__' in d:\\n return _refs.get(d.get('__ref__'))\\n if 'val' not in d and 'value' not in d:\\n return d\\n node = ListNode(d.get('val', d.get('value', 0)))\\n _ensure_node_value_aliases(node)\\n node_id = d.get('__id__')\\n if isinstance(node_id, str) and node_id:\\n _refs[node_id] = node\\n node.next = _dict_to_list(d.get('next'), _refs)\\n return node\\n\";\n\nexport const PYTHON_TRACE_SERIALIZE_FUNCTION = \"\\n# Sentinel to mark skipped values (functions, etc.) - distinct from None\\n_SKIP_SENTINEL = \\\"__TRACECODE_SKIP__\\\"\\n_MAX_SERIALIZE_DEPTH = 48\\n_MAX_OBJECT_FIELDS = 32\\n\\ndef _serialize(obj, depth=0, node_refs=None):\\n if node_refs is None:\\n node_refs = {}\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1, node_refs) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1, node_refs) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1, node_refs) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n # Use try/except for sorting to handle heterogeneous sets\\n try:\\n sorted_vals = sorted([_serialize(x, depth + 1, node_refs) for x in obj])\\n except TypeError:\\n sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted_vals}\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"tree-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n result = {\\n \\\"__type__\\\": \\\"TreeNode\\\",\\n \\\"__id__\\\": node_id,\\n \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\\n }\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1, node_refs)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1, node_refs)\\n return result\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"list-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n result = {\\n \\\"__type__\\\": \\\"ListNode\\\",\\n \\\"__id__\\\": node_id,\\n \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\\n }\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1, node_refs)\\n return result\\n elif hasattr(obj, '__dict__'):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"object-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n class_name = getattr(getattr(obj, '__class__', None), '__name__', 'object')\\n result = {\\n \\\"__type__\\\": \\\"object\\\",\\n \\\"__class__\\\": class_name,\\n \\\"__id__\\\": node_id,\\n }\\n try:\\n raw_fields = getattr(obj, '__dict__', None)\\n except Exception:\\n raw_fields = None\\n if isinstance(raw_fields, dict):\\n added = 0\\n for key, value in raw_fields.items():\\n key_str = str(key)\\n if key_str.startswith('_'):\\n continue\\n if callable(value):\\n continue\\n result[key_str] = _serialize(value, depth + 1, node_refs)\\n added += 1\\n if added >= _MAX_OBJECT_FIELDS:\\n result[\\\"__truncated__\\\"] = True\\n break\\n return result\\n elif callable(obj):\\n # Skip functions entirely - return sentinel\\n return _SKIP_SENTINEL\\n else:\\n repr_str = repr(obj)\\n # Filter out function-like representations (e.g., <function foo at 0x...>)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return _SKIP_SENTINEL\\n return repr_str\\n\";\n\nexport const PYTHON_EXECUTE_SERIALIZE_FUNCTION = \"\\n_MAX_SERIALIZE_DEPTH = 48\\n\\ndef _serialize(obj, depth=0):\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n elif callable(obj):\\n return None\\n else:\\n repr_str = repr(obj)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return None\\n return repr_str\\n\";\n\nexport const PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION = \"\\ndef _serialize(obj, depth=0, state=None):\\n if state is None:\\n state = {\\\"nodes\\\": 0, \\\"seen\\\": set()}\\n if depth > 64:\\n return \\\"__MAX_DEPTH__\\\"\\n if isinstance(obj, (int, float, str, bool, type(None))):\\n return obj\\n\\n state[\\\"nodes\\\"] += 1\\n if state[\\\"nodes\\\"] > 600:\\n return \\\"__MAX_NODES__\\\"\\n\\n if isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1, state) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1, state) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n serialized = [_serialize(x, depth + 1, state) for x in obj]\\n try:\\n serialized = sorted(serialized)\\n except TypeError:\\n pass\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": serialized}\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n obj_id = id(obj)\\n if obj_id in state[\\\"seen\\\"]:\\n return \\\"__CYCLE__\\\"\\n state[\\\"seen\\\"].add(obj_id)\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1, state)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1, state)\\n state[\\\"seen\\\"].remove(obj_id)\\n return result\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\\n obj_id = id(obj)\\n if obj_id in state[\\\"seen\\\"]:\\n return \\\"__CYCLE__\\\"\\n state[\\\"seen\\\"].add(obj_id)\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1, state)\\n state[\\\"seen\\\"].remove(obj_id)\\n return result\\n else:\\n return repr(obj)\\n\";\n\nexport const PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION = \"\\ndef _serialize(obj, depth=0):\\n if depth > 10:\\n return \\\"<max depth>\\\"\\n if isinstance(obj, (int, float, str, bool, type(None))):\\n return obj\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif hasattr(obj, 'val') and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', None), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif hasattr(obj, 'val') and hasattr(obj, 'next'):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', None), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n else:\\n return repr(obj)\\n\";\n\nexport const PYTHON_SERIALIZE_FUNCTION = \"\\n_MAX_SERIALIZE_DEPTH = 48\\n\\ndef _serialize(obj, depth=0):\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n elif callable(obj):\\n return None\\n else:\\n repr_str = repr(obj)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return None\\n return repr_str\\n\";\n","/**\n * Python Harness Code\n *\n * Shared Python harness helpers for scripts and Node-side validation paths.\n *\n * Canonical source:\n * - packages/harness-python/src/python-harness-template.ts\n *\n * Generated artifacts (via scripts/generate-python-harness-artifacts.ts):\n * - packages/harness-python/src/generated/python-harness-snippets.ts (consumed here)\n * - workers/python/generated-python-harness-snippets.js\n *\n * Note: workers/python/pyodide-worker.js still contains runtime-specific embedded\n * harness code. Keep it aligned via:\n * pnpm test:python-harness-sync\n */\n\nimport {\n toPythonLiteral,\n PYTHON_CLASS_DEFINITIONS,\n PYTHON_CONVERSION_HELPERS,\n PYTHON_TRACE_SERIALIZE_FUNCTION,\n PYTHON_EXECUTE_SERIALIZE_FUNCTION,\n PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_SERIALIZE_FUNCTION,\n} from './generated/python-harness-snippets';\n\nexport {\n toPythonLiteral,\n PYTHON_CLASS_DEFINITIONS,\n PYTHON_CONVERSION_HELPERS,\n PYTHON_TRACE_SERIALIZE_FUNCTION,\n PYTHON_EXECUTE_SERIALIZE_FUNCTION,\n PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_SERIALIZE_FUNCTION,\n};\n\nexport function identifyConversions(inputs: Record<string, unknown>): {\n treeKeys: string[];\n listKeys: string[];\n} {\n const treeKeys: string[] = [];\n const listKeys: string[] = [];\n \n for (const [key, value] of Object.entries(inputs)) {\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n ('val' in (value as Record<string, unknown>) || 'value' in (value as Record<string, unknown>))\n ) {\n const obj = value as Record<string, unknown>;\n const hasLeft = 'left' in obj;\n const hasRight = 'right' in obj;\n const hasNext = 'next' in obj;\n \n if (hasLeft || hasRight) {\n treeKeys.push(key);\n } else if (hasNext) {\n listKeys.push(key);\n } else {\n // Default to tree for backwards compatibility (just 'val')\n treeKeys.push(key);\n }\n }\n }\n \n return { treeKeys, listKeys };\n}\n\n/**\n * Generate Python code for converting tree/list inputs.\n */\nexport function generateConversionCode(inputs: Record<string, unknown>): string {\n const { treeKeys, listKeys } = identifyConversions(inputs);\n \n const lines: string[] = [];\n \n for (const key of treeKeys) {\n lines.push(`${key} = _dict_to_tree(${key})`);\n }\n \n for (const key of listKeys) {\n lines.push(`${key} = _dict_to_list(${key})`);\n }\n \n return lines.join('\\n');\n}\n\n/**\n * Generate Python code for setting up inputs.\n */\nexport function generateInputSetup(inputs: Record<string, unknown>): string {\n return Object.entries(inputs)\n .map(([key, value]) => `${key} = ${toPythonLiteral(value)}`)\n .join('\\n');\n}\n\n/**\n * Generate a complete Python script for running a solution.\n * This is used by the validation script to run solutions via subprocess.\n */\nexport function generateSolutionScript(\n solutionCode: string,\n functionName: string,\n inputs: Record<string, unknown>\n): string {\n const inputSetup = generateInputSetup(inputs);\n const conversionCode = generateConversionCode(inputs);\n const paramList = Object.keys(inputs)\n .map((key) => `${key}=${key}`)\n .join(', ');\n \n return `\nimport json\nimport sys\n\n${PYTHON_CLASS_DEFINITIONS}\n\n${PYTHON_CONVERSION_HELPERS}\n\n${PYTHON_SERIALIZE_FUNCTION}\n\n# Solution code\n${solutionCode}\n\n# Set up inputs\n${inputSetup}\n\n# Convert tree/list inputs\n${conversionCode}\n\n# Run the function\ntry:\n _result = ${functionName}(${paramList})\n print(json.dumps({\"success\": True, \"output\": _serialize(_result)}))\nexcept Exception as e:\n print(json.dumps({\"success\": False, \"error\": f\"{type(e).__name__}: {str(e)}\"}))\n`;\n}\n","/**\n * Canonical Python Harness Template\n *\n * This file is the single source of truth for shared harness snippets.\n * Generated artifacts:\n * - packages/harness-python/src/generated/python-harness-snippets.ts\n * - workers/python/generated-python-harness-snippets.js\n */\n\n/**\n * Convert a JavaScript value to a Python literal string.\n * Handles null -> None, booleans -> True/False, and nested structures.\n */\nexport function templateToPythonLiteral(value: unknown): string {\n if (value === null || value === undefined) {\n return 'None';\n }\n if (typeof value === 'boolean') {\n return value ? 'True' : 'False';\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return '[' + value.map(templateToPythonLiteral).join(', ') + ']';\n }\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>)\n .map(([k, v]) => `${JSON.stringify(k)}: ${templateToPythonLiteral(v)}`)\n .join(', ');\n return '{' + entries + '}';\n }\n return JSON.stringify(value);\n}\n\n/**\n * Python class definitions for TreeNode and ListNode.\n * These must match the worker definitions.\n */\nexport const TEMPLATE_PYTHON_CLASS_DEFINITIONS = `\nclass TreeNode:\n def __init__(self, val=0, left=None, right=None):\n self.val = val\n self.value = val\n self.left = left\n self.right = right\n def __getitem__(self, key):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\n if key == 'left': return self.left\n if key == 'right': return self.right\n raise KeyError(key)\n def get(self, key, default=None):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\n if key == 'left': return self.left\n if key == 'right': return self.right\n return default\n def __repr__(self):\n return f\"TreeNode({getattr(self, 'val', getattr(self, 'value', None))})\"\n\nclass ListNode:\n def __init__(self, val=0, next=None):\n self.val = val\n self.value = val\n self.next = next\n def __getitem__(self, key):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\n if key == 'next': return self.next\n raise KeyError(key)\n def get(self, key, default=None):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\n if key == 'next': return self.next\n return default\n def __repr__(self):\n return f\"ListNode({getattr(self, 'val', getattr(self, 'value', None))})\"\n`;\n\n/**\n * Python helper functions for converting dicts to TreeNode/ListNode.\n */\nexport const TEMPLATE_PYTHON_CONVERSION_HELPERS = `\ndef _ensure_node_value_aliases(node):\n if node is None:\n return node\n try:\n has_val = hasattr(node, 'val')\n has_value = hasattr(node, 'value')\n if has_value and not has_val:\n try:\n setattr(node, 'val', getattr(node, 'value'))\n except Exception:\n pass\n elif has_val and not has_value:\n try:\n setattr(node, 'value', getattr(node, 'val'))\n except Exception:\n pass\n except Exception:\n pass\n return node\n\ndef _dict_to_tree(d):\n if d is None:\n return None\n if not isinstance(d, dict):\n return d\n if 'val' not in d and 'value' not in d:\n return d\n node = TreeNode(d.get('val', d.get('value', 0)))\n _ensure_node_value_aliases(node)\n node.left = _dict_to_tree(d.get('left'))\n node.right = _dict_to_tree(d.get('right'))\n return node\n\ndef _dict_to_list(d, _refs=None):\n if _refs is None:\n _refs = {}\n if d is None:\n return None\n if not isinstance(d, dict):\n return d\n if '__ref__' in d:\n return _refs.get(d.get('__ref__'))\n if 'val' not in d and 'value' not in d:\n return d\n node = ListNode(d.get('val', d.get('value', 0)))\n _ensure_node_value_aliases(node)\n node_id = d.get('__id__')\n if isinstance(node_id, str) and node_id:\n _refs[node_id] = node\n node.next = _dict_to_list(d.get('next'), _refs)\n return node\n`;\n\n/**\n * Trace-mode Python serialization function.\n * Includes function filtering and node reference tracking for cycle-safe traces.\n */\nexport const TEMPLATE_PYTHON_TRACE_SERIALIZE_FUNCTION = `\n# Sentinel to mark skipped values (functions, etc.) - distinct from None\n_SKIP_SENTINEL = \"__TRACECODE_SKIP__\"\n_MAX_SERIALIZE_DEPTH = 48\n_MAX_OBJECT_FIELDS = 32\n\ndef _serialize(obj, depth=0, node_refs=None):\n if node_refs is None:\n node_refs = {}\n if isinstance(obj, (bool, int, str, type(None))):\n return obj\n elif isinstance(obj, float):\n if not math.isfinite(obj):\n if math.isnan(obj):\n return \"NaN\"\n return \"Infinity\" if obj > 0 else \"-Infinity\"\n return obj\n if depth > _MAX_SERIALIZE_DEPTH:\n return \"<max depth>\"\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1, node_refs) for x in obj]\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\n return [_serialize(x, depth + 1, node_refs) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1, node_refs) for k, v in obj.items()}\n elif isinstance(obj, set):\n # Use try/except for sorting to handle heterogeneous sets\n try:\n sorted_vals = sorted([_serialize(x, depth + 1, node_refs) for x in obj])\n except TypeError:\n sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]\n return {\"__type__\": \"set\", \"values\": sorted_vals}\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"tree-{obj_ref}\"\n node_refs[obj_ref] = node_id\n result = {\n \"__type__\": \"TreeNode\",\n \"__id__\": node_id,\n \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\n }\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1, node_refs)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1, node_refs)\n return result\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"list-{obj_ref}\"\n node_refs[obj_ref] = node_id\n result = {\n \"__type__\": \"ListNode\",\n \"__id__\": node_id,\n \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\n }\n result[\"next\"] = _serialize(obj.next, depth + 1, node_refs)\n return result\n elif hasattr(obj, '__dict__'):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"object-{obj_ref}\"\n node_refs[obj_ref] = node_id\n class_name = getattr(getattr(obj, '__class__', None), '__name__', 'object')\n result = {\n \"__type__\": \"object\",\n \"__class__\": class_name,\n \"__id__\": node_id,\n }\n try:\n raw_fields = getattr(obj, '__dict__', None)\n except Exception:\n raw_fields = None\n if isinstance(raw_fields, dict):\n added = 0\n for key, value in raw_fields.items():\n key_str = str(key)\n if key_str.startswith('_'):\n continue\n if callable(value):\n continue\n result[key_str] = _serialize(value, depth + 1, node_refs)\n added += 1\n if added >= _MAX_OBJECT_FIELDS:\n result[\"__truncated__\"] = True\n break\n return result\n elif callable(obj):\n # Skip functions entirely - return sentinel\n return _SKIP_SENTINEL\n else:\n repr_str = repr(obj)\n # Filter out function-like representations (e.g., <function foo at 0x...>)\n if repr_str.startswith('<') and repr_str.endswith('>'):\n return _SKIP_SENTINEL\n return repr_str\n`;\n\n/**\n * Execute-mode Python serialization function.\n * Preserves current execute/interview output semantics.\n */\nexport const TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION = `\n_MAX_SERIALIZE_DEPTH = 48\n\ndef _serialize(obj, depth=0):\n if isinstance(obj, (bool, int, str, type(None))):\n return obj\n elif isinstance(obj, float):\n if not math.isfinite(obj):\n if math.isnan(obj):\n return \"NaN\"\n return \"Infinity\" if obj > 0 else \"-Infinity\"\n return obj\n if depth > _MAX_SERIALIZE_DEPTH:\n return \"<max depth>\"\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1) for x in obj]\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\n return [_serialize(x, depth + 1) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\n elif isinstance(obj, set):\n try:\n return {\"__type__\": \"set\", \"values\": sorted([_serialize(x, depth + 1) for x in obj])}\n except TypeError:\n return {\"__type__\": \"set\", \"values\": [_serialize(x, depth + 1) for x in obj]}\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1)\n return result\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\n result[\"next\"] = _serialize(obj.next, depth + 1)\n return result\n elif callable(obj):\n return None\n else:\n repr_str = repr(obj)\n if repr_str.startswith('<') and repr_str.endswith('>'):\n return None\n return repr_str\n`;\n\n/**\n * Practice materialization serializer with strict safety limits and markers.\n */\nexport const TEMPLATE_PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION = `\ndef _serialize(obj, depth=0, state=None):\n if state is None:\n state = {\"nodes\": 0, \"seen\": set()}\n if depth > 64:\n return \"__MAX_DEPTH__\"\n if isinstance(obj, (int, float, str, bool, type(None))):\n return obj\n\n state[\"nodes\"] += 1\n if state[\"nodes\"] > 600:\n return \"__MAX_NODES__\"\n\n if isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1, state) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1, state) for k, v in obj.items()}\n elif isinstance(obj, set):\n serialized = [_serialize(x, depth + 1, state) for x in obj]\n try:\n serialized = sorted(serialized)\n except TypeError:\n pass\n return {\"__type__\": \"set\", \"values\": serialized}\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\n obj_id = id(obj)\n if obj_id in state[\"seen\"]:\n return \"__CYCLE__\"\n state[\"seen\"].add(obj_id)\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1, state)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1, state)\n state[\"seen\"].remove(obj_id)\n return result\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\n obj_id = id(obj)\n if obj_id in state[\"seen\"]:\n return \"__CYCLE__\"\n state[\"seen\"].add(obj_id)\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\n result[\"next\"] = _serialize(obj.next, depth + 1, state)\n state[\"seen\"].remove(obj_id)\n return result\n else:\n return repr(obj)\n`;\n\n/**\n * Interview materialization serializer, preserving current legacy behavior.\n */\nexport const TEMPLATE_PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION = `\ndef _serialize(obj, depth=0):\n if depth > 10:\n return \"<max depth>\"\n if isinstance(obj, (int, float, str, bool, type(None))):\n return obj\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\n elif isinstance(obj, set):\n try:\n return {\"__type__\": \"set\", \"values\": sorted([_serialize(x, depth + 1) for x in obj])}\n except TypeError:\n return {\"__type__\": \"set\", \"values\": [_serialize(x, depth + 1) for x in obj]}\n elif hasattr(obj, 'val') and (hasattr(obj, 'left') or hasattr(obj, 'right')):\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', None), depth + 1)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1)\n return result\n elif hasattr(obj, 'val') and hasattr(obj, 'next'):\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', None), depth + 1)}\n result[\"next\"] = _serialize(obj.next, depth + 1)\n return result\n else:\n return repr(obj)\n`;\n\n/**\n * Backwards-compatible alias. Use TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION\n * for new callsites.\n */\nexport const TEMPLATE_PYTHON_SERIALIZE_FUNCTION = TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../packages/harness-python/src/index.ts","../packages/harness-python/src/generated/python-harness-snippets.ts","../packages/harness-python/src/python-harness.ts","../packages/harness-python/src/python-harness-template.ts"],"sourcesContent":["export * from './python-harness';\nexport * from './python-harness-template';\nexport * from './generated/python-harness-snippets';\n","/**\n * AUTO-GENERATED FILE. DO NOT EDIT MANUALLY.\n *\n * Source: packages/harness-python/src/python-harness-template.ts\n * Generator: scripts/generate-python-harness-artifacts.ts\n */\n\n// @ts-nocheck\n\nexport function toPythonLiteral(value){if(value===null||value===void 0){return\"None\"}if(typeof value===\"boolean\"){return value?\"True\":\"False\"}if(typeof value===\"number\"){return String(value)}if(typeof value===\"string\"){return JSON.stringify(value)}if(Array.isArray(value)){return\"[\"+value.map(toPythonLiteral).join(\", \")+\"]\"}if(typeof value===\"object\"){const entries=Object.entries(value).map(([k,v])=>`${JSON.stringify(k)}: ${toPythonLiteral(v)}`).join(\", \");return\"{\"+entries+\"}\"}return JSON.stringify(value)}\n\nexport const PYTHON_CLASS_DEFINITIONS = \"\\nclass TreeNode:\\n def __init__(self, val=0, left=None, right=None):\\n self.val = val\\n self.value = val\\n self.left = left\\n self.right = right\\n def __getitem__(self, key):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\\n if key == 'left': return self.left\\n if key == 'right': return self.right\\n raise KeyError(key)\\n def get(self, key, default=None):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\\n if key == 'left': return self.left\\n if key == 'right': return self.right\\n return default\\n def __repr__(self):\\n return f\\\"TreeNode({getattr(self, 'val', getattr(self, 'value', None))})\\\"\\n\\nclass ListNode:\\n def __init__(self, val=0, next=None):\\n self.val = val\\n self.value = val\\n self.next = next\\n def __getitem__(self, key):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\\n if key == 'next': return self.next\\n raise KeyError(key)\\n def get(self, key, default=None):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\\n if key == 'next': return self.next\\n return default\\n def __repr__(self):\\n return f\\\"ListNode({getattr(self, 'val', getattr(self, 'value', None))})\\\"\\n\";\n\nexport const PYTHON_CONVERSION_HELPERS = \"\\ndef _ensure_node_value_aliases(node):\\n if node is None:\\n return node\\n try:\\n has_val = hasattr(node, 'val')\\n has_value = hasattr(node, 'value')\\n if has_value and not has_val:\\n try:\\n setattr(node, 'val', getattr(node, 'value'))\\n except Exception:\\n pass\\n elif has_val and not has_value:\\n try:\\n setattr(node, 'value', getattr(node, 'val'))\\n except Exception:\\n pass\\n except Exception:\\n pass\\n return node\\n\\ndef _dict_to_tree(d):\\n if d is None:\\n return None\\n if not isinstance(d, dict):\\n return d\\n if 'val' not in d and 'value' not in d:\\n return d\\n node = TreeNode(d.get('val', d.get('value', 0)))\\n _ensure_node_value_aliases(node)\\n node.left = _dict_to_tree(d.get('left'))\\n node.right = _dict_to_tree(d.get('right'))\\n return node\\n\\ndef _dict_to_list(d, _refs=None):\\n if _refs is None:\\n _refs = {}\\n if d is None:\\n return None\\n if not isinstance(d, dict):\\n return d\\n if '__ref__' in d:\\n return _refs.get(d.get('__ref__'))\\n if 'val' not in d and 'value' not in d:\\n return d\\n node = ListNode(d.get('val', d.get('value', 0)))\\n _ensure_node_value_aliases(node)\\n node_id = d.get('__id__')\\n if isinstance(node_id, str) and node_id:\\n _refs[node_id] = node\\n node.next = _dict_to_list(d.get('next'), _refs)\\n return node\\n\";\n\nexport const PYTHON_TRACE_SERIALIZE_FUNCTION = \"\\n# Sentinel to mark skipped values (functions, etc.) - distinct from None\\n_SKIP_SENTINEL = \\\"__TRACECODE_SKIP__\\\"\\n_MAX_SERIALIZE_DEPTH = 48\\n_MAX_OBJECT_FIELDS = 32\\n\\ndef _serialize(obj, depth=0, node_refs=None):\\n if node_refs is None:\\n node_refs = {}\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1, node_refs) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1, node_refs) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1, node_refs) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n # Use try/except for sorting to handle heterogeneous sets\\n try:\\n sorted_vals = sorted([_serialize(x, depth + 1, node_refs) for x in obj])\\n except TypeError:\\n sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted_vals}\\n elif isinstance(obj, TreeNode):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"tree-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n result = {\\n \\\"__type__\\\": \\\"TreeNode\\\",\\n \\\"__id__\\\": node_id,\\n \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\\n }\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1, node_refs)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1, node_refs)\\n return result\\n elif isinstance(obj, ListNode):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"list-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n result = {\\n \\\"__type__\\\": \\\"ListNode\\\",\\n \\\"__id__\\\": node_id,\\n \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\\n }\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1, node_refs)\\n return result\\n elif hasattr(obj, '__dict__'):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"object-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n class_name = getattr(getattr(obj, '__class__', None), '__name__', 'object')\\n result = {\\n \\\"__type__\\\": \\\"object\\\",\\n \\\"__class__\\\": class_name,\\n \\\"__id__\\\": node_id,\\n }\\n try:\\n raw_fields = getattr(obj, '__dict__', None)\\n except Exception:\\n raw_fields = None\\n if isinstance(raw_fields, dict):\\n added = 0\\n for key, value in raw_fields.items():\\n key_str = str(key)\\n if key_str.startswith('_'):\\n continue\\n if callable(value):\\n continue\\n result[key_str] = _serialize(value, depth + 1, node_refs)\\n added += 1\\n if added >= _MAX_OBJECT_FIELDS:\\n result[\\\"__truncated__\\\"] = True\\n break\\n return result\\n elif callable(obj):\\n # Skip functions entirely - return sentinel\\n return _SKIP_SENTINEL\\n else:\\n repr_str = repr(obj)\\n # Filter out function-like representations (e.g., <function foo at 0x...>)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return _SKIP_SENTINEL\\n return repr_str\\n\";\n\nexport const PYTHON_EXECUTE_SERIALIZE_FUNCTION = \"\\n_MAX_SERIALIZE_DEPTH = 48\\n\\ndef _serialize(obj, depth=0):\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif isinstance(obj, TreeNode):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif isinstance(obj, ListNode):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n elif callable(obj):\\n return None\\n else:\\n repr_str = repr(obj)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return None\\n return repr_str\\n\";\n\nexport const PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION = \"\\ndef _serialize(obj, depth=0, state=None):\\n if state is None:\\n state = {\\\"nodes\\\": 0, \\\"seen\\\": set()}\\n if depth > 64:\\n return \\\"__MAX_DEPTH__\\\"\\n if isinstance(obj, (int, float, str, bool, type(None))):\\n return obj\\n\\n state[\\\"nodes\\\"] += 1\\n if state[\\\"nodes\\\"] > 600:\\n return \\\"__MAX_NODES__\\\"\\n\\n if isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1, state) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1, state) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n serialized = [_serialize(x, depth + 1, state) for x in obj]\\n try:\\n serialized = sorted(serialized)\\n except TypeError:\\n pass\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": serialized}\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n obj_id = id(obj)\\n if obj_id in state[\\\"seen\\\"]:\\n return \\\"__CYCLE__\\\"\\n state[\\\"seen\\\"].add(obj_id)\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1, state)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1, state)\\n state[\\\"seen\\\"].remove(obj_id)\\n return result\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\\n obj_id = id(obj)\\n if obj_id in state[\\\"seen\\\"]:\\n return \\\"__CYCLE__\\\"\\n state[\\\"seen\\\"].add(obj_id)\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1, state)\\n state[\\\"seen\\\"].remove(obj_id)\\n return result\\n else:\\n return repr(obj)\\n\";\n\nexport const PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION = \"\\ndef _serialize(obj, depth=0):\\n if depth > 10:\\n return \\\"<max depth>\\\"\\n if isinstance(obj, (int, float, str, bool, type(None))):\\n return obj\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif isinstance(obj, TreeNode):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', None), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif isinstance(obj, ListNode):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', None), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n else:\\n return repr(obj)\\n\";\n\nexport const PYTHON_SERIALIZE_FUNCTION = \"\\n_MAX_SERIALIZE_DEPTH = 48\\n\\ndef _serialize(obj, depth=0):\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif isinstance(obj, TreeNode):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif isinstance(obj, ListNode):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n elif callable(obj):\\n return None\\n else:\\n repr_str = repr(obj)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return None\\n return repr_str\\n\";\n","/**\n * Python Harness Code\n *\n * Shared Python harness helpers for scripts and Node-side validation paths.\n *\n * Canonical source:\n * - packages/harness-python/src/python-harness-template.ts\n *\n * Generated artifacts (via scripts/generate-python-harness-artifacts.ts):\n * - packages/harness-python/src/generated/python-harness-snippets.ts (consumed here)\n * - workers/python/generated-python-harness-snippets.js\n *\n * Note: workers/python/pyodide-worker.js still contains runtime-specific embedded\n * harness code. Keep it aligned via:\n * pnpm test:python-harness-sync\n */\n\nimport {\n toPythonLiteral,\n PYTHON_CLASS_DEFINITIONS,\n PYTHON_CONVERSION_HELPERS,\n PYTHON_TRACE_SERIALIZE_FUNCTION,\n PYTHON_EXECUTE_SERIALIZE_FUNCTION,\n PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_SERIALIZE_FUNCTION,\n} from './generated/python-harness-snippets';\n\nexport {\n toPythonLiteral,\n PYTHON_CLASS_DEFINITIONS,\n PYTHON_CONVERSION_HELPERS,\n PYTHON_TRACE_SERIALIZE_FUNCTION,\n PYTHON_EXECUTE_SERIALIZE_FUNCTION,\n PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_SERIALIZE_FUNCTION,\n};\n\nexport function identifyConversions(inputs: Record<string, unknown>): {\n treeKeys: string[];\n listKeys: string[];\n} {\n const treeKeys: string[] = [];\n const listKeys: string[] = [];\n \n for (const [key, value] of Object.entries(inputs)) {\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n ('val' in (value as Record<string, unknown>) || 'value' in (value as Record<string, unknown>))\n ) {\n const obj = value as Record<string, unknown>;\n const hasLeft = 'left' in obj;\n const hasRight = 'right' in obj;\n const hasNext = 'next' in obj;\n \n if (hasLeft || hasRight) {\n treeKeys.push(key);\n } else if (hasNext) {\n listKeys.push(key);\n } else {\n // Default to tree for backwards compatibility (just 'val')\n treeKeys.push(key);\n }\n }\n }\n \n return { treeKeys, listKeys };\n}\n\n/**\n * Generate Python code for converting tree/list inputs.\n */\nexport function generateConversionCode(inputs: Record<string, unknown>): string {\n const { treeKeys, listKeys } = identifyConversions(inputs);\n \n const lines: string[] = [];\n \n for (const key of treeKeys) {\n lines.push(`${key} = _dict_to_tree(${key})`);\n }\n \n for (const key of listKeys) {\n lines.push(`${key} = _dict_to_list(${key})`);\n }\n \n return lines.join('\\n');\n}\n\n/**\n * Generate Python code for setting up inputs.\n */\nexport function generateInputSetup(inputs: Record<string, unknown>): string {\n return Object.entries(inputs)\n .map(([key, value]) => `${key} = ${toPythonLiteral(value)}`)\n .join('\\n');\n}\n\n/**\n * Generate a complete Python script for running a solution.\n * This is used by the validation script to run solutions via subprocess.\n */\nexport function generateSolutionScript(\n solutionCode: string,\n functionName: string,\n inputs: Record<string, unknown>\n): string {\n const inputSetup = generateInputSetup(inputs);\n const conversionCode = generateConversionCode(inputs);\n const paramList = Object.keys(inputs)\n .map((key) => `${key}=${key}`)\n .join(', ');\n \n return `\nimport json\nimport sys\n\n${PYTHON_CLASS_DEFINITIONS}\n\n${PYTHON_CONVERSION_HELPERS}\n\n${PYTHON_SERIALIZE_FUNCTION}\n\n# Solution code\n${solutionCode}\n\n# Set up inputs\n${inputSetup}\n\n# Convert tree/list inputs\n${conversionCode}\n\n# Run the function\ntry:\n _result = ${functionName}(${paramList})\n print(json.dumps({\"success\": True, \"output\": _serialize(_result)}))\nexcept Exception as e:\n print(json.dumps({\"success\": False, \"error\": f\"{type(e).__name__}: {str(e)}\"}))\n`;\n}\n","/**\n * Canonical Python Harness Template\n *\n * This file is the single source of truth for shared harness snippets.\n * Generated artifacts:\n * - packages/harness-python/src/generated/python-harness-snippets.ts\n * - workers/python/generated-python-harness-snippets.js\n */\n\n/**\n * Convert a JavaScript value to a Python literal string.\n * Handles null -> None, booleans -> True/False, and nested structures.\n */\nexport function templateToPythonLiteral(value: unknown): string {\n if (value === null || value === undefined) {\n return 'None';\n }\n if (typeof value === 'boolean') {\n return value ? 'True' : 'False';\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return '[' + value.map(templateToPythonLiteral).join(', ') + ']';\n }\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>)\n .map(([k, v]) => `${JSON.stringify(k)}: ${templateToPythonLiteral(v)}`)\n .join(', ');\n return '{' + entries + '}';\n }\n return JSON.stringify(value);\n}\n\n/**\n * Python class definitions for TreeNode and ListNode.\n * These must match the worker definitions.\n */\nexport const TEMPLATE_PYTHON_CLASS_DEFINITIONS = `\nclass TreeNode:\n def __init__(self, val=0, left=None, right=None):\n self.val = val\n self.value = val\n self.left = left\n self.right = right\n def __getitem__(self, key):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\n if key == 'left': return self.left\n if key == 'right': return self.right\n raise KeyError(key)\n def get(self, key, default=None):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\n if key == 'left': return self.left\n if key == 'right': return self.right\n return default\n def __repr__(self):\n return f\"TreeNode({getattr(self, 'val', getattr(self, 'value', None))})\"\n\nclass ListNode:\n def __init__(self, val=0, next=None):\n self.val = val\n self.value = val\n self.next = next\n def __getitem__(self, key):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\n if key == 'next': return self.next\n raise KeyError(key)\n def get(self, key, default=None):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\n if key == 'next': return self.next\n return default\n def __repr__(self):\n return f\"ListNode({getattr(self, 'val', getattr(self, 'value', None))})\"\n`;\n\n/**\n * Python helper functions for converting dicts to TreeNode/ListNode.\n */\nexport const TEMPLATE_PYTHON_CONVERSION_HELPERS = `\ndef _ensure_node_value_aliases(node):\n if node is None:\n return node\n try:\n has_val = hasattr(node, 'val')\n has_value = hasattr(node, 'value')\n if has_value and not has_val:\n try:\n setattr(node, 'val', getattr(node, 'value'))\n except Exception:\n pass\n elif has_val and not has_value:\n try:\n setattr(node, 'value', getattr(node, 'val'))\n except Exception:\n pass\n except Exception:\n pass\n return node\n\ndef _dict_to_tree(d):\n if d is None:\n return None\n if not isinstance(d, dict):\n return d\n if 'val' not in d and 'value' not in d:\n return d\n node = TreeNode(d.get('val', d.get('value', 0)))\n _ensure_node_value_aliases(node)\n node.left = _dict_to_tree(d.get('left'))\n node.right = _dict_to_tree(d.get('right'))\n return node\n\ndef _dict_to_list(d, _refs=None):\n if _refs is None:\n _refs = {}\n if d is None:\n return None\n if not isinstance(d, dict):\n return d\n if '__ref__' in d:\n return _refs.get(d.get('__ref__'))\n if 'val' not in d and 'value' not in d:\n return d\n node = ListNode(d.get('val', d.get('value', 0)))\n _ensure_node_value_aliases(node)\n node_id = d.get('__id__')\n if isinstance(node_id, str) and node_id:\n _refs[node_id] = node\n node.next = _dict_to_list(d.get('next'), _refs)\n return node\n`;\n\n/**\n * Trace-mode Python serialization function.\n * Includes function filtering and node reference tracking for cycle-safe traces.\n */\nexport const TEMPLATE_PYTHON_TRACE_SERIALIZE_FUNCTION = `\n# Sentinel to mark skipped values (functions, etc.) - distinct from None\n_SKIP_SENTINEL = \"__TRACECODE_SKIP__\"\n_MAX_SERIALIZE_DEPTH = 48\n_MAX_OBJECT_FIELDS = 32\n\ndef _serialize(obj, depth=0, node_refs=None):\n if node_refs is None:\n node_refs = {}\n if isinstance(obj, (bool, int, str, type(None))):\n return obj\n elif isinstance(obj, float):\n if not math.isfinite(obj):\n if math.isnan(obj):\n return \"NaN\"\n return \"Infinity\" if obj > 0 else \"-Infinity\"\n return obj\n if depth > _MAX_SERIALIZE_DEPTH:\n return \"<max depth>\"\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1, node_refs) for x in obj]\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\n return [_serialize(x, depth + 1, node_refs) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1, node_refs) for k, v in obj.items()}\n elif isinstance(obj, set):\n # Use try/except for sorting to handle heterogeneous sets\n try:\n sorted_vals = sorted([_serialize(x, depth + 1, node_refs) for x in obj])\n except TypeError:\n sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]\n return {\"__type__\": \"set\", \"values\": sorted_vals}\n elif isinstance(obj, TreeNode):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"tree-{obj_ref}\"\n node_refs[obj_ref] = node_id\n result = {\n \"__type__\": \"TreeNode\",\n \"__id__\": node_id,\n \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\n }\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1, node_refs)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1, node_refs)\n return result\n elif isinstance(obj, ListNode):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"list-{obj_ref}\"\n node_refs[obj_ref] = node_id\n result = {\n \"__type__\": \"ListNode\",\n \"__id__\": node_id,\n \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\n }\n result[\"next\"] = _serialize(obj.next, depth + 1, node_refs)\n return result\n elif hasattr(obj, '__dict__'):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"object-{obj_ref}\"\n node_refs[obj_ref] = node_id\n class_name = getattr(getattr(obj, '__class__', None), '__name__', 'object')\n result = {\n \"__type__\": \"object\",\n \"__class__\": class_name,\n \"__id__\": node_id,\n }\n try:\n raw_fields = getattr(obj, '__dict__', None)\n except Exception:\n raw_fields = None\n if isinstance(raw_fields, dict):\n added = 0\n for key, value in raw_fields.items():\n key_str = str(key)\n if key_str.startswith('_'):\n continue\n if callable(value):\n continue\n result[key_str] = _serialize(value, depth + 1, node_refs)\n added += 1\n if added >= _MAX_OBJECT_FIELDS:\n result[\"__truncated__\"] = True\n break\n return result\n elif callable(obj):\n # Skip functions entirely - return sentinel\n return _SKIP_SENTINEL\n else:\n repr_str = repr(obj)\n # Filter out function-like representations (e.g., <function foo at 0x...>)\n if repr_str.startswith('<') and repr_str.endswith('>'):\n return _SKIP_SENTINEL\n return repr_str\n`;\n\n/**\n * Execute-mode Python serialization function.\n * Preserves current execute/interview output semantics.\n */\nexport const TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION = `\n_MAX_SERIALIZE_DEPTH = 48\n\ndef _serialize(obj, depth=0):\n if isinstance(obj, (bool, int, str, type(None))):\n return obj\n elif isinstance(obj, float):\n if not math.isfinite(obj):\n if math.isnan(obj):\n return \"NaN\"\n return \"Infinity\" if obj > 0 else \"-Infinity\"\n return obj\n if depth > _MAX_SERIALIZE_DEPTH:\n return \"<max depth>\"\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1) for x in obj]\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\n return [_serialize(x, depth + 1) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\n elif isinstance(obj, set):\n try:\n return {\"__type__\": \"set\", \"values\": sorted([_serialize(x, depth + 1) for x in obj])}\n except TypeError:\n return {\"__type__\": \"set\", \"values\": [_serialize(x, depth + 1) for x in obj]}\n elif isinstance(obj, TreeNode):\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1)\n return result\n elif isinstance(obj, ListNode):\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\n result[\"next\"] = _serialize(obj.next, depth + 1)\n return result\n elif callable(obj):\n return None\n else:\n repr_str = repr(obj)\n if repr_str.startswith('<') and repr_str.endswith('>'):\n return None\n return repr_str\n`;\n\n/**\n * Practice materialization serializer with strict safety limits and markers.\n */\nexport const TEMPLATE_PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION = `\ndef _serialize(obj, depth=0, state=None):\n if state is None:\n state = {\"nodes\": 0, \"seen\": set()}\n if depth > 64:\n return \"__MAX_DEPTH__\"\n if isinstance(obj, (int, float, str, bool, type(None))):\n return obj\n\n state[\"nodes\"] += 1\n if state[\"nodes\"] > 600:\n return \"__MAX_NODES__\"\n\n if isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1, state) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1, state) for k, v in obj.items()}\n elif isinstance(obj, set):\n serialized = [_serialize(x, depth + 1, state) for x in obj]\n try:\n serialized = sorted(serialized)\n except TypeError:\n pass\n return {\"__type__\": \"set\", \"values\": serialized}\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\n obj_id = id(obj)\n if obj_id in state[\"seen\"]:\n return \"__CYCLE__\"\n state[\"seen\"].add(obj_id)\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1, state)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1, state)\n state[\"seen\"].remove(obj_id)\n return result\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\n obj_id = id(obj)\n if obj_id in state[\"seen\"]:\n return \"__CYCLE__\"\n state[\"seen\"].add(obj_id)\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\n result[\"next\"] = _serialize(obj.next, depth + 1, state)\n state[\"seen\"].remove(obj_id)\n return result\n else:\n return repr(obj)\n`;\n\n/**\n * Interview materialization serializer, preserving current legacy behavior.\n */\nexport const TEMPLATE_PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION = `\ndef _serialize(obj, depth=0):\n if depth > 10:\n return \"<max depth>\"\n if isinstance(obj, (int, float, str, bool, type(None))):\n return obj\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\n elif isinstance(obj, set):\n try:\n return {\"__type__\": \"set\", \"values\": sorted([_serialize(x, depth + 1) for x in obj])}\n except TypeError:\n return {\"__type__\": \"set\", \"values\": [_serialize(x, depth + 1) for x in obj]}\n elif isinstance(obj, TreeNode):\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', None), depth + 1)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1)\n return result\n elif isinstance(obj, ListNode):\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', None), depth + 1)}\n result[\"next\"] = _serialize(obj.next, depth + 1)\n return result\n else:\n return repr(obj)\n`;\n\n/**\n * Backwards-compatible alias. Use TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION\n * for new callsites.\n */\nexport const TEMPLATE_PYTHON_SERIALIZE_FUNCTION = TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION;\n"],"mappings":"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","names":[]}
|