tjs-lang 0.6.37 → 0.6.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +107 -106
- package/dist/index.js.map +4 -4
- package/dist/tjs-full.js +107 -106
- package/dist/tjs-full.js.map +4 -4
- package/dist/tjs-vm.js +46 -45
- package/dist/tjs-vm.js.map +3 -3
- package/package.json +1 -1
- package/src/cli/tjs.ts +1 -1
- package/src/lang/emitters/from-ts.ts +14 -2
- package/src/lang/parser-params.ts +29 -1
- package/src/use-cases/tosijs-convert-issues.test.ts +67 -3
package/dist/tjs-full.js.map
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"function assertPath(path){if(typeof path!==\"string\")throw TypeError(\"Path must be a string. Received \"+JSON.stringify(path))}function normalizeStringPosix(path,allowAboveRoot){var res=\"\",lastSegmentLength=0,lastSlash=-1,dots=0,code;for(var i=0;i<=path.length;++i){if(i<path.length)code=path.charCodeAt(i);else if(code===47)break;else code=47;if(code===47){if(lastSlash===i-1||dots===1);else if(lastSlash!==i-1&&dots===2){if(res.length<2||lastSegmentLength!==2||res.charCodeAt(res.length-1)!==46||res.charCodeAt(res.length-2)!==46){if(res.length>2){var lastSlashIndex=res.lastIndexOf(\"/\");if(lastSlashIndex!==res.length-1){if(lastSlashIndex===-1)res=\"\",lastSegmentLength=0;else res=res.slice(0,lastSlashIndex),lastSegmentLength=res.length-1-res.lastIndexOf(\"/\");lastSlash=i,dots=0;continue}}else if(res.length===2||res.length===1){res=\"\",lastSegmentLength=0,lastSlash=i,dots=0;continue}}if(allowAboveRoot){if(res.length>0)res+=\"/..\";else res=\"..\";lastSegmentLength=2}}else{if(res.length>0)res+=\"/\"+path.slice(lastSlash+1,i);else res=path.slice(lastSlash+1,i);lastSegmentLength=i-lastSlash-1}lastSlash=i,dots=0}else if(code===46&&dots!==-1)++dots;else dots=-1}return res}function _format(sep,pathObject){var dir=pathObject.dir||pathObject.root,base=pathObject.base||(pathObject.name||\"\")+(pathObject.ext||\"\");if(!dir)return base;if(dir===pathObject.root)return dir+base;return dir+sep+base}function resolve(){var resolvedPath=\"\",resolvedAbsolute=!1,cwd;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path;if(i>=0)path=arguments[i];else{if(cwd===void 0)cwd=process.cwd();path=cwd}if(assertPath(path),path.length===0)continue;resolvedPath=path+\"/\"+resolvedPath,resolvedAbsolute=path.charCodeAt(0)===47}if(resolvedPath=normalizeStringPosix(resolvedPath,!resolvedAbsolute),resolvedAbsolute)if(resolvedPath.length>0)return\"/\"+resolvedPath;else return\"/\";else if(resolvedPath.length>0)return resolvedPath;else return\".\"}function normalize(path){if(assertPath(path),path.length===0)return\".\";var isAbsolute=path.charCodeAt(0)===47,trailingSeparator=path.charCodeAt(path.length-1)===47;if(path=normalizeStringPosix(path,!isAbsolute),path.length===0&&!isAbsolute)path=\".\";if(path.length>0&&trailingSeparator)path+=\"/\";if(isAbsolute)return\"/\"+path;return path}function isAbsolute(path){return assertPath(path),path.length>0&&path.charCodeAt(0)===47}function join(){if(arguments.length===0)return\".\";var joined;for(var i=0;i<arguments.length;++i){var arg=arguments[i];if(assertPath(arg),arg.length>0)if(joined===void 0)joined=arg;else joined+=\"/\"+arg}if(joined===void 0)return\".\";return normalize(joined)}function relative(from,to){if(assertPath(from),assertPath(to),from===to)return\"\";if(from=resolve(from),to=resolve(to),from===to)return\"\";var fromStart=1;for(;fromStart<from.length;++fromStart)if(from.charCodeAt(fromStart)!==47)break;var fromEnd=from.length,fromLen=fromEnd-fromStart,toStart=1;for(;toStart<to.length;++toStart)if(to.charCodeAt(toStart)!==47)break;var toEnd=to.length,toLen=toEnd-toStart,length=fromLen<toLen?fromLen:toLen,lastCommonSep=-1,i=0;for(;i<=length;++i){if(i===length){if(toLen>length){if(to.charCodeAt(toStart+i)===47)return to.slice(toStart+i+1);else if(i===0)return to.slice(toStart+i)}else if(fromLen>length){if(from.charCodeAt(fromStart+i)===47)lastCommonSep=i;else if(i===0)lastCommonSep=0}break}var fromCode=from.charCodeAt(fromStart+i),toCode=to.charCodeAt(toStart+i);if(fromCode!==toCode)break;else if(fromCode===47)lastCommonSep=i}var out=\"\";for(i=fromStart+lastCommonSep+1;i<=fromEnd;++i)if(i===fromEnd||from.charCodeAt(i)===47)if(out.length===0)out+=\"..\";else out+=\"/..\";if(out.length>0)return out+to.slice(toStart+lastCommonSep);else{if(toStart+=lastCommonSep,to.charCodeAt(toStart)===47)++toStart;return to.slice(toStart)}}function _makeLong(path){return path}function dirname(path){if(assertPath(path),path.length===0)return\".\";var code=path.charCodeAt(0),hasRoot=code===47,end=-1,matchedSlash=!0;for(var i=path.length-1;i>=1;--i)if(code=path.charCodeAt(i),code===47){if(!matchedSlash){end=i;break}}else matchedSlash=!1;if(end===-1)return hasRoot?\"/\":\".\";if(hasRoot&&end===1)return\"//\";return path.slice(0,end)}function basename(path,ext){if(ext!==void 0&&typeof ext!==\"string\")throw TypeError('\"ext\" argument must be a string');assertPath(path);var start=0,end=-1,matchedSlash=!0,i;if(ext!==void 0&&ext.length>0&&ext.length<=path.length){if(ext.length===path.length&&ext===path)return\"\";var extIdx=ext.length-1,firstNonSlashEnd=-1;for(i=path.length-1;i>=0;--i){var code=path.charCodeAt(i);if(code===47){if(!matchedSlash){start=i+1;break}}else{if(firstNonSlashEnd===-1)matchedSlash=!1,firstNonSlashEnd=i+1;if(extIdx>=0)if(code===ext.charCodeAt(extIdx)){if(--extIdx===-1)end=i}else extIdx=-1,end=firstNonSlashEnd}}if(start===end)end=firstNonSlashEnd;else if(end===-1)end=path.length;return path.slice(start,end)}else{for(i=path.length-1;i>=0;--i)if(path.charCodeAt(i)===47){if(!matchedSlash){start=i+1;break}}else if(end===-1)matchedSlash=!1,end=i+1;if(end===-1)return\"\";return path.slice(start,end)}}function extname(path){assertPath(path);var startDot=-1,startPart=0,end=-1,matchedSlash=!0,preDotState=0;for(var i=path.length-1;i>=0;--i){var code=path.charCodeAt(i);if(code===47){if(!matchedSlash){startPart=i+1;break}continue}if(end===-1)matchedSlash=!1,end=i+1;if(code===46){if(startDot===-1)startDot=i;else if(preDotState!==1)preDotState=1}else if(startDot!==-1)preDotState=-1}if(startDot===-1||end===-1||preDotState===0||preDotState===1&&startDot===end-1&&startDot===startPart+1)return\"\";return path.slice(startDot,end)}function format(pathObject){if(pathObject===null||typeof pathObject!==\"object\")throw TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof pathObject);return _format(\"/\",pathObject)}function parse(path){assertPath(path);var ret={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(path.length===0)return ret;var code=path.charCodeAt(0),isAbsolute2=code===47,start;if(isAbsolute2)ret.root=\"/\",start=1;else start=0;var startDot=-1,startPart=0,end=-1,matchedSlash=!0,i=path.length-1,preDotState=0;for(;i>=start;--i){if(code=path.charCodeAt(i),code===47){if(!matchedSlash){startPart=i+1;break}continue}if(end===-1)matchedSlash=!1,end=i+1;if(code===46){if(startDot===-1)startDot=i;else if(preDotState!==1)preDotState=1}else if(startDot!==-1)preDotState=-1}if(startDot===-1||end===-1||preDotState===0||preDotState===1&&startDot===end-1&&startDot===startPart+1){if(end!==-1)if(startPart===0&&isAbsolute2)ret.base=ret.name=path.slice(1,end);else ret.base=ret.name=path.slice(startPart,end)}else{if(startPart===0&&isAbsolute2)ret.name=path.slice(1,startDot),ret.base=path.slice(1,end);else ret.name=path.slice(startPart,startDot),ret.base=path.slice(startPart,end);ret.ext=path.slice(startDot,end)}if(startPart>0)ret.dir=path.slice(0,startPart-1);else if(isAbsolute2)ret.dir=\"/\";return ret}var sep=\"/\",delimiter=\":\",posix=((p)=>(p.posix=p,p))({resolve,normalize,isAbsolute,join,relative,_makeLong,dirname,basename,extname,format,parse,sep,delimiter,win32:null,posix:null});var path_default=posix;export{sep,resolve,relative,posix,parse,normalize,join,isAbsolute,format,extname,dirname,delimiter,path_default as default,basename,_makeLong};",
|
|
6
6
|
"/**\n * TJS Parser — Orchestration Layer\n *\n * This module contains the main entry points: preprocess() and parse().\n * Transform functions are in parser-transforms.ts, param processing in parser-params.ts.\n */\n\nimport * as acorn from 'acorn'\nimport type { Program, FunctionDeclaration } from 'acorn'\nimport { SyntaxError } from './types'\n\n// Re-export types so external callers don't need to change imports\nexport type {\n ParseOptions,\n WasmBlock,\n TestBlock,\n PreprocessOptions,\n TjsModes,\n} from './parser-types'\n\nimport type {\n ParseOptions,\n WasmBlock,\n TestBlock,\n PreprocessOptions,\n TjsModes,\n} from './parser-types'\n\nimport { transformParenExpressions } from './parser-params'\n\nimport {\n transformTryWithoutCatch,\n extractWasmBlocks,\n transformIsOperators,\n insertAsiProtection,\n transformEqualityToStructural,\n transformTypeDeclarations,\n transformGenericDeclarations,\n transformFunctionPredicateDeclarations,\n transformUnionDeclarations,\n transformEnumDeclarations,\n transformExtendDeclarations,\n transformPolymorphicFunctions,\n transformPolymorphicConstructors,\n wrapClassDeclarations,\n transformBareAssignments,\n extractAndRunTests,\n validateNoDate,\n validateNoEval,\n validateNoVar,\n transformConstBang,\n transformExtensionCalls,\n} from './parser-transforms'\n\n// Re-export transformExtensionCalls for js.ts\nexport { transformExtensionCalls } from './parser-transforms'\n\nexport function preprocess(\n source: string,\n options: PreprocessOptions = {}\n): {\n source: string\n returnType?: string\n returnSafety?: 'safe' | 'unsafe'\n moduleSafety?: 'none' | 'inputs' | 'all'\n tjsModes: TjsModes\n originalSource: string\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n wasmBlocks: WasmBlock[]\n tests: TestBlock[]\n testErrors: string[]\n polymorphicNames: Set<string>\n extensions: Map<string, Set<string>>\n} {\n const originalSource = source\n let moduleSafety: 'none' | 'inputs' | 'all' | undefined\n const requiredParams = new Set<string>()\n const unsafeFunctions = new Set<string>()\n const safeFunctions = new Set<string>()\n\n // TJS modes - all default to false (JS-compatible by default)\n const tjsModes: TjsModes = {\n tjsEquals: false,\n tjsClass: false,\n tjsDate: false,\n tjsNoeval: false,\n tjsStandard: false,\n tjsSafeEval: false,\n tjsNoVar: false,\n }\n\n // Handle module-level safety directive: safety none | safety inputs | safety all\n // Must be at the start of the file (possibly after comments/whitespace)\n const safetyMatch = source.match(\n /^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*safety\\s+(none|inputs|all)\\b/\n )\n if (safetyMatch) {\n moduleSafety = safetyMatch[2] as 'none' | 'inputs' | 'all'\n // Remove the directive from source\n source = source.replace(\n /^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*safety\\s+(none|inputs|all)\\s*/,\n '$1'\n )\n }\n\n // Handle TJS mode directives (can appear in any order after safety)\n // TjsStrict enables all TJS modes\n // Individual modes: TjsEquals, TjsClass, TjsDate, TjsNoeval, TjsStandard, TjsSafeEval\n const directivePattern =\n /^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*(TjsStrict|TjsEquals|TjsClass|TjsDate|TjsNoeval|TjsNoVar|TjsStandard|TjsSafeEval)\\b/\n\n let match\n while ((match = source.match(directivePattern))) {\n const directive = match[2]\n\n if (directive === 'TjsStrict') {\n // Enable all TJS modes\n tjsModes.tjsEquals = true\n tjsModes.tjsClass = true\n tjsModes.tjsDate = true\n tjsModes.tjsNoeval = true\n tjsModes.tjsNoVar = true\n tjsModes.tjsStandard = true\n } else if (directive === 'TjsEquals') {\n tjsModes.tjsEquals = true\n } else if (directive === 'TjsClass') {\n tjsModes.tjsClass = true\n } else if (directive === 'TjsDate') {\n tjsModes.tjsDate = true\n } else if (directive === 'TjsNoeval') {\n tjsModes.tjsNoeval = true\n } else if (directive === 'TjsNoVar') {\n tjsModes.tjsNoVar = true\n } else if (directive === 'TjsStandard') {\n tjsModes.tjsStandard = true\n } else if (directive === 'TjsSafeEval') {\n tjsModes.tjsSafeEval = true\n }\n\n // Remove the directive from source\n source = source.replace(\n new RegExp(\n `^(\\\\s*(?:\\\\/\\\\/[^\\\\n]*\\\\n|\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\/\\\\s*)*)\\\\s*${directive}\\\\s*`\n ),\n '$1'\n )\n }\n\n // TjsStandard mode: insert semicolons to prevent ASI footguns\n // Must happen early before other transformations modify line structure\n if (tjsModes.tjsStandard) {\n source = insertAsiProtection(source)\n }\n\n // Transform const! declarations — validate immutability and emit as const\n // Must happen before acorn parsing since const! is not valid JS\n source = transformConstBang(source)\n\n // Transform Is/IsNot infix operators to function calls\n // a Is b -> Is(a, b)\n // a IsNot b -> IsNot(a, b)\n // These are always available for explicit structural equality\n source = transformIsOperators(source)\n\n // Transform == and != to structural equality (Is/IsNot)\n // Only when TjsEquals mode is enabled and not for VM targets\n // VM targets already handle == correctly at runtime\n if (tjsModes.tjsEquals && !options.vmTarget) {\n source = transformEqualityToStructural(source)\n }\n\n // Transform Type, Generic, Union, and Enum declarations\n // Type Foo { ... } -> const Foo = Type(...)\n // Generic Bar<T, U> { ... } -> const Bar = Generic(...)\n // Union Dir 'up' | 'down' -> const Dir = Union(...)\n // Enum Status { Pending, Active, Done } -> const Status = Enum(...)\n source = transformTypeDeclarations(source)\n source = transformGenericDeclarations(source)\n source = transformFunctionPredicateDeclarations(source)\n source = transformUnionDeclarations(source)\n source = transformEnumDeclarations(source)\n\n // Transform bare assignments to const declarations\n // Foo = ... -> const Foo = ...\n source = transformBareAssignments(source)\n\n // Unified paren expression transformer\n // Handles: function params, arrow params, return types, safe/unsafe markers\n // Model: open paren can be ( or (? or (!, close can be ) or )-> or )-? or )-!\n const {\n source: transformedSource,\n returnType,\n returnSafety,\n } = transformParenExpressions(source, {\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n })\n source = transformedSource\n\n // NOTE: unsafe {} blocks removed - they provided no performance benefit because\n // the wrapper decision is made at transpile time. Use (!) on functions instead.\n // See ideas parking lot for potential future approaches.\n\n // Transform extend blocks: extend TypeName { methods } -> __ext_TypeName object\n // Must happen after paren expressions so method params are already transformed\n const extResult = transformExtendDeclarations(source)\n source = extResult.source\n\n // Handle try-without-catch: try { ... } (no catch/finally) -> monadic error handling\n // This is the idiomatic TJS way to convert exceptions to AgentError\n source = transformTryWithoutCatch(source)\n\n // Transform polymorphic functions: multiple declarations with same name -> dispatcher\n // Must happen after param transformation but before class wrapping and test extraction\n const polyResult = transformPolymorphicFunctions(source, requiredParams)\n source = polyResult.source\n\n // Extract WASM blocks: wasm(args) { ... } fallback { ... }\n const wasmBlocks = extractWasmBlocks(source)\n source = wasmBlocks.source\n\n // Extract and run test blocks: test 'desc'? { body }\n // Tests run at transpile time and are stripped from output\n const testResult = extractAndRunTests(source, options.dangerouslySkipTests)\n source = testResult.source\n\n // Transform polymorphic constructors: multiple constructor() -> factory functions\n // Must happen before wrapClassDeclarations (which needs to know about poly ctors)\n const polyCtorResult = transformPolymorphicConstructors(\n source,\n requiredParams\n )\n source = polyCtorResult.source\n\n // Mark $dispatch functions as unsafe (internal Proxy trap params, not user-facing)\n for (const cls of polyCtorResult.polyCtorClasses) {\n unsafeFunctions.add(`${cls}$dispatch`)\n }\n\n // Wrap class declarations to make them callable without `new`\n // Only when TjsClass mode is enabled\n // class Foo { } -> let Foo = class Foo { }; Foo = globalThis.__tjs?.wrapClass?.(Foo) ?? Foo;\n if (tjsModes.tjsClass) {\n source = wrapClassDeclarations(source, polyCtorResult.polyCtorClasses)\n }\n\n // Validate TjsDate mode - check for Date usage\n if (tjsModes.tjsDate) {\n source = validateNoDate(source)\n }\n\n // Validate TjsNoeval mode - check for eval/Function usage\n if (tjsModes.tjsNoeval) {\n source = validateNoEval(source)\n }\n\n // Validate TjsNoVar mode - check for var declarations\n if (tjsModes.tjsNoVar) {\n source = validateNoVar(source)\n }\n\n // Rewrite extension method calls on known-type receivers\n // Must happen after all other transforms so literals are in final form\n source = transformExtensionCalls(source, extResult.extensions)\n\n return {\n source,\n returnType,\n returnSafety,\n moduleSafety,\n tjsModes,\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n wasmBlocks: wasmBlocks.blocks,\n tests: testResult.tests,\n testErrors: testResult.errors,\n polymorphicNames: polyResult.polymorphicNames,\n extensions: extResult.extensions,\n }\n}\n\n/**\n * Parse source code into an Acorn AST\n */\nexport function parse(\n source: string,\n options: ParseOptions = {}\n): {\n ast: Program\n returnType?: string\n returnSafety?: 'safe' | 'unsafe'\n moduleSafety?: 'none' | 'inputs' | 'all'\n originalSource: string\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n wasmBlocks: WasmBlock[]\n tests: TestBlock[]\n testErrors: string[]\n} {\n const {\n filename = '<source>',\n colonShorthand = true,\n vmTarget = false,\n } = options\n\n // Preprocess for custom syntax\n const {\n source: processedSource,\n returnType,\n returnSafety,\n moduleSafety,\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n wasmBlocks,\n tests,\n testErrors,\n } = colonShorthand\n ? preprocess(source, { vmTarget })\n : {\n source,\n returnType: undefined,\n returnSafety: undefined,\n moduleSafety: undefined,\n originalSource: source,\n requiredParams: new Set<string>(),\n unsafeFunctions: new Set<string>(),\n safeFunctions: new Set<string>(),\n wasmBlocks: [] as WasmBlock[],\n tests: [] as TestBlock[],\n testErrors: [] as string[],\n }\n\n try {\n const ast = acorn.parse(processedSource, {\n ecmaVersion: 2022,\n sourceType: 'module',\n locations: true,\n allowReturnOutsideFunction: false,\n })\n\n return {\n ast,\n returnType,\n returnSafety,\n moduleSafety,\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n wasmBlocks,\n tests,\n testErrors,\n }\n } catch (e: any) {\n // Convert Acorn error to our error type\n const loc = e.loc || { line: 1, column: 0 }\n throw new SyntaxError(\n e.message.replace(/\\s*\\(\\d+:\\d+\\)$/, ''), // Remove acorn's location suffix\n loc,\n originalSource,\n filename\n )\n }\n}\n\n/**\n * Validate that the source contains exactly one function declaration\n */\nexport function validateSingleFunction(\n ast: Program,\n filename?: string\n): FunctionDeclaration {\n // Check for unsupported top-level constructs FIRST\n // This gives better error messages for things like classes\n for (const node of ast.body) {\n if (node.type === 'ImportDeclaration') {\n throw new SyntaxError(\n 'Imports are not supported. All atoms must be registered with the VM.',\n node.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n if (\n node.type === 'ExportNamedDeclaration' ||\n node.type === 'ExportDefaultDeclaration'\n ) {\n throw new SyntaxError(\n 'Exports are not supported. The function is automatically exported.',\n node.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n if (node.type === 'ClassDeclaration') {\n throw new SyntaxError(\n 'Classes are not supported. Agent99 uses functional composition.',\n node.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n }\n\n const functions = ast.body.filter(\n (node): node is FunctionDeclaration => node.type === 'FunctionDeclaration'\n )\n\n if (functions.length === 0) {\n throw new SyntaxError(\n 'Source must contain a function declaration',\n { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n if (functions.length > 1) {\n const second = functions[1]\n throw new SyntaxError(\n 'Only a single function per agent is allowed',\n second.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n return functions[0]\n}\n\n/**\n * Extract TDoc comment from before a function\n *\n * TJS doc comments use /\\*# ... \\*\\/ syntax and preserve full markdown content.\n * Legacy JSDoc (/\\*\\* ... \\*\\/) is supported as a fallback.\n */\nexport function extractTDoc(\n source: string,\n func: FunctionDeclaration\n): {\n description?: string\n params: Record<string, string>\n} {\n const result: { description?: string; params: Record<string, string> } = {\n params: {},\n }\n\n if (!func.loc) return result\n\n const beforeFunc = source.substring(0, func.start)\n\n // First, check for TJS doc comment: /*# ... */\n // This preserves full markdown content\n // Find the LAST /*# ... */ block and verify it immediately precedes the function\n // (only whitespace and line comments allowed between)\n const allDocBlocks = [...beforeFunc.matchAll(/\\/\\*#([\\s\\S]*?)\\*\\//g)]\n if (allDocBlocks.length > 0) {\n const lastBlock = allDocBlocks[allDocBlocks.length - 1]\n const afterBlock = beforeFunc.substring(\n lastBlock.index! + lastBlock[0].length\n )\n\n // Only attach if nothing but whitespace and line comments between doc and function\n if (/^(?:\\s|\\/\\/[^\\n]*)*$/.test(afterBlock)) {\n // Extract content, trim leading/trailing whitespace, preserve internal formatting\n let content = lastBlock[1]\n\n // Remove common leading whitespace (like dedent)\n const lines = content.split('\\n')\n // Find minimum indentation (ignoring empty lines)\n const minIndent = lines\n .filter((line) => line.trim().length > 0)\n .reduce((min, line) => {\n const indent = line.match(/^(\\s*)/)?.[1].length || 0\n return Math.min(min, indent)\n }, Infinity)\n\n // Remove that indentation from all lines\n if (minIndent > 0 && minIndent < Infinity) {\n content = lines.map((line) => line.slice(minIndent)).join('\\n')\n }\n\n result.description = content.trim()\n return result\n }\n }\n\n // Fall back to JSDoc: /** ... */\n const jsdocMatch = beforeFunc.match(/\\/\\*\\*[\\s\\S]*?\\*\\/\\s*$/)\n if (!jsdocMatch) return result\n\n const jsdoc = jsdocMatch[0]\n\n // Extract description (first non-tag content)\n const descMatch = jsdoc.match(/\\/\\*\\*\\s*\\n?\\s*\\*?\\s*([^@\\n][^\\n]*)/m)\n if (descMatch) {\n result.description = descMatch[1].trim()\n }\n\n // Extract @param tags\n const paramRegex = /@param\\s+(?:\\{[^}]+\\}\\s+)?(\\w+)\\s*-?\\s*(.*)/g\n let match\n while ((match = paramRegex.exec(jsdoc)) !== null) {\n result.params[match[1]] = match[2].trim()\n }\n\n return result\n}\n",
|
|
7
7
|
"/**\n * Type definitions for the Agent99 JavaScript transpiler\n */\n\nimport type { Node } from 'acorn'\nimport type { SeqNode } from '../builder'\n\n// ============================================================================\n// Type System Types\n// ============================================================================\n\n/** Represents a type extracted from value patterns */\nexport interface TypeDescriptor {\n kind:\n | 'string'\n | 'number'\n | 'integer'\n | 'non-negative-integer'\n | 'boolean'\n | 'null'\n | 'undefined'\n | 'array'\n | 'object'\n | 'union'\n | 'any'\n nullable?: boolean\n /** For arrays: the element type */\n items?: TypeDescriptor\n /** For objects: the shape */\n shape?: Record<string, TypeDescriptor>\n /** For unions: the member types */\n members?: TypeDescriptor[]\n /** For destructured parameters: full parameter descriptors */\n destructuredParams?: Record<string, ParameterDescriptor>\n}\n\n/** Describes a function parameter */\nexport interface ParameterDescriptor {\n name: string\n type: TypeDescriptor\n required: boolean\n default?: any\n /** The example value used to infer the type (for autocomplete) */\n example?: any\n description?: string\n /** Source location for error reporting */\n loc?: { start: number; end: number }\n}\n\n/** Describes a function's complete signature */\nexport interface FunctionSignature {\n name: string\n description?: string\n parameters: Record<string, ParameterDescriptor>\n returns?: TypeDescriptor\n}\n\n// ============================================================================\n// Transpiler Options and Results\n// ============================================================================\n\n/** Options for the transpile function */\nexport interface TranspileOptions {\n /** Include source locations in output AST */\n sourceMaps?: boolean\n /** Atom registry for validation (optional) */\n atoms?: Record<string, { op: string }>\n /** Filename for error messages */\n filename?: string\n /** Whether to use strict type checking */\n strict?: boolean\n}\n\n/** Result of transpilation */\nexport interface TranspileResult {\n /** The Agent99 AST */\n ast: SeqNode\n /** The function signature with types */\n signature: FunctionSignature\n /** Source map (if enabled) */\n sourceMap?: SourceMap\n /** Warnings (non-fatal issues) */\n warnings: TranspileWarning[]\n}\n\n/** A non-fatal warning during transpilation */\nexport interface TranspileWarning {\n message: string\n line: number\n column: number\n source?: string\n}\n\n/** Source map for debugging */\nexport interface SourceMap {\n version: 3\n file: string\n sources: string[]\n mappings: string\n}\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\n/** Base class for transpiler errors with source location */\nexport class TranspileError extends Error {\n line: number\n column: number\n source?: string\n filename?: string\n\n constructor(\n message: string,\n location: { line: number; column: number },\n source?: string,\n filename?: string\n ) {\n const loc = `${filename || '<source>'}:${location.line}:${location.column}`\n super(`${message} at ${loc}`)\n this.name = 'TranspileError'\n this.line = location.line\n this.column = location.column\n this.source = source\n this.filename = filename\n }\n}\n\n/** Syntax error during parsing */\nexport class SyntaxError extends TranspileError {\n constructor(\n message: string,\n location: { line: number; column: number },\n source?: string,\n filename?: string\n ) {\n super(message, location, source, filename)\n this.name = 'SyntaxError'\n }\n\n /**\n * Format the error with source context for better debugging\n * Shows the problematic line with a caret pointing to the error location\n */\n formatWithContext(contextLines = 2): string {\n if (!this.source) return this.message\n\n const lines = this.source.split('\\n')\n const errorLine = this.line - 1 // 0-indexed\n const startLine = Math.max(0, errorLine - contextLines)\n const endLine = Math.min(lines.length - 1, errorLine + contextLines)\n\n const output: string[] = []\n const lineNumWidth = String(endLine + 1).length\n\n // Add context before\n for (let i = startLine; i <= endLine; i++) {\n const lineNum = String(i + 1).padStart(lineNumWidth)\n const marker = i === errorLine ? '>' : ' '\n output.push(`${marker} ${lineNum} | ${lines[i]}`)\n\n // Add caret pointing to error column\n if (i === errorLine) {\n const caretPadding = ' '.repeat(lineNumWidth + 4 + this.column)\n output.push(`${caretPadding}^ ${this.message.split(' at ')[0]}`)\n }\n }\n\n return output.join('\\n')\n }\n}\n\n/** Type error during transpilation or runtime */\nexport class TypeError extends TranspileError {\n expected?: string\n received?: string\n suggestion?: string\n\n constructor(\n message: string,\n location: { line: number; column: number },\n options?: {\n expected?: string\n received?: string\n suggestion?: string\n source?: string\n filename?: string\n }\n ) {\n super(message, location, options?.source, options?.filename)\n this.name = 'TypeError'\n this.expected = options?.expected\n this.received = options?.received\n this.suggestion = options?.suggestion\n }\n}\n\n// ============================================================================\n// Transform Context\n// ============================================================================\n\n/** Context passed through the transformer */\nexport interface TransformContext {\n /** Current scope depth */\n depth: number\n /** Variables declared in current scope with their types */\n locals: Map<string, TypeDescriptor>\n /** Parent scope's context (for scope chain) */\n parent?: TransformContext\n /** Function parameters */\n parameters: Map<string, ParameterDescriptor>\n /** Registered atom names */\n atoms: Set<string>\n /** Accumulated warnings */\n warnings: TranspileWarning[]\n /** Source code for error messages */\n source: string\n /** Filename */\n filename: string\n /** Options */\n options: TranspileOptions\n}\n\n/** Create a child context for nested scopes */\nexport function createChildContext(parent: TransformContext): TransformContext {\n return {\n depth: parent.depth + 1,\n locals: new Map(),\n parent,\n parameters: parent.parameters,\n atoms: parent.atoms,\n warnings: parent.warnings,\n source: parent.source,\n filename: parent.filename,\n options: parent.options,\n }\n}\n\n/** Look up a variable in the scope chain */\nexport function lookupVariable(\n name: string,\n ctx: TransformContext\n): TypeDescriptor | undefined {\n // Check locals first\n if (ctx.locals.has(name)) {\n return ctx.locals.get(name)\n }\n // Check parameters\n if (ctx.parameters.has(name)) {\n return ctx.parameters.get(name)?.type\n }\n // Check parent scope\n if (ctx.parent) {\n return lookupVariable(name, ctx.parent)\n }\n return undefined\n}\n\n// ============================================================================\n// AST Node Helpers\n// ============================================================================\n\n/** Extract location from an Acorn node */\nexport function getLocation(node: Node): { line: number; column: number } {\n if (node.loc) {\n return { line: node.loc.start.line, column: node.loc.start.column }\n }\n return { line: 1, column: 0 }\n}\n",
|
|
8
|
-
"/**\n * Parser parameter and annotation processing\n *\n * Handles the unified paren expression transformer that converts TJS syntax\n * (colon defaults, return type annotations, safe/unsafe markers) into valid JS.\n */\n\nimport { SyntaxError } from './types'\nimport type {\n TokenizerState,\n StructuralContext,\n ContextFrame,\n TjsModes,\n} from './parser-types'\n\nexport function transformParenExpressions(\n source: string,\n ctx: {\n originalSource: string\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n }\n): {\n source: string\n returnType?: string\n returnSafety?: 'safe' | 'unsafe'\n} {\n let result = ''\n let i = 0\n let firstReturnType: string | undefined\n let firstReturnSafety: 'safe' | 'unsafe' | undefined\n\n // State machine for tokenizing\n let state: TokenizerState = 'normal'\n // Stack for template string interpolation depth (each entry is brace depth within that interpolation)\n const templateStack: number[] = []\n\n // Structural context tracking - know if we're in a class body, function body, etc.\n const contextStack: ContextFrame[] = [{ type: 'top-level', braceDepth: 0 }]\n let braceDepth = 0\n\n // Helper to get current structural context (reserved for future use)\n const _currentContext = (): StructuralContext =>\n contextStack[contextStack.length - 1]?.type || 'top-level'\n\n // Helper to check if we're directly in a class body (not nested in a function/block inside it)\n const isInClassBody = (): boolean => {\n const frame = contextStack[contextStack.length - 1]\n return frame?.type === 'class-body' && braceDepth === frame.braceDepth + 1\n }\n\n while (i < source.length) {\n const char = source[i]\n const nextChar = source[i + 1]\n\n // Handle state transitions based on current state\n switch (state) {\n case 'single-string':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === \"'\") {\n state = 'normal'\n }\n i++\n continue\n\n case 'double-string':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === '\"') {\n state = 'normal'\n }\n i++\n continue\n\n case 'template-string':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === '$' && nextChar === '{') {\n // Enter template expression\n result += nextChar\n i += 2\n templateStack.push(1) // Start with brace depth 1\n state = 'normal' // Back to normal parsing inside ${}\n continue\n }\n if (char === '`') {\n state = 'normal'\n }\n i++\n continue\n\n case 'line-comment':\n result += char\n if (char === '\\n') {\n state = 'normal'\n }\n i++\n continue\n\n case 'block-comment':\n result += char\n if (char === '*' && nextChar === '/') {\n result += nextChar\n i += 2\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'regex':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === '[') {\n // Character class - read until ]\n i++\n while (i < source.length && source[i] !== ']') {\n result += source[i]\n if (source[i] === '\\\\' && i + 1 < source.length) {\n result += source[i + 1]\n i += 2\n } else {\n i++\n }\n }\n if (i < source.length) {\n result += source[i]\n i++\n }\n continue\n }\n if (char === '/') {\n // End of regex, consume flags\n i++\n while (i < source.length && /[gimsuy]/.test(source[i])) {\n result += source[i]\n i++\n }\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'normal':\n // Handle template stack - track braces inside template expressions\n if (templateStack.length > 0) {\n if (char === '{') {\n templateStack[templateStack.length - 1]++\n } else if (char === '}') {\n templateStack[templateStack.length - 1]--\n if (templateStack[templateStack.length - 1] === 0) {\n // Exiting template expression, back to template string\n templateStack.pop()\n result += char\n i++\n state = 'template-string'\n continue\n }\n }\n }\n\n // Check for string/comment/regex start\n if (char === \"'\") {\n result += char\n i++\n state = 'single-string'\n continue\n }\n if (char === '\"') {\n result += char\n i++\n state = 'double-string'\n continue\n }\n if (char === '`') {\n result += char\n i++\n state = 'template-string'\n continue\n }\n if (char === '/' && nextChar === '/') {\n result += char + nextChar\n i += 2\n state = 'line-comment'\n continue\n }\n if (char === '/' && nextChar === '*') {\n result += char + nextChar\n i += 2\n state = 'block-comment'\n continue\n }\n\n // Check for regex literal\n if (char === '/') {\n const before = result.trimEnd()\n const lastChar = before[before.length - 1]\n const isRegexContext =\n !lastChar ||\n /[=(!,;:{[&|?+\\-*%<>~^]$/.test(before) ||\n /\\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)\\s*$/.test(\n before\n )\n if (isRegexContext) {\n result += char\n i++\n state = 'regex'\n continue\n }\n }\n\n // Now handle TJS-specific transformations in normal state\n break\n }\n\n // We're in normal state - look for TJS patterns\n\n // Track braces for structural context\n if (char === '{') {\n braceDepth++\n result += char\n i++\n continue\n }\n if (char === '}') {\n braceDepth--\n // Pop context if we're exiting it\n const frame = contextStack[contextStack.length - 1]\n if (frame && braceDepth === frame.braceDepth) {\n contextStack.pop()\n }\n result += char\n i++\n continue\n }\n\n // Look for class declarations: class Name { or class Name extends Base {\n const classMatch = source\n .slice(i)\n .match(/^class\\s+\\w+(?:\\s+extends\\s+\\w+)?\\s*\\{/)\n if (classMatch) {\n // Output everything up to but not including the {\n const classHeader = classMatch[0].slice(0, -1)\n result += classHeader\n i += classHeader.length\n // Push class-body context (will be entered when we see the {)\n contextStack.push({ type: 'class-body', braceDepth })\n continue\n }\n\n // Look for function declarations: function name( or function name (\n const funcMatch = source.slice(i).match(/^function\\s+(\\w+)\\s*\\(/)\n if (funcMatch) {\n const funcName = funcMatch[1]\n const matchLen = funcMatch[0].length\n\n // Check for safety marker right after opening paren: (? or (!\n const afterParen = source[i + matchLen]\n let safetyMarker: '?' | '!' | null = null\n let paramStart = i + matchLen\n\n if (afterParen === '?' || afterParen === '!') {\n safetyMarker = afterParen\n paramStart++\n if (safetyMarker === '!') {\n ctx.unsafeFunctions.add(funcName)\n } else {\n ctx.safeFunctions.add(funcName)\n }\n }\n\n result += `function ${funcName}(`\n i = paramStart\n\n // Find matching ) using balanced counting\n const paramsResult = extractBalancedContent(source, i, '(', ')')\n if (!paramsResult) {\n // Unbalanced - just copy character and continue\n result += source[i]\n i++\n continue\n }\n\n const { content: params, endPos } = paramsResult\n i = endPos\n\n // Process the params (transform : to = for required params, handle nested arrows)\n const processedParams = processParamString(params, ctx, true)\n result += processedParams + ')'\n\n // Check what follows the closing paren: whitespace then -> or -? or -! (return type)\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n\n const returnArrow = source.slice(j, j + 2)\n if (\n returnArrow === '->' ||\n returnArrow === '-?' ||\n returnArrow === '-!'\n ) {\n // Extract return type\n j += 2\n // Skip whitespace after arrow\n while (j < source.length && /\\s/.test(source[j])) j++\n\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n const { type, endPos: typeEnd } = typeResult\n // Record first return type for metadata\n if (firstReturnType === undefined) {\n firstReturnType = type\n if (returnArrow === '-?') {\n firstReturnSafety = 'safe'\n } else if (returnArrow === '-!') {\n firstReturnSafety = 'unsafe'\n }\n }\n i = typeEnd\n }\n }\n continue\n }\n\n // Look for class method syntax: constructor(, methodName(, get name(, set name(\n // These appear inside class bodies and need param transformation\n // Only match if we're actually in a class body (proper context tracking)\n const methodMatch = source\n .slice(i)\n .match(/^(constructor|(?:get|set)\\s+\\w+|async\\s+\\w+|\\w+)\\s*\\(/)\n if (methodMatch && isInClassBody()) {\n // We're actually in a class body - this is a method definition\n const methodPart = methodMatch[1]\n const matchLen = methodMatch[0].length\n const paramStart = i + matchLen\n\n result += methodPart + '('\n i = paramStart\n\n // Find matching )\n const paramsResult = extractBalancedContent(source, i, '(', ')')\n if (!paramsResult) {\n result += source[i]\n i++\n continue\n }\n\n const { content: params, endPos } = paramsResult\n i = endPos\n\n // Process the params (transform : to = for TJS types)\n const processedParams = processParamString(params, ctx, true)\n result += processedParams + ')'\n\n // Check for return type annotation: ) -> type, ) -! type, ) -? type, ): type\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n\n // Handle ->, -!, -? return type (TJS style)\n const returnArrow = source.slice(j, j + 2)\n if (\n returnArrow === '->' ||\n returnArrow === '-!' ||\n returnArrow === '-?'\n ) {\n j += 2\n while (j < source.length && /\\s/.test(source[j])) j++\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n i = typeResult.endPos\n }\n }\n // Handle : return type (TS style) - just strip it\n else if (source[j] === ':') {\n j++\n while (j < source.length && /\\s/.test(source[j])) j++\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n i = typeResult.endPos\n }\n }\n\n continue\n }\n\n // Look for arrow function params: (params) =>\n // We need to be careful to only transform when followed by =>\n if (source[i] === '(') {\n // First, find the matching ) without consuming any safety marker\n // We'll check for safety marker only if this is actually an arrow function\n const fullParamsResult = extractBalancedContent(source, i + 1, '(', ')')\n if (!fullParamsResult) {\n result += source[i]\n i++\n continue\n }\n\n const fullContent = fullParamsResult.content\n const endPos = fullParamsResult.endPos\n\n // Check what follows: whitespace then => (arrow function) or -> (return type on arrow)\n let j = endPos\n while (j < source.length && /\\s/.test(source[j])) j++\n\n // Check for return type annotation on arrow function: ) -> type =>\n let arrowReturnType: string | undefined\n const returnArrow = source.slice(j, j + 2)\n if (\n returnArrow === '->' ||\n returnArrow === '-?' ||\n returnArrow === '-!'\n ) {\n j += 2\n while (j < source.length && /\\s/.test(source[j])) j++\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n arrowReturnType = typeResult.type\n j = typeResult.endPos\n while (j < source.length && /\\s/.test(source[j])) j++\n }\n }\n\n if (source.slice(j, j + 2) === '=>') {\n // This IS an arrow function - now check for safety marker\n let safetyMarker: '?' | '!' | null = null\n let params = fullContent\n\n // Check if content starts with safety marker (? or !) followed by whitespace\n const trimmedContent = fullContent.trimStart()\n if (\n trimmedContent.startsWith('?') &&\n (trimmedContent.length === 1 || /\\s/.test(trimmedContent[1]))\n ) {\n safetyMarker = '?'\n params = trimmedContent.slice(1)\n } else if (\n trimmedContent.startsWith('!') &&\n (trimmedContent.length === 1 || /\\s/.test(trimmedContent[1]))\n ) {\n safetyMarker = '!'\n params = trimmedContent.slice(1)\n }\n\n // Process the params\n const processedParams = processParamString(params, ctx, false)\n // Add safety marker as comment for arrow functions (since we can't track them by name)\n const safetyComment =\n safetyMarker === '?'\n ? '/* safe */ '\n : safetyMarker === '!'\n ? '/* unsafe */ '\n : ''\n result += `(${safetyComment}${processedParams})`\n // Skip the return type annotation (we extracted it but don't emit it)\n i = endPos\n // Skip to just before the =>\n while (i < j && /\\s/.test(source[i])) {\n result += source[i]\n i++\n }\n // If there was a return type, we need to skip past it to =>\n if (arrowReturnType) {\n i = j\n }\n } else {\n // Not an arrow function - recursively transform the content for nested arrows\n // but don't process as param declarations (no colon-to-equals transform)\n const transformed = transformParenExpressions(fullContent, ctx)\n result += `(${transformed.source})`\n i = endPos\n }\n continue\n }\n\n result += source[i]\n i++\n }\n\n return {\n source: result,\n returnType: firstReturnType,\n returnSafety: firstReturnSafety,\n }\n}\n\n/**\n * Extract balanced content between delimiters\n * @param source The source string\n * @param start Position after the opening delimiter\n * @param open Opening delimiter character (for depth counting of nested structures)\n * @param close Closing delimiter character\n * @returns The content between delimiters and position after closing delimiter, or null if unbalanced\n */\nfunction extractBalancedContent(\n source: string,\n start: number,\n open: string,\n close: string\n): { content: string; endPos: number } | null {\n let depth = 1\n let i = start\n let inString = false\n let stringChar = ''\n\n while (i < source.length && depth > 0) {\n const char = source[i]\n\n // Handle string literals\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n } else if (inString && char === stringChar && source[i - 1] !== '\\\\') {\n inString = false\n } else if (!inString) {\n if (char === open) depth++\n else if (char === close) depth--\n }\n i++\n }\n\n if (depth !== 0) return null\n\n return {\n content: source.slice(start, i - 1),\n endPos: i,\n }\n}\n\n/**\n * Extract a JS value starting at a position in source.\n * Handles nested objects {}, arrays [], strings, numbers, booleans, null.\n * Uses state machine to properly track nesting.\n */\nexport function extractJSValue(\n source: string,\n start: number\n): { value: string; endPos: number } | null {\n let i = start\n\n // Skip leading whitespace\n while (i < source.length && /\\s/.test(source[i])) i++\n if (i >= source.length) return null\n\n const valueStart = i\n const firstChar = source[i]\n\n // Handle objects and arrays with balanced parsing\n if (firstChar === '{' || firstChar === '[') {\n const close = firstChar === '{' ? '}' : ']'\n const result = extractBalancedContent(source, i + 1, firstChar, close)\n if (!result) return null\n return {\n value: source.slice(valueStart, result.endPos),\n endPos: result.endPos,\n }\n }\n\n // Handle strings\n if (firstChar === \"'\" || firstChar === '\"' || firstChar === '`') {\n i++\n while (i < source.length) {\n if (source[i] === firstChar && source[i - 1] !== '\\\\') {\n i++\n return { value: source.slice(valueStart, i), endPos: i }\n }\n i++\n }\n return null // Unterminated string\n }\n\n // Handle numbers (including negative and decimals)\n if (/[-+\\d]/.test(firstChar)) {\n while (i < source.length && /[\\d.eE+-]/.test(source[i])) i++\n return { value: source.slice(valueStart, i), endPos: i }\n }\n\n // Handle keywords: true, false, null, undefined\n const keywordMatch = source.slice(i).match(/^(true|false|null|undefined)\\b/)\n if (keywordMatch) {\n return {\n value: keywordMatch[1],\n endPos: i + keywordMatch[1].length,\n }\n }\n\n return null\n}\n\n/**\n * Normalize union syntax in type strings\n * Converts single | to || for TJS consistency (needed for JS parsing)\n */\nfunction normalizeUnionSyntax(type: string): string {\n // Replace single | (not ||) with || for proper JS parsing\n // Use negative lookbehind and lookahead to avoid matching ||\n return type.replace(/(?<!\\|)\\|(?!\\|)/g, ' || ')\n}\n\n/**\n * Extract a return type value starting at the given position\n * Handles: simple types ('', 0, null), objects ({ }), arrays ([ ]), unions (| or ||)\n */\nfunction extractReturnTypeValue(\n source: string,\n start: number\n): { type: string; endPos: number } | null {\n let i = start\n let depth = 0\n let inString = false\n let stringChar = ''\n let sawContent = false\n\n // Helper to create result with normalized type\n const makeResult = (endPos: number) => ({\n type: normalizeUnionSyntax(source.slice(start, endPos).trim()),\n endPos,\n })\n\n while (i < source.length) {\n const char = source[i]\n\n // Handle string literals\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n sawContent = true\n i++\n continue\n }\n if (inString) {\n if (char === stringChar && source[i - 1] !== '\\\\') {\n inString = false\n i++ // Move past closing quote\n // Just finished a string at depth 0\n if (depth === 0) {\n // Check if next non-ws is function body { or union |\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n if (source[j] === '{') {\n // Check if it's object type or function body\n const afterBrace = source.slice(j + 1).match(/^\\s*(\\w+)\\s*:/)\n if (!afterBrace) {\n // Function body - type ends here\n return makeResult(i)\n }\n }\n if (source[j] !== '|' && source[j] !== '&') {\n // No union - type ends here\n return makeResult(i)\n }\n }\n continue\n }\n i++\n continue\n }\n\n // Track bracket depth\n if (char === '{' || char === '[' || char === '(') {\n depth++\n sawContent = true\n i++\n continue\n }\n if (char === '}' || char === ']' || char === ')') {\n depth--\n if (depth === 0) {\n i++\n // Check for union after closing bracket\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n if (source[j] === '|' || source[j] === '&') {\n continue // More type content\n }\n return makeResult(i)\n }\n i++\n continue\n }\n\n // At depth 0, check for function body\n if (depth === 0 && char === '{') {\n if (sawContent) {\n return makeResult(i)\n }\n // First { - check if object type or function body\n const afterBrace = source.slice(i + 1).match(/^\\s*(\\w+)\\s*:/)\n if (afterBrace) {\n depth++\n sawContent = true\n i++\n continue\n }\n return makeResult(i)\n }\n\n // Handle union/intersection at depth 0\n if (depth === 0 && (char === '|' || char === '&')) {\n i++\n if (i < source.length && source[i] === '|') i++ // Skip second | for ||\n while (i < source.length && /\\s/.test(source[i])) i++\n continue\n }\n\n // Handle numbers (including decimals like 14.5, -3.14)\n if (\n depth === 0 &&\n (/\\d/.test(char) || (char === '-' && /\\d/.test(source[i + 1])))\n ) {\n let j = i\n if (source[j] === '-') j++ // Skip negative sign\n while (j < source.length && /\\d/.test(source[j])) j++\n // Handle decimal part\n if (j < source.length && source[j] === '.' && /\\d/.test(source[j + 1])) {\n j++ // Skip decimal point\n while (j < source.length && /\\d/.test(source[j])) j++\n }\n // Handle exponent (1e10, 1.5e-3)\n if (j < source.length && (source[j] === 'e' || source[j] === 'E')) {\n j++\n if (j < source.length && (source[j] === '+' || source[j] === '-')) j++\n while (j < source.length && /\\d/.test(source[j])) j++\n }\n sawContent = true\n i = j\n // Check what's next\n while (i < source.length && /\\s/.test(source[i])) i++\n if (i < source.length && source[i] === '{') {\n // Function body - type ends here\n return {\n type: normalizeUnionSyntax(source.slice(start, j).trim()),\n endPos: j,\n }\n }\n if (source[i] !== '|' && source[i] !== '&') {\n return {\n type: normalizeUnionSyntax(source.slice(start, j).trim()),\n endPos: j,\n }\n }\n continue\n }\n\n // Handle identifiers (null, undefined, true, false, type names)\n if (depth === 0 && /[a-zA-Z_]/.test(char)) {\n let j = i\n while (j < source.length && /\\w/.test(source[j])) j++\n sawContent = true\n i = j\n // Check what's next\n while (i < source.length && /\\s/.test(source[i])) i++\n\n // Identifier followed by ( — constructor/function call as return type\n // e.g. FunctionPredicate('function', { params: ... })\n if (i < source.length && source[i] === '(') {\n depth++\n i++\n continue\n }\n\n if (i < source.length && source[i] === '{') {\n // Check if function body\n const afterBrace = source.slice(i + 1).match(/^\\s*(\\w+)\\s*:/)\n if (!afterBrace) {\n // Function body - type ends before whitespace\n let typeEnd = j\n while (typeEnd > start && /\\s/.test(source[typeEnd - 1])) typeEnd--\n return {\n type: normalizeUnionSyntax(source.slice(start, typeEnd).trim()),\n endPos: j,\n }\n }\n }\n if (source[i] !== '|' && source[i] !== '&') {\n return {\n type: normalizeUnionSyntax(source.slice(start, j).trim()),\n endPos: j,\n }\n }\n continue\n }\n\n i++\n }\n\n // Reached end of source\n if (sawContent) {\n return makeResult(i)\n }\n return null\n}\n\n/**\n * Split parameter string respecting nested braces/brackets\n */\nfunction splitParameters(params: string): string[] {\n const result: string[] = []\n let current = ''\n let depth = 0\n let inLineComment = false\n let inBlockComment = false\n let i = 0\n\n while (i < params.length) {\n const char = params[i]\n const nextChar = params[i + 1]\n\n // Handle line comments - preserve them in output\n if (!inBlockComment && char === '/' && nextChar === '/') {\n inLineComment = true\n current += '//'\n i += 2\n continue\n }\n\n // Handle block comments - preserve them in output\n if (!inLineComment && char === '/' && nextChar === '*') {\n inBlockComment = true\n current += '/*'\n i += 2\n continue\n }\n\n // End of line comment\n if (inLineComment && char === '\\n') {\n inLineComment = false\n current += char\n i++\n continue\n }\n\n // End of block comment - preserve closing\n if (inBlockComment && char === '*' && nextChar === '/') {\n inBlockComment = false\n current += '*/'\n i += 2\n continue\n }\n\n // Inside comments - preserve the content\n if (inLineComment || inBlockComment) {\n current += char\n i++\n continue\n }\n\n if (char === '(' || char === '{' || char === '[') {\n depth++\n current += char\n } else if (char === ')' || char === '}' || char === ']') {\n depth--\n current += char\n } else if (char === ',' && depth === 0) {\n result.push(current)\n current = ''\n } else {\n current += char\n }\n i++\n }\n\n if (current.trim()) {\n result.push(current)\n }\n\n return result\n}\n\n/**\n * Process a parameter string, transforming : to = for required params\n * and recursively handling nested arrow functions\n */\nfunction processParamString(\n params: string,\n ctx: {\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n },\n trackRequired: boolean\n): string {\n // First recursively process any nested arrow functions\n const withArrows = transformParenExpressions(params, {\n originalSource: params,\n requiredParams: ctx.requiredParams,\n unsafeFunctions: ctx.unsafeFunctions,\n safeFunctions: ctx.safeFunctions,\n }).source\n\n // Now split and process each parameter\n const paramList = splitParameters(withArrows)\n let sawOptional = false\n const seenNames = new Set<string>()\n\n // Helper to check for duplicate names\n const checkDuplicate = (name: string) => {\n if (trackRequired && /^\\w+$/.test(name)) {\n if (seenNames.has(name)) {\n throw new Error(`Duplicate parameter name '${name}'`)\n }\n seenNames.add(name)\n }\n }\n\n const processed = paramList.map((param) => {\n const trimmed = param.trim()\n if (!trimmed) return param\n\n // Handle destructured object parameters: { name: 'Clara', age = 30 }\n // Transform colons to equals inside the braces (recursive)\n // Order doesn't matter for objects, so don't enforce required-before-optional\n // ONLY do this when trackRequired is true - i.e., actual function parameters\n if (trackRequired && trimmed.startsWith('{') && trimmed.endsWith('}')) {\n const inner = trimmed.slice(1, -1)\n const processedInner = processDestructuredObjectParams(inner, ctx)\n return `{ ${processedInner} }`\n }\n\n // Handle destructured array parameters: [first: '', second: 0]\n // ONLY do this when trackRequired is true - i.e., actual function parameters\n if (trackRequired && trimmed.startsWith('[') && trimmed.endsWith(']')) {\n const inner = trimmed.slice(1, -1)\n const processedInner = processDestructuredObjectParams(inner, ctx)\n return `[ ${processedInner} ]`\n }\n\n // Handle rest parameters: ...args: [0] -> ...args (strip type, JS forbids defaults on rest)\n // The type annotation is still captured by extractFunctionTypeInfo for __tjs metadata\n if (trimmed.startsWith('...')) {\n const restColonPos = findTopLevelColon(trimmed)\n if (restColonPos !== -1) {\n const restName = trimmed.slice(0, restColonPos).trim()\n return restName\n }\n return param\n }\n\n // Handle optional param syntax: x?: type -> x = type (not required)\n const optionalMatch = trimmed.match(/^(\\w+)\\s*\\?\\s*:\\s*(.+)$/)\n if (optionalMatch) {\n const [, name, type] = optionalMatch\n checkDuplicate(name)\n sawOptional = true\n // Optional params are NOT tracked as required\n return `${name} = ${type}`\n }\n\n // Check if param already has a default value (x = value)\n if (!hasColonNotEquals(trimmed)) {\n // Has equals sign (default value) - this is optional\n // Extract name from \"name = value\" pattern\n const eqMatch = trimmed.match(/^(\\w+)\\s*=/)\n if (eqMatch) {\n checkDuplicate(eqMatch[1])\n }\n sawOptional = true\n return param\n }\n\n // Handle required param syntax: x: type -> x = type (tracked as required)\n const colonPos = findTopLevelColon(trimmed)\n if (colonPos !== -1) {\n const name = trimmed.slice(0, colonPos).trim()\n const type = trimmed.slice(colonPos + 1).trim()\n\n checkDuplicate(name)\n\n // Required param after optional — warn but allow.\n // TypeScript permits this, and the TS→TJS converter can produce it\n // when earlier params degrade to 'any' (bare name, no : or =).\n if (sawOptional && trackRequired && /^\\w+$/.test(name)) {\n // Allow it — JavaScript handles this fine (caller passes undefined)\n }\n\n if (trackRequired && /^\\w+$/.test(name)) {\n ctx.requiredParams.add(name)\n }\n return `${name} = ${type}`\n }\n\n return param\n })\n\n return processed.join(',')\n}\n\n/**\n * Process destructured object/array parameters\n *\n * In TJS destructuring patterns:\n * - `name: 'Clara'` means required param with example (transforms to `name = 'Clara'`)\n * - `age = 30` means optional param with default (stays as `age = 30`)\n * - Nested objects like `address: { street: '9 High St', zip = '0000' }` are tricky:\n * the inner object is a value (object literal), not a pattern, so we transform it back\n *\n * Key insight: In destructuring, `foo: value` at top level is a required param,\n * but at nested levels within an object value, `:` is normal object literal syntax.\n *\n * Order does NOT matter in objects (unlike positional function params).\n */\nfunction processDestructuredObjectParams(\n inner: string,\n ctx: {\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n }\n): string {\n // Split on commas at the top level (respecting nested braces)\n const parts = splitParameters(inner)\n\n const processed = parts.map((part) => {\n const trimmed = part.trim()\n if (!trimmed) return part\n\n // Check for nested destructured object: name: { ... }\n // The inner { ... } is an object literal value, not a destructuring pattern\n const nestedObjectMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\{[\\s\\S]*\\})$/)\n if (nestedObjectMatch) {\n const [, name, objectLiteral] = nestedObjectMatch\n ctx.requiredParams.add(name)\n // Process the inner object as an object literal (transform = to : for values)\n const processedLiteral = processObjectLiteralValue(objectLiteral)\n return `${name} = ${processedLiteral}`\n }\n\n // Check for nested destructured array: name: [ ... ]\n const nestedArrayMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\[[\\s\\S]*\\])$/)\n if (nestedArrayMatch) {\n const [, name, arrayLiteral] = nestedArrayMatch\n ctx.requiredParams.add(name)\n // Process the inner array as an array literal\n const processedLiteral = processArrayLiteralValue(arrayLiteral)\n return `${name} = ${processedLiteral}`\n }\n\n // Handle simple colon syntax: name: 'value' -> name = 'value' (required)\n const colonMatch = trimmed.match(/^(\\w+)\\s*:\\s*([\\s\\S]+)$/)\n if (colonMatch) {\n const [, name, value] = colonMatch\n ctx.requiredParams.add(name)\n return `${name} = ${value}`\n }\n\n // Handle equals syntax: name = value (optional, already valid JS)\n // Just preserve it as-is\n return part\n })\n\n return processed.join(', ')\n}\n\n/**\n * Process an object literal value (nested inside destructuring)\n *\n * In object literals, TJS allows `=` for optional values:\n * { street: '9 High St', zip = '0000' }\n *\n * This must become valid JS object literal syntax:\n * { street: '9 High St', zip: '0000' }\n *\n * (The `=` is TJS shorthand indicating the value is optional/has default,\n * but in an object literal context it must use `:`)\n */\nfunction processObjectLiteralValue(literal: string): string {\n // Remove outer braces, process content, restore braces\n const inner = literal.slice(1, -1).trim()\n const parts = splitParameters(inner)\n\n const processed = parts.map((part) => {\n const trimmed = part.trim()\n if (!trimmed) return part\n\n // Handle nested objects: key: { ... } or key = { ... }\n const nestedObjColonMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\{[\\s\\S]*\\})$/)\n if (nestedObjColonMatch) {\n const [, key, nested] = nestedObjColonMatch\n return `${key}: ${processObjectLiteralValue(nested)}`\n }\n const nestedObjEqualsMatch = trimmed.match(/^(\\w+)\\s*=\\s*(\\{[\\s\\S]*\\})$/)\n if (nestedObjEqualsMatch) {\n const [, key, nested] = nestedObjEqualsMatch\n return `${key}: ${processObjectLiteralValue(nested)}`\n }\n\n // Handle nested arrays: key: [ ... ] or key = [ ... ]\n const nestedArrColonMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\[[\\s\\S]*\\])$/)\n if (nestedArrColonMatch) {\n const [, key, nested] = nestedArrColonMatch\n return `${key}: ${processArrayLiteralValue(nested)}`\n }\n const nestedArrEqualsMatch = trimmed.match(/^(\\w+)\\s*=\\s*(\\[[\\s\\S]*\\])$/)\n if (nestedArrEqualsMatch) {\n const [, key, nested] = nestedArrEqualsMatch\n return `${key}: ${processArrayLiteralValue(nested)}`\n }\n\n // Transform equals to colon for simple values: key = value -> key: value\n const equalsMatch = trimmed.match(/^(\\w+)\\s*=\\s*([\\s\\S]+)$/)\n if (equalsMatch) {\n const [, key, value] = equalsMatch\n return `${key}: ${value}`\n }\n\n // Colon syntax is already valid: key: value\n return part\n })\n\n return `{ ${processed.join(', ')} }`\n}\n\n/**\n * Process an array literal value (nested inside destructuring)\n * Similar to processObjectLiteralValue but for arrays\n */\nfunction processArrayLiteralValue(literal: string): string {\n // Remove outer brackets, process content, restore brackets\n const inner = literal.slice(1, -1).trim()\n const parts = splitParameters(inner)\n\n const processed = parts.map((part) => {\n const trimmed = part.trim()\n if (!trimmed) return part\n\n // Handle nested objects\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\n return processObjectLiteralValue(trimmed)\n }\n\n // Handle nested arrays\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n return processArrayLiteralValue(trimmed)\n }\n\n // Array elements are just values, no transformation needed\n return part\n })\n\n return `[ ${processed.join(', ')} ]`\n}\n\n/**\n * Check if param has a top-level colon but no top-level equals\n * This distinguishes x: type from x = type and handles nested structures\n */\nfunction hasColonNotEquals(param: string): boolean {\n let depth = 0\n let hasColon = false\n let hasEquals = false\n let inString = false\n let stringChar = ''\n\n for (let i = 0; i < param.length; i++) {\n const char = param[i]\n\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n continue\n }\n if (inString) {\n if (char === stringChar && param[i - 1] !== '\\\\') inString = false\n continue\n }\n\n if (char === '(' || char === '{' || char === '[') {\n depth++\n } else if (char === ')' || char === '}' || char === ']') {\n depth--\n } else if (depth === 0) {\n if (char === ':') hasColon = true\n if (char === '=' && param[i + 1] !== '>') hasEquals = true // Ignore =>\n }\n }\n\n return hasColon && !hasEquals\n}\n\n/**\n * Find the position of the first top-level colon in a param\n */\nfunction findTopLevelColon(param: string): number {\n let depth = 0\n let inString = false\n let stringChar = ''\n\n for (let i = 0; i < param.length; i++) {\n const char = param[i]\n\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n continue\n }\n if (inString) {\n if (char === stringChar && param[i - 1] !== '\\\\') inString = false\n continue\n }\n\n if (char === '(' || char === '{' || char === '[') {\n depth++\n } else if (char === ')' || char === '}' || char === ']') {\n depth--\n } else if (depth === 0 && char === ':') {\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Preprocess source to handle custom syntax extensions\n *\n * Transforms:\n * function foo(x: 'example') { }\n * Into:\n * function foo(x = 'example') { }\n * And tracks that 'x' is a required parameter.\n *\n * Also handles return type annotation:\n * function foo(x: 'example') -> { result: 'string' } { }\n */\n",
|
|
8
|
+
"/**\n * Parser parameter and annotation processing\n *\n * Handles the unified paren expression transformer that converts TJS syntax\n * (colon defaults, return type annotations, safe/unsafe markers) into valid JS.\n */\n\nimport { SyntaxError } from './types'\nimport type {\n TokenizerState,\n StructuralContext,\n ContextFrame,\n TjsModes,\n} from './parser-types'\n\nexport function transformParenExpressions(\n source: string,\n ctx: {\n originalSource: string\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n }\n): {\n source: string\n returnType?: string\n returnSafety?: 'safe' | 'unsafe'\n} {\n let result = ''\n let i = 0\n let firstReturnType: string | undefined\n let firstReturnSafety: 'safe' | 'unsafe' | undefined\n\n // State machine for tokenizing\n let state: TokenizerState = 'normal'\n // Stack for template string interpolation depth (each entry is brace depth within that interpolation)\n const templateStack: number[] = []\n\n // Structural context tracking - know if we're in a class body, function body, etc.\n const contextStack: ContextFrame[] = [{ type: 'top-level', braceDepth: 0 }]\n let braceDepth = 0\n\n // Helper to get current structural context (reserved for future use)\n const _currentContext = (): StructuralContext =>\n contextStack[contextStack.length - 1]?.type || 'top-level'\n\n // Helper to check if we're directly in a class body (not nested in a function/block inside it)\n const isInClassBody = (): boolean => {\n const frame = contextStack[contextStack.length - 1]\n return frame?.type === 'class-body' && braceDepth === frame.braceDepth + 1\n }\n\n while (i < source.length) {\n const char = source[i]\n const nextChar = source[i + 1]\n\n // Handle state transitions based on current state\n switch (state) {\n case 'single-string':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === \"'\") {\n state = 'normal'\n }\n i++\n continue\n\n case 'double-string':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === '\"') {\n state = 'normal'\n }\n i++\n continue\n\n case 'template-string':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === '$' && nextChar === '{') {\n // Enter template expression\n result += nextChar\n i += 2\n templateStack.push(1) // Start with brace depth 1\n state = 'normal' // Back to normal parsing inside ${}\n continue\n }\n if (char === '`') {\n state = 'normal'\n }\n i++\n continue\n\n case 'line-comment':\n result += char\n if (char === '\\n') {\n state = 'normal'\n }\n i++\n continue\n\n case 'block-comment':\n result += char\n if (char === '*' && nextChar === '/') {\n result += nextChar\n i += 2\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'regex':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === '[') {\n // Character class - read until ]\n i++\n while (i < source.length && source[i] !== ']') {\n result += source[i]\n if (source[i] === '\\\\' && i + 1 < source.length) {\n result += source[i + 1]\n i += 2\n } else {\n i++\n }\n }\n if (i < source.length) {\n result += source[i]\n i++\n }\n continue\n }\n if (char === '/') {\n // End of regex, consume flags\n i++\n while (i < source.length && /[gimsuy]/.test(source[i])) {\n result += source[i]\n i++\n }\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'normal':\n // Handle template stack - track braces inside template expressions\n if (templateStack.length > 0) {\n if (char === '{') {\n templateStack[templateStack.length - 1]++\n } else if (char === '}') {\n templateStack[templateStack.length - 1]--\n if (templateStack[templateStack.length - 1] === 0) {\n // Exiting template expression, back to template string\n templateStack.pop()\n result += char\n i++\n state = 'template-string'\n continue\n }\n }\n }\n\n // Check for string/comment/regex start\n if (char === \"'\") {\n result += char\n i++\n state = 'single-string'\n continue\n }\n if (char === '\"') {\n result += char\n i++\n state = 'double-string'\n continue\n }\n if (char === '`') {\n result += char\n i++\n state = 'template-string'\n continue\n }\n if (char === '/' && nextChar === '/') {\n result += char + nextChar\n i += 2\n state = 'line-comment'\n continue\n }\n if (char === '/' && nextChar === '*') {\n result += char + nextChar\n i += 2\n state = 'block-comment'\n continue\n }\n\n // Check for regex literal\n if (char === '/') {\n const before = result.trimEnd()\n const lastChar = before[before.length - 1]\n const isRegexContext =\n !lastChar ||\n /[=(!,;:{[&|?+\\-*%<>~^]$/.test(before) ||\n /\\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)\\s*$/.test(\n before\n )\n if (isRegexContext) {\n result += char\n i++\n state = 'regex'\n continue\n }\n }\n\n // Now handle TJS-specific transformations in normal state\n break\n }\n\n // We're in normal state - look for TJS patterns\n\n // Track braces for structural context\n if (char === '{') {\n braceDepth++\n result += char\n i++\n continue\n }\n if (char === '}') {\n braceDepth--\n // Pop context if we're exiting it\n const frame = contextStack[contextStack.length - 1]\n if (frame && braceDepth === frame.braceDepth) {\n contextStack.pop()\n }\n result += char\n i++\n continue\n }\n\n // Look for class declarations: class Name { or class Name extends Base {\n const classMatch = source\n .slice(i)\n .match(/^class\\s+\\w+(?:\\s+extends\\s+\\w+)?\\s*\\{/)\n if (classMatch) {\n // Output everything up to but not including the {\n const classHeader = classMatch[0].slice(0, -1)\n result += classHeader\n i += classHeader.length\n // Push class-body context (will be entered when we see the {)\n contextStack.push({ type: 'class-body', braceDepth })\n continue\n }\n\n // Look for function declarations: function name( or function name (\n const funcMatch = source.slice(i).match(/^function\\s+(\\w+)\\s*\\(/)\n if (funcMatch) {\n const funcName = funcMatch[1]\n const matchLen = funcMatch[0].length\n\n // Check for safety marker right after opening paren: (? or (!\n const afterParen = source[i + matchLen]\n let safetyMarker: '?' | '!' | null = null\n let paramStart = i + matchLen\n\n if (afterParen === '?' || afterParen === '!') {\n safetyMarker = afterParen\n paramStart++\n if (safetyMarker === '!') {\n ctx.unsafeFunctions.add(funcName)\n } else {\n ctx.safeFunctions.add(funcName)\n }\n }\n\n result += `function ${funcName}(`\n i = paramStart\n\n // Find matching ) using balanced counting\n const paramsResult = extractBalancedContent(source, i, '(', ')')\n if (!paramsResult) {\n // Unbalanced - just copy character and continue\n result += source[i]\n i++\n continue\n }\n\n const { content: params, endPos } = paramsResult\n i = endPos\n\n // Process the params (transform : to = for required params, handle nested arrows)\n const processedParams = processParamString(params, ctx, true)\n result += processedParams + ')'\n\n // Check what follows the closing paren: whitespace then -> or -? or -! (return type)\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n\n const returnArrow = source.slice(j, j + 2)\n if (\n returnArrow === '->' ||\n returnArrow === '-?' ||\n returnArrow === '-!'\n ) {\n // Extract return type\n j += 2\n // Skip whitespace after arrow\n while (j < source.length && /\\s/.test(source[j])) j++\n\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n const { type, endPos: typeEnd } = typeResult\n // Record first return type for metadata\n if (firstReturnType === undefined) {\n firstReturnType = type\n if (returnArrow === '-?') {\n firstReturnSafety = 'safe'\n } else if (returnArrow === '-!') {\n firstReturnSafety = 'unsafe'\n }\n }\n i = typeEnd\n }\n }\n continue\n }\n\n // Look for class method syntax: constructor(, methodName(, get name(, set name(\n // These appear inside class bodies and need param transformation\n // Only match if we're actually in a class body (proper context tracking)\n // Must NOT match function calls in expressions (div(), span(), etc.)\n const methodMatch = source\n .slice(i)\n .match(/^(constructor|(?:get|set)\\s+\\w+|async\\s+\\w+|\\w+)\\s*\\(/)\n // Check that the preceding non-whitespace character indicates this is a\n // declaration, not a function call in an expression.\n // Method declarations follow: newline, {, ;, or start of file\n // Function calls follow: = => , [ ( . operators etc.\n const prevNonWs = (() => {\n for (let k = result.length - 1; k >= 0; k--) {\n if (!/\\s/.test(result[k])) return result[k]\n }\n return '\\n' // start of input\n })()\n // Method declarations can follow almost anything (property, }, ;, etc.)\n // Function CALLS in expressions specifically follow: = => , [ (\n const isMethodDecl =\n prevNonWs !== '=' &&\n prevNonWs !== ',' &&\n prevNonWs !== '(' &&\n prevNonWs !== '[' &&\n prevNonWs !== '>' // catches =>\n if (methodMatch && isInClassBody() && !isMethodDecl) {\n // Not a method declaration (it's a function call in an expression).\n // Skip past the identifier to prevent re-matching a suffix\n // (e.g. 'div(' → skip 'div', don't let 'iv(' match next).\n const skipLen = methodMatch[1].length\n result += source.slice(i, i + skipLen)\n i += skipLen\n continue\n }\n if (methodMatch && isInClassBody() && isMethodDecl) {\n // We're actually in a class body - this is a method definition\n const methodPart = methodMatch[1]\n const matchLen = methodMatch[0].length\n const paramStart = i + matchLen\n\n result += methodPart + '('\n i = paramStart\n\n // Find matching )\n const paramsResult = extractBalancedContent(source, i, '(', ')')\n if (!paramsResult) {\n result += source[i]\n i++\n continue\n }\n\n const { content: params, endPos } = paramsResult\n i = endPos\n\n // Process the params (transform : to = for TJS types)\n const processedParams = processParamString(params, ctx, true)\n result += processedParams + ')'\n\n // Check for return type annotation: ) -> type, ) -! type, ) -? type, ): type\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n\n // Handle ->, -!, -? return type (TJS style)\n const returnArrow = source.slice(j, j + 2)\n if (\n returnArrow === '->' ||\n returnArrow === '-!' ||\n returnArrow === '-?'\n ) {\n j += 2\n while (j < source.length && /\\s/.test(source[j])) j++\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n i = typeResult.endPos\n }\n }\n // Handle : return type (TS style) - just strip it\n else if (source[j] === ':') {\n j++\n while (j < source.length && /\\s/.test(source[j])) j++\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n i = typeResult.endPos\n }\n }\n\n continue\n }\n\n // Look for arrow function params: (params) =>\n // We need to be careful to only transform when followed by =>\n if (source[i] === '(') {\n // First, find the matching ) without consuming any safety marker\n // We'll check for safety marker only if this is actually an arrow function\n const fullParamsResult = extractBalancedContent(source, i + 1, '(', ')')\n if (!fullParamsResult) {\n result += source[i]\n i++\n continue\n }\n\n const fullContent = fullParamsResult.content\n const endPos = fullParamsResult.endPos\n\n // Check what follows: whitespace then => (arrow function) or -> (return type on arrow)\n let j = endPos\n while (j < source.length && /\\s/.test(source[j])) j++\n\n // Check for return type annotation on arrow function: ) -> type =>\n let arrowReturnType: string | undefined\n const returnArrow = source.slice(j, j + 2)\n if (\n returnArrow === '->' ||\n returnArrow === '-?' ||\n returnArrow === '-!'\n ) {\n j += 2\n while (j < source.length && /\\s/.test(source[j])) j++\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n arrowReturnType = typeResult.type\n j = typeResult.endPos\n while (j < source.length && /\\s/.test(source[j])) j++\n }\n }\n\n if (source.slice(j, j + 2) === '=>') {\n // This IS an arrow function - now check for safety marker\n let safetyMarker: '?' | '!' | null = null\n let params = fullContent\n\n // Check if content starts with safety marker (? or !) followed by whitespace\n const trimmedContent = fullContent.trimStart()\n if (\n trimmedContent.startsWith('?') &&\n (trimmedContent.length === 1 || /\\s/.test(trimmedContent[1]))\n ) {\n safetyMarker = '?'\n params = trimmedContent.slice(1)\n } else if (\n trimmedContent.startsWith('!') &&\n (trimmedContent.length === 1 || /\\s/.test(trimmedContent[1]))\n ) {\n safetyMarker = '!'\n params = trimmedContent.slice(1)\n }\n\n // Process the params\n const processedParams = processParamString(params, ctx, false)\n // Add safety marker as comment for arrow functions (since we can't track them by name)\n const safetyComment =\n safetyMarker === '?'\n ? '/* safe */ '\n : safetyMarker === '!'\n ? '/* unsafe */ '\n : ''\n result += `(${safetyComment}${processedParams})`\n // Skip the return type annotation (we extracted it but don't emit it)\n i = endPos\n // Skip to just before the =>\n while (i < j && /\\s/.test(source[i])) {\n result += source[i]\n i++\n }\n // If there was a return type, we need to skip past it to =>\n if (arrowReturnType) {\n i = j\n }\n } else {\n // Not an arrow function - recursively transform the content for nested arrows\n // but don't process as param declarations (no colon-to-equals transform)\n const transformed = transformParenExpressions(fullContent, ctx)\n result += `(${transformed.source})`\n i = endPos\n }\n continue\n }\n\n result += source[i]\n i++\n }\n\n return {\n source: result,\n returnType: firstReturnType,\n returnSafety: firstReturnSafety,\n }\n}\n\n/**\n * Extract balanced content between delimiters\n * @param source The source string\n * @param start Position after the opening delimiter\n * @param open Opening delimiter character (for depth counting of nested structures)\n * @param close Closing delimiter character\n * @returns The content between delimiters and position after closing delimiter, or null if unbalanced\n */\nfunction extractBalancedContent(\n source: string,\n start: number,\n open: string,\n close: string\n): { content: string; endPos: number } | null {\n let depth = 1\n let i = start\n let inString = false\n let stringChar = ''\n\n while (i < source.length && depth > 0) {\n const char = source[i]\n\n // Handle string literals\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n } else if (inString && char === stringChar && source[i - 1] !== '\\\\') {\n inString = false\n } else if (!inString) {\n if (char === open) depth++\n else if (char === close) depth--\n }\n i++\n }\n\n if (depth !== 0) return null\n\n return {\n content: source.slice(start, i - 1),\n endPos: i,\n }\n}\n\n/**\n * Extract a JS value starting at a position in source.\n * Handles nested objects {}, arrays [], strings, numbers, booleans, null.\n * Uses state machine to properly track nesting.\n */\nexport function extractJSValue(\n source: string,\n start: number\n): { value: string; endPos: number } | null {\n let i = start\n\n // Skip leading whitespace\n while (i < source.length && /\\s/.test(source[i])) i++\n if (i >= source.length) return null\n\n const valueStart = i\n const firstChar = source[i]\n\n // Handle objects and arrays with balanced parsing\n if (firstChar === '{' || firstChar === '[') {\n const close = firstChar === '{' ? '}' : ']'\n const result = extractBalancedContent(source, i + 1, firstChar, close)\n if (!result) return null\n return {\n value: source.slice(valueStart, result.endPos),\n endPos: result.endPos,\n }\n }\n\n // Handle strings\n if (firstChar === \"'\" || firstChar === '\"' || firstChar === '`') {\n i++\n while (i < source.length) {\n if (source[i] === firstChar && source[i - 1] !== '\\\\') {\n i++\n return { value: source.slice(valueStart, i), endPos: i }\n }\n i++\n }\n return null // Unterminated string\n }\n\n // Handle numbers (including negative and decimals)\n if (/[-+\\d]/.test(firstChar)) {\n while (i < source.length && /[\\d.eE+-]/.test(source[i])) i++\n return { value: source.slice(valueStart, i), endPos: i }\n }\n\n // Handle keywords: true, false, null, undefined\n const keywordMatch = source.slice(i).match(/^(true|false|null|undefined)\\b/)\n if (keywordMatch) {\n return {\n value: keywordMatch[1],\n endPos: i + keywordMatch[1].length,\n }\n }\n\n return null\n}\n\n/**\n * Normalize union syntax in type strings\n * Converts single | to || for TJS consistency (needed for JS parsing)\n */\nfunction normalizeUnionSyntax(type: string): string {\n // Replace single | (not ||) with || for proper JS parsing\n // Use negative lookbehind and lookahead to avoid matching ||\n return type.replace(/(?<!\\|)\\|(?!\\|)/g, ' || ')\n}\n\n/**\n * Extract a return type value starting at the given position\n * Handles: simple types ('', 0, null), objects ({ }), arrays ([ ]), unions (| or ||)\n */\nfunction extractReturnTypeValue(\n source: string,\n start: number\n): { type: string; endPos: number } | null {\n let i = start\n let depth = 0\n let inString = false\n let stringChar = ''\n let sawContent = false\n\n // Helper to create result with normalized type\n const makeResult = (endPos: number) => ({\n type: normalizeUnionSyntax(source.slice(start, endPos).trim()),\n endPos,\n })\n\n while (i < source.length) {\n const char = source[i]\n\n // Handle string literals\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n sawContent = true\n i++\n continue\n }\n if (inString) {\n if (char === stringChar && source[i - 1] !== '\\\\') {\n inString = false\n i++ // Move past closing quote\n // Just finished a string at depth 0\n if (depth === 0) {\n // Check if next non-ws is function body { or union |\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n if (source[j] === '{') {\n // Check if it's object type or function body\n const afterBrace = source.slice(j + 1).match(/^\\s*(\\w+)\\s*:/)\n if (!afterBrace) {\n // Function body - type ends here\n return makeResult(i)\n }\n }\n if (source[j] !== '|' && source[j] !== '&') {\n // No union - type ends here\n return makeResult(i)\n }\n }\n continue\n }\n i++\n continue\n }\n\n // Track bracket depth\n if (char === '{' || char === '[' || char === '(') {\n depth++\n sawContent = true\n i++\n continue\n }\n if (char === '}' || char === ']' || char === ')') {\n depth--\n if (depth === 0) {\n i++\n // Check for union after closing bracket\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n if (source[j] === '|' || source[j] === '&') {\n continue // More type content\n }\n return makeResult(i)\n }\n i++\n continue\n }\n\n // At depth 0, check for function body\n if (depth === 0 && char === '{') {\n if (sawContent) {\n return makeResult(i)\n }\n // First { - check if object type or function body\n const afterBrace = source.slice(i + 1).match(/^\\s*(\\w+)\\s*:/)\n if (afterBrace) {\n depth++\n sawContent = true\n i++\n continue\n }\n return makeResult(i)\n }\n\n // Handle union/intersection at depth 0\n if (depth === 0 && (char === '|' || char === '&')) {\n i++\n if (i < source.length && source[i] === '|') i++ // Skip second | for ||\n while (i < source.length && /\\s/.test(source[i])) i++\n continue\n }\n\n // Handle numbers (including decimals like 14.5, -3.14)\n if (\n depth === 0 &&\n (/\\d/.test(char) || (char === '-' && /\\d/.test(source[i + 1])))\n ) {\n let j = i\n if (source[j] === '-') j++ // Skip negative sign\n while (j < source.length && /\\d/.test(source[j])) j++\n // Handle decimal part\n if (j < source.length && source[j] === '.' && /\\d/.test(source[j + 1])) {\n j++ // Skip decimal point\n while (j < source.length && /\\d/.test(source[j])) j++\n }\n // Handle exponent (1e10, 1.5e-3)\n if (j < source.length && (source[j] === 'e' || source[j] === 'E')) {\n j++\n if (j < source.length && (source[j] === '+' || source[j] === '-')) j++\n while (j < source.length && /\\d/.test(source[j])) j++\n }\n sawContent = true\n i = j\n // Check what's next\n while (i < source.length && /\\s/.test(source[i])) i++\n if (i < source.length && source[i] === '{') {\n // Function body - type ends here\n return {\n type: normalizeUnionSyntax(source.slice(start, j).trim()),\n endPos: j,\n }\n }\n if (source[i] !== '|' && source[i] !== '&') {\n return {\n type: normalizeUnionSyntax(source.slice(start, j).trim()),\n endPos: j,\n }\n }\n continue\n }\n\n // Handle identifiers (null, undefined, true, false, type names)\n if (depth === 0 && /[a-zA-Z_]/.test(char)) {\n let j = i\n while (j < source.length && /\\w/.test(source[j])) j++\n sawContent = true\n i = j\n // Check what's next\n while (i < source.length && /\\s/.test(source[i])) i++\n\n // Identifier followed by ( — constructor/function call as return type\n // e.g. FunctionPredicate('function', { params: ... })\n if (i < source.length && source[i] === '(') {\n depth++\n i++\n continue\n }\n\n if (i < source.length && source[i] === '{') {\n // Check if function body\n const afterBrace = source.slice(i + 1).match(/^\\s*(\\w+)\\s*:/)\n if (!afterBrace) {\n // Function body - type ends before whitespace\n let typeEnd = j\n while (typeEnd > start && /\\s/.test(source[typeEnd - 1])) typeEnd--\n return {\n type: normalizeUnionSyntax(source.slice(start, typeEnd).trim()),\n endPos: j,\n }\n }\n }\n if (source[i] !== '|' && source[i] !== '&') {\n return {\n type: normalizeUnionSyntax(source.slice(start, j).trim()),\n endPos: j,\n }\n }\n continue\n }\n\n i++\n }\n\n // Reached end of source\n if (sawContent) {\n return makeResult(i)\n }\n return null\n}\n\n/**\n * Split parameter string respecting nested braces/brackets\n */\nfunction splitParameters(params: string): string[] {\n const result: string[] = []\n let current = ''\n let depth = 0\n let inLineComment = false\n let inBlockComment = false\n let i = 0\n\n while (i < params.length) {\n const char = params[i]\n const nextChar = params[i + 1]\n\n // Handle line comments - preserve them in output\n if (!inBlockComment && char === '/' && nextChar === '/') {\n inLineComment = true\n current += '//'\n i += 2\n continue\n }\n\n // Handle block comments - preserve them in output\n if (!inLineComment && char === '/' && nextChar === '*') {\n inBlockComment = true\n current += '/*'\n i += 2\n continue\n }\n\n // End of line comment\n if (inLineComment && char === '\\n') {\n inLineComment = false\n current += char\n i++\n continue\n }\n\n // End of block comment - preserve closing\n if (inBlockComment && char === '*' && nextChar === '/') {\n inBlockComment = false\n current += '*/'\n i += 2\n continue\n }\n\n // Inside comments - preserve the content\n if (inLineComment || inBlockComment) {\n current += char\n i++\n continue\n }\n\n if (char === '(' || char === '{' || char === '[') {\n depth++\n current += char\n } else if (char === ')' || char === '}' || char === ']') {\n depth--\n current += char\n } else if (char === ',' && depth === 0) {\n result.push(current)\n current = ''\n } else {\n current += char\n }\n i++\n }\n\n if (current.trim()) {\n result.push(current)\n }\n\n return result\n}\n\n/**\n * Process a parameter string, transforming : to = for required params\n * and recursively handling nested arrow functions\n */\nfunction processParamString(\n params: string,\n ctx: {\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n },\n trackRequired: boolean\n): string {\n // First recursively process any nested arrow functions\n const withArrows = transformParenExpressions(params, {\n originalSource: params,\n requiredParams: ctx.requiredParams,\n unsafeFunctions: ctx.unsafeFunctions,\n safeFunctions: ctx.safeFunctions,\n }).source\n\n // Now split and process each parameter\n const paramList = splitParameters(withArrows)\n let sawOptional = false\n const seenNames = new Set<string>()\n\n // Helper to check for duplicate names\n const checkDuplicate = (name: string) => {\n if (trackRequired && /^\\w+$/.test(name)) {\n if (seenNames.has(name)) {\n throw new Error(`Duplicate parameter name '${name}'`)\n }\n seenNames.add(name)\n }\n }\n\n const processed = paramList.map((param) => {\n const trimmed = param.trim()\n if (!trimmed) return param\n\n // Handle destructured object parameters: { name: 'Clara', age = 30 }\n // Transform colons to equals inside the braces (recursive)\n // Order doesn't matter for objects, so don't enforce required-before-optional\n // ONLY do this when trackRequired is true - i.e., actual function parameters\n if (trackRequired && trimmed.startsWith('{') && trimmed.endsWith('}')) {\n const inner = trimmed.slice(1, -1)\n const processedInner = processDestructuredObjectParams(inner, ctx)\n return `{ ${processedInner} }`\n }\n\n // Handle destructured array parameters: [first: '', second: 0]\n // ONLY do this when trackRequired is true - i.e., actual function parameters\n if (trackRequired && trimmed.startsWith('[') && trimmed.endsWith(']')) {\n const inner = trimmed.slice(1, -1)\n const processedInner = processDestructuredObjectParams(inner, ctx)\n return `[ ${processedInner} ]`\n }\n\n // Handle rest parameters: ...args: [0] -> ...args (strip type, JS forbids defaults on rest)\n // The type annotation is still captured by extractFunctionTypeInfo for __tjs metadata\n if (trimmed.startsWith('...')) {\n const restColonPos = findTopLevelColon(trimmed)\n if (restColonPos !== -1) {\n const restName = trimmed.slice(0, restColonPos).trim()\n return restName\n }\n return param\n }\n\n // Handle optional param syntax: x?: type -> x = type (not required)\n const optionalMatch = trimmed.match(/^(\\w+)\\s*\\?\\s*:\\s*(.+)$/)\n if (optionalMatch) {\n const [, name, type] = optionalMatch\n checkDuplicate(name)\n sawOptional = true\n // Optional params are NOT tracked as required\n return `${name} = ${type}`\n }\n\n // Check if param already has a default value (x = value)\n if (!hasColonNotEquals(trimmed)) {\n // Has equals sign (default value) - this is optional\n // Extract name from \"name = value\" pattern\n const eqMatch = trimmed.match(/^(\\w+)\\s*=/)\n if (eqMatch) {\n checkDuplicate(eqMatch[1])\n }\n sawOptional = true\n return param\n }\n\n // Handle required param syntax: x: type -> x = type (tracked as required)\n const colonPos = findTopLevelColon(trimmed)\n if (colonPos !== -1) {\n const name = trimmed.slice(0, colonPos).trim()\n const type = trimmed.slice(colonPos + 1).trim()\n\n checkDuplicate(name)\n\n // Required param after optional — warn but allow.\n // TypeScript permits this, and the TS→TJS converter can produce it\n // when earlier params degrade to 'any' (bare name, no : or =).\n if (sawOptional && trackRequired && /^\\w+$/.test(name)) {\n // Allow it — JavaScript handles this fine (caller passes undefined)\n }\n\n if (trackRequired && /^\\w+$/.test(name)) {\n ctx.requiredParams.add(name)\n }\n return `${name} = ${type}`\n }\n\n return param\n })\n\n return processed.join(',')\n}\n\n/**\n * Process destructured object/array parameters\n *\n * In TJS destructuring patterns:\n * - `name: 'Clara'` means required param with example (transforms to `name = 'Clara'`)\n * - `age = 30` means optional param with default (stays as `age = 30`)\n * - Nested objects like `address: { street: '9 High St', zip = '0000' }` are tricky:\n * the inner object is a value (object literal), not a pattern, so we transform it back\n *\n * Key insight: In destructuring, `foo: value` at top level is a required param,\n * but at nested levels within an object value, `:` is normal object literal syntax.\n *\n * Order does NOT matter in objects (unlike positional function params).\n */\nfunction processDestructuredObjectParams(\n inner: string,\n ctx: {\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n }\n): string {\n // Split on commas at the top level (respecting nested braces)\n const parts = splitParameters(inner)\n\n const processed = parts.map((part) => {\n const trimmed = part.trim()\n if (!trimmed) return part\n\n // Check for nested destructured object: name: { ... }\n // The inner { ... } is an object literal value, not a destructuring pattern\n const nestedObjectMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\{[\\s\\S]*\\})$/)\n if (nestedObjectMatch) {\n const [, name, objectLiteral] = nestedObjectMatch\n ctx.requiredParams.add(name)\n // Process the inner object as an object literal (transform = to : for values)\n const processedLiteral = processObjectLiteralValue(objectLiteral)\n return `${name} = ${processedLiteral}`\n }\n\n // Check for nested destructured array: name: [ ... ]\n const nestedArrayMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\[[\\s\\S]*\\])$/)\n if (nestedArrayMatch) {\n const [, name, arrayLiteral] = nestedArrayMatch\n ctx.requiredParams.add(name)\n // Process the inner array as an array literal\n const processedLiteral = processArrayLiteralValue(arrayLiteral)\n return `${name} = ${processedLiteral}`\n }\n\n // Handle simple colon syntax: name: 'value' -> name = 'value' (required)\n const colonMatch = trimmed.match(/^(\\w+)\\s*:\\s*([\\s\\S]+)$/)\n if (colonMatch) {\n const [, name, value] = colonMatch\n ctx.requiredParams.add(name)\n return `${name} = ${value}`\n }\n\n // Handle equals syntax: name = value (optional, already valid JS)\n // Just preserve it as-is\n return part\n })\n\n return processed.join(', ')\n}\n\n/**\n * Process an object literal value (nested inside destructuring)\n *\n * In object literals, TJS allows `=` for optional values:\n * { street: '9 High St', zip = '0000' }\n *\n * This must become valid JS object literal syntax:\n * { street: '9 High St', zip: '0000' }\n *\n * (The `=` is TJS shorthand indicating the value is optional/has default,\n * but in an object literal context it must use `:`)\n */\nfunction processObjectLiteralValue(literal: string): string {\n // Remove outer braces, process content, restore braces\n const inner = literal.slice(1, -1).trim()\n const parts = splitParameters(inner)\n\n const processed = parts.map((part) => {\n const trimmed = part.trim()\n if (!trimmed) return part\n\n // Handle nested objects: key: { ... } or key = { ... }\n const nestedObjColonMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\{[\\s\\S]*\\})$/)\n if (nestedObjColonMatch) {\n const [, key, nested] = nestedObjColonMatch\n return `${key}: ${processObjectLiteralValue(nested)}`\n }\n const nestedObjEqualsMatch = trimmed.match(/^(\\w+)\\s*=\\s*(\\{[\\s\\S]*\\})$/)\n if (nestedObjEqualsMatch) {\n const [, key, nested] = nestedObjEqualsMatch\n return `${key}: ${processObjectLiteralValue(nested)}`\n }\n\n // Handle nested arrays: key: [ ... ] or key = [ ... ]\n const nestedArrColonMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\[[\\s\\S]*\\])$/)\n if (nestedArrColonMatch) {\n const [, key, nested] = nestedArrColonMatch\n return `${key}: ${processArrayLiteralValue(nested)}`\n }\n const nestedArrEqualsMatch = trimmed.match(/^(\\w+)\\s*=\\s*(\\[[\\s\\S]*\\])$/)\n if (nestedArrEqualsMatch) {\n const [, key, nested] = nestedArrEqualsMatch\n return `${key}: ${processArrayLiteralValue(nested)}`\n }\n\n // Transform equals to colon for simple values: key = value -> key: value\n const equalsMatch = trimmed.match(/^(\\w+)\\s*=\\s*([\\s\\S]+)$/)\n if (equalsMatch) {\n const [, key, value] = equalsMatch\n return `${key}: ${value}`\n }\n\n // Colon syntax is already valid: key: value\n return part\n })\n\n return `{ ${processed.join(', ')} }`\n}\n\n/**\n * Process an array literal value (nested inside destructuring)\n * Similar to processObjectLiteralValue but for arrays\n */\nfunction processArrayLiteralValue(literal: string): string {\n // Remove outer brackets, process content, restore brackets\n const inner = literal.slice(1, -1).trim()\n const parts = splitParameters(inner)\n\n const processed = parts.map((part) => {\n const trimmed = part.trim()\n if (!trimmed) return part\n\n // Handle nested objects\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\n return processObjectLiteralValue(trimmed)\n }\n\n // Handle nested arrays\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n return processArrayLiteralValue(trimmed)\n }\n\n // Array elements are just values, no transformation needed\n return part\n })\n\n return `[ ${processed.join(', ')} ]`\n}\n\n/**\n * Check if param has a top-level colon but no top-level equals\n * This distinguishes x: type from x = type and handles nested structures\n */\nfunction hasColonNotEquals(param: string): boolean {\n let depth = 0\n let hasColon = false\n let hasEquals = false\n let inString = false\n let stringChar = ''\n\n for (let i = 0; i < param.length; i++) {\n const char = param[i]\n\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n continue\n }\n if (inString) {\n if (char === stringChar && param[i - 1] !== '\\\\') inString = false\n continue\n }\n\n if (char === '(' || char === '{' || char === '[') {\n depth++\n } else if (char === ')' || char === '}' || char === ']') {\n depth--\n } else if (depth === 0) {\n if (char === ':') hasColon = true\n if (char === '=' && param[i + 1] !== '>') hasEquals = true // Ignore =>\n }\n }\n\n return hasColon && !hasEquals\n}\n\n/**\n * Find the position of the first top-level colon in a param\n */\nfunction findTopLevelColon(param: string): number {\n let depth = 0\n let inString = false\n let stringChar = ''\n\n for (let i = 0; i < param.length; i++) {\n const char = param[i]\n\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n continue\n }\n if (inString) {\n if (char === stringChar && param[i - 1] !== '\\\\') inString = false\n continue\n }\n\n if (char === '(' || char === '{' || char === '[') {\n depth++\n } else if (char === ')' || char === '}' || char === ']') {\n depth--\n } else if (depth === 0 && char === ':') {\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Preprocess source to handle custom syntax extensions\n *\n * Transforms:\n * function foo(x: 'example') { }\n * Into:\n * function foo(x = 'example') { }\n * And tracks that 'x' is a required parameter.\n *\n * Also handles return type annotation:\n * function foo(x: 'example') -> { result: 'string' } { }\n */\n",
|
|
9
9
|
"/**\n * Parser source transforms\n *\n * All source-to-source text transforms used by the preprocess pipeline.\n * These operate on raw source strings before Acorn parsing.\n */\n\nimport { SyntaxError } from './types'\n\n/**\n * Extract a brace-balanced value from source after a regex match.\n * Returns a match-like object with [1] being the balanced { ... } content,\n * or null if no match. Handles nested braces.\n */\nfunction extractBalancedValue(\n source: string,\n startRe: RegExp\n): RegExpMatchArray | null {\n const m = source.match(startRe)\n if (!m) return null\n\n const braceStart = m.index! + m[0].length - 1 // position of opening {\n let depth = 1\n let j = braceStart + 1\n while (j < source.length && depth > 0) {\n if (source[j] === '{') depth++\n else if (source[j] === '}') depth--\n j++\n }\n if (depth !== 0) return null\n\n const balanced = source.slice(braceStart, j) // includes { and }\n const result = [m[0].slice(0, -1) + balanced, balanced] as RegExpMatchArray\n result.index = m.index\n return result\n}\nimport type {\n WasmBlock,\n TestBlock,\n ExtensionInfo,\n PolyVariant,\n TokenizerState,\n} from './parser-types'\nimport { extractJSValue } from './parser-params'\n\nexport function transformTryWithoutCatch(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'try' keyword followed by '{'\n const tryMatch = source.slice(i).match(/^\\btry\\s*\\{/)\n if (tryMatch) {\n // Found 'try {', now find the matching closing brace\n const startBrace = i + tryMatch[0].length - 1\n const bodyStart = startBrace + 1\n let depth = 1\n let j = bodyStart\n\n while (j < source.length && depth > 0) {\n const char = source[j]\n if (char === '{') depth++\n else if (char === '}') depth--\n j++\n }\n\n if (depth !== 0) {\n // Unbalanced braces, let the parser handle the error\n result += source[i]\n i++\n continue\n }\n\n // Check what comes after the closing brace\n const afterTry = source.slice(j).match(/^\\s*(catch|finally)\\b/)\n\n if (afterTry) {\n // Has catch or finally - leave it alone, copy the try block as-is\n result += source.slice(i, j)\n i = j\n } else {\n // No catch or finally - add monadic error handler\n // Returns MonadicError to maintain monadic flow (propagates through function chains)\n const body = source.slice(bodyStart, j - 1)\n result += `try {${body}} catch (__try_err) { return new (__tjs?.MonadicError ?? Error)(__try_err?.message || String(__try_err), 'try', undefined, undefined, __tjs?.getStack?.()) }`\n i = j\n }\n } else {\n result += source[i]\n i++\n }\n }\n\n return result\n}\n\n/**\n * Extract WASM blocks from source and replace with runtime dispatch code\n *\n * Simple form (body used as both WASM source and JS fallback):\n * wasm {\n * for (let i = 0; i < arr.length; i++) { arr[i] *= 2 }\n * }\n *\n * With explicit fallback (when you need different JS code):\n * wasm {\n * // WASM-optimized version\n * } fallback {\n * // Different JS implementation\n * }\n *\n * Output:\n * (globalThis.__tjs_wasm_0\n * ? globalThis.__tjs_wasm_0(captures...)\n * : (() => { body })())\n *\n * Variables are auto-captured from the body.\n */\nexport function extractWasmBlocks(source: string): {\n source: string\n blocks: WasmBlock[]\n} {\n const blocks: WasmBlock[] = []\n let result = ''\n let i = 0\n let blockId = 0\n\n while (i < source.length) {\n // Look for 'wasm {' or 'wasm{' - simple block without params\n const wasmMatch = source.slice(i).match(/^\\bwasm\\s*\\{/)\n if (wasmMatch) {\n const matchStart = i\n\n // Find the body\n const bodyStart = i + wasmMatch[0].length\n let braceDepth = 1\n let j = bodyStart\n\n while (j < source.length && braceDepth > 0) {\n const char = source[j]\n if (char === '{') braceDepth++\n else if (char === '}') braceDepth--\n j++\n }\n\n if (braceDepth !== 0) {\n result += source[i]\n i++\n continue\n }\n\n const body = source.slice(bodyStart, j - 1)\n let fallbackBody: string | undefined\n let matchEnd = j\n\n // Check for optional 'fallback {' block\n const fallbackMatch = source.slice(j).match(/^\\s*fallback\\s*\\{/)\n if (fallbackMatch) {\n const fallbackStart = j + fallbackMatch[0].length\n braceDepth = 1\n let k = fallbackStart\n\n while (k < source.length && braceDepth > 0) {\n const char = source[k]\n if (char === '{') braceDepth++\n else if (char === '}') braceDepth--\n k++\n }\n\n if (braceDepth === 0) {\n fallbackBody = source.slice(fallbackStart, k - 1)\n matchEnd = k\n }\n }\n\n // Auto-detect captured variables from the body\n const captureNames = detectCaptures(body)\n\n // Try to find type annotations from enclosing function parameters\n // Look backwards from matchStart to find the function signature\n const captures = captureNames.map((name) => {\n const typeAnnotation = findParameterType(source, matchStart, name)\n return typeAnnotation ? `${name}: ${typeAnnotation}` : name\n })\n\n // Create the block record\n const block: WasmBlock = {\n id: `__tjs_wasm_${blockId}`,\n body,\n fallback: fallbackBody,\n captures,\n start: matchStart,\n end: matchEnd,\n }\n blocks.push(block)\n\n // Generate runtime dispatch code:\n // The fallback is the body itself (or explicit fallback if provided)\n const fallbackCode = fallbackBody ?? body\n // Strip type annotations from captures for runtime args (e.g., \"xs: Float32Array\" -> \"xs\")\n const captureArgNames = captures.map((c) => c.split(':')[0].trim())\n const captureArgs =\n captureArgNames.length > 0 ? captureArgNames.join(', ') : ''\n\n // For WASM: pass captures as arguments\n // For fallback: just run inline (captures are in scope)\n const wasmCall =\n captureArgNames.length > 0\n ? `globalThis.${block.id}(${captureArgs})`\n : `globalThis.${block.id}()`\n\n const dispatch = `(globalThis.${block.id} ? ${wasmCall} : (() => {${fallbackCode}})())`\n\n result += dispatch\n i = matchEnd\n blockId++\n } else {\n result += source[i]\n i++\n }\n }\n\n return { source: result, blocks }\n}\n\n/** Check if an identifier is a WASM SIMD intrinsic (not a captured variable) */\nfunction isWasmIntrinsic(name: string): boolean {\n return name.startsWith('f32x4_') || name.startsWith('v128_')\n}\n\n/**\n * Detect variables captured from enclosing scope\n *\n * Finds identifiers that are:\n * - Used in the body\n * - Not declared within the body (let, const, var, function params)\n *\n * This is a simple heuristic - a full implementation would use proper AST analysis\n */\nfunction detectCaptures(body: string): string[] {\n // Strip comments first to avoid extracting words from comments\n const bodyWithoutComments = body\n .replace(/\\/\\/[^\\n]*/g, '') // line comments\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '') // block comments\n\n // Collect identifiers that appear as property accesses (after a dot)\n const propertyOnly = new Set<string>()\n const propPattern = /\\.([a-zA-Z_$][a-zA-Z0-9_$]*)\\b/g\n let match\n while ((match = propPattern.exec(bodyWithoutComments)) !== null) {\n propertyOnly.add(match[1])\n }\n\n // Find all identifiers used in the body (not after a dot)\n const identifierPattern = /(?<!\\.)(\\b[a-zA-Z_$][a-zA-Z0-9_$]*)\\b/g\n const allIdentifiers = new Set<string>()\n while ((match = identifierPattern.exec(bodyWithoutComments)) !== null) {\n allIdentifiers.add(match[1])\n }\n\n // Remove identifiers that ONLY appear as property accesses\n for (const prop of propertyOnly) {\n if (!allIdentifiers.has(prop)) continue\n // Check if this identifier is also used standalone (not just as .prop)\n const standalonePattern = new RegExp(`(?<!\\\\.)\\\\b${prop}\\\\b`, 'g')\n const dotPattern = new RegExp(`\\\\.${prop}\\\\b`, 'g')\n const standaloneMatches =\n bodyWithoutComments.match(standalonePattern)?.length || 0\n const dotMatches = bodyWithoutComments.match(dotPattern)?.length || 0\n // If every occurrence is a property access, remove it\n if (standaloneMatches <= dotMatches) {\n allIdentifiers.delete(prop)\n }\n }\n\n // Find identifiers declared in the body\n const declared = new Set<string>()\n\n // let/const/var declarations\n const declPattern = /\\b(?:let|const|var)\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g\n while ((match = declPattern.exec(bodyWithoutComments)) !== null) {\n declared.add(match[1])\n }\n\n // for loop variables: for (let i = ...)\n const forPattern =\n /\\bfor\\s*\\(\\s*(?:let|const|var)\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g\n while ((match = forPattern.exec(bodyWithoutComments)) !== null) {\n declared.add(match[1])\n }\n\n // function declarations and parameters would go here for full impl\n\n // JS keywords and builtins to exclude\n const reserved = new Set([\n 'if',\n 'else',\n 'for',\n 'while',\n 'do',\n 'switch',\n 'case',\n 'break',\n 'continue',\n 'return',\n 'function',\n 'let',\n 'const',\n 'var',\n 'new',\n 'this',\n 'true',\n 'false',\n 'null',\n 'undefined',\n 'typeof',\n 'instanceof',\n 'in',\n 'of',\n 'try',\n 'catch',\n 'finally',\n 'throw',\n 'async',\n 'await',\n 'class',\n 'extends',\n 'super',\n 'import',\n 'export',\n 'default',\n 'from',\n 'as',\n 'static',\n 'get',\n 'set',\n 'yield',\n // Common globals\n 'console',\n 'Math',\n 'Array',\n 'Object',\n 'String',\n 'Number',\n 'Boolean',\n 'Date',\n 'JSON',\n 'Promise',\n 'Map',\n 'Set',\n 'WeakMap',\n 'WeakSet',\n 'Float32Array',\n 'Float64Array',\n 'Int8Array',\n 'Int16Array',\n 'Int32Array',\n 'Uint8Array',\n 'Uint16Array',\n 'Uint32Array',\n 'BigInt64Array',\n 'BigUint64Array',\n 'ArrayBuffer',\n 'DataView',\n 'Error',\n 'TypeError',\n 'RangeError',\n 'length',\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'slice',\n 'splice',\n 'map',\n 'filter',\n 'reduce',\n 'forEach',\n 'find',\n 'findIndex',\n 'indexOf',\n 'includes',\n 'globalThis',\n 'window',\n 'document',\n 'Infinity',\n 'NaN',\n 'isNaN',\n 'isFinite',\n 'parseInt',\n 'parseFloat',\n 'encodeURI',\n 'decodeURI',\n 'eval',\n 'wasmBuffer',\n ])\n\n // Return identifiers that are used but not declared or reserved\n const captures: string[] = []\n for (const id of allIdentifiers) {\n if (!declared.has(id) && !reserved.has(id) && !isWasmIntrinsic(id)) {\n captures.push(id)\n }\n }\n\n return captures.sort()\n}\n\n/**\n * Find the type annotation for a parameter in the enclosing function\n *\n * Looks backwards from wasmBlockStart to find the function signature,\n * then extracts the type annotation for the given parameter name.\n *\n * Supports:\n * - TJS colon syntax: `param: Float32Array`\n * - TypeScript syntax: `param: Float32Array`\n */\nfunction findParameterType(\n source: string,\n wasmBlockStart: number,\n paramName: string\n): string | undefined {\n // Look backwards to find the function signature\n // Find the nearest 'function' keyword before the wasm block\n const beforeBlock = source.slice(0, wasmBlockStart)\n\n // Match function declaration with parameters\n // This regex finds function signatures and captures the parameter list\n const funcPattern = /function\\s+\\w+\\s*\\(([^)]*)\\)\\s*(?:->.*?)?\\s*\\{[^}]*$/\n const match = beforeBlock.match(funcPattern)\n\n if (!match) {\n // Try arrow function or method syntax\n const arrowPattern =\n /(?:const|let|var)?\\s*\\w+\\s*=\\s*(?:async\\s*)?\\(([^)]*)\\)\\s*(?:=>|->)?\\s*\\{[^}]*$/\n const arrowMatch = beforeBlock.match(arrowPattern)\n if (!arrowMatch) return undefined\n return extractTypeFromParams(arrowMatch[1], paramName)\n }\n\n return extractTypeFromParams(match[1], paramName)\n}\n\n/**\n * Extract the type annotation for a specific parameter from a parameter list string\n */\nfunction extractTypeFromParams(\n paramsStr: string,\n paramName: string\n): string | undefined {\n // Split by comma (handling nested structures)\n const params = paramsStr.split(',').map((p) => p.trim())\n\n for (const param of params) {\n // Match patterns like:\n // - `name: Float32Array`\n // - `name: number`\n // - `name = Float32Array` (TJS example syntax)\n const colonMatch = param.match(\n new RegExp(`^${paramName}\\\\s*:\\\\s*([A-Za-z][A-Za-z0-9]*)`)\n )\n if (colonMatch) {\n return colonMatch[1]\n }\n\n // Match TypeScript-style with equals (default value that's a type constructor)\n const equalsMatch = param.match(\n new RegExp(\n `^${paramName}\\\\s*=\\\\s*(Float32Array|Float64Array|Int32Array|Uint8Array|Int8Array|Int16Array|Uint16Array|Uint32Array)`\n )\n )\n if (equalsMatch) {\n return equalsMatch[1]\n }\n }\n\n return undefined\n}\n\n/**\n * Transform Is/IsNot infix operators to function calls\n *\n * Syntax:\n * a Is b -> Is(a, b)\n * a IsNot b -> IsNot(a, b)\n *\n * This enables structural equality with a clean syntax.\n */\nexport function transformIsOperators(source: string): string {\n // Match: (simpleExpr) IsNot (simpleExpr) - must check IsNot first (longer match)\n // simpleExpr = identifier chain with optional [], () OR literals\n const exprPat =\n '([\\\\w][\\\\w.\\\\[\\\\]()]*|null|undefined|true|false|\\\\d+(?:\\\\.\\\\d+)?|\\'[^\\']*\\'|\"[^\"]*\")'\n\n // Transform IsNot first (longer keyword)\n const isNotRegex = new RegExp(exprPat + '\\\\s+IsNot\\\\s+' + exprPat, 'g')\n source = source.replace(isNotRegex, 'IsNot($1, $2)')\n\n // Transform Is\n const isRegex = new RegExp(exprPat + '\\\\s+Is\\\\s+' + exprPat, 'g')\n source = source.replace(isRegex, 'Is($1, $2)')\n\n return source\n}\n\n/**\n * Insert semicolons to prevent ASI footguns (TjsStandard mode)\n *\n * JavaScript's ASI (Automatic Semicolon Insertion) has notorious footguns:\n *\n * foo // Intended: call foo, then IIFE\n * (() => {})() // Actual: foo(...)(...) - calls foo with IIFE as argument!\n *\n * TjsStandard prevents this by treating newlines as statement terminators\n * (like Go, Swift, Kotlin). When a line starts with a problematic character\n * that could continue the previous line, we insert a semicolon.\n *\n * Problematic line starts: ( [ / + - `\n *\n * We only insert when the previous line doesn't already end with:\n * - A semicolon\n * - An opening brace/bracket/paren (multi-line expression)\n * - A comma (array/object literal or params)\n * - An operator that clearly continues (+, -, *, /, =, etc.)\n * - A keyword that expects continuation (return, throw, etc. followed by value)\n */\nexport function insertAsiProtection(source: string): string {\n // Characters that can continue a previous expression (ASI footguns)\n const continuationStarts = /^[\\s]*[([/+\\-`]/\n\n // Characters/patterns that indicate the previous line expects continuation\n // (don't insert semicolon after these)\n const expectsContinuation = /[{([,;:+\\-*/%=&|?<>!~^]\\s*$|^\\s*$/\n\n // Keywords that expect an expression to follow on same or next line\n const continueKeywords =\n /\\b(return|throw|yield|await|case|default|extends|new|typeof|void|delete|in|of|instanceof)\\s*$/\n\n const lines = source.split('\\n')\n const result: string[] = []\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n const prevLine = i > 0 ? lines[i - 1] : ''\n\n // Check if this line starts with a problematic character\n if (i > 0 && continuationStarts.test(line)) {\n // Get the previous line without trailing comment\n const prevNoComment = prevLine\n .replace(/\\/\\/.*$/, '')\n .replace(/\\/\\*.*\\*\\/\\s*$/, '')\n\n // Don't insert if prev line clearly expects continuation\n if (\n !expectsContinuation.test(prevNoComment) &&\n !continueKeywords.test(prevNoComment)\n ) {\n // Insert semicolon at start of this line (preserving whitespace)\n const match = line.match(/^(\\s*)/)\n const indent = match ? match[1] : ''\n const rest = line.slice(indent.length)\n result.push(indent + ';' + rest)\n continue\n }\n }\n\n result.push(line)\n }\n\n return result.join('\\n')\n}\n\n/**\n * Transform == and != to Is() and IsNot() calls\n *\n * In TJS normal mode:\n * a == b -> Is(a, b) (structural equality)\n * a != b -> IsNot(a, b) (structural inequality)\n * a === b -> a === b (identity, unchanged)\n *\n * Uses a two-pass algorithm:\n * 1. Find all == and != positions (outside strings/comments/regex)\n * 2. Transform from end to start (so positions remain valid)\n */\nexport function transformEqualityToStructural(source: string): string {\n // Transform typeof to TypeOf() — fixes typeof null === 'object'\n source = source.replace(\n /\\btypeof\\s+([a-zA-Z_$][\\w$.]*(?:\\?\\.[\\w$]+)*)/g,\n 'TypeOf($1)'\n )\n\n // First pass: find all == and != positions (outside strings/comments/regex)\n const equalityOps: Array<{ pos: number; op: '==' | '!=' }> = []\n let i = 0\n let state: TokenizerState = 'normal'\n const templateStack: number[] = []\n\n while (i < source.length) {\n const char = source[i]\n const nextChar = source[i + 1]\n\n // Handle state transitions\n switch (state) {\n case 'single-string':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === \"'\") state = 'normal'\n i++\n continue\n\n case 'double-string':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === '\"') state = 'normal'\n i++\n continue\n\n case 'template-string':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === '$' && nextChar === '{') {\n i += 2\n templateStack.push(1)\n state = 'normal'\n continue\n }\n if (char === '`') state = 'normal'\n i++\n continue\n\n case 'line-comment':\n if (char === '\\n') state = 'normal'\n i++\n continue\n\n case 'block-comment':\n if (char === '*' && nextChar === '/') {\n i += 2\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'regex':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === '[') {\n i++\n while (i < source.length && source[i] !== ']') {\n if (source[i] === '\\\\' && i + 1 < source.length) {\n i += 2\n } else {\n i++\n }\n }\n if (i < source.length) i++\n continue\n }\n if (char === '/') {\n i++\n while (i < source.length && /[gimsuy]/.test(source[i])) i++\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'normal':\n // Handle template stack\n if (templateStack.length > 0) {\n if (char === '{') {\n templateStack[templateStack.length - 1]++\n } else if (char === '}') {\n templateStack[templateStack.length - 1]--\n if (templateStack[templateStack.length - 1] === 0) {\n templateStack.pop()\n i++\n state = 'template-string'\n continue\n }\n }\n }\n\n // Check for string/comment/regex start\n if (char === \"'\") {\n i++\n state = 'single-string'\n continue\n }\n if (char === '\"') {\n i++\n state = 'double-string'\n continue\n }\n if (char === '`') {\n i++\n state = 'template-string'\n continue\n }\n if (char === '/' && nextChar === '/') {\n i += 2\n state = 'line-comment'\n continue\n }\n if (char === '/' && nextChar === '*') {\n i += 2\n state = 'block-comment'\n continue\n }\n\n // Check for regex literal (simplified detection)\n if (char === '/') {\n let j = i - 1\n while (j >= 0 && /\\s/.test(source[j])) j--\n const beforeChar = j >= 0 ? source[j] : ''\n const isRegexContext =\n !beforeChar ||\n /[=(!,;:{[&|?+\\-*%<>~^]/.test(beforeChar) ||\n (j >= 5 &&\n /\\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)$/.test(\n source.slice(Math.max(0, j - 10), j + 1)\n ))\n if (isRegexContext) {\n i++\n state = 'regex'\n continue\n }\n }\n\n // Look for == or != (but not === or !==)\n // For ==: check it's not part of !== (char before is !)\n // For !=: check it's not !== (third char is =)\n if (\n char === '=' &&\n nextChar === '=' &&\n source[i + 2] !== '=' &&\n source[i - 1] !== '!'\n ) {\n equalityOps.push({ pos: i, op: '==' })\n i += 2\n continue\n }\n if (char === '!' && nextChar === '=' && source[i + 2] !== '=') {\n equalityOps.push({ pos: i, op: '!=' })\n i += 2\n continue\n }\n break\n }\n\n i++\n }\n\n // If no equality operators found, return source unchanged\n if (equalityOps.length === 0) {\n return source\n }\n\n // Second pass: transform from end to start (so positions remain valid)\n let result = source\n for (let k = equalityOps.length - 1; k >= 0; k--) {\n const { pos, op } = equalityOps[k]\n const funcName = op === '==' ? 'Eq' : 'NotEq'\n\n // Find left operand boundary\n const leftBoundary = findLeftOperandBoundary(result, pos)\n // Find right operand boundary\n const rightBoundary = findRightOperandBoundary(result, pos + 2)\n\n const leftExpr = result.slice(leftBoundary, pos).trim()\n const rightExpr = result.slice(pos + 2, rightBoundary).trim()\n\n if (leftExpr && rightExpr) {\n // Build the replacement\n const before = result.slice(0, leftBoundary)\n const after = result.slice(rightBoundary)\n // Add space after keyword if needed (e.g., return, throw, typeof)\n const needsSpace = /[a-zA-Z0-9_$]$/.test(before)\n const spacer = needsSpace ? ' ' : ''\n result = `${before}${spacer}${funcName}(${leftExpr}, ${rightExpr})${after}`\n }\n }\n\n return result\n}\n\n/**\n * Find the start position of the left operand\n *\n * Scans backwards from the operator position to find where the left expression starts.\n * Respects operator precedence: == has lower precedence than arithmetic operators,\n * so `x % 2 == 0` has left operand `x % 2`.\n */\nfunction findLeftOperandBoundary(source: string, opPos: number): number {\n let i = opPos - 1\n\n // Skip whitespace before operator\n while (i >= 0 && /\\s/.test(source[i])) i--\n if (i < 0) return 0\n\n let depth = 0\n let inString = false\n let stringChar = ''\n\n while (i >= 0) {\n const char = source[i]\n const prevChar = i > 0 ? source[i - 1] : ''\n\n // Handle string literals (scan backwards through them)\n if (inString) {\n if (char === stringChar && prevChar !== '\\\\') {\n inString = false\n }\n i--\n continue\n }\n\n // Check for string end (we're scanning backwards, so end is opening quote)\n if ((char === '\"' || char === \"'\" || char === '`') && prevChar !== '\\\\') {\n inString = true\n stringChar = char\n i--\n continue\n }\n\n // Track depth of parens/brackets/braces (reversed since we're going backwards)\n if (char === ')' || char === ']' || char === '}') {\n depth++\n i--\n continue\n }\n if (char === '(' || char === '[') {\n if (depth > 0) {\n depth--\n i--\n continue\n }\n // Opening paren/bracket at depth 0 - this is a grouping/call paren\n // The expression starts AFTER it, not including it\n return i + 1\n }\n if (char === '{') {\n if (depth > 0) {\n depth--\n i--\n continue\n }\n // Opening brace at depth 0 — could be block statement boundary\n return i + 1\n }\n\n // Inside nested expression - keep scanning\n if (depth > 0) {\n i--\n continue\n }\n\n // At depth 0 - check for expression boundaries\n // Statement delimiters\n if (char === ';') {\n return i + 1\n }\n\n // Check for keywords that precede expressions (return, throw, etc.)\n // We need to look backwards for a word boundary and check if it's a keyword\n if (/[a-z]/.test(char)) {\n // Might be end of a keyword - scan backwards to get full word\n const wordEnd = i + 1\n let wordStart = i\n while (wordStart > 0 && /[a-z]/i.test(source[wordStart - 1])) {\n wordStart--\n }\n const word = source.slice(wordStart, wordEnd)\n // Check if preceded by word char (not a keyword then)\n const beforeWord = wordStart > 0 ? source[wordStart - 1] : ''\n if (!/[a-zA-Z0-9_$]/.test(beforeWord)) {\n // These keywords start an expression - stop after them\n if (\n [\n 'return',\n 'throw',\n 'case',\n 'typeof',\n 'void',\n 'delete',\n 'await',\n 'yield',\n ].includes(word)\n ) {\n return wordEnd\n }\n // 'new' is part of the operand (new Foo() == bar),\n // so include it by continuing the scan\n if (word === 'new') {\n return wordStart\n }\n }\n }\n\n // Arrow function - stop before =>\n if (char === '>' && prevChar === '=') {\n return i + 1\n }\n\n // Assignment operator (but not ==, !=, <=, >=)\n if (\n char === '=' &&\n prevChar !== '=' &&\n prevChar !== '!' &&\n prevChar !== '<' &&\n prevChar !== '>'\n ) {\n return i + 1\n }\n\n // Logical operators (lower precedence than ==)\n if (char === '&' && prevChar === '&') {\n return i + 1\n }\n if (char === '|' && prevChar === '|') {\n return i + 1\n }\n\n // Ternary operators\n if (char === '?' || char === ':') {\n return i + 1\n }\n\n // Comma\n if (char === ',') {\n return i + 1\n }\n\n i--\n }\n\n return 0\n}\n\n/**\n * Find the end position of the right operand\n *\n * Scans forward from after the operator to find where the right expression ends.\n */\nfunction findRightOperandBoundary(\n source: string,\n startAfterOp: number\n): number {\n let i = startAfterOp\n\n // Skip whitespace after operator\n while (i < source.length && /\\s/.test(source[i])) i++\n if (i >= source.length) return source.length\n\n let depth = 0\n let inString = false\n let stringChar = ''\n\n while (i < source.length) {\n const char = source[i]\n const nextChar = i + 1 < source.length ? source[i + 1] : ''\n\n // Handle string literals\n if (inString) {\n if (char === stringChar && source[i - 1] !== '\\\\') {\n inString = false\n }\n i++\n continue\n }\n\n if (\n (char === '\"' || char === \"'\" || char === '`') &&\n source[i - 1] !== '\\\\'\n ) {\n inString = true\n stringChar = char\n i++\n continue\n }\n\n // Track depth\n if (char === '(' || char === '[' || char === '{') {\n depth++\n i++\n continue\n }\n if (char === ')' || char === ']' || char === '}') {\n if (depth > 0) {\n depth--\n i++\n continue\n }\n // Closing paren at depth 0 - boundary\n return i\n }\n\n // Inside nested - keep scanning\n if (depth > 0) {\n i++\n continue\n }\n\n // At depth 0 - check for expression boundaries\n if (char === ';') {\n return i\n }\n\n // Logical operators - lower precedence than ==\n if (char === '&' && nextChar === '&') {\n return i\n }\n if (char === '|' && nextChar === '|') {\n return i\n }\n\n // Ternary\n if (char === '?') {\n return i\n }\n if (char === ':') {\n return i\n }\n\n // Comma\n if (char === ',') {\n return i\n }\n\n // Another == or != (chained equality - stop before it)\n if (\n (char === '=' || char === '!') &&\n nextChar === '=' &&\n source[i + 2] !== '='\n ) {\n return i\n }\n\n i++\n }\n\n return source.length\n}\n\n/**\n * Transform Type block declarations\n *\n * Syntax forms:\n * Type Foo 'example' -> const Foo = Type('Foo', 'example')\n * Type Foo { example: 'value' } -> const Foo = Type('Foo', 'value')\n * Type Foo 'description' { example: 'value' }\n * -> const Foo = Type('description', 'value')\n * Type Foo 'description' { example: 0, predicate(x) { return x > 0 } }\n * -> const Foo = Type('description', (x) => { ... }, 0)\n *\n * When predicate + example: auto-generate type guard from example\n */\nexport function transformTypeDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Type' keyword followed by identifier\n const typeMatch = source\n .slice(i)\n .match(/^\\bType\\s+([A-Z_][a-zA-Z0-9_]*)\\s*/)\n if (typeMatch) {\n const typeName = typeMatch[1]\n let j = i + typeMatch[0].length\n\n // Check for optional description string\n // Only treat as description if followed by = or {\n let description = typeName\n let descriptionWasExplicit = false\n const descStringMatch = source.slice(j).match(/^(['\"`])([^]*?)\\1\\s*/)\n if (descStringMatch) {\n const afterString = j + descStringMatch[0].length\n const nextChar = source[afterString]\n // Check if this looks like end of statement (not followed by = or {)\n // Note: the \\s* in the regex consumes trailing whitespace including newlines\n const isEndOfStatement =\n nextChar === undefined ||\n afterString >= source.length ||\n (nextChar !== '=' && nextChar !== '{')\n\n if (nextChar === '=' || nextChar === '{') {\n // It's a description followed by = or { block\n description = descStringMatch[2]\n descriptionWasExplicit = true\n j = afterString\n } else if (isEndOfStatement) {\n // Old simple form: Type Name 'value' - value is both example and default\n const value = descStringMatch[0].trim()\n // Preserve trailing whitespace (newlines) that was consumed by the regex\n const trailingWs = descStringMatch[0].slice(value.length)\n result += `const ${typeName} = Type('${typeName}', ${value})${trailingWs}`\n i = afterString\n continue\n }\n }\n\n // Check for = default value\n let defaultValue: string | undefined\n let posAfterDefault = j // Track position right after the default value\n const equalsMatch = source.slice(j).match(/^=\\s*/)\n if (equalsMatch) {\n j += equalsMatch[0].length\n // Parse the default value (handles +number, strings, objects, arrays, etc.)\n const valueMatch = source\n .slice(j)\n .match(\n /^(\\+?\\d+(?:\\.\\d+)?|['\"`][^'\"`]*['\"`]|\\{[^}]*\\}|\\[[^\\]]*\\]|true|false|null)/\n )\n if (valueMatch) {\n defaultValue = valueMatch[0]\n j += valueMatch[0].length\n posAfterDefault = j // Save position before consuming whitespace\n // Skip whitespace after default (only to check for block)\n const wsMatch = source.slice(j).match(/^\\s*/)\n if (wsMatch) j += wsMatch[0].length\n }\n }\n\n // Check for block { ... }\n if (source[j] === '{') {\n // Block form: Type Foo 'desc'? = default? { ... }\n const bodyStart = j + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n // Unbalanced - just copy and continue\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse block body for description (old syntax fallback), example, predicate\n const descInsideMatch = blockBody.match(\n /description\\s*:\\s*(['\"`])([^]*?)\\1/\n )\n if (descInsideMatch && !descriptionWasExplicit) {\n description = descInsideMatch[2]\n }\n\n // Extract example value using state machine for nested structures\n let example: string | undefined\n const exampleKeyword = blockBody.match(/example\\s*:\\s*/)\n if (exampleKeyword) {\n const valueStart = exampleKeyword.index! + exampleKeyword[0].length\n const extracted = extractJSValue(blockBody, valueStart)\n if (extracted) {\n example = extracted.value.trim()\n }\n }\n\n const predicateMatch = blockBody.match(\n /predicate\\s*\\(([^)]*)\\)\\s*\\{([^]*)\\}/\n )\n\n // Build Type() call with appropriate arguments\n // Type(description, predicateOrExample, example?, default?)\n if (predicateMatch && example) {\n // Predicate + example\n const params = predicateMatch[1].trim()\n const body = predicateMatch[2].trim()\n const defaultArg = defaultValue ? `, ${defaultValue}` : ''\n result += `const ${typeName} = Type('${description}', (${params}) => { if (!globalThis.__tjs?.validate(${params}, globalThis.__tjs?.infer(${example}))) return false; ${body} }, ${example}${defaultArg})`\n } else if (predicateMatch) {\n // Predicate only\n const params = predicateMatch[1].trim()\n const body = predicateMatch[2].trim()\n const defaultArg = defaultValue ? `, undefined, ${defaultValue}` : ''\n result += `const ${typeName} = Type('${description}', (${params}) => { ${body} }${defaultArg})`\n } else if (example) {\n // Example only (becomes validation schema)\n const defaultArg = defaultValue ? `, ${defaultValue}` : ''\n result += `const ${typeName} = Type('${description}', undefined, ${example}${defaultArg})`\n } else if (defaultValue) {\n // Default only (infer schema from default)\n result += `const ${typeName} = Type('${description}', ${defaultValue})`\n } else {\n // Empty block - error or description-only type\n result += `const ${typeName} = Type('${description}')`\n }\n\n i = blockEnd\n continue\n } else if (defaultValue) {\n // Simple form with default: Type Foo = 'value' or Type Foo 'desc' = 'value'\n result += `const ${typeName} = Type('${description}', ${defaultValue})`\n i = posAfterDefault // Use position before whitespace was consumed\n continue\n } else if (!descStringMatch) {\n // No description, no default, no block - look for old simple form: Type Foo 'value'\n const valueMatch = source\n .slice(j)\n .match(\n /^(['\"`][^]*?['\"`]|\\+?\\d+(?:\\.\\d+)?|true|false|null|\\{[^]*?\\}|\\[[^]*?\\])/\n )\n if (valueMatch) {\n const example = valueMatch[0]\n result += `const ${typeName} = Type('${typeName}', ${example})`\n i = j + valueMatch[0].length\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Transform FunctionPredicate declarations\n *\n * Block form:\n * FunctionPredicate Callback {\n * params: { x: 0, y: '' }\n * returns: false\n * }\n * → const Callback = FunctionPredicate('Callback', { params: { x: 0, y: '' }, returns: false })\n *\n * Generic block form:\n * FunctionPredicate Creator<T = {}> {\n * params: { contents: [null] }\n * returns: T\n * }\n * → const Creator = FunctionPredicate('Creator', [['T', {}]], (T) => ({ params: { contents: [null] }, returns: T }))\n *\n * Function form:\n * FunctionPredicate Handler(existingFn, 'description')\n * → const Handler = FunctionPredicate('description', existingFn)\n */\nexport function transformFunctionPredicateDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n const fpMatch = source\n .slice(i)\n .match(/^\\bFunctionPredicate\\s+([A-Z_][a-zA-Z0-9_]*)\\s*(?:<([^>]+)>)?\\s*/)\n if (fpMatch) {\n const fpName = fpMatch[1]\n const typeParamsStr = fpMatch[2] // undefined if no <...>\n const j = i + fpMatch[0].length\n\n // Check for block form: FunctionPredicate Name { ... } or FunctionPredicate Name<T> { ... }\n if (source[j] === '{') {\n // Find matching closing brace\n let depth = 1\n let k = j + 1\n while (k < source.length && depth > 0) {\n if (source[k] === '{') depth++\n else if (source[k] === '}') depth--\n k++\n }\n\n if (depth === 0) {\n const blockBody = source.slice(j + 1, k - 1).trim()\n\n // Extract params: { ... } (brace-balanced for nested objects like { el: {} })\n const paramsMatch = extractBalancedValue(blockBody, /params\\s*:\\s*\\{/)\n // Extract returns value\n const returnsMatch = blockBody.match(/returns\\s*:\\s*(.+?)(?:\\n|$)/)\n // Extract returnContract\n const contractMatch = blockBody.match(\n /returnContract\\s*:\\s*['\"](\\w+)['\"]/\n )\n // Extract description\n const descMatch = blockBody.match(/description\\s*:\\s*(['\"])([^]*?)\\1/)\n\n const spec: string[] = []\n if (paramsMatch) spec.push(`params: ${paramsMatch[1]}`)\n if (returnsMatch) spec.push(`returns: ${returnsMatch[1].trim()}`)\n if (contractMatch) {\n spec.push(`returnContract: '${contractMatch[1]}'`)\n }\n\n const desc = descMatch ? descMatch[2] : fpName\n\n if (typeParamsStr) {\n // Generic form — emit factory with type params\n const typeParams = typeParamsStr.split(',').map((p) => {\n const parts = p\n .trim()\n .split('=')\n .map((s) => s.trim())\n if (parts.length === 2) {\n const defaultVal =\n parts[1] === 'any' || parts[1] === 'undefined'\n ? 'null'\n : parts[1]\n return `['${parts[0]}', ${defaultVal}]`\n }\n return `'${parts[0]}'`\n })\n const paramNames = typeParamsStr\n .split(',')\n .map((p) => p.trim().split('=')[0].trim())\n result += `const ${fpName} = FunctionPredicate('${desc}', [${typeParams.join(\n ', '\n )}], (${paramNames.join(', ')}) => ({ ${spec.join(', ')} }))`\n } else {\n // Non-generic form\n result += `const ${fpName} = FunctionPredicate('${desc}', { ${spec.join(\n ', '\n )} })`\n }\n i = k\n continue\n }\n }\n\n // Check for function form: FunctionPredicate Name(fn, 'desc')\n if (source[j] === '(') {\n // Find matching closing paren\n let depth = 1\n let k = j + 1\n while (k < source.length && depth > 0) {\n if (source[k] === '(') depth++\n else if (source[k] === ')') depth--\n k++\n }\n\n if (depth === 0) {\n const args = source.slice(j + 1, k - 1).trim()\n // Split on comma: fn, 'description'\n const commaIdx = args.indexOf(',')\n if (commaIdx !== -1) {\n const fnRef = args.slice(0, commaIdx).trim()\n const desc = args.slice(commaIdx + 1).trim()\n result += `const ${fpName} = FunctionPredicate(${desc}, ${fnRef})`\n } else {\n // Just a function reference, name as description\n result += `const ${fpName} = FunctionPredicate('${fpName}', ${args})`\n }\n i = k\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Transform Generic block declarations\n *\n * Syntax:\n * Generic Pair<T, U> { description: '...', predicate(obj, T, U) { ... } }\n * Generic Container<T, U = ''> { ... } // U has default\n *\n * Transforms to:\n * const Pair = Generic(['T', 'U'], (obj, checkT, checkU) => { ... }, '...')\n * const Container = Generic(['T', ['U', '']], (obj, checkT, checkU) => { ... }, '...')\n */\nexport function transformGenericDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Generic' keyword followed by identifier and type params\n const genericMatch = source\n .slice(i)\n .match(/^\\bGeneric\\s+([A-Z][a-zA-Z0-9_]*)\\s*<([^>]+)>\\s*\\{/)\n if (genericMatch) {\n const genericName = genericMatch[1]\n const typeParamsStr = genericMatch[2]\n const blockStart = i + genericMatch[0].length - 1\n const bodyStart = blockStart + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n // Unbalanced - just copy and continue\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse type params: T, U = Default\n const typeParams = typeParamsStr.split(',').map((p) => {\n const parts = p\n .trim()\n .split('=')\n .map((s) => s.trim())\n if (parts.length === 2) {\n // 'any' and 'undefined' aren't valid JS values — use null\n const defaultVal =\n parts[1] === 'any' || parts[1] === 'undefined' ? 'null' : parts[1]\n return `['${parts[0]}', ${defaultVal}]`\n }\n return `'${parts[0]}'`\n })\n\n // Parse the block body\n // Strip declaration { ... } block before parsing (it's .d.ts metadata, not runtime)\n let parsedBody = blockBody\n const declIdx = parsedBody.search(/\\bdeclaration\\s*\\{/)\n if (declIdx !== -1) {\n // Find matching closing brace for the declaration block\n const declBraceStart = parsedBody.indexOf('{', declIdx)\n let dDepth = 1\n let dj = declBraceStart + 1\n while (dj < parsedBody.length && dDepth > 0) {\n if (parsedBody[dj] === '{') dDepth++\n else if (parsedBody[dj] === '}') dDepth--\n dj++\n }\n // Remove the declaration block\n parsedBody = parsedBody.slice(0, declIdx) + parsedBody.slice(dj)\n }\n\n const descMatch = parsedBody.match(/description\\s*:\\s*(['\"`])([^]*?)\\1/)\n const predicateMatch = parsedBody.match(\n /predicate\\s*\\(([^)]*)\\)\\s*\\{([^]*)\\}/\n )\n\n const description = descMatch ? descMatch[2] : genericName\n\n if (predicateMatch) {\n const params = predicateMatch[1]\n .trim()\n .split(',')\n .map((s) => s.trim())\n let body = predicateMatch[2].trim()\n\n // First param is the value, rest are type params\n const valueParam = params[0] || 'x'\n const typeParamNames = params.slice(1)\n const typeCheckParams = typeParamNames.map((p) => `check${p}`)\n\n // Replace type param names with check functions in body\n // e.g., T(x[0]) becomes checkT(x[0])\n typeParamNames.forEach((name, idx) => {\n body = body.replace(\n new RegExp(`\\\\b${name}\\\\s*\\\\(`, 'g'),\n `${typeCheckParams[idx]}(`\n )\n })\n\n result += `const ${genericName} = Generic([${typeParams.join(\n ', '\n )}], (${valueParam}, ${typeCheckParams.join(\n ', '\n )}) => { ${body} }, '${description}')`\n } else {\n // No predicate - create a generic that always passes\n result += `const ${genericName} = Generic([${typeParams.join(\n ', '\n )}], () => true, '${description}')`\n }\n\n i = blockEnd\n continue\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Transform Union declarations\n *\n * Syntax:\n * Union Direction 'cardinal direction' {\n * 'up' | 'down' | 'left' | 'right'\n * }\n *\n * Transforms to:\n * const Direction = Union('cardinal direction', ['up', 'down', 'left', 'right'])\n *\n * Also supports inline form:\n * Union Direction 'cardinal direction' 'up' | 'down' | 'left' | 'right'\n */\nexport function transformUnionDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Union' keyword followed by identifier and description\n const unionMatch = source\n .slice(i)\n .match(/^\\bUnion\\s+([A-Z][a-zA-Z0-9_]*)\\s+(['\"`])([^]*?)\\2\\s*/)\n if (unionMatch) {\n const unionName = unionMatch[1]\n const description = unionMatch[3]\n const j = i + unionMatch[0].length\n\n // Check what follows: block or inline values\n if (source[j] === '{') {\n // Block form: Union Foo 'desc' { ... }\n const bodyStart = j + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse values: 'a' | 'b' | 'c' or \"a\" | \"b\" or mixed\n const values = parseUnionValues(blockBody)\n result += `const ${unionName} = Union('${description}', [${values.join(\n ', '\n )}])`\n i = blockEnd\n continue\n } else {\n // Inline form: Union Foo 'desc' 'a' | 'b' | 'c'\n // Find the end of the line or statement\n let lineEnd = source.indexOf('\\n', j)\n if (lineEnd === -1) lineEnd = source.length\n const inlineValues = source.slice(j, lineEnd).trim()\n\n if (inlineValues) {\n const values = parseUnionValues(inlineValues)\n result += `const ${unionName} = Union('${description}', [${values.join(\n ', '\n )}])`\n i = lineEnd\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Parse union values from a string like: 'a' | 'b' | 123 | true\n * Returns array of value literals as strings\n */\nfunction parseUnionValues(input: string): string[] {\n const values: string[] = []\n // Split on | and trim, preserving quoted strings and literals\n const parts = input.split('|').map((p) => p.trim())\n\n for (const part of parts) {\n if (!part) continue\n // Keep the value as-is (already a valid JS literal)\n values.push(part)\n }\n\n return values\n}\n\n/**\n * Transform Enum declarations\n *\n * Syntax:\n * Enum Status 'task status' {\n * Pending\n * Active\n * Done\n * }\n *\n * Enum Color 'CSS color' {\n * Red = 'red'\n * Green = 'green'\n * Blue = 'blue'\n * }\n *\n * Transforms to:\n * const Status = Enum('task status', { Pending: 0, Active: 1, Done: 2 })\n * const Color = Enum('CSS color', { Red: 'red', Green: 'green', Blue: 'blue' })\n */\nexport function transformEnumDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Enum' keyword followed by identifier and description\n const enumMatch = source\n .slice(i)\n .match(/^\\bEnum\\s+([A-Z][a-zA-Z0-9_]*)\\s+(['\"`])([^]*?)\\2\\s*\\{/)\n if (enumMatch) {\n const enumName = enumMatch[1]\n const description = enumMatch[3]\n const blockStart = i + enumMatch[0].length - 1\n const bodyStart = blockStart + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse enum members\n const members = parseEnumMembers(blockBody)\n const membersStr = members\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ')\n\n result += `const ${enumName} = Enum('${description}', { ${membersStr} })`\n i = blockEnd\n continue\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Parse enum members from block body\n * Handles: Pending, Active = 5, Done, Name = 'value'\n * Returns array of [key, value] pairs\n */\nfunction parseEnumMembers(input: string): [string, string][] {\n const members: [string, string][] = []\n let currentNumericValue = 0\n\n // Split on newlines and commas, filter empty\n const lines = input\n .split(/[\\n,]/)\n .map((l) => l.trim())\n .filter((l) => l && !l.startsWith('//'))\n\n for (const line of lines) {\n // Match: Name or Name = value\n const match = line.match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*(?:=\\s*(.+))?$/)\n if (match) {\n const key = match[1]\n const explicitValue = match[2]?.trim()\n\n if (explicitValue !== undefined) {\n members.push([key, explicitValue])\n // If it's a number, update the counter\n const numVal = Number(explicitValue)\n if (!isNaN(numVal)) {\n currentNumericValue = numVal + 1\n }\n } else {\n // Auto-increment numeric value\n members.push([key, String(currentNumericValue)])\n currentNumericValue++\n }\n }\n }\n\n return members\n}\n\n/**\n * Extension info for a single extend block\n */\n\nexport function transformExtendDeclarations(source: string): {\n source: string\n extensions: Map<string, Set<string>>\n} {\n const extensions = new Map<string, Set<string>>()\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'extend' keyword at statement boundary\n const remaining = source.slice(i)\n const extendMatch = remaining.match(/^(\\s*)extend\\s+([A-Z]\\w*)\\s*\\{/)\n\n if (!extendMatch) {\n // Check if we're at start of line or after semicolon/brace\n const lineStart =\n i === 0 ||\n source[i - 1] === '\\n' ||\n source[i - 1] === ';' ||\n source[i - 1] === '}'\n\n if (lineStart) {\n const afterWS = remaining.match(/^(\\s*)extend\\s+([A-Z]\\w*)\\s*\\{/)\n if (afterWS) {\n // Already handled above, fall through\n }\n }\n result += source[i]\n i++\n continue\n }\n\n const indent = extendMatch[1]\n const typeName = extendMatch[2]\n const blockStart = i + extendMatch[0].length - 1 // position of {\n\n // Find matching closing brace\n const blockEnd = findFunctionBodyEnd(source, blockStart)\n const blockBody = source.slice(blockStart + 1, blockEnd - 1).trim()\n\n // Parse methods from the block body\n // Match: methodName(params) { body } or async methodName(params) { body }\n const methods: { name: string; isAsync: boolean; fullText: string }[] = []\n let j = 0\n const bodySource = source.slice(blockStart + 1, blockEnd - 1)\n\n while (j < bodySource.length) {\n const methodRemaining = bodySource.slice(j)\n const methodMatch = methodRemaining.match(/^(\\s*)(async\\s+)?(\\w+)\\s*\\(/)\n\n if (!methodMatch) {\n j++\n continue\n }\n\n const methodIndent = methodMatch[1]\n const isAsync = !!methodMatch[2]\n const methodName = methodMatch[3]\n\n // Reject arrow functions — they don't bind `this`\n // We'll check after finding the body\n\n // Find the opening paren\n const parenStart = j + methodMatch[0].length - 1\n let parenDepth = 1\n let k = parenStart + 1\n while (k < bodySource.length && parenDepth > 0) {\n if (bodySource[k] === '(') parenDepth++\n if (bodySource[k] === ')') parenDepth--\n k++\n }\n const paramsStr = bodySource.slice(parenStart + 1, k - 1)\n\n // Skip whitespace to find { or =>\n let afterParams = k\n while (\n afterParams < bodySource.length &&\n /\\s/.test(bodySource[afterParams])\n ) {\n afterParams++\n }\n\n // Check for arrow function\n if (\n bodySource[afterParams] === '=' &&\n bodySource[afterParams + 1] === '>'\n ) {\n const loc = locAt(source, blockStart + 1 + j)\n throw new SyntaxError(\n `Arrow functions are not allowed in extend blocks (method '${methodName}' in extend ${typeName}). ` +\n `Use regular function syntax instead, as extension methods need 'this' binding.`,\n loc\n )\n }\n\n if (bodySource[afterParams] !== '{') {\n j++\n continue\n }\n\n // Find matching closing brace for the method body\n const methodBodyEnd = findFunctionBodyEnd(bodySource, afterParams)\n const fullMethodText = bodySource.slice(j, methodBodyEnd).trim()\n\n // Build: methodName: function(params) { body }\n // Transform TJS colon params (name: value) to JS defaults (name = value)\n const transformedParams = paramsStr\n .split(',')\n .map((p) => p.trim())\n .filter((p) => p.length > 0)\n .map((p) => {\n // name: value -> name = value (TJS colon shorthand)\n const colonMatch = p.match(/^(\\w+)\\s*:\\s*(.+)$/)\n if (colonMatch) return `${colonMatch[1]} = ${colonMatch[2]}`\n return p\n })\n .join(', ')\n const asyncPrefix = isAsync ? 'async ' : ''\n const methodBody = bodySource.slice(afterParams + 1, methodBodyEnd - 1)\n methods.push({\n name: methodName,\n isAsync,\n fullText: `${methodName}: ${asyncPrefix}function(${transformedParams}) {${methodBody}}`,\n })\n\n j = methodBodyEnd\n }\n\n // Track extensions\n const isFirstForType = !extensions.has(typeName)\n if (isFirstForType) {\n extensions.set(typeName, new Set())\n }\n const extSet = extensions.get(typeName)!\n for (const m of methods) {\n extSet.add(m.name)\n }\n\n // Generate the __ext object (or merge into existing)\n const methodEntries = methods.map((m) => ` ${m.fullText}`).join(',\\n')\n let replacement: string\n if (isFirstForType) {\n replacement = `${indent}const __ext_${typeName} = {\\n${methodEntries}\\n${indent}}\\n`\n } else {\n // Merge into existing: Object.assign(__ext_TypeName, { ... })\n replacement = `${indent}Object.assign(__ext_${typeName}, {\\n${methodEntries}\\n${indent}})\\n`\n }\n\n // Generate registration calls\n for (const m of methods) {\n replacement += `${indent}if (__tjs?.registerExtension) { __tjs.registerExtension('${typeName}', '${m.name}', __ext_${typeName}.${m.name}) }\\n`\n }\n\n result += replacement\n i = blockEnd\n }\n\n // Append any remaining source\n if (i <= source.length && result.length < source.length) {\n // Already handled character by character\n }\n\n return { source: result, extensions }\n}\n\n/**\n * Transform method calls on known-type receivers to use extension objects.\n *\n * For literals and typed variables where the type is known:\n * 'hello'.capitalize() -> __ext_String.capitalize.call('hello')\n * [1,2,3].last() -> __ext_Array.last.call([1,2,3])\n *\n * This is a best-effort source-level transform. For unknown types,\n * the runtime fallback (resolveExtension) handles it.\n */\nexport function transformExtensionCalls(\n source: string,\n extensions: Map<string, Set<string>>\n): string {\n if (extensions.size === 0) return source\n\n // Build a map of method names to possible type names for quick lookup\n const methodToTypes = new Map<string, string[]>()\n for (const [typeName, methods] of extensions) {\n for (const method of methods) {\n if (!methodToTypes.has(method)) {\n methodToTypes.set(method, [])\n }\n methodToTypes.get(method)!.push(typeName)\n }\n }\n\n let result = source\n\n // Rewrite calls on string literals: 'str'.method(...) or \"str\".method(...)\n for (const [method, typeNames] of methodToTypes) {\n if (!typeNames.includes('String')) continue\n\n // Match string literal followed by .method(\n // Single-quoted strings\n const singleQuotePattern = new RegExp(\n `('(?:[^'\\\\\\\\]|\\\\\\\\.)*')\\\\.(${method})\\\\((\\\\))?`,\n 'g'\n )\n result = result.replace(singleQuotePattern, (_, str, meth, closeParen) => {\n return closeParen\n ? `__ext_String.${meth}.call(${str})`\n : `__ext_String.${meth}.call(${str}, `\n })\n\n // Double-quoted strings\n const doubleQuotePattern = new RegExp(\n `(\"(?:[^\"\\\\\\\\]|\\\\\\\\.)*\")\\\\.(${method})\\\\((\\\\))?`,\n 'g'\n )\n result = result.replace(doubleQuotePattern, (_, str, meth, closeParen) => {\n return closeParen\n ? `__ext_String.${meth}.call(${str})`\n : `__ext_String.${meth}.call(${str}, `\n })\n\n // Template literals (backtick) — simple case only (no nested templates)\n const templatePattern = new RegExp(\n '(`(?:[^`\\\\\\\\]|\\\\\\\\.)*`)\\\\.' + method + '\\\\((\\\\))?',\n 'g'\n )\n result = result.replace(templatePattern, (_, str, closeParen) => {\n return closeParen\n ? `__ext_String.${method}.call(${str})`\n : `__ext_String.${method}.call(${str}, `\n })\n }\n\n // Rewrite calls on array literals: [1,2,3].method(...)\n for (const [method, typeNames] of methodToTypes) {\n if (!typeNames.includes('Array')) continue\n\n // Match array literal [...].method(\n // This is tricky — we need to find balanced brackets\n // Simple approach: find ].method( and walk backward to find matching [\n const methodDot = `].${method}(`\n let searchFrom = 0\n let idx: number\n while ((idx = result.indexOf(methodDot, searchFrom)) !== -1) {\n // Walk backward from idx to find matching [\n let bracketDepth = 1\n let k = idx - 1\n let inStr: string | false = false\n while (k >= 0 && bracketDepth > 0) {\n const ch = result[k]\n if (inStr) {\n if (ch === inStr && (k === 0 || result[k - 1] !== '\\\\')) {\n inStr = false\n }\n } else {\n if (ch === ']') bracketDepth++\n if (ch === '[') bracketDepth--\n if (ch === \"'\" || ch === '\"' || ch === '`') inStr = ch\n }\n k--\n }\n\n if (bracketDepth === 0) {\n const arrayLiteral = result.slice(k + 1, idx + 1)\n const before = result.slice(0, k + 1)\n const after = result.slice(idx + methodDot.length)\n // Check if no-args call: next char is )\n if (after[0] === ')') {\n result = `${before}__ext_Array.${method}.call(${arrayLiteral})${after.slice(\n 1\n )}`\n } else {\n result = `${before}__ext_Array.${method}.call(${arrayLiteral}, ${after}`\n }\n }\n\n searchFrom = idx + 1\n }\n }\n\n // Rewrite calls on number literals: (42).method(...)\n for (const [method, typeNames] of methodToTypes) {\n if (!typeNames.includes('Number')) continue\n\n const numPattern = new RegExp(\n `(\\\\d+(?:\\\\.\\\\d+)?)\\\\.(${method})\\\\((\\\\))?`,\n 'g'\n )\n result = result.replace(numPattern, (_, num, meth, closeParen) => {\n return closeParen\n ? `__ext_Number.${meth}.call(${num})`\n : `__ext_Number.${meth}.call(${num}, `\n })\n }\n\n return result\n}\n\n/**\n * Compute {line, column} from a character offset in source.\n */\nexport function locAt(\n source: string,\n pos: number\n): { line: number; column: number } {\n let line = 1\n let column = 0\n for (let i = 0; i < pos && i < source.length; i++) {\n if (source[i] === '\\n') {\n line++\n column = 0\n } else {\n column++\n }\n }\n return { line, column }\n}\n\n/**\n * Info about a single function variant for polymorphic dispatch\n */\n\nfunction typeCheckForDefault(argExpr: string, defaultValue: string): string {\n const dv = defaultValue.trim()\n\n // String literal\n if (/^['\"`]/.test(dv)) return `typeof ${argExpr} === 'string'`\n\n // Boolean\n if (dv === 'true' || dv === 'false') return `typeof ${argExpr} === 'boolean'`\n\n // null\n if (dv === 'null') return `${argExpr} === null`\n\n // undefined\n if (dv === 'undefined') return `${argExpr} === undefined`\n\n // Array literal\n if (dv.startsWith('[')) return `Array.isArray(${argExpr})`\n\n // Object literal\n if (dv.startsWith('{'))\n return `(typeof ${argExpr} === 'object' && ${argExpr} !== null && !Array.isArray(${argExpr}))`\n\n // Non-negative integer: +N\n if (/^\\+\\d+/.test(dv))\n return `(typeof ${argExpr} === 'number' && Number.isInteger(${argExpr}) && ${argExpr} >= 0)`\n\n // Number with decimal → float\n if (/^-?\\d+\\.\\d+/.test(dv)) return `typeof ${argExpr} === 'number'`\n\n // Integer (whole number, possibly negative)\n if (/^-?\\d+$/.test(dv))\n return `(typeof ${argExpr} === 'number' && Number.isInteger(${argExpr}))`\n\n // Fallback: any\n return 'true'\n}\n\n/**\n * Get a type \"signature\" string from a default value for ambiguity checking.\n * Two params with the same signature at the same position are ambiguous.\n */\nfunction typeSignatureForDefault(defaultValue: string): string {\n const dv = defaultValue.trim()\n if (/^['\"`]/.test(dv)) return 'string'\n if (dv === 'true' || dv === 'false') return 'boolean'\n if (dv === 'null') return 'null'\n if (dv === 'undefined') return 'undefined'\n if (dv.startsWith('[')) return 'array'\n if (dv.startsWith('{')) return 'object'\n if (/^\\+\\d+/.test(dv)) return 'non-negative-integer'\n if (/^-?\\d+\\.\\d+/.test(dv)) return 'number'\n if (/^-?\\d+$/.test(dv)) return 'integer'\n return 'any'\n}\n\n/**\n * Parse a parameter string like \"a = 0, b = 'hello', c = { x: 0 }\"\n * into an array of { name, defaultValue, required } objects.\n * Handles nested braces/brackets/parens and template literals.\n */\nfunction parseParamList(\n paramStr: string,\n requiredParams: Set<string>\n): { name: string; defaultValue: string; required: boolean }[] {\n const params: { name: string; defaultValue: string; required: boolean }[] = []\n let depth = 0\n let current = ''\n let inString: string | false = false\n\n for (let i = 0; i < paramStr.length; i++) {\n const ch = paramStr[i]\n\n // Track string state\n if (!inString && (ch === \"'\" || ch === '\"' || ch === '`')) {\n inString = ch\n current += ch\n continue\n }\n if (inString) {\n current += ch\n if (ch === '\\\\') {\n i++\n if (i < paramStr.length) current += paramStr[i]\n continue\n }\n if (ch === inString) inString = false\n continue\n }\n\n // Track nesting\n if (ch === '(' || ch === '[' || ch === '{') {\n depth++\n current += ch\n continue\n }\n if (ch === ')' || ch === ']' || ch === '}') {\n depth--\n current += ch\n continue\n }\n\n // Split on comma at depth 0\n if (ch === ',' && depth === 0) {\n const param = parseOneParam(current.trim(), requiredParams)\n if (param) params.push(param)\n current = ''\n continue\n }\n\n current += ch\n }\n\n // Last param\n const trimmed = current.trim()\n if (trimmed) {\n const param = parseOneParam(trimmed, requiredParams)\n if (param) params.push(param)\n }\n\n return params\n}\n\n/**\n * Parse a single parameter like \"name = 'Alice'\" or \"/* unsafe * / x = 0\"\n */\nfunction parseOneParam(\n paramStr: string,\n requiredParams: Set<string>\n): { name: string; defaultValue: string; required: boolean } | null {\n // Strip leading /* unsafe */ comment\n const str = paramStr.replace(/^\\/\\*\\s*unsafe\\s*\\*\\/\\s*/, '')\n\n // Rest params not supported in polymorphic functions\n if (str.startsWith('...')) return null\n\n // Find = sign (the param has been transformed from : to = by transformParenExpressions)\n const eqIdx = str.indexOf('=')\n if (eqIdx === -1) {\n // No default value — untyped param\n return { name: str.trim(), defaultValue: '', required: true }\n }\n\n const name = str.slice(0, eqIdx).trim()\n const defaultValue = str.slice(eqIdx + 1).trim()\n return { name, defaultValue, required: requiredParams.has(name) }\n}\n\n/**\n * Find the end of a function body (matching closing brace).\n * Handles nested braces, strings, template literals, comments, and regex.\n * Returns the index AFTER the closing brace.\n */\nexport function findFunctionBodyEnd(\n source: string,\n openBracePos: number\n): number {\n let depth = 1\n let i = openBracePos + 1\n let inString: string | false = false\n let inLineComment = false\n let inBlockComment = false\n\n while (i < source.length && depth > 0) {\n const ch = source[i]\n const next = i + 1 < source.length ? source[i + 1] : ''\n\n // Line comment\n if (inLineComment) {\n if (ch === '\\n') inLineComment = false\n i++\n continue\n }\n\n // Block comment\n if (inBlockComment) {\n if (ch === '*' && next === '/') {\n inBlockComment = false\n i += 2\n continue\n }\n i++\n continue\n }\n\n // String tracking\n if (inString) {\n if (ch === '\\\\') {\n i += 2\n continue\n }\n if (ch === inString) inString = false\n i++\n continue\n }\n\n // Start comments\n if (ch === '/' && next === '/') {\n inLineComment = true\n i += 2\n continue\n }\n if (ch === '/' && next === '*') {\n inBlockComment = true\n i += 2\n continue\n }\n\n // Start strings\n if (ch === \"'\" || ch === '\"' || ch === '`') {\n inString = ch\n i++\n continue\n }\n\n // Braces\n if (ch === '{') depth++\n if (ch === '}') depth--\n\n i++\n }\n\n return i\n}\n\n/**\n * Transform polymorphic functions: multiple function declarations with the\n * same name are merged into a single dispatcher function.\n *\n * Must be called AFTER transformParenExpressions (so params have = defaults)\n * but BEFORE wrapClassDeclarations.\n *\n * function greet(name = '') { ... }\n * function greet(first = '', last = '') { ... }\n *\n * becomes:\n *\n * function greet$1(name = '') { ... }\n * function greet$2(first = '', last = '') { ... }\n * function greet(...__args) {\n * if (__args.length === 1 && typeof __args[0] === 'string') return greet$1(__args[0])\n * if (__args.length === 2 && ...) return greet$2(__args[0], __args[1])\n * return __tjs.typeError('greet', 'no matching overload', __args)\n * }\n */\nexport function transformPolymorphicFunctions(\n source: string,\n requiredParams: Set<string>\n): { source: string; polymorphicNames: Set<string> } {\n const polymorphicNames = new Set<string>()\n\n // Phase 1: Find all function declarations and group by name\n // Match: optional \"export\" + optional \"async\" + \"function\" + name + \"(\"\n const funcPattern =\n /(?:^|(?<=[\\n;{}]))\\s*(export\\s+)?(async\\s+)?function\\s+(\\w+)\\s*\\(/gm\n const declarations = new Map<string, PolyVariant[]>()\n let match: RegExpExecArray | null\n\n // First pass: collect all function positions and names\n const allMatches: {\n name: string\n fullMatchStart: number\n funcKeywordStart: number\n exported: boolean\n isAsync: boolean\n }[] = []\n\n while ((match = funcPattern.exec(source)) !== null) {\n const exported = !!match[1]\n const isAsync = !!match[2]\n const name = match[3]\n const fullMatchStart = match.index\n // Find where \"function\" keyword starts (skip whitespace and export/async)\n let funcKeywordStart = fullMatchStart\n const prefix = match[0]\n const funcIdx = prefix.indexOf('function')\n if (funcIdx >= 0) funcKeywordStart = fullMatchStart + funcIdx\n\n allMatches.push({\n name,\n fullMatchStart,\n funcKeywordStart,\n exported,\n isAsync,\n })\n }\n\n // Group by name\n for (const m of allMatches) {\n if (!declarations.has(m.name)) {\n declarations.set(m.name, [])\n }\n }\n\n // Count occurrences — only process names that appear more than once\n const nameCounts = new Map<string, number>()\n for (const m of allMatches) {\n nameCounts.set(m.name, (nameCounts.get(m.name) || 0) + 1)\n }\n\n const polyNames = new Set<string>()\n for (const [name, count] of nameCounts) {\n if (count > 1) polyNames.add(name)\n }\n\n if (polyNames.size === 0) {\n return { source, polymorphicNames }\n }\n\n // Phase 2: For each polymorphic function, extract full details\n for (const m of allMatches) {\n if (!polyNames.has(m.name)) continue\n\n // Find the opening paren\n const afterFunc = source.indexOf('(', m.funcKeywordStart)\n if (afterFunc === -1) continue\n\n // Find matching closing paren\n let parenDepth = 1\n let j = afterFunc + 1\n while (j < source.length && parenDepth > 0) {\n if (source[j] === '(') parenDepth++\n if (source[j] === ')') parenDepth--\n j++\n }\n const closeParen = j - 1\n const paramStr = source.slice(afterFunc + 1, closeParen)\n\n // Find the opening brace of the function body\n let bodyStart = j\n while (bodyStart < source.length && source[bodyStart] !== '{') bodyStart++\n if (bodyStart >= source.length) continue\n\n // Find matching closing brace\n const bodyEnd = findFunctionBodyEnd(source, bodyStart)\n\n // Determine the real start (including leading whitespace, export, async)\n let realStart = m.fullMatchStart\n // Include leading whitespace on the same line\n while (realStart > 0 && source[realStart - 1] === ' ') realStart--\n\n const variants = declarations.get(m.name)!\n const params = parseParamList(paramStr, requiredParams)\n\n // Check for rest params\n const hasRestParam = paramStr.includes('...')\n if (hasRestParam) {\n const loc = locAt(source, m.funcKeywordStart)\n throw new SyntaxError(\n `Rest parameters are not supported in polymorphic function '${m.name}'. ` +\n `Use separate function names instead.`,\n loc\n )\n }\n\n variants.push({\n index: variants.length + 1,\n start: realStart,\n end: bodyEnd,\n text: source.slice(realStart, bodyEnd),\n exported: m.exported,\n isAsync: m.isAsync,\n params,\n })\n }\n\n // Phase 3: Validate — check for ambiguous variants\n for (const [name, variants] of declarations) {\n if (variants.length < 2) continue\n\n // Check async consistency\n const asyncCount = variants.filter((v) => v.isAsync).length\n if (asyncCount > 0 && asyncCount < variants.length) {\n const loc = locAt(source, variants[0].start)\n throw new SyntaxError(\n `Polymorphic function '${name}': all variants must be either sync or async, not mixed.`,\n loc\n )\n }\n\n // Check for ambiguous signatures (same types at same positions, differing only in required/optional)\n for (let i = 0; i < variants.length; i++) {\n for (let j = i + 1; j < variants.length; j++) {\n const a = variants[i]\n const b = variants[j]\n\n // Different max arity is fine\n if (a.params.length !== b.params.length) continue\n\n // Same arity — check if types are identical at every position\n let allSame = true\n for (let k = 0; k < a.params.length; k++) {\n const sigA = a.params[k].defaultValue\n ? typeSignatureForDefault(a.params[k].defaultValue)\n : 'any'\n const sigB = b.params[k].defaultValue\n ? typeSignatureForDefault(b.params[k].defaultValue)\n : 'any'\n if (sigA !== sigB) {\n allSame = false\n break\n }\n }\n\n if (allSame) {\n const loc = locAt(source, b.start)\n throw new SyntaxError(\n `Polymorphic function '${name}': variants ${i + 1} and ${\n j + 1\n } have ambiguous signatures ` +\n `(same parameter types at every position). Overloads must differ by arity or parameter types.`,\n loc\n )\n }\n }\n }\n }\n\n // Phase 4: Build the transformed source\n // Sort all variants by position (reverse order for safe replacement)\n const allVariants: { name: string; variant: PolyVariant }[] = []\n for (const [name, variants] of declarations) {\n if (variants.length < 2) continue\n for (const v of variants) {\n allVariants.push({ name, variant: v })\n }\n }\n allVariants.sort((a, b) => b.variant.start - a.variant.start)\n\n // Replace each variant in reverse order (preserves positions)\n let result = source\n for (const { name, variant } of allVariants) {\n const asyncPrefix = variant.isAsync ? 'async ' : ''\n // Rename: function greet(...) -> function greet$1(...)\n // Strip \"export\" from variants — only the dispatcher is exported\n // Use $$ in replacement to produce literal $ (avoid backreference interpretation)\n const renamed = variant.text.replace(\n new RegExp(\n `(?:export\\\\s+)?${\n asyncPrefix ? asyncPrefix.replace(/\\s+$/, '\\\\s+') : ''\n }function\\\\s+${name}\\\\s*\\\\(`\n ),\n `${asyncPrefix}function ${name}$$${variant.index}(`\n )\n result =\n result.slice(0, variant.start) + renamed + result.slice(variant.end)\n }\n\n // Phase 5: Append dispatcher functions\n for (const [name, variants] of declarations) {\n if (variants.length < 2) continue\n polymorphicNames.add(name)\n\n const isAsync = variants[0].isAsync\n const isExported = variants.some((v) => v.exported)\n const asyncPrefix = isAsync ? 'async ' : ''\n const exportPrefix = isExported ? 'export ' : ''\n\n // Sort variants by specificity for dispatch order:\n // 1. More params first (higher arity)\n // 2. More specific types first (integer before number, object before any)\n const sorted = [...variants].sort((a, b) => {\n // Different arity: more params = more specific (checked first within same arity group)\n if (a.params.length !== b.params.length) return 0 // arity groups handled in dispatch\n\n // Same arity: count specificity\n let specA = 0\n let specB = 0\n for (const p of a.params) {\n const sig = p.defaultValue\n ? typeSignatureForDefault(p.defaultValue)\n : 'any'\n if (sig === 'non-negative-integer') specA += 3\n else if (sig === 'integer') specA += 2\n else if (sig !== 'any') specA += 1\n }\n for (const p of b.params) {\n const sig = p.defaultValue\n ? typeSignatureForDefault(p.defaultValue)\n : 'any'\n if (sig === 'non-negative-integer') specB += 3\n else if (sig === 'integer') specB += 2\n else if (sig !== 'any') specB += 1\n }\n return specB - specA // More specific first\n })\n\n // Generate dispatch branches\n const branches: string[] = []\n for (const v of sorted) {\n const checks: string[] = [`__args.length === ${v.params.length}`]\n const args: string[] = []\n\n for (let k = 0; k < v.params.length; k++) {\n const p = v.params[k]\n args.push(`__args[${k}]`)\n if (p.defaultValue) {\n const check = typeCheckForDefault(`__args[${k}]`, p.defaultValue)\n if (check !== 'true') checks.push(check)\n }\n }\n\n branches.push(\n ` if (${checks.join(' && ')}) return ${name}$${v.index}(${args.join(\n ', '\n )})`\n )\n }\n\n const dispatcher = `\n${exportPrefix}${asyncPrefix}function ${name}(...__args) {\n${branches.join('\\n')}\n return __tjs.typeError('${name}', 'no matching overload', __args)\n}\n`\n result += dispatcher\n }\n\n return { source: result, polymorphicNames }\n}\n\n/**\n * Transform bare assignments to const declarations\n *\n * Foo = ... -> const Foo = ...\n *\n * Only transforms assignments at statement level (start of line or after semicolon/brace)\n * where the identifier starts with uppercase (to avoid breaking normal assignments)\n */\nexport function transformBareAssignments(source: string): string {\n // Match: start of line/statement, uppercase identifier, =, not ==\n // Negative lookbehind for const/let/var to avoid double-declaring\n return source.replace(\n /(?<=^|[;\\n{])\\s*([A-Z][a-zA-Z0-9_]*)\\s*=(?!=)/gm,\n (match, name) => {\n // Check if already has const/let/var before it\n return match.replace(name, `const ${name}`)\n }\n )\n}\n\n/**\n * Parse source code into an Acorn AST\n */\n\nexport function extractAndRunTests(\n source: string,\n skipTests = false\n): {\n source: string\n tests: TestBlock[]\n errors: string[]\n} {\n const tests: TestBlock[] = []\n const errors: string[] = []\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'test' keyword followed by optional string then {\n const testMatch = source.slice(i).match(/^\\btest\\s+/)\n if (testMatch) {\n const start = i\n let j = i + testMatch[0].length\n\n // Check for optional description string\n let description: string | undefined\n const descMatch = source.slice(j).match(/^(['\"`])([^]*?)\\1\\s*/)\n if (descMatch) {\n description = descMatch[2]\n j += descMatch[0].length\n }\n\n // Must have opening brace\n if (source[j] === '{') {\n const bodyStart = j + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth === 0) {\n const body = source.slice(bodyStart, k - 1).trim()\n const end = k\n\n const line = (source.slice(0, start).match(/\\n/g) || []).length + 1\n tests.push({ description, body, start, end, line })\n\n // Run the test unless skipped\n if (!skipTests) {\n try {\n // Execute test in isolated context\n // The test has access to the Types defined before it\n const testFn = new Function(body)\n testFn()\n } catch (err: any) {\n const desc = description || `test at line ${line}`\n errors.push(\n `Test failed: ${desc} (line ${line})\\n ${err.message || err}`\n )\n }\n }\n\n // Strip the test block from output (replace with whitespace to preserve line numbers)\n const removed = source.slice(start, end)\n const newlines = (removed.match(/\\n/g) || []).length\n result += '\\n'.repeat(newlines)\n i = end\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return { source: result, tests, errors }\n}\n\n/**\n * Wrap class declarations to make them callable without `new`\n *\n * Transforms:\n * class Foo { ... }\n * To:\n * let Foo = class Foo { ... };\n * Foo = new Proxy(Foo, { apply(t, _, a) { return Reflect.construct(t, a) } });\n *\n * This emits standalone JS with no runtime dependencies.\n */\n\n/**\n * Transform polymorphic constructors into static factory functions.\n *\n * When a class has multiple constructor() declarations, the first becomes\n * the real constructor and the rest become factory functions. The wrapClass\n * Proxy routes through a polymorphic dispatcher.\n *\n * class Point {\n * constructor(x: 0.0, y: 0.0) { this.x = x; this.y = y }\n * constructor(coords: { x: 0.0, y: 0.0 }) { this.x = coords.x; this.y = coords.y }\n * }\n *\n * becomes:\n *\n * class Point {\n * constructor(x = 0.0, y = 0.0) { this.x = x; this.y = y }\n * }\n * function Point$ctor$2(coords = { x: 0.0, y: 0.0 }) { return new Point(coords.x, coords.y) }\n * // wrapClass Proxy dispatches through polymorphic factory\n */\nexport function transformPolymorphicConstructors(\n source: string,\n requiredParams: Set<string>\n): { source: string; polyCtorClasses: Set<string> } {\n const polyCtorClasses = new Set<string>()\n\n // Find classes with multiple constructors\n const classRegex = /\\bclass\\s+(\\w+)(\\s+extends\\s+\\w+)?\\s*\\{/g\n let classMatch\n\n // Collect all class info first\n const classInfos: {\n className: string\n extendsClause: string\n bodyStart: number\n bodyEnd: number\n body: string\n }[] = []\n\n while ((classMatch = classRegex.exec(source)) !== null) {\n const className = classMatch[1]\n const extendsClause = classMatch[2]?.trim() || ''\n const bodyStart = classMatch.index + classMatch[0].length - 1\n\n const bodyEnd = findFunctionBodyEnd(source, bodyStart)\n const body = source.slice(bodyStart, bodyEnd)\n\n classInfos.push({ className, extendsClause, bodyStart, bodyEnd, body })\n }\n\n // Process in reverse order to preserve positions\n let result = source\n for (let ci = classInfos.length - 1; ci >= 0; ci--) {\n const { className, extendsClause, bodyStart, bodyEnd, body } =\n classInfos[ci]\n\n // Find all constructor declarations in the class body\n const ctorPattern = /\\bconstructor\\s*\\(/g\n let ctorMatch\n const ctorPositions: number[] = []\n\n while ((ctorMatch = ctorPattern.exec(body)) !== null) {\n ctorPositions.push(ctorMatch.index)\n }\n\n if (ctorPositions.length < 2) continue // Not polymorphic\n\n polyCtorClasses.add(className)\n\n // Parse each constructor\n interface CtorInfo {\n index: number\n paramStr: string\n bodyText: string\n fullStart: number // relative to class body\n fullEnd: number // relative to class body\n }\n const ctors: CtorInfo[] = []\n\n for (let i = 0; i < ctorPositions.length; i++) {\n const pos = ctorPositions[i]\n\n // Find opening paren\n const parenStart = body.indexOf('(', pos)\n let parenDepth = 1\n let j = parenStart + 1\n while (j < body.length && parenDepth > 0) {\n if (body[j] === '(') parenDepth++\n if (body[j] === ')') parenDepth--\n j++\n }\n const paramStr = body.slice(parenStart + 1, j - 1)\n\n // Find opening brace\n let braceStart = j\n while (braceStart < body.length && body[braceStart] !== '{') braceStart++\n\n // Find matching closing brace\n const ctorBodyEnd = findFunctionBodyEnd(body, braceStart)\n const bodyText = body.slice(braceStart + 1, ctorBodyEnd - 1)\n\n ctors.push({\n index: i + 1,\n paramStr,\n bodyText,\n fullStart: pos,\n fullEnd: ctorBodyEnd,\n })\n }\n\n // Keep the first constructor in the class, remove the rest\n // Build new class body with only the first constructor\n let newBody = body.slice(0, ctors[0].fullEnd)\n // Skip subsequent constructors\n const afterLastCtor = ctors[ctors.length - 1].fullEnd\n newBody += body.slice(afterLastCtor)\n\n // But we need to remove just the extra constructors, keeping other methods\n // Better approach: remove constructors 2..N from the body\n let cleanBody = body\n for (let i = ctors.length - 1; i >= 1; i--) {\n const ctor = ctors[i]\n // Find start of this constructor (including leading whitespace)\n let start = ctor.fullStart\n while (start > 0 && cleanBody[start - 1] === ' ') start--\n if (start > 0 && cleanBody[start - 1] === '\\n') start--\n\n cleanBody = cleanBody.slice(0, start) + cleanBody.slice(ctor.fullEnd)\n }\n\n // Generate factory functions for constructors 2..N\n let factories = ''\n for (let i = 1; i < ctors.length; i++) {\n const ctor = ctors[i]\n // Parse params for type checking in dispatcher\n const params = parseParamList(ctor.paramStr, requiredParams)\n const hasRest = ctor.paramStr.includes('...')\n if (hasRest) {\n const loc = locAt(source, bodyStart + ctor.fullStart)\n throw new SyntaxError(\n `Rest parameters are not supported in polymorphic constructors for '${className}'.`,\n loc\n )\n }\n\n // The factory function creates the object manually\n // For base classes: use Object.create + call constructor body\n // Simpler: just use new ClassName() with the first ctor's params mapped\n // Actually simplest: the factory body IS the constructor body but with\n // `this.x = ...` replaced by building an object... No, that doesn't work\n // for inheritance.\n //\n // Best approach: factory creates via new, then applies the extra ctor body\n factories += `\\nfunction ${className}$ctor$${ctor.index}(${ctor.paramStr}) {`\n factories += `\\n const __obj = Object.create(${className}.prototype)`\n if (extendsClause) {\n // For derived classes, we can't easily call super() outside constructor\n // Just call the constructor body and hope it sets fields\n // Actually — the factory can just do: new ClassName(defaultArgs) then overwrite\n // Let's use a simpler approach: the factory just does new + field assignment\n }\n factories += `\\n ;(function() {${ctor.bodyText}}).call(__obj)`\n factories += `\\n return __obj`\n factories += `\\n}\\n`\n }\n\n // Generate the polymorphic dispatcher for the Proxy's apply trap\n // First constructor variant uses Reflect.construct, rest use factories\n const dispatchBranches: string[] = []\n\n for (let i = 0; i < ctors.length; i++) {\n const ctor = ctors[i]\n const params = parseParamList(ctor.paramStr, requiredParams)\n const checks: string[] = [`a.length === ${params.length}`]\n\n for (let k = 0; k < params.length; k++) {\n const p = params[k]\n if (p.defaultValue) {\n const check = typeCheckForDefault(`a[${k}]`, p.defaultValue)\n if (check !== 'true') checks.push(check)\n }\n }\n\n if (i === 0) {\n // First constructor — use Reflect.construct\n dispatchBranches.push(\n ` if (${checks.join(' && ')}) return Reflect.construct(t, a)`\n )\n } else {\n // Factory function\n const args = params.map((_, k) => `a[${k}]`).join(', ')\n dispatchBranches.push(\n ` if (${checks.join(' && ')}) return ${className}$ctor$${\n ctor.index\n }(${args})`\n )\n }\n }\n\n // Generate the dispatcher function\n factories += `\\nfunction ${className}$dispatch(t, a) {\\n`\n factories += dispatchBranches.join('\\n') + '\\n'\n factories += ` return __tjs.typeError('${className}', 'no matching constructor', a)\\n`\n factories += `}\\n`\n\n // Replace the class body and append factories\n result = result.slice(0, bodyStart) + cleanBody + result.slice(bodyEnd)\n\n // Insert factories after the class\n const insertPos = bodyStart + cleanBody.length\n result = result.slice(0, insertPos) + factories + result.slice(insertPos)\n }\n\n return { source: result, polyCtorClasses }\n}\n\nexport function wrapClassDeclarations(\n source: string,\n polyCtorClasses: Set<string> = new Set()\n): string {\n // Match class declarations: class Name { or class Name extends Base {\n // Capture the class name and find the full class body\n const classRegex = /\\bclass\\s+(\\w+)(\\s+extends\\s+\\w+)?\\s*\\{/g\n let result = ''\n let lastIndex = 0\n let match\n\n while ((match = classRegex.exec(source)) !== null) {\n const className = match[1]\n const extendsClause = match[2] || ''\n const classStart = match.index\n const bodyStart = classStart + match[0].length - 1 // position of {\n\n // Find matching closing brace\n let depth = 1\n let i = bodyStart + 1\n while (i < source.length && depth > 0) {\n const char = source[i]\n if (char === '{') depth++\n else if (char === '}') depth--\n i++\n }\n\n if (depth === 0) {\n const classEnd = i\n const classBody = source.slice(bodyStart, classEnd)\n\n // Emit standalone JS - no runtime dependency\n result += source.slice(lastIndex, classStart)\n result += `let ${className} = class ${className}${extendsClause} ${classBody}; `\n\n if (polyCtorClasses.has(className)) {\n // Polymorphic constructor: use dispatcher function for apply trap\n result += `${className} = new Proxy(${className}, { apply(t, _, a) { return ${className}$dispatch(t, a) }, construct(t, a) { return ${className}$dispatch(t, a) } });`\n } else {\n result += `${className} = new Proxy(${className}, { apply(t, _, a) { return Reflect.construct(t, a) } });`\n }\n lastIndex = classEnd\n }\n }\n\n result += source.slice(lastIndex)\n return result\n}\n\n/**\n * Validate that Date is not used (TjsDate mode)\n * Throws an error if Date constructor or static methods are found\n */\nexport function validateNoDate(source: string): string {\n // Match Date usage: new Date, Date.now, Date.parse, Date.UTC\n const datePatterns = [\n {\n pattern: /\\bnew\\s+Date\\b/,\n message:\n 'new Date() is not allowed in TjsDate mode. Use Timestamp.now() or Timestamp.from()',\n },\n {\n pattern: /\\bDate\\.now\\b/,\n message: 'Date.now() is not allowed in TjsDate mode. Use Timestamp.now()',\n },\n {\n pattern: /\\bDate\\.parse\\b/,\n message:\n 'Date.parse() is not allowed in TjsDate mode. Use Timestamp.parse()',\n },\n {\n pattern: /\\bDate\\.UTC\\b/,\n message:\n 'Date.UTC() is not allowed in TjsDate mode. Use Timestamp.from()',\n },\n ]\n\n for (const { pattern, message } of datePatterns) {\n if (pattern.test(source)) {\n throw new Error(message)\n }\n }\n\n return source\n}\n\n/**\n * Validate that eval and Function constructor are not used (TjsNoeval mode)\n * Note: Eval and SafeFunction from TJS runtime are allowed\n */\n/**\n * Transform const! declarations to const and validate immutability\n *\n * const! declares compile-time immutable bindings. The object itself\n * is not frozen at runtime (performance trap), but the transpiler\n * rejects any code that attempts to mutate the binding's properties.\n *\n * const! config = { debug: false, port: 8080 }\n * config.debug = true // ERROR: Cannot mutate immutable binding 'config'\n * console.log(config.port) // OK: reads are fine\n *\n * Emits as plain `const` — semantics are enforced at transpile time.\n * When runtimes support records/tuples, const! can emit those instead.\n */\nexport function transformConstBang(source: string): string {\n // Find all const! declarations and collect binding names\n const immutableNames = new Set<string>()\n\n // Match: const! name = ... or const! { a, b } = ... or const! [a, b] = ...\n const constBangRe = /\\bconst!\\s+(\\w+)\\b/g\n let m\n while ((m = constBangRe.exec(source)) !== null) {\n immutableNames.add(m[1])\n }\n\n if (immutableNames.size === 0) return source\n\n // Replace const! with const\n source = source.replace(/\\bconst!\\s+/g, 'const ')\n\n // Strip comments before checking mutations (avoid false positives\n // from code examples in TDoc comments)\n const stripped = source\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '') // block comments\n .replace(/\\/\\/[^\\n]*/g, '') // line comments\n\n // Check for mutations to immutable bindings\n for (const name of immutableNames) {\n // Property assignment: name.prop = ..., name[key] = ...\n const assignRe = new RegExp(\n `\\\\b${name}\\\\s*(?:\\\\.[\\\\w]+|\\\\[[^\\\\]]+\\\\])\\\\s*(?:=(?!=)|\\\\+\\\\+|--|\\\\+=|-=|\\\\*=|\\\\/=|%=|&&=|\\\\|\\\\|=|\\\\?\\\\?=|<<=|>>=|>>>=|\\\\^=|&=|\\\\|=)`,\n 'g'\n )\n if (assignRe.test(stripped)) {\n throw new Error(\n `Cannot mutate immutable binding '${name}'. ` +\n `const! bindings are read-only at compile time.`\n )\n }\n\n // Prefix increment/decrement: ++name.prop, --name.prop\n const prefixRe = new RegExp(\n `(?:\\\\+\\\\+|--)\\\\s*${name}\\\\s*(?:\\\\.[\\\\w]+|\\\\[[^\\\\]]+\\\\])`,\n 'g'\n )\n if (prefixRe.test(stripped)) {\n throw new Error(\n `Cannot mutate immutable binding '${name}'. ` +\n `const! bindings are read-only at compile time.`\n )\n }\n\n // delete name.prop\n const deleteRe = new RegExp(\n `\\\\bdelete\\\\s+${name}\\\\s*(?:\\\\.[\\\\w]+|\\\\[[^\\\\]]+\\\\])`,\n 'g'\n )\n if (deleteRe.test(stripped)) {\n throw new Error(\n `Cannot mutate immutable binding '${name}'. ` +\n `const! bindings are read-only at compile time.`\n )\n }\n\n // push/pop/splice/shift/unshift/sort/reverse/fill on the binding\n const mutatingMethods =\n 'push|pop|splice|shift|unshift|sort|reverse|fill|copyWithin|set'\n const methodRe = new RegExp(\n `\\\\b${name}\\\\s*\\\\.\\\\s*(?:${mutatingMethods})\\\\s*\\\\(`,\n 'g'\n )\n if (methodRe.test(stripped)) {\n throw new Error(\n `Cannot call mutating method on immutable binding '${name}'. ` +\n `const! bindings are read-only at compile time.`\n )\n }\n }\n\n return source\n}\n\nexport function validateNoVar(source: string): string {\n // Match var declarations at statement level (not inside strings/comments)\n // Catches: var x, var x = ..., var {x} = ..., var [x] = ...\n const varPattern = /(?<![a-zA-Z_$])\\bvar\\s+/\n if (varPattern.test(source)) {\n throw new Error(\n 'var is not allowed in TjsNoVar mode. Use const or let instead.'\n )\n }\n return source\n}\n\nexport function validateNoEval(source: string): string {\n // Match eval() calls - but not Eval() (capital E)\n // Use negative lookbehind to avoid matching inside words\n const evalPattern = /(?<![A-Za-z_$])\\beval\\s*\\(/\n if (evalPattern.test(source)) {\n throw new Error(\n 'eval() is not allowed in TjsNoeval mode. Use Eval() from TJS runtime for safe evaluation.'\n )\n }\n\n // Match new Function() - but not SafeFunction or other *Function names\n const functionPattern = /\\bnew\\s+Function\\s*\\(/\n if (functionPattern.test(source)) {\n throw new Error(\n 'new Function() is not allowed in TjsNoeval mode. Use SafeFunction() from TJS runtime.'\n )\n }\n\n return source\n}\n",
|
|
10
10
|
"/**\n * Type inference from value patterns\n *\n * Extracts types from example values:\n * 'string' -> { kind: 'string' }\n * 10 -> { kind: 'number' }\n * ['string'] -> { kind: 'array', items: { kind: 'string' } }\n * { name: 'string' } -> { kind: 'object', shape: { name: { kind: 'string' } } }\n * 'string' | null -> { kind: 'string', nullable: true }\n * 'string' | 0 -> { kind: 'union', members: [{ kind: 'string' }, { kind: 'number' }] }\n */\n\nimport { parseExpressionAt } from 'acorn'\nimport type { Expression, Pattern } from 'acorn'\nimport type { TypeDescriptor, ParameterDescriptor } from './types'\nimport { getLocation, TranspileError } from './types'\n\n/**\n * Infer type from a value expression (example value)\n */\nexport function inferTypeFromValue(node: Expression): TypeDescriptor {\n switch (node.type) {\n case 'Literal': {\n const value = (node as any).value\n if (value === null) {\n return { kind: 'null' }\n }\n if (typeof value === 'string') {\n return { kind: 'string' }\n }\n if (typeof value === 'number') {\n // Distinguish float vs integer by checking if source contains '.'\n // 2.0 -> number (float), 42 -> integer\n const raw = (node as any).raw as string | undefined\n if (raw && raw.includes('.')) {\n return { kind: 'number' }\n }\n return { kind: 'integer' }\n }\n if (typeof value === 'boolean') {\n return { kind: 'boolean' }\n }\n return { kind: 'any' }\n }\n\n case 'ArrayExpression': {\n const elements = (node as any).elements as Expression[]\n if (elements.length === 0) {\n return { kind: 'array', items: { kind: 'any' } }\n }\n // Infer type from all elements — if homogeneous, use that type;\n // if heterogeneous, produce a union of distinct kinds\n const itemTypes = elements\n .filter((el) => el != null)\n .map((el) => inferTypeFromValue(el))\n if (itemTypes.length === 0) {\n return { kind: 'array', items: { kind: 'any' } }\n }\n // Deduplicate by structure\n const seen = new Map<string, TypeDescriptor>()\n for (const t of itemTypes) {\n const key = JSON.stringify(t)\n if (!seen.has(key)) seen.set(key, t)\n }\n const unique = [...seen.values()]\n const items =\n unique.length === 1\n ? unique[0]\n : { kind: 'union' as const, members: unique }\n return { kind: 'array', items }\n }\n\n case 'ObjectExpression': {\n const properties = (node as any).properties as any[]\n const shape: Record<string, TypeDescriptor> = {}\n\n for (const prop of properties) {\n if (prop.type === 'Property' && prop.key.type === 'Identifier') {\n const key = prop.key.name\n shape[key] = inferTypeFromValue(prop.value)\n }\n }\n\n return { kind: 'object', shape }\n }\n\n case 'LogicalExpression': {\n const { operator, left, right } = node as any\n\n if (operator === '||') {\n // || is JavaScript logical OR — infer type from left operand\n return inferTypeFromValue(left)\n }\n\n if (operator === '&&') {\n // null && type means required type (null is just a marker)\n const rightType = inferTypeFromValue(right)\n return rightType\n }\n\n if (operator === '??') {\n // Nullish coalescing: left ?? right - type is the right side (fallback)\n const rightType = inferTypeFromValue(right)\n return rightType\n }\n\n return { kind: 'any' }\n }\n\n case 'BinaryExpression': {\n const { operator, left, right } = node as any\n // | means union type (e.g., 0 | null, '' | undefined)\n if (operator === '|') {\n const leftType = inferTypeFromValue(left)\n const rightType = inferTypeFromValue(right)\n\n if (rightType.kind === 'null') {\n return { ...leftType, nullable: true }\n }\n if (leftType.kind === 'null') {\n return { ...rightType, nullable: true }\n }\n return {\n kind: 'union',\n members: [leftType, rightType],\n }\n }\n return { kind: 'any' }\n }\n\n case 'Identifier': {\n // Handle undefined as a type\n if ((node as any).name === 'undefined') {\n return { kind: 'undefined' }\n }\n // Other identifiers in type position aren't valid example types\n return { kind: 'any' }\n }\n\n case 'UnaryExpression': {\n const op = (node as any).operator\n const arg = (node as any).argument\n\n // +N means non-negative integer (e.g., +1, +3)\n if (op === '+' && arg.type === 'Literal') {\n const value = arg.value\n if (typeof value === 'number') {\n return { kind: 'non-negative-integer' }\n }\n }\n\n // -N means integer or float depending on source\n if (op === '-' && arg.type === 'Literal') {\n const value = arg.value\n if (typeof value === 'number') {\n const raw = arg.raw as string | undefined\n if (raw && raw.includes('.')) {\n return { kind: 'number' }\n }\n return { kind: 'integer' }\n }\n }\n return { kind: 'any' }\n }\n\n default:\n return { kind: 'any' }\n }\n}\n\n/**\n * Parse a parameter and extract its type and default value\n *\n * @param param - The AST node for the parameter\n * @param requiredParams - Optional set of parameter names that are required (from colon syntax)\n */\nexport function parseParameter(\n param: Pattern,\n requiredParams?: Set<string>\n): ParameterDescriptor {\n // Simple identifier: function foo(x) - required, any type\n if (param.type === 'Identifier') {\n return {\n name: (param as any).name,\n type: { kind: 'any' },\n required: true,\n }\n }\n\n // Assignment pattern: function foo(x = value)\n if (param.type === 'AssignmentPattern') {\n const { left, right } = param as any\n\n if (left.type !== 'Identifier') {\n throw new TranspileError(\n 'Only simple parameter names are supported',\n getLocation(param)\n )\n }\n\n const name = left.name\n\n // Check if this parameter was marked as required via colon syntax\n const isRequired = requiredParams?.has(name) ?? false\n\n // Infer type from the example value\n const type = inferTypeFromValue(right)\n const exampleValue = extractLiteralValue(right)\n\n return {\n name,\n type,\n required: isRequired,\n default: isRequired ? null : exampleValue,\n example: exampleValue,\n loc: { start: param.start, end: param.end },\n }\n }\n\n // Destructuring pattern: function foo({ a, b })\n if (param.type === 'ObjectPattern') {\n // For destructuring, we create a synthetic \"args\" parameter\n // The individual properties become fields with their own defaults\n const properties = (param as any).properties as any[]\n const shape: Record<string, TypeDescriptor> = {}\n // Store full parameter descriptors for destructured properties\n const destructuredParams: Record<string, ParameterDescriptor> = {}\n\n for (const prop of properties) {\n if (prop.type === 'Property') {\n const key =\n prop.key.type === 'Identifier'\n ? prop.key.name\n : String(prop.key.value)\n\n if (prop.value.type === 'Identifier') {\n // { name } - required, any type\n shape[key] = { kind: 'any' }\n destructuredParams[key] = {\n name: key,\n type: { kind: 'any' },\n required: true,\n }\n } else if (prop.value.type === 'AssignmentPattern') {\n // { name = default } - check requiredParams to see if this was originally colon syntax\n const innerParam = parseParameter(prop.value, requiredParams)\n const isRequired = requiredParams?.has(key) ?? false\n shape[key] = innerParam.type\n destructuredParams[key] = {\n name: key,\n type: innerParam.type,\n required: isRequired,\n default: isRequired ? null : innerParam.example,\n example: innerParam.example,\n }\n }\n }\n }\n\n return {\n name: '__destructured__',\n type: { kind: 'object', shape, destructuredParams },\n required: true,\n }\n }\n\n throw new TranspileError(\n `Unsupported parameter pattern: ${param.type}`,\n getLocation(param)\n )\n}\n\n/**\n * Extract a literal value from an expression for default values\n */\nexport function extractLiteralValue(node: Expression): any {\n switch (node.type) {\n case 'Literal':\n return (node as any).value\n\n case 'ArrayExpression':\n return (node as any).elements.map((el: Expression) =>\n el ? extractLiteralValue(el) : null\n )\n\n case 'ObjectExpression': {\n const result: Record<string, any> = {}\n for (const prop of (node as any).properties) {\n if (prop.type === 'Property' && prop.key.type === 'Identifier') {\n result[prop.key.name] = extractLiteralValue(prop.value)\n }\n }\n return result\n }\n\n case 'UnaryExpression':\n if ((node as any).operator === '-') {\n const arg = extractLiteralValue((node as any).argument)\n return typeof arg === 'number' ? -arg : undefined\n }\n if ((node as any).operator === '+') {\n const arg = extractLiteralValue((node as any).argument)\n return typeof arg === 'number' ? +arg : undefined\n }\n return undefined\n\n case 'BinaryExpression': {\n const { operator, left } = node as any\n // | is union type — extract the left (primary) example value\n if (operator === '|') {\n return extractLiteralValue(left)\n }\n return undefined\n }\n\n case 'LogicalExpression': {\n const { operator, left, right } = node as any\n if (operator === '&&') {\n // null && type evaluates to null (falsy short-circuit)\n if (left.type === 'Literal' && left.value === null) {\n return null\n }\n }\n if (operator === '||') {\n // value || fallback - return left if truthy\n const leftVal = extractLiteralValue(left)\n return leftVal ?? extractLiteralValue(right)\n }\n if (operator === '??') {\n // value ?? fallback - return left if not null/undefined\n const leftVal = extractLiteralValue(left)\n return leftVal ?? extractLiteralValue(right)\n }\n return undefined\n }\n\n default:\n return undefined\n }\n}\n\n/**\n * Parse return type from a type annotation expression\n */\nexport function parseReturnType(typeExpr: string): TypeDescriptor {\n // Simple approach: parse as expression and infer type\n try {\n const ast = parseExpressionAt(typeExpr, 0, {\n ecmaVersion: 2022,\n })\n return inferTypeFromValue(ast)\n } catch {\n return { kind: 'any' }\n }\n}\n\n/**\n * Convert TypeDescriptor to a human-readable string\n */\nexport function typeToString(type: TypeDescriptor): string {\n switch (type.kind) {\n case 'string':\n return type.nullable ? 'string | null' : 'string'\n case 'number':\n return type.nullable ? 'number | null' : 'number'\n case 'integer':\n return type.nullable ? 'integer | null' : 'integer'\n case 'non-negative-integer':\n return type.nullable\n ? 'non-negative integer | null'\n : 'non-negative integer'\n case 'boolean':\n return type.nullable ? 'boolean | null' : 'boolean'\n case 'null':\n return 'null'\n case 'any':\n return 'any'\n case 'array': {\n const items = type.items ? typeToString(type.items) : 'any'\n return type.nullable ? `${items}[] | null` : `${items}[]`\n }\n case 'object': {\n if (!type.shape || Object.keys(type.shape).length === 0) {\n return type.nullable ? 'object | null' : 'object'\n }\n const props = Object.entries(type.shape)\n .map(([k, v]) => `${k}: ${typeToString(v)}`)\n .join(', ')\n return type.nullable ? `{ ${props} } | null` : `{ ${props} }`\n }\n case 'union':\n return type.members?.map(typeToString).join(' | ') || 'any'\n default:\n return 'any'\n }\n}\n\n/**\n * Check if a value matches a type descriptor\n */\nexport function checkType(value: any, type: TypeDescriptor): boolean {\n // Handle null\n if (value === null || value === undefined) {\n return type.nullable || type.kind === 'null' || type.kind === 'any'\n }\n\n switch (type.kind) {\n case 'any':\n return true\n case 'null':\n return value === null\n case 'string':\n return typeof value === 'string'\n case 'number':\n return typeof value === 'number'\n case 'integer':\n return typeof value === 'number' && Number.isInteger(value)\n case 'non-negative-integer':\n return typeof value === 'number' && Number.isInteger(value) && value >= 0\n case 'boolean':\n return typeof value === 'boolean'\n case 'array':\n if (!Array.isArray(value)) return false\n if (!type.items) return true\n return value.every((item) => checkType(item, type.items!))\n case 'object':\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false\n }\n if (!type.shape) return true\n // Check that all required shape properties exist and match\n for (const [key, propType] of Object.entries(type.shape)) {\n if (!checkType(value[key], propType)) {\n return false\n }\n }\n return true\n case 'union':\n if (!type.members) return true\n return type.members.some((member) => checkType(value, member))\n default:\n return true\n }\n}\n",
|
|
11
11
|
"/**\n * ESTree to Agent99 AST Transformer\n *\n * Converts parsed JavaScript into Agent99's JSON AST format.\n */\n\nimport type {\n Statement,\n Expression,\n FunctionDeclaration,\n BlockStatement,\n VariableDeclaration,\n ExpressionStatement,\n IfStatement,\n WhileStatement,\n ForOfStatement,\n TryStatement,\n ReturnStatement,\n CallExpression,\n AssignmentExpression,\n BinaryExpression,\n LogicalExpression,\n MemberExpression,\n Identifier,\n Literal,\n TemplateLiteral,\n ArrayExpression,\n ObjectExpression,\n} from 'acorn'\nimport type { BaseNode } from '../../builder'\nimport type { ExprNode } from '../../runtime'\nimport type {\n TransformContext,\n TranspileOptions,\n FunctionSignature,\n ParameterDescriptor,\n TypeDescriptor,\n TranspileWarning,\n} from '../types'\nimport { TranspileError, getLocation, createChildContext } from '../types'\nimport {\n parseParameter,\n inferTypeFromValue,\n parseReturnType,\n} from '../inference'\nimport { extractTDoc } from '../parser'\n\n/**\n * Convert TypeDescriptor to JSON Schema\n */\nfunction typeToJsonSchema(type: TypeDescriptor): any {\n switch (type.kind) {\n case 'string':\n return { type: 'string' }\n case 'number':\n return { type: 'number' }\n case 'boolean':\n return { type: 'boolean' }\n case 'null':\n // null as a default value means \"any type, defaults to null\"\n // In JSON Schema, empty object means any type is allowed\n return {}\n case 'undefined':\n return {} // JSON Schema doesn't have undefined, treat as any\n case 'any':\n return {} // No constraints\n case 'array':\n return {\n type: 'array',\n items: type.items ? typeToJsonSchema(type.items) : {},\n }\n case 'object':\n if (type.shape) {\n const properties: Record<string, any> = {}\n for (const [key, propType] of Object.entries(type.shape)) {\n properties[key] = typeToJsonSchema(propType)\n }\n return {\n type: 'object',\n properties,\n additionalProperties: false,\n }\n }\n return { type: 'object' }\n case 'union':\n if (type.members) {\n return { oneOf: type.members.map(typeToJsonSchema) }\n }\n return {}\n default:\n return {}\n }\n}\n\n/**\n * Convert function parameters to JSON Schema for input validation\n */\nfunction parametersToJsonSchema(\n parameters: Record<string, ParameterDescriptor>\n): any {\n const properties: Record<string, any> = {}\n const required: string[] = []\n\n for (const [name, param] of Object.entries(parameters)) {\n properties[name] = typeToJsonSchema(param.type)\n if (param.required) {\n required.push(name)\n }\n }\n\n return {\n type: 'object',\n properties,\n required: required.length > 0 ? required : undefined,\n additionalProperties: false,\n }\n}\n\n/**\n * Transform a function declaration into Agent99 AST\n */\nexport function transformFunction(\n func: FunctionDeclaration,\n source: string,\n returnTypeAnnotation: string | undefined,\n options: TranspileOptions = {},\n requiredParamsFromPreprocess?: Set<string>\n): {\n ast: BaseNode\n signature: FunctionSignature\n warnings: TranspileWarning[]\n} {\n // Extract TDoc (/*# ... */) comments\n const tdoc = extractTDoc(source, func)\n\n // Parse parameters\n const parameters = new Map<string, ParameterDescriptor>()\n\n for (const param of func.params) {\n const parsed = parseParameter(param, requiredParamsFromPreprocess)\n\n // Handle destructured parameters - expand into individual params\n if (\n parsed.name === '__destructured__' &&\n parsed.type.kind === 'object' &&\n parsed.type.destructuredParams\n ) {\n for (const [key, paramDesc] of Object.entries(\n parsed.type.destructuredParams\n )) {\n parameters.set(key, {\n ...(paramDesc as any),\n description: tdoc.params[key],\n })\n }\n } else {\n parsed.description = tdoc.params[parsed.name]\n parameters.set(parsed.name, parsed)\n }\n }\n\n // Parse return type\n let returnType: TypeDescriptor | undefined\n if (returnTypeAnnotation) {\n returnType = parseReturnType(returnTypeAnnotation)\n }\n\n // Create transform context\n const ctx: TransformContext = {\n depth: 0,\n locals: new Map(),\n parameters,\n atoms: new Set(Object.keys(options.atoms || {})),\n warnings: [],\n source,\n filename: options.filename || '<source>',\n options,\n }\n\n // Transform function body\n const bodySteps = transformBlock(func.body, ctx)\n\n // Handle parameters: varsImport for required, varSet with defaults for optional\n const steps: BaseNode[] = []\n const requiredParams: string[] = []\n const optionalParams: Array<{ name: string; defaultValue: any }> = []\n\n for (const [name, param] of parameters.entries()) {\n if (param.required) {\n requiredParams.push(name)\n } else if (param.default !== undefined) {\n optionalParams.push({ name, defaultValue: param.default })\n } else {\n // Optional without explicit default - still import from args\n requiredParams.push(name)\n }\n }\n\n // Import required params directly from args\n if (requiredParams.length > 0) {\n steps.push({\n op: 'varsImport',\n keys: requiredParams,\n })\n }\n\n // For optional params with defaults: import from args, then check and set default if null\n for (const { name, defaultValue } of optionalParams) {\n // Import from args (will be undefined if not provided)\n steps.push({\n op: 'varsImport',\n keys: [name],\n })\n // If null/undefined, set the default\n steps.push({\n op: 'if',\n condition: {\n $expr: 'binary',\n op: '==',\n left: { $expr: 'ident', name },\n right: { $expr: 'literal', value: null },\n },\n then: [\n {\n op: 'varSet',\n key: name,\n value: defaultValue,\n },\n ],\n })\n }\n\n steps.push(...bodySteps)\n\n // Build signature\n const signatureParams = Object.fromEntries(parameters)\n const signature: FunctionSignature = {\n name: func.id?.name || 'anonymous',\n description: tdoc.description,\n parameters: signatureParams,\n returns: returnType,\n }\n\n // Generate input schema for runtime validation\n const inputSchema = parametersToJsonSchema(signatureParams)\n\n return {\n ast: { op: 'seq', steps, inputSchema },\n signature,\n warnings: ctx.warnings,\n }\n}\n\n/**\n * Transform a block statement into a list of steps\n */\nexport function transformBlock(\n block: BlockStatement,\n ctx: TransformContext\n): BaseNode[] {\n const steps: BaseNode[] = []\n\n for (const stmt of block.body) {\n const transformed = transformStatement(stmt, ctx)\n if (transformed) {\n if (Array.isArray(transformed)) {\n steps.push(...transformed)\n } else {\n steps.push(transformed)\n }\n }\n }\n\n return steps\n}\n\n/**\n * Transform a statement\n */\nexport function transformStatement(\n stmt: Statement,\n ctx: TransformContext\n): BaseNode | BaseNode[] | null {\n switch (stmt.type) {\n case 'VariableDeclaration':\n return transformVariableDeclaration(stmt as VariableDeclaration, ctx)\n\n case 'ExpressionStatement':\n return transformExpressionStatement(stmt as ExpressionStatement, ctx)\n\n case 'IfStatement':\n return transformIfStatement(stmt as IfStatement, ctx)\n\n case 'WhileStatement':\n return transformWhileStatement(stmt as WhileStatement, ctx)\n\n case 'ForOfStatement':\n return transformForOfStatement(stmt as ForOfStatement, ctx)\n\n case 'TryStatement':\n return transformTryStatement(stmt as TryStatement, ctx)\n\n case 'ReturnStatement':\n return transformReturnStatement(stmt as ReturnStatement, ctx)\n\n case 'ThrowStatement':\n throw new TranspileError(\n `'throw' is not supported in AsyncJS. Use Error('message') to trigger error flow`,\n getLocation(stmt),\n ctx.source,\n ctx.filename\n )\n\n case 'BlockStatement':\n // Nested block creates a scope\n return {\n op: 'scope',\n steps: transformBlock(stmt as BlockStatement, createChildContext(ctx)),\n }\n\n case 'EmptyStatement':\n return null\n\n default:\n throw new TranspileError(\n `Unsupported statement type: ${stmt.type}`,\n getLocation(stmt),\n ctx.source,\n ctx.filename\n )\n }\n}\n\n/**\n * Transform variable declaration: let x = value or const x = value\n */\nfunction transformVariableDeclaration(\n decl: VariableDeclaration,\n ctx: TransformContext\n): BaseNode[] {\n const steps: BaseNode[] = []\n const isConst = decl.kind === 'const'\n const opName = isConst ? 'constSet' : 'varSet'\n\n for (const declarator of decl.declarations) {\n if (declarator.id.type !== 'Identifier') {\n throw new TranspileError(\n 'Only simple variable names are supported',\n getLocation(declarator),\n ctx.source,\n ctx.filename\n )\n }\n\n const name = (declarator.id as Identifier).name\n\n if (declarator.init) {\n // Transform the initializer\n const { step, resultVar } = transformExpressionToStep(\n declarator.init,\n ctx,\n name,\n isConst\n )\n\n if (step) {\n steps.push(step)\n } else if (resultVar !== name) {\n // Simple value assignment\n steps.push({\n op: opName,\n key: name,\n value: resultVar,\n })\n }\n\n // Track variable type\n const type = inferTypeFromValue(declarator.init as Expression)\n ctx.locals.set(name, type)\n } else {\n // Uninitialized variable (only valid for let, not const)\n if (isConst) {\n throw new TranspileError(\n 'const declarations must be initialized',\n getLocation(declarator),\n ctx.source,\n ctx.filename\n )\n }\n steps.push({\n op: 'varSet',\n key: name,\n value: null,\n })\n ctx.locals.set(name, { kind: 'any', nullable: true })\n }\n }\n\n return steps\n}\n\n/**\n * Transform expression statement (e.g., function call)\n */\nfunction transformExpressionStatement(\n stmt: ExpressionStatement,\n ctx: TransformContext\n): BaseNode | null {\n const expr = stmt.expression\n\n // Assignment expression: x = value\n if (expr.type === 'AssignmentExpression') {\n return transformAssignment(expr as AssignmentExpression, ctx)\n }\n\n // Function call (side effect)\n if (expr.type === 'CallExpression') {\n const { step, resultVar } = transformExpressionToStep(expr, ctx)\n if (step) {\n return step\n }\n // If no step but we got an expression (e.g., method call on builtin),\n // we still need to evaluate it for side effects (like s.add(x))\n if (resultVar) {\n return {\n op: 'varSet',\n key: '_',\n value: resultVar,\n }\n }\n return null\n }\n\n // Other expressions (e.g., just a value) - no-op\n ctx.warnings.push({\n message: 'Expression statement has no effect',\n line: getLocation(stmt).line,\n column: getLocation(stmt).column,\n })\n\n return null\n}\n\n/**\n * Transform assignment: x = value\n */\nfunction transformAssignment(\n expr: AssignmentExpression,\n ctx: TransformContext\n): BaseNode {\n if (expr.left.type !== 'Identifier') {\n throw new TranspileError(\n 'Only simple variable assignment is supported',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n const name = (expr.left as Identifier).name\n const { step, resultVar } = transformExpressionToStep(expr.right, ctx, name)\n\n if (step) {\n return step\n }\n\n return {\n op: 'varSet',\n key: name,\n value: resultVar,\n }\n}\n\n/**\n * Transform if statement\n */\nfunction transformIfStatement(\n stmt: IfStatement,\n ctx: TransformContext\n): BaseNode {\n // Convert condition to ExprNode\n const condition = expressionToExprNode(stmt.test, ctx)\n\n // Transform then branch\n const thenSteps =\n stmt.consequent.type === 'BlockStatement'\n ? transformBlock(\n stmt.consequent as BlockStatement,\n createChildContext(ctx)\n )\n : ([transformStatement(stmt.consequent, ctx)].filter(\n Boolean\n ) as BaseNode[])\n\n // Transform else branch if present\n let elseSteps: BaseNode[] | undefined\n if (stmt.alternate) {\n elseSteps =\n stmt.alternate.type === 'BlockStatement'\n ? transformBlock(\n stmt.alternate as BlockStatement,\n createChildContext(ctx)\n )\n : ([transformStatement(stmt.alternate, ctx)].filter(\n Boolean\n ) as BaseNode[])\n }\n\n return {\n op: 'if',\n condition,\n then: thenSteps,\n ...(elseSteps && { else: elseSteps }),\n }\n}\n\n/**\n * Transform while statement\n */\nfunction transformWhileStatement(\n stmt: WhileStatement,\n ctx: TransformContext\n): BaseNode {\n const condition = expressionToExprNode(stmt.test, ctx)\n\n const body =\n stmt.body.type === 'BlockStatement'\n ? transformBlock(stmt.body as BlockStatement, createChildContext(ctx))\n : ([transformStatement(stmt.body, ctx)].filter(Boolean) as BaseNode[])\n\n return {\n op: 'while',\n condition,\n body,\n }\n}\n\n/**\n * Transform for...of statement into map atom\n */\nfunction transformForOfStatement(\n stmt: ForOfStatement,\n ctx: TransformContext\n): BaseNode {\n // Get the loop variable name\n let varName: string\n if (stmt.left.type === 'VariableDeclaration') {\n const decl = stmt.left.declarations[0]\n if (decl.id.type !== 'Identifier') {\n throw new TranspileError(\n 'Only simple variable names are supported in for...of',\n getLocation(stmt.left),\n ctx.source,\n ctx.filename\n )\n }\n varName = (decl.id as Identifier).name\n } else if (stmt.left.type === 'Identifier') {\n varName = (stmt.left as Identifier).name\n } else {\n throw new TranspileError(\n 'Unsupported for...of left-hand side',\n getLocation(stmt.left),\n ctx.source,\n ctx.filename\n )\n }\n\n // Get the iterable\n const items = expressionToValue(stmt.right, ctx)\n\n // Create child context with loop variable\n const childCtx = createChildContext(ctx)\n childCtx.locals.set(varName, { kind: 'any' })\n\n // Transform body\n const steps =\n stmt.body.type === 'BlockStatement'\n ? transformBlock(stmt.body as BlockStatement, childCtx)\n : ([transformStatement(stmt.body, childCtx)].filter(\n Boolean\n ) as BaseNode[])\n\n return {\n op: 'map',\n items,\n as: varName,\n steps,\n }\n}\n\n/**\n * Transform try/catch statement\n */\nfunction transformTryStatement(\n stmt: TryStatement,\n ctx: TransformContext\n): BaseNode {\n const trySteps = transformBlock(stmt.block, createChildContext(ctx))\n\n let catchSteps: BaseNode[] | undefined\n let catchParam: string | undefined\n if (stmt.handler) {\n const catchCtx = createChildContext(ctx)\n // Add error variable to scope if named\n if (stmt.handler.param?.type === 'Identifier') {\n catchParam = (stmt.handler.param as Identifier).name\n catchCtx.locals.set(catchParam, {\n kind: 'any',\n })\n }\n catchSteps = transformBlock(stmt.handler.body, catchCtx)\n }\n\n return {\n op: 'try',\n try: trySteps,\n ...(catchSteps && { catch: catchSteps }),\n ...(catchParam && { catchParam }),\n }\n}\n\n/**\n * Transform return statement\n */\nfunction transformReturnStatement(\n stmt: ReturnStatement,\n ctx: TransformContext\n): BaseNode | BaseNode[] {\n if (!stmt.argument) {\n return { op: 'return', value: {} }\n }\n\n // Check if the return expression requires a preceding step (e.g., atom call)\n const { step, resultVar } = transformExpressionToStep(\n stmt.argument,\n ctx,\n '__returnVal__'\n )\n\n // If there's a step (atom call), emit it first, then return the result variable\n if (step) {\n return [step, { op: 'return', value: resultVar }]\n }\n\n // Otherwise, convert expression directly to a value for return\n const value = expressionToValue(stmt.argument, ctx)\n return { op: 'return', value }\n}\n\n// Known builtins that should be evaluated as expressions, not atom calls\nconst BUILTIN_OBJECTS = new Set([\n 'Math',\n 'JSON',\n 'Array',\n 'Object',\n 'String',\n 'Number',\n 'console',\n 'Date', // Date factory with static methods like Date.now()\n 'Schema', // tosijs-schema fluent API for building JSON Schemas\n])\n\nconst BUILTIN_GLOBALS = new Set([\n 'parseInt',\n 'parseFloat',\n 'isNaN',\n 'isFinite',\n 'encodeURI',\n 'decodeURI',\n 'encodeURIComponent',\n 'decodeURIComponent',\n 'Set', // Factory function for set-like objects\n 'Date', // Factory function for date-like objects\n 'filter', // Schema-based object filtering\n])\n\nconst UNSUPPORTED_BUILTINS = new Set([\n 'RegExp',\n 'Promise',\n 'Map',\n 'WeakSet',\n 'WeakMap',\n 'Symbol',\n 'Proxy',\n 'Reflect',\n 'Function',\n 'eval',\n 'setTimeout',\n 'setInterval',\n 'fetch',\n 'require',\n 'import',\n 'process',\n 'window',\n 'document',\n 'global',\n 'globalThis',\n])\n\n// Instance methods that should be evaluated as expressions, not atom calls\n// These are methods on values (strings, arrays, etc.) that have native implementations\nconst INSTANCE_METHODS = new Set([\n // String methods\n 'toUpperCase',\n 'toLowerCase',\n 'trim',\n 'trimStart',\n 'trimEnd',\n 'charAt',\n 'charCodeAt',\n 'codePointAt',\n 'concat',\n 'includes',\n 'indexOf',\n 'lastIndexOf',\n 'startsWith',\n 'endsWith',\n 'slice',\n 'substring',\n 'substr',\n 'replace',\n 'replaceAll',\n 'match',\n 'search',\n 'padStart',\n 'padEnd',\n 'repeat',\n 'normalize',\n 'localeCompare',\n 'toString',\n 'valueOf',\n 'at',\n // Array methods (that don't need special atom handling)\n 'reverse',\n 'sort',\n 'fill',\n 'copyWithin',\n 'flat',\n 'flatMap',\n 'every',\n 'some',\n 'forEach',\n // Note: map, filter, find, reduce are handled specially as atoms for lambda support\n // Set methods (from Set() builtin)\n 'add',\n 'remove',\n 'has',\n 'clear',\n 'toArray',\n 'union',\n 'intersection',\n 'diff',\n // Date methods (from Date() builtin)\n 'format',\n 'isBefore',\n 'isAfter',\n // Note: Date.add and Date.diff are method calls that return new values\n])\n\n/**\n * Check if a CallExpression is a builtin call (Math.floor, JSON.parse, etc.)\n * or an instance method call (str.toUpperCase(), arr.includes(), etc.)\n */\nfunction isBuiltinCall(expr: CallExpression): boolean {\n // Check for global functions like parseInt()\n if (expr.callee.type === 'Identifier') {\n const name = (expr.callee as Identifier).name\n return BUILTIN_GLOBALS.has(name) || UNSUPPORTED_BUILTINS.has(name)\n }\n\n // Check for method calls\n if (expr.callee.type === 'MemberExpression') {\n const member = expr.callee as MemberExpression\n\n // Check for method calls on builtin objects like Math.floor()\n if (member.object.type === 'Identifier') {\n const objName = (member.object as Identifier).name\n if (BUILTIN_OBJECTS.has(objName) || UNSUPPORTED_BUILTINS.has(objName)) {\n return true\n }\n }\n\n // Check for instance method calls like str.toUpperCase()\n if (member.property.type === 'Identifier') {\n const methodName = (member.property as Identifier).name\n if (INSTANCE_METHODS.has(methodName)) {\n return true\n }\n }\n }\n\n return false\n}\n\n/**\n * Check if a MemberExpression is accessing a builtin object (Math.PI, Number.MAX_VALUE, etc.)\n */\nfunction isBuiltinMemberAccess(expr: MemberExpression): boolean {\n if (expr.object.type === 'Identifier') {\n const objName = (expr.object as Identifier).name\n return BUILTIN_OBJECTS.has(objName) || UNSUPPORTED_BUILTINS.has(objName)\n }\n return false\n}\n\n// Error messages for unsupported builtins\nconst UNSUPPORTED_BUILTIN_MESSAGES: Record<string, string> = {\n RegExp: 'RegExp is not available. Use string methods or the regexMatch atom.',\n Promise: 'Promise is not needed. All operations are implicitly async.',\n Map: 'Map is not available. Use plain objects instead.',\n WeakSet: 'WeakSet is not available.',\n WeakMap: 'WeakMap is not available.',\n Symbol: 'Symbol is not available.',\n Proxy: 'Proxy is not available.',\n Reflect: 'Reflect is not available.',\n Function: 'Function constructor is not available. Define functions normally.',\n eval: 'eval is not available. Code is compiled, not evaluated.',\n setTimeout: 'setTimeout is not available. Use the delay atom.',\n setInterval: 'setInterval is not available. Use while loops with delay.',\n fetch: 'fetch is not available. Use the httpFetch atom.',\n require: 'require is not available. Atoms must be registered with the VM.',\n import: 'import is not available. Atoms must be registered with the VM.',\n process: 'process is not available. AsyncJS runs in a sandboxed environment.',\n window: 'window is not available. AsyncJS runs in a sandboxed environment.',\n document:\n 'document is not available. AsyncJS runs in a sandboxed environment.',\n global: 'global is not available. AsyncJS runs in a sandboxed environment.',\n globalThis: 'globalThis is not available. Use builtins directly.',\n}\n\n/**\n * Check if expression uses an unsupported builtin and return error message if so\n */\nfunction getUnsupportedBuiltinError(expr: CallExpression): string | null {\n if (expr.callee.type === 'Identifier') {\n const name = (expr.callee as Identifier).name\n if (UNSUPPORTED_BUILTINS.has(name)) {\n return (\n UNSUPPORTED_BUILTIN_MESSAGES[name] ||\n `${name} is not available in AsyncJS.`\n )\n }\n }\n\n if (expr.callee.type === 'MemberExpression') {\n const member = expr.callee as MemberExpression\n if (member.object.type === 'Identifier') {\n const objName = (member.object as Identifier).name\n if (UNSUPPORTED_BUILTINS.has(objName)) {\n return (\n UNSUPPORTED_BUILTIN_MESSAGES[objName] ||\n `${objName} is not available in AsyncJS.`\n )\n }\n }\n }\n\n return null\n}\n\n/**\n * Get helpful suggestion for 'new' expression alternatives\n */\nfunction getNewExpressionSuggestion(constructorName: string): string {\n const suggestions: Record<string, string> = {\n Date: \" Use Date() or Date('2024-01-15') instead - no 'new' needed.\",\n Set: \" Use Set([items]) instead - no 'new' needed.\",\n Map: ' Use plain objects instead of Map.',\n Array: ' Use array literals like [1, 2, 3] instead.',\n Object: ' Use object literals like { key: value } instead.',\n Error: \" Return an error object like { error: 'message' } instead.\",\n RegExp: ' Use string methods or the regexMatch atom.',\n Promise: ' Not needed - all operations are implicitly async.',\n WeakSet: ' WeakSet is not available.',\n WeakMap: ' WeakMap is not available.',\n }\n return (\n suggestions[constructorName] ||\n ' Use factory functions or object literals instead.'\n )\n}\n\n/**\n * Transform an expression, potentially into a step with a result variable\n */\nfunction transformExpressionToStep(\n expr: Expression,\n ctx: TransformContext,\n resultVar?: string,\n isConst?: boolean\n): { step: BaseNode | null; resultVar: any } {\n const varOp = isConst ? 'constSet' : 'varSet'\n\n // Unwrap ChainExpression (optional chaining wrapper)\n if (expr.type === 'ChainExpression') {\n const chain = expr as any\n // The inner expression has optional: true on the relevant nodes\n // Just recurse with the unwrapped expression\n return transformExpressionToStep(\n chain.expression as Expression,\n ctx,\n resultVar,\n isConst\n )\n }\n\n // Check for 'new' keyword - not supported in AsyncJS\n if (expr.type === 'NewExpression') {\n const newExpr = expr as any\n let constructorName = 'constructor'\n if (newExpr.callee.type === 'Identifier') {\n constructorName = newExpr.callee.name\n }\n const suggestion = getNewExpressionSuggestion(constructorName)\n throw new TranspileError(\n `The 'new' keyword is not supported in AsyncJS.${suggestion}`,\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n // Check for unsupported builtins first and give helpful error\n if (expr.type === 'CallExpression') {\n const unsupportedError = getUnsupportedBuiltinError(expr as CallExpression)\n if (unsupportedError) {\n throw new TranspileError(\n unsupportedError,\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n }\n\n // Check if this is a builtin call (Math.floor, JSON.parse, parseInt, etc.)\n // Builtins are evaluated as expressions, not atom calls\n if (expr.type === 'CallExpression' && isBuiltinCall(expr as CallExpression)) {\n const exprNode = expressionToExprNode(expr, ctx)\n\n if (resultVar) {\n return {\n step: {\n op: varOp,\n key: resultVar,\n value: exprNode,\n },\n resultVar,\n }\n }\n\n return { step: null, resultVar: exprNode as any }\n }\n\n // Check if this is a builtin member access (Math.PI, Number.MAX_SAFE_INTEGER, etc.)\n if (\n expr.type === 'MemberExpression' &&\n isBuiltinMemberAccess(expr as MemberExpression)\n ) {\n const exprNode = expressionToExprNode(expr, ctx)\n\n if (resultVar) {\n return {\n step: {\n op: varOp,\n key: resultVar,\n value: exprNode,\n },\n resultVar,\n }\n }\n\n return { step: null, resultVar: exprNode as any }\n }\n\n // Function call -> atom invocation\n if (expr.type === 'CallExpression') {\n return transformCallExpression(\n expr as CallExpression,\n ctx,\n resultVar,\n isConst\n )\n }\n\n // Template literal -> template atom\n if (expr.type === 'TemplateLiteral') {\n return transformTemplateLiteral(\n expr as TemplateLiteral,\n ctx,\n resultVar,\n isConst\n )\n }\n\n // Binary/logical/unary expression - convert to ExprNode\n if (\n expr.type === 'BinaryExpression' ||\n expr.type === 'LogicalExpression' ||\n expr.type === 'UnaryExpression'\n ) {\n const exprNode = expressionToExprNode(expr, ctx)\n\n // If we need to store the result, emit a varSet/constSet with the expression node as value\n if (resultVar) {\n return {\n step: {\n op: varOp,\n key: resultVar,\n value: exprNode,\n },\n resultVar,\n }\n }\n\n // No storage needed, just return the expression node as the result\n return { step: null, resultVar: exprNode as any }\n }\n\n // Simple value - no step needed\n const value = expressionToValue(expr, ctx)\n return { step: null, resultVar: value }\n}\n\n/**\n * Transform a function call expression\n */\nfunction transformCallExpression(\n expr: CallExpression,\n ctx: TransformContext,\n resultVar?: string,\n isConst?: boolean\n): { step: BaseNode; resultVar: string | undefined } {\n // Get the function name\n let funcName: string\n let isMethodCall = false\n let receiver: any\n\n if (expr.callee.type === 'Identifier') {\n funcName = (expr.callee as Identifier).name\n } else if (expr.callee.type === 'MemberExpression') {\n const member = expr.callee as MemberExpression\n if (member.property.type === 'Identifier') {\n funcName = (member.property as Identifier).name\n isMethodCall = true\n receiver = expressionToValue(member.object as Expression, ctx)\n } else {\n throw new TranspileError(\n 'Computed method names are not supported',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n } else {\n throw new TranspileError(\n 'Only named function calls are supported',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n // Handle built-in method calls\n if (isMethodCall) {\n return transformMethodCall(\n funcName,\n receiver,\n expr.arguments as Expression[],\n ctx,\n resultVar,\n isConst\n )\n }\n\n // Handle console.log specially\n if (funcName === 'console' && expr.callee.type === 'MemberExpression') {\n // This would be caught above, but just in case\n }\n\n // Check if it's a known atom\n // For now, we assume any function call is an atom call\n // The VM will validate at runtime\n\n // Extract arguments\n const args = extractCallArguments(expr, ctx)\n\n return {\n step: {\n op: funcName,\n ...args,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n}\n\n/**\n * Handle method calls like arr.map(), str.slice(), etc.\n */\nfunction transformMethodCall(\n method: string,\n receiver: any,\n args: Expression[],\n ctx: TransformContext,\n resultVar?: string,\n isConst?: boolean\n): { step: BaseNode; resultVar: string | undefined } {\n switch (method) {\n case 'map':\n // arr.map(x => ...) -> map atom\n if (\n args.length > 0 &&\n (args[0].type === 'ArrowFunctionExpression' ||\n args[0].type === 'FunctionExpression')\n ) {\n const callback = args[0] as any\n const param = callback.params[0]\n const paramName = param?.type === 'Identifier' ? param.name : 'item'\n\n const childCtx = createChildContext(ctx)\n childCtx.locals.set(paramName, { kind: 'any' })\n\n let steps: BaseNode[]\n if (callback.body.type === 'BlockStatement') {\n steps = transformBlock(callback.body, childCtx)\n } else {\n // Expression body: x => x * 2\n const { step, resultVar: exprResult } = transformExpressionToStep(\n callback.body,\n childCtx,\n 'result'\n )\n steps = step\n ? [step]\n : [{ op: 'varSet', key: 'result', value: exprResult }]\n }\n\n return {\n step: {\n op: 'map',\n items: receiver,\n as: paramName,\n steps,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n }\n break\n\n case 'filter':\n // arr.filter(x => condition) -> filter atom\n if (\n args.length > 0 &&\n (args[0].type === 'ArrowFunctionExpression' ||\n args[0].type === 'FunctionExpression')\n ) {\n const callback = args[0] as any\n const param = callback.params[0]\n const paramName = param?.type === 'Identifier' ? param.name : 'item'\n\n const childCtx = createChildContext(ctx)\n childCtx.locals.set(paramName, { kind: 'any' })\n\n // For filter, the callback should return a boolean expression\n // Convert the body to an ExprNode\n let condition: any\n if (callback.body.type === 'BlockStatement') {\n // Block body - look for return statement\n throw new TranspileError(\n 'filter callback must be an expression, not a block',\n getLocation(args[0]),\n ctx.source,\n ctx.filename\n )\n } else {\n // Expression body: x => x > 5\n condition = expressionToExprNode(callback.body, childCtx)\n }\n\n return {\n step: {\n op: 'filter',\n items: receiver,\n as: paramName,\n condition,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n }\n break\n\n case 'find':\n // arr.find(x => condition) -> find atom\n if (\n args.length > 0 &&\n (args[0].type === 'ArrowFunctionExpression' ||\n args[0].type === 'FunctionExpression')\n ) {\n const callback = args[0] as any\n const param = callback.params[0]\n const paramName = param?.type === 'Identifier' ? param.name : 'item'\n\n const childCtx = createChildContext(ctx)\n childCtx.locals.set(paramName, { kind: 'any' })\n\n let condition: any\n if (callback.body.type === 'BlockStatement') {\n throw new TranspileError(\n 'find callback must be an expression, not a block',\n getLocation(args[0]),\n ctx.source,\n ctx.filename\n )\n } else {\n condition = expressionToExprNode(callback.body, childCtx)\n }\n\n return {\n step: {\n op: 'find',\n items: receiver,\n as: paramName,\n condition,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n }\n break\n\n case 'reduce':\n // arr.reduce((acc, x) => expr, initial) -> reduce atom\n if (\n args.length >= 2 &&\n (args[0].type === 'ArrowFunctionExpression' ||\n args[0].type === 'FunctionExpression')\n ) {\n const callback = args[0] as any\n const accParam = callback.params[0]\n const itemParam = callback.params[1]\n const accName = accParam?.type === 'Identifier' ? accParam.name : 'acc'\n const itemName =\n itemParam?.type === 'Identifier' ? itemParam.name : 'item'\n\n const childCtx = createChildContext(ctx)\n childCtx.locals.set(accName, { kind: 'any' })\n childCtx.locals.set(itemName, { kind: 'any' })\n\n let steps: BaseNode[]\n if (callback.body.type === 'BlockStatement') {\n steps = transformBlock(callback.body, childCtx)\n } else {\n // Expression body: (acc, x) => acc + x\n const { step, resultVar: exprResult } = transformExpressionToStep(\n callback.body,\n childCtx,\n 'result'\n )\n steps = step\n ? [step]\n : [{ op: 'varSet', key: 'result', value: exprResult }]\n }\n\n const initial = expressionToValue(args[1], ctx)\n\n return {\n step: {\n op: 'reduce',\n items: receiver,\n as: itemName,\n accumulator: accName,\n initial,\n steps,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n }\n break\n\n case 'slice':\n // TODO: Could map to a slice atom\n break\n\n case 'push':\n return {\n step: {\n op: 'push',\n list: receiver,\n item: expressionToValue(args[0], ctx),\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n\n case 'join':\n return {\n step: {\n op: 'join',\n list: receiver,\n sep: args.length > 0 ? expressionToValue(args[0], ctx) : '',\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n\n case 'split':\n return {\n step: {\n op: 'split',\n str: receiver,\n sep: args.length > 0 ? expressionToValue(args[0], ctx) : '',\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n }\n\n // Unknown method - emit warning and try as generic call\n ctx.warnings.push({\n message: `Unknown method '${method}' - treating as atom call`,\n line: 0,\n column: 0,\n })\n\n return {\n step: {\n op: method,\n receiver,\n args: args.map((a) => expressionToValue(a, ctx)),\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n}\n\n/**\n * Transform template literal\n */\nfunction transformTemplateLiteral(\n expr: TemplateLiteral,\n ctx: TransformContext,\n resultVar?: string,\n isConst?: boolean\n): { step: BaseNode; resultVar: string | undefined } {\n // Build template string with {{var}} placeholders\n let tmpl = ''\n const vars: Record<string, any> = {}\n\n for (let i = 0; i < expr.quasis.length; i++) {\n tmpl += expr.quasis[i].value.cooked || expr.quasis[i].value.raw\n\n if (i < expr.expressions.length) {\n const exprNode = expr.expressions[i]\n const varName = `_${i}`\n vars[varName] = expressionToValue(exprNode as Expression, ctx)\n tmpl += `{{${varName}}}`\n }\n }\n\n return {\n step: {\n op: 'template',\n tmpl,\n vars,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n}\n\n/**\n * Convert an Acorn expression to an ExprNode for direct VM evaluation.\n * This replaces the string-based condition system.\n */\nfunction expressionToExprNode(\n expr: Expression,\n ctx: TransformContext\n): ExprNode {\n switch (expr.type) {\n case 'Literal': {\n const lit = expr as Literal\n return { $expr: 'literal', value: lit.value }\n }\n\n case 'Identifier': {\n const id = expr as Identifier\n return { $expr: 'ident', name: id.name }\n }\n\n case 'MemberExpression': {\n const mem = expr as MemberExpression\n const obj = expressionToExprNode(mem.object as Expression, ctx)\n const isOptional = (mem as any).optional === true\n\n if (mem.computed) {\n // arr[0] or obj[key] - computed access\n // For now, only support literal indices\n const prop = mem.property as Expression\n if (prop.type === 'Literal') {\n return {\n $expr: 'member',\n object: obj,\n property: String((prop as Literal).value),\n computed: true,\n ...(isOptional && { optional: true }),\n }\n }\n // For computed with variable, we'd need more complex handling\n throw new TranspileError(\n 'Computed member access with variables not yet supported',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n const propName = (mem.property as Identifier).name\n return {\n $expr: 'member',\n object: obj,\n property: propName,\n ...(isOptional && { optional: true }),\n }\n }\n\n case 'ChainExpression': {\n // ChainExpression wraps optional chaining (?.)\n // Just unwrap to the inner expression which will have optional: true\n const chain = expr as any\n return expressionToExprNode(chain.expression as Expression, ctx)\n }\n\n case 'BinaryExpression': {\n const bin = expr as BinaryExpression\n return {\n $expr: 'binary',\n op: bin.operator,\n left: expressionToExprNode(bin.left as Expression, ctx),\n right: expressionToExprNode(bin.right as Expression, ctx),\n }\n }\n\n case 'LogicalExpression': {\n const log = expr as LogicalExpression\n return {\n $expr: 'logical',\n op: log.operator as '&&' | '||' | '??',\n left: expressionToExprNode(log.left as Expression, ctx),\n right: expressionToExprNode(log.right as Expression, ctx),\n }\n }\n\n case 'UnaryExpression': {\n const un = expr as any\n return {\n $expr: 'unary',\n op: un.operator,\n argument: expressionToExprNode(un.argument as Expression, ctx),\n }\n }\n\n case 'ConditionalExpression': {\n const cond = expr as any\n return {\n $expr: 'conditional',\n test: expressionToExprNode(cond.test as Expression, ctx),\n consequent: expressionToExprNode(cond.consequent as Expression, ctx),\n alternate: expressionToExprNode(cond.alternate as Expression, ctx),\n }\n }\n\n case 'ArrayExpression': {\n const arr = expr as ArrayExpression\n return {\n $expr: 'array',\n elements: arr.elements\n .filter((el): el is Expression => el !== null)\n .map((el) => expressionToExprNode(el, ctx)),\n }\n }\n\n case 'ObjectExpression': {\n const obj = expr as ObjectExpression\n const properties: { key: string; value: ExprNode }[] = []\n\n for (const prop of obj.properties) {\n if (prop.type === 'Property') {\n const key =\n prop.key.type === 'Identifier'\n ? (prop.key as Identifier).name\n : String((prop.key as Literal).value)\n properties.push({\n key,\n value: expressionToExprNode(prop.value as Expression, ctx),\n })\n }\n }\n\n return { $expr: 'object', properties }\n }\n\n case 'CallExpression': {\n const call = expr as CallExpression\n\n // Handle method calls (e.g., Math.floor(x), str.toUpperCase(), arr.push(x))\n if (call.callee.type === 'MemberExpression') {\n const member = call.callee as MemberExpression\n const method =\n member.property.type === 'Identifier'\n ? (member.property as Identifier).name\n : String((member.property as Literal).value)\n\n // Check for optional chaining: obj?.method() or obj.method?.()\n const isOptional =\n (member as any).optional === true || (call as any).optional === true\n\n return {\n $expr: 'methodCall',\n object: expressionToExprNode(member.object as Expression, ctx),\n method,\n arguments: call.arguments.map((arg) =>\n expressionToExprNode(arg as Expression, ctx)\n ),\n ...(isOptional && { optional: true }),\n }\n }\n\n // Handle global function calls (e.g., parseInt(x), parseFloat(x))\n if (call.callee.type === 'Identifier') {\n const funcName = (call.callee as Identifier).name\n return {\n $expr: 'call',\n callee: funcName,\n arguments: call.arguments.map((arg) =>\n expressionToExprNode(arg as Expression, ctx)\n ),\n }\n }\n\n // Other call types not supported in expressions\n throw new TranspileError(\n 'Complex function calls in expressions should be lifted to statements',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n case 'NewExpression': {\n const newExpr = expr as any\n let constructorName = 'constructor'\n if (newExpr.callee.type === 'Identifier') {\n constructorName = newExpr.callee.name\n }\n const suggestion = getNewExpressionSuggestion(constructorName)\n throw new TranspileError(\n `The 'new' keyword is not supported in AsyncJS.${suggestion}`,\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n case 'TemplateLiteral':\n throw new TranspileError(\n 'Template literals inside expressions are not supported. ' +\n 'Assign to a variable first: const msg = `hello ${name}`; then use msg',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n\n default:\n throw new TranspileError(\n `Unsupported expression type in condition: ${expr.type}`,\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n}\n\n// Note: extractCondition, expressionToConditionString, and extractVariablesFromExpression\n// have been removed. Use expressionToExprNode instead - it converts Acorn AST directly\n// to ExprNode format, eliminating the need for JSEP string parsing at runtime.\n\n/**\n * Convert an expression to a runtime value (for varSet, etc.)\n */\nfunction expressionToValue(expr: Expression, ctx: TransformContext): any {\n switch (expr.type) {\n case 'Literal':\n return (expr as Literal).value\n\n case 'Identifier': {\n const name = (expr as Identifier).name\n // Parameters are imported into state via varsImport at function start,\n // so we reference them as state variables (just the name string)\n // No need for $kind: 'arg' since args are copied to state\n return name\n }\n\n case 'MemberExpression': {\n const mem = expr as MemberExpression\n const isOptional = (mem as any).optional === true\n\n // If optional chaining, we need an ExprNode for proper runtime handling\n if (isOptional) {\n return expressionToExprNode(expr, ctx)\n }\n\n const objValue = expressionToValue(mem.object as Expression, ctx)\n\n // If the object resolved to an ExprNode (e.g., from nested optional chaining),\n // we need to build an ExprNode for this access too\n if (objValue && typeof objValue === 'object' && objValue.$expr) {\n const prop = mem.computed\n ? String((mem.property as Literal).value)\n : (mem.property as Identifier).name\n return {\n $expr: 'member',\n object: objValue,\n property: prop,\n ...(mem.computed && { computed: true }),\n }\n }\n\n if (mem.computed) {\n // arr[0] - would need runtime evaluation\n return `${objValue}[${expressionToValue(\n mem.property as Expression,\n ctx\n )}]`\n }\n\n const prop = (mem.property as Identifier).name\n\n // If objValue is a string path, extend it\n if (typeof objValue === 'string') {\n return `${objValue}.${prop}`\n }\n\n // If objValue is an arg ref, extend the path\n if (objValue && objValue.$kind === 'arg') {\n return { $kind: 'arg', path: `${objValue.path}.${prop}` }\n }\n\n return `${objValue}.${prop}`\n }\n\n case 'ChainExpression': {\n // Unwrap ChainExpression and process the inner expression\n const chain = expr as any\n return expressionToValue(chain.expression as Expression, ctx)\n }\n\n case 'ArrayExpression':\n return (expr as ArrayExpression).elements.map((el) =>\n el ? expressionToValue(el as Expression, ctx) : null\n )\n\n case 'ObjectExpression': {\n const result: Record<string, any> = {}\n for (const prop of (expr as ObjectExpression).properties) {\n if (prop.type === 'Property') {\n const key =\n prop.key.type === 'Identifier'\n ? (prop.key as Identifier).name\n : String((prop.key as Literal).value)\n result[key] = expressionToValue(prop.value as Expression, ctx)\n }\n }\n return result\n }\n\n case 'TemplateLiteral':\n // Template literals need runtime evaluation - convert to ExprNode\n // This will throw a helpful error explaining the limitation\n return expressionToExprNode(expr, ctx)\n\n case 'CallExpression':\n // Method calls like s.toArray() used as values need to be ExprNodes\n return expressionToExprNode(expr, ctx)\n\n case 'BinaryExpression':\n case 'LogicalExpression':\n case 'UnaryExpression':\n case 'ConditionalExpression':\n // Complex expressions need to be ExprNodes for runtime evaluation\n return expressionToExprNode(expr, ctx)\n\n default:\n return null\n }\n}\n\n/**\n * Extract call arguments from a call expression\n */\nfunction extractCallArguments(\n expr: CallExpression,\n ctx: TransformContext\n): Record<string, any> {\n // If single object argument, spread it\n if (\n expr.arguments.length === 1 &&\n expr.arguments[0].type === 'ObjectExpression'\n ) {\n const obj = expr.arguments[0] as ObjectExpression\n const result: Record<string, any> = {}\n\n for (const prop of obj.properties) {\n if (prop.type === 'Property') {\n const key =\n prop.key.type === 'Identifier'\n ? (prop.key as Identifier).name\n : String((prop.key as Literal).value)\n result[key] = expressionToValue(prop.value as Expression, ctx)\n }\n }\n\n return result\n }\n\n // Otherwise, use positional args\n return {\n args: expr.arguments.map((arg) =>\n expressionToValue(arg as Expression, ctx)\n ),\n }\n}\n",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"/**\n * TJS to WebAssembly Compiler\n *\n * Compiles a subset of TJS to WebAssembly for performance-critical code.\n *\n * Supported features:\n * - Numeric operations (+, -, *, /, %)\n * - Typed arrays (Float32Array, Float64Array, Int32Array, Uint8Array)\n * - For loops with numeric bounds\n * - Math functions (sin, cos, sqrt, abs, floor, ceil, min, max)\n * - Basic conditionals (if/else)\n * - Variable declarations (let)\n *\n * The goal is to enable real-world WASM acceleration for hot paths like\n * audio processing, image manipulation, and physics simulations.\n */\n\nimport * as acorn from 'acorn'\nimport type { WasmBlock } from './parser'\n\n// ============================================================================\n// WASM Binary Encoding Constants\n// ============================================================================\n\n/** WASM value type codes */\nconst Type = {\n i32: 0x7f,\n i64: 0x7e,\n f32: 0x7d,\n f64: 0x7c,\n v128: 0x7b,\n funcref: 0x70,\n externref: 0x6f,\n void: 0x40, // empty block type\n} as const\n\n/** WASM section codes */\nconst Section = {\n custom: 0,\n type: 1,\n import: 2,\n function: 3,\n table: 4,\n memory: 5,\n global: 6,\n export: 7,\n start: 8,\n element: 9,\n code: 10,\n data: 11,\n} as const\n\n/** WASM opcodes */\nconst Op = {\n // Control flow\n unreachable: 0x00,\n nop: 0x01,\n block: 0x02,\n loop: 0x03,\n if: 0x04,\n else: 0x05,\n end: 0x0b,\n br: 0x0c,\n br_if: 0x0d,\n br_table: 0x0e,\n return: 0x0f,\n call: 0x10,\n call_indirect: 0x11,\n\n // Parametric\n drop: 0x1a,\n select: 0x1b,\n\n // Variable access\n local_get: 0x20,\n local_set: 0x21,\n local_tee: 0x22,\n global_get: 0x23,\n global_set: 0x24,\n\n // Memory operations\n i32_load: 0x28,\n i64_load: 0x29,\n f32_load: 0x2a,\n f64_load: 0x2b,\n i32_load8_s: 0x2c,\n i32_load8_u: 0x2d,\n i32_load16_s: 0x2e,\n i32_load16_u: 0x2f,\n i32_store: 0x36,\n i64_store: 0x37,\n f32_store: 0x38,\n f64_store: 0x39,\n i32_store8: 0x3a,\n i32_store16: 0x3b,\n memory_size: 0x3f,\n memory_grow: 0x40,\n\n // Constants\n i32_const: 0x41,\n i64_const: 0x42,\n f32_const: 0x43,\n f64_const: 0x44,\n\n // i32 comparison\n i32_eqz: 0x45,\n i32_eq: 0x46,\n i32_ne: 0x47,\n i32_lt_s: 0x48,\n i32_lt_u: 0x49,\n i32_gt_s: 0x4a,\n i32_gt_u: 0x4b,\n i32_le_s: 0x4c,\n i32_le_u: 0x4d,\n i32_ge_s: 0x4e,\n i32_ge_u: 0x4f,\n\n // i64 comparison\n i64_eqz: 0x50,\n i64_eq: 0x51,\n i64_ne: 0x52,\n i64_lt_s: 0x53,\n i64_lt_u: 0x54,\n i64_gt_s: 0x55,\n i64_gt_u: 0x56,\n i64_le_s: 0x57,\n i64_le_u: 0x58,\n i64_ge_s: 0x59,\n i64_ge_u: 0x5a,\n\n // f32 comparison\n f32_eq: 0x5b,\n f32_ne: 0x5c,\n f32_lt: 0x5d,\n f32_gt: 0x5e,\n f32_le: 0x5f,\n f32_ge: 0x60,\n\n // f64 comparison\n f64_eq: 0x61,\n f64_ne: 0x62,\n f64_lt: 0x63,\n f64_gt: 0x64,\n f64_le: 0x65,\n f64_ge: 0x66,\n\n // i32 arithmetic\n i32_clz: 0x67,\n i32_ctz: 0x68,\n i32_popcnt: 0x69,\n i32_add: 0x6a,\n i32_sub: 0x6b,\n i32_mul: 0x6c,\n i32_div_s: 0x6d,\n i32_div_u: 0x6e,\n i32_rem_s: 0x6f,\n i32_rem_u: 0x70,\n i32_and: 0x71,\n i32_or: 0x72,\n i32_xor: 0x73,\n i32_shl: 0x74,\n i32_shr_s: 0x75,\n i32_shr_u: 0x76,\n i32_rotl: 0x77,\n i32_rotr: 0x78,\n\n // i64 arithmetic\n i64_add: 0x7c,\n i64_sub: 0x7d,\n i64_mul: 0x7e,\n i64_div_s: 0x7f,\n\n // f32 arithmetic\n f32_abs: 0x8b,\n f32_neg: 0x8c,\n f32_ceil: 0x8d,\n f32_floor: 0x8e,\n f32_trunc: 0x8f,\n f32_nearest: 0x90,\n f32_sqrt: 0x91,\n f32_add: 0x92,\n f32_sub: 0x93,\n f32_mul: 0x94,\n f32_div: 0x95,\n f32_min: 0x96,\n f32_max: 0x97,\n f32_copysign: 0x98,\n\n // f64 arithmetic\n f64_abs: 0x99,\n f64_neg: 0x9a,\n f64_ceil: 0x9b,\n f64_floor: 0x9c,\n f64_trunc: 0x9d,\n f64_nearest: 0x9e,\n f64_sqrt: 0x9f,\n f64_add: 0xa0,\n f64_sub: 0xa1,\n f64_mul: 0xa2,\n f64_div: 0xa3,\n f64_min: 0xa4,\n f64_max: 0xa5,\n f64_copysign: 0xa6,\n\n // Conversions\n i32_wrap_i64: 0xa7,\n i32_trunc_f32_s: 0xa8,\n i32_trunc_f32_u: 0xa9,\n i32_trunc_f64_s: 0xaa,\n i32_trunc_f64_u: 0xab,\n i64_extend_i32_s: 0xac,\n i64_extend_i32_u: 0xad,\n f32_convert_i32_s: 0xb2,\n f32_convert_i32_u: 0xb3,\n f32_convert_i64_s: 0xb4,\n f32_demote_f64: 0xb6,\n f64_convert_i32_s: 0xb7,\n f64_convert_i32_u: 0xb8,\n f64_convert_i64_s: 0xb9,\n f64_promote_f32: 0xbb,\n i32_reinterpret_f32: 0xbc,\n f32_reinterpret_i32: 0xbe,\n f64_reinterpret_i64: 0xbf,\n\n // Sign extension\n i32_extend8_s: 0xc0,\n i32_extend16_s: 0xc1,\n} as const\n\n/** Reverse lookup: opcode byte -> instruction name */\nconst OpName: Record<number, string> = Object.fromEntries(\n Object.entries(Op).map(([name, code]) => [code, name.replace(/_/g, '.')])\n)\n\n// ============================================================================\n// SIMD (v128/f32x4) Constants\n// ============================================================================\n\n/** WASM SIMD prefix byte — all SIMD instructions start with this */\nconst SIMD_PREFIX = 0xfd\n\n/** SIMD sub-opcodes (follow the 0xfd prefix, LEB128-encoded) */\nconst SimdOp = {\n // Memory\n v128_load: 0x00,\n v128_store: 0x0b,\n\n // Constants\n v128_const: 0x0c,\n\n // Splat (scalar → all 4 lanes)\n f32x4_splat: 0x13,\n\n // Lane access\n f32x4_extract_lane: 0x1f,\n f32x4_replace_lane: 0x20,\n\n // f32x4 arithmetic\n f32x4_neg: 0xe1,\n f32x4_sqrt: 0xe3,\n f32x4_add: 0xe4,\n f32x4_sub: 0xe5,\n f32x4_mul: 0xe6,\n f32x4_div: 0xe7,\n} as const\n\n/** Reverse lookup for SIMD opcodes */\nconst SimdOpName: Record<number, string> = Object.fromEntries(\n Object.entries(SimdOp).map(([name, code]) => [code, name.replace(/_/g, '.')])\n)\n\n/** Encode a SIMD instruction (0xfd prefix + LEB128 sub-opcode) */\nfunction encodeSIMD(subOp: number): number[] {\n return [SIMD_PREFIX, ...encodeULEB128(subOp)]\n}\n\n/** Encode a SIMD instruction with memarg (align + offset) */\nfunction encodeSIMDMemarg(\n subOp: number,\n align: number,\n offset: number\n): number[] {\n return [\n SIMD_PREFIX,\n ...encodeULEB128(subOp),\n ...encodeULEB128(align),\n ...encodeULEB128(offset),\n ]\n}\n\n/** Emit WAT instruction to context */\nfunction wat(ctx: CompileContext, instruction: string): void {\n ctx.wat.push(' '.repeat(ctx.watIndent) + instruction)\n}\n\n// ============================================================================\n// LEB128 Encoding\n// ============================================================================\n\nfunction encodeULEB128(value: number): number[] {\n const result: number[] = []\n do {\n let byte = value & 0x7f\n value >>>= 7\n if (value !== 0) byte |= 0x80\n result.push(byte)\n } while (value !== 0)\n return result\n}\n\nfunction encodeSLEB128(value: number): number[] {\n const result: number[] = []\n let more = true\n while (more) {\n let byte = value & 0x7f\n value >>= 7\n if (\n (value === 0 && (byte & 0x40) === 0) ||\n (value === -1 && (byte & 0x40) !== 0)\n ) {\n more = false\n } else {\n byte |= 0x80\n }\n result.push(byte)\n }\n return result\n}\n\nfunction encodeF32(value: number): number[] {\n const buffer = new ArrayBuffer(4)\n new Float32Array(buffer)[0] = value\n return [...new Uint8Array(buffer)]\n}\n\nfunction encodeF64(value: number): number[] {\n const buffer = new ArrayBuffer(8)\n new Float64Array(buffer)[0] = value\n return [...new Uint8Array(buffer)]\n}\n\nfunction encodeString(s: string): number[] {\n const bytes = new TextEncoder().encode(s)\n return [...encodeULEB128(bytes.length), ...bytes]\n}\n\nfunction encodeSection(id: number, contents: number[]): number[] {\n return [id, ...encodeULEB128(contents.length), ...contents]\n}\n\nfunction encodeVector(items: number[][]): number[] {\n return [...encodeULEB128(items.length), ...items.flat()]\n}\n\n// ============================================================================\n// Disassembly (for debugging)\n// ============================================================================\n\n/** Decode ULEB128 from bytes, return [value, bytesConsumed] */\nfunction decodeULEB128(bytes: number[], offset: number): [number, number] {\n let result = 0\n let shift = 0\n let i = offset\n while (i < bytes.length) {\n const byte = bytes[i]\n result |= (byte & 0x7f) << shift\n i++\n if ((byte & 0x80) === 0) break\n shift += 7\n }\n return [result, i - offset]\n}\n\n/** Decode f64 from 8 bytes */\nfunction decodeF64(bytes: number[], offset: number): number {\n const buffer = new ArrayBuffer(8)\n const view = new Uint8Array(buffer)\n for (let i = 0; i < 8; i++) view[i] = bytes[offset + i]\n return new Float64Array(buffer)[0]\n}\n\n/** Disassemble function body bytes to WAT-like text */\nfunction disassemble(\n code: number[],\n params: TypedParam[],\n localTypes: WasmValueType[]\n): string {\n const lines: string[] = []\n let indent = 1\n const ind = () => ' '.repeat(indent)\n\n // Function signature\n const paramStr = params\n .map((p, i) => `(param $${p.name} ${p.type})`)\n .join(' ')\n const localStr = localTypes\n .map((t, i) => `(local $L${params.length + i} ${t})`)\n .join(' ')\n lines.push(`(func (export \"compute\") ${paramStr} (result f64)`)\n if (localStr) lines.push(` ${localStr}`)\n\n let i = 0\n while (i < code.length) {\n const op = code[i]\n const name = OpName[op] || `unknown(0x${op.toString(16)})`\n i++\n\n // Handle instructions with immediates\n if (op === Op.local_get || op === Op.local_set || op === Op.local_tee) {\n const [idx, len] = decodeULEB128(code, i)\n i += len\n const paramName =\n idx < params.length ? `$${params[idx].name}` : `$L${idx}`\n lines.push(`${ind()}${name} ${paramName}`)\n } else if (op === Op.br || op === Op.br_if) {\n const [depth, len] = decodeULEB128(code, i)\n i += len\n lines.push(`${ind()}${name} ${depth}`)\n } else if (op === Op.i32_const) {\n const [val, len] = decodeULEB128(code, i)\n i += len\n lines.push(`${ind()}i32.const ${val}`)\n } else if (op === Op.f32_const) {\n const buffer = new ArrayBuffer(4)\n const view = new Uint8Array(buffer)\n for (let j = 0; j < 4; j++) view[j] = code[i + j]\n const val = new Float32Array(buffer)[0]\n i += 4\n lines.push(`${ind()}f32.const ${val}`)\n } else if (op === Op.f64_const) {\n const val = decodeF64(code, i)\n i += 8\n lines.push(`${ind()}f64.const ${val}`)\n } else if (op === Op.block || op === Op.loop) {\n const blockType = code[i]\n i++\n lines.push(\n `${ind()}${name}${\n blockType === Type.void\n ? ''\n : ` (result ${blockType === Type.f64 ? 'f64' : 'i32'})`\n }`\n )\n indent++\n } else if (op === Op.if) {\n const blockType = code[i]\n i++\n lines.push(\n `${ind()}if${\n blockType === Type.void\n ? ''\n : ` (result ${blockType === Type.f64 ? 'f64' : 'i32'})`\n }`\n )\n indent++\n } else if (op === Op.else) {\n indent--\n lines.push(`${ind()}else`)\n indent++\n } else if (op === Op.end) {\n indent = Math.max(1, indent - 1)\n lines.push(`${ind()}end`)\n } else if (\n op === Op.f64_load ||\n op === Op.f64_store ||\n op === Op.f32_load ||\n op === Op.f32_store ||\n op === Op.i32_load ||\n op === Op.i32_store\n ) {\n const [align, len1] = decodeULEB128(code, i)\n i += len1\n const [offset, len2] = decodeULEB128(code, i)\n i += len2\n lines.push(`${ind()}${name}${offset ? ` offset=${offset}` : ''}`)\n } else if (op === SIMD_PREFIX) {\n // SIMD instruction: 0xfd + LEB128 sub-opcode\n const [subOp, subLen] = decodeULEB128(code, i)\n i += subLen\n const simdName =\n SimdOpName[subOp] || `simd.unknown(0x${subOp.toString(16)})`\n if (subOp === SimdOp.v128_load || subOp === SimdOp.v128_store) {\n const [_align, len1] = decodeULEB128(code, i)\n i += len1\n const [offset, len2] = decodeULEB128(code, i)\n i += len2\n lines.push(`${ind()}${simdName}${offset ? ` offset=${offset}` : ''}`)\n } else if (subOp === SimdOp.v128_const) {\n const bytes = code.slice(i, i + 16)\n i += 16\n lines.push(\n `${ind()}v128.const ${bytes\n .map((b) => '0x' + b.toString(16).padStart(2, '0'))\n .join(' ')}`\n )\n } else if (\n subOp === SimdOp.f32x4_extract_lane ||\n subOp === SimdOp.f32x4_replace_lane\n ) {\n const lane = code[i]\n i++\n lines.push(`${ind()}${simdName} ${lane}`)\n } else {\n lines.push(`${ind()}${simdName}`)\n }\n } else {\n lines.push(`${ind()}${name}`)\n }\n }\n\n lines.push(')')\n return lines.join('\\n')\n}\n\n// ============================================================================\n// Type System\n// ============================================================================\n\n/** TJS type that maps to WASM */\ntype WasmValueType = 'i32' | 'i64' | 'f32' | 'f64' | 'v128'\n\n/** Typed array info */\ninterface TypedArrayInfo {\n elementType: WasmValueType\n bytesPerElement: number\n loadOp: number\n storeOp: number\n}\n\nconst TYPED_ARRAYS: Record<string, TypedArrayInfo> = {\n Int8Array: {\n elementType: 'i32',\n bytesPerElement: 1,\n loadOp: Op.i32_load8_s,\n storeOp: Op.i32_store8,\n },\n Uint8Array: {\n elementType: 'i32',\n bytesPerElement: 1,\n loadOp: Op.i32_load8_u,\n storeOp: Op.i32_store8,\n },\n Uint8ClampedArray: {\n elementType: 'i32',\n bytesPerElement: 1,\n loadOp: Op.i32_load8_u,\n storeOp: Op.i32_store8,\n },\n Int16Array: {\n elementType: 'i32',\n bytesPerElement: 2,\n loadOp: Op.i32_load16_s,\n storeOp: Op.i32_store16,\n },\n Uint16Array: {\n elementType: 'i32',\n bytesPerElement: 2,\n loadOp: Op.i32_load16_u,\n storeOp: Op.i32_store16,\n },\n Int32Array: {\n elementType: 'i32',\n bytesPerElement: 4,\n loadOp: Op.i32_load,\n storeOp: Op.i32_store,\n },\n Uint32Array: {\n elementType: 'i32',\n bytesPerElement: 4,\n loadOp: Op.i32_load,\n storeOp: Op.i32_store,\n },\n Float32Array: {\n elementType: 'f32',\n bytesPerElement: 4,\n loadOp: Op.f32_load,\n storeOp: Op.f32_store,\n },\n Float64Array: {\n elementType: 'f64',\n bytesPerElement: 8,\n loadOp: Op.f64_load,\n storeOp: Op.f64_store,\n },\n}\n\n/** Parameter with type annotation */\ninterface TypedParam {\n name: string\n type: WasmValueType\n isArray?: boolean\n arrayType?: string // e.g., \"Float32Array\"\n}\n\n// ============================================================================\n// Compilation Context\n// ============================================================================\n\ninterface CompileContext {\n /** Parameter definitions */\n params: TypedParam[]\n /** Local variable definitions (name -> local index, type) */\n locals: Map<string, { index: number; type: WasmValueType }>\n /** Next available local index */\n nextLocalIndex: number\n /** Local types for the locals section */\n localTypes: WasmValueType[]\n /** Warnings collected during compilation */\n warnings: string[]\n /** Errors collected during compilation */\n errors: string[]\n /** Current loop depth (for break/continue) */\n loopDepth: number\n /** Whether we need to import Math functions */\n needsMathImports: Set<string>\n /** Whether we need memory */\n needsMemory: boolean\n /** Whether the function has a return statement */\n hasReturn: boolean\n /** WAT text representation lines (for debugging) */\n wat: string[]\n /** Current indentation level for WAT */\n watIndent: number\n}\n\nfunction createContext(params: TypedParam[]): CompileContext {\n const ctx: CompileContext = {\n params,\n locals: new Map(),\n nextLocalIndex: params.length,\n localTypes: [],\n warnings: [],\n errors: [],\n loopDepth: 0,\n needsMathImports: new Set(),\n needsMemory: false,\n hasReturn: false,\n wat: [],\n watIndent: 1,\n }\n\n // Add params to locals map\n params.forEach((p, i) => {\n ctx.locals.set(p.name, { index: i, type: p.type })\n })\n\n return ctx\n}\n\nfunction declareLocal(\n ctx: CompileContext,\n name: string,\n type: WasmValueType\n): number {\n if (ctx.locals.has(name)) {\n ctx.errors.push(`Duplicate local declaration: ${name}`)\n return ctx.locals.get(name)!.index\n }\n const index = ctx.nextLocalIndex++\n ctx.locals.set(name, { index, type })\n ctx.localTypes.push(type)\n return index\n}\n\nfunction getLocal(\n ctx: CompileContext,\n name: string\n): { index: number; type: WasmValueType } | undefined {\n return ctx.locals.get(name)\n}\n\n// ============================================================================\n// AST Compilation\n// ============================================================================\n\n/** Compile a statement, return WASM instructions */\nfunction compileStatement(\n node: acorn.Statement,\n ctx: CompileContext\n): number[] {\n switch (node.type) {\n case 'ExpressionStatement': {\n // Expression statement - compile and drop result\n const expr = (node as acorn.ExpressionStatement).expression\n const exprCode = compileExpression(expr, ctx)\n // Drop the result since this is a statement (value not used)\n return [...exprCode, Op.drop]\n }\n\n case 'ReturnStatement': {\n const ret = node as acorn.ReturnStatement\n ctx.hasReturn = true\n if (!ret.argument) {\n // Void return - just return without a value\n return [Op.return]\n }\n const code = compileExpression(ret.argument as acorn.Expression, ctx)\n // Ensure return value is f64 (function always returns f64 if it returns a value)\n const retType = inferExprType(ret.argument as acorn.Expression, ctx)\n if (retType === 'i32') {\n code.push(Op.f64_convert_i32_s)\n } else if (retType === 'f32') {\n code.push(Op.f64_promote_f32)\n }\n code.push(Op.return)\n return code\n }\n\n case 'VariableDeclaration': {\n const decl = node as acorn.VariableDeclaration\n const code: number[] = []\n for (const declarator of decl.declarations) {\n if (declarator.id.type !== 'Identifier') {\n ctx.errors.push('Destructuring not supported in WASM blocks')\n continue\n }\n const name = (declarator.id as acorn.Identifier).name\n // Infer type from initializer or default to f64\n let type: WasmValueType = 'f64'\n if (declarator.init) {\n type = inferExprType(declarator.init as acorn.Expression, ctx)\n }\n const index = declareLocal(ctx, name, type)\n if (declarator.init) {\n code.push(\n ...compileExpression(declarator.init as acorn.Expression, ctx)\n )\n code.push(Op.local_set, ...encodeULEB128(index))\n }\n }\n return code\n }\n\n case 'ForStatement': {\n const forStmt = node as acorn.ForStatement\n return compileForLoop(forStmt, ctx)\n }\n\n case 'IfStatement': {\n const ifStmt = node as acorn.IfStatement\n return compileIf(ifStmt, ctx)\n }\n\n case 'BlockStatement': {\n const block = node as acorn.BlockStatement\n const code: number[] = []\n for (const stmt of block.body) {\n code.push(...compileStatement(stmt, ctx))\n }\n return code\n }\n\n default:\n ctx.errors.push(`Unsupported statement type: ${node.type}`)\n return []\n }\n}\n\n/** Compile a for loop */\nfunction compileForLoop(\n node: acorn.ForStatement,\n ctx: CompileContext\n): number[] {\n const code: number[] = []\n\n // Compile init\n if (node.init) {\n if (node.init.type === 'VariableDeclaration') {\n code.push(...compileStatement(node.init, ctx))\n } else {\n code.push(...compileExpression(node.init as acorn.Expression, ctx))\n }\n }\n\n // block $break\n // loop $continue\n // br_if $break (condition is false)\n // body\n // update\n // br $continue\n // end\n // end\n\n code.push(Op.block, Type.void) // $break block\n code.push(Op.loop, Type.void) // $continue loop\n\n // Test condition - break if false\n if (node.test) {\n code.push(...compileExpression(node.test, ctx))\n code.push(Op.i32_eqz) // invert: break if condition is false\n code.push(Op.br_if, 1) // br to $break (depth 1)\n }\n\n // Body\n ctx.loopDepth++\n if (node.body) {\n code.push(...compileStatement(node.body, ctx))\n }\n ctx.loopDepth--\n\n // Update\n if (node.update) {\n code.push(...compileExpression(node.update, ctx))\n code.push(Op.drop) // discard update expression result\n }\n\n // Continue loop\n code.push(Op.br, 0) // br to $continue (depth 0)\n\n code.push(Op.end) // end loop\n code.push(Op.end) // end block\n\n return code\n}\n\n/** Compile an if statement */\nfunction compileIf(node: acorn.IfStatement, ctx: CompileContext): number[] {\n const code: number[] = []\n\n // Compile condition\n code.push(...compileExpression(node.test, ctx))\n\n // if (result type void since we're not returning a value from if)\n code.push(Op.if, Type.void)\n\n // Consequent\n code.push(...compileStatement(node.consequent, ctx))\n\n // Alternate\n if (node.alternate) {\n code.push(Op.else)\n code.push(...compileStatement(node.alternate, ctx))\n }\n\n code.push(Op.end)\n\n return code\n}\n\n/** Infer the WASM type of an expression */\nfunction inferExprType(\n node: acorn.Expression,\n ctx: CompileContext\n): WasmValueType {\n switch (node.type) {\n case 'Literal': {\n const lit = node as acorn.Literal\n if (typeof lit.value === 'number') {\n // Check if the raw source contains a decimal point (e.g., \"0.0\")\n // This indicates the user wants a float even if the value is an integer\n if (lit.raw && (lit.raw.includes('.') || lit.raw.includes('e'))) {\n return 'f64'\n }\n // Check if it's an integer that fits in i32\n if (\n Number.isInteger(lit.value) &&\n lit.value >= -2147483648 &&\n lit.value <= 2147483647\n ) {\n return 'i32'\n }\n return 'f64'\n }\n return 'f64'\n }\n\n case 'Identifier': {\n const local = getLocal(ctx, (node as acorn.Identifier).name)\n return local?.type ?? 'f64'\n }\n\n case 'BinaryExpression':\n case 'AssignmentExpression': {\n const binExpr = node as acorn.BinaryExpression\n // Comparison operators return i32\n if (\n ['<', '>', '<=', '>=', '==', '!=', '===', '!=='].includes(\n binExpr.operator\n )\n ) {\n return 'i32'\n }\n // Bitwise operators are i32\n if (['|', '&', '^', '<<', '>>', '>>>'].includes(binExpr.operator)) {\n return 'i32'\n }\n // Otherwise infer from operands\n const leftType = inferExprType(binExpr.left as acorn.Expression, ctx)\n const rightType = inferExprType(binExpr.right as acorn.Expression, ctx)\n // v128 operations stay v128\n if (leftType === 'v128' || rightType === 'v128') return 'v128'\n // If either is f64 or f32, result is floating point\n if (leftType === 'f64' || rightType === 'f64') return 'f64'\n if (leftType === 'f32' || rightType === 'f32') return 'f32'\n return 'i32'\n }\n\n case 'UnaryExpression': {\n const unary = node as acorn.UnaryExpression\n if (unary.operator === '!') {\n return 'i32' // boolean result\n }\n // For negation and bitwise not, result type matches argument type\n return inferExprType(unary.argument as acorn.Expression, ctx)\n }\n\n case 'MemberExpression': {\n // Array access - check array type\n const member = node as acorn.MemberExpression\n if (member.object.type === 'Identifier') {\n const local = getLocal(ctx, (member.object as acorn.Identifier).name)\n if (local) {\n const param = ctx.params.find(\n (p) => p.name === (member.object as acorn.Identifier).name\n )\n if (param?.arrayType) {\n const arrayInfo = TYPED_ARRAYS[param.arrayType]\n if (arrayInfo) return arrayInfo.elementType\n }\n }\n }\n return 'f64'\n }\n\n case 'CallExpression': {\n const call = node as acorn.CallExpression\n if (call.callee.type === 'MemberExpression') {\n const callee = call.callee as acorn.MemberExpression\n if (\n callee.object.type === 'Identifier' &&\n (callee.object as acorn.Identifier).name === 'Math'\n ) {\n // Math functions return f64\n return 'f64'\n }\n }\n // SIMD intrinsics\n if (call.callee.type === 'Identifier') {\n const name = (call.callee as acorn.Identifier).name\n if (name === 'f32x4_extract_lane') return 'f32'\n if (name.startsWith('f32x4_') || name === 'v128_load') return 'v128'\n }\n return 'f64'\n }\n\n default:\n return 'f64'\n }\n}\n\n/** Compile an expression, return WASM instructions */\nfunction compileExpression(\n node: acorn.Expression,\n ctx: CompileContext\n): number[] {\n switch (node.type) {\n case 'Literal': {\n const lit = node as acorn.Literal\n if (typeof lit.value === 'number') {\n const type = inferExprType(node, ctx)\n if (type === 'i32') {\n return [Op.i32_const, ...encodeSLEB128(lit.value | 0)]\n } else if (type === 'f32') {\n return [Op.f32_const, ...encodeF32(lit.value)]\n } else {\n return [Op.f64_const, ...encodeF64(lit.value)]\n }\n }\n ctx.errors.push(`Unsupported literal type: ${typeof lit.value}`)\n return [Op.f64_const, ...encodeF64(0)]\n }\n\n case 'Identifier': {\n const name = (node as acorn.Identifier).name\n const local = getLocal(ctx, name)\n if (local) {\n return [Op.local_get, ...encodeULEB128(local.index)]\n }\n ctx.errors.push(`Unknown identifier: ${name}`)\n return [Op.f64_const, ...encodeF64(0)]\n }\n\n case 'BinaryExpression': {\n const bin = node as acorn.BinaryExpression\n return compileBinaryExpr(bin, ctx)\n }\n\n case 'UnaryExpression': {\n const unary = node as acorn.UnaryExpression\n return compileUnaryExpr(unary, ctx)\n }\n\n case 'AssignmentExpression': {\n const assign = node as acorn.AssignmentExpression\n return compileAssignment(assign, ctx)\n }\n\n case 'UpdateExpression': {\n const update = node as acorn.UpdateExpression\n return compileUpdate(update, ctx)\n }\n\n case 'MemberExpression': {\n const member = node as acorn.MemberExpression\n return compileArrayAccess(member, ctx)\n }\n\n case 'CallExpression': {\n const call = node as acorn.CallExpression\n return compileCall(call, ctx)\n }\n\n case 'SequenceExpression': {\n const seq = node as acorn.SequenceExpression\n const code: number[] = []\n for (let i = 0; i < seq.expressions.length; i++) {\n code.push(...compileExpression(seq.expressions[i], ctx))\n // Drop all but last value\n if (i < seq.expressions.length - 1) {\n code.push(Op.drop)\n }\n }\n return code\n }\n\n default:\n ctx.errors.push(`Unsupported expression type: ${node.type}`)\n return [Op.f64_const, ...encodeF64(0)]\n }\n}\n\n/** Compile a binary expression */\nfunction compileBinaryExpr(\n node: acorn.BinaryExpression,\n ctx: CompileContext\n): number[] {\n const left = compileExpression(node.left as acorn.Expression, ctx)\n const right = compileExpression(node.right as acorn.Expression, ctx)\n const resultType = inferExprType(node, ctx)\n\n // Type coercion if needed\n const leftType = inferExprType(node.left as acorn.Expression, ctx)\n const rightType = inferExprType(node.right as acorn.Expression, ctx)\n\n // Determine operand type for the operation\n const isComparison = [\n '<',\n '>',\n '<=',\n '>=',\n '==',\n '===',\n '!=',\n '!==',\n ].includes(node.operator)\n\n // For comparisons and arithmetic, we need operands to match\n // Promote to the \"wider\" type\n let opType: WasmValueType\n if (leftType === 'f64' || rightType === 'f64') {\n opType = 'f64'\n } else if (leftType === 'f32' || rightType === 'f32') {\n opType = 'f32'\n } else {\n opType = 'i32'\n }\n\n // For non-comparison ops, use result type if it's wider\n if (!isComparison && resultType === 'f64') {\n opType = 'f64'\n }\n\n let leftCode = left\n let rightCode = right\n\n // Coerce operands to opType\n if (opType === 'f64') {\n if (leftType === 'i32') {\n leftCode = [...left, Op.f64_convert_i32_s]\n } else if (leftType === 'f32') {\n leftCode = [...left, Op.f64_promote_f32]\n }\n if (rightType === 'i32') {\n rightCode = [...right, Op.f64_convert_i32_s]\n } else if (rightType === 'f32') {\n rightCode = [...right, Op.f64_promote_f32]\n }\n } else if (opType === 'f32') {\n if (leftType === 'i32') {\n leftCode = [...left, Op.f32_convert_i32_s]\n }\n if (rightType === 'i32') {\n rightCode = [...right, Op.f32_convert_i32_s]\n }\n }\n\n const opMap: Record<string, Record<string, number>> = {\n '+': { i32: Op.i32_add, f32: Op.f32_add, f64: Op.f64_add },\n '-': { i32: Op.i32_sub, f32: Op.f32_sub, f64: Op.f64_sub },\n '*': { i32: Op.i32_mul, f32: Op.f32_mul, f64: Op.f64_mul },\n '/': { i32: Op.i32_div_s, f32: Op.f32_div, f64: Op.f64_div },\n '%': { i32: Op.i32_rem_s },\n '<': { i32: Op.i32_lt_s, f32: Op.f32_lt, f64: Op.f64_lt },\n '>': { i32: Op.i32_gt_s, f32: Op.f32_gt, f64: Op.f64_gt },\n '<=': { i32: Op.i32_le_s, f32: Op.f32_le, f64: Op.f64_le },\n '>=': { i32: Op.i32_ge_s, f32: Op.f32_ge, f64: Op.f64_ge },\n '==': { i32: Op.i32_eq, f32: Op.f32_eq, f64: Op.f64_eq },\n '===': { i32: Op.i32_eq, f32: Op.f32_eq, f64: Op.f64_eq },\n '!=': { i32: Op.i32_ne, f32: Op.f32_ne, f64: Op.f64_ne },\n '!==': { i32: Op.i32_ne, f32: Op.f32_ne, f64: Op.f64_ne },\n '|': { i32: Op.i32_or },\n '&': { i32: Op.i32_and },\n '^': { i32: Op.i32_xor },\n '<<': { i32: Op.i32_shl },\n '>>': { i32: Op.i32_shr_s },\n '>>>': { i32: Op.i32_shr_u },\n }\n\n const ops = opMap[node.operator]\n if (!ops) {\n ctx.errors.push(`Unsupported operator: ${node.operator}`)\n return [Op.f64_const, ...encodeF64(0)]\n }\n\n const opcode = ops[opType] ?? ops.f64 ?? ops.i32\n if (opcode === undefined) {\n ctx.errors.push(\n `Operator ${node.operator} not supported for type ${opType}`\n )\n return [Op.f64_const, ...encodeF64(0)]\n }\n\n return [...leftCode, ...rightCode, opcode]\n}\n\n/** Compile a unary expression */\nfunction compileUnaryExpr(\n node: acorn.UnaryExpression,\n ctx: CompileContext\n): number[] {\n const arg = compileExpression(node.argument as acorn.Expression, ctx)\n const type = inferExprType(node.argument as acorn.Expression, ctx)\n\n switch (node.operator) {\n case '-':\n if (type === 'i32') {\n // 0 - x\n return [Op.i32_const, 0, ...arg, Op.i32_sub]\n } else if (type === 'f32') {\n return [...arg, Op.f32_neg]\n } else {\n return [...arg, Op.f64_neg]\n }\n\n case '!':\n // Boolean not: x == 0\n return [...arg, Op.i32_eqz]\n\n case '~':\n // Bitwise not: x ^ -1\n return [...arg, Op.i32_const, ...encodeSLEB128(-1), Op.i32_xor]\n\n default:\n ctx.errors.push(`Unsupported unary operator: ${node.operator}`)\n return arg\n }\n}\n\n/** Compile an assignment expression */\nfunction compileAssignment(\n node: acorn.AssignmentExpression,\n ctx: CompileContext\n): number[] {\n // Handle array element assignment: arr[i] = value\n if (node.left.type === 'MemberExpression') {\n return compileArrayStore(\n node.left as acorn.MemberExpression,\n node.right as acorn.Expression,\n node.operator,\n ctx\n )\n }\n\n // Handle simple variable assignment\n if (node.left.type !== 'Identifier') {\n ctx.errors.push('Assignment target must be identifier or array element')\n return []\n }\n\n const name = (node.left as acorn.Identifier).name\n const local = getLocal(ctx, name)\n if (!local) {\n ctx.errors.push(`Unknown variable: ${name}`)\n return []\n }\n\n const code: number[] = []\n\n if (node.operator === '=') {\n code.push(...compileExpression(node.right as acorn.Expression, ctx))\n // Type coercion if needed\n const valType = inferExprType(node.right as acorn.Expression, ctx)\n if (local.type === 'f64' && valType === 'i32') {\n code.push(Op.f64_convert_i32_s)\n } else if (local.type === 'f64' && valType === 'f32') {\n code.push(Op.f64_promote_f32)\n } else if (local.type === 'i32' && valType === 'f64') {\n code.push(Op.i32_trunc_f64_s)\n } else if (local.type === 'i32' && valType === 'f32') {\n code.push(Op.i32_trunc_f32_s)\n } else if (local.type === 'f32' && valType === 'i32') {\n code.push(Op.f32_convert_i32_s)\n } else if (local.type === 'f32' && valType === 'f64') {\n code.push(Op.f32_demote_f64)\n }\n } else {\n // Compound assignment: +=, -=, etc.\n const valType = inferExprType(node.right as acorn.Expression, ctx)\n\n // Determine operation type - promote to wider type for the operation\n let opType: WasmValueType = local.type\n if (valType === 'f64' || local.type === 'f64') {\n opType = 'f64'\n } else if (valType === 'f32' || local.type === 'f32') {\n opType = 'f32'\n }\n\n // Get left operand and convert to opType if needed\n code.push(Op.local_get, ...encodeULEB128(local.index))\n if (opType === 'f64' && local.type === 'i32') {\n code.push(Op.f64_convert_i32_s)\n } else if (opType === 'f64' && local.type === 'f32') {\n code.push(Op.f64_promote_f32)\n } else if (opType === 'f32' && local.type === 'i32') {\n code.push(Op.f32_convert_i32_s)\n }\n\n // Get right operand and convert to opType if needed\n code.push(...compileExpression(node.right as acorn.Expression, ctx))\n if (opType === 'f64' && valType === 'i32') {\n code.push(Op.f64_convert_i32_s)\n } else if (opType === 'f64' && valType === 'f32') {\n code.push(Op.f64_promote_f32)\n } else if (opType === 'f32' && valType === 'i32') {\n code.push(Op.f32_convert_i32_s)\n }\n\n // Perform operation in opType\n const op = node.operator.slice(0, -1) // Remove '='\n const opMap: Record<string, Record<string, number>> = {\n '+': { i32: Op.i32_add, f32: Op.f32_add, f64: Op.f64_add },\n '-': { i32: Op.i32_sub, f32: Op.f32_sub, f64: Op.f64_sub },\n '*': { i32: Op.i32_mul, f32: Op.f32_mul, f64: Op.f64_mul },\n '/': { i32: Op.i32_div_s, f32: Op.f32_div, f64: Op.f64_div },\n }\n const opcode = opMap[op]?.[opType]\n if (!opcode) {\n ctx.errors.push(`Unsupported compound assignment: ${node.operator}`)\n return []\n }\n code.push(opcode)\n\n // Convert result back to local type if needed\n if (local.type === 'i32' && opType === 'f64') {\n code.push(Op.i32_trunc_f64_s)\n } else if (local.type === 'i32' && opType === 'f32') {\n code.push(Op.i32_trunc_f32_s)\n } else if (local.type === 'f32' && opType === 'f64') {\n code.push(Op.f32_demote_f64)\n }\n }\n\n code.push(Op.local_tee, ...encodeULEB128(local.index)) // tee returns the value\n\n return code\n}\n\n/** Compile an update expression (++, --) */\nfunction compileUpdate(\n node: acorn.UpdateExpression,\n ctx: CompileContext\n): number[] {\n if (node.argument.type !== 'Identifier') {\n ctx.errors.push('Update expression argument must be identifier')\n return []\n }\n\n const name = (node.argument as acorn.Identifier).name\n const local = getLocal(ctx, name)\n if (!local) {\n ctx.errors.push(`Unknown variable: ${name}`)\n return []\n }\n\n const code: number[] = []\n const isI32 = local.type === 'i32'\n\n if (node.prefix) {\n // ++x or --x: modify then return new value\n code.push(Op.local_get, ...encodeULEB128(local.index))\n if (isI32) {\n code.push(Op.i32_const, 1)\n code.push(node.operator === '++' ? Op.i32_add : Op.i32_sub)\n } else {\n code.push(Op.f64_const, ...encodeF64(1))\n code.push(node.operator === '++' ? Op.f64_add : Op.f64_sub)\n }\n code.push(Op.local_tee, ...encodeULEB128(local.index))\n } else {\n // x++ or x--: return old value, then modify\n code.push(Op.local_get, ...encodeULEB128(local.index))\n // Store incremented value\n code.push(Op.local_get, ...encodeULEB128(local.index))\n if (isI32) {\n code.push(Op.i32_const, 1)\n code.push(node.operator === '++' ? Op.i32_add : Op.i32_sub)\n } else {\n code.push(Op.f64_const, ...encodeF64(1))\n code.push(node.operator === '++' ? Op.f64_add : Op.f64_sub)\n }\n code.push(Op.local_set, ...encodeULEB128(local.index))\n }\n\n return code\n}\n\n/** Compile array element access: arr[i] */\nfunction compileArrayAccess(\n node: acorn.MemberExpression,\n ctx: CompileContext\n): number[] {\n if (node.object.type !== 'Identifier') {\n ctx.errors.push('Array access requires identifier')\n return []\n }\n\n const name = (node.object as acorn.Identifier).name\n const param = ctx.params.find((p) => p.name === name)\n\n if (!param?.isArray || !param.arrayType) {\n ctx.errors.push(`${name} is not a typed array parameter`)\n return []\n }\n\n const arrayInfo = TYPED_ARRAYS[param.arrayType]\n if (!arrayInfo) {\n ctx.errors.push(`Unknown array type: ${param.arrayType}`)\n return []\n }\n\n ctx.needsMemory = true\n\n const code: number[] = []\n\n // Get base address (array pointer param)\n const local = getLocal(ctx, name)\n if (!local) {\n ctx.errors.push(`Unknown array: ${name}`)\n return []\n }\n code.push(Op.local_get, ...encodeULEB128(local.index))\n\n // Compute offset: index * bytesPerElement\n if (!node.computed || !node.property) {\n ctx.errors.push('Array access requires computed index')\n return []\n }\n\n const indexCode = compileExpression(node.property as acorn.Expression, ctx)\n const indexType = inferExprType(node.property as acorn.Expression, ctx)\n\n code.push(...indexCode)\n\n // Convert index to i32 if needed\n if (indexType === 'f64') {\n code.push(Op.i32_trunc_f64_s)\n }\n\n // Multiply by bytes per element\n if (arrayInfo.bytesPerElement > 1) {\n code.push(Op.i32_const, ...encodeSLEB128(arrayInfo.bytesPerElement))\n code.push(Op.i32_mul)\n }\n\n // Add base address\n code.push(Op.i32_add)\n\n // Load value (align=0, offset=0)\n code.push(arrayInfo.loadOp, 0, 0)\n\n return code\n}\n\n/** Compile array element store: arr[i] = value */\nfunction compileArrayStore(\n target: acorn.MemberExpression,\n value: acorn.Expression,\n operator: string,\n ctx: CompileContext\n): number[] {\n if (target.object.type !== 'Identifier') {\n ctx.errors.push('Array store requires identifier')\n return []\n }\n\n const name = (target.object as acorn.Identifier).name\n const param = ctx.params.find((p) => p.name === name)\n\n if (!param?.isArray || !param.arrayType) {\n ctx.errors.push(`${name} is not a typed array parameter`)\n return []\n }\n\n const arrayInfo = TYPED_ARRAYS[param.arrayType]\n if (!arrayInfo) {\n ctx.errors.push(`Unknown array type: ${param.arrayType}`)\n return []\n }\n\n ctx.needsMemory = true\n\n const code: number[] = []\n\n // Get local for array pointer\n const local = getLocal(ctx, name)\n if (!local) return []\n\n if (!target.computed || !target.property) {\n ctx.errors.push('Array store requires computed index')\n return []\n }\n\n const indexCode = compileExpression(target.property as acorn.Expression, ctx)\n const indexType = inferExprType(target.property as acorn.Expression, ctx)\n\n // Helper to generate address computation code\n const computeAddress = (): number[] => {\n const addr: number[] = []\n addr.push(Op.local_get, ...encodeULEB128(local.index))\n addr.push(...indexCode)\n if (indexType === 'f64') {\n addr.push(Op.i32_trunc_f64_s)\n }\n if (arrayInfo.bytesPerElement > 1) {\n addr.push(Op.i32_const, ...encodeSLEB128(arrayInfo.bytesPerElement))\n addr.push(Op.i32_mul)\n }\n addr.push(Op.i32_add)\n return addr\n }\n\n // Compile value\n if (operator === '=') {\n code.push(...compileExpression(value, ctx))\n } else {\n // Compound assignment - load current value, compute, store\n // Use a temp local to store address for reuse\n const addrLocal = declareLocal(ctx, `__addr_${ctx.nextLocalIndex}`, 'i32')\n\n // Compute address and save it\n code.push(...computeAddress())\n code.push(Op.local_tee, ...encodeULEB128(addrLocal))\n code.push(arrayInfo.loadOp, 0, 0)\n\n // Compile right side and convert to match array element type\n code.push(...compileExpression(value, ctx))\n const rhsType = inferExprType(value, ctx)\n if (arrayInfo.elementType === 'f32' && rhsType === 'f64') {\n code.push(Op.f32_demote_f64)\n } else if (arrayInfo.elementType === 'f64' && rhsType === 'f32') {\n code.push(Op.f64_promote_f32)\n } else if (arrayInfo.elementType === 'f32' && rhsType === 'i32') {\n code.push(Op.f32_convert_i32_s)\n } else if (arrayInfo.elementType === 'f64' && rhsType === 'i32') {\n code.push(Op.f64_convert_i32_s)\n } else if (arrayInfo.elementType === 'i32' && rhsType === 'f64') {\n code.push(Op.i32_trunc_f64_s)\n } else if (arrayInfo.elementType === 'i32' && rhsType === 'f32') {\n code.push(Op.i32_trunc_f32_s)\n }\n\n const op = operator.slice(0, -1)\n const opMap: Record<string, number> = {\n '+':\n arrayInfo.elementType === 'i32'\n ? Op.i32_add\n : arrayInfo.elementType === 'f32'\n ? Op.f32_add\n : Op.f64_add,\n '-':\n arrayInfo.elementType === 'i32'\n ? Op.i32_sub\n : arrayInfo.elementType === 'f32'\n ? Op.f32_sub\n : Op.f64_sub,\n '*':\n arrayInfo.elementType === 'i32'\n ? Op.i32_mul\n : arrayInfo.elementType === 'f32'\n ? Op.f32_mul\n : Op.f64_mul,\n }\n code.push(opMap[op] ?? Op.f64_add)\n\n // Store: need address then value\n // Swap: store value in temp, get address, get value back\n const valLocal = declareLocal(\n ctx,\n `__val_${ctx.nextLocalIndex}`,\n arrayInfo.elementType\n )\n code.push(Op.local_set, ...encodeULEB128(valLocal))\n code.push(Op.local_get, ...encodeULEB128(addrLocal))\n code.push(Op.local_get, ...encodeULEB128(valLocal))\n code.push(arrayInfo.storeOp, 0, 0)\n\n // Return the stored value\n code.push(Op.local_get, ...encodeULEB128(valLocal))\n return code\n }\n\n // Convert value type if needed\n const valType = inferExprType(value, ctx)\n if (arrayInfo.elementType === 'f32' && valType === 'f64') {\n code.push(Op.f32_demote_f64)\n } else if (arrayInfo.elementType === 'f64' && valType === 'f32') {\n code.push(Op.f64_promote_f32)\n } else if (arrayInfo.elementType === 'i32' && valType === 'f64') {\n code.push(Op.i32_trunc_f64_s)\n }\n\n // Store needs address then value - we have value on top\n // Swap using temp local\n const tempLocal = declareLocal(\n ctx,\n `__tmp_${ctx.nextLocalIndex}`,\n arrayInfo.elementType\n )\n code.push(Op.local_set, ...encodeULEB128(tempLocal))\n\n // Recompute address (simpler than complex stack manipulation)\n code.push(Op.local_get, ...encodeULEB128(local.index))\n code.push(...indexCode)\n if (indexType === 'f64') {\n code.push(Op.i32_trunc_f64_s)\n }\n if (arrayInfo.bytesPerElement > 1) {\n code.push(Op.i32_const, ...encodeSLEB128(arrayInfo.bytesPerElement))\n code.push(Op.i32_mul)\n }\n code.push(Op.i32_add)\n\n code.push(Op.local_get, ...encodeULEB128(tempLocal))\n code.push(arrayInfo.storeOp, 0, 0)\n\n // Return stored value\n code.push(Op.local_get, ...encodeULEB128(tempLocal))\n\n return code\n}\n\n/** Compile a function call */\nfunction compileCall(\n node: acorn.CallExpression,\n ctx: CompileContext\n): number[] {\n // Handle Math.xxx calls\n if (node.callee.type === 'MemberExpression') {\n const callee = node.callee as acorn.MemberExpression\n if (\n callee.object.type === 'Identifier' &&\n (callee.object as acorn.Identifier).name === 'Math' &&\n callee.property.type === 'Identifier'\n ) {\n const method = (callee.property as acorn.Identifier).name\n return compileMathCall(method, node.arguments as acorn.Expression[], ctx)\n }\n }\n\n // Handle SIMD intrinsics: f32x4_xxx(...), v128_load(...)\n if (node.callee.type === 'Identifier') {\n const name = (node.callee as acorn.Identifier).name\n if (name.startsWith('f32x4_') || name.startsWith('v128_')) {\n return compileSIMDCall(name, node.arguments as acorn.Expression[], ctx)\n }\n }\n\n ctx.errors.push(`Unsupported function call: ${node.callee.type}`)\n return [Op.f64_const, ...encodeF64(0)]\n}\n\n/** Compile SIMD intrinsic calls */\nfunction compileSIMDCall(\n name: string,\n args: acorn.Expression[],\n ctx: CompileContext\n): number[] {\n ctx.needsMemory = true\n const code: number[] = []\n\n switch (name) {\n case 'v128_load':\n case 'f32x4_load': {\n // f32x4_load(arrayPtr, byteOffset) → v128\n code.push(...compileExpression(args[0], ctx))\n const ptrType = inferExprType(args[0], ctx)\n if (ptrType === 'f64') code.push(Op.i32_trunc_f64_s)\n code.push(...compileExpression(args[1], ctx))\n const offType = inferExprType(args[1], ctx)\n if (offType === 'f64') code.push(Op.i32_trunc_f64_s)\n else if (offType === 'f32') code.push(Op.i32_trunc_f32_s)\n code.push(Op.i32_add)\n // v128.load align=2 (2^2=4, f32 natural alignment), offset=0\n code.push(...encodeSIMDMemarg(SimdOp.v128_load, 2, 0))\n return code\n }\n\n case 'v128_store':\n case 'f32x4_store': {\n // f32x4_store(arrayPtr, byteOffset, v128value) → void (push dummy for drop)\n code.push(...compileExpression(args[0], ctx))\n const ptrType = inferExprType(args[0], ctx)\n if (ptrType === 'f64') code.push(Op.i32_trunc_f64_s)\n code.push(...compileExpression(args[1], ctx))\n const offType = inferExprType(args[1], ctx)\n if (offType === 'f64') code.push(Op.i32_trunc_f64_s)\n else if (offType === 'f32') code.push(Op.i32_trunc_f32_s)\n code.push(Op.i32_add)\n code.push(...compileExpression(args[2], ctx))\n code.push(...encodeSIMDMemarg(SimdOp.v128_store, 2, 0))\n // v128.store doesn't push a value; push dummy i32 0 so ExpressionStatement's drop works\n code.push(Op.i32_const, 0)\n return code\n }\n\n case 'f32x4_splat': {\n // f32x4_splat(scalar) → v128\n code.push(...compileExpression(args[0], ctx))\n const argType = inferExprType(args[0], ctx)\n if (argType === 'i32') code.push(Op.f32_convert_i32_s)\n else if (argType === 'f64') code.push(Op.f32_demote_f64)\n code.push(...encodeSIMD(SimdOp.f32x4_splat))\n return code\n }\n\n case 'f32x4_extract_lane': {\n // f32x4_extract_lane(vec, laneIndex) → f32\n code.push(...compileExpression(args[0], ctx))\n const lane = (args[1] as acorn.Literal).value as number\n if (!Number.isInteger(lane) || lane < 0 || lane > 3) {\n ctx.errors.push(`f32x4_extract_lane: lane must be 0-3, got ${lane}`)\n return [Op.f32_const, ...encodeF32(0)]\n }\n code.push(SIMD_PREFIX, ...encodeULEB128(SimdOp.f32x4_extract_lane), lane)\n return code\n }\n\n case 'f32x4_replace_lane': {\n // f32x4_replace_lane(vec, laneIndex, scalar) → v128\n code.push(...compileExpression(args[0], ctx))\n const lane = (args[1] as acorn.Literal).value as number\n if (!Number.isInteger(lane) || lane < 0 || lane > 3) {\n ctx.errors.push(`f32x4_replace_lane: lane must be 0-3, got ${lane}`)\n return [Op.f32_const, ...encodeF32(0)]\n }\n code.push(...compileExpression(args[2], ctx))\n const valType = inferExprType(args[2], ctx)\n if (valType === 'i32') code.push(Op.f32_convert_i32_s)\n else if (valType === 'f64') code.push(Op.f32_demote_f64)\n code.push(SIMD_PREFIX, ...encodeULEB128(SimdOp.f32x4_replace_lane), lane)\n return code\n }\n\n case 'f32x4_add':\n case 'f32x4_sub':\n case 'f32x4_mul':\n case 'f32x4_div': {\n // Binary v128 op: f32x4_add(a, b) → v128\n code.push(...compileExpression(args[0], ctx))\n code.push(...compileExpression(args[1], ctx))\n const opMap: Record<string, number> = {\n f32x4_add: SimdOp.f32x4_add,\n f32x4_sub: SimdOp.f32x4_sub,\n f32x4_mul: SimdOp.f32x4_mul,\n f32x4_div: SimdOp.f32x4_div,\n }\n code.push(...encodeSIMD(opMap[name]))\n return code\n }\n\n case 'f32x4_neg':\n case 'f32x4_sqrt': {\n // Unary v128 op: f32x4_neg(a) → v128\n code.push(...compileExpression(args[0], ctx))\n const unaryMap: Record<string, number> = {\n f32x4_neg: SimdOp.f32x4_neg,\n f32x4_sqrt: SimdOp.f32x4_sqrt,\n }\n code.push(...encodeSIMD(unaryMap[name]))\n return code\n }\n\n default:\n ctx.errors.push(`Unknown SIMD intrinsic: ${name}`)\n return [Op.f64_const, ...encodeF64(0)]\n }\n}\n\n/** Compile Math.xxx calls */\nfunction compileMathCall(\n method: string,\n args: acorn.Expression[],\n ctx: CompileContext\n): number[] {\n const code: number[] = []\n\n // Compile arguments\n for (const arg of args) {\n code.push(...compileExpression(arg, ctx))\n // Ensure f64 for math functions\n const type = inferExprType(arg, ctx)\n if (type === 'i32') {\n code.push(Op.f64_convert_i32_s)\n } else if (type === 'f32') {\n code.push(Op.f64_promote_f32)\n }\n }\n\n // Map to WASM ops or imports\n const builtins: Record<string, number> = {\n abs: Op.f64_abs,\n ceil: Op.f64_ceil,\n floor: Op.f64_floor,\n trunc: Op.f64_trunc,\n sqrt: Op.f64_sqrt,\n min: Op.f64_min,\n max: Op.f64_max,\n }\n\n const opcode = builtins[method]\n if (opcode !== undefined) {\n code.push(opcode)\n return code\n }\n\n // Functions that need imports (sin, cos, etc.)\n const needsImport = [\n 'sin',\n 'cos',\n 'tan',\n 'asin',\n 'acos',\n 'atan',\n 'atan2',\n 'exp',\n 'log',\n 'pow',\n ]\n if (needsImport.includes(method)) {\n ctx.needsMathImports.add(method)\n // Will be handled by import section\n // For now, error\n ctx.errors.push(`Math.${method} requires JS import (not yet implemented)`)\n return [Op.f64_const, ...encodeF64(0)]\n }\n\n ctx.errors.push(`Unknown Math method: ${method}`)\n return [Op.f64_const, ...encodeF64(0)]\n}\n\n// ============================================================================\n// Module Building\n// ============================================================================\n\n/** Parse type annotation from capture string like \"arr: Float32Array\" */\nfunction parseTypeAnnotation(capture: string): TypedParam {\n const parts = capture.split(':').map((s) => s.trim())\n const name = parts[0]\n\n if (parts.length === 1) {\n // No annotation - default to f64\n return { name, type: 'f64' }\n }\n\n const typeStr = parts[1]\n\n // Check for typed arrays\n if (TYPED_ARRAYS[typeStr]) {\n return { name, type: 'i32', isArray: true, arrayType: typeStr }\n }\n\n // Check for primitives\n const typeMap: Record<string, WasmValueType> = {\n i32: 'i32',\n i64: 'i64',\n f32: 'f32',\n f64: 'f64',\n number: 'f64',\n int: 'i32',\n }\n\n return { name, type: typeMap[typeStr] ?? 'f64' }\n}\n\n/** Build a complete WASM module */\nfunction buildModule(\n params: TypedParam[],\n bodyCode: number[],\n localTypes: WasmValueType[],\n needsMemory: boolean,\n hasReturn: boolean\n): number[] {\n // Magic number and version\n const header = [0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]\n\n // Type section: function signature\n const paramWasmTypes = params.map((p) => Type[p.type])\n const returnSpec = hasReturn ? [0x01, Type.f64] : [0x00] // one f64 return OR void\n const typeSection = encodeSection(Section.type, [\n 0x01, // one type\n 0x60, // func type\n ...encodeULEB128(params.length),\n ...paramWasmTypes,\n ...returnSpec,\n ])\n\n // Memory section (if needed)\n const memorySection: number[] = []\n if (needsMemory) {\n // Import memory from JS instead of declaring it\n // This lets us share memory with typed arrays\n }\n\n // Import section for memory\n let importSection: number[] = []\n if (needsMemory) {\n importSection = encodeSection(Section.import, [\n 0x01, // one import\n ...encodeString('env'),\n ...encodeString('memory'),\n 0x02, // memory\n 0x00, // flags: no max\n 0x01, // initial: 1 page (64KB)\n ])\n }\n\n // Function section: function 0 has type 0\n const funcSection = encodeSection(Section.function, [\n 0x01, // one function\n 0x00, // type index 0\n ])\n\n // Export section: export function as \"compute\"\n const exportSection = encodeSection(Section.export, [\n 0x01, // one export\n ...encodeString('compute'),\n 0x00, // export kind: function\n 0x00, // function index 0\n ])\n\n // Code section\n // Encode locals: group by type\n const localGroups: number[][] = []\n if (localTypes.length > 0) {\n let currentType = localTypes[0]\n let count = 1\n for (let i = 1; i < localTypes.length; i++) {\n if (localTypes[i] === currentType) {\n count++\n } else {\n localGroups.push([...encodeULEB128(count), Type[currentType]])\n currentType = localTypes[i]\n count = 1\n }\n }\n localGroups.push([...encodeULEB128(count), Type[currentType]])\n }\n\n const localsEncoded = [\n ...encodeULEB128(localGroups.length),\n ...localGroups.flat(),\n ]\n\n const funcBody = [...localsEncoded, ...bodyCode, Op.end]\n\n const codeSection = encodeSection(Section.code, [\n 0x01, // one function\n ...encodeULEB128(funcBody.length),\n ...funcBody,\n ])\n\n // Assemble module\n const sections = [...header, ...typeSection]\n\n if (importSection.length > 0) {\n sections.push(...importSection)\n }\n\n sections.push(...funcSection, ...exportSection, ...codeSection)\n\n return sections\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/** Compile result */\nexport interface WasmCompileResult {\n /** The compiled WebAssembly module bytes */\n bytes: Uint8Array\n /** Any warnings during compilation */\n warnings: string[]\n /** Whether compilation succeeded */\n success: boolean\n /** Error message if compilation failed */\n error?: string\n /** Whether the module needs imported memory */\n needsMemory?: boolean\n /** WAT text representation (for debugging) */\n wat?: string\n}\n\n/**\n * Compile a WASM block to WebAssembly\n */\nexport function compileToWasm(block: WasmBlock): WasmCompileResult {\n try {\n // Parse type annotations from captures\n const params = block.captures.map(parseTypeAnnotation)\n\n // Parse the body as JavaScript\n let ast: acorn.Program\n try {\n // Wrap in function to allow return statements\n const wrapped = `function __wasm__(${params\n .map((p) => p.name)\n .join(', ')}) { ${block.body} }`\n ast = acorn.parse(wrapped, { ecmaVersion: 2022 }) as acorn.Program\n } catch (e: any) {\n return {\n bytes: new Uint8Array(),\n warnings: [],\n success: false,\n error: `Parse error: ${e.message}`,\n }\n }\n\n // Get the function body\n const funcDecl = ast.body[0] as acorn.FunctionDeclaration\n const body = funcDecl.body.body\n\n // Create compilation context\n const ctx = createContext(params)\n\n // Compile statements\n const code: number[] = []\n for (const stmt of body) {\n code.push(...compileStatement(stmt, ctx))\n }\n\n // Check for errors\n if (ctx.errors.length > 0) {\n return {\n bytes: new Uint8Array(),\n warnings: ctx.warnings,\n success: false,\n error: ctx.errors.join('; '),\n }\n }\n\n // Build the module\n const moduleBytes = buildModule(\n params,\n code,\n ctx.localTypes,\n ctx.needsMemory,\n ctx.hasReturn\n )\n\n // Generate WAT disassembly for debugging\n const watText = disassemble(code, params, ctx.localTypes)\n\n return {\n bytes: new Uint8Array(moduleBytes),\n warnings: ctx.warnings,\n success: true,\n needsMemory: ctx.needsMemory,\n wat: watText,\n }\n } catch (e: any) {\n return {\n bytes: new Uint8Array(),\n warnings: [],\n success: false,\n error: e.message,\n }\n }\n}\n\n/**\n * Instantiate a compiled WASM module\n */\nexport async function instantiateWasm(\n bytes: Uint8Array,\n memory?: WebAssembly.Memory\n): Promise<WebAssembly.Instance> {\n const imports: WebAssembly.Imports = {}\n\n if (memory) {\n imports.env = { memory }\n }\n\n const module = await WebAssembly.compile(bytes)\n return WebAssembly.instantiate(module, imports)\n}\n\n/**\n * Create a callable function from a WASM block with typed array support\n */\nexport async function createWasmFunction(block: WasmBlock): Promise<{\n fn: (...args: any[]) => any\n memory?: WebAssembly.Memory\n success: boolean\n error?: string\n}> {\n const result = compileToWasm(block)\n\n if (!result.success) {\n return { fn: () => 0, success: false, error: result.error }\n }\n\n try {\n let memory: WebAssembly.Memory | undefined\n\n if (result.needsMemory) {\n // Create shared memory for typed arrays (256 pages = 16MB)\n memory = new WebAssembly.Memory({ initial: 256 })\n }\n\n const instance = await instantiateWasm(result.bytes, memory)\n const compute = instance.exports.compute as (...args: number[]) => number\n\n // Wrap to handle typed array arguments\n const params = block.captures.map(parseTypeAnnotation)\n const hasArrays = params.some((p) => p.isArray)\n\n if (!hasArrays) {\n return { fn: compute, memory, success: true }\n }\n\n // Create wrapper that copies typed arrays to/from WASM memory\n const wrappedFn = (...args: any[]) => {\n if (!memory) throw new Error('Memory not initialized')\n\n const memoryView = new Uint8Array(memory.buffer)\n let offset = 0\n const pointers: number[] = []\n\n // Copy input arrays to memory\n for (let i = 0; i < params.length; i++) {\n const param = params[i]\n const arg = args[i]\n\n if (param.isArray && arg instanceof Object && 'buffer' in arg) {\n const typedArray = arg as\n | Float32Array\n | Float64Array\n | Int32Array\n | Uint8Array\n const bytes = new Uint8Array(\n typedArray.buffer,\n typedArray.byteOffset,\n typedArray.byteLength\n )\n memoryView.set(bytes, offset)\n pointers.push(offset)\n offset += bytes.length\n // Align to 8 bytes\n offset = (offset + 15) & ~15\n } else {\n pointers.push(arg as number)\n }\n }\n\n // Call WASM function\n const resultVal = compute(...pointers)\n\n // Copy output arrays back (they're modified in place)\n offset = 0\n for (let i = 0; i < params.length; i++) {\n const param = params[i]\n const arg = args[i]\n\n if (param.isArray && arg instanceof Object && 'buffer' in arg) {\n const typedArray = arg as\n | Float32Array\n | Float64Array\n | Int32Array\n | Uint8Array\n const bytes = new Uint8Array(\n typedArray.buffer,\n typedArray.byteOffset,\n typedArray.byteLength\n )\n bytes.set(memoryView.slice(offset, offset + bytes.length))\n offset += bytes.length\n offset = (offset + 15) & ~15\n }\n }\n\n return resultVal\n }\n\n return { fn: wrappedFn, memory, success: true }\n } catch (e: any) {\n return { fn: () => 0, success: false, error: e.message }\n }\n}\n\n/**\n * Compile and register a WASM block globally\n */\nexport async function registerWasmBlock(block: WasmBlock): Promise<boolean> {\n const result = await createWasmFunction(block)\n\n if (!result.success) {\n console.warn(`WASM compilation failed for ${block.id}:`, result.error)\n return false\n }\n\n // Register globally\n ;(globalThis as any)[block.id] = result.fn\n\n return true\n}\n\n/**\n * Compile all WASM blocks from a preprocessed source\n */\nexport async function compileWasmBlocks(blocks: WasmBlock[]): Promise<{\n compiled: number\n failed: number\n errors: string[]\n}> {\n let compiled = 0\n let failed = 0\n const errors: string[] = []\n\n for (const block of blocks) {\n const success = await registerWasmBlock(block)\n if (success) {\n compiled++\n } else {\n failed++\n errors.push(`Failed to compile ${block.id}`)\n }\n }\n\n return { compiled, failed, errors }\n}\n\n/**\n * Compiled WASM data that can be serialized and passed to an iframe\n */\nexport interface CompiledWasmData {\n id: string\n bytes: number[] // Uint8Array as plain array for JSON serialization\n captures: string[]\n needsMemory: boolean\n}\n\n/**\n * Compile WASM blocks and return serializable data for iframe instantiation\n */\nexport async function compileWasmBlocksForIframe(blocks: WasmBlock[]): Promise<{\n compiled: CompiledWasmData[]\n failed: number\n errors: string[]\n}> {\n const compiled: CompiledWasmData[] = []\n let failed = 0\n const errors: string[] = []\n\n for (const block of blocks) {\n const result = compileToWasm(block)\n if (result.success) {\n compiled.push({\n id: block.id,\n bytes: Array.from(result.bytes),\n captures: block.captures,\n needsMemory: result.needsMemory ?? false,\n })\n } else {\n failed++\n errors.push(`Failed to compile ${block.id}: ${result.error}`)\n }\n }\n\n return { compiled, failed, errors }\n}\n\n/**\n * Generate JavaScript code that instantiates compiled WASM in an iframe\n * This code should be injected into the iframe's script\n */\nexport function generateWasmInstantiationCode(\n compiledBlocks: CompiledWasmData[]\n): string {\n if (compiledBlocks.length === 0) return ''\n\n // Helper function to parse type annotations (same as parseTypeAnnotation)\n const parseTypeCode = `\nfunction __parseWasmType(capture) {\n const match = capture.match(/^(\\\\w+)\\\\s*:\\\\s*(\\\\w+)$/);\n if (!match) return { name: capture, type: 'f64', isArray: false };\n const [, name, typeStr] = match;\n const arrayTypes = { Float32Array: 'f32', Float64Array: 'f64', Int32Array: 'i32', Uint8Array: 'i32' };\n if (arrayTypes[typeStr]) {\n return { name, type: 'i32', isArray: true, arrayType: typeStr };\n }\n const typeMap = { i32: 'i32', i64: 'i64', f32: 'f32', f64: 'f64', number: 'f64', int: 'i32' };\n return { name, type: typeMap[typeStr] || 'f64', isArray: false };\n}\n`\n\n // Helper to create wrapped function\n const wrapperCode = `\nasync function __instantiateWasm(id, bytes, captures, needsMemory) {\n const params = captures.map(__parseWasmType);\n const hasArrays = params.some(p => p.isArray);\n\n let memory;\n if (needsMemory) {\n memory = new WebAssembly.Memory({ initial: 256 });\n }\n\n const importObject = memory ? { env: { memory } } : {};\n const module = await WebAssembly.compile(new Uint8Array(bytes));\n const instance = await WebAssembly.instantiate(module, importObject);\n const compute = instance.exports.compute;\n\n if (!hasArrays) {\n globalThis[id] = compute;\n return;\n }\n\n // Create wrapper that copies typed arrays to/from WASM memory\n globalThis[id] = function(...args) {\n const memoryView = new Uint8Array(memory.buffer);\n let offset = 0;\n const pointers = [];\n\n // Copy input arrays to memory\n for (let i = 0; i < params.length; i++) {\n const param = params[i];\n const arg = args[i];\n\n if (param.isArray && arg && arg.buffer) {\n const bytes = new Uint8Array(arg.buffer, arg.byteOffset, arg.byteLength);\n memoryView.set(bytes, offset);\n pointers.push(offset);\n offset += bytes.length;\n offset = (offset + 15) & ~15; // Align to 16 bytes (SIMD)\n } else {\n pointers.push(arg);\n }\n }\n\n // Call WASM function\n const result = compute(...pointers);\n\n // Copy output arrays back\n offset = 0;\n for (let i = 0; i < params.length; i++) {\n const param = params[i];\n const arg = args[i];\n\n if (param.isArray && arg && arg.buffer) {\n const bytes = new Uint8Array(arg.buffer, arg.byteOffset, arg.byteLength);\n bytes.set(memoryView.slice(offset, offset + bytes.length));\n offset += bytes.length;\n offset = (offset + 15) & ~15;\n }\n }\n\n return result;\n };\n}\n`\n\n // Generate instantiation calls for each block\n const instantiationCalls = compiledBlocks\n .map(\n (block) =>\n `__instantiateWasm(${JSON.stringify(block.id)}, ${JSON.stringify(\n block.bytes\n )}, ${JSON.stringify(block.captures)}, ${block.needsMemory})`\n )\n .join(',\\n ')\n\n return `\n // WASM instantiation helpers\n ${parseTypeCode}\n ${wrapperCode}\n\n // Instantiate all WASM blocks\n await Promise.all([\n ${instantiationCalls}\n ]);\n `\n}\n",
|
|
18
18
|
"/**\n * TJS WASM Bootstrap Generation\n *\n * Compiles inline WASM blocks and generates JavaScript bootstrap code.\n */\n\nimport { compileToWasm } from '../wasm'\nimport type { WasmBlock } from '../parser'\n\nexport function generateWasmBootstrap(blocks: WasmBlock[]): {\n code: string\n results: {\n id: string\n success: boolean\n error?: string\n byteLength?: number\n }[]\n} {\n const results: {\n id: string\n success: boolean\n error?: string\n byteLength?: number\n }[] = []\n const compiledBlocks: {\n id: string\n base64: string\n captures: string[]\n needsMemory: boolean\n wat: string\n }[] = []\n\n for (const block of blocks) {\n const result = compileToWasm(block)\n if (result.success) {\n // Convert bytes to base64 for embedding\n const base64 = btoa(String.fromCharCode(...result.bytes))\n compiledBlocks.push({\n id: block.id,\n base64,\n captures: block.captures,\n needsMemory: result.needsMemory ?? false,\n wat: result.wat ?? '',\n })\n results.push({\n id: block.id,\n success: true,\n byteLength: result.bytes.length,\n })\n } else {\n results.push({\n id: block.id,\n success: false,\n error: result.error,\n })\n }\n }\n\n if (compiledBlocks.length === 0) {\n return { code: '', results }\n }\n\n // Generate WAT comments for each block\n const watComments = compiledBlocks\n .map((b) => {\n const watLines = b.wat.split('\\n').map((line) => ` * ${line}`)\n return `/**\\n * WASM: ${b.id}\\n${watLines.join('\\n')}\\n */`\n })\n .join('\\n')\n\n // Generate self-contained bootstrap code\n // This runs immediately and sets up globalThis.__tjs_wasm_N functions\n const blockData = compiledBlocks\n .map(\n (b) =>\n `{id:${JSON.stringify(b.id)},b64:${JSON.stringify(\n b.base64\n )},c:${JSON.stringify(b.captures)},m:${b.needsMemory}}`\n )\n .join(',')\n\n // Check if any block needs memory (shared across all blocks)\n const anyNeedsMemory = compiledBlocks.some((b) => b.needsMemory)\n\n const code = `${watComments}\n;(async()=>{\nconst __wasmBlocks=[${blockData}];\nconst __b64ToBytes=s=>{const b=atob(s),a=new Uint8Array(b.length);for(let i=0;i<b.length;i++)a[i]=b.charCodeAt(i);return a};\nconst __parseType=c=>{const m=c.match(/^(\\\\w+)\\\\s*:\\\\s*(\\\\w+)$/);if(!m)return{n:c,t:'f64',a:false};const[,n,ts]=m;const at={Float32Array:'f32',Float64Array:'f64',Int32Array:'i32',Uint8Array:'i32'};if(at[ts])return{n,t:'i32',a:true,at:ts};return{n,t:'f64',a:false}};\n${\n anyNeedsMemory\n ? `const __wasmMem=new WebAssembly.Memory({initial:1024});\nlet __woff=0;\nglobalThis.wasmBuffer=function(Ctor,len){const bytes=len*Ctor.BYTES_PER_ELEMENT;const align=Math.max(Ctor.BYTES_PER_ELEMENT,16);__woff=(__woff+align-1)&~(align-1);const arr=new Ctor(__wasmMem.buffer,__woff,len);__woff+=bytes;return arr};`\n : ''\n}\nfor(const{id,b64,c,m}of __wasmBlocks){\n const bytes=__b64ToBytes(b64);\n const params=c.map(__parseType);\n const hasArrays=params.some(p=>p.a);\n const mem=m?__wasmMem:null;\n const imp=mem?{env:{memory:mem}}:{};\n const inst=await WebAssembly.instantiate(await WebAssembly.compile(bytes),imp);\n const compute=inst.exports.compute;\n if(!hasArrays){globalThis[id]=compute;continue}\n globalThis[id]=function(...args){\n const mv=new Uint8Array(mem.buffer);let off=__woff;const ptrs=[];\n for(let i=0;i<params.length;i++){const p=params[i],a=args[i];\n if(p.a&&a?.buffer){\n if(a.buffer===mem.buffer){ptrs.push(a.byteOffset)}\n else{const ab=new Uint8Array(a.buffer,a.byteOffset,a.byteLength);off=(off+15)&~15;mv.set(ab,off);ptrs.push(off);off+=ab.length}\n } else ptrs.push(a)}\n const r=compute(...ptrs);off=__woff;\n for(let i=0;i<params.length;i++){const p=params[i],a=args[i];\n if(p.a&&a?.buffer){\n if(a.buffer===mem.buffer) continue;\n const ab=new Uint8Array(a.buffer,a.byteOffset,a.byteLength);off=(off+15)&~15;ab.set(mv.slice(off,off+ab.length));off+=ab.length}}\n return r};\n}})();\n`.trim()\n\n return { code, results }\n}\n",
|
|
19
19
|
"/**\n * TJS to .d.ts Emitter\n *\n * Generates TypeScript declaration files from TJS transpilation results.\n * Allows TypeScript consumers to use TJS-authored libraries with full\n * type information for functions, and helpful `any`-based stubs for\n * classes, generics, and predicate types.\n *\n * Design principle: emit enough structure for autocomplete/tooltips\n * (parameter names, object shapes) but lean on `any` where TJS types\n * can't be faithfully expressed in TS (predicate types, generics,\n * class instances). This gives developers IDE hints without false\n * lint errors from types that don't fully match.\n *\n * Handles:\n * - Exported functions → full param/return types from TJSTypeInfo\n * - Exported classes → callable function stub with constructor params, returns any\n * - Exported Type declarations → type guard function stubs\n * - Exported Generic declarations → factory function stubs\n * - Re-exports via `export { Name }` syntax\n */\n\nimport type { TypeDescriptor } from '../types'\nimport type { TJSTranspileResult, TJSTypeInfo } from './js'\n\n/**\n * Convert a TypeDescriptor to a TypeScript type string.\n *\n * Maps TJS's example-inferred types to the closest TS equivalents:\n * integer / non-negative-integer → number (TS has no integer type)\n * string / number / boolean / null / undefined / any → themselves\n * array + items → T[]\n * object + shape → { key: Type; ... }\n * union + members → T1 | T2\n * nullable → T | null\n */\nexport function typeDescriptorToTS(td: TypeDescriptor): string {\n let base: string\n\n switch (td.kind) {\n case 'string':\n base = 'string'\n break\n case 'number':\n case 'integer':\n case 'non-negative-integer':\n base = 'number'\n break\n case 'boolean':\n base = 'boolean'\n break\n case 'null':\n return 'null'\n case 'undefined':\n return 'undefined'\n case 'any':\n base = 'any'\n break\n case 'array':\n if (td.items) {\n const inner = typeDescriptorToTS(td.items)\n // Wrap union types in parens for array: (A | B)[]\n base = inner.includes('|') ? `(${inner})[]` : `${inner}[]`\n } else {\n base = 'any[]'\n }\n break\n case 'object':\n if (td.shape && Object.keys(td.shape).length > 0) {\n const fields = Object.entries(td.shape)\n .map(([k, v]) => `${k}: ${typeDescriptorToTS(v)}`)\n .join('; ')\n base = `{ ${fields} }`\n } else {\n base = 'Record<string, any>'\n }\n break\n case 'union':\n if (td.members && td.members.length > 0) {\n return td.members.map(typeDescriptorToTS).join(' | ')\n }\n base = 'any'\n break\n default:\n base = 'any'\n }\n\n if (td.nullable) {\n return `${base} | null`\n }\n return base\n}\n\n/**\n * Generate a function declaration line for .d.ts\n */\nfunction functionDeclToTS(\n name: string,\n info: TJSTypeInfo,\n exported: boolean,\n isDefault: boolean\n): string {\n const params = Object.entries(info.params)\n .map(([pName, p]) => {\n const optional = !p.required\n const tsType = typeDescriptorToTS(p.type)\n return optional ? `${pName}?: ${tsType}` : `${pName}: ${tsType}`\n })\n .join(', ')\n\n const returnType = info.returns ? typeDescriptorToTS(info.returns) : 'any'\n const prefix = exported\n ? isDefault\n ? 'export default function'\n : 'export declare function'\n : 'declare function'\n\n return `${prefix} ${name}(${params}): ${returnType};`\n}\n\nexport interface GenerateDTSOptions {\n /** Module name for ambient declarations (omit for module-mode .d.ts) */\n moduleName?: string\n}\n\n/** Info about a name detected as exported */\ninterface ExportInfo {\n exported: boolean\n isDefault: boolean\n}\n\n/**\n * Detect which top-level names are exported in the source.\n *\n * Returns a map of name → { exported, isDefault }.\n * Scans the original TJS source for export keywords.\n */\nfunction detectExports(source: string): Map<string, ExportInfo> {\n const result = new Map<string, ExportInfo>()\n let m\n\n // export function name / export default function name\n const funcRe = /^[ \\t]*export\\s+(default\\s+)?function\\s+(\\w+)/gm\n while ((m = funcRe.exec(source)) !== null) {\n result.set(m[2], { exported: true, isDefault: !!m[1] })\n }\n\n // export class name / export default class name\n const classRe = /^[ \\t]*export\\s+(default\\s+)?class\\s+(\\w+)/gm\n while ((m = classRe.exec(source)) !== null) {\n result.set(m[2], { exported: true, isDefault: !!m[1] })\n }\n\n // export const/let/var name\n const varRe = /^[ \\t]*export\\s+(default\\s+)?(?:const|let|var)\\s+(\\w+)/gm\n while ((m = varRe.exec(source)) !== null) {\n result.set(m[2], { exported: true, isDefault: !!m[1] })\n }\n\n // export Type Name\n const typeRe = /^[ \\t]*export\\s+Type\\s+(\\w+)/gm\n while ((m = typeRe.exec(source)) !== null) {\n result.set(m[1], { exported: true, isDefault: false })\n }\n\n // export Generic Name<...>\n const genericRe = /^[ \\t]*export\\s+Generic\\s+(\\w+)/gm\n while ((m = genericRe.exec(source)) !== null) {\n result.set(m[1], { exported: true, isDefault: false })\n }\n\n // export FunctionPredicate Name\n const fpRe = /^[ \\t]*export\\s+FunctionPredicate\\s+(\\w+)/gm\n while ((m = fpRe.exec(source)) !== null) {\n result.set(m[1], { exported: true, isDefault: false })\n }\n\n // export { Name, Name2, ... } — re-export form\n const reExportRe = /^[ \\t]*export\\s*\\{([^}]+)\\}/gm\n while ((m = reExportRe.exec(source)) !== null) {\n const names = m[1].split(',').map((s) => s.trim().split(/\\s+as\\s+/))\n for (const parts of names) {\n const exportedName = parts.length > 1 ? parts[1] : parts[0]\n if (exportedName && /^\\w+$/.test(exportedName)) {\n result.set(exportedName, { exported: true, isDefault: false })\n }\n }\n }\n\n return result\n}\n\n/** Info about a FunctionPredicate declaration */\ninterface FunctionPredicateInfo {\n params: { name: string; example: string }[]\n returns?: string\n typeParams?: string[]\n}\n\n/** Detect FunctionPredicate declarations and extract their param/return specs */\nfunction detectFunctionPredicates(\n source: string\n): Map<string, FunctionPredicateInfo> {\n const result = new Map<string, FunctionPredicateInfo>()\n\n // Block form: FunctionPredicate Name { ... } or FunctionPredicate Name<T> { ... }\n const blockRe =\n /^[ \\t]*(?:export\\s+)?FunctionPredicate\\s+(\\w+)\\s*(?:<([^>]+)>)?\\s*\\{/gm\n let m\n while ((m = blockRe.exec(source)) !== null) {\n const name = m[1]\n const typeParamsRaw = m[2] // undefined if no <...>\n const blockStart = m.index + m[0].length - 1\n\n // Find matching closing brace\n let depth = 1\n let i = blockStart + 1\n while (i < source.length && depth > 0) {\n if (source[i] === '{') depth++\n else if (source[i] === '}') depth--\n i++\n }\n const body = source.slice(blockStart + 1, i - 1)\n\n // Parse type params if present\n let typeParams: string[] | undefined\n if (typeParamsRaw) {\n typeParams = typeParamsRaw.split(',').map((tp) => tp.trim())\n }\n\n // Extract params object: params: { key: value, ... }\n const params: FunctionPredicateInfo['params'] = []\n const paramsMatch = body.match(/params\\s*:\\s*\\{([^}]*)\\}/)\n if (paramsMatch) {\n const paramsStr = paramsMatch[1]\n const paramEntries = splitParams(paramsStr)\n for (const entry of paramEntries) {\n const kv = entry.match(/^(\\w+)\\s*:\\s*(.+)$/)\n if (kv) {\n params.push({ name: kv[1], example: kv[2].trim() })\n }\n }\n }\n\n // Extract returns value\n let returns: string | undefined\n const returnsMatch = body.match(/returns\\s*:\\s*(.+?)(?:\\n|$)/)\n if (returnsMatch) {\n returns = returnsMatch[1].trim()\n }\n\n result.set(name, { params, returns, typeParams })\n }\n\n return result\n}\n\n/** Info about a class extracted from source */\ninterface ClassInfo {\n name: string\n constructorParams: string // raw param string, e.g. \"x: 0.0, y: 0.0\"\n methods: { name: string; params: string; returnType: string | null }[]\n}\n\n/**\n * Detect class declarations and extract constructor param names/types.\n * Scans original TJS source (before preprocessing).\n */\nfunction detectClasses(source: string): Map<string, ClassInfo> {\n const result = new Map<string, ClassInfo>()\n\n // Find class declarations\n const classRe =\n /^[ \\t]*(?:export\\s+(?:default\\s+)?)?class\\s+(\\w+)(?:\\s+extends\\s+\\w+)?\\s*\\{/gm\n let m\n while ((m = classRe.exec(source)) !== null) {\n const className = m[1]\n const classBodyStart = m.index + m[0].length - 1\n\n // Find matching closing brace\n let depth = 1\n let i = classBodyStart + 1\n while (i < source.length && depth > 0) {\n if (source[i] === '{') depth++\n else if (source[i] === '}') depth--\n i++\n }\n const classBody = source.slice(classBodyStart + 1, i - 1)\n\n // Extract constructor params (handle nested parens/braces in param types)\n const ctorStart = classBody.indexOf('constructor')\n let ctorParams = ''\n if (ctorStart !== -1) {\n const parenStart = classBody.indexOf('(', ctorStart)\n if (parenStart !== -1) {\n let depth = 1\n let j = parenStart + 1\n while (j < classBody.length && depth > 0) {\n if (classBody[j] === '(') depth++\n else if (classBody[j] === ')') depth--\n j++\n }\n ctorParams = classBody.slice(parenStart + 1, j - 1).trim()\n }\n }\n\n // Extract methods at class body level (brace depth 0 within classBody)\n // Must skip method implementations to avoid matching if(), for(), etc.\n const methods: ClassInfo['methods'] = []\n {\n let pos = 0\n let bodyDepth = 0\n\n while (pos < classBody.length) {\n const ch = classBody[pos]\n\n // Track brace depth — only look for methods at depth 0\n if (ch === '{') {\n bodyDepth++\n pos++\n continue\n }\n if (ch === '}') {\n bodyDepth--\n pos++\n continue\n }\n\n // Only match method declarations at class body level (depth 0)\n if (bodyDepth === 0) {\n const methodMatch = classBody.slice(pos).match(/^(\\w+)\\s*\\(/)\n if (methodMatch) {\n const name = methodMatch[1]\n if (name === 'constructor' || name === 'get' || name === 'set') {\n // Skip past the keyword to avoid re-matching a suffix\n pos += name.length\n continue\n } else {\n // Find matching close paren\n const parenStart = pos + methodMatch[0].length - 1\n let depth = 1\n let j = parenStart + 1\n while (j < classBody.length && depth > 0) {\n if (classBody[j] === '(') depth++\n else if (classBody[j] === ')') depth--\n j++\n }\n const params = classBody.slice(parenStart + 1, j - 1).trim()\n\n // Check for return type annotation: -> Type\n const afterParen = classBody.slice(j).match(/^\\s*->\\s*(.+?)\\s*\\{/)\n const returnType = afterParen ? afterParen[1].trim() : null\n\n methods.push({ name, params, returnType })\n pos = j\n continue\n }\n }\n }\n\n pos++\n }\n }\n\n result.set(className, {\n name: className,\n constructorParams: ctorParams,\n methods,\n })\n }\n\n return result\n}\n\n/**\n * Split a param string on commas, respecting nested braces/brackets.\n * \"x: 0.0, y: { a: 1, b: 2 }\" → [\"x: 0.0\", \"y: { a: 1, b: 2 }\"]\n */\nfunction splitParams(paramStr: string): string[] {\n const result: string[] = []\n let depth = 0\n let current = ''\n for (const ch of paramStr) {\n if (ch === '{' || ch === '[' || ch === '(') depth++\n else if (ch === '}' || ch === ']' || ch === ')') depth--\n\n if (ch === ',' && depth === 0) {\n result.push(current.trim())\n current = ''\n } else {\n current += ch\n }\n }\n if (current.trim()) result.push(current.trim())\n return result\n}\n\n/**\n * Parse a TJS constructor/method param string into TS param declarations.\n * Input: \"x: 0.0, y: 0.0\" or \"name: '', age: 0\"\n * Output: \"x: number, y: number\" or \"name: string, age: number\"\n *\n * Uses `any` for anything we can't confidently parse.\n */\nfunction tjsParamsToTS(paramStr: string): string {\n if (!paramStr.trim()) return ''\n\n return splitParams(paramStr)\n .map((trimmed) => {\n // name: value (required) or name = value (optional)\n const colonMatch = trimmed.match(/^(\\w+)\\s*:\\s*(.+)$/)\n if (colonMatch) {\n const name = colonMatch[1]\n const tsType = inferTSTypeFromExample(colonMatch[2].trim())\n return `${name}: ${tsType}`\n }\n const eqMatch = trimmed.match(/^(\\w+)\\s*=\\s*(.+)$/)\n if (eqMatch) {\n const name = eqMatch[1]\n const tsType = inferTSTypeFromExample(eqMatch[2].trim())\n return `${name}?: ${tsType}`\n }\n // Destructured or complex — fall back to any\n if (trimmed.startsWith('{')) return `options: any`\n return `${trimmed}: any`\n })\n .join(', ')\n}\n\n/** Detect Type declarations and their example values */\nfunction detectTypeDeclarations(source: string): Map<string, string> {\n const result = new Map<string, string>()\n let m\n\n // Type Name = <value> (assignment form)\n const assignRe = /^[ \\t]*(?:export\\s+)?Type\\s+(\\w+)\\s*=\\s*(.+)$/gm\n while ((m = assignRe.exec(source)) !== null) {\n result.set(m[1], m[2].trim())\n }\n\n // Type Name <value> (simple form, not block)\n const simpleRe = /^[ \\t]*(?:export\\s+)?Type\\s+(\\w+)\\s+([^{=].*)$/gm\n while ((m = simpleRe.exec(source)) !== null) {\n if (!result.has(m[1])) {\n result.set(m[1], m[2].trim())\n }\n }\n\n // Block: Type Name { ... example: <value> ... }\n const blockRe =\n /^[ \\t]*(?:export\\s+)?Type\\s+(\\w+)\\s*\\{[^}]*example\\s*:\\s*(.+?)(?:\\n|\\s*[,}])/gm\n while ((m = blockRe.exec(source)) !== null) {\n result.set(m[1], m[2].trim())\n }\n\n return result\n}\n\n/** Info about a Generic declaration */\ninterface GenericInfo {\n typeParams: string[]\n /** Raw TypeScript content from `declaration { ... }` block, if present */\n declaration?: string\n}\n\n/** Detect Generic declarations, their type params, and optional declaration blocks */\nfunction detectGenerics(source: string): Map<string, GenericInfo> {\n const result = new Map<string, GenericInfo>()\n const re = /^[ \\t]*(?:export\\s+)?Generic\\s+(\\w+)\\s*<([^>]+)>\\s*\\{/gm\n let m\n while ((m = re.exec(source)) !== null) {\n const name = m[1]\n const typeParams = m[2].split(',').map((tp) => {\n return tp.trim().split(/\\s*=/)[0].trim()\n })\n\n // Find the full Generic block body via brace matching\n const blockStart = m.index + m[0].length - 1\n let depth = 1\n let i = blockStart + 1\n while (i < source.length && depth > 0) {\n if (source[i] === '{') depth++\n else if (source[i] === '}') depth--\n i++\n }\n const blockBody = source.slice(blockStart + 1, i - 1)\n\n // Look for declaration { ... } within the block body\n let declaration: string | undefined\n const declMatch = blockBody.match(/\\bdeclaration\\s*\\{/)\n if (declMatch && declMatch.index !== undefined) {\n const declStart = declMatch.index + declMatch[0].length - 1\n let dDepth = 1\n let j = declStart + 1\n while (j < blockBody.length && dDepth > 0) {\n if (blockBody[j] === '{') dDepth++\n else if (blockBody[j] === '}') dDepth--\n j++\n }\n declaration = blockBody.slice(declStart + 1, j - 1).trim()\n }\n\n result.set(name, { typeParams, declaration })\n }\n return result\n}\n\n/**\n * Generate a .d.ts string from TJS transpilation output.\n *\n * @param result - The TJSTranspileResult from tjs()\n * @param source - The original TJS source (needed to detect exports)\n * @param options - Generation options\n * @returns The .d.ts file content as a string\n */\nexport function generateDTS(\n result: TJSTranspileResult,\n source: string,\n options: GenerateDTSOptions = {}\n): string {\n const lines: string[] = []\n const exports = detectExports(source)\n const typeDecls = detectTypeDeclarations(source)\n const classes = detectClasses(source)\n const generics = detectGenerics(source)\n\n // If no exports detected, treat all top-level declarations as exported\n // (CommonJS / script-mode files)\n const hasAnyExport = exports.size > 0\n\n // Track names we've already emitted\n const emitted = new Set<string>()\n\n // Emit function declarations (from transpiler metadata — best type info)\n for (const [name, info] of Object.entries(result.types)) {\n // Skip polymorphic variants (name$0, name$1, etc.)\n if (name.includes('$')) continue\n\n const exportInfo = exports.get(name)\n const isExported = hasAnyExport ? !!exportInfo?.exported : true\n const isDefault = exportInfo?.isDefault ?? false\n\n if (!isExported) continue\n\n if (info.description) {\n lines.push(`/** ${info.description} */`)\n }\n\n lines.push(functionDeclToTS(name, info, true, isDefault))\n emitted.add(name)\n }\n\n // Emit class declarations as callable functions returning any.\n // TJS wraps classes to be callable without `new`, so this matches\n // the actual runtime API. Returning `any` means TS won't fight\n // the developer on instance property access.\n for (const [name, classInfo] of classes) {\n if (emitted.has(name)) continue\n\n const exportInfo = exports.get(name)\n const isExported = hasAnyExport ? !!exportInfo?.exported : true\n if (!isExported) continue\n\n const tsParams = classInfo.constructorParams\n ? tjsParamsToTS(classInfo.constructorParams)\n : ''\n\n // Emit as callable function (matches TJS wrapClass behavior)\n lines.push(`export declare function ${name}(${tsParams}): any;`)\n\n // Also emit as a class with `new` for the rare case someone uses it\n if (tsParams || classInfo.methods.length > 0) {\n lines.push(`export declare class ${name} {`)\n if (classInfo.constructorParams) {\n lines.push(` constructor(${tsParams});`)\n }\n for (const method of classInfo.methods) {\n const mParams = method.params ? tjsParamsToTS(method.params) : ''\n lines.push(` ${method.name}(${mParams}): any;`)\n }\n lines.push(`}`)\n }\n\n emitted.add(name)\n }\n\n // Emit Type declarations as type guard functions.\n // Type('Name', example) returns an object with .check(), .default, etc.\n // For TS consumers, the useful thing is knowing it's a callable type guard.\n for (const [name, exampleStr] of typeDecls) {\n if (emitted.has(name)) continue\n\n const exportInfo = exports.get(name)\n const isExported = hasAnyExport ? !!exportInfo?.exported : true\n if (!isExported) continue\n\n const tsType = inferTSTypeFromExample(exampleStr)\n lines.push(\n `export declare const ${name}: {` +\n ` check(value: any): boolean;` +\n ` default: ${tsType};` +\n ` (value: any): boolean;` +\n ` };`\n )\n emitted.add(name)\n }\n\n // Emit Generic declarations.\n // If a declaration block is present, emit a proper TS interface.\n // Otherwise, emit an any-based factory stub.\n for (const [name, info] of generics) {\n if (emitted.has(name)) continue\n\n const exportInfo = exports.get(name)\n const isExported = hasAnyExport ? !!exportInfo?.exported : true\n if (!isExported) continue\n\n const typeParamStr =\n info.typeParams.length > 0 ? `<${info.typeParams.join(', ')}>` : ''\n\n if (info.declaration) {\n // Emit a proper TypeScript interface from the declaration block\n const declLines = info.declaration\n .split('\\n')\n .map((l) => l.trim())\n .filter((l) => l.length > 0)\n .map((l) => ` ${l}`)\n .join('\\n')\n lines.push(`export interface ${name}${typeParamStr} {\\n${declLines}\\n}`)\n } else {\n // No declaration block — emit any-based factory stub\n lines.push(\n `export declare function ${name}(` +\n `...args: any[]` +\n `): { check(value: any): boolean; (value: any): boolean; };`\n )\n }\n emitted.add(name)\n }\n\n // Emit FunctionPredicate declarations as TS function types.\n // FunctionPredicate Callback { params: { x: 0 } returns: '' }\n // → export type Callback = (x: number) => string;\n const funcPreds = detectFunctionPredicates(source)\n for (const [name, fpInfo] of funcPreds) {\n if (emitted.has(name)) continue\n\n const exportInfo = exports.get(name)\n const isExported = hasAnyExport ? !!exportInfo?.exported : true\n if (!isExported) continue\n\n // Collect type param names for passthrough (don't convert T to any)\n const tpNames = new Set(\n fpInfo.typeParams?.map((tp) => tp.split('=')[0].trim()) ?? []\n )\n const typeParamStr = fpInfo.typeParams\n ? `<${fpInfo.typeParams.join(', ')}>`\n : ''\n\n const tsParams = fpInfo.params\n .map((p) => {\n const tsType = tpNames.has(p.example)\n ? p.example\n : inferTSTypeFromExample(p.example)\n return `${p.name}: ${tsType}`\n })\n .join(', ')\n const tsReturn =\n fpInfo.returns !== undefined\n ? tpNames.has(fpInfo.returns)\n ? fpInfo.returns\n : inferTSTypeFromExample(fpInfo.returns)\n : 'void'\n lines.push(\n `export type ${name}${typeParamStr} = (${tsParams}) => ${tsReturn};`\n )\n emitted.add(name)\n }\n\n if (options.moduleName) {\n const indented = lines.map((l) => ` ${l}`).join('\\n')\n return `declare module '${options.moduleName}' {\\n${indented}\\n}\\n`\n }\n\n return lines.join('\\n') + '\\n'\n}\n\n/**\n * Best-effort TS type inference from an example value string.\n * Used for Type declarations and constructor params where we only\n * have the raw source text, not a parsed TypeDescriptor.\n */\nfunction inferTSTypeFromExample(example: string): string {\n const s = example.trim()\n\n // Unions first: \"'' | 0 | null\" → \"string | number | null\"\n // Only split on | that's outside quotes/braces/brackets\n if (hasTopLevelPipe(s)) {\n const members = splitOnPipe(s).map((m) => inferTSTypeFromExample(m.trim()))\n return [...new Set(members)].join(' | ')\n }\n\n // String literals\n if (/^['\"]/.test(s)) return 'string'\n\n // Boolean\n if (s === 'true' || s === 'false') return 'boolean'\n\n // Null / undefined\n if (s === 'null') return 'null'\n if (s === 'undefined') return 'undefined'\n\n // Numbers\n if (/^[+-]?\\d+\\.\\d+$/.test(s)) return 'number'\n if (/^[+-]?\\d+$/.test(s)) return 'number'\n\n // Arrays\n if (s.startsWith('[')) return 'any[]'\n\n // Objects\n if (s.startsWith('{')) return 'Record<string, any>'\n\n return 'any'\n}\n\n/** Check if a string has a top-level | (not inside quotes/braces) */\nfunction hasTopLevelPipe(s: string): boolean {\n let depth = 0\n let inStr: string | null = null\n for (const ch of s) {\n if (inStr) {\n if (ch === inStr) inStr = null\n continue\n }\n if (ch === \"'\" || ch === '\"' || ch === '`') {\n inStr = ch\n continue\n }\n if (ch === '{' || ch === '[' || ch === '(') depth++\n else if (ch === '}' || ch === ']' || ch === ')') depth--\n else if (ch === '|' && depth === 0) return true\n }\n return false\n}\n\n/** Split on top-level | characters */\nfunction splitOnPipe(s: string): string[] {\n const result: string[] = []\n let depth = 0\n let inStr: string | null = null\n let current = ''\n for (const ch of s) {\n if (inStr) {\n current += ch\n if (ch === inStr) inStr = null\n continue\n }\n if (ch === \"'\" || ch === '\"' || ch === '`') {\n inStr = ch\n current += ch\n continue\n }\n if (ch === '{' || ch === '[' || ch === '(') depth++\n else if (ch === '}' || ch === ']' || ch === ')') depth--\n\n if (ch === '|' && depth === 0) {\n result.push(current)\n current = ''\n } else {\n current += ch\n }\n }\n if (current) result.push(current)\n return result\n}\n",
|
|
20
|
-
"/**\n * TypeScript to TJS Transpiler\n *\n * Converts TypeScript source to TJS (or directly to JS + metadata).\n *\n * Two modes:\n * 1. TS → TJS (for inspection/migration)\n * 2. TS → JS + __tjs metadata (for production)\n *\n * @example\n * ```typescript\n * // Input TypeScript:\n * function greet(name: string, age?: number): string {\n * return `Hello, ${name}!`\n * }\n *\n * // Output TJS:\n * function greet(name: '', age = 0) -> '' {\n * return `Hello, ${name}!`\n * }\n *\n * // Output JS + metadata:\n * function greet(name, age) {\n * return `Hello, ${name}!`\n * }\n * greet.__tjs = {\n * params: { name: { type: 'string', required: true }, age: { type: 'number', required: false } },\n * returns: { type: 'string' }\n * }\n * ```\n */\n\nimport ts from 'typescript'\nimport { emitClassWrapper } from '../runtime'\n\nexport interface FromTSOptions {\n /** Emit TJS intermediate instead of JS + metadata */\n emitTJS?: boolean\n /** Include sourcemap */\n sourceMap?: boolean\n /** Filename for error messages */\n filename?: string\n}\n\nexport interface FromTSResult {\n /** The transpiled code (TJS or JS depending on options) */\n code: string\n /** Function type metadata (only when emitting JS) */\n types?: Record<string, FunctionTypeInfo>\n /** Class type metadata (only when emitting JS) */\n classes?: Record<string, ClassTypeInfo>\n /** Any warnings during transpilation */\n warnings?: string[]\n}\n\nexport interface TypeParamInfo {\n /** Constraint schema (from `extends`) - example-based */\n constraint?: string | Record<string, any>\n /** Default schema (from `= Type`) - example-based */\n default?: string | Record<string, any>\n}\n\nexport interface FunctionTypeInfo {\n name: string\n params: Record<string, ParamTypeInfo>\n returns?: TypeInfo\n description?: string\n /** Generic type parameters with constraints/defaults */\n typeParams?: Record<string, TypeParamInfo>\n /** Overload signatures (when function has TS overloads) */\n overloads?: FunctionTypeInfo[]\n}\n\nexport interface ClassTypeInfo {\n name: string\n /** Constructor parameters - also serves as the type shape */\n constructor?: {\n params: Record<string, ParamTypeInfo>\n }\n /** Instance methods */\n methods: Record<string, FunctionTypeInfo>\n /** Static methods */\n staticMethods: Record<string, FunctionTypeInfo>\n /** Generic type parameters */\n typeParams?: Record<string, TypeParamInfo>\n}\n\nexport interface ParamTypeInfo {\n type: TypeInfo\n required: boolean\n default?: any\n description?: string\n}\n\nexport interface TypeInfo {\n kind:\n | 'string'\n | 'number'\n | 'boolean'\n | 'null'\n | 'undefined'\n | 'array'\n | 'tuple'\n | 'object'\n | 'union'\n | 'any'\n items?: TypeInfo\n /** For tuples: element types in order */\n elements?: TypeInfo[]\n shape?: Record<string, TypeInfo>\n members?: TypeInfo[]\n nullable?: boolean\n}\n\n/** Context for type resolution */\ninterface TypeResolutionContext {\n typeAliases?: Map<string, ts.TypeNode>\n interfaces?: Map<string, ts.InterfaceDeclaration>\n sourceFile?: ts.SourceFile\n warnings?: string[]\n /** Track visited types to prevent infinite recursion */\n visited?: Set<string>\n /** Type parameter constraints and defaults from enclosing generic function/class */\n typeParams?: Map<string, { constraint?: ts.TypeNode; default?: ts.TypeNode }>\n}\n\n/**\n * DOM interface types — not constructible but common in TS signatures.\n * Map to {} (opaque object) so params stay annotated and required\n * rather than degrading to bare names.\n */\nconst domInterfaceTypes = new Set([\n // Events\n 'Event',\n 'CustomEvent',\n 'MouseEvent',\n 'KeyboardEvent',\n 'PointerEvent',\n 'TouchEvent',\n 'FocusEvent',\n 'InputEvent',\n 'CompositionEvent',\n 'WheelEvent',\n 'DragEvent',\n 'AnimationEvent',\n 'TransitionEvent',\n 'ClipboardEvent',\n 'UIEvent',\n 'ProgressEvent',\n 'ErrorEvent',\n 'MessageEvent',\n 'PopStateEvent',\n 'HashChangeEvent',\n 'PageTransitionEvent',\n 'StorageEvent',\n 'BeforeUnloadEvent',\n 'SubmitEvent',\n // Event targets / misc\n 'EventTarget',\n 'EventListener',\n // Nodes\n 'Node',\n 'Element',\n 'HTMLElement',\n 'SVGElement',\n 'Document',\n 'DocumentFragment',\n 'ShadowRoot',\n 'Text',\n 'Comment',\n 'Attr',\n // Specific HTML elements\n 'HTMLInputElement',\n 'HTMLTextAreaElement',\n 'HTMLSelectElement',\n 'HTMLButtonElement',\n 'HTMLFormElement',\n 'HTMLAnchorElement',\n 'HTMLImageElement',\n 'HTMLVideoElement',\n 'HTMLAudioElement',\n 'HTMLCanvasElement',\n 'HTMLDivElement',\n 'HTMLSpanElement',\n 'HTMLParagraphElement',\n 'HTMLTableElement',\n 'HTMLTemplateElement',\n 'HTMLSlotElement',\n 'HTMLDialogElement',\n 'HTMLDetailsElement',\n 'HTMLLabelElement',\n 'HTMLOptionElement',\n 'HTMLIFrameElement',\n 'HTMLScriptElement',\n 'HTMLStyleElement',\n 'HTMLLinkElement',\n 'HTMLMetaElement',\n 'HTMLHeadElement',\n 'HTMLBodyElement',\n 'HTMLMediaElement',\n // SVG elements\n 'SVGSVGElement',\n 'SVGPathElement',\n 'SVGGElement',\n 'SVGCircleElement',\n 'SVGRectElement',\n 'SVGTextElement',\n 'SVGLineElement',\n 'SVGPolygonElement',\n // Collections / lists\n 'NodeList',\n 'HTMLCollection',\n 'NamedNodeMap',\n 'DOMTokenList',\n 'DOMStringMap',\n 'CSSStyleDeclaration',\n 'DOMRect',\n 'DOMRectReadOnly',\n 'DOMPoint',\n 'DOMMatrix',\n // Ranges / selection\n 'Range',\n 'Selection',\n 'StaticRange',\n // Observers\n 'MutationObserver',\n 'MutationRecord',\n 'IntersectionObserver',\n 'IntersectionObserverEntry',\n 'ResizeObserver',\n 'ResizeObserverEntry',\n 'PerformanceObserver',\n 'PerformanceEntry',\n // Window / global\n 'Window',\n 'Location',\n 'History',\n 'Navigator',\n 'Screen',\n 'Storage',\n // Canvas / media\n 'CanvasRenderingContext2D',\n 'WebGLRenderingContext',\n 'WebGL2RenderingContext',\n 'OffscreenCanvas',\n 'ImageData',\n 'ImageBitmap',\n 'MediaStream',\n 'MediaRecorder',\n 'AudioContext',\n 'AudioNode',\n 'AudioBuffer',\n // Workers / messaging\n 'Worker',\n 'SharedWorker',\n 'ServiceWorker',\n 'ServiceWorkerRegistration',\n 'BroadcastChannel',\n 'MessageChannel',\n 'MessagePort',\n // Other Web APIs\n 'WebSocket',\n 'XMLHttpRequest',\n 'FileReader',\n 'FileList',\n 'DataTransfer',\n 'Crypto',\n 'SubtleCrypto',\n 'CryptoKey',\n 'Geolocation',\n 'Notification',\n 'PermissionStatus',\n 'MediaQueryList',\n 'TreeWalker',\n 'NodeIterator',\n 'ClipboardItem',\n])\n\n/**\n * Convert a TypeScript type node to a TJS example value string\n *\n * @param warnings - Optional array to collect warnings about generic types\n */\nfunction typeToExample(\n type: ts.TypeNode | undefined,\n checker?: ts.TypeChecker,\n warnings?: string[],\n ctx?: TypeResolutionContext\n): string {\n if (!type) return 'undefined'\n\n switch (type.kind) {\n case ts.SyntaxKind.StringKeyword:\n return \"''\"\n case ts.SyntaxKind.NumberKeyword:\n return '0.0'\n case ts.SyntaxKind.BooleanKeyword:\n return 'false'\n case ts.SyntaxKind.NullKeyword:\n return 'null'\n case ts.SyntaxKind.UndefinedKeyword:\n return 'undefined'\n case ts.SyntaxKind.VoidKeyword:\n return 'undefined'\n case ts.SyntaxKind.AnyKeyword:\n // For function params we use 'any', for object props we use 'null'\n return 'any'\n case ts.SyntaxKind.UnknownKeyword:\n return 'any'\n case ts.SyntaxKind.NeverKeyword:\n return 'null'\n case ts.SyntaxKind.SymbolKeyword:\n return \"Symbol('example')\"\n case ts.SyntaxKind.BigIntKeyword:\n return '0n'\n case ts.SyntaxKind.ObjectKeyword:\n return '{}'\n\n case ts.SyntaxKind.ArrayType: {\n const arrayType = type as ts.ArrayTypeNode\n let itemExample = typeToExample(arrayType.elementType, checker)\n // 'any' is not a valid literal value - use null for array items\n if (itemExample === 'any') itemExample = 'null'\n return `[${itemExample}]`\n }\n\n case ts.SyntaxKind.TypeReference: {\n const typeRef = type as ts.TypeReferenceNode\n const typeName = typeRef.typeName.getText()\n\n // Handle common generic types\n if (typeName === 'Array' && typeRef.typeArguments?.length) {\n const itemExample = typeToExample(\n typeRef.typeArguments[0],\n checker,\n warnings,\n ctx\n )\n return `[${itemExample}]`\n }\n if (typeName === 'Promise') {\n // Unwrap Promise type\n if (typeRef.typeArguments?.length) {\n return typeToExample(typeRef.typeArguments[0], checker, warnings, ctx)\n }\n return 'undefined'\n }\n if (\n typeName === 'Generator' ||\n typeName === 'AsyncGenerator' ||\n typeName === 'IterableIterator' ||\n typeName === 'AsyncIterableIterator'\n ) {\n // Unwrap to yield type (first type argument)\n if (typeRef.typeArguments?.length) {\n return typeToExample(typeRef.typeArguments[0], checker, warnings, ctx)\n }\n return 'undefined'\n }\n if (typeName === 'Record') {\n return '{}'\n }\n\n // Built-in constructible types — valid JS expressions as examples\n const builtinExamples: Record<string, string> = {\n // Collections\n Map: 'new Map()',\n Set: 'new Set()',\n WeakMap: 'new WeakMap()',\n WeakSet: 'new WeakSet()',\n WeakRef: 'new WeakRef({})',\n // Errors\n Error: \"new Error('example')\",\n TypeError: \"new TypeError('example')\",\n RangeError: \"new RangeError('example')\",\n SyntaxError: \"new SyntaxError('example')\",\n ReferenceError: \"new ReferenceError('example')\",\n URIError: \"new URIError('example')\",\n EvalError: \"new EvalError('example')\",\n // Date/Regex\n Date: 'new Date()',\n RegExp: '/example/',\n // Binary / WASM\n ArrayBuffer: 'new ArrayBuffer(0)',\n SharedArrayBuffer: 'new SharedArrayBuffer(0)',\n DataView: 'new DataView(new ArrayBuffer(0))',\n Float32Array: 'new Float32Array(0)',\n Float64Array: 'new Float64Array(0)',\n Int8Array: 'new Int8Array(0)',\n Int16Array: 'new Int16Array(0)',\n Int32Array: 'new Int32Array(0)',\n Uint8Array: 'new Uint8Array(0)',\n Uint16Array: 'new Uint16Array(0)',\n Uint32Array: 'new Uint32Array(0)',\n Uint8ClampedArray: 'new Uint8ClampedArray(0)',\n BigInt64Array: 'new BigInt64Array(0)',\n BigUint64Array: 'new BigUint64Array(0)',\n // Web APIs (constructible)\n URL: \"new URL('https://example.com')\",\n URLSearchParams: 'new URLSearchParams()',\n Headers: 'new Headers()',\n FormData: 'new FormData()',\n Blob: 'new Blob()',\n File: \"new File([], 'example')\",\n Response: 'new Response()',\n Request: \"new Request('https://example.com')\",\n AbortController: 'new AbortController()',\n AbortSignal: 'AbortSignal.abort()',\n // Streams\n ReadableStream: 'new ReadableStream()',\n WritableStream: 'new WritableStream()',\n TransformStream: 'new TransformStream()',\n // Structured data\n TextEncoder: 'new TextEncoder()',\n TextDecoder: 'new TextDecoder()',\n // Promises\n Promise: 'Promise.resolve(null)',\n }\n\n if (typeName in builtinExamples) {\n return builtinExamples[typeName]\n }\n\n // Resolve type aliases\n if (ctx?.typeAliases?.has(typeName)) {\n // Prevent infinite recursion\n const visited = ctx.visited ?? new Set<string>()\n if (visited.has(typeName)) {\n warnings?.push(`Circular type reference '${typeName}' - using 'any'`)\n return 'any'\n }\n visited.add(typeName)\n const resolvedType = ctx.typeAliases.get(typeName)!\n return typeToExample(resolvedType, checker, warnings, {\n ...ctx,\n visited,\n })\n }\n\n // Resolve interfaces\n if (ctx?.interfaces?.has(typeName)) {\n // Prevent infinite recursion\n const visited = ctx.visited ?? new Set<string>()\n if (visited.has(typeName)) {\n warnings?.push(`Circular type reference '${typeName}' - using 'any'`)\n return 'any'\n }\n visited.add(typeName)\n const iface = ctx.interfaces.get(typeName)!\n // Build example object from interface members\n const props: string[] = []\n for (const member of iface.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText(ctx.sourceFile)\n const propExample = typeToExample(member.type, checker, warnings, {\n ...ctx,\n visited,\n })\n // Always use : for object shape properties — = is only valid\n // in destructuring patterns, not in object literal examples\n props.push(`${propName}: ${propExample}`)\n }\n }\n return `{ ${props.join(', ')} }`\n }\n\n // Type parameters (generics like T, K, V)\n // Check if we have constraint or default info from enclosing context\n if (ctx?.typeParams?.has(typeName)) {\n const tp = ctx.typeParams.get(typeName)!\n if (tp.constraint) {\n return typeToExample(tp.constraint, checker, warnings, ctx)\n }\n if (tp.default) {\n return typeToExample(tp.default, checker, warnings, ctx)\n }\n // No constraint or default — fall through to 'any'\n }\n\n // DOM interface types — opaque objects, keep params annotated\n if (domInterfaceTypes.has(typeName)) {\n return '{}'\n }\n\n // Single uppercase letter or common generic names — treat as any\n if (\n /^[A-Z]$/.test(typeName) ||\n ['T', 'K', 'V', 'U', 'TKey', 'TValue', 'TItem', 'TResult'].includes(\n typeName\n )\n ) {\n warnings?.push(\n `Generic type parameter '${typeName}' converted to 'any' - consider specializing`\n )\n return 'any'\n }\n // Unknown type reference - treat as any\n warnings?.push(\n `Unknown type '${typeName}' converted to 'any' - may need manual review`\n )\n return 'any'\n }\n\n case ts.SyntaxKind.TypeLiteral: {\n const typeLiteral = type as ts.TypeLiteralNode\n const props: string[] = []\n for (const member of typeLiteral.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText()\n let propType = typeToExample(member.type, checker)\n // 'any' is not a valid literal value - use null for object properties\n if (propType === 'any') propType = 'null'\n // In object literals, always use : syntax (= is for function params only)\n props.push(`${propName}: ${propType}`)\n }\n }\n return `{ ${props.join(', ')} }`\n }\n\n case ts.SyntaxKind.UnionType: {\n const unionType = type as ts.UnionTypeNode\n\n // Helper to check if a type is null or undefined\n const isNullType = (t: ts.TypeNode) =>\n t.kind === ts.SyntaxKind.NullKeyword ||\n (ts.isLiteralTypeNode(t) &&\n t.literal.kind === ts.SyntaxKind.NullKeyword)\n const isUndefinedType = (t: ts.TypeNode) =>\n t.kind === ts.SyntaxKind.UndefinedKeyword ||\n (ts.isLiteralTypeNode(t) &&\n t.literal.kind === ts.SyntaxKind.UndefinedKeyword)\n\n // Check for nullable: T | null or T | undefined\n const nonNullTypes = unionType.types.filter(\n (t) => !isNullType(t) && !isUndefinedType(t)\n )\n const hasNull = unionType.types.some(isNullType)\n const hasUndefined = unionType.types.some(isUndefinedType)\n\n // All null/undefined — just return the simplest form\n if (nonNullTypes.length === 0) {\n if (hasNull) return 'null'\n return 'undefined'\n }\n\n if (nonNullTypes.length === 1 && (hasNull || hasUndefined)) {\n // Nullable type: T | null -> T | null\n const baseExample = typeToExample(\n nonNullTypes[0],\n checker,\n warnings,\n ctx\n )\n // any | null/undefined is just any — don't emit 'any | null'\n if (baseExample === 'any') return 'any'\n if (hasNull) return `${baseExample} | null`\n if (hasUndefined) return `${baseExample} | undefined`\n }\n\n // General union: if any member can't be expressed (any), degrade\n // the whole union to any — don't silently drop members\n const examples = unionType.types\n .map((t) => typeToExample(t, checker, warnings, ctx))\n .filter((e, i, arr) => arr.indexOf(e) === i) // deduplicate\n if (examples.some((e) => e === 'any')) return 'any'\n if (examples.length === 1) return examples[0]\n if (examples.length > 0) {\n // Check if any member is a complex expression (function call, new, etc.)\n // that would make | ambiguous as JS bitwise OR\n const hasComplexMember = examples.some(\n (e) => /[()]/.test(e) || e.startsWith('new ')\n )\n if (hasComplexMember) return 'any'\n return examples.join(' | ')\n }\n return 'undefined'\n }\n\n case ts.SyntaxKind.LiteralType: {\n const literalType = type as ts.LiteralTypeNode\n if (ts.isStringLiteral(literalType.literal)) {\n return `'${literalType.literal.text}'`\n }\n if (ts.isNumericLiteral(literalType.literal)) {\n return literalType.literal.text\n }\n if (literalType.literal.kind === ts.SyntaxKind.TrueKeyword) {\n return 'true'\n }\n if (literalType.literal.kind === ts.SyntaxKind.FalseKeyword) {\n return 'false'\n }\n if (literalType.literal.kind === ts.SyntaxKind.NullKeyword) {\n return 'null'\n }\n return 'undefined'\n }\n\n case ts.SyntaxKind.ParenthesizedType: {\n const parenType = type as ts.ParenthesizedTypeNode\n return typeToExample(parenType.type, checker)\n }\n\n case ts.SyntaxKind.FunctionType: {\n // Convert to inline FunctionPredicate expression\n const funcType = type as ts.FunctionTypeNode\n const fpParams: string[] = []\n for (const param of funcType.parameters) {\n const name = param.name?.getText() || '_'\n if (name === 'this') continue\n let paramExample = typeToExample(param.type, checker, warnings, ctx)\n if (paramExample === 'any') paramExample = 'null'\n fpParams.push(`${name}: ${paramExample}`)\n }\n let fpReturn = typeToExample(funcType.type, checker, warnings, ctx)\n if (fpReturn === 'any') fpReturn = 'null'\n const spec: string[] = []\n if (fpParams.length > 0) spec.push(`params: { ${fpParams.join(', ')} }`)\n if (fpReturn !== 'undefined') spec.push(`returns: ${fpReturn}`)\n return `FunctionPredicate('function', { ${spec.join(', ')} })`\n }\n\n case ts.SyntaxKind.TupleType: {\n const tupleType = type as ts.TupleTypeNode\n const elements = tupleType.elements.map((e) => {\n const example = ts.isNamedTupleMember(e)\n ? typeToExample(e.type, checker)\n : typeToExample(e as ts.TypeNode, checker)\n // 'any' is not a valid literal value\n return example === 'any' ? 'null' : example\n })\n return `[${elements.join(', ')}]`\n }\n\n default:\n return 'undefined'\n }\n}\n\n/**\n * Convert TypeScript type to TypeInfo for metadata\n */\nfunction typeToInfo(\n type: ts.TypeNode | undefined,\n ctx?: TypeResolutionContext\n): TypeInfo {\n if (!type) return { kind: 'any' }\n\n switch (type.kind) {\n case ts.SyntaxKind.StringKeyword:\n return { kind: 'string' }\n case ts.SyntaxKind.NumberKeyword:\n return { kind: 'number' }\n case ts.SyntaxKind.BooleanKeyword:\n return { kind: 'boolean' }\n case ts.SyntaxKind.NullKeyword:\n return { kind: 'null' }\n case ts.SyntaxKind.UndefinedKeyword:\n case ts.SyntaxKind.VoidKeyword:\n return { kind: 'undefined' }\n\n case ts.SyntaxKind.ArrayType: {\n const arrayType = type as ts.ArrayTypeNode\n return { kind: 'array', items: typeToInfo(arrayType.elementType, ctx) }\n }\n\n case ts.SyntaxKind.TypeLiteral: {\n const typeLiteral = type as ts.TypeLiteralNode\n const shape: Record<string, TypeInfo> = {}\n for (const member of typeLiteral.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText()\n shape[propName] = typeToInfo(member.type, ctx)\n }\n }\n return { kind: 'object', shape }\n }\n\n case ts.SyntaxKind.UnionType: {\n const unionType = type as ts.UnionTypeNode\n const nonNullTypes = unionType.types.filter(\n (t) =>\n t.kind !== ts.SyntaxKind.NullKeyword &&\n t.kind !== ts.SyntaxKind.UndefinedKeyword\n )\n const hasNull = unionType.types.some(\n (t) => t.kind === ts.SyntaxKind.NullKeyword\n )\n\n if (nonNullTypes.length === 1 && hasNull) {\n return { ...typeToInfo(nonNullTypes[0], ctx), nullable: true }\n }\n\n return {\n kind: 'union',\n members: unionType.types.map((t) => typeToInfo(t, ctx)),\n }\n }\n\n case ts.SyntaxKind.IntersectionType: {\n const intersectionType = type as ts.IntersectionTypeNode\n // Flatten intersection into merged object shape\n const mergedShape: Record<string, TypeInfo> = {}\n for (const member of intersectionType.types) {\n const memberInfo = typeToInfo(member, ctx)\n if (memberInfo.kind === 'object' && memberInfo.shape) {\n Object.assign(mergedShape, memberInfo.shape)\n }\n }\n if (Object.keys(mergedShape).length > 0) {\n return { kind: 'object', shape: mergedShape }\n }\n // If no object shapes found, treat as any\n return { kind: 'any' }\n }\n\n case ts.SyntaxKind.TupleType: {\n const tupleType = type as ts.TupleTypeNode\n const elements: TypeInfo[] = []\n for (const element of tupleType.elements) {\n // Handle named tuple members: [x: number, y: string]\n if (ts.isNamedTupleMember(element)) {\n elements.push(typeToInfo(element.type, ctx))\n } else {\n elements.push(typeToInfo(element as ts.TypeNode, ctx))\n }\n }\n return { kind: 'tuple', elements }\n }\n\n case ts.SyntaxKind.TypeReference: {\n const typeRef = type as ts.TypeReferenceNode\n const typeName = typeRef.typeName.getText()\n if (typeName === 'Array' && typeRef.typeArguments?.length) {\n return {\n kind: 'array',\n items: typeToInfo(typeRef.typeArguments[0], ctx),\n }\n }\n if (typeName === 'Promise' && typeRef.typeArguments?.length) {\n return typeToInfo(typeRef.typeArguments[0], ctx)\n }\n if (\n (typeName === 'Generator' ||\n typeName === 'AsyncGenerator' ||\n typeName === 'IterableIterator' ||\n typeName === 'AsyncIterableIterator') &&\n typeRef.typeArguments?.length\n ) {\n return typeToInfo(typeRef.typeArguments[0], ctx)\n }\n\n // Handle utility types\n if (typeRef.typeArguments?.length) {\n const innerType = typeToInfo(typeRef.typeArguments[0], ctx)\n\n // Partial<T> - all properties become optional (we just return the shape)\n if (typeName === 'Partial') {\n return innerType\n }\n\n // Required<T> - all properties become required (we just return the shape)\n if (typeName === 'Required') {\n return innerType\n }\n\n // Readonly<T> - same shape, readonly is a compile-time concept\n if (typeName === 'Readonly') {\n return innerType\n }\n\n // Record<K, V> - object with string keys and V values\n if (typeName === 'Record' && typeRef.typeArguments.length >= 2) {\n const valueType = typeToInfo(typeRef.typeArguments[1], ctx)\n // Record is essentially an object with dynamic keys\n return { kind: 'object', shape: { '[key]': valueType } }\n }\n\n // Pick<T, K> and Omit<T, K> - just return the base type for now\n // Full implementation would need to filter properties\n if (typeName === 'Pick' || typeName === 'Omit') {\n return innerType\n }\n\n // NonNullable<T> - remove null/undefined\n if (typeName === 'NonNullable') {\n if (innerType.nullable) {\n return { ...innerType, nullable: false }\n }\n return innerType\n }\n\n // ReturnType<T>, Parameters<T>, etc. - complex, return any\n if (\n ['ReturnType', 'Parameters', 'ConstructorParameters'].includes(\n typeName\n )\n ) {\n return { kind: 'any' }\n }\n }\n\n // Resolve type aliases\n if (ctx?.typeAliases?.has(typeName)) {\n const visited = ctx.visited ?? new Set<string>()\n if (visited.has(typeName)) {\n return { kind: 'any' } // Circular reference\n }\n visited.add(typeName)\n const resolvedType = ctx.typeAliases.get(typeName)!\n return typeToInfo(resolvedType, { ...ctx, visited })\n }\n\n // Resolve interfaces\n if (ctx?.interfaces?.has(typeName)) {\n const visited = ctx.visited ?? new Set<string>()\n if (visited.has(typeName)) {\n return { kind: 'any' } // Circular reference\n }\n visited.add(typeName)\n const iface = ctx.interfaces.get(typeName)!\n const shape: Record<string, TypeInfo> = {}\n\n // Handle extends clauses - merge in base interface properties\n if (iface.heritageClauses) {\n for (const clause of iface.heritageClauses) {\n if (clause.token === ts.SyntaxKind.ExtendsKeyword) {\n for (const baseType of clause.types) {\n const baseName = baseType.expression.getText(ctx.sourceFile)\n // Look up the base interface and recursively resolve it\n if (ctx.interfaces?.has(baseName) && !visited.has(baseName)) {\n // Create a synthetic type reference node to look up the base\n const syntheticRef = {\n kind: ts.SyntaxKind.TypeReference,\n typeName: { getText: () => baseName },\n } as unknown as ts.TypeReferenceNode\n const baseInfo = typeToInfo(syntheticRef, { ...ctx, visited })\n if (baseInfo.kind === 'object' && baseInfo.shape) {\n Object.assign(shape, baseInfo.shape)\n }\n }\n }\n }\n }\n }\n\n // Add own members (may override base)\n for (const member of iface.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText(ctx.sourceFile)\n shape[propName] = typeToInfo(member.type, { ...ctx, visited })\n }\n }\n return { kind: 'object', shape }\n }\n\n // Check type parameter constraints/defaults from enclosing context\n if (ctx?.typeParams?.has(typeName)) {\n const tp = ctx.typeParams.get(typeName)!\n if (tp.constraint) {\n return typeToInfo(tp.constraint, ctx)\n }\n if (tp.default) {\n return typeToInfo(tp.default, ctx)\n }\n }\n\n // DOM interface types — opaque objects\n if (domInterfaceTypes.has(typeName)) {\n return { kind: 'object' }\n }\n\n // Generics and unknown types become 'any'\n return { kind: 'any' }\n }\n\n default:\n return { kind: 'any' }\n }\n}\n\n/**\n * Extract type parameter info (generics) from a function\n */\nfunction extractTypeParams(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression,\n warnings?: string[]\n): Record<string, TypeParamInfo> | undefined {\n if (!node.typeParameters || node.typeParameters.length === 0) {\n return undefined\n }\n\n const typeParams: Record<string, TypeParamInfo> = {}\n\n for (const param of node.typeParameters) {\n const name = param.name.getText()\n const info: TypeParamInfo = {}\n\n // Extract constraint: T extends Foo\n if (param.constraint) {\n const constraintExample = typeToExample(\n param.constraint,\n undefined,\n warnings\n )\n // Try to parse as object/value for richer schema\n if (constraintExample.startsWith('{')) {\n try {\n // This is a rough parse - in production we'd use proper AST\n info.constraint = constraintExample\n } catch {\n info.constraint = constraintExample\n }\n } else {\n info.constraint = constraintExample\n }\n }\n\n // Extract default: T = Foo\n if (param.default) {\n const defaultExample = typeToExample(param.default, undefined, warnings)\n info.default = defaultExample\n }\n\n typeParams[name] = info\n }\n\n return Object.keys(typeParams).length > 0 ? typeParams : undefined\n}\n\n/**\n * Transform a TypeScript function to TJS syntax\n */\n/**\n * Transform a TypeScript interface to TJS Type declaration\n *\n * interface User { name: string; age: number }\n * ->\n * Type User { example: { name: '', age: 0 } }\n */\nfunction transformInterfaceToType(\n node: ts.InterfaceDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n annotations?: TjsAnnotation[]\n): string | null {\n const typeName = node.name.getText(sourceFile)\n\n // Check for generics\n if (node.typeParameters && node.typeParameters.length > 0) {\n return transformGenericInterfaceToGeneric(\n node,\n sourceFile,\n warnings,\n annotations\n )\n }\n\n // Use @tjs example if provided, otherwise build from members\n const exampleAnnotation = annotations?.find((a) => a.kind === 'example')\n const predicateAnnotation = annotations?.find((a) => a.kind === 'predicate')\n\n let example: string\n if (exampleAnnotation?.text) {\n example = exampleAnnotation.text\n } else {\n const props: string[] = []\n for (const member of node.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText(sourceFile)\n let propExample = typeToExample(member.type, undefined, warnings)\n if (propExample === 'any') propExample = 'null'\n props.push(`${propName}: ${propExample}`)\n }\n }\n if (props.length === 0 && !predicateAnnotation) {\n return `Type ${typeName} {}`\n }\n example = props.length > 0 ? `{ ${props.join(', ')} }` : '{}'\n }\n\n const parts = [`example: ${example}`]\n if (predicateAnnotation?.text) {\n parts.push(predicateAnnotation.text)\n }\n\n return `Type ${typeName} {\\n ${parts.join('\\n ')}\\n}`\n}\n\n/**\n * Transform a generic TypeScript interface to TJS Generic declaration\n *\n * interface Box<T> { value: T }\n * ->\n * Generic Box<T> {\n * description: 'Box'\n * predicate(x, T) { return typeof x === 'object' && x !== null && 'value' in x && T(x.value) }\n * }\n */\nfunction transformGenericInterfaceToGeneric(\n node: ts.InterfaceDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n annotations?: TjsAnnotation[]\n): string {\n const typeName = node.name.getText(sourceFile)\n const typeParams: string[] = []\n\n // Extract type parameters with constraints/defaults\n for (const param of node.typeParameters || []) {\n const paramName = param.name.getText(sourceFile)\n if (param.default) {\n const defaultExample = typeToExample(param.default, undefined, warnings)\n typeParams.push(`${paramName} = ${defaultExample}`)\n } else {\n typeParams.push(paramName)\n }\n }\n\n // Use @tjs predicate if provided, otherwise auto-generate\n const predicateAnnotation = annotations?.find((a) => a.kind === 'predicate')\n const declarationAnnotation = annotations?.find(\n (a) => a.kind === 'declaration'\n )\n\n let predicateLine: string\n if (predicateAnnotation?.text) {\n predicateLine = predicateAnnotation.text\n } else {\n // Build predicate checks from interface members\n const typeParamNames = (node.typeParameters || []).map((p) =>\n p.name.getText(sourceFile)\n )\n const checks: string[] = [\"typeof x === 'object'\", 'x !== null']\n\n for (const member of node.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText(sourceFile)\n const isComputed = propName.startsWith('[') && propName.endsWith(']')\n const symbolName = isComputed ? propName.slice(1, -1) : null\n\n if (isComputed) {\n checks.push(`${symbolName} in x`)\n } else {\n checks.push(`'${propName}' in x`)\n }\n\n if (member.type && ts.isTypeReferenceNode(member.type)) {\n const refName = member.type.typeName.getText(sourceFile)\n if (typeParamNames.includes(refName)) {\n if (isComputed) {\n checks.push(`${refName}(x[${symbolName}])`)\n } else {\n checks.push(`${refName}(x.${propName})`)\n }\n }\n }\n }\n }\n\n const predicateParams = ['x', ...typeParamNames].join(', ')\n predicateLine = `predicate(${predicateParams}) { return ${checks.join(\n ' && '\n )} }`\n }\n\n const parts = [`description: '${typeName}'`, predicateLine]\n if (declarationAnnotation?.text) {\n parts.push(`declaration ${declarationAnnotation.text}`)\n }\n\n return `Generic ${typeName}<${typeParams.join(', ')}> {\\n ${parts.join(\n '\\n '\n )}\\n}`\n}\n\n/**\n * Check if a TypeScript union type is a literal union (e.g., 'up' | 'down' | 'left')\n * Returns the literal values if it is, null otherwise\n */\nfunction extractLiteralUnionValues(\n type: ts.TypeNode,\n _sourceFile: ts.SourceFile\n): string[] | null {\n if (!ts.isUnionTypeNode(type)) return null\n\n const values: string[] = []\n for (const member of type.types) {\n if (ts.isLiteralTypeNode(member)) {\n if (ts.isStringLiteral(member.literal)) {\n values.push(`'${member.literal.text}'`)\n } else if (ts.isNumericLiteral(member.literal)) {\n values.push(member.literal.text)\n } else if (member.literal.kind === ts.SyntaxKind.TrueKeyword) {\n values.push('true')\n } else if (member.literal.kind === ts.SyntaxKind.FalseKeyword) {\n values.push('false')\n } else if (member.literal.kind === ts.SyntaxKind.NullKeyword) {\n values.push('null')\n } else {\n // Not a literal we can handle\n return null\n }\n } else if (member.kind === ts.SyntaxKind.NullKeyword) {\n values.push('null')\n } else if (member.kind === ts.SyntaxKind.UndefinedKeyword) {\n values.push('undefined')\n } else {\n // Not a literal union (has complex types)\n return null\n }\n }\n\n return values.length > 0 ? values : null\n}\n\n/**\n * Transform a TypeScript enum to TJS Enum declaration\n *\n * enum Status { Pending, Active, Done }\n * ->\n * Enum Status 'Status' {\n * Pending\n * Active\n * Done\n * }\n *\n * enum Color { Red = 'red', Green = 'green', Blue = 'blue' }\n * ->\n * Enum Color 'Color' {\n * Red = 'red'\n * Green = 'green'\n * Blue = 'blue'\n * }\n */\nfunction transformEnumToTJS(\n node: ts.EnumDeclaration,\n sourceFile: ts.SourceFile,\n _warnings?: string[]\n): string | null {\n const enumName = node.name.getText(sourceFile)\n const members: string[] = []\n\n let nextValue = 0\n for (const member of node.members) {\n const memberName = member.name.getText(sourceFile)\n\n if (member.initializer) {\n // Has explicit value\n if (ts.isStringLiteral(member.initializer)) {\n members.push(` ${memberName} = '${member.initializer.text}'`)\n } else if (ts.isNumericLiteral(member.initializer)) {\n const numValue = parseInt(member.initializer.text, 10)\n members.push(` ${memberName} = ${numValue}`)\n nextValue = numValue + 1\n } else if (\n ts.isPrefixUnaryExpression(member.initializer) &&\n member.initializer.operator === ts.SyntaxKind.MinusToken\n ) {\n // Negative number\n const operand = member.initializer.operand\n if (ts.isNumericLiteral(operand)) {\n const numValue = -parseInt(operand.text, 10)\n members.push(` ${memberName} = ${numValue}`)\n nextValue = numValue + 1\n }\n } else {\n // Expression or other complex initializer - use the text directly\n members.push(\n ` ${memberName} = ${member.initializer.getText(sourceFile)}`\n )\n }\n } else {\n // Auto-increment numeric value\n members.push(` ${memberName} = ${nextValue}`)\n nextValue++\n }\n }\n\n return `Enum ${enumName} '${enumName}' {\n${members.join('\\n')}\n}`\n}\n\n/**\n * Transform a TypeScript type alias to TJS Type declaration\n *\n * type User = { name: string; age: number }\n * ->\n * Type User { example: { name: '', age: 0 } }\n *\n * type Direction = 'up' | 'down' | 'left' | 'right'\n * ->\n * Union Direction 'Direction' 'up' | 'down' | 'left' | 'right'\n */\nfunction transformTypeAliasToType(\n node: ts.TypeAliasDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n annotations?: TjsAnnotation[]\n): string | null {\n const typeName = node.name.getText(sourceFile)\n\n // Check for generics\n if (node.typeParameters && node.typeParameters.length > 0) {\n // Generic function types → generic FunctionPredicate\n if (node.type.kind === ts.SyntaxKind.FunctionType) {\n return transformGenericFunctionTypeToFP(node, sourceFile, warnings)\n }\n return transformGenericTypeAliasToGeneric(\n node,\n sourceFile,\n warnings,\n annotations\n )\n }\n\n // Check for literal union type → emit Union syntax\n const literalValues = extractLiteralUnionValues(node.type, sourceFile)\n if (literalValues) {\n return `Union ${typeName} '${typeName}' ${literalValues.join(' | ')}`\n }\n\n // Function types → FunctionPredicate declaration\n if (node.type.kind === ts.SyntaxKind.FunctionType) {\n const funcType = node.type as ts.FunctionTypeNode\n const fpParams: string[] = []\n for (const param of funcType.parameters) {\n const name = param.name?.getText(sourceFile) || '_'\n if (name === 'this') continue\n let paramExample = typeToExample(param.type, undefined, warnings)\n if (paramExample === 'any') paramExample = 'null'\n fpParams.push(`${name}: ${paramExample}`)\n }\n let fpReturn = typeToExample(funcType.type, undefined, warnings)\n if (fpReturn === 'any') fpReturn = 'null'\n const spec: string[] = []\n if (fpParams.length > 0) spec.push(`params: { ${fpParams.join(', ')} }`)\n if (fpReturn !== 'undefined') spec.push(`returns: ${fpReturn}`)\n return `FunctionPredicate ${typeName} {\\n ${spec.join('\\n ')}\\n}`\n }\n\n const example = typeToExample(node.type, undefined, warnings)\n\n // 'any' and 'undefined' — skip declaration (undeclared = any in TJS)\n if (example === 'any' || example === 'undefined') {\n return `Type ${typeName} {}`\n }\n\n // For simple primitive types, use short form\n if (\n example === \"''\" ||\n example === '0' ||\n example === 'true' ||\n example === 'null'\n ) {\n return `Type ${typeName} ${example}`\n }\n\n return `Type ${typeName} {\n example: ${example}\n}`\n}\n\n/**\n * Transform a generic function type alias to a generic FunctionPredicate declaration.\n * e.g. `type Creator<T> = (x: string) => T` → `FunctionPredicate Creator<T> { params: { x: '' } returns: T }`\n */\nfunction transformGenericFunctionTypeToFP(\n node: ts.TypeAliasDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[]\n): string {\n const typeName = node.name.getText(sourceFile)\n const funcType = node.type as ts.FunctionTypeNode\n\n // Build type params string: <T, U = {}>\n const typeParamNames = new Set<string>()\n const typeParams: string[] = []\n for (const tp of node.typeParameters!) {\n const name = tp.name.getText(sourceFile)\n typeParamNames.add(name)\n if (tp.default) {\n const defaultExample = typeToExample(tp.default, undefined, warnings)\n typeParams.push(`${name} = ${defaultExample}`)\n } else {\n typeParams.push(name)\n }\n }\n\n // Build params — preserve type param references as bare identifiers\n const fpParams: string[] = []\n for (const param of funcType.parameters) {\n const name = param.name?.getText(sourceFile) || '_'\n if (name === 'this') continue\n const paramTypeText = param.type?.getText(sourceFile) || 'any'\n if (typeParamNames.has(paramTypeText)) {\n // Type param reference — keep as-is\n fpParams.push(`${name}: ${paramTypeText}`)\n } else {\n let paramExample = typeToExample(param.type, undefined, warnings)\n if (paramExample === 'any') paramExample = 'null'\n fpParams.push(`${name}: ${paramExample}`)\n }\n }\n\n // Build return type — preserve type param references\n const returnTypeText = funcType.type?.getText(sourceFile) || 'void'\n let fpReturn: string | undefined\n if (returnTypeText !== 'void') {\n if (typeParamNames.has(returnTypeText)) {\n fpReturn = returnTypeText\n } else {\n fpReturn = typeToExample(funcType.type, undefined, warnings)\n if (fpReturn === 'any') fpReturn = 'null'\n if (fpReturn === 'undefined') fpReturn = undefined\n }\n }\n\n const spec: string[] = []\n if (fpParams.length > 0) spec.push(`params: { ${fpParams.join(', ')} }`)\n if (fpReturn !== undefined) spec.push(`returns: ${fpReturn}`)\n return `FunctionPredicate ${typeName}<${typeParams.join(\n ', '\n )}> {\\n ${spec.join('\\n ')}\\n}`\n}\n\n/**\n * Transform a generic type alias to TJS Generic declaration\n */\nfunction transformGenericTypeAliasToGeneric(\n node: ts.TypeAliasDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n annotations?: TjsAnnotation[]\n): string {\n const typeName = node.name.getText(sourceFile)\n const typeParams: string[] = []\n\n // Extract type parameters\n for (const param of node.typeParameters || []) {\n const paramName = param.name.getText(sourceFile)\n if (param.default) {\n const defaultExample = typeToExample(param.default, undefined, warnings)\n typeParams.push(`${paramName} = ${defaultExample}`)\n } else {\n typeParams.push(paramName)\n }\n }\n\n const typeParamNames = (node.typeParameters || []).map((p) =>\n p.name.getText(sourceFile)\n )\n\n // Use @tjs predicate if provided, otherwise default placeholder\n const predicateAnnotation = annotations?.find((a) => a.kind === 'predicate')\n const declarationAnnotation = annotations?.find(\n (a) => a.kind === 'declaration'\n )\n\n let predicateLine: string\n if (predicateAnnotation?.text) {\n predicateLine = predicateAnnotation.text\n } else {\n const predicateParams = ['x', ...typeParamNames].join(', ')\n predicateLine = `predicate(${predicateParams}) { return true }`\n }\n\n // Include original TS source as a block comment for manual enhancement\n const originalSource = node.getText(sourceFile).trim()\n const comment = `/* Original TS:\\n${originalSource}\\n*/`\n\n const parts = [`description: '${typeName}'`, predicateLine]\n if (declarationAnnotation?.text) {\n parts.push(`declaration ${declarationAnnotation.text}`)\n }\n\n return `${comment}\\nGeneric ${typeName}<${typeParams.join(\n ', '\n )}> {\\n ${parts.join('\\n ')}\\n}`\n}\n\nfunction transformFunctionToTJS(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression,\n sourceFile: ts.SourceFile,\n explicitName?: string,\n warnings?: string[],\n includeLineNumber?: boolean,\n ctx?: TypeResolutionContext\n): string {\n // Build type parameter map from generic params (constraint/default)\n let typeParamMap:\n | Map<string, { constraint?: ts.TypeNode; default?: ts.TypeNode }>\n | undefined\n if (node.typeParameters && node.typeParameters.length > 0) {\n typeParamMap = new Map()\n for (const tp of node.typeParameters) {\n typeParamMap.set(tp.name.getText(sourceFile), {\n constraint: tp.constraint,\n default: tp.default,\n })\n }\n }\n\n // Merge type params into ctx for resolution in typeToExample\n const resolveCtx: TypeResolutionContext | undefined =\n typeParamMap || ctx\n ? { ...ctx, typeParams: typeParamMap ?? ctx?.typeParams }\n : ctx\n\n const degraded: string[] = []\n const params = transformParams(\n node.parameters,\n sourceFile,\n warnings,\n degraded,\n resolveCtx\n )\n\n // Get line number (1-indexed) for source mapping\n const { line } = sourceFile.getLineAndCharacterOfPosition(\n node.getStart(sourceFile)\n )\n const lineComment = includeLineNumber ? `/* line ${line + 1} */\\n` : ''\n\n const funcName =\n explicitName ||\n (ts.isFunctionDeclaration(node) && node.name\n ? node.name.getText(sourceFile)\n : '')\n const returnExample = node.type\n ? typeToExample(node.type, undefined, warnings, resolveCtx)\n : ''\n // Use -! to skip signature tests - TS types are compile-time only,\n // the example values won't necessarily match runtime behavior\n const returnAnnotation =\n returnExample &&\n returnExample !== 'undefined' &&\n returnExample !== 'any' &&\n !returnExample.startsWith('new ') // new Set(), new Map() etc. aren't valid TJS literals\n ? ` -! ${returnExample}`\n : ''\n\n // Track degraded return type\n if (node.type && (returnExample === 'any' || returnExample === 'undefined')) {\n const originalReturn = node.type.getText(sourceFile)\n if (\n originalReturn !== 'any' &&\n originalReturn !== 'unknown' &&\n originalReturn !== 'void'\n ) {\n degraded.push(`return: ${originalReturn}`)\n }\n }\n\n // Get function body and strip TypeScript syntax using ts.transpileModule\n let body = ''\n if (node.body) {\n const bodyText = ts.isBlock(node.body)\n ? node.body.getText(sourceFile)\n : `{ return ${node.body.getText(sourceFile)} }`\n\n // Use TypeScript's transpiler to strip all type syntax\n const transpiled = ts.transpileModule(bodyText, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n body = transpiled.outputText.trim()\n } else {\n body = '{ }'\n }\n\n // Check for export, async, and generator modifiers\n const isExported = node.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n const isAsync = node.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.AsyncKeyword\n )\n const isGenerator = !!(node as ts.FunctionDeclaration).asteriskToken\n const exportPrefix = isExported ? 'export ' : ''\n const asyncPrefix = isAsync ? 'async ' : ''\n const funcKeyword = isGenerator ? 'function* ' : 'function '\n\n // Emit migration comment if any types were degraded\n const degradedComment =\n degraded.length > 0\n ? `/* TODO: TS types degraded — ${degraded.join(', ')} */\\n`\n : ''\n\n return `${lineComment}${degradedComment}${exportPrefix}${asyncPrefix}${funcKeyword}${funcName}(${params.join(\n ', '\n )})${returnAnnotation} ${body}`\n}\n\n/**\n * Emit a full TJS overload group: the implementation (renamed) + wrapper signatures.\n * Each overload signature becomes a TJS function that delegates to the implementation.\n * TJS polymorphic dispatch merges the wrappers into a dispatcher automatically.\n */\nfunction emitOverloadGroup(\n signatures: ts.FunctionDeclaration[],\n implementation: ts.FunctionDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[]\n): string[] {\n const funcName = implementation.name?.getText(sourceFile) || ''\n const implName = `_${funcName}_impl`\n const results: string[] = []\n\n // Emit the implementation as a renamed private function\n const implParams = transformParams(\n implementation.parameters,\n sourceFile,\n warnings\n )\n let implBody = '{ }'\n if (implementation.body) {\n const bodyText = implementation.body.getText(sourceFile)\n const transpiled = ts.transpileModule(bodyText, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n implBody = transpiled.outputText.trim()\n }\n const isAsync = implementation.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.AsyncKeyword\n )\n const isGenerator = !!implementation.asteriskToken\n const asyncPrefix = isAsync ? 'async ' : ''\n const funcKeyword = isGenerator ? 'function* ' : 'function '\n\n results.push(\n `${asyncPrefix}${funcKeyword}${implName}(${implParams.join(\n ', '\n )}) ${implBody}`\n )\n\n // Emit each overload signature as a wrapper that delegates to the implementation\n for (const sig of signatures) {\n const params = transformParams(sig.parameters, sourceFile, warnings)\n const paramNames = sig.parameters.map((p) => p.name.getText(sourceFile))\n const returnExample = sig.type\n ? typeToExample(sig.type, undefined, warnings)\n : ''\n const returnAnnotation =\n returnExample && returnExample !== 'undefined' && returnExample !== 'any'\n ? ` -! ${returnExample}`\n : ''\n\n const { line } = sourceFile.getLineAndCharacterOfPosition(\n sig.getStart(sourceFile)\n )\n const lineComment = `/* line ${line + 1} */\\n`\n const returnKw = isGenerator ? 'yield* ' : 'return '\n\n results.push(\n `${lineComment}${asyncPrefix}${funcKeyword}${funcName}(${params.join(\n ', '\n )})${returnAnnotation} { ${returnKw}${implName}(${paramNames.join(\n ', '\n )}) }`\n )\n }\n\n return results\n}\n\n/**\n * Transform TypeScript class to TJS class\n * Converts TS type annotations to TJS example-based annotations\n */\nfunction transformClassToTJS(\n node: ts.ClassDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n ctx?: TypeResolutionContext,\n convertPrivateToHash = false\n): string {\n // Build type parameter map from class-level generics\n let resolveCtx = ctx\n if (node.typeParameters && node.typeParameters.length > 0) {\n const typeParamMap = new Map<\n string,\n { constraint?: ts.TypeNode; default?: ts.TypeNode }\n >()\n for (const tp of node.typeParameters) {\n typeParamMap.set(tp.name.getText(sourceFile), {\n constraint: tp.constraint,\n default: tp.default,\n })\n }\n resolveCtx = { ...ctx, typeParams: typeParamMap }\n }\n\n const className = node.name?.getText(sourceFile) || 'Anonymous'\n // Get base class name, stripping type arguments (e.g. Component<T> → Component)\n const extendsType = node.heritageClauses?.find(\n (h) => h.token === ts.SyntaxKind.ExtendsKeyword\n )?.types[0]\n const extendsClause = extendsType?.expression?.getText(sourceFile)\n\n // With TjsClass: convert TS private to JS # (true runtime privacy).\n // Without TjsClass: strip the keyword, keep the name (TS private is compile-time only).\n const privateFieldMap = new Map<string, string>()\n if (convertPrivateToHash) {\n for (const member of node.members) {\n if (ts.isPropertyDeclaration(member) && member.name) {\n const propName = member.name.getText(sourceFile)\n const isPrivate = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.PrivateKeyword\n )\n if (isPrivate && !propName.startsWith('#')) {\n privateFieldMap.set(propName, `#${propName}`)\n }\n }\n }\n }\n\n // Helper to replace private field references in transpiled code\n // Handles: this.prop, ClassName.prop (static), varName.prop (instance via variable)\n const replacePrivateRefs = (code: string): string => {\n let result = code\n for (const [tsName, jsName] of privateFieldMap) {\n // Match property access on any identifier: word.propName or this.propName\n // This covers this.prop, ClassName.prop, and varName.prop\n result = result.replace(\n new RegExp(`(\\\\b\\\\w+)\\\\.${tsName}\\\\b`, 'g'),\n `$1.${jsName}`\n )\n }\n return result\n }\n\n const members: string[] = []\n\n for (const member of node.members) {\n // Constructor\n if (ts.isConstructorDeclaration(member)) {\n const params = transformParams(member.parameters, sourceFile, warnings)\n let body = '{ }'\n if (member.body) {\n const transpiled = ts.transpileModule(member.body.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n body = replacePrivateRefs(transpiled.outputText.trim())\n }\n members.push(` constructor(${params.join(', ')}) ${body}`)\n }\n\n // Regular methods\n if (ts.isMethodDeclaration(member) && member.name) {\n const methodName = member.name.getText(sourceFile)\n const isStatic = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.StaticKeyword\n )\n const isAsync = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.AsyncKeyword\n )\n\n const params = transformParams(\n member.parameters,\n sourceFile,\n warnings,\n undefined,\n resolveCtx\n )\n const returnExample = member.type\n ? typeToExample(member.type, undefined, warnings, resolveCtx)\n : ''\n // Use -! to skip signature tests for TS-transpiled code\n const returnAnnotation =\n returnExample &&\n returnExample !== 'undefined' &&\n returnExample !== 'any'\n ? ` -! ${returnExample}`\n : ''\n\n let body = '{ }'\n if (member.body) {\n const transpiled = ts.transpileModule(member.body.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n body = replacePrivateRefs(transpiled.outputText.trim())\n }\n\n const isGenerator = !!member.asteriskToken\n const staticPrefix = isStatic ? 'static ' : ''\n const asyncPrefix = isAsync ? 'async ' : ''\n const generatorStar = isGenerator ? '*' : ''\n members.push(\n ` ${staticPrefix}${asyncPrefix}${generatorStar}${methodName}(${params.join(\n ', '\n )})${returnAnnotation} ${body}`\n )\n }\n\n // Getters\n if (ts.isGetAccessorDeclaration(member) && member.name) {\n const propName = member.name.getText(sourceFile)\n const returnExample = member.type\n ? typeToExample(member.type, undefined, warnings, resolveCtx)\n : ''\n const returnAnnotation =\n returnExample &&\n returnExample !== 'undefined' &&\n returnExample !== 'any' &&\n !returnExample.startsWith('new ')\n ? ` -> ${returnExample}`\n : ''\n\n let body = '{ }'\n if (member.body) {\n const transpiled = ts.transpileModule(member.body.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n body = replacePrivateRefs(transpiled.outputText.trim())\n }\n\n members.push(` get ${propName}()${returnAnnotation} ${body}`)\n }\n\n // Setters\n if (ts.isSetAccessorDeclaration(member) && member.name) {\n const propName = member.name.getText(sourceFile)\n const params = transformParams(member.parameters, sourceFile, warnings)\n\n let body = '{ }'\n if (member.body) {\n const transpiled = ts.transpileModule(member.body.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n body = replacePrivateRefs(transpiled.outputText.trim())\n }\n\n members.push(` set ${propName}(${params.join(', ')}) ${body}`)\n }\n\n // Properties with initializers (private fields, regular properties)\n if (ts.isPropertyDeclaration(member) && member.name) {\n const origName = member.name.getText(sourceFile)\n const isStatic = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.StaticKeyword\n )\n const staticPrefix = isStatic ? 'static ' : ''\n\n // Use mapped name (# for private) or original\n const propName = privateFieldMap.get(origName) || origName\n\n if (member.initializer) {\n // Wrap in parens so TS treats { ... } as an object expression,\n // not a block with labels (which mangles property colons)\n const initText = member.initializer.getText(sourceFile)\n const wrapped = initText.trimStart().startsWith('{')\n ? `(${initText})`\n : initText\n const transpiled = ts.transpileModule(wrapped, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n let output = transpiled.outputText.trim()\n // Strip the wrapping parens and trailing semicolon\n if (wrapped !== initText) {\n output = output.replace(/^\\(/, '').replace(/\\);?\\s*$/, '')\n }\n members.push(` ${staticPrefix}${propName} = ${output}`)\n } else {\n // Property without initializer - just declare it\n members.push(` ${staticPrefix}${propName}`)\n }\n }\n }\n\n const isExported = node.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n const exportPrefix = isExported ? 'export ' : ''\n const extendsStr = extendsClause ? ` extends ${extendsClause}` : ''\n return `${exportPrefix}class ${className}${extendsStr} {\\n${members.join(\n '\\n'\n )}\\n}`\n}\n\n/**\n * Helper to transform parameters to TJS format\n */\nfunction transformParams(\n parameters: ts.NodeArray<ts.ParameterDeclaration>,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n degraded?: string[],\n ctx?: TypeResolutionContext\n): string[] {\n const params: string[] = []\n\n for (const param of parameters) {\n const name = param.name.getText(sourceFile)\n // Skip TypeScript's `this` pseudo-parameter (declares `this` context type)\n if (name === 'this') continue\n const isRest = !!param.dotDotDotToken\n const isOptional = !!param.questionToken || !!param.initializer\n const typeExample = typeToExample(param.type, undefined, warnings, ctx)\n\n if (isRest) {\n // Rest parameter: ...args: T[] → ...args: [example]\n // typeToExample already converts T[] to [example], so use directly\n if (typeExample === 'any' || typeExample === 'undefined') {\n params.push(`...${name}: [null]`)\n } else {\n params.push(`...${name}: ${typeExample}`)\n }\n } else if (param.initializer) {\n // Has default value - use it directly\n const defaultText = param.initializer.getText(sourceFile)\n params.push(`${name} = ${defaultText}`)\n } else if (typeExample === 'any' || typeExample === 'undefined') {\n // any/undefined type - no annotation in TJS (bare name means any)\n params.push(name)\n // Record original TS type for migration comments\n if (degraded && param.type) {\n const originalType = param.type.getText(sourceFile)\n if (originalType !== 'any' && originalType !== 'unknown') {\n degraded.push(`${name}: ${originalType}`)\n }\n }\n } else if (isOptional) {\n // Optional without default - use union with undefined to preserve\n // three-state semantics (e.g. TS `flag?: boolean` can be true/false/undefined)\n params.push(`${name}: ${typeExample} | undefined`)\n } else {\n // Required - use : for required\n params.push(`${name}: ${typeExample}`)\n }\n }\n\n return params\n}\n\n/**\n * Extract type metadata from a TypeScript function\n */\nfunction extractFunctionMetadata(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n ctx?: TypeResolutionContext\n): FunctionTypeInfo {\n // Build type parameter map from generic params\n let resolveCtx = ctx\n if (node.typeParameters && node.typeParameters.length > 0) {\n const typeParamMap = new Map<\n string,\n { constraint?: ts.TypeNode; default?: ts.TypeNode }\n >()\n for (const tp of node.typeParameters) {\n typeParamMap.set(tp.name.getText(sourceFile), {\n constraint: tp.constraint,\n default: tp.default,\n })\n }\n resolveCtx = { ...ctx, typeParams: typeParamMap }\n }\n\n const name =\n ts.isFunctionDeclaration(node) && node.name\n ? node.name.getText(sourceFile)\n : 'anonymous'\n const params: Record<string, ParamTypeInfo> = {}\n\n for (const param of node.parameters) {\n const paramName = param.name.getText(sourceFile)\n const isOptional = !!param.questionToken || !!param.initializer\n\n let defaultValue: any = undefined\n if (param.initializer) {\n // Try to extract literal default value\n const initText = param.initializer.getText(sourceFile)\n try {\n defaultValue = JSON.parse(initText)\n } catch {\n defaultValue = initText\n }\n }\n\n params[paramName] = {\n type: typeToInfo(param.type, resolveCtx),\n required: !isOptional,\n default: defaultValue,\n }\n }\n\n const result: FunctionTypeInfo = {\n name,\n params,\n returns: node.type ? typeToInfo(node.type, resolveCtx) : undefined,\n }\n\n // Extract generic type parameters\n const typeParams = extractTypeParams(node, warnings)\n if (typeParams) {\n result.typeParams = typeParams\n }\n\n return result\n}\n\n/**\n * Extract type metadata from a TypeScript class\n */\nfunction extractClassMetadata(\n node: ts.ClassDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n ctx?: TypeResolutionContext\n): ClassTypeInfo {\n // Build type parameter map from class-level generics\n let resolveCtx = ctx\n if (node.typeParameters && node.typeParameters.length > 0) {\n const typeParamMap = new Map<\n string,\n { constraint?: ts.TypeNode; default?: ts.TypeNode }\n >()\n for (const tp of node.typeParameters) {\n typeParamMap.set(tp.name.getText(sourceFile), {\n constraint: tp.constraint,\n default: tp.default,\n })\n }\n resolveCtx = { ...ctx, typeParams: typeParamMap }\n }\n\n const name = node.name?.getText(sourceFile) || 'anonymous'\n const methods: Record<string, FunctionTypeInfo> = {}\n const staticMethods: Record<string, FunctionTypeInfo> = {}\n let constructorInfo: { params: Record<string, ParamTypeInfo> } | undefined\n\n for (const member of node.members) {\n // Constructor\n if (ts.isConstructorDeclaration(member)) {\n const params: Record<string, ParamTypeInfo> = {}\n for (const param of member.parameters) {\n const paramName = param.name.getText(sourceFile)\n const isOptional = !!param.questionToken || !!param.initializer\n\n let defaultValue: any = undefined\n if (param.initializer) {\n const initText = param.initializer.getText(sourceFile)\n try {\n defaultValue = JSON.parse(initText)\n } catch {\n defaultValue = initText\n }\n }\n\n params[paramName] = {\n type: typeToInfo(param.type, resolveCtx),\n required: !isOptional,\n default: defaultValue,\n }\n }\n constructorInfo = { params }\n }\n\n // Methods (instance and static)\n if (ts.isMethodDeclaration(member) && member.name) {\n const methodName = member.name.getText(sourceFile)\n const isStatic = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.StaticKeyword\n )\n\n const params: Record<string, ParamTypeInfo> = {}\n for (const param of member.parameters) {\n const paramName = param.name.getText(sourceFile)\n const isOptional = !!param.questionToken || !!param.initializer\n\n let defaultValue: any = undefined\n if (param.initializer) {\n const initText = param.initializer.getText(sourceFile)\n try {\n defaultValue = JSON.parse(initText)\n } catch {\n defaultValue = initText\n }\n }\n\n params[paramName] = {\n type: typeToInfo(param.type, resolveCtx),\n required: !isOptional,\n default: defaultValue,\n }\n }\n\n const methodInfo: FunctionTypeInfo = {\n name: methodName,\n params,\n returns: member.type ? typeToInfo(member.type, resolveCtx) : undefined,\n }\n\n if (isStatic) {\n staticMethods[methodName] = methodInfo\n } else {\n methods[methodName] = methodInfo\n }\n }\n }\n\n const result: ClassTypeInfo = {\n name,\n methods,\n staticMethods,\n constructor: constructorInfo,\n }\n\n // Extract class-level generic type parameters\n if (node.typeParameters && node.typeParameters.length > 0) {\n const typeParams: Record<string, TypeParamInfo> = {}\n for (const param of node.typeParameters) {\n const paramName = param.name.getText(sourceFile)\n const info: TypeParamInfo = {}\n if (param.constraint) {\n info.constraint = typeToExample(\n param.constraint,\n undefined,\n warnings,\n ctx\n )\n }\n if (param.default) {\n info.default = typeToExample(param.default, undefined, warnings, ctx)\n }\n typeParams[paramName] = info\n }\n result.typeParams = typeParams\n }\n\n return result\n}\n\n/**\n * Transpile TypeScript source to TJS or JS + metadata\n */\n/**\n * Extract embedded test comments from source\n * These use syntax: /*test 'description' { ... }* / (without space before /)\n * They survive TS compilation and should be preserved in TJS output\n */\n// =============================================================================\n// @tjs annotations — enrich TJS output from TS source comments\n// =============================================================================\n\ninterface TjsAnnotation {\n index: number\n kind: 'predicate' | 'example' | 'skip' | 'declaration'\n text?: string // raw text for predicate/example/declaration\n}\n\n/** Valid TJS mode directives */\nconst VALID_TJS_MODES = new Set([\n 'TjsStrict',\n 'TjsEquals',\n 'TjsClass',\n 'TjsDate',\n 'TjsNoeval',\n 'TjsNoVar',\n 'TjsStandard',\n 'TjsSafeEval',\n])\n\n/**\n * Extract TJS mode directives from /* @tjs ... * / comments.\n * e.g. /* @tjs TjsClass TjsEquals * / → ['TjsClass', 'TjsEquals']\n */\nfunction extractTjsModes(source: string): string[] {\n const modes: string[] = []\n const re = /\\/\\*\\s*@tjs\\s+((?:Tjs\\w+\\s*)+)\\*\\//g\n let m\n while ((m = re.exec(source)) !== null) {\n const words = m[1].trim().split(/\\s+/)\n for (const word of words) {\n if (VALID_TJS_MODES.has(word) && !modes.includes(word)) {\n modes.push(word)\n }\n }\n }\n return modes\n}\n\n/**\n * Extract @tjs annotations from source comments.\n *\n * Supported forms:\n * /* @tjs-skip * /\n * /* @tjs example: { name: '', age: 0 } * /\n * /* @tjs predicate(x, T) { return typeof x === 'object' && T(x.value) } * /\n * /* @tjs declaration { value: T; path: string } * /\n */\nfunction extractTjsAnnotations(source: string): TjsAnnotation[] {\n const annotations: TjsAnnotation[] = []\n\n // @tjs-skip\n const skipRe = /\\/\\*\\s*@tjs-skip\\s*\\*\\//g\n let m\n while ((m = skipRe.exec(source)) !== null) {\n annotations.push({ index: m.index, kind: 'skip' })\n }\n\n // @tjs predicate(...) { ... }\n const predRe = /\\/\\*\\s*@tjs\\s+predicate(\\([^)]*\\)\\s*\\{[\\s\\S]*?\\})\\s*\\*\\//g\n while ((m = predRe.exec(source)) !== null) {\n annotations.push({\n index: m.index,\n kind: 'predicate',\n text: `predicate${m[1].trim()}`,\n })\n }\n\n // @tjs example: ...\n const exRe = /\\/\\*\\s*@tjs\\s+example:\\s*([\\s\\S]*?)\\s*\\*\\//g\n while ((m = exRe.exec(source)) !== null) {\n annotations.push({ index: m.index, kind: 'example', text: m[1].trim() })\n }\n\n // @tjs declaration { ... }\n const declRe = /\\/\\*\\s*@tjs\\s+declaration\\s*(\\{[\\s\\S]*?\\})\\s*\\*\\//g\n while ((m = declRe.exec(source)) !== null) {\n annotations.push({\n index: m.index,\n kind: 'declaration',\n text: m[1].trim(),\n })\n }\n\n return annotations.sort((a, b) => a.index - b.index)\n}\n\n/**\n * Build a map from declaration name → annotations that precede it.\n */\nfunction buildAnnotationMap(\n annotations: TjsAnnotation[],\n sourceFile: ts.SourceFile\n): Map<string, TjsAnnotation[]> {\n const result = new Map<string, TjsAnnotation[]>()\n if (annotations.length === 0) return result\n\n const statements = sourceFile.statements\n for (let si = 0; si < statements.length; si++) {\n const stmt = statements[si]\n let name: string | undefined\n\n if (ts.isInterfaceDeclaration(stmt)) {\n name = stmt.name.getText(sourceFile)\n } else if (ts.isTypeAliasDeclaration(stmt)) {\n name = stmt.name.getText(sourceFile)\n } else if (ts.isEnumDeclaration(stmt)) {\n name = stmt.name.getText(sourceFile)\n }\n\n if (!name) continue\n\n const stmtStart = stmt.getStart(sourceFile)\n const prevEnd = si > 0 ? statements[si - 1].getEnd() : 0\n\n const matching = annotations.filter(\n (a) => a.index >= prevEnd && a.index < stmtStart\n )\n if (matching.length > 0) {\n result.set(name, matching)\n }\n }\n\n return result\n}\n\nfunction extractEmbeddedTestComments(source: string): string[] {\n const tests: string[] = []\n // Match: /*test 'description' { ... }*/ or /*test { ... }*/\n const embeddedRegex =\n /\\/\\*test\\s+(['\"`])([^'\"`]*)\\1\\s*\\{[\\s\\S]*?\\}\\s*\\*\\/|\\/\\*test\\s*\\{[\\s\\S]*?\\}\\s*\\*\\//g\n\n let match\n while ((match = embeddedRegex.exec(source)) !== null) {\n tests.push(match[0])\n }\n return tests\n}\n\n/**\n * Extract top-level TJS doc comments (/*# ... *\\/) from source with position info.\n * These need to be preserved in TJS output in their original positions.\n * Comments inside function bodies are already preserved by the TS transpiler.\n */\nfunction extractDocComments(\n source: string\n): Array<{ content: string; index: number }> {\n const comments: Array<{ content: string; index: number }> = []\n const docRegex = /\\/\\*#[\\s\\S]*?\\*\\//g\n\n // Track brace depth to identify top-level comments\n let braceDepth = 0\n let inString: string | null = null\n\n // Scan source to find brace depths at each position\n const braceDepthAt: number[] = []\n for (let i = 0; i < source.length; i++) {\n const ch = source[i]\n const prev = i > 0 ? source[i - 1] : ''\n\n // Handle string literals\n if (!inString && (ch === '\"' || ch === \"'\" || ch === '`')) {\n inString = ch\n } else if (inString && ch === inString && prev !== '\\\\') {\n inString = null\n }\n\n // Track braces only outside strings\n if (!inString) {\n if (ch === '{') braceDepth++\n if (ch === '}') braceDepth--\n }\n\n braceDepthAt[i] = braceDepth\n }\n\n let match\n while ((match = docRegex.exec(source)) !== null) {\n // Only include comments at top level (brace depth 0)\n if (braceDepthAt[match.index] === 0) {\n comments.push({\n content: match[0],\n index: match.index,\n })\n }\n }\n return comments\n}\n\nexport function fromTS(\n source: string,\n options: FromTSOptions = {}\n): FromTSResult {\n const { emitTJS = false, filename = 'input.ts' } = options\n const warnings: string[] = []\n\n // Extract embedded test comments before TS parsing (they need to be preserved)\n const embeddedTests = extractEmbeddedTestComments(source)\n\n // Extract doc comments (/*# ... */) with position info for TJS output\n const docComments = emitTJS ? extractDocComments(source) : []\n\n // Extract @tjs annotations for enriching TJS output\n const tjsAnnotations = emitTJS ? extractTjsAnnotations(source) : []\n\n // Extract TJS mode directives from /* @tjs TjsClass ... */ comments\n const tjsModes = extractTjsModes(source)\n const hasTjsClass =\n tjsModes.includes('TjsClass') || tjsModes.includes('TjsStrict')\n\n // Parse TypeScript\n const sourceFile = ts.createSourceFile(\n filename,\n source,\n ts.ScriptTarget.Latest,\n true\n )\n\n // Build annotation map from @tjs comments\n const annotationMap = emitTJS\n ? buildAnnotationMap(tjsAnnotations, sourceFile)\n : new Map<string, TjsAnnotation[]>()\n\n const tjsFunctions: string[] = []\n const seenTypeNames = new Set<string>() // Track emitted type names to avoid duplicates\n const metadata: Record<string, FunctionTypeInfo> = {}\n const classMetadata: Record<string, ClassTypeInfo> = {}\n\n // Track which doc comments have been emitted (by index in docComments array)\n const emittedDocComments = new Set<number>()\n\n // Helper: emit any doc comments that appear before a given source position\n const emitDocCommentsBefore = (pos: number) => {\n for (let i = 0; i < docComments.length; i++) {\n const doc = docComments[i]\n if (!emittedDocComments.has(i) && doc.index < pos) {\n tjsFunctions.push(doc.content)\n emittedDocComments.add(i)\n }\n }\n }\n\n // Build type alias and interface maps first (first pass)\n const typeAliases = new Map<string, ts.TypeNode>()\n const interfaces = new Map<string, ts.InterfaceDeclaration>()\n\n function collectTypes(node: ts.Node) {\n if (ts.isTypeAliasDeclaration(node)) {\n typeAliases.set(node.name.getText(sourceFile), node.type)\n }\n if (ts.isInterfaceDeclaration(node)) {\n const name = node.name.getText(sourceFile)\n const existing = interfaces.get(name)\n if (existing) {\n // Merge members (TS interface merging)\n const merged = ts.factory.updateInterfaceDeclaration(\n existing,\n existing.modifiers,\n existing.name,\n existing.typeParameters,\n existing.heritageClauses,\n [...existing.members, ...node.members]\n )\n interfaces.set(name, merged)\n } else {\n interfaces.set(name, node)\n }\n }\n ts.forEachChild(node, collectTypes)\n }\n collectTypes(sourceFile)\n\n // Create resolution context\n const resolutionCtx: TypeResolutionContext = {\n typeAliases,\n interfaces,\n sourceFile,\n warnings,\n }\n\n // Pre-scan: detect function overload groups\n // In TS, overloads are N bodyless signatures + 1 implementation with body\n const overloadGroups = new Map<\n string,\n {\n signatures: ts.FunctionDeclaration[] // body === undefined\n implementation: ts.FunctionDeclaration | null // has body\n }\n >()\n for (const stmt of sourceFile.statements) {\n if (ts.isFunctionDeclaration(stmt) && stmt.name) {\n const name = stmt.name.getText(sourceFile)\n if (!overloadGroups.has(name)) {\n overloadGroups.set(name, { signatures: [], implementation: null })\n }\n const group = overloadGroups.get(name)!\n if (stmt.body) {\n group.implementation = stmt\n } else {\n group.signatures.push(stmt)\n }\n }\n }\n // Only keep groups that actually have overloads (signatures + implementation)\n for (const [name, group] of overloadGroups) {\n if (group.signatures.length === 0 || !group.implementation) {\n overloadGroups.delete(name)\n }\n }\n\n // Walk top-level statements only (don't recurse into function bodies)\n for (const statement of sourceFile.statements) {\n let handled = false\n\n // Emit any doc comments before this statement\n if (emitTJS) {\n emitDocCommentsBefore(statement.getStart(sourceFile))\n }\n\n // Handle: function foo() {}\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n const funcName = statement.name.getText(sourceFile)\n handled = true\n\n const overloadGroup = overloadGroups.get(funcName)\n\n if (overloadGroup) {\n // This function is part of an overload group\n if (!statement.body) {\n // Skip bodyless signatures — handled when we encounter the implementation\n } else {\n // Implementation: emit the entire overload group\n if (emitTJS) {\n tjsFunctions.push(\n ...emitOverloadGroup(\n overloadGroup.signatures,\n statement,\n sourceFile,\n warnings\n )\n )\n } else {\n const overloads: FunctionTypeInfo[] = []\n for (const sig of overloadGroup.signatures) {\n overloads.push(\n extractFunctionMetadata(\n sig,\n sourceFile,\n warnings,\n resolutionCtx\n )\n )\n }\n const implInfo = extractFunctionMetadata(\n statement,\n sourceFile,\n warnings,\n resolutionCtx\n )\n implInfo.overloads = overloads\n metadata[funcName] = implInfo\n }\n }\n } else {\n // Normal (non-overloaded) function\n if (emitTJS) {\n tjsFunctions.push(\n transformFunctionToTJS(\n statement,\n sourceFile,\n undefined,\n warnings,\n true,\n resolutionCtx\n )\n )\n } else {\n metadata[funcName] = extractFunctionMetadata(\n statement,\n sourceFile,\n warnings,\n resolutionCtx\n )\n }\n }\n }\n\n // Handle: const foo = () => {} or const foo = function() {}\n // Also handle: const x = ..., let x = ..., var x = ... (non-function)\n if (ts.isVariableStatement(statement)) {\n let hasFunctionDecl = false\n\n // Check if the variable statement itself is exported\n const varIsExported = statement.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n\n for (const decl of statement.declarationList.declarations) {\n if (\n ts.isIdentifier(decl.name) &&\n decl.initializer &&\n (ts.isArrowFunction(decl.initializer) ||\n ts.isFunctionExpression(decl.initializer))\n ) {\n hasFunctionDecl = true\n const funcName = decl.name.getText(sourceFile)\n const funcNode = decl.initializer\n\n if (emitTJS) {\n let tjsFunc = transformFunctionToTJS(\n funcNode,\n sourceFile,\n funcName,\n warnings,\n true,\n resolutionCtx\n )\n // Arrow/const functions: export is on the VariableStatement\n // Insert after any line comment or degraded comment\n if (varIsExported && !tjsFunc.includes('export ')) {\n const firstFuncLine = tjsFunc.search(/^(async\\s+)?function[\\s*]/m)\n if (firstFuncLine > 0) {\n tjsFunc =\n tjsFunc.slice(0, firstFuncLine) +\n 'export ' +\n tjsFunc.slice(firstFuncLine)\n } else {\n tjsFunc = 'export ' + tjsFunc\n }\n }\n tjsFunctions.push(tjsFunc)\n } else {\n const info = extractFunctionMetadata(\n funcNode,\n sourceFile,\n warnings,\n resolutionCtx\n )\n info.name = funcName\n metadata[funcName] = info\n }\n }\n }\n\n // If this variable statement doesn't contain function declarations,\n // transpile and preserve it (strips type annotations)\n if (!hasFunctionDecl && emitTJS) {\n const transpiled = ts.transpileModule(statement.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n tjsFunctions.push(transpiled.outputText.trim())\n }\n\n handled = true\n }\n\n // Handle: interface Foo { ... }\n if (ts.isInterfaceDeclaration(statement)) {\n handled = true\n if (emitTJS) {\n const typeName = statement.name.getText(sourceFile)\n const annotations = annotationMap.get(typeName)\n if (!seenTypeNames.has(typeName)) {\n seenTypeNames.add(typeName)\n // @tjs-skip — omit this declaration entirely\n if (annotations?.some((a) => a.kind === 'skip')) {\n // Skip — do not emit\n } else {\n // Use merged interface (handles declaration merging)\n const merged = interfaces.get(typeName) || statement\n const typeDecl = transformInterfaceToType(\n merged,\n sourceFile,\n warnings,\n annotations\n )\n if (typeDecl) {\n const isExported = statement.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n tjsFunctions.push(\n isExported\n ? typeDecl.replace(/^(\\/\\*[\\s\\S]*?\\*\\/\\s*)?/, '$1export ')\n : typeDecl\n )\n }\n }\n }\n }\n }\n\n // Handle: type Foo = { ... }\n if (ts.isTypeAliasDeclaration(statement)) {\n handled = true\n if (emitTJS) {\n const typeName = statement.name.getText(sourceFile)\n const annotations = annotationMap.get(typeName)\n if (!seenTypeNames.has(typeName)) {\n seenTypeNames.add(typeName)\n // @tjs-skip — omit this declaration entirely\n if (annotations?.some((a) => a.kind === 'skip')) {\n // Skip — do not emit\n } else {\n const typeDecl = transformTypeAliasToType(\n statement,\n sourceFile,\n warnings,\n annotations\n )\n if (typeDecl) {\n const isExported = statement.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n tjsFunctions.push(\n isExported\n ? typeDecl.replace(/^(\\/\\*[\\s\\S]*?\\*\\/\\s*)?/, '$1export ')\n : typeDecl\n )\n }\n }\n }\n }\n }\n\n // Handle: enum Status { Pending, Active, Done }\n if (ts.isEnumDeclaration(statement)) {\n handled = true\n if (emitTJS) {\n const enumName = statement.name.getText(sourceFile)\n const annotations = annotationMap.get(enumName)\n if (!seenTypeNames.has(enumName)) {\n seenTypeNames.add(enumName)\n if (annotations?.some((a) => a.kind === 'skip')) {\n // Skip — do not emit\n } else {\n const enumDecl = transformEnumToTJS(statement, sourceFile, warnings)\n if (enumDecl) {\n tjsFunctions.push(enumDecl)\n }\n }\n }\n }\n }\n\n // Handle: class Foo { ... }\n if (ts.isClassDeclaration(statement) && statement.name) {\n const className = statement.name.getText(sourceFile)\n handled = true\n if (emitTJS) {\n const classDecl = transformClassToTJS(\n statement,\n sourceFile,\n warnings,\n undefined,\n hasTjsClass\n )\n tjsFunctions.push(classDecl)\n } else {\n classMetadata[className] = extractClassMetadata(\n statement,\n sourceFile,\n warnings,\n resolutionCtx\n )\n }\n }\n\n // Handle: import statements (strip type-only imports, keep value imports)\n if (ts.isImportDeclaration(statement)) {\n handled = true\n if (emitTJS) {\n // Check if it's a type-only import\n const isTypeOnly =\n statement.importClause?.isTypeOnly ||\n (statement.importClause?.namedBindings &&\n ts.isNamedImports(statement.importClause.namedBindings) &&\n statement.importClause.namedBindings.elements.every(\n (e) => e.isTypeOnly\n ))\n\n if (!isTypeOnly) {\n // Emit import directly — don't use ts.transpileModule which\n // strips \"unused\" imports in isolation. Filter out type-only\n // specifiers manually.\n if (\n statement.importClause?.namedBindings &&\n ts.isNamedImports(statement.importClause.namedBindings)\n ) {\n const valueSpecs = statement.importClause.namedBindings.elements\n .filter((e) => !e.isTypeOnly)\n .map((e) => {\n const name = e.name.getText(sourceFile)\n const propName = e.propertyName?.getText(sourceFile)\n return propName ? `${propName} as ${name}` : name\n })\n if (valueSpecs.length > 0) {\n const modSpec = (statement.moduleSpecifier as ts.StringLiteral)\n .text\n tjsFunctions.push(\n `import { ${valueSpecs.join(', ')} } from '${modSpec}'`\n )\n }\n } else {\n // Default import, namespace import, or side-effect import\n // Emit as-is (strip types via getText which preserves structure)\n const importText = statement.getText(sourceFile)\n // Remove type annotations by running through TS\n const cleaned = importText\n .replace(/\\btype\\s+/g, '')\n .replace(/\\s*:\\s*\\w+/g, '')\n tjsFunctions.push(cleaned)\n }\n }\n }\n }\n\n // Handle: export statements\n if (ts.isExportDeclaration(statement) || ts.isExportAssignment(statement)) {\n handled = true\n if (emitTJS) {\n const transpiled = ts.transpileModule(statement.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n const trimmed = transpiled.outputText.trim()\n if (trimmed) {\n tjsFunctions.push(trimmed)\n }\n }\n }\n\n // Handle: expression statements (console.log(...), foo(), etc.)\n // and any other unhandled statements\n if (!handled && emitTJS) {\n const transpiled = ts.transpileModule(statement.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n const trimmed = transpiled.outputText.trim()\n if (trimmed) {\n tjsFunctions.push(trimmed)\n }\n }\n }\n\n if (emitTJS) {\n // Emit any remaining doc comments (after all statements)\n emitDocCommentsBefore(Infinity)\n\n // Include source file annotation and TJS mode directives\n const sourceFileName = filename || 'unknown'\n const modesLine = tjsModes.length > 0 ? tjsModes.join('\\n') + '\\n\\n' : ''\n const header = `${modesLine}/* tjs <- ${sourceFileName} */\\n\\n`\n\n // Append embedded test comments (they were extracted from original source)\n const testsSection =\n embeddedTests.length > 0 ? '\\n\\n' + embeddedTests.join('\\n\\n') : ''\n\n return {\n code: header + tjsFunctions.join('\\n\\n') + testsSection,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n }\n\n // For JS output, strip types and add metadata\n const jsOutput = ts.transpileModule(source, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n\n // Append __tjs metadata for each function\n let code = jsOutput.outputText\n for (const [funcName, info] of Object.entries(metadata)) {\n const metadataObj: Record<string, any> = {\n params: Object.fromEntries(\n Object.entries(info.params).map(([k, v]) => [\n k,\n { type: v.type.kind, required: v.required, default: v.default },\n ])\n ),\n returns: info.returns ? { type: info.returns.kind } : undefined,\n }\n\n // Include type parameters (generics) if present\n if (info.typeParams) {\n metadataObj.typeParams = info.typeParams\n }\n\n const metadataStr = JSON.stringify(metadataObj, null, 2)\n code += `\\n${funcName}.__tjs = ${metadataStr};\\n`\n }\n\n // Append __tjs metadata for each class\n for (const [className, info] of Object.entries(classMetadata)) {\n const metadataObj: Record<string, any> = {\n constructor: info.constructor\n ? {\n params: Object.fromEntries(\n Object.entries(info.constructor.params ?? {}).map(([k, v]) => [\n k,\n { type: v.type.kind, required: v.required, default: v.default },\n ])\n ),\n }\n : undefined,\n methods: Object.fromEntries(\n Object.entries(info.methods ?? {}).map(([name, m]) => [\n name,\n {\n params: Object.fromEntries(\n Object.entries(m.params ?? {}).map(([k, v]) => [\n k,\n { type: v.type.kind, required: v.required },\n ])\n ),\n returns: m.returns ? { type: m.returns.kind } : undefined,\n },\n ])\n ),\n staticMethods: Object.fromEntries(\n Object.entries(info.staticMethods ?? {}).map(([name, m]) => [\n name,\n {\n params: Object.fromEntries(\n Object.entries(m.params ?? {}).map(([k, v]) => [\n k,\n { type: v.type.kind, required: v.required },\n ])\n ),\n returns: m.returns ? { type: m.returns.kind } : undefined,\n },\n ])\n ),\n }\n\n if (info.typeParams) {\n metadataObj.typeParams = info.typeParams\n }\n\n const metadataStr = JSON.stringify(metadataObj, null, 2)\n code += `\\n${className}.__tjs = ${metadataStr};\\n`\n\n // Wrap class to make it callable without `new`\n code += `\\n${emitClassWrapper(className)}\\n`\n }\n\n return {\n code,\n types: metadata,\n classes: Object.keys(classMetadata).length > 0 ? classMetadata : undefined,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n}\n",
|
|
20
|
+
"/**\n * TypeScript to TJS Transpiler\n *\n * Converts TypeScript source to TJS (or directly to JS + metadata).\n *\n * Two modes:\n * 1. TS → TJS (for inspection/migration)\n * 2. TS → JS + __tjs metadata (for production)\n *\n * @example\n * ```typescript\n * // Input TypeScript:\n * function greet(name: string, age?: number): string {\n * return `Hello, ${name}!`\n * }\n *\n * // Output TJS:\n * function greet(name: '', age = 0) -> '' {\n * return `Hello, ${name}!`\n * }\n *\n * // Output JS + metadata:\n * function greet(name, age) {\n * return `Hello, ${name}!`\n * }\n * greet.__tjs = {\n * params: { name: { type: 'string', required: true }, age: { type: 'number', required: false } },\n * returns: { type: 'string' }\n * }\n * ```\n */\n\nimport ts from 'typescript'\nimport { emitClassWrapper } from '../runtime'\n\nexport interface FromTSOptions {\n /** Emit TJS intermediate instead of JS + metadata */\n emitTJS?: boolean\n /** Include sourcemap */\n sourceMap?: boolean\n /** Filename for error messages */\n filename?: string\n}\n\nexport interface FromTSResult {\n /** The transpiled code (TJS or JS depending on options) */\n code: string\n /** Function type metadata (only when emitting JS) */\n types?: Record<string, FunctionTypeInfo>\n /** Class type metadata (only when emitting JS) */\n classes?: Record<string, ClassTypeInfo>\n /** Any warnings during transpilation */\n warnings?: string[]\n}\n\nexport interface TypeParamInfo {\n /** Constraint schema (from `extends`) - example-based */\n constraint?: string | Record<string, any>\n /** Default schema (from `= Type`) - example-based */\n default?: string | Record<string, any>\n}\n\nexport interface FunctionTypeInfo {\n name: string\n params: Record<string, ParamTypeInfo>\n returns?: TypeInfo\n description?: string\n /** Generic type parameters with constraints/defaults */\n typeParams?: Record<string, TypeParamInfo>\n /** Overload signatures (when function has TS overloads) */\n overloads?: FunctionTypeInfo[]\n}\n\nexport interface ClassTypeInfo {\n name: string\n /** Constructor parameters - also serves as the type shape */\n constructor?: {\n params: Record<string, ParamTypeInfo>\n }\n /** Instance methods */\n methods: Record<string, FunctionTypeInfo>\n /** Static methods */\n staticMethods: Record<string, FunctionTypeInfo>\n /** Generic type parameters */\n typeParams?: Record<string, TypeParamInfo>\n}\n\nexport interface ParamTypeInfo {\n type: TypeInfo\n required: boolean\n default?: any\n description?: string\n}\n\nexport interface TypeInfo {\n kind:\n | 'string'\n | 'number'\n | 'boolean'\n | 'null'\n | 'undefined'\n | 'array'\n | 'tuple'\n | 'object'\n | 'union'\n | 'any'\n items?: TypeInfo\n /** For tuples: element types in order */\n elements?: TypeInfo[]\n shape?: Record<string, TypeInfo>\n members?: TypeInfo[]\n nullable?: boolean\n}\n\n/** Context for type resolution */\ninterface TypeResolutionContext {\n typeAliases?: Map<string, ts.TypeNode>\n interfaces?: Map<string, ts.InterfaceDeclaration>\n sourceFile?: ts.SourceFile\n warnings?: string[]\n /** Track visited types to prevent infinite recursion */\n visited?: Set<string>\n /** Type parameter constraints and defaults from enclosing generic function/class */\n typeParams?: Map<string, { constraint?: ts.TypeNode; default?: ts.TypeNode }>\n}\n\n/**\n * DOM interface types — not constructible but common in TS signatures.\n * Map to {} (opaque object) so params stay annotated and required\n * rather than degrading to bare names.\n */\nconst domInterfaceTypes = new Set([\n // Events\n 'Event',\n 'CustomEvent',\n 'MouseEvent',\n 'KeyboardEvent',\n 'PointerEvent',\n 'TouchEvent',\n 'FocusEvent',\n 'InputEvent',\n 'CompositionEvent',\n 'WheelEvent',\n 'DragEvent',\n 'AnimationEvent',\n 'TransitionEvent',\n 'ClipboardEvent',\n 'UIEvent',\n 'ProgressEvent',\n 'ErrorEvent',\n 'MessageEvent',\n 'PopStateEvent',\n 'HashChangeEvent',\n 'PageTransitionEvent',\n 'StorageEvent',\n 'BeforeUnloadEvent',\n 'SubmitEvent',\n // Event targets / misc\n 'EventTarget',\n 'EventListener',\n // Nodes\n 'Node',\n 'Element',\n 'HTMLElement',\n 'SVGElement',\n 'Document',\n 'DocumentFragment',\n 'ShadowRoot',\n 'Text',\n 'Comment',\n 'Attr',\n // Specific HTML elements\n 'HTMLInputElement',\n 'HTMLTextAreaElement',\n 'HTMLSelectElement',\n 'HTMLButtonElement',\n 'HTMLFormElement',\n 'HTMLAnchorElement',\n 'HTMLImageElement',\n 'HTMLVideoElement',\n 'HTMLAudioElement',\n 'HTMLCanvasElement',\n 'HTMLDivElement',\n 'HTMLSpanElement',\n 'HTMLParagraphElement',\n 'HTMLTableElement',\n 'HTMLTemplateElement',\n 'HTMLSlotElement',\n 'HTMLDialogElement',\n 'HTMLDetailsElement',\n 'HTMLLabelElement',\n 'HTMLOptionElement',\n 'HTMLIFrameElement',\n 'HTMLScriptElement',\n 'HTMLStyleElement',\n 'HTMLLinkElement',\n 'HTMLMetaElement',\n 'HTMLHeadElement',\n 'HTMLBodyElement',\n 'HTMLMediaElement',\n // SVG elements\n 'SVGSVGElement',\n 'SVGPathElement',\n 'SVGGElement',\n 'SVGCircleElement',\n 'SVGRectElement',\n 'SVGTextElement',\n 'SVGLineElement',\n 'SVGPolygonElement',\n // Collections / lists\n 'NodeList',\n 'HTMLCollection',\n 'NamedNodeMap',\n 'DOMTokenList',\n 'DOMStringMap',\n 'CSSStyleDeclaration',\n 'DOMRect',\n 'DOMRectReadOnly',\n 'DOMPoint',\n 'DOMMatrix',\n // Ranges / selection\n 'Range',\n 'Selection',\n 'StaticRange',\n // Observers\n 'MutationObserver',\n 'MutationRecord',\n 'IntersectionObserver',\n 'IntersectionObserverEntry',\n 'ResizeObserver',\n 'ResizeObserverEntry',\n 'PerformanceObserver',\n 'PerformanceEntry',\n // Window / global\n 'Window',\n 'Location',\n 'History',\n 'Navigator',\n 'Screen',\n 'Storage',\n // Canvas / media\n 'CanvasRenderingContext2D',\n 'WebGLRenderingContext',\n 'WebGL2RenderingContext',\n 'OffscreenCanvas',\n 'ImageData',\n 'ImageBitmap',\n 'MediaStream',\n 'MediaRecorder',\n 'AudioContext',\n 'AudioNode',\n 'AudioBuffer',\n // Workers / messaging\n 'Worker',\n 'SharedWorker',\n 'ServiceWorker',\n 'ServiceWorkerRegistration',\n 'BroadcastChannel',\n 'MessageChannel',\n 'MessagePort',\n // Other Web APIs\n 'WebSocket',\n 'XMLHttpRequest',\n 'FileReader',\n 'FileList',\n 'DataTransfer',\n 'Crypto',\n 'SubtleCrypto',\n 'CryptoKey',\n 'Geolocation',\n 'Notification',\n 'PermissionStatus',\n 'MediaQueryList',\n 'TreeWalker',\n 'NodeIterator',\n 'ClipboardItem',\n])\n\n/**\n * Convert a TypeScript type node to a TJS example value string\n *\n * @param warnings - Optional array to collect warnings about generic types\n */\nfunction typeToExample(\n type: ts.TypeNode | undefined,\n checker?: ts.TypeChecker,\n warnings?: string[],\n ctx?: TypeResolutionContext\n): string {\n if (!type) return 'undefined'\n\n switch (type.kind) {\n case ts.SyntaxKind.StringKeyword:\n return \"''\"\n case ts.SyntaxKind.NumberKeyword:\n return '0.0'\n case ts.SyntaxKind.BooleanKeyword:\n return 'false'\n case ts.SyntaxKind.NullKeyword:\n return 'null'\n case ts.SyntaxKind.UndefinedKeyword:\n return 'undefined'\n case ts.SyntaxKind.VoidKeyword:\n return 'undefined'\n case ts.SyntaxKind.AnyKeyword:\n // For function params we use 'any', for object props we use 'null'\n return 'any'\n case ts.SyntaxKind.UnknownKeyword:\n return 'any'\n case ts.SyntaxKind.NeverKeyword:\n return 'null'\n case ts.SyntaxKind.SymbolKeyword:\n return \"Symbol('example')\"\n case ts.SyntaxKind.BigIntKeyword:\n return '0n'\n case ts.SyntaxKind.ObjectKeyword:\n return '{}'\n\n case ts.SyntaxKind.ArrayType: {\n const arrayType = type as ts.ArrayTypeNode\n let itemExample = typeToExample(arrayType.elementType, checker)\n // 'any' is not a valid literal value - use null for array items\n if (itemExample === 'any') itemExample = 'null'\n return `[${itemExample}]`\n }\n\n case ts.SyntaxKind.TypeReference: {\n const typeRef = type as ts.TypeReferenceNode\n const typeName = typeRef.typeName.getText()\n\n // Handle common generic types\n if (typeName === 'Array' && typeRef.typeArguments?.length) {\n const itemExample = typeToExample(\n typeRef.typeArguments[0],\n checker,\n warnings,\n ctx\n )\n return `[${itemExample}]`\n }\n if (typeName === 'Promise') {\n // Unwrap Promise type\n if (typeRef.typeArguments?.length) {\n return typeToExample(typeRef.typeArguments[0], checker, warnings, ctx)\n }\n return 'undefined'\n }\n if (\n typeName === 'Generator' ||\n typeName === 'AsyncGenerator' ||\n typeName === 'IterableIterator' ||\n typeName === 'AsyncIterableIterator'\n ) {\n // Unwrap to yield type (first type argument)\n if (typeRef.typeArguments?.length) {\n return typeToExample(typeRef.typeArguments[0], checker, warnings, ctx)\n }\n return 'undefined'\n }\n if (typeName === 'Record') {\n return '{}'\n }\n\n // Built-in constructible types — valid JS expressions as examples\n const builtinExamples: Record<string, string> = {\n // Collections\n Map: 'new Map()',\n Set: 'new Set()',\n WeakMap: 'new WeakMap()',\n WeakSet: 'new WeakSet()',\n WeakRef: 'new WeakRef({})',\n // Errors\n Error: \"new Error('example')\",\n TypeError: \"new TypeError('example')\",\n RangeError: \"new RangeError('example')\",\n SyntaxError: \"new SyntaxError('example')\",\n ReferenceError: \"new ReferenceError('example')\",\n URIError: \"new URIError('example')\",\n EvalError: \"new EvalError('example')\",\n // Date/Regex\n Date: 'new Date()',\n RegExp: '/example/',\n // Binary / WASM\n ArrayBuffer: 'new ArrayBuffer(0)',\n SharedArrayBuffer: 'new SharedArrayBuffer(0)',\n DataView: 'new DataView(new ArrayBuffer(0))',\n Float32Array: 'new Float32Array(0)',\n Float64Array: 'new Float64Array(0)',\n Int8Array: 'new Int8Array(0)',\n Int16Array: 'new Int16Array(0)',\n Int32Array: 'new Int32Array(0)',\n Uint8Array: 'new Uint8Array(0)',\n Uint16Array: 'new Uint16Array(0)',\n Uint32Array: 'new Uint32Array(0)',\n Uint8ClampedArray: 'new Uint8ClampedArray(0)',\n BigInt64Array: 'new BigInt64Array(0)',\n BigUint64Array: 'new BigUint64Array(0)',\n // Web APIs (constructible)\n URL: \"new URL('https://example.com')\",\n URLSearchParams: 'new URLSearchParams()',\n Headers: 'new Headers()',\n FormData: 'new FormData()',\n Blob: 'new Blob()',\n File: \"new File([], 'example')\",\n Response: 'new Response()',\n Request: \"new Request('https://example.com')\",\n AbortController: 'new AbortController()',\n AbortSignal: 'AbortSignal.abort()',\n // Streams\n ReadableStream: 'new ReadableStream()',\n WritableStream: 'new WritableStream()',\n TransformStream: 'new TransformStream()',\n // Structured data\n TextEncoder: 'new TextEncoder()',\n TextDecoder: 'new TextDecoder()',\n // Promises\n Promise: 'Promise.resolve(null)',\n }\n\n if (typeName in builtinExamples) {\n return builtinExamples[typeName]\n }\n\n // Resolve type aliases\n if (ctx?.typeAliases?.has(typeName)) {\n // Prevent infinite recursion\n const visited = ctx.visited ?? new Set<string>()\n if (visited.has(typeName)) {\n warnings?.push(`Circular type reference '${typeName}' - using 'any'`)\n return 'any'\n }\n visited.add(typeName)\n const resolvedType = ctx.typeAliases.get(typeName)!\n return typeToExample(resolvedType, checker, warnings, {\n ...ctx,\n visited,\n })\n }\n\n // Resolve interfaces\n if (ctx?.interfaces?.has(typeName)) {\n // Prevent infinite recursion\n const visited = ctx.visited ?? new Set<string>()\n if (visited.has(typeName)) {\n warnings?.push(`Circular type reference '${typeName}' - using 'any'`)\n return 'any'\n }\n visited.add(typeName)\n const iface = ctx.interfaces.get(typeName)!\n // Build example object from interface members\n const props: string[] = []\n for (const member of iface.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText(ctx.sourceFile)\n const propExample = typeToExample(member.type, checker, warnings, {\n ...ctx,\n visited,\n })\n // Always use : for object shape properties — = is only valid\n // in destructuring patterns, not in object literal examples\n props.push(`${propName}: ${propExample}`)\n }\n }\n return `{ ${props.join(', ')} }`\n }\n\n // Type parameters (generics like T, K, V)\n // Check if we have constraint or default info from enclosing context\n if (ctx?.typeParams?.has(typeName)) {\n const tp = ctx.typeParams.get(typeName)!\n if (tp.constraint) {\n return typeToExample(tp.constraint, checker, warnings, ctx)\n }\n if (tp.default) {\n return typeToExample(tp.default, checker, warnings, ctx)\n }\n // No constraint or default — fall through to 'any'\n }\n\n // DOM interface types — opaque objects, keep params annotated\n if (domInterfaceTypes.has(typeName)) {\n return '{}'\n }\n\n // Single uppercase letter or common generic names — treat as any\n if (\n /^[A-Z]$/.test(typeName) ||\n ['T', 'K', 'V', 'U', 'TKey', 'TValue', 'TItem', 'TResult'].includes(\n typeName\n )\n ) {\n warnings?.push(\n `Generic type parameter '${typeName}' converted to 'any' - consider specializing`\n )\n return 'any'\n }\n // Unknown type reference - treat as any\n warnings?.push(\n `Unknown type '${typeName}' converted to 'any' - may need manual review`\n )\n return 'any'\n }\n\n case ts.SyntaxKind.TypeLiteral: {\n const typeLiteral = type as ts.TypeLiteralNode\n const props: string[] = []\n for (const member of typeLiteral.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText()\n let propType = typeToExample(member.type, checker)\n // 'any' is not a valid literal value - use null for object properties\n if (propType === 'any') propType = 'null'\n // In object literals, always use : syntax (= is for function params only)\n props.push(`${propName}: ${propType}`)\n }\n }\n return `{ ${props.join(', ')} }`\n }\n\n case ts.SyntaxKind.UnionType: {\n const unionType = type as ts.UnionTypeNode\n\n // Helper to check if a type is null or undefined\n const isNullType = (t: ts.TypeNode) =>\n t.kind === ts.SyntaxKind.NullKeyword ||\n (ts.isLiteralTypeNode(t) &&\n t.literal.kind === ts.SyntaxKind.NullKeyword)\n const isUndefinedType = (t: ts.TypeNode) =>\n t.kind === ts.SyntaxKind.UndefinedKeyword ||\n (ts.isLiteralTypeNode(t) &&\n t.literal.kind === ts.SyntaxKind.UndefinedKeyword)\n\n // Check for nullable: T | null or T | undefined\n const nonNullTypes = unionType.types.filter(\n (t) => !isNullType(t) && !isUndefinedType(t)\n )\n const hasNull = unionType.types.some(isNullType)\n const hasUndefined = unionType.types.some(isUndefinedType)\n\n // All null/undefined — just return the simplest form\n if (nonNullTypes.length === 0) {\n if (hasNull) return 'null'\n return 'undefined'\n }\n\n if (nonNullTypes.length === 1 && (hasNull || hasUndefined)) {\n // Nullable type: T | null -> T | null\n const baseExample = typeToExample(\n nonNullTypes[0],\n checker,\n warnings,\n ctx\n )\n // any | null/undefined is just any — don't emit 'any | null'\n if (baseExample === 'any') return 'any'\n if (hasNull) return `${baseExample} | null`\n if (hasUndefined) return `${baseExample} | undefined`\n }\n\n // General union: if any member can't be expressed (any), degrade\n // the whole union to any — don't silently drop members\n const examples = unionType.types\n .map((t) => typeToExample(t, checker, warnings, ctx))\n .filter((e, i, arr) => arr.indexOf(e) === i) // deduplicate\n if (examples.some((e) => e === 'any')) return 'any'\n if (examples.length === 1) return examples[0]\n if (examples.length > 0) {\n // Check if any member is a complex expression (function call, new, etc.)\n // that would make | ambiguous as JS bitwise OR\n const hasComplexMember = examples.some(\n (e) => /[()]/.test(e) || e.startsWith('new ')\n )\n if (hasComplexMember) return 'any'\n return examples.join(' | ')\n }\n return 'undefined'\n }\n\n case ts.SyntaxKind.LiteralType: {\n const literalType = type as ts.LiteralTypeNode\n if (ts.isStringLiteral(literalType.literal)) {\n return `'${literalType.literal.text}'`\n }\n if (ts.isNumericLiteral(literalType.literal)) {\n return literalType.literal.text\n }\n if (literalType.literal.kind === ts.SyntaxKind.TrueKeyword) {\n return 'true'\n }\n if (literalType.literal.kind === ts.SyntaxKind.FalseKeyword) {\n return 'false'\n }\n if (literalType.literal.kind === ts.SyntaxKind.NullKeyword) {\n return 'null'\n }\n return 'undefined'\n }\n\n case ts.SyntaxKind.ParenthesizedType: {\n const parenType = type as ts.ParenthesizedTypeNode\n return typeToExample(parenType.type, checker)\n }\n\n case ts.SyntaxKind.FunctionType: {\n // Convert to inline FunctionPredicate expression\n const funcType = type as ts.FunctionTypeNode\n const fpParams: string[] = []\n for (const param of funcType.parameters) {\n const name = param.name?.getText() || '_'\n if (name === 'this') continue\n let paramExample = typeToExample(param.type, checker, warnings, ctx)\n if (paramExample === 'any') paramExample = 'null'\n fpParams.push(`${name}: ${paramExample}`)\n }\n let fpReturn = typeToExample(funcType.type, checker, warnings, ctx)\n if (fpReturn === 'any') fpReturn = 'null'\n const spec: string[] = []\n if (fpParams.length > 0) spec.push(`params: { ${fpParams.join(', ')} }`)\n if (fpReturn !== 'undefined') spec.push(`returns: ${fpReturn}`)\n return `FunctionPredicate('function', { ${spec.join(', ')} })`\n }\n\n case ts.SyntaxKind.TupleType: {\n const tupleType = type as ts.TupleTypeNode\n const elements = tupleType.elements.map((e) => {\n const example = ts.isNamedTupleMember(e)\n ? typeToExample(e.type, checker)\n : typeToExample(e as ts.TypeNode, checker)\n // 'any' is not a valid literal value\n return example === 'any' ? 'null' : example\n })\n return `[${elements.join(', ')}]`\n }\n\n default:\n return 'undefined'\n }\n}\n\n/**\n * Convert TypeScript type to TypeInfo for metadata\n */\nfunction typeToInfo(\n type: ts.TypeNode | undefined,\n ctx?: TypeResolutionContext\n): TypeInfo {\n if (!type) return { kind: 'any' }\n\n switch (type.kind) {\n case ts.SyntaxKind.StringKeyword:\n return { kind: 'string' }\n case ts.SyntaxKind.NumberKeyword:\n return { kind: 'number' }\n case ts.SyntaxKind.BooleanKeyword:\n return { kind: 'boolean' }\n case ts.SyntaxKind.NullKeyword:\n return { kind: 'null' }\n case ts.SyntaxKind.UndefinedKeyword:\n case ts.SyntaxKind.VoidKeyword:\n return { kind: 'undefined' }\n\n case ts.SyntaxKind.ArrayType: {\n const arrayType = type as ts.ArrayTypeNode\n return { kind: 'array', items: typeToInfo(arrayType.elementType, ctx) }\n }\n\n case ts.SyntaxKind.TypeLiteral: {\n const typeLiteral = type as ts.TypeLiteralNode\n const shape: Record<string, TypeInfo> = {}\n for (const member of typeLiteral.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText()\n shape[propName] = typeToInfo(member.type, ctx)\n }\n }\n return { kind: 'object', shape }\n }\n\n case ts.SyntaxKind.UnionType: {\n const unionType = type as ts.UnionTypeNode\n const nonNullTypes = unionType.types.filter(\n (t) =>\n t.kind !== ts.SyntaxKind.NullKeyword &&\n t.kind !== ts.SyntaxKind.UndefinedKeyword\n )\n const hasNull = unionType.types.some(\n (t) => t.kind === ts.SyntaxKind.NullKeyword\n )\n\n if (nonNullTypes.length === 1 && hasNull) {\n return { ...typeToInfo(nonNullTypes[0], ctx), nullable: true }\n }\n\n return {\n kind: 'union',\n members: unionType.types.map((t) => typeToInfo(t, ctx)),\n }\n }\n\n case ts.SyntaxKind.IntersectionType: {\n const intersectionType = type as ts.IntersectionTypeNode\n // Flatten intersection into merged object shape\n const mergedShape: Record<string, TypeInfo> = {}\n for (const member of intersectionType.types) {\n const memberInfo = typeToInfo(member, ctx)\n if (memberInfo.kind === 'object' && memberInfo.shape) {\n Object.assign(mergedShape, memberInfo.shape)\n }\n }\n if (Object.keys(mergedShape).length > 0) {\n return { kind: 'object', shape: mergedShape }\n }\n // If no object shapes found, treat as any\n return { kind: 'any' }\n }\n\n case ts.SyntaxKind.TupleType: {\n const tupleType = type as ts.TupleTypeNode\n const elements: TypeInfo[] = []\n for (const element of tupleType.elements) {\n // Handle named tuple members: [x: number, y: string]\n if (ts.isNamedTupleMember(element)) {\n elements.push(typeToInfo(element.type, ctx))\n } else {\n elements.push(typeToInfo(element as ts.TypeNode, ctx))\n }\n }\n return { kind: 'tuple', elements }\n }\n\n case ts.SyntaxKind.TypeReference: {\n const typeRef = type as ts.TypeReferenceNode\n const typeName = typeRef.typeName.getText()\n if (typeName === 'Array' && typeRef.typeArguments?.length) {\n return {\n kind: 'array',\n items: typeToInfo(typeRef.typeArguments[0], ctx),\n }\n }\n if (typeName === 'Promise' && typeRef.typeArguments?.length) {\n return typeToInfo(typeRef.typeArguments[0], ctx)\n }\n if (\n (typeName === 'Generator' ||\n typeName === 'AsyncGenerator' ||\n typeName === 'IterableIterator' ||\n typeName === 'AsyncIterableIterator') &&\n typeRef.typeArguments?.length\n ) {\n return typeToInfo(typeRef.typeArguments[0], ctx)\n }\n\n // Handle utility types\n if (typeRef.typeArguments?.length) {\n const innerType = typeToInfo(typeRef.typeArguments[0], ctx)\n\n // Partial<T> - all properties become optional (we just return the shape)\n if (typeName === 'Partial') {\n return innerType\n }\n\n // Required<T> - all properties become required (we just return the shape)\n if (typeName === 'Required') {\n return innerType\n }\n\n // Readonly<T> - same shape, readonly is a compile-time concept\n if (typeName === 'Readonly') {\n return innerType\n }\n\n // Record<K, V> - object with string keys and V values\n if (typeName === 'Record' && typeRef.typeArguments.length >= 2) {\n const valueType = typeToInfo(typeRef.typeArguments[1], ctx)\n // Record is essentially an object with dynamic keys\n return { kind: 'object', shape: { '[key]': valueType } }\n }\n\n // Pick<T, K> and Omit<T, K> - just return the base type for now\n // Full implementation would need to filter properties\n if (typeName === 'Pick' || typeName === 'Omit') {\n return innerType\n }\n\n // NonNullable<T> - remove null/undefined\n if (typeName === 'NonNullable') {\n if (innerType.nullable) {\n return { ...innerType, nullable: false }\n }\n return innerType\n }\n\n // ReturnType<T>, Parameters<T>, etc. - complex, return any\n if (\n ['ReturnType', 'Parameters', 'ConstructorParameters'].includes(\n typeName\n )\n ) {\n return { kind: 'any' }\n }\n }\n\n // Resolve type aliases\n if (ctx?.typeAliases?.has(typeName)) {\n const visited = ctx.visited ?? new Set<string>()\n if (visited.has(typeName)) {\n return { kind: 'any' } // Circular reference\n }\n visited.add(typeName)\n const resolvedType = ctx.typeAliases.get(typeName)!\n return typeToInfo(resolvedType, { ...ctx, visited })\n }\n\n // Resolve interfaces\n if (ctx?.interfaces?.has(typeName)) {\n const visited = ctx.visited ?? new Set<string>()\n if (visited.has(typeName)) {\n return { kind: 'any' } // Circular reference\n }\n visited.add(typeName)\n const iface = ctx.interfaces.get(typeName)!\n const shape: Record<string, TypeInfo> = {}\n\n // Handle extends clauses - merge in base interface properties\n if (iface.heritageClauses) {\n for (const clause of iface.heritageClauses) {\n if (clause.token === ts.SyntaxKind.ExtendsKeyword) {\n for (const baseType of clause.types) {\n const baseName = baseType.expression.getText(ctx.sourceFile)\n // Look up the base interface and recursively resolve it\n if (ctx.interfaces?.has(baseName) && !visited.has(baseName)) {\n // Create a synthetic type reference node to look up the base\n const syntheticRef = {\n kind: ts.SyntaxKind.TypeReference,\n typeName: { getText: () => baseName },\n } as unknown as ts.TypeReferenceNode\n const baseInfo = typeToInfo(syntheticRef, { ...ctx, visited })\n if (baseInfo.kind === 'object' && baseInfo.shape) {\n Object.assign(shape, baseInfo.shape)\n }\n }\n }\n }\n }\n }\n\n // Add own members (may override base)\n for (const member of iface.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText(ctx.sourceFile)\n shape[propName] = typeToInfo(member.type, { ...ctx, visited })\n }\n }\n return { kind: 'object', shape }\n }\n\n // Check type parameter constraints/defaults from enclosing context\n if (ctx?.typeParams?.has(typeName)) {\n const tp = ctx.typeParams.get(typeName)!\n if (tp.constraint) {\n return typeToInfo(tp.constraint, ctx)\n }\n if (tp.default) {\n return typeToInfo(tp.default, ctx)\n }\n }\n\n // DOM interface types — opaque objects\n if (domInterfaceTypes.has(typeName)) {\n return { kind: 'object' }\n }\n\n // Generics and unknown types become 'any'\n return { kind: 'any' }\n }\n\n default:\n return { kind: 'any' }\n }\n}\n\n/**\n * Extract type parameter info (generics) from a function\n */\nfunction extractTypeParams(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression,\n warnings?: string[]\n): Record<string, TypeParamInfo> | undefined {\n if (!node.typeParameters || node.typeParameters.length === 0) {\n return undefined\n }\n\n const typeParams: Record<string, TypeParamInfo> = {}\n\n for (const param of node.typeParameters) {\n const name = param.name.getText()\n const info: TypeParamInfo = {}\n\n // Extract constraint: T extends Foo\n if (param.constraint) {\n const constraintExample = typeToExample(\n param.constraint,\n undefined,\n warnings\n )\n // Try to parse as object/value for richer schema\n if (constraintExample.startsWith('{')) {\n try {\n // This is a rough parse - in production we'd use proper AST\n info.constraint = constraintExample\n } catch {\n info.constraint = constraintExample\n }\n } else {\n info.constraint = constraintExample\n }\n }\n\n // Extract default: T = Foo\n if (param.default) {\n const defaultExample = typeToExample(param.default, undefined, warnings)\n info.default = defaultExample\n }\n\n typeParams[name] = info\n }\n\n return Object.keys(typeParams).length > 0 ? typeParams : undefined\n}\n\n/**\n * Transform a TypeScript function to TJS syntax\n */\n/**\n * Transform a TypeScript interface to TJS Type declaration\n *\n * interface User { name: string; age: number }\n * ->\n * Type User { example: { name: '', age: 0 } }\n */\nfunction transformInterfaceToType(\n node: ts.InterfaceDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n annotations?: TjsAnnotation[]\n): string | null {\n const typeName = node.name.getText(sourceFile)\n\n // Check for generics\n if (node.typeParameters && node.typeParameters.length > 0) {\n return transformGenericInterfaceToGeneric(\n node,\n sourceFile,\n warnings,\n annotations\n )\n }\n\n // Use @tjs example if provided, otherwise build from members\n const exampleAnnotation = annotations?.find((a) => a.kind === 'example')\n const predicateAnnotation = annotations?.find((a) => a.kind === 'predicate')\n\n let example: string\n if (exampleAnnotation?.text) {\n example = exampleAnnotation.text\n } else {\n const props: string[] = []\n for (const member of node.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText(sourceFile)\n let propExample = typeToExample(member.type, undefined, warnings)\n if (propExample === 'any') propExample = 'null'\n props.push(`${propName}: ${propExample}`)\n }\n }\n if (props.length === 0 && !predicateAnnotation) {\n return `Type ${typeName} {}`\n }\n example = props.length > 0 ? `{ ${props.join(', ')} }` : '{}'\n }\n\n const parts = [`example: ${example}`]\n if (predicateAnnotation?.text) {\n parts.push(predicateAnnotation.text)\n }\n\n return `Type ${typeName} {\\n ${parts.join('\\n ')}\\n}`\n}\n\n/**\n * Transform a generic TypeScript interface to TJS Generic declaration\n *\n * interface Box<T> { value: T }\n * ->\n * Generic Box<T> {\n * description: 'Box'\n * predicate(x, T) { return typeof x === 'object' && x !== null && 'value' in x && T(x.value) }\n * }\n */\nfunction transformGenericInterfaceToGeneric(\n node: ts.InterfaceDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n annotations?: TjsAnnotation[]\n): string {\n const typeName = node.name.getText(sourceFile)\n const typeParams: string[] = []\n\n // Extract type parameters with constraints/defaults\n for (const param of node.typeParameters || []) {\n const paramName = param.name.getText(sourceFile)\n if (param.default) {\n const defaultExample = typeToExample(param.default, undefined, warnings)\n typeParams.push(`${paramName} = ${defaultExample}`)\n } else {\n typeParams.push(paramName)\n }\n }\n\n // Use @tjs predicate if provided, otherwise auto-generate\n const predicateAnnotation = annotations?.find((a) => a.kind === 'predicate')\n const declarationAnnotation = annotations?.find(\n (a) => a.kind === 'declaration'\n )\n\n let predicateLine: string\n if (predicateAnnotation?.text) {\n predicateLine = predicateAnnotation.text\n } else {\n // Build predicate checks from interface members\n const typeParamNames = (node.typeParameters || []).map((p) =>\n p.name.getText(sourceFile)\n )\n const checks: string[] = [\"typeof x === 'object'\", 'x !== null']\n\n for (const member of node.members) {\n if (ts.isPropertySignature(member) && member.name) {\n const propName = member.name.getText(sourceFile)\n const isComputed = propName.startsWith('[') && propName.endsWith(']')\n const symbolName = isComputed ? propName.slice(1, -1) : null\n\n if (isComputed) {\n checks.push(`${symbolName} in x`)\n } else {\n checks.push(`'${propName}' in x`)\n }\n\n if (member.type && ts.isTypeReferenceNode(member.type)) {\n const refName = member.type.typeName.getText(sourceFile)\n if (typeParamNames.includes(refName)) {\n if (isComputed) {\n checks.push(`${refName}(x[${symbolName}])`)\n } else {\n checks.push(`${refName}(x.${propName})`)\n }\n }\n }\n }\n }\n\n const predicateParams = ['x', ...typeParamNames].join(', ')\n predicateLine = `predicate(${predicateParams}) { return ${checks.join(\n ' && '\n )} }`\n }\n\n const parts = [`description: '${typeName}'`, predicateLine]\n if (declarationAnnotation?.text) {\n parts.push(`declaration ${declarationAnnotation.text}`)\n }\n\n return `Generic ${typeName}<${typeParams.join(', ')}> {\\n ${parts.join(\n '\\n '\n )}\\n}`\n}\n\n/**\n * Check if a TypeScript union type is a literal union (e.g., 'up' | 'down' | 'left')\n * Returns the literal values if it is, null otherwise\n */\nfunction extractLiteralUnionValues(\n type: ts.TypeNode,\n _sourceFile: ts.SourceFile\n): string[] | null {\n if (!ts.isUnionTypeNode(type)) return null\n\n const values: string[] = []\n for (const member of type.types) {\n if (ts.isLiteralTypeNode(member)) {\n if (ts.isStringLiteral(member.literal)) {\n values.push(`'${member.literal.text}'`)\n } else if (ts.isNumericLiteral(member.literal)) {\n values.push(member.literal.text)\n } else if (member.literal.kind === ts.SyntaxKind.TrueKeyword) {\n values.push('true')\n } else if (member.literal.kind === ts.SyntaxKind.FalseKeyword) {\n values.push('false')\n } else if (member.literal.kind === ts.SyntaxKind.NullKeyword) {\n values.push('null')\n } else {\n // Not a literal we can handle\n return null\n }\n } else if (member.kind === ts.SyntaxKind.NullKeyword) {\n values.push('null')\n } else if (member.kind === ts.SyntaxKind.UndefinedKeyword) {\n values.push('undefined')\n } else {\n // Not a literal union (has complex types)\n return null\n }\n }\n\n return values.length > 0 ? values : null\n}\n\n/**\n * Transform a TypeScript enum to TJS Enum declaration\n *\n * enum Status { Pending, Active, Done }\n * ->\n * Enum Status 'Status' {\n * Pending\n * Active\n * Done\n * }\n *\n * enum Color { Red = 'red', Green = 'green', Blue = 'blue' }\n * ->\n * Enum Color 'Color' {\n * Red = 'red'\n * Green = 'green'\n * Blue = 'blue'\n * }\n */\nfunction transformEnumToTJS(\n node: ts.EnumDeclaration,\n sourceFile: ts.SourceFile,\n _warnings?: string[]\n): string | null {\n const enumName = node.name.getText(sourceFile)\n const members: string[] = []\n\n let nextValue = 0\n for (const member of node.members) {\n const memberName = member.name.getText(sourceFile)\n\n if (member.initializer) {\n // Has explicit value\n if (ts.isStringLiteral(member.initializer)) {\n members.push(` ${memberName} = '${member.initializer.text}'`)\n } else if (ts.isNumericLiteral(member.initializer)) {\n const numValue = parseInt(member.initializer.text, 10)\n members.push(` ${memberName} = ${numValue}`)\n nextValue = numValue + 1\n } else if (\n ts.isPrefixUnaryExpression(member.initializer) &&\n member.initializer.operator === ts.SyntaxKind.MinusToken\n ) {\n // Negative number\n const operand = member.initializer.operand\n if (ts.isNumericLiteral(operand)) {\n const numValue = -parseInt(operand.text, 10)\n members.push(` ${memberName} = ${numValue}`)\n nextValue = numValue + 1\n }\n } else {\n // Expression or other complex initializer - use the text directly\n members.push(\n ` ${memberName} = ${member.initializer.getText(sourceFile)}`\n )\n }\n } else {\n // Auto-increment numeric value\n members.push(` ${memberName} = ${nextValue}`)\n nextValue++\n }\n }\n\n return `Enum ${enumName} '${enumName}' {\n${members.join('\\n')}\n}`\n}\n\n/**\n * Transform a TypeScript type alias to TJS Type declaration\n *\n * type User = { name: string; age: number }\n * ->\n * Type User { example: { name: '', age: 0 } }\n *\n * type Direction = 'up' | 'down' | 'left' | 'right'\n * ->\n * Union Direction 'Direction' 'up' | 'down' | 'left' | 'right'\n */\nfunction transformTypeAliasToType(\n node: ts.TypeAliasDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n annotations?: TjsAnnotation[]\n): string | null {\n const typeName = node.name.getText(sourceFile)\n\n // Check for generics\n if (node.typeParameters && node.typeParameters.length > 0) {\n // Generic function types → generic FunctionPredicate\n if (node.type.kind === ts.SyntaxKind.FunctionType) {\n return transformGenericFunctionTypeToFP(node, sourceFile, warnings)\n }\n return transformGenericTypeAliasToGeneric(\n node,\n sourceFile,\n warnings,\n annotations\n )\n }\n\n // Check for literal union type → emit Union syntax\n const literalValues = extractLiteralUnionValues(node.type, sourceFile)\n if (literalValues) {\n return `Union ${typeName} '${typeName}' ${literalValues.join(' | ')}`\n }\n\n // Function types → FunctionPredicate declaration\n if (node.type.kind === ts.SyntaxKind.FunctionType) {\n const funcType = node.type as ts.FunctionTypeNode\n const fpParams: string[] = []\n for (const param of funcType.parameters) {\n const name = param.name?.getText(sourceFile) || '_'\n if (name === 'this') continue\n let paramExample = typeToExample(param.type, undefined, warnings)\n if (paramExample === 'any') paramExample = 'null'\n fpParams.push(`${name}: ${paramExample}`)\n }\n let fpReturn = typeToExample(funcType.type, undefined, warnings)\n if (fpReturn === 'any') fpReturn = 'null'\n const spec: string[] = []\n if (fpParams.length > 0) spec.push(`params: { ${fpParams.join(', ')} }`)\n if (fpReturn !== 'undefined') spec.push(`returns: ${fpReturn}`)\n return `FunctionPredicate ${typeName} {\\n ${spec.join('\\n ')}\\n}`\n }\n\n const example = typeToExample(node.type, undefined, warnings)\n\n // 'any' and 'undefined' — skip declaration (undeclared = any in TJS)\n if (example === 'any' || example === 'undefined') {\n return `Type ${typeName} {}`\n }\n\n // For simple primitive types, use short form\n if (\n example === \"''\" ||\n example === '0' ||\n example === 'true' ||\n example === 'null'\n ) {\n return `Type ${typeName} ${example}`\n }\n\n return `Type ${typeName} {\n example: ${example}\n}`\n}\n\n/**\n * Transform a generic function type alias to a generic FunctionPredicate declaration.\n * e.g. `type Creator<T> = (x: string) => T` → `FunctionPredicate Creator<T> { params: { x: '' } returns: T }`\n */\nfunction transformGenericFunctionTypeToFP(\n node: ts.TypeAliasDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[]\n): string {\n const typeName = node.name.getText(sourceFile)\n const funcType = node.type as ts.FunctionTypeNode\n\n // Build type params string: <T, U = {}>\n const typeParamNames = new Set<string>()\n const typeParams: string[] = []\n for (const tp of node.typeParameters!) {\n const name = tp.name.getText(sourceFile)\n typeParamNames.add(name)\n if (tp.default) {\n const defaultExample = typeToExample(tp.default, undefined, warnings)\n typeParams.push(`${name} = ${defaultExample}`)\n } else {\n typeParams.push(name)\n }\n }\n\n // Build params — preserve type param references as bare identifiers\n const fpParams: string[] = []\n for (const param of funcType.parameters) {\n const name = param.name?.getText(sourceFile) || '_'\n if (name === 'this') continue\n const paramTypeText = param.type?.getText(sourceFile) || 'any'\n if (typeParamNames.has(paramTypeText)) {\n // Type param reference — keep as-is\n fpParams.push(`${name}: ${paramTypeText}`)\n } else {\n let paramExample = typeToExample(param.type, undefined, warnings)\n if (paramExample === 'any') paramExample = 'null'\n fpParams.push(`${name}: ${paramExample}`)\n }\n }\n\n // Build return type — preserve type param references\n const returnTypeText = funcType.type?.getText(sourceFile) || 'void'\n let fpReturn: string | undefined\n if (returnTypeText !== 'void') {\n if (typeParamNames.has(returnTypeText)) {\n fpReturn = returnTypeText\n } else {\n fpReturn = typeToExample(funcType.type, undefined, warnings)\n if (fpReturn === 'any') fpReturn = 'null'\n if (fpReturn === 'undefined') fpReturn = undefined\n }\n }\n\n const spec: string[] = []\n if (fpParams.length > 0) spec.push(`params: { ${fpParams.join(', ')} }`)\n if (fpReturn !== undefined) spec.push(`returns: ${fpReturn}`)\n return `FunctionPredicate ${typeName}<${typeParams.join(\n ', '\n )}> {\\n ${spec.join('\\n ')}\\n}`\n}\n\n/**\n * Transform a generic type alias to TJS Generic declaration\n */\nfunction transformGenericTypeAliasToGeneric(\n node: ts.TypeAliasDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n annotations?: TjsAnnotation[]\n): string {\n const typeName = node.name.getText(sourceFile)\n const typeParams: string[] = []\n\n // Extract type parameters\n for (const param of node.typeParameters || []) {\n const paramName = param.name.getText(sourceFile)\n if (param.default) {\n const defaultExample = typeToExample(param.default, undefined, warnings)\n typeParams.push(`${paramName} = ${defaultExample}`)\n } else {\n typeParams.push(paramName)\n }\n }\n\n const typeParamNames = (node.typeParameters || []).map((p) =>\n p.name.getText(sourceFile)\n )\n\n // Use @tjs predicate if provided, otherwise default placeholder\n const predicateAnnotation = annotations?.find((a) => a.kind === 'predicate')\n const declarationAnnotation = annotations?.find(\n (a) => a.kind === 'declaration'\n )\n\n let predicateLine: string\n if (predicateAnnotation?.text) {\n predicateLine = predicateAnnotation.text\n } else {\n const predicateParams = ['x', ...typeParamNames].join(', ')\n predicateLine = `predicate(${predicateParams}) { return true }`\n }\n\n // Include original TS source as a block comment for manual enhancement\n const originalSource = node.getText(sourceFile).trim()\n const comment = `/* Original TS:\\n${originalSource}\\n*/`\n\n const parts = [`description: '${typeName}'`, predicateLine]\n if (declarationAnnotation?.text) {\n parts.push(`declaration ${declarationAnnotation.text}`)\n }\n\n return `${comment}\\nGeneric ${typeName}<${typeParams.join(\n ', '\n )}> {\\n ${parts.join('\\n ')}\\n}`\n}\n\nfunction transformFunctionToTJS(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression,\n sourceFile: ts.SourceFile,\n explicitName?: string,\n warnings?: string[],\n includeLineNumber?: boolean,\n ctx?: TypeResolutionContext\n): string {\n // Build type parameter map from generic params (constraint/default)\n let typeParamMap:\n | Map<string, { constraint?: ts.TypeNode; default?: ts.TypeNode }>\n | undefined\n if (node.typeParameters && node.typeParameters.length > 0) {\n typeParamMap = new Map()\n for (const tp of node.typeParameters) {\n typeParamMap.set(tp.name.getText(sourceFile), {\n constraint: tp.constraint,\n default: tp.default,\n })\n }\n }\n\n // Merge type params into ctx for resolution in typeToExample\n const resolveCtx: TypeResolutionContext | undefined =\n typeParamMap || ctx\n ? { ...ctx, typeParams: typeParamMap ?? ctx?.typeParams }\n : ctx\n\n const degraded: string[] = []\n const params = transformParams(\n node.parameters,\n sourceFile,\n warnings,\n degraded,\n resolveCtx\n )\n\n // Get line number (1-indexed) for source mapping\n const { line } = sourceFile.getLineAndCharacterOfPosition(\n node.getStart(sourceFile)\n )\n const lineComment = includeLineNumber ? `/* line ${line + 1} */\\n` : ''\n\n const funcName =\n explicitName ||\n (ts.isFunctionDeclaration(node) && node.name\n ? node.name.getText(sourceFile)\n : '')\n const returnExample = node.type\n ? typeToExample(node.type, undefined, warnings, resolveCtx)\n : ''\n // Use -! to skip signature tests - TS types are compile-time only,\n // the example values won't necessarily match runtime behavior\n const returnAnnotation =\n returnExample &&\n returnExample !== 'undefined' &&\n returnExample !== 'any' &&\n !returnExample.startsWith('new ') // new Set(), new Map() etc. aren't valid TJS literals\n ? ` -! ${returnExample}`\n : ''\n\n // Track degraded return type\n if (node.type && (returnExample === 'any' || returnExample === 'undefined')) {\n const originalReturn = node.type.getText(sourceFile)\n if (\n originalReturn !== 'any' &&\n originalReturn !== 'unknown' &&\n originalReturn !== 'void'\n ) {\n degraded.push(`return: ${originalReturn}`)\n }\n }\n\n // Get function body and strip TypeScript syntax using ts.transpileModule\n let body = ''\n if (node.body) {\n const bodyText = ts.isBlock(node.body)\n ? node.body.getText(sourceFile)\n : `{ return ${node.body.getText(sourceFile)} }`\n\n // Use TypeScript's transpiler to strip all type syntax\n const transpiled = ts.transpileModule(bodyText, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n body = transpiled.outputText.trim()\n } else {\n body = '{ }'\n }\n\n // Check for export, async, and generator modifiers\n const isExported = node.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n const isAsync = node.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.AsyncKeyword\n )\n const isGenerator = !!(node as ts.FunctionDeclaration).asteriskToken\n const exportPrefix = isExported ? 'export ' : ''\n const asyncPrefix = isAsync ? 'async ' : ''\n const funcKeyword = isGenerator ? 'function* ' : 'function '\n\n // Emit migration comment if any types were degraded\n const degradedComment =\n degraded.length > 0\n ? `/* TODO: TS types degraded — ${degraded.join(', ')} */\\n`\n : ''\n\n return `${lineComment}${degradedComment}${exportPrefix}${asyncPrefix}${funcKeyword}${funcName}(${params.join(\n ', '\n )})${returnAnnotation} ${body}`\n}\n\n/**\n * Emit a full TJS overload group: the implementation (renamed) + wrapper signatures.\n * Each overload signature becomes a TJS function that delegates to the implementation.\n * TJS polymorphic dispatch merges the wrappers into a dispatcher automatically.\n */\nfunction emitOverloadGroup(\n signatures: ts.FunctionDeclaration[],\n implementation: ts.FunctionDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[]\n): string[] {\n const funcName = implementation.name?.getText(sourceFile) || ''\n const implName = `_${funcName}_impl`\n const results: string[] = []\n\n // Emit the implementation as a renamed private function\n const implParams = transformParams(\n implementation.parameters,\n sourceFile,\n warnings\n )\n let implBody = '{ }'\n if (implementation.body) {\n const bodyText = implementation.body.getText(sourceFile)\n const transpiled = ts.transpileModule(bodyText, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n implBody = transpiled.outputText.trim()\n }\n const isAsync = implementation.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.AsyncKeyword\n )\n const isGenerator = !!implementation.asteriskToken\n const asyncPrefix = isAsync ? 'async ' : ''\n const funcKeyword = isGenerator ? 'function* ' : 'function '\n\n results.push(\n `${asyncPrefix}${funcKeyword}${implName}(${implParams.join(\n ', '\n )}) ${implBody}`\n )\n\n // Emit each overload signature as a wrapper that delegates to the implementation\n for (const sig of signatures) {\n const params = transformParams(sig.parameters, sourceFile, warnings)\n const paramNames = sig.parameters.map((p) => p.name.getText(sourceFile))\n const returnExample = sig.type\n ? typeToExample(sig.type, undefined, warnings)\n : ''\n const returnAnnotation =\n returnExample && returnExample !== 'undefined' && returnExample !== 'any'\n ? ` -! ${returnExample}`\n : ''\n\n const { line } = sourceFile.getLineAndCharacterOfPosition(\n sig.getStart(sourceFile)\n )\n const lineComment = `/* line ${line + 1} */\\n`\n const returnKw = isGenerator ? 'yield* ' : 'return '\n\n results.push(\n `${lineComment}${asyncPrefix}${funcKeyword}${funcName}(${params.join(\n ', '\n )})${returnAnnotation} { ${returnKw}${implName}(${paramNames.join(\n ', '\n )}) }`\n )\n }\n\n return results\n}\n\n/**\n * Transform TypeScript class to TJS class\n * Converts TS type annotations to TJS example-based annotations\n */\nfunction transformClassToTJS(\n node: ts.ClassDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n ctx?: TypeResolutionContext,\n convertPrivateToHash = false\n): string {\n // Build type parameter map from class-level generics\n let resolveCtx = ctx\n if (node.typeParameters && node.typeParameters.length > 0) {\n const typeParamMap = new Map<\n string,\n { constraint?: ts.TypeNode; default?: ts.TypeNode }\n >()\n for (const tp of node.typeParameters) {\n typeParamMap.set(tp.name.getText(sourceFile), {\n constraint: tp.constraint,\n default: tp.default,\n })\n }\n resolveCtx = { ...ctx, typeParams: typeParamMap }\n }\n\n const className = node.name?.getText(sourceFile) || 'Anonymous'\n // Get base class name, stripping type arguments (e.g. Component<T> → Component)\n const extendsType = node.heritageClauses?.find(\n (h) => h.token === ts.SyntaxKind.ExtendsKeyword\n )?.types[0]\n const extendsClause = extendsType?.expression?.getText(sourceFile)\n\n // With TjsClass: convert TS private to JS # (true runtime privacy).\n // Without TjsClass: strip the keyword, keep the name (TS private is compile-time only).\n const privateFieldMap = new Map<string, string>()\n if (convertPrivateToHash) {\n for (const member of node.members) {\n if (ts.isPropertyDeclaration(member) && member.name) {\n const propName = member.name.getText(sourceFile)\n const isPrivate = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.PrivateKeyword\n )\n if (isPrivate && !propName.startsWith('#')) {\n privateFieldMap.set(propName, `#${propName}`)\n }\n }\n }\n }\n\n // Helper to replace private field references in transpiled code\n // Handles: this.prop, ClassName.prop (static), varName.prop (instance via variable)\n const replacePrivateRefs = (code: string): string => {\n let result = code\n for (const [tsName, jsName] of privateFieldMap) {\n // Match property access on any identifier: word.propName or this.propName\n // This covers this.prop, ClassName.prop, and varName.prop\n result = result.replace(\n new RegExp(`(\\\\b\\\\w+)\\\\.${tsName}\\\\b`, 'g'),\n `$1.${jsName}`\n )\n }\n return result\n }\n\n const members: string[] = []\n\n for (const member of node.members) {\n // Constructor\n if (ts.isConstructorDeclaration(member)) {\n const params = transformParams(member.parameters, sourceFile, warnings)\n let body = '{ }'\n if (member.body) {\n const transpiled = ts.transpileModule(member.body.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n body = replacePrivateRefs(transpiled.outputText.trim())\n }\n members.push(` constructor(${params.join(', ')}) ${body}`)\n }\n\n // Regular methods\n if (ts.isMethodDeclaration(member) && member.name) {\n const methodName = member.name.getText(sourceFile)\n const isStatic = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.StaticKeyword\n )\n const isAsync = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.AsyncKeyword\n )\n\n const params = transformParams(\n member.parameters,\n sourceFile,\n warnings,\n undefined,\n resolveCtx\n )\n const returnExample = member.type\n ? typeToExample(member.type, undefined, warnings, resolveCtx)\n : ''\n // Use -! to skip signature tests for TS-transpiled code\n const returnAnnotation =\n returnExample &&\n returnExample !== 'undefined' &&\n returnExample !== 'any'\n ? ` -! ${returnExample}`\n : ''\n\n let body = '{ }'\n if (member.body) {\n const transpiled = ts.transpileModule(member.body.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n body = replacePrivateRefs(transpiled.outputText.trim())\n }\n\n const isGenerator = !!member.asteriskToken\n const staticPrefix = isStatic ? 'static ' : ''\n const asyncPrefix = isAsync ? 'async ' : ''\n const generatorStar = isGenerator ? '*' : ''\n members.push(\n ` ${staticPrefix}${asyncPrefix}${generatorStar}${methodName}(${params.join(\n ', '\n )})${returnAnnotation} ${body}`\n )\n }\n\n // Getters\n if (ts.isGetAccessorDeclaration(member) && member.name) {\n const propName = member.name.getText(sourceFile)\n const isStatic = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.StaticKeyword\n )\n const staticPrefix = isStatic ? 'static ' : ''\n const returnExample = member.type\n ? typeToExample(member.type, undefined, warnings, resolveCtx)\n : ''\n const returnAnnotation =\n returnExample &&\n returnExample !== 'undefined' &&\n returnExample !== 'any' &&\n !returnExample.startsWith('new ')\n ? ` -> ${returnExample}`\n : ''\n\n let body = '{ }'\n if (member.body) {\n const transpiled = ts.transpileModule(member.body.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n body = replacePrivateRefs(transpiled.outputText.trim())\n }\n\n members.push(\n ` ${staticPrefix}get ${propName}()${returnAnnotation} ${body}`\n )\n }\n\n // Setters\n if (ts.isSetAccessorDeclaration(member) && member.name) {\n const propName = member.name.getText(sourceFile)\n const isStatic = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.StaticKeyword\n )\n const staticPrefix = isStatic ? 'static ' : ''\n const params = transformParams(member.parameters, sourceFile, warnings)\n\n let body = '{ }'\n if (member.body) {\n const transpiled = ts.transpileModule(member.body.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n body = replacePrivateRefs(transpiled.outputText.trim())\n }\n\n members.push(\n ` ${staticPrefix}set ${propName}(${params.join(', ')}) ${body}`\n )\n }\n\n // Properties with initializers (private fields, regular properties)\n if (ts.isPropertyDeclaration(member) && member.name) {\n const origName = member.name.getText(sourceFile)\n const isStatic = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.StaticKeyword\n )\n const staticPrefix = isStatic ? 'static ' : ''\n\n // Use mapped name (# for private) or original\n const propName = privateFieldMap.get(origName) || origName\n\n if (member.initializer) {\n // Wrap in parens so TS treats { ... } as an object expression,\n // not a block with labels (which mangles property colons)\n const initText = member.initializer.getText(sourceFile)\n const wrapped = initText.trimStart().startsWith('{')\n ? `(${initText})`\n : initText\n const transpiled = ts.transpileModule(wrapped, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n let output = transpiled.outputText.trim()\n // Strip the wrapping parens and trailing semicolon\n if (wrapped !== initText) {\n output = output.replace(/^\\(/, '').replace(/\\);?\\s*$/, '')\n }\n members.push(` ${staticPrefix}${propName} = ${output}`)\n } else {\n // Property without initializer - just declare it\n members.push(` ${staticPrefix}${propName}`)\n }\n }\n }\n\n const isExported = node.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n const exportPrefix = isExported ? 'export ' : ''\n const extendsStr = extendsClause ? ` extends ${extendsClause}` : ''\n return `${exportPrefix}class ${className}${extendsStr} {\\n${members.join(\n '\\n'\n )}\\n}`\n}\n\n/**\n * Helper to transform parameters to TJS format\n */\nfunction transformParams(\n parameters: ts.NodeArray<ts.ParameterDeclaration>,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n degraded?: string[],\n ctx?: TypeResolutionContext\n): string[] {\n const params: string[] = []\n\n for (const param of parameters) {\n const name = param.name.getText(sourceFile)\n // Skip TypeScript's `this` pseudo-parameter (declares `this` context type)\n if (name === 'this') continue\n const isRest = !!param.dotDotDotToken\n const isOptional = !!param.questionToken || !!param.initializer\n const typeExample = typeToExample(param.type, undefined, warnings, ctx)\n\n if (isRest) {\n // Rest parameter: ...args: T[] → ...args: [example]\n // typeToExample already converts T[] to [example], so use directly\n if (typeExample === 'any' || typeExample === 'undefined') {\n params.push(`...${name}: [null]`)\n } else {\n params.push(`...${name}: ${typeExample}`)\n }\n } else if (param.initializer) {\n // Has default value - use it directly\n const defaultText = param.initializer.getText(sourceFile)\n params.push(`${name} = ${defaultText}`)\n } else if (typeExample === 'any' || typeExample === 'undefined') {\n // any/undefined type - no annotation in TJS (bare name means any)\n params.push(name)\n // Record original TS type for migration comments\n if (degraded && param.type) {\n const originalType = param.type.getText(sourceFile)\n if (originalType !== 'any' && originalType !== 'unknown') {\n degraded.push(`${name}: ${originalType}`)\n }\n }\n } else if (isOptional) {\n // Optional without default - use union with undefined to preserve\n // three-state semantics (e.g. TS `flag?: boolean` can be true/false/undefined)\n params.push(`${name}: ${typeExample} | undefined`)\n } else {\n // Required - use : for required\n params.push(`${name}: ${typeExample}`)\n }\n }\n\n return params\n}\n\n/**\n * Extract type metadata from a TypeScript function\n */\nfunction extractFunctionMetadata(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n ctx?: TypeResolutionContext\n): FunctionTypeInfo {\n // Build type parameter map from generic params\n let resolveCtx = ctx\n if (node.typeParameters && node.typeParameters.length > 0) {\n const typeParamMap = new Map<\n string,\n { constraint?: ts.TypeNode; default?: ts.TypeNode }\n >()\n for (const tp of node.typeParameters) {\n typeParamMap.set(tp.name.getText(sourceFile), {\n constraint: tp.constraint,\n default: tp.default,\n })\n }\n resolveCtx = { ...ctx, typeParams: typeParamMap }\n }\n\n const name =\n ts.isFunctionDeclaration(node) && node.name\n ? node.name.getText(sourceFile)\n : 'anonymous'\n const params: Record<string, ParamTypeInfo> = {}\n\n for (const param of node.parameters) {\n const paramName = param.name.getText(sourceFile)\n const isOptional = !!param.questionToken || !!param.initializer\n\n let defaultValue: any = undefined\n if (param.initializer) {\n // Try to extract literal default value\n const initText = param.initializer.getText(sourceFile)\n try {\n defaultValue = JSON.parse(initText)\n } catch {\n defaultValue = initText\n }\n }\n\n params[paramName] = {\n type: typeToInfo(param.type, resolveCtx),\n required: !isOptional,\n default: defaultValue,\n }\n }\n\n const result: FunctionTypeInfo = {\n name,\n params,\n returns: node.type ? typeToInfo(node.type, resolveCtx) : undefined,\n }\n\n // Extract generic type parameters\n const typeParams = extractTypeParams(node, warnings)\n if (typeParams) {\n result.typeParams = typeParams\n }\n\n return result\n}\n\n/**\n * Extract type metadata from a TypeScript class\n */\nfunction extractClassMetadata(\n node: ts.ClassDeclaration,\n sourceFile: ts.SourceFile,\n warnings?: string[],\n ctx?: TypeResolutionContext\n): ClassTypeInfo {\n // Build type parameter map from class-level generics\n let resolveCtx = ctx\n if (node.typeParameters && node.typeParameters.length > 0) {\n const typeParamMap = new Map<\n string,\n { constraint?: ts.TypeNode; default?: ts.TypeNode }\n >()\n for (const tp of node.typeParameters) {\n typeParamMap.set(tp.name.getText(sourceFile), {\n constraint: tp.constraint,\n default: tp.default,\n })\n }\n resolveCtx = { ...ctx, typeParams: typeParamMap }\n }\n\n const name = node.name?.getText(sourceFile) || 'anonymous'\n const methods: Record<string, FunctionTypeInfo> = {}\n const staticMethods: Record<string, FunctionTypeInfo> = {}\n let constructorInfo: { params: Record<string, ParamTypeInfo> } | undefined\n\n for (const member of node.members) {\n // Constructor\n if (ts.isConstructorDeclaration(member)) {\n const params: Record<string, ParamTypeInfo> = {}\n for (const param of member.parameters) {\n const paramName = param.name.getText(sourceFile)\n const isOptional = !!param.questionToken || !!param.initializer\n\n let defaultValue: any = undefined\n if (param.initializer) {\n const initText = param.initializer.getText(sourceFile)\n try {\n defaultValue = JSON.parse(initText)\n } catch {\n defaultValue = initText\n }\n }\n\n params[paramName] = {\n type: typeToInfo(param.type, resolveCtx),\n required: !isOptional,\n default: defaultValue,\n }\n }\n constructorInfo = { params }\n }\n\n // Methods (instance and static)\n if (ts.isMethodDeclaration(member) && member.name) {\n const methodName = member.name.getText(sourceFile)\n const isStatic = member.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.StaticKeyword\n )\n\n const params: Record<string, ParamTypeInfo> = {}\n for (const param of member.parameters) {\n const paramName = param.name.getText(sourceFile)\n const isOptional = !!param.questionToken || !!param.initializer\n\n let defaultValue: any = undefined\n if (param.initializer) {\n const initText = param.initializer.getText(sourceFile)\n try {\n defaultValue = JSON.parse(initText)\n } catch {\n defaultValue = initText\n }\n }\n\n params[paramName] = {\n type: typeToInfo(param.type, resolveCtx),\n required: !isOptional,\n default: defaultValue,\n }\n }\n\n const methodInfo: FunctionTypeInfo = {\n name: methodName,\n params,\n returns: member.type ? typeToInfo(member.type, resolveCtx) : undefined,\n }\n\n if (isStatic) {\n staticMethods[methodName] = methodInfo\n } else {\n methods[methodName] = methodInfo\n }\n }\n }\n\n const result: ClassTypeInfo = {\n name,\n methods,\n staticMethods,\n constructor: constructorInfo,\n }\n\n // Extract class-level generic type parameters\n if (node.typeParameters && node.typeParameters.length > 0) {\n const typeParams: Record<string, TypeParamInfo> = {}\n for (const param of node.typeParameters) {\n const paramName = param.name.getText(sourceFile)\n const info: TypeParamInfo = {}\n if (param.constraint) {\n info.constraint = typeToExample(\n param.constraint,\n undefined,\n warnings,\n ctx\n )\n }\n if (param.default) {\n info.default = typeToExample(param.default, undefined, warnings, ctx)\n }\n typeParams[paramName] = info\n }\n result.typeParams = typeParams\n }\n\n return result\n}\n\n/**\n * Transpile TypeScript source to TJS or JS + metadata\n */\n/**\n * Extract embedded test comments from source\n * These use syntax: /*test 'description' { ... }* / (without space before /)\n * They survive TS compilation and should be preserved in TJS output\n */\n// =============================================================================\n// @tjs annotations — enrich TJS output from TS source comments\n// =============================================================================\n\ninterface TjsAnnotation {\n index: number\n kind: 'predicate' | 'example' | 'skip' | 'declaration'\n text?: string // raw text for predicate/example/declaration\n}\n\n/** Valid TJS mode directives */\nconst VALID_TJS_MODES = new Set([\n 'TjsStrict',\n 'TjsEquals',\n 'TjsClass',\n 'TjsDate',\n 'TjsNoeval',\n 'TjsNoVar',\n 'TjsStandard',\n 'TjsSafeEval',\n])\n\n/**\n * Extract TJS mode directives from /* @tjs ... * / comments.\n * e.g. /* @tjs TjsClass TjsEquals * / → ['TjsClass', 'TjsEquals']\n */\nfunction extractTjsModes(source: string): string[] {\n const modes: string[] = []\n const re = /\\/\\*\\s*@tjs\\s+((?:Tjs\\w+\\s*)+)\\*\\//g\n let m\n while ((m = re.exec(source)) !== null) {\n const words = m[1].trim().split(/\\s+/)\n for (const word of words) {\n if (VALID_TJS_MODES.has(word) && !modes.includes(word)) {\n modes.push(word)\n }\n }\n }\n return modes\n}\n\n/**\n * Extract @tjs annotations from source comments.\n *\n * Supported forms:\n * /* @tjs-skip * /\n * /* @tjs example: { name: '', age: 0 } * /\n * /* @tjs predicate(x, T) { return typeof x === 'object' && T(x.value) } * /\n * /* @tjs declaration { value: T; path: string } * /\n */\nfunction extractTjsAnnotations(source: string): TjsAnnotation[] {\n const annotations: TjsAnnotation[] = []\n\n // @tjs-skip\n const skipRe = /\\/\\*\\s*@tjs-skip\\s*\\*\\//g\n let m\n while ((m = skipRe.exec(source)) !== null) {\n annotations.push({ index: m.index, kind: 'skip' })\n }\n\n // @tjs predicate(...) { ... }\n const predRe = /\\/\\*\\s*@tjs\\s+predicate(\\([^)]*\\)\\s*\\{[\\s\\S]*?\\})\\s*\\*\\//g\n while ((m = predRe.exec(source)) !== null) {\n annotations.push({\n index: m.index,\n kind: 'predicate',\n text: `predicate${m[1].trim()}`,\n })\n }\n\n // @tjs example: ...\n const exRe = /\\/\\*\\s*@tjs\\s+example:\\s*([\\s\\S]*?)\\s*\\*\\//g\n while ((m = exRe.exec(source)) !== null) {\n annotations.push({ index: m.index, kind: 'example', text: m[1].trim() })\n }\n\n // @tjs declaration { ... }\n const declRe = /\\/\\*\\s*@tjs\\s+declaration\\s*(\\{[\\s\\S]*?\\})\\s*\\*\\//g\n while ((m = declRe.exec(source)) !== null) {\n annotations.push({\n index: m.index,\n kind: 'declaration',\n text: m[1].trim(),\n })\n }\n\n return annotations.sort((a, b) => a.index - b.index)\n}\n\n/**\n * Build a map from declaration name → annotations that precede it.\n */\nfunction buildAnnotationMap(\n annotations: TjsAnnotation[],\n sourceFile: ts.SourceFile\n): Map<string, TjsAnnotation[]> {\n const result = new Map<string, TjsAnnotation[]>()\n if (annotations.length === 0) return result\n\n const statements = sourceFile.statements\n for (let si = 0; si < statements.length; si++) {\n const stmt = statements[si]\n let name: string | undefined\n\n if (ts.isInterfaceDeclaration(stmt)) {\n name = stmt.name.getText(sourceFile)\n } else if (ts.isTypeAliasDeclaration(stmt)) {\n name = stmt.name.getText(sourceFile)\n } else if (ts.isEnumDeclaration(stmt)) {\n name = stmt.name.getText(sourceFile)\n }\n\n if (!name) continue\n\n const stmtStart = stmt.getStart(sourceFile)\n const prevEnd = si > 0 ? statements[si - 1].getEnd() : 0\n\n const matching = annotations.filter(\n (a) => a.index >= prevEnd && a.index < stmtStart\n )\n if (matching.length > 0) {\n result.set(name, matching)\n }\n }\n\n return result\n}\n\nfunction extractEmbeddedTestComments(source: string): string[] {\n const tests: string[] = []\n // Match: /*test 'description' { ... }*/ or /*test { ... }*/\n const embeddedRegex =\n /\\/\\*test\\s+(['\"`])([^'\"`]*)\\1\\s*\\{[\\s\\S]*?\\}\\s*\\*\\/|\\/\\*test\\s*\\{[\\s\\S]*?\\}\\s*\\*\\//g\n\n let match\n while ((match = embeddedRegex.exec(source)) !== null) {\n tests.push(match[0])\n }\n return tests\n}\n\n/**\n * Extract top-level TJS doc comments (/*# ... *\\/) from source with position info.\n * These need to be preserved in TJS output in their original positions.\n * Comments inside function bodies are already preserved by the TS transpiler.\n */\nfunction extractDocComments(\n source: string\n): Array<{ content: string; index: number }> {\n const comments: Array<{ content: string; index: number }> = []\n const docRegex = /\\/\\*#[\\s\\S]*?\\*\\//g\n\n // Track brace depth to identify top-level comments\n let braceDepth = 0\n let inString: string | null = null\n\n // Scan source to find brace depths at each position\n const braceDepthAt: number[] = []\n for (let i = 0; i < source.length; i++) {\n const ch = source[i]\n const prev = i > 0 ? source[i - 1] : ''\n\n // Handle string literals\n if (!inString && (ch === '\"' || ch === \"'\" || ch === '`')) {\n inString = ch\n } else if (inString && ch === inString && prev !== '\\\\') {\n inString = null\n }\n\n // Track braces only outside strings\n if (!inString) {\n if (ch === '{') braceDepth++\n if (ch === '}') braceDepth--\n }\n\n braceDepthAt[i] = braceDepth\n }\n\n let match\n while ((match = docRegex.exec(source)) !== null) {\n // Only include comments at top level (brace depth 0)\n if (braceDepthAt[match.index] === 0) {\n comments.push({\n content: match[0],\n index: match.index,\n })\n }\n }\n return comments\n}\n\nexport function fromTS(\n source: string,\n options: FromTSOptions = {}\n): FromTSResult {\n const { emitTJS = false, filename = 'input.ts' } = options\n const warnings: string[] = []\n\n // Extract embedded test comments before TS parsing (they need to be preserved)\n const embeddedTests = extractEmbeddedTestComments(source)\n\n // Extract doc comments (/*# ... */) with position info for TJS output\n const docComments = emitTJS ? extractDocComments(source) : []\n\n // Extract @tjs annotations for enriching TJS output\n const tjsAnnotations = emitTJS ? extractTjsAnnotations(source) : []\n\n // Extract TJS mode directives from /* @tjs TjsClass ... */ comments\n const tjsModes = extractTjsModes(source)\n const hasTjsClass =\n tjsModes.includes('TjsClass') || tjsModes.includes('TjsStrict')\n\n // Parse TypeScript\n const sourceFile = ts.createSourceFile(\n filename,\n source,\n ts.ScriptTarget.Latest,\n true\n )\n\n // Build annotation map from @tjs comments\n const annotationMap = emitTJS\n ? buildAnnotationMap(tjsAnnotations, sourceFile)\n : new Map<string, TjsAnnotation[]>()\n\n const tjsFunctions: string[] = []\n const seenTypeNames = new Set<string>() // Track emitted type names to avoid duplicates\n const metadata: Record<string, FunctionTypeInfo> = {}\n const classMetadata: Record<string, ClassTypeInfo> = {}\n\n // Track which doc comments have been emitted (by index in docComments array)\n const emittedDocComments = new Set<number>()\n\n // Helper: emit any doc comments that appear before a given source position\n const emitDocCommentsBefore = (pos: number) => {\n for (let i = 0; i < docComments.length; i++) {\n const doc = docComments[i]\n if (!emittedDocComments.has(i) && doc.index < pos) {\n tjsFunctions.push(doc.content)\n emittedDocComments.add(i)\n }\n }\n }\n\n // Build type alias and interface maps first (first pass)\n const typeAliases = new Map<string, ts.TypeNode>()\n const interfaces = new Map<string, ts.InterfaceDeclaration>()\n\n function collectTypes(node: ts.Node) {\n if (ts.isTypeAliasDeclaration(node)) {\n typeAliases.set(node.name.getText(sourceFile), node.type)\n }\n if (ts.isInterfaceDeclaration(node)) {\n const name = node.name.getText(sourceFile)\n const existing = interfaces.get(name)\n if (existing) {\n // Merge members (TS interface merging)\n const merged = ts.factory.updateInterfaceDeclaration(\n existing,\n existing.modifiers,\n existing.name,\n existing.typeParameters,\n existing.heritageClauses,\n [...existing.members, ...node.members]\n )\n interfaces.set(name, merged)\n } else {\n interfaces.set(name, node)\n }\n }\n ts.forEachChild(node, collectTypes)\n }\n collectTypes(sourceFile)\n\n // Create resolution context\n const resolutionCtx: TypeResolutionContext = {\n typeAliases,\n interfaces,\n sourceFile,\n warnings,\n }\n\n // Pre-scan: detect function overload groups\n // In TS, overloads are N bodyless signatures + 1 implementation with body\n const overloadGroups = new Map<\n string,\n {\n signatures: ts.FunctionDeclaration[] // body === undefined\n implementation: ts.FunctionDeclaration | null // has body\n }\n >()\n for (const stmt of sourceFile.statements) {\n if (ts.isFunctionDeclaration(stmt) && stmt.name) {\n const name = stmt.name.getText(sourceFile)\n if (!overloadGroups.has(name)) {\n overloadGroups.set(name, { signatures: [], implementation: null })\n }\n const group = overloadGroups.get(name)!\n if (stmt.body) {\n group.implementation = stmt\n } else {\n group.signatures.push(stmt)\n }\n }\n }\n // Only keep groups that actually have overloads (signatures + implementation)\n for (const [name, group] of overloadGroups) {\n if (group.signatures.length === 0 || !group.implementation) {\n overloadGroups.delete(name)\n }\n }\n\n // Walk top-level statements only (don't recurse into function bodies)\n for (const statement of sourceFile.statements) {\n let handled = false\n\n // Emit any doc comments before this statement\n if (emitTJS) {\n emitDocCommentsBefore(statement.getStart(sourceFile))\n }\n\n // Handle: function foo() {}\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n const funcName = statement.name.getText(sourceFile)\n handled = true\n\n const overloadGroup = overloadGroups.get(funcName)\n\n if (overloadGroup) {\n // This function is part of an overload group\n if (!statement.body) {\n // Skip bodyless signatures — handled when we encounter the implementation\n } else {\n // Implementation: emit the entire overload group\n if (emitTJS) {\n tjsFunctions.push(\n ...emitOverloadGroup(\n overloadGroup.signatures,\n statement,\n sourceFile,\n warnings\n )\n )\n } else {\n const overloads: FunctionTypeInfo[] = []\n for (const sig of overloadGroup.signatures) {\n overloads.push(\n extractFunctionMetadata(\n sig,\n sourceFile,\n warnings,\n resolutionCtx\n )\n )\n }\n const implInfo = extractFunctionMetadata(\n statement,\n sourceFile,\n warnings,\n resolutionCtx\n )\n implInfo.overloads = overloads\n metadata[funcName] = implInfo\n }\n }\n } else {\n // Normal (non-overloaded) function\n if (emitTJS) {\n tjsFunctions.push(\n transformFunctionToTJS(\n statement,\n sourceFile,\n undefined,\n warnings,\n true,\n resolutionCtx\n )\n )\n } else {\n metadata[funcName] = extractFunctionMetadata(\n statement,\n sourceFile,\n warnings,\n resolutionCtx\n )\n }\n }\n }\n\n // Handle: const foo = () => {} or const foo = function() {}\n // Also handle: const x = ..., let x = ..., var x = ... (non-function)\n if (ts.isVariableStatement(statement)) {\n let hasFunctionDecl = false\n\n // Check if the variable statement itself is exported\n const varIsExported = statement.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n\n for (const decl of statement.declarationList.declarations) {\n if (\n ts.isIdentifier(decl.name) &&\n decl.initializer &&\n (ts.isArrowFunction(decl.initializer) ||\n ts.isFunctionExpression(decl.initializer))\n ) {\n hasFunctionDecl = true\n const funcName = decl.name.getText(sourceFile)\n const funcNode = decl.initializer\n\n if (emitTJS) {\n let tjsFunc = transformFunctionToTJS(\n funcNode,\n sourceFile,\n funcName,\n warnings,\n true,\n resolutionCtx\n )\n // Arrow/const functions: export is on the VariableStatement\n // Insert after any line comment or degraded comment\n if (varIsExported && !tjsFunc.includes('export ')) {\n const firstFuncLine = tjsFunc.search(/^(async\\s+)?function[\\s*]/m)\n if (firstFuncLine > 0) {\n tjsFunc =\n tjsFunc.slice(0, firstFuncLine) +\n 'export ' +\n tjsFunc.slice(firstFuncLine)\n } else {\n tjsFunc = 'export ' + tjsFunc\n }\n }\n tjsFunctions.push(tjsFunc)\n } else {\n const info = extractFunctionMetadata(\n funcNode,\n sourceFile,\n warnings,\n resolutionCtx\n )\n info.name = funcName\n metadata[funcName] = info\n }\n }\n }\n\n // If this variable statement doesn't contain function declarations,\n // transpile and preserve it (strips type annotations)\n if (!hasFunctionDecl && emitTJS) {\n const transpiled = ts.transpileModule(statement.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n tjsFunctions.push(transpiled.outputText.trim())\n }\n\n handled = true\n }\n\n // Handle: interface Foo { ... }\n if (ts.isInterfaceDeclaration(statement)) {\n handled = true\n if (emitTJS) {\n const typeName = statement.name.getText(sourceFile)\n const annotations = annotationMap.get(typeName)\n if (!seenTypeNames.has(typeName)) {\n seenTypeNames.add(typeName)\n // @tjs-skip — omit this declaration entirely\n if (annotations?.some((a) => a.kind === 'skip')) {\n // Skip — do not emit\n } else {\n // Use merged interface (handles declaration merging)\n const merged = interfaces.get(typeName) || statement\n const typeDecl = transformInterfaceToType(\n merged,\n sourceFile,\n warnings,\n annotations\n )\n if (typeDecl) {\n const isExported = statement.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n tjsFunctions.push(\n isExported\n ? typeDecl.replace(/^(\\/\\*[\\s\\S]*?\\*\\/\\s*)?/, '$1export ')\n : typeDecl\n )\n }\n }\n }\n }\n }\n\n // Handle: type Foo = { ... }\n if (ts.isTypeAliasDeclaration(statement)) {\n handled = true\n if (emitTJS) {\n const typeName = statement.name.getText(sourceFile)\n const annotations = annotationMap.get(typeName)\n if (!seenTypeNames.has(typeName)) {\n seenTypeNames.add(typeName)\n // @tjs-skip — omit this declaration entirely\n if (annotations?.some((a) => a.kind === 'skip')) {\n // Skip — do not emit\n } else {\n const typeDecl = transformTypeAliasToType(\n statement,\n sourceFile,\n warnings,\n annotations\n )\n if (typeDecl) {\n const isExported = statement.modifiers?.some(\n (m) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n tjsFunctions.push(\n isExported\n ? typeDecl.replace(/^(\\/\\*[\\s\\S]*?\\*\\/\\s*)?/, '$1export ')\n : typeDecl\n )\n }\n }\n }\n }\n }\n\n // Handle: enum Status { Pending, Active, Done }\n if (ts.isEnumDeclaration(statement)) {\n handled = true\n if (emitTJS) {\n const enumName = statement.name.getText(sourceFile)\n const annotations = annotationMap.get(enumName)\n if (!seenTypeNames.has(enumName)) {\n seenTypeNames.add(enumName)\n if (annotations?.some((a) => a.kind === 'skip')) {\n // Skip — do not emit\n } else {\n const enumDecl = transformEnumToTJS(statement, sourceFile, warnings)\n if (enumDecl) {\n tjsFunctions.push(enumDecl)\n }\n }\n }\n }\n }\n\n // Handle: class Foo { ... }\n if (ts.isClassDeclaration(statement) && statement.name) {\n const className = statement.name.getText(sourceFile)\n handled = true\n if (emitTJS) {\n const classDecl = transformClassToTJS(\n statement,\n sourceFile,\n warnings,\n undefined,\n hasTjsClass\n )\n tjsFunctions.push(classDecl)\n } else {\n classMetadata[className] = extractClassMetadata(\n statement,\n sourceFile,\n warnings,\n resolutionCtx\n )\n }\n }\n\n // Handle: import statements (strip type-only imports, keep value imports)\n if (ts.isImportDeclaration(statement)) {\n handled = true\n if (emitTJS) {\n // Check if it's a type-only import\n const isTypeOnly =\n statement.importClause?.isTypeOnly ||\n (statement.importClause?.namedBindings &&\n ts.isNamedImports(statement.importClause.namedBindings) &&\n statement.importClause.namedBindings.elements.every(\n (e) => e.isTypeOnly\n ))\n\n if (!isTypeOnly) {\n // Emit import directly — don't use ts.transpileModule which\n // strips \"unused\" imports in isolation. Filter out type-only\n // specifiers manually.\n if (\n statement.importClause?.namedBindings &&\n ts.isNamedImports(statement.importClause.namedBindings)\n ) {\n const valueSpecs = statement.importClause.namedBindings.elements\n .filter((e) => !e.isTypeOnly)\n .map((e) => {\n const name = e.name.getText(sourceFile)\n const propName = e.propertyName?.getText(sourceFile)\n return propName ? `${propName} as ${name}` : name\n })\n if (valueSpecs.length > 0) {\n const modSpec = (statement.moduleSpecifier as ts.StringLiteral)\n .text\n tjsFunctions.push(\n `import { ${valueSpecs.join(', ')} } from '${modSpec}'`\n )\n }\n } else {\n // Default import, namespace import, or side-effect import\n // Emit as-is (strip types via getText which preserves structure)\n const importText = statement.getText(sourceFile)\n // Remove type annotations by running through TS\n const cleaned = importText\n .replace(/\\btype\\s+/g, '')\n .replace(/\\s*:\\s*\\w+/g, '')\n tjsFunctions.push(cleaned)\n }\n }\n }\n }\n\n // Handle: export statements\n if (ts.isExportDeclaration(statement) || ts.isExportAssignment(statement)) {\n handled = true\n if (emitTJS) {\n const transpiled = ts.transpileModule(statement.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n const trimmed = transpiled.outputText.trim()\n if (trimmed) {\n tjsFunctions.push(trimmed)\n }\n }\n }\n\n // Handle: expression statements (console.log(...), foo(), etc.)\n // and any other unhandled statements\n if (!handled && emitTJS) {\n const transpiled = ts.transpileModule(statement.getText(sourceFile), {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n const trimmed = transpiled.outputText.trim()\n if (trimmed) {\n tjsFunctions.push(trimmed)\n }\n }\n }\n\n if (emitTJS) {\n // Emit any remaining doc comments (after all statements)\n emitDocCommentsBefore(Infinity)\n\n // Include source file annotation and TJS mode directives\n const sourceFileName = filename || 'unknown'\n const modesLine = tjsModes.length > 0 ? tjsModes.join('\\n') + '\\n\\n' : ''\n const header = `${modesLine}/* tjs <- ${sourceFileName} */\\n\\n`\n\n // Append embedded test comments (they were extracted from original source)\n const testsSection =\n embeddedTests.length > 0 ? '\\n\\n' + embeddedTests.join('\\n\\n') : ''\n\n return {\n code: header + tjsFunctions.join('\\n\\n') + testsSection,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n }\n\n // For JS output, strip types and add metadata\n const jsOutput = ts.transpileModule(source, {\n compilerOptions: {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n removeComments: false,\n },\n })\n\n // Append __tjs metadata for each function\n let code = jsOutput.outputText\n for (const [funcName, info] of Object.entries(metadata)) {\n const metadataObj: Record<string, any> = {\n params: Object.fromEntries(\n Object.entries(info.params).map(([k, v]) => [\n k,\n { type: v.type.kind, required: v.required, default: v.default },\n ])\n ),\n returns: info.returns ? { type: info.returns.kind } : undefined,\n }\n\n // Include type parameters (generics) if present\n if (info.typeParams) {\n metadataObj.typeParams = info.typeParams\n }\n\n const metadataStr = JSON.stringify(metadataObj, null, 2)\n code += `\\n${funcName}.__tjs = ${metadataStr};\\n`\n }\n\n // Append __tjs metadata for each class\n for (const [className, info] of Object.entries(classMetadata)) {\n const metadataObj: Record<string, any> = {\n constructor: info.constructor\n ? {\n params: Object.fromEntries(\n Object.entries(info.constructor.params ?? {}).map(([k, v]) => [\n k,\n { type: v.type.kind, required: v.required, default: v.default },\n ])\n ),\n }\n : undefined,\n methods: Object.fromEntries(\n Object.entries(info.methods ?? {}).map(([name, m]) => [\n name,\n {\n params: Object.fromEntries(\n Object.entries(m.params ?? {}).map(([k, v]) => [\n k,\n { type: v.type.kind, required: v.required },\n ])\n ),\n returns: m.returns ? { type: m.returns.kind } : undefined,\n },\n ])\n ),\n staticMethods: Object.fromEntries(\n Object.entries(info.staticMethods ?? {}).map(([name, m]) => [\n name,\n {\n params: Object.fromEntries(\n Object.entries(m.params ?? {}).map(([k, v]) => [\n k,\n { type: v.type.kind, required: v.required },\n ])\n ),\n returns: m.returns ? { type: m.returns.kind } : undefined,\n },\n ])\n ),\n }\n\n if (info.typeParams) {\n metadataObj.typeParams = info.typeParams\n }\n\n const metadataStr = JSON.stringify(metadataObj, null, 2)\n code += `\\n${className}.__tjs = ${metadataStr};\\n`\n\n // Wrap class to make it callable without `new`\n code += `\\n${emitClassWrapper(className)}\\n`\n }\n\n return {\n code,\n types: metadata,\n classes: Object.keys(classMetadata).length > 0 ? classMetadata : undefined,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n}\n",
|
|
21
21
|
"/**\n * TJS Schema - Runtime type system for Typed JavaScript\n *\n * Builds on tosijs-schema to provide:\n * - Schema(x) callable for inference by example\n * - Schema.type(x) for \"fixed typeof\" (null returns 'null', not 'object')\n * - All tosijs-schema methods (string, number, object, array, etc.)\n *\n * Usage:\n * Schema('hello') // Schema matching string\n * Schema(42) // Schema matching number (integer)\n * Schema(null) // Schema matching null\n * Schema(undefined) // Schema matching undefined\n * Schema([1, 2, 3]) // Schema matching array of integers\n * Schema({name: 'Anne'}) // Schema matching object with name: string\n *\n * Schema.type(null) // 'null' (not 'object' like typeof)\n * Schema.type(undefined) // 'undefined'\n * Schema.type([]) // 'array' (not 'object' like typeof)\n *\n * Schema.null.validate(x) // true if x is null\n * Schema.undefined.validate(x) // true if x is undefined\n */\n\nimport { s, type Base } from 'tosijs-schema'\n\n/**\n * Get the \"fixed\" type of a value - unlike typeof, correctly handles null and arrays\n */\nfunction getType(value: unknown): string {\n if (value === null) return 'null'\n if (value === undefined) return 'undefined'\n if (Array.isArray(value)) return 'array'\n return typeof value\n}\n\n/**\n * Infer a schema from an example value\n * This wraps tosijs-schema's s.infer() for consistency\n */\nfunction infer(value: unknown): Base<unknown> {\n return s.infer(value)\n}\n\n// The base callable function\nfunction schemaCallable(value: unknown): Base<unknown> {\n return infer(value)\n}\n\n// Add our custom methods\nschemaCallable.type = getType\nschemaCallable.infer = infer\n\n// Create the Schema callable that proxies to s for all other properties\ntype SchemaCallable = {\n (value: unknown): Base<unknown>\n type: (value: unknown) => string\n infer: (value: unknown) => Base<unknown>\n} & typeof s\n\n/**\n * Schema - callable for inference, with all tosijs-schema methods attached\n * Uses a Proxy to delegate property access to tosijs-schema's s object\n */\nexport const Schema: SchemaCallable = new Proxy(schemaCallable as any, {\n get(target, prop) {\n // Our custom methods take precedence\n if (prop === 'type') return getType\n if (prop === 'infer') return infer\n // Delegate everything else to tosijs-schema's s\n return (s as any)[prop]\n },\n apply(target, thisArg, args) {\n // Make it callable - Schema(value) infers schema\n return infer(args[0])\n },\n})\n\n// Re-export useful types from tosijs-schema\nexport type { Base, Infer } from 'tosijs-schema'\n",
|
|
22
22
|
"/**\n * IndexedDB-based cache for module metadata\n *\n * Caches transpilation results (AST, signatures, type info) to avoid\n * re-parsing unchanged source code. Particularly useful for:\n * - Playground editors (instant feedback on unchanged code)\n * - Autocomplete metadata retrieval\n * - Development workflows with rapid iteration\n *\n * @example\n * ```typescript\n * const cache = new MetadataCache()\n * await cache.open()\n *\n * // Check cache before transpiling\n * const cached = await cache.get(source)\n * if (cached) {\n * return cached // Skip transpilation\n * }\n *\n * // Transpile and cache\n * const result = transpile(source)\n * await cache.set(source, result)\n * ```\n */\n\nimport type { SeqNode } from '../builder'\nimport type { FunctionSignature, TranspileWarning } from './types'\nimport type { TJSTypeInfo } from './emitters/js'\nimport { TJS_VERSION } from './runtime'\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Cached entry for AsyncJS transpilation (ajs/transpile) */\nexport interface CachedTranspileResult {\n ast: SeqNode\n signature: FunctionSignature\n warnings: TranspileWarning[]\n}\n\n/** Cached entry for TJS transpilation (tjs/transpileToJS) */\nexport interface CachedTJSResult {\n code: string\n types: Record<string, TJSTypeInfo>\n testRunner?: string\n testCount?: number\n warnings?: string[]\n}\n\n/** Full cache entry stored in IndexedDB */\nexport interface CacheEntry {\n /** SHA-256 hash of source + version */\n hash: string\n /** TJS version used during transpilation */\n version: string\n /** Timestamp when cached */\n timestamp: number\n /** AsyncJS transpilation result */\n transpile?: CachedTranspileResult\n /** TJS transpilation result */\n tjs?: CachedTJSResult\n}\n\n/** Cache statistics */\nexport interface CacheStats {\n /** Number of entries in cache */\n entries: number\n /** Total bytes used (approximate) */\n bytes: number\n /** Cache hit count this session */\n hits: number\n /** Cache miss count this session */\n misses: number\n /** Hit rate (hits / (hits + misses)) */\n hitRate: number\n}\n\n// ============================================================================\n// Hash utilities\n// ============================================================================\n\n/**\n * Compute SHA-256 hash of source code + version\n * Falls back to simple hash if crypto.subtle unavailable\n */\nexport async function hashSource(source: string): Promise<string> {\n const input = `${TJS_VERSION}:${source}`\n\n // Try crypto.subtle (available in browsers and Node 15+)\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n const encoder = new TextEncoder()\n const data = encoder.encode(input)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n }\n\n // Fallback: simple djb2 hash (good enough for cache keys)\n let hash = 5381\n for (let i = 0; i < input.length; i++) {\n hash = ((hash << 5) + hash + input.charCodeAt(i)) >>> 0\n }\n return hash.toString(16)\n}\n\n/**\n * Synchronous hash for environments without async support\n * Uses djb2 algorithm\n */\nexport function hashSourceSync(source: string): string {\n const input = `${TJS_VERSION}:${source}`\n let hash = 5381\n for (let i = 0; i < input.length; i++) {\n hash = ((hash << 5) + hash + input.charCodeAt(i)) >>> 0\n }\n return hash.toString(16)\n}\n\n// ============================================================================\n// MetadataCache class\n// ============================================================================\n\nconst DB_NAME = 'tjs-metadata-cache'\nconst DB_VERSION = 1\nconst STORE_NAME = 'modules'\n\n/**\n * IndexedDB-based metadata cache\n *\n * Thread-safe and persistent across browser sessions.\n * Automatically handles versioning - entries from old TJS versions\n * are ignored (stale data won't cause issues).\n */\nexport class MetadataCache {\n private db: IDBDatabase | null = null\n private stats = { hits: 0, misses: 0 }\n private pendingOpen: Promise<void> | null = null\n\n /**\n * Open the cache database\n * Safe to call multiple times - will reuse existing connection\n */\n async open(): Promise<void> {\n if (this.db) return\n\n // Prevent multiple simultaneous opens\n if (this.pendingOpen) {\n return this.pendingOpen\n }\n\n this.pendingOpen = this._open()\n await this.pendingOpen\n this.pendingOpen = null\n }\n\n private async _open(): Promise<void> {\n return new Promise((resolve, _reject) => {\n if (typeof indexedDB === 'undefined') {\n // IndexedDB not available (Node.js without polyfill, etc.)\n resolve()\n return\n }\n\n const request = indexedDB.open(DB_NAME, DB_VERSION)\n\n request.onerror = () => {\n // Don't fail hard - cache is optional\n console.warn('MetadataCache: Failed to open IndexedDB', request.error)\n resolve()\n }\n\n request.onsuccess = () => {\n this.db = request.result\n resolve()\n }\n\n request.onupgradeneeded = (event) => {\n const db = (event.target as IDBOpenDBRequest).result\n\n // Create modules store with hash as key\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n const store = db.createObjectStore(STORE_NAME, { keyPath: 'hash' })\n store.createIndex('timestamp', 'timestamp')\n store.createIndex('version', 'version')\n }\n }\n })\n }\n\n /**\n * Get cached entry by source code\n * Returns undefined if not cached or version mismatch\n */\n async get(source: string): Promise<CacheEntry | undefined> {\n if (!this.db) {\n this.stats.misses++\n return undefined\n }\n\n const hash = await hashSource(source)\n\n return new Promise((resolve) => {\n const transaction = this.db!.transaction(STORE_NAME, 'readonly')\n const store = transaction.objectStore(STORE_NAME)\n const request = store.get(hash)\n\n request.onerror = () => {\n this.stats.misses++\n resolve(undefined)\n }\n\n request.onsuccess = () => {\n const entry = request.result as CacheEntry | undefined\n\n // Validate version\n if (entry && entry.version !== TJS_VERSION) {\n this.stats.misses++\n resolve(undefined)\n return\n }\n\n if (entry) {\n this.stats.hits++\n } else {\n this.stats.misses++\n }\n resolve(entry)\n }\n })\n }\n\n /**\n * Get cached transpile result (AsyncJS -> AST)\n */\n async getTranspile(\n source: string\n ): Promise<CachedTranspileResult | undefined> {\n const entry = await this.get(source)\n return entry?.transpile\n }\n\n /**\n * Get cached TJS result (TJS -> JS)\n */\n async getTJS(source: string): Promise<CachedTJSResult | undefined> {\n const entry = await this.get(source)\n return entry?.tjs\n }\n\n /**\n * Store transpile result\n */\n async setTranspile(\n source: string,\n result: CachedTranspileResult\n ): Promise<void> {\n await this._set(source, { transpile: result })\n }\n\n /**\n * Store TJS result\n */\n async setTJS(source: string, result: CachedTJSResult): Promise<void> {\n await this._set(source, { tjs: result })\n }\n\n /**\n * Store or update cache entry\n */\n private async _set(\n source: string,\n data: { transpile?: CachedTranspileResult; tjs?: CachedTJSResult }\n ): Promise<void> {\n if (!this.db) return\n\n const hash = await hashSource(source)\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction(STORE_NAME, 'readwrite')\n const store = transaction.objectStore(STORE_NAME)\n\n // Get existing entry to merge\n const getRequest = store.get(hash)\n\n getRequest.onsuccess = () => {\n const existing = getRequest.result as CacheEntry | undefined\n\n const entry: CacheEntry = {\n hash,\n version: TJS_VERSION,\n timestamp: Date.now(),\n transpile: data.transpile ?? existing?.transpile,\n tjs: data.tjs ?? existing?.tjs,\n }\n\n const putRequest = store.put(entry)\n putRequest.onerror = () => reject(putRequest.error)\n putRequest.onsuccess = () => resolve()\n }\n\n getRequest.onerror = () => reject(getRequest.error)\n })\n }\n\n /**\n * Delete a specific entry\n */\n async delete(source: string): Promise<void> {\n if (!this.db) return\n\n const hash = await hashSource(source)\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction(STORE_NAME, 'readwrite')\n const store = transaction.objectStore(STORE_NAME)\n const request = store.delete(hash)\n\n request.onerror = () => reject(request.error)\n request.onsuccess = () => resolve()\n })\n }\n\n /**\n * Clear all cached entries\n */\n async clear(): Promise<void> {\n if (!this.db) return\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction(STORE_NAME, 'readwrite')\n const store = transaction.objectStore(STORE_NAME)\n const request = store.clear()\n\n request.onerror = () => reject(request.error)\n request.onsuccess = () => {\n this.stats = { hits: 0, misses: 0 }\n resolve()\n }\n })\n }\n\n /**\n * Remove entries older than maxAge milliseconds\n * Returns count of entries removed\n */\n async prune(maxAge: number): Promise<number> {\n if (!this.db) return 0\n\n const cutoff = Date.now() - maxAge\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction(STORE_NAME, 'readwrite')\n const store = transaction.objectStore(STORE_NAME)\n const index = store.index('timestamp')\n const range = IDBKeyRange.upperBound(cutoff)\n\n let count = 0\n const request = index.openCursor(range)\n\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result\n if (cursor) {\n cursor.delete()\n count++\n cursor.continue()\n } else {\n resolve(count)\n }\n }\n\n request.onerror = () => reject(request.error)\n })\n }\n\n /**\n * Remove entries from old TJS versions\n * Returns count of entries removed\n */\n async pruneOldVersions(): Promise<number> {\n if (!this.db) return 0\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction(STORE_NAME, 'readwrite')\n const store = transaction.objectStore(STORE_NAME)\n\n let count = 0\n const request = store.openCursor()\n\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result\n if (cursor) {\n const entry = cursor.value as CacheEntry\n if (entry.version !== TJS_VERSION) {\n cursor.delete()\n count++\n }\n cursor.continue()\n } else {\n resolve(count)\n }\n }\n\n request.onerror = () => reject(request.error)\n })\n }\n\n /**\n * Get cache statistics\n */\n async getStats(): Promise<CacheStats> {\n const entries = await this.count()\n const bytes = await this.estimateSize()\n\n const total = this.stats.hits + this.stats.misses\n const hitRate = total > 0 ? this.stats.hits / total : 0\n\n return {\n entries,\n bytes,\n hits: this.stats.hits,\n misses: this.stats.misses,\n hitRate,\n }\n }\n\n /**\n * Count entries in cache\n */\n async count(): Promise<number> {\n if (!this.db) return 0\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction(STORE_NAME, 'readonly')\n const store = transaction.objectStore(STORE_NAME)\n const request = store.count()\n\n request.onerror = () => reject(request.error)\n request.onsuccess = () => resolve(request.result)\n })\n }\n\n /**\n * Estimate storage size in bytes\n */\n async estimateSize(): Promise<number> {\n if (!this.db) return 0\n\n // Use Storage API if available\n if (typeof navigator !== 'undefined' && navigator.storage?.estimate) {\n try {\n const estimate = await navigator.storage.estimate()\n return estimate.usage ?? 0\n } catch {\n // Fall through to manual estimation\n }\n }\n\n // Manual estimation by iterating entries\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction(STORE_NAME, 'readonly')\n const store = transaction.objectStore(STORE_NAME)\n\n let totalSize = 0\n const request = store.openCursor()\n\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result\n if (cursor) {\n // Rough estimate: JSON string length * 2 (UTF-16)\n totalSize += JSON.stringify(cursor.value).length * 2\n cursor.continue()\n } else {\n resolve(totalSize)\n }\n }\n\n request.onerror = () => reject(request.error)\n })\n }\n\n /**\n * Close the database connection\n */\n close(): void {\n if (this.db) {\n this.db.close()\n this.db = null\n }\n }\n\n /**\n * Check if cache is available (IndexedDB accessible)\n */\n isAvailable(): boolean {\n return this.db !== null\n }\n\n /**\n * Reset session statistics\n */\n resetStats(): void {\n this.stats = { hits: 0, misses: 0 }\n }\n}\n\n// ============================================================================\n// Global cache instance\n// ============================================================================\n\nlet globalCache: MetadataCache | null = null\n\n/**\n * Get or create the global cache instance\n * Automatically opens the database on first call\n */\nexport async function getGlobalCache(): Promise<MetadataCache> {\n if (!globalCache) {\n globalCache = new MetadataCache()\n await globalCache.open()\n }\n return globalCache\n}\n\n/**\n * Set a custom global cache instance (for testing)\n */\nexport function setGlobalCache(cache: MetadataCache | null): void {\n globalCache = cache\n}\n",
|
|
23
23
|
"// AST walker module for ESTree compatible trees\n\n// A simple walk is one where you simply specify callbacks to be\n// called on specific nodes. The last two arguments are optional. A\n// simple use would be\n//\n// walk.simple(myTree, {\n// Expression: function(node) { ... }\n// });\n//\n// to do something with all expressions. All ESTree node types\n// can be used to identify node types, as well as Expression and\n// Statement, which denote categories of nodes.\n//\n// The base argument can be used to pass a custom (recursive)\n// walker, and state can be used to give this walked an initial\n// state.\n\nfunction simple(node, visitors, baseVisitor, state, override) {\n if (!baseVisitor) { baseVisitor = base\n ; }(function c(node, st, override) {\n var type = override || node.type;\n baseVisitor[type](node, st, c);\n if (visitors[type]) { visitors[type](node, st); }\n })(node, state, override);\n}\n\n// An ancestor walk keeps an array of ancestor nodes (including the\n// current node) and passes them to the callback as third parameter\n// (and also as state parameter when no other state is present).\nfunction ancestor(node, visitors, baseVisitor, state, override) {\n var ancestors = [];\n if (!baseVisitor) { baseVisitor = base\n ; }(function c(node, st, override) {\n var type = override || node.type;\n var isNew = node !== ancestors[ancestors.length - 1];\n if (isNew) { ancestors.push(node); }\n baseVisitor[type](node, st, c);\n if (visitors[type]) { visitors[type](node, st || ancestors, ancestors); }\n if (isNew) { ancestors.pop(); }\n })(node, state, override);\n}\n\n// A recursive walk is one where your functions override the default\n// walkers. They can modify and replace the state parameter that's\n// threaded through the walk, and can opt how and whether to walk\n// their child nodes (by calling their third argument on these\n// nodes).\nfunction recursive(node, state, funcs, baseVisitor, override) {\n var visitor = funcs ? make(funcs, baseVisitor || undefined) : baseVisitor\n ;(function c(node, st, override) {\n visitor[override || node.type](node, st, c);\n })(node, state, override);\n}\n\nfunction makeTest(test) {\n if (typeof test === \"string\")\n { return function (type) { return type === test; } }\n else if (!test)\n { return function () { return true; } }\n else\n { return test }\n}\n\nvar Found = function Found(node, state) { this.node = node; this.state = state; };\n\n// A full walk triggers the callback on each node\nfunction full(node, callback, baseVisitor, state, override) {\n if (!baseVisitor) { baseVisitor = base; }\n var last\n ;(function c(node, st, override) {\n var type = override || node.type;\n baseVisitor[type](node, st, c);\n if (last !== node) {\n callback(node, st, type);\n last = node;\n }\n })(node, state, override);\n}\n\n// An fullAncestor walk is like an ancestor walk, but triggers\n// the callback on each node\nfunction fullAncestor(node, callback, baseVisitor, state) {\n if (!baseVisitor) { baseVisitor = base; }\n var ancestors = [], last\n ;(function c(node, st, override) {\n var type = override || node.type;\n var isNew = node !== ancestors[ancestors.length - 1];\n if (isNew) { ancestors.push(node); }\n baseVisitor[type](node, st, c);\n if (last !== node) {\n callback(node, st || ancestors, ancestors, type);\n last = node;\n }\n if (isNew) { ancestors.pop(); }\n })(node, state);\n}\n\n// Find a node with a given start, end, and type (all are optional,\n// null can be used as wildcard). Returns a {node, state} object, or\n// undefined when it doesn't find a matching node.\nfunction findNodeAt(node, start, end, test, baseVisitor, state) {\n if (!baseVisitor) { baseVisitor = base; }\n test = makeTest(test);\n try {\n (function c(node, st, override) {\n var type = override || node.type;\n if ((start == null || node.start <= start) &&\n (end == null || node.end >= end))\n { baseVisitor[type](node, st, c); }\n if ((start == null || node.start === start) &&\n (end == null || node.end === end) &&\n test(type, node))\n { throw new Found(node, st) }\n })(node, state);\n } catch (e) {\n if (e instanceof Found) { return e }\n throw e\n }\n}\n\n// Find the innermost node of a given type that contains the given\n// position. Interface similar to findNodeAt.\nfunction findNodeAround(node, pos, test, baseVisitor, state) {\n test = makeTest(test);\n if (!baseVisitor) { baseVisitor = base; }\n try {\n (function c(node, st, override) {\n var type = override || node.type;\n if (node.start > pos || node.end < pos) { return }\n baseVisitor[type](node, st, c);\n if (test(type, node)) { throw new Found(node, st) }\n })(node, state);\n } catch (e) {\n if (e instanceof Found) { return e }\n throw e\n }\n}\n\n// Find the outermost matching node after a given position.\nfunction findNodeAfter(node, pos, test, baseVisitor, state) {\n test = makeTest(test);\n if (!baseVisitor) { baseVisitor = base; }\n try {\n (function c(node, st, override) {\n if (node.end < pos) { return }\n var type = override || node.type;\n if (node.start >= pos && test(type, node)) { throw new Found(node, st) }\n baseVisitor[type](node, st, c);\n })(node, state);\n } catch (e) {\n if (e instanceof Found) { return e }\n throw e\n }\n}\n\n// Find the outermost matching node before a given position.\nfunction findNodeBefore(node, pos, test, baseVisitor, state) {\n test = makeTest(test);\n if (!baseVisitor) { baseVisitor = base; }\n var max\n ;(function c(node, st, override) {\n if (node.start > pos) { return }\n var type = override || node.type;\n if (node.end <= pos && (!max || max.node.end < node.end) && test(type, node))\n { max = new Found(node, st); }\n baseVisitor[type](node, st, c);\n })(node, state);\n return max\n}\n\n// Used to create a custom walker. Will fill in all missing node\n// type properties with the defaults.\nfunction make(funcs, baseVisitor) {\n var visitor = Object.create(baseVisitor || base);\n for (var type in funcs) { visitor[type] = funcs[type]; }\n return visitor\n}\n\nfunction skipThrough(node, st, c) { c(node, st); }\nfunction ignore(_node, _st, _c) {}\n\n// Node walkers.\n\nvar base = {};\n\nbase.Program = base.BlockStatement = base.StaticBlock = function (node, st, c) {\n for (var i = 0, list = node.body; i < list.length; i += 1)\n {\n var stmt = list[i];\n\n c(stmt, st, \"Statement\");\n }\n};\nbase.Statement = skipThrough;\nbase.EmptyStatement = ignore;\nbase.ExpressionStatement = base.ParenthesizedExpression = base.ChainExpression =\n function (node, st, c) { return c(node.expression, st, \"Expression\"); };\nbase.IfStatement = function (node, st, c) {\n c(node.test, st, \"Expression\");\n c(node.consequent, st, \"Statement\");\n if (node.alternate) { c(node.alternate, st, \"Statement\"); }\n};\nbase.LabeledStatement = function (node, st, c) { return c(node.body, st, \"Statement\"); };\nbase.BreakStatement = base.ContinueStatement = ignore;\nbase.WithStatement = function (node, st, c) {\n c(node.object, st, \"Expression\");\n c(node.body, st, \"Statement\");\n};\nbase.SwitchStatement = function (node, st, c) {\n c(node.discriminant, st, \"Expression\");\n for (var i = 0, list = node.cases; i < list.length; i += 1) {\n var cs = list[i];\n\n c(cs, st);\n }\n};\nbase.SwitchCase = function (node, st, c) {\n if (node.test) { c(node.test, st, \"Expression\"); }\n for (var i = 0, list = node.consequent; i < list.length; i += 1)\n {\n var cons = list[i];\n\n c(cons, st, \"Statement\");\n }\n};\nbase.ReturnStatement = base.YieldExpression = base.AwaitExpression = function (node, st, c) {\n if (node.argument) { c(node.argument, st, \"Expression\"); }\n};\nbase.ThrowStatement = base.SpreadElement =\n function (node, st, c) { return c(node.argument, st, \"Expression\"); };\nbase.TryStatement = function (node, st, c) {\n c(node.block, st, \"Statement\");\n if (node.handler) { c(node.handler, st); }\n if (node.finalizer) { c(node.finalizer, st, \"Statement\"); }\n};\nbase.CatchClause = function (node, st, c) {\n if (node.param) { c(node.param, st, \"Pattern\"); }\n c(node.body, st, \"Statement\");\n};\nbase.WhileStatement = base.DoWhileStatement = function (node, st, c) {\n c(node.test, st, \"Expression\");\n c(node.body, st, \"Statement\");\n};\nbase.ForStatement = function (node, st, c) {\n if (node.init) { c(node.init, st, \"ForInit\"); }\n if (node.test) { c(node.test, st, \"Expression\"); }\n if (node.update) { c(node.update, st, \"Expression\"); }\n c(node.body, st, \"Statement\");\n};\nbase.ForInStatement = base.ForOfStatement = function (node, st, c) {\n c(node.left, st, \"ForInit\");\n c(node.right, st, \"Expression\");\n c(node.body, st, \"Statement\");\n};\nbase.ForInit = function (node, st, c) {\n if (node.type === \"VariableDeclaration\") { c(node, st); }\n else { c(node, st, \"Expression\"); }\n};\nbase.DebuggerStatement = ignore;\n\nbase.FunctionDeclaration = function (node, st, c) { return c(node, st, \"Function\"); };\nbase.VariableDeclaration = function (node, st, c) {\n for (var i = 0, list = node.declarations; i < list.length; i += 1)\n {\n var decl = list[i];\n\n c(decl, st);\n }\n};\nbase.VariableDeclarator = function (node, st, c) {\n c(node.id, st, \"Pattern\");\n if (node.init) { c(node.init, st, \"Expression\"); }\n};\n\nbase.Function = function (node, st, c) {\n if (node.id) { c(node.id, st, \"Pattern\"); }\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n c(param, st, \"Pattern\");\n }\n c(node.body, st, node.expression ? \"Expression\" : \"Statement\");\n};\n\nbase.Pattern = function (node, st, c) {\n if (node.type === \"Identifier\")\n { c(node, st, \"VariablePattern\"); }\n else if (node.type === \"MemberExpression\")\n { c(node, st, \"MemberPattern\"); }\n else\n { c(node, st); }\n};\nbase.VariablePattern = ignore;\nbase.MemberPattern = skipThrough;\nbase.RestElement = function (node, st, c) { return c(node.argument, st, \"Pattern\"); };\nbase.ArrayPattern = function (node, st, c) {\n for (var i = 0, list = node.elements; i < list.length; i += 1) {\n var elt = list[i];\n\n if (elt) { c(elt, st, \"Pattern\"); }\n }\n};\nbase.ObjectPattern = function (node, st, c) {\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n if (prop.type === \"Property\") {\n if (prop.computed) { c(prop.key, st, \"Expression\"); }\n c(prop.value, st, \"Pattern\");\n } else if (prop.type === \"RestElement\") {\n c(prop.argument, st, \"Pattern\");\n }\n }\n};\n\nbase.Expression = skipThrough;\nbase.ThisExpression = base.Super = base.MetaProperty = ignore;\nbase.ArrayExpression = function (node, st, c) {\n for (var i = 0, list = node.elements; i < list.length; i += 1) {\n var elt = list[i];\n\n if (elt) { c(elt, st, \"Expression\"); }\n }\n};\nbase.ObjectExpression = function (node, st, c) {\n for (var i = 0, list = node.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n c(prop, st);\n }\n};\nbase.FunctionExpression = base.ArrowFunctionExpression = base.FunctionDeclaration;\nbase.SequenceExpression = function (node, st, c) {\n for (var i = 0, list = node.expressions; i < list.length; i += 1)\n {\n var expr = list[i];\n\n c(expr, st, \"Expression\");\n }\n};\nbase.TemplateLiteral = function (node, st, c) {\n for (var i = 0, list = node.quasis; i < list.length; i += 1)\n {\n var quasi = list[i];\n\n c(quasi, st);\n }\n\n for (var i$1 = 0, list$1 = node.expressions; i$1 < list$1.length; i$1 += 1)\n {\n var expr = list$1[i$1];\n\n c(expr, st, \"Expression\");\n }\n};\nbase.TemplateElement = ignore;\nbase.UnaryExpression = base.UpdateExpression = function (node, st, c) {\n c(node.argument, st, \"Expression\");\n};\nbase.BinaryExpression = base.LogicalExpression = function (node, st, c) {\n c(node.left, st, \"Expression\");\n c(node.right, st, \"Expression\");\n};\nbase.AssignmentExpression = base.AssignmentPattern = function (node, st, c) {\n c(node.left, st, \"Pattern\");\n c(node.right, st, \"Expression\");\n};\nbase.ConditionalExpression = function (node, st, c) {\n c(node.test, st, \"Expression\");\n c(node.consequent, st, \"Expression\");\n c(node.alternate, st, \"Expression\");\n};\nbase.NewExpression = base.CallExpression = function (node, st, c) {\n c(node.callee, st, \"Expression\");\n if (node.arguments)\n { for (var i = 0, list = node.arguments; i < list.length; i += 1)\n {\n var arg = list[i];\n\n c(arg, st, \"Expression\");\n } }\n};\nbase.MemberExpression = function (node, st, c) {\n c(node.object, st, \"Expression\");\n if (node.computed) { c(node.property, st, \"Expression\"); }\n};\nbase.ExportNamedDeclaration = base.ExportDefaultDeclaration = function (node, st, c) {\n if (node.declaration)\n { c(node.declaration, st, node.type === \"ExportNamedDeclaration\" || node.declaration.id ? \"Statement\" : \"Expression\"); }\n if (node.source) { c(node.source, st, \"Expression\"); }\n};\nbase.ExportAllDeclaration = function (node, st, c) {\n if (node.exported)\n { c(node.exported, st); }\n c(node.source, st, \"Expression\");\n};\nbase.ImportDeclaration = function (node, st, c) {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1)\n {\n var spec = list[i];\n\n c(spec, st);\n }\n c(node.source, st, \"Expression\");\n};\nbase.ImportExpression = function (node, st, c) {\n c(node.source, st, \"Expression\");\n};\nbase.ImportSpecifier = base.ImportDefaultSpecifier = base.ImportNamespaceSpecifier = base.Identifier = base.PrivateIdentifier = base.Literal = ignore;\n\nbase.TaggedTemplateExpression = function (node, st, c) {\n c(node.tag, st, \"Expression\");\n c(node.quasi, st, \"Expression\");\n};\nbase.ClassDeclaration = base.ClassExpression = function (node, st, c) { return c(node, st, \"Class\"); };\nbase.Class = function (node, st, c) {\n if (node.id) { c(node.id, st, \"Pattern\"); }\n if (node.superClass) { c(node.superClass, st, \"Expression\"); }\n c(node.body, st);\n};\nbase.ClassBody = function (node, st, c) {\n for (var i = 0, list = node.body; i < list.length; i += 1)\n {\n var elt = list[i];\n\n c(elt, st);\n }\n};\nbase.MethodDefinition = base.PropertyDefinition = base.Property = function (node, st, c) {\n if (node.computed) { c(node.key, st, \"Expression\"); }\n if (node.value) { c(node.value, st, \"Expression\"); }\n};\n\nexport { ancestor, base, findNodeAfter, findNodeAround, findNodeAt, findNodeBefore, full, fullAncestor, make, recursive, simple };\n",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"/**\n * Timestamp - Pure functions for ISO 8601 timestamp strings\n *\n * No Date warts:\n * - Months are 1-based (January = 1)\n * - All functions are pure (string in, string out)\n * - No mutable objects\n * - UTC by default, explicit timezone for display\n */\n\n/**\n * ISO 8601 timestamp string type\n * e.g., \"2024-01-15T10:30:00.000Z\"\n */\nexport type TimestampString = string\n\n/**\n * Validate that a string is a valid ISO 8601 timestamp\n */\nexport function isValid(ts: string): ts is TimestampString {\n if (typeof ts !== 'string') return false\n const d = new Date(ts)\n return !isNaN(d.getTime()) && ts.includes('T')\n}\n\n/**\n * Get the current timestamp as ISO string\n */\nexport function now(): TimestampString {\n return new Date().toISOString()\n}\n\n/**\n * Create a timestamp from components\n * IMPORTANT: month is 1-based (1 = January, 12 = December)\n */\nexport function from(\n year: number,\n month: number,\n day: number,\n hour = 0,\n minute = 0,\n second = 0,\n ms = 0\n): TimestampString {\n // Convert 1-based month to 0-based for Date\n const d = new Date(Date.UTC(year, month - 1, day, hour, minute, second, ms))\n return d.toISOString()\n}\n\n/**\n * Parse a flexible date string into ISO timestamp\n * Handles various formats and normalizes to UTC\n */\nexport function parse(input: string): TimestampString {\n const d = new Date(input)\n if (isNaN(d.getTime())) {\n throw new Error(`Invalid date string: ${input}`)\n }\n return d.toISOString()\n}\n\n/**\n * Try to parse a date string, returning null on failure\n */\nexport function tryParse(input: string): TimestampString | null {\n try {\n return parse(input)\n } catch {\n return null\n }\n}\n\n// ============================================================================\n// Arithmetic\n// ============================================================================\n\n/**\n * Add milliseconds to a timestamp\n */\nexport function addMilliseconds(\n ts: TimestampString,\n ms: number\n): TimestampString {\n const d = new Date(ts)\n d.setTime(d.getTime() + ms)\n return d.toISOString()\n}\n\n/**\n * Add seconds to a timestamp\n */\nexport function addSeconds(\n ts: TimestampString,\n seconds: number\n): TimestampString {\n return addMilliseconds(ts, seconds * 1000)\n}\n\n/**\n * Add minutes to a timestamp\n */\nexport function addMinutes(\n ts: TimestampString,\n minutes: number\n): TimestampString {\n return addMilliseconds(ts, minutes * 60 * 1000)\n}\n\n/**\n * Add hours to a timestamp\n */\nexport function addHours(ts: TimestampString, hours: number): TimestampString {\n return addMilliseconds(ts, hours * 60 * 60 * 1000)\n}\n\n/**\n * Add days to a timestamp\n */\nexport function addDays(ts: TimestampString, days: number): TimestampString {\n return addMilliseconds(ts, days * 24 * 60 * 60 * 1000)\n}\n\n/**\n * Add weeks to a timestamp\n */\nexport function addWeeks(ts: TimestampString, weeks: number): TimestampString {\n return addDays(ts, weeks * 7)\n}\n\n/**\n * Add months to a timestamp\n * Handles month overflow correctly (e.g., Jan 31 + 1 month = Feb 28/29)\n */\nexport function addMonths(\n ts: TimestampString,\n months: number\n): TimestampString {\n const d = new Date(ts)\n const targetMonth = d.getUTCMonth() + months\n d.setUTCMonth(targetMonth)\n\n // Handle overflow (e.g., Jan 31 + 1 month shouldn't become Mar 3)\n // If the day changed, we overflowed - go back to last day of target month\n if (d.getUTCMonth() !== ((targetMonth % 12) + 12) % 12) {\n d.setUTCDate(0) // Last day of previous month\n }\n\n return d.toISOString()\n}\n\n/**\n * Add years to a timestamp\n * Handles leap years correctly (Feb 29 + 1 year = Feb 28)\n */\nexport function addYears(ts: TimestampString, years: number): TimestampString {\n const d = new Date(ts)\n const originalDay = d.getUTCDate()\n d.setUTCFullYear(d.getUTCFullYear() + years)\n\n // Handle Feb 29 -> Feb 28 in non-leap years\n if (d.getUTCDate() !== originalDay) {\n d.setUTCDate(0) // Last day of previous month\n }\n\n return d.toISOString()\n}\n\n// ============================================================================\n// Difference\n// ============================================================================\n\n/**\n * Get the difference between two timestamps in milliseconds\n * Returns a - b (positive if a is after b)\n */\nexport function diff(a: TimestampString, b: TimestampString): number {\n return new Date(a).getTime() - new Date(b).getTime()\n}\n\n/**\n * Get the difference in seconds\n */\nexport function diffSeconds(a: TimestampString, b: TimestampString): number {\n return Math.floor(diff(a, b) / 1000)\n}\n\n/**\n * Get the difference in minutes\n */\nexport function diffMinutes(a: TimestampString, b: TimestampString): number {\n return Math.floor(diff(a, b) / (60 * 1000))\n}\n\n/**\n * Get the difference in hours\n */\nexport function diffHours(a: TimestampString, b: TimestampString): number {\n return Math.floor(diff(a, b) / (60 * 60 * 1000))\n}\n\n/**\n * Get the difference in days\n */\nexport function diffDays(a: TimestampString, b: TimestampString): number {\n return Math.floor(diff(a, b) / (24 * 60 * 60 * 1000))\n}\n\n// ============================================================================\n// Extractors (all return 1-based month)\n// ============================================================================\n\n/**\n * Get the year component\n */\nexport function year(ts: TimestampString): number {\n return new Date(ts).getUTCFullYear()\n}\n\n/**\n * Get the month component (1-based: 1 = January, 12 = December)\n */\nexport function month(ts: TimestampString): number {\n return new Date(ts).getUTCMonth() + 1\n}\n\n/**\n * Get the day of month component (1-31)\n */\nexport function day(ts: TimestampString): number {\n return new Date(ts).getUTCDate()\n}\n\n/**\n * Get the hour component (0-23)\n */\nexport function hour(ts: TimestampString): number {\n return new Date(ts).getUTCHours()\n}\n\n/**\n * Get the minute component (0-59)\n */\nexport function minute(ts: TimestampString): number {\n return new Date(ts).getUTCMinutes()\n}\n\n/**\n * Get the second component (0-59)\n */\nexport function second(ts: TimestampString): number {\n return new Date(ts).getUTCSeconds()\n}\n\n/**\n * Get the millisecond component (0-999)\n */\nexport function millisecond(ts: TimestampString): number {\n return new Date(ts).getUTCMilliseconds()\n}\n\n/**\n * Get the day of week (1 = Monday, 7 = Sunday) - ISO 8601 convention\n */\nexport function dayOfWeek(ts: TimestampString): number {\n const d = new Date(ts).getUTCDay()\n return d === 0 ? 7 : d // Convert Sunday from 0 to 7\n}\n\n// ============================================================================\n// Formatting\n// ============================================================================\n\n/**\n * Format a timestamp for local display\n * Uses Intl.DateTimeFormat for timezone-aware formatting\n */\nexport function toLocal(\n ts: TimestampString,\n timezone?: string,\n options?: Intl.DateTimeFormatOptions\n): string {\n const d = new Date(ts)\n const formatOptions: Intl.DateTimeFormatOptions = {\n timeZone: timezone,\n ...options,\n }\n return new Intl.DateTimeFormat(undefined, formatOptions).format(d)\n}\n\n/**\n * Format as a readable date/time string\n */\nexport function format(ts: TimestampString, timezone?: string): string {\n return toLocal(ts, timezone, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })\n}\n\n/**\n * Format as date only (no time)\n */\nexport function formatDate(ts: TimestampString, timezone?: string): string {\n return toLocal(ts, timezone, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n}\n\n/**\n * Format as time only (no date)\n */\nexport function formatTime(ts: TimestampString, timezone?: string): string {\n return toLocal(ts, timezone, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })\n}\n\n/**\n * Extract just the date portion as YYYY-MM-DD (LegalDate format)\n */\nexport function toDate(ts: TimestampString): string {\n return ts.slice(0, 10)\n}\n\n// ============================================================================\n// Comparison\n// ============================================================================\n\n/**\n * Check if a is before b\n */\nexport function isBefore(a: TimestampString, b: TimestampString): boolean {\n return diff(a, b) < 0\n}\n\n/**\n * Check if a is after b\n */\nexport function isAfter(a: TimestampString, b: TimestampString): boolean {\n return diff(a, b) > 0\n}\n\n/**\n * Check if two timestamps are equal\n */\nexport function isEqual(a: TimestampString, b: TimestampString): boolean {\n return diff(a, b) === 0\n}\n\n/**\n * Get the earlier of two timestamps\n */\nexport function min(a: TimestampString, b: TimestampString): TimestampString {\n return isBefore(a, b) ? a : b\n}\n\n/**\n * Get the later of two timestamps\n */\nexport function max(a: TimestampString, b: TimestampString): TimestampString {\n return isAfter(a, b) ? a : b\n}\n\n// ============================================================================\n// Boundaries\n// ============================================================================\n\n/**\n * Get the start of the day (00:00:00.000 UTC)\n */\nexport function startOfDay(ts: TimestampString): TimestampString {\n return from(year(ts), month(ts), day(ts))\n}\n\n/**\n * Get the end of the day (23:59:59.999 UTC)\n */\nexport function endOfDay(ts: TimestampString): TimestampString {\n return from(year(ts), month(ts), day(ts), 23, 59, 59, 999)\n}\n\n/**\n * Get the start of the month\n */\nexport function startOfMonth(ts: TimestampString): TimestampString {\n return from(year(ts), month(ts), 1)\n}\n\n/**\n * Get the end of the month\n */\nexport function endOfMonth(ts: TimestampString): TimestampString {\n const d = new Date(ts)\n d.setUTCMonth(d.getUTCMonth() + 1, 0) // Day 0 of next month = last day of this month\n d.setUTCHours(23, 59, 59, 999)\n return d.toISOString()\n}\n\n/**\n * Get the start of the year\n */\nexport function startOfYear(ts: TimestampString): TimestampString {\n return from(year(ts), 1, 1)\n}\n\n/**\n * Get the end of the year\n */\nexport function endOfYear(ts: TimestampString): TimestampString {\n return from(year(ts), 12, 31, 23, 59, 59, 999)\n}\n\n// ============================================================================\n// Default export as namespace\n// ============================================================================\n\nexport const Timestamp = {\n isValid,\n now,\n from,\n parse,\n tryParse,\n // Arithmetic\n addMilliseconds,\n addSeconds,\n addMinutes,\n addHours,\n addDays,\n addWeeks,\n addMonths,\n addYears,\n // Difference\n diff,\n diffSeconds,\n diffMinutes,\n diffHours,\n diffDays,\n // Extractors\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond,\n dayOfWeek,\n // Formatting\n toLocal,\n format,\n formatDate,\n formatTime,\n toDate,\n // Comparison\n isBefore,\n isAfter,\n isEqual,\n min,\n max,\n // Boundaries\n startOfDay,\n endOfDay,\n startOfMonth,\n endOfMonth,\n startOfYear,\n endOfYear,\n}\n\nexport default Timestamp\n",
|
|
40
40
|
"/**\n * LegalDate - Pure functions for YYYY-MM-DD date strings\n *\n * A \"legal date\" is a calendar date without time - the kind you see on\n * contracts, birth certificates, and legal documents. It represents a\n * civil date, not a point in time.\n *\n * No Date warts:\n * - Months are 1-based (January = 1)\n * - All functions are pure (string in, string out)\n * - No mutable objects\n * - No timezone confusion (it's just a date)\n */\n\nimport { Timestamp } from './Timestamp'\n\n/**\n * Legal date string type: YYYY-MM-DD\n * e.g., \"2024-01-15\"\n */\nexport type LegalDateString = string\n\n/**\n * Validate that a string is a valid YYYY-MM-DD date\n */\nexport function isValid(date: string): date is LegalDateString {\n if (typeof date !== 'string') return false\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(date)) return false\n\n // Parse components\n const y = parseInt(date.slice(0, 4), 10)\n const m = parseInt(date.slice(5, 7), 10)\n const d = parseInt(date.slice(8, 10), 10)\n\n // Validate ranges\n if (m < 1 || m > 12) return false\n if (d < 1) return false\n\n // Check day against actual days in month\n const daysInM = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n const maxDay =\n m === 2 && ((y % 4 === 0 && y % 100 !== 0) || y % 400 === 0)\n ? 29\n : daysInM[m - 1]\n\n return d <= maxDay\n}\n\n/**\n * Get today's date as YYYY-MM-DD (in UTC)\n */\nexport function today(): LegalDateString {\n return Timestamp.toDate(Timestamp.now())\n}\n\n/**\n * Get today's date in a specific timezone\n */\nexport function todayIn(timezone: string): LegalDateString {\n const now = new Date()\n const formatter = new Intl.DateTimeFormat('en-CA', {\n timeZone: timezone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n })\n return formatter.format(now)\n}\n\n/**\n * Create a date from components\n * IMPORTANT: month is 1-based (1 = January, 12 = December)\n */\nexport function from(\n year: number,\n month: number,\n day: number\n): LegalDateString {\n const y = String(year).padStart(4, '0')\n const m = String(month).padStart(2, '0')\n const d = String(day).padStart(2, '0')\n const result = `${y}-${m}-${d}`\n\n // Validate it's a real date\n if (!isValid(result)) {\n throw new Error(`Invalid date: ${year}-${month}-${day}`)\n }\n\n return result\n}\n\n/**\n * Parse a flexible date string into YYYY-MM-DD format\n */\nexport function parse(input: string): LegalDateString {\n // If already in correct format, validate and return\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(input)) {\n if (!isValid(input)) {\n throw new Error(`Invalid date: ${input}`)\n }\n return input\n }\n\n // Otherwise, try to parse it\n const d = new Date(input)\n if (isNaN(d.getTime())) {\n throw new Error(`Invalid date string: ${input}`)\n }\n\n // Extract date components in UTC\n const year = d.getUTCFullYear()\n const month = d.getUTCMonth() + 1\n const day = d.getUTCDate()\n\n return from(year, month, day)\n}\n\n/**\n * Try to parse a date string, returning null on failure\n */\nexport function tryParse(input: string): LegalDateString | null {\n try {\n return parse(input)\n } catch {\n return null\n }\n}\n\n// ============================================================================\n// Arithmetic\n// ============================================================================\n\n/**\n * Add days to a date\n */\nexport function addDays(date: LegalDateString, days: number): LegalDateString {\n const ts = toTimestamp(date)\n return Timestamp.toDate(Timestamp.addDays(ts, days))\n}\n\n/**\n * Add weeks to a date\n */\nexport function addWeeks(\n date: LegalDateString,\n weeks: number\n): LegalDateString {\n return addDays(date, weeks * 7)\n}\n\n/**\n * Add months to a date\n * Handles month overflow correctly (e.g., Jan 31 + 1 month = Feb 28/29)\n */\nexport function addMonths(\n date: LegalDateString,\n months: number\n): LegalDateString {\n const y = year(date)\n const m = month(date)\n const d = day(date)\n\n // Calculate target month\n const totalMonths = y * 12 + (m - 1) + months\n const targetYear = Math.floor(totalMonths / 12)\n const targetMonth = (totalMonths % 12) + 1\n\n // Get last day of target month\n const lastDay = daysInMonth(targetYear, targetMonth)\n const targetDay = Math.min(d, lastDay)\n\n return from(targetYear, targetMonth, targetDay)\n}\n\n/**\n * Add years to a date\n * Handles leap years correctly (Feb 29 + 1 year = Feb 28)\n */\nexport function addYears(\n date: LegalDateString,\n years: number\n): LegalDateString {\n const y = year(date)\n const m = month(date)\n const d = day(date)\n\n const targetYear = y + years\n const lastDay = daysInMonth(targetYear, m)\n const targetDay = Math.min(d, lastDay)\n\n return from(targetYear, m, targetDay)\n}\n\n// ============================================================================\n// Difference\n// ============================================================================\n\n/**\n * Get the difference between two dates in days\n * Returns a - b (positive if a is after b)\n */\nexport function diff(a: LegalDateString, b: LegalDateString): number {\n const msPerDay = 24 * 60 * 60 * 1000\n const aMs = new Date(a + 'T00:00:00Z').getTime()\n const bMs = new Date(b + 'T00:00:00Z').getTime()\n return Math.round((aMs - bMs) / msPerDay)\n}\n\n/**\n * Get the difference in complete months\n */\nexport function diffMonths(a: LegalDateString, b: LegalDateString): number {\n const aYear = year(a)\n const aMonth = month(a)\n const bYear = year(b)\n const bMonth = month(b)\n\n return (aYear - bYear) * 12 + (aMonth - bMonth)\n}\n\n/**\n * Get the difference in complete years\n */\nexport function diffYears(a: LegalDateString, b: LegalDateString): number {\n return year(a) - year(b)\n}\n\n// ============================================================================\n// Extractors (all return 1-based month)\n// ============================================================================\n\n/**\n * Get the year component\n */\nexport function year(date: LegalDateString): number {\n return parseInt(date.slice(0, 4), 10)\n}\n\n/**\n * Get the month component (1-based: 1 = January, 12 = December)\n */\nexport function month(date: LegalDateString): number {\n return parseInt(date.slice(5, 7), 10)\n}\n\n/**\n * Get the day of month component (1-31)\n */\nexport function day(date: LegalDateString): number {\n return parseInt(date.slice(8, 10), 10)\n}\n\n/**\n * Get the day of week (1 = Monday, 7 = Sunday) - ISO 8601 convention\n */\nexport function dayOfWeek(date: LegalDateString): number {\n const d = new Date(date + 'T00:00:00Z').getUTCDay()\n return d === 0 ? 7 : d // Convert Sunday from 0 to 7\n}\n\n/**\n * Get the ISO week number (1-53)\n */\nexport function weekOfYear(date: LegalDateString): number {\n const d = new Date(date + 'T00:00:00Z')\n const dayNum = d.getUTCDay() || 7\n d.setUTCDate(d.getUTCDate() + 4 - dayNum)\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1))\n return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7)\n}\n\n/**\n * Get the day of year (1-366)\n */\nexport function dayOfYear(date: LegalDateString): number {\n const start = from(year(date), 1, 1)\n return diff(date, start) + 1\n}\n\n/**\n * Get the quarter (1-4)\n */\nexport function quarter(date: LegalDateString): number {\n return Math.ceil(month(date) / 3)\n}\n\n// ============================================================================\n// Utilities\n// ============================================================================\n\n/**\n * Check if a year is a leap year\n */\nexport function isLeapYear(y: number): boolean {\n return (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0\n}\n\n/**\n * Get the number of days in a month\n * Month is 1-based (1 = January)\n */\nexport function daysInMonth(y: number, m: number): number {\n const days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n if (m === 2 && isLeapYear(y)) return 29\n return days[m - 1]\n}\n\n/**\n * Get the number of days in a year\n */\nexport function daysInYear(y: number): number {\n return isLeapYear(y) ? 366 : 365\n}\n\n// ============================================================================\n// Conversion\n// ============================================================================\n\n/**\n * Convert to ISO timestamp (midnight UTC)\n */\nexport function toTimestamp(date: LegalDateString): string {\n return date + 'T00:00:00.000Z'\n}\n\n/**\n * Convert to Unix timestamp (seconds since epoch, midnight UTC)\n */\nexport function toUnix(date: LegalDateString): number {\n return Math.floor(new Date(date + 'T00:00:00Z').getTime() / 1000)\n}\n\n/**\n * Create from Unix timestamp (seconds since epoch)\n */\nexport function fromUnix(unix: number): LegalDateString {\n const d = new Date(unix * 1000)\n return from(d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate())\n}\n\n// ============================================================================\n// Formatting\n// ============================================================================\n\n/**\n * Format a date for display\n */\nexport function format(\n date: LegalDateString,\n options?: Intl.DateTimeFormatOptions\n): string {\n const d = new Date(date + 'T00:00:00Z')\n const formatOptions: Intl.DateTimeFormatOptions = {\n timeZone: 'UTC',\n ...options,\n }\n return new Intl.DateTimeFormat(undefined, formatOptions).format(d)\n}\n\n/**\n * Format as a readable date string\n */\nexport function formatLong(date: LegalDateString): string {\n return format(date, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n })\n}\n\n/**\n * Format as a short date string\n */\nexport function formatShort(date: LegalDateString): string {\n return format(date, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n}\n\n// ============================================================================\n// Comparison\n// ============================================================================\n\n/**\n * Check if a is before b\n */\nexport function isBefore(a: LegalDateString, b: LegalDateString): boolean {\n return a < b\n}\n\n/**\n * Check if a is after b\n */\nexport function isAfter(a: LegalDateString, b: LegalDateString): boolean {\n return a > b\n}\n\n/**\n * Check if two dates are equal\n */\nexport function isEqual(a: LegalDateString, b: LegalDateString): boolean {\n return a === b\n}\n\n/**\n * Get the earlier of two dates\n */\nexport function min(a: LegalDateString, b: LegalDateString): LegalDateString {\n return a < b ? a : b\n}\n\n/**\n * Get the later of two dates\n */\nexport function max(a: LegalDateString, b: LegalDateString): LegalDateString {\n return a > b ? a : b\n}\n\n/**\n * Check if a date is between two other dates (inclusive)\n */\nexport function isBetween(\n date: LegalDateString,\n start: LegalDateString,\n end: LegalDateString\n): boolean {\n return date >= start && date <= end\n}\n\n// ============================================================================\n// Boundaries\n// ============================================================================\n\n/**\n * Get the first day of the month\n */\nexport function startOfMonth(date: LegalDateString): LegalDateString {\n return from(year(date), month(date), 1)\n}\n\n/**\n * Get the last day of the month\n */\nexport function endOfMonth(date: LegalDateString): LegalDateString {\n const y = year(date)\n const m = month(date)\n return from(y, m, daysInMonth(y, m))\n}\n\n/**\n * Get the first day of the quarter\n */\nexport function startOfQuarter(date: LegalDateString): LegalDateString {\n const q = quarter(date)\n const m = (q - 1) * 3 + 1\n return from(year(date), m, 1)\n}\n\n/**\n * Get the last day of the quarter\n */\nexport function endOfQuarter(date: LegalDateString): LegalDateString {\n const q = quarter(date)\n const m = q * 3\n return from(year(date), m, daysInMonth(year(date), m))\n}\n\n/**\n * Get the first day of the year\n */\nexport function startOfYear(date: LegalDateString): LegalDateString {\n return from(year(date), 1, 1)\n}\n\n/**\n * Get the last day of the year\n */\nexport function endOfYear(date: LegalDateString): LegalDateString {\n return from(year(date), 12, 31)\n}\n\n/**\n * Get the first day of the week (Monday)\n */\nexport function startOfWeek(date: LegalDateString): LegalDateString {\n const dow = dayOfWeek(date)\n return addDays(date, -(dow - 1))\n}\n\n/**\n * Get the last day of the week (Sunday)\n */\nexport function endOfWeek(date: LegalDateString): LegalDateString {\n const dow = dayOfWeek(date)\n return addDays(date, 7 - dow)\n}\n\n// ============================================================================\n// Default export as namespace\n// ============================================================================\n\nexport const LegalDate = {\n isValid,\n today,\n todayIn,\n from,\n parse,\n tryParse,\n // Arithmetic\n addDays,\n addWeeks,\n addMonths,\n addYears,\n // Difference\n diff,\n diffMonths,\n diffYears,\n // Extractors\n year,\n month,\n day,\n dayOfWeek,\n weekOfYear,\n dayOfYear,\n quarter,\n // Utilities\n isLeapYear,\n daysInMonth,\n daysInYear,\n // Conversion\n toTimestamp,\n toUnix,\n fromUnix,\n // Formatting\n format,\n formatLong,\n formatShort,\n // Comparison\n isBefore,\n isAfter,\n isEqual,\n min,\n max,\n isBetween,\n // Boundaries\n startOfMonth,\n endOfMonth,\n startOfQuarter,\n endOfQuarter,\n startOfYear,\n endOfYear,\n startOfWeek,\n endOfWeek,\n}\n\nexport default LegalDate\n"
|
|
41
41
|
],
|
|
42
|
-
"mappings": "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AO,KAAK,CAAO,EACnB,EAAU,GAEV,QAAW,EAGf,GAAI,EAAS,EAAO,KAAK,CAAO,EAChC,OAAO,ECruBT,0BAmGA,IAAM,GAAoB,IAAI,IAAI,CAEhC,QACA,cACA,aACA,gBACA,eACA,aACA,aACA,aACA,mBACA,aACA,YACA,iBACA,kBACA,iBACA,UACA,gBACA,aACA,eACA,gBACA,kBACA,sBACA,eACA,oBACA,cAEA,cACA,gBAEA,OACA,UACA,cACA,aACA,WACA,mBACA,aACA,OACA,UACA,OAEA,mBACA,sBACA,oBACA,oBACA,kBACA,oBACA,mBACA,mBACA,mBACA,oBACA,iBACA,kBACA,uBACA,mBACA,sBACA,kBACA,oBACA,qBACA,mBACA,oBACA,oBACA,oBACA,mBACA,kBACA,kBACA,kBACA,kBACA,mBAEA,gBACA,iBACA,cACA,mBACA,iBACA,iBACA,iBACA,oBAEA,WACA,iBACA,eACA,eACA,eACA,sBACA,UACA,kBACA,WACA,YAEA,QACA,YACA,cAEA,mBACA,iBACA,uBACA,4BACA,iBACA,sBACA,sBACA,mBAEA,SACA,WACA,UACA,YACA,SACA,UAEA,2BACA,wBACA,yBACA,kBACA,YACA,cACA,cACA,gBACA,eACA,YACA,cAEA,SACA,eACA,gBACA,4BACA,mBACA,iBACA,cAEA,YACA,iBACA,aACA,WACA,eACA,SACA,eACA,YACA,cACA,eACA,mBACA,iBACA,aACA,eACA,eACF,CAAC,EAOD,SAAS,CAAa,CACpB,EACA,EACA,EACA,EACQ,CACR,GAAI,CAAC,EAAM,MAAO,YAElB,OAAQ,EAAK,WACN,EAAG,WAAW,cACjB,MAAO,UACJ,EAAG,WAAW,cACjB,MAAO,WACJ,EAAG,WAAW,eACjB,MAAO,aACJ,EAAG,WAAW,YACjB,MAAO,YACJ,EAAG,WAAW,iBACjB,MAAO,iBACJ,EAAG,WAAW,YACjB,MAAO,iBACJ,EAAG,WAAW,WAEjB,MAAO,WACJ,EAAG,WAAW,eACjB,MAAO,WACJ,EAAG,WAAW,aACjB,MAAO,YACJ,EAAG,WAAW,cACjB,MAAO,yBAC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",
|
|
43
|
-
"debugId": "
|
|
42
|
+
"mappings": "4iIAAA,SAAS,EAAU,CAAC,EAAK,CAAC,GAAG,OAAO,IAAO,SAAS,MAAM,UAAU,mCAAmC,KAAK,UAAU,CAAI,CAAC,EAAE,SAAS,EAAoB,CAAC,EAAK,EAAe,CAAC,IAAI,EAAI,GAAG,EAAkB,EAAE,EAAU,GAAG,EAAK,EAAE,EAAK,QAAQ,EAAE,EAAE,GAAG,EAAK,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE,EAAK,OAAO,EAAK,EAAK,WAAW,CAAC,EAAO,QAAG,IAAO,GAAG,MAAW,OAAK,GAAG,GAAG,IAAO,GAAG,CAAC,GAAG,IAAY,EAAE,GAAG,IAAO,GAAQ,QAAG,IAAY,EAAE,GAAG,IAAO,EAAE,CAAC,GAAG,EAAI,OAAO,GAAG,IAAoB,GAAG,EAAI,WAAW,EAAI,OAAO,CAAC,IAAI,IAAI,EAAI,WAAW,EAAI,OAAO,CAAC,IAAI,IAAI,GAAG,EAAI,OAAO,EAAE,CAAC,IAAI,EAAe,EAAI,YAAY,GAAG,EAAE,GAAG,IAAiB,EAAI,OAAO,EAAE,CAAC,GAAG,IAAiB,GAAG,EAAI,GAAG,EAAkB,EAAO,OAAI,EAAI,MAAM,EAAE,CAAc,EAAE,EAAkB,EAAI,OAAO,EAAE,EAAI,YAAY,GAAG,EAAE,EAAU,EAAE,EAAK,EAAE,UAAe,QAAG,EAAI,SAAS,GAAG,EAAI,SAAS,EAAE,CAAC,EAAI,GAAG,EAAkB,EAAE,EAAU,EAAE,EAAK,EAAE,UAAU,GAAG,EAAe,CAAC,GAAG,EAAI,OAAO,EAAE,GAAK,MAAW,OAAI,KAAK,EAAkB,GAAO,KAAC,GAAG,EAAI,OAAO,EAAE,GAAK,IAAI,EAAK,MAAM,EAAU,EAAE,CAAC,EAAO,OAAI,EAAK,MAAM,EAAU,EAAE,CAAC,EAAE,EAAkB,EAAE,EAAU,EAAE,EAAU,EAAE,EAAK,EAAO,QAAG,IAAO,IAAI,IAAO,GAAG,EAAE,EAAU,OAAK,GAAG,OAAO,EAAI,SAAS,EAAO,CAAC,EAAI,EAAW,CAAC,IAAI,EAAI,EAAW,KAAK,EAAW,KAAK,EAAK,EAAW,OAAO,EAAW,MAAM,KAAK,EAAW,KAAK,IAAI,GAAG,CAAC,EAAI,OAAO,EAAK,GAAG,IAAM,EAAW,KAAK,OAAO,EAAI,EAAK,OAAO,EAAI,EAAI,EAAK,SAAS,EAAO,EAAE,CAAC,IAAI,EAAa,GAAG,EAAiB,GAAG,EAAI,QAAQ,EAAE,UAAU,OAAO,EAAE,GAAG,IAAI,CAAC,EAAiB,IAAI,CAAC,IAAI,EAAK,GAAG,GAAG,EAAE,EAAK,UAAU,GAAO,KAAC,GAAG,IAAW,OAAE,EAAI,QAAQ,IAAI,EAAE,EAAK,EAAI,GAAG,GAAW,CAAI,EAAE,EAAK,SAAS,EAAE,SAAS,EAAa,EAAK,IAAI,EAAa,EAAiB,EAAK,WAAW,CAAC,IAAI,GAAG,GAAG,EAAa,GAAqB,EAAa,CAAC,CAAgB,EAAE,EAAiB,GAAG,EAAa,OAAO,EAAE,MAAM,IAAI,EAAkB,WAAM,IAAS,QAAG,EAAa,OAAO,EAAE,OAAO,EAAkB,WAAM,IAAI,SAAS,EAAS,CAAC,EAAK,CAAC,GAAG,GAAW,CAAI,EAAE,EAAK,SAAS,EAAE,MAAM,IAAI,IAAI,EAAW,EAAK,WAAW,CAAC,IAAI,GAAG,EAAkB,EAAK,WAAW,EAAK,OAAO,CAAC,IAAI,GAAG,GAAG,EAAK,GAAqB,EAAK,CAAC,CAAU,EAAE,EAAK,SAAS,GAAG,CAAC,EAAW,EAAK,IAAI,GAAG,EAAK,OAAO,GAAG,EAAkB,GAAM,IAAI,GAAG,EAAW,MAAM,IAAI,EAAK,OAAO,EAAK,SAAS,EAAU,CAAC,EAAK,CAAC,OAAO,GAAW,CAAI,EAAE,EAAK,OAAO,GAAG,EAAK,WAAW,CAAC,IAAI,GAAG,SAAS,EAAI,EAAE,CAAC,GAAG,UAAU,SAAS,EAAE,MAAM,IAAI,IAAI,EAAO,QAAQ,EAAE,EAAE,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,IAAI,EAAI,UAAU,GAAG,GAAG,GAAW,CAAG,EAAE,EAAI,OAAO,EAAE,GAAG,IAAc,OAAE,EAAO,EAAS,QAAQ,IAAI,EAAI,GAAG,IAAc,OAAE,MAAM,IAAI,OAAO,GAAU,CAAM,EAAE,SAAS,EAAQ,CAAC,EAAK,EAAG,CAAC,GAAG,GAAW,CAAI,EAAE,GAAW,CAAE,EAAE,IAAO,EAAG,MAAM,GAAG,GAAG,EAAK,GAAQ,CAAI,EAAE,EAAG,GAAQ,CAAE,EAAE,IAAO,EAAG,MAAM,GAAG,IAAI,EAAU,EAAE,KAAK,EAAU,EAAK,OAAO,EAAE,EAAU,GAAG,EAAK,WAAW,CAAS,IAAI,GAAG,MAAM,IAAI,EAAQ,EAAK,OAAO,EAAQ,EAAQ,EAAU,EAAQ,EAAE,KAAK,EAAQ,EAAG,OAAO,EAAE,EAAQ,GAAG,EAAG,WAAW,CAAO,IAAI,GAAG,MAAM,IAAI,EAAM,EAAG,OAAO,EAAM,EAAM,EAAQ,EAAO,EAAQ,EAAM,EAAQ,EAAM,EAAc,GAAG,EAAE,EAAE,KAAK,GAAG,EAAO,EAAE,EAAE,CAAC,GAAG,IAAI,EAAO,CAAC,GAAG,EAAM,GAAQ,GAAG,EAAG,WAAW,EAAQ,CAAC,IAAI,GAAG,OAAO,EAAG,MAAM,EAAQ,EAAE,CAAC,EAAO,QAAG,IAAI,EAAE,OAAO,EAAG,MAAM,EAAQ,CAAC,EAAO,QAAG,EAAQ,GAAQ,GAAG,EAAK,WAAW,EAAU,CAAC,IAAI,GAAG,EAAc,EAAO,QAAG,IAAI,EAAE,EAAc,EAAE,MAAM,IAAI,EAAS,EAAK,WAAW,EAAU,CAAC,EAAE,EAAO,EAAG,WAAW,EAAQ,CAAC,EAAE,GAAG,IAAW,EAAO,MAAW,QAAG,IAAW,GAAG,EAAc,EAAE,IAAI,EAAI,GAAG,IAAI,EAAE,EAAU,EAAc,EAAE,GAAG,EAAQ,EAAE,EAAE,GAAG,IAAI,GAAS,EAAK,WAAW,CAAC,IAAI,GAAG,GAAG,EAAI,SAAS,EAAE,GAAK,KAAU,QAAK,MAAM,GAAG,EAAI,OAAO,EAAE,OAAO,EAAI,EAAG,MAAM,EAAQ,CAAa,EAAM,KAAC,GAAG,GAAS,EAAc,EAAG,WAAW,CAAO,IAAI,GAAG,EAAE,EAAQ,OAAO,EAAG,MAAM,CAAO,GAAG,SAAS,EAAS,CAAC,EAAK,CAAC,OAAO,EAAK,SAAS,EAAO,CAAC,EAAK,CAAC,GAAG,GAAW,CAAI,EAAE,EAAK,SAAS,EAAE,MAAM,IAAI,IAAI,EAAK,EAAK,WAAW,CAAC,EAAE,EAAQ,IAAO,GAAG,EAAI,GAAG,EAAa,GAAG,QAAQ,EAAE,EAAK,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAK,EAAK,WAAW,CAAC,EAAE,IAAO,IAAI,GAAG,CAAC,EAAa,CAAC,EAAI,EAAE,OAAY,OAAa,GAAG,GAAG,IAAM,GAAG,OAAO,EAAQ,IAAI,IAAI,GAAG,GAAS,IAAM,EAAE,MAAM,KAAK,OAAO,EAAK,MAAM,EAAE,CAAG,EAAE,SAAS,EAAQ,CAAC,EAAK,EAAI,CAAC,GAAG,IAAW,QAAG,OAAO,IAAM,SAAS,MAAM,UAAU,iCAAiC,EAAE,GAAW,CAAI,EAAE,IAAI,EAAM,EAAE,EAAI,GAAG,EAAa,GAAG,EAAE,GAAG,IAAW,QAAG,EAAI,OAAO,GAAG,EAAI,QAAQ,EAAK,OAAO,CAAC,GAAG,EAAI,SAAS,EAAK,QAAQ,IAAM,EAAK,MAAM,GAAG,IAAI,EAAO,EAAI,OAAO,EAAE,EAAiB,GAAG,IAAI,EAAE,EAAK,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,EAAK,EAAK,WAAW,CAAC,EAAE,GAAG,IAAO,IAAI,GAAG,CAAC,EAAa,CAAC,EAAM,EAAE,EAAE,OAAW,KAAC,GAAG,IAAmB,GAAG,EAAa,GAAG,EAAiB,EAAE,EAAE,GAAG,GAAQ,EAAE,GAAG,IAAO,EAAI,WAAW,CAAM,GAAG,GAAG,EAAE,IAAS,GAAG,EAAI,EAAO,OAAO,GAAG,EAAI,GAAkB,GAAG,IAAQ,EAAI,EAAI,EAAsB,QAAG,IAAM,GAAG,EAAI,EAAK,OAAO,OAAO,EAAK,MAAM,EAAM,CAAG,EAAM,KAAC,IAAI,EAAE,EAAK,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAK,WAAW,CAAC,IAAI,IAAI,GAAG,CAAC,EAAa,CAAC,EAAM,EAAE,EAAE,OAAY,QAAG,IAAM,GAAG,EAAa,GAAG,EAAI,EAAE,EAAE,GAAG,IAAM,GAAG,MAAM,GAAG,OAAO,EAAK,MAAM,EAAM,CAAG,GAAG,SAAS,EAAO,CAAC,EAAK,CAAC,GAAW,CAAI,EAAE,IAAI,EAAS,GAAG,EAAU,EAAE,EAAI,GAAG,EAAa,GAAG,EAAY,EAAE,QAAQ,EAAE,EAAK,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,EAAK,EAAK,WAAW,CAAC,EAAE,GAAG,IAAO,GAAG,CAAC,GAAG,CAAC,EAAa,CAAC,EAAU,EAAE,EAAE,MAAM,SAAS,GAAG,IAAM,GAAG,EAAa,GAAG,EAAI,EAAE,EAAE,GAAG,IAAO,IAAI,GAAG,IAAW,GAAG,EAAS,EAAO,QAAG,IAAc,EAAE,EAAY,EAAO,QAAG,IAAW,GAAG,EAAY,GAAG,GAAG,IAAW,IAAI,IAAM,IAAI,IAAc,GAAG,IAAc,GAAG,IAAW,EAAI,GAAG,IAAW,EAAU,EAAE,MAAM,GAAG,OAAO,EAAK,MAAM,EAAS,CAAG,EAAE,SAAS,EAAM,CAAC,EAAW,CAAC,GAAG,IAAa,MAAM,OAAO,IAAa,SAAS,MAAM,UAAU,mEAAmE,OAAO,CAAU,EAAE,OAAO,GAAQ,IAAI,CAAU,EAAE,SAAS,EAAK,CAAC,EAAK,CAAC,GAAW,CAAI,EAAE,IAAI,EAAI,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,GAAG,EAAK,SAAS,EAAE,OAAO,EAAI,IAAI,EAAK,EAAK,WAAW,CAAC,EAAE,EAAY,IAAO,GAAG,EAAM,GAAG,EAAY,EAAI,KAAK,IAAI,EAAM,EAAO,OAAM,EAAE,IAAI,EAAS,GAAG,EAAU,EAAE,EAAI,GAAG,EAAa,GAAG,EAAE,EAAK,OAAO,EAAE,EAAY,EAAE,KAAK,GAAG,EAAM,EAAE,EAAE,CAAC,GAAG,EAAK,EAAK,WAAW,CAAC,EAAE,IAAO,GAAG,CAAC,GAAG,CAAC,EAAa,CAAC,EAAU,EAAE,EAAE,MAAM,SAAS,GAAG,IAAM,GAAG,EAAa,GAAG,EAAI,EAAE,EAAE,GAAG,IAAO,IAAI,GAAG,IAAW,GAAG,EAAS,EAAO,QAAG,IAAc,EAAE,EAAY,EAAO,QAAG,IAAW,GAAG,EAAY,GAAG,GAAG,IAAW,IAAI,IAAM,IAAI,IAAc,GAAG,IAAc,GAAG,IAAW,EAAI,GAAG,IAAW,EAAU,GAAG,GAAG,IAAM,GAAG,GAAG,IAAY,GAAG,EAAY,EAAI,KAAK,EAAI,KAAK,EAAK,MAAM,EAAE,CAAG,EAAO,OAAI,KAAK,EAAI,KAAK,EAAK,MAAM,EAAU,CAAG,EAAM,KAAC,GAAG,IAAY,GAAG,EAAY,EAAI,KAAK,EAAK,MAAM,EAAE,CAAQ,EAAE,EAAI,KAAK,EAAK,MAAM,EAAE,CAAG,EAAO,OAAI,KAAK,EAAK,MAAM,EAAU,CAAQ,EAAE,EAAI,KAAK,EAAK,MAAM,EAAU,CAAG,EAAE,EAAI,IAAI,EAAK,MAAM,EAAS,CAAG,EAAE,GAAG,EAAU,EAAE,EAAI,IAAI,EAAK,MAAM,EAAE,EAAU,CAAC,EAAO,QAAG,EAAY,EAAI,IAAI,IAAI,OAAO,MAAQ,GAAI,IAAI,GAAU,IAAI,GAAiK,kBAAjK,IAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,WAAQ,aAAU,cAAW,QAAK,YAAS,aAAU,WAAQ,YAAS,WAAQ,UAAO,SAAM,OAAI,aAAU,MAAM,KAAK,MAAM,IAAI,CAAC,EAAM,GAAa,KCOl6N,yBCmGO,MAAM,UAAuB,KAAM,CACxC,KACA,OACA,OACA,SAEA,WAAW,CACT,EACA,EACA,EACA,EACA,CACA,IAAM,EAAM,GAAG,GAAY,cAAc,EAAS,QAAQ,EAAS,SACnE,MAAM,GAAG,QAAc,GAAK,EAC5B,KAAK,KAAO,iBACZ,KAAK,KAAO,EAAS,KACrB,KAAK,OAAS,EAAS,OACvB,KAAK,OAAS,EACd,KAAK,SAAW,EAEpB,CAGO,MAAM,WAAoB,CAAe,CAC9C,WAAW,CACT,EACA,EACA,EACA,EACA,CACA,MAAM,EAAS,EAAU,EAAQ,CAAQ,EACzC,KAAK,KAAO,cAOd,iBAAiB,CAAC,EAAe,EAAW,CAC1C,GAAI,CAAC,KAAK,OAAQ,OAAO,KAAK,QAE9B,IAAM,EAAQ,KAAK,OAAO,MAAM;AAAA,CAAI,EAC9B,EAAY,KAAK,KAAO,EACxB,EAAY,KAAK,IAAI,EAAG,EAAY,CAAY,EAChD,EAAU,KAAK,IAAI,EAAM,OAAS,EAAG,EAAY,CAAY,EAE7D,EAAmB,CAAC,EACpB,EAAe,OAAO,EAAU,CAAC,EAAE,OAGzC,QAAS,EAAI,EAAW,GAAK,EAAS,IAAK,CACzC,IAAM,EAAU,OAAO,EAAI,CAAC,EAAE,SAAS,CAAY,EAC7C,EAAS,IAAM,EAAY,IAAM,IAIvC,GAHA,EAAO,KAAK,GAAG,KAAU,OAAa,EAAM,IAAI,EAG5C,IAAM,EAAW,CACnB,IAAM,EAAe,IAAI,OAAO,EAAe,EAAI,KAAK,MAAM,EAC9D,EAAO,KAAK,GAAG,MAAiB,KAAK,QAAQ,MAAM,MAAM,EAAE,IAAI,GAInE,OAAO,EAAO,KAAK;AAAA,CAAI,EAE3B,CAGO,MAAM,WAAkB,CAAe,CAC5C,SACA,SACA,WAEA,WAAW,CACT,EACA,EACA,EAOA,CACA,MAAM,EAAS,EAAU,GAAS,OAAQ,GAAS,QAAQ,EAC3D,KAAK,KAAO,YACZ,KAAK,SAAW,GAAS,SACzB,KAAK,SAAW,GAAS,SACzB,KAAK,WAAa,GAAS,WAE/B,CA6BO,SAAS,EAAkB,CAAC,EAA4C,CAC7E,MAAO,CACL,MAAO,EAAO,MAAQ,EACtB,OAAQ,IAAI,IACZ,SACA,WAAY,EAAO,WACnB,MAAO,EAAO,MACd,SAAU,EAAO,SACjB,OAAQ,EAAO,OACf,SAAU,EAAO,SACjB,QAAS,EAAO,OAClB,EAIK,SAAS,EAAc,CAC5B,EACA,EAC4B,CAE5B,GAAI,EAAI,OAAO,IAAI,CAAI,EACrB,OAAO,EAAI,OAAO,IAAI,CAAI,EAG5B,GAAI,EAAI,WAAW,IAAI,CAAI,EACzB,OAAO,EAAI,WAAW,IAAI,CAAI,GAAG,KAGnC,GAAI,EAAI,OACN,OAAO,GAAe,EAAM,EAAI,MAAM,EAExC,OAQK,SAAS,CAAW,CAAC,EAA8C,CACxE,GAAI,EAAK,IACP,MAAO,CAAE,KAAM,EAAK,IAAI,MAAM,KAAM,OAAQ,EAAK,IAAI,MAAM,MAAO,EAEpE,MAAO,CAAE,KAAM,EAAG,OAAQ,CAAE,EC5PvB,SAAS,EAAyB,CACvC,EACA,EAUA,CACA,IAAI,EAAS,GACT,EAAI,EACJ,EACA,EAGA,EAAwB,SAEtB,EAA0B,CAAC,EAG3B,EAA+B,CAAC,CAAE,KAAM,YAAa,WAAY,CAAE,CAAC,EACtE,EAAa,EAGX,EAAkB,IACtB,EAAa,EAAa,OAAS,IAAI,MAAQ,YAG3C,EAAgB,IAAe,CACnC,IAAM,EAAQ,EAAa,EAAa,OAAS,GACjD,OAAO,GAAO,OAAS,cAAgB,IAAe,EAAM,WAAa,GAG3E,MAAO,EAAI,EAAO,OAAQ,CACxB,IAAM,EAAO,EAAO,GACd,EAAW,EAAO,EAAI,GAG5B,OAAQ,OACD,gBAEH,GADA,GAAU,EACN,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAU,EACV,GAAK,EACL,SAEF,GAAI,IAAS,IACX,EAAQ,SAEV,IACA,aAEG,gBAEH,GADA,GAAU,EACN,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAU,EACV,GAAK,EACL,SAEF,GAAI,IAAS,IACX,EAAQ,SAEV,IACA,aAEG,kBAEH,GADA,GAAU,EACN,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAU,EACV,GAAK,EACL,SAEF,GAAI,IAAS,KAAO,IAAa,IAAK,CAEpC,GAAU,EACV,GAAK,EACL,EAAc,KAAK,CAAC,EACpB,EAAQ,SACR,SAEF,GAAI,IAAS,IACX,EAAQ,SAEV,IACA,aAEG,eAEH,GADA,GAAU,EACN,IAAS;AAAA,EACX,EAAQ,SAEV,IACA,aAEG,gBAEH,GADA,GAAU,EACN,IAAS,KAAO,IAAa,IAAK,CACpC,GAAU,EACV,GAAK,EACL,EAAQ,SACR,SAEF,IACA,aAEG,QAEH,GADA,GAAU,EACN,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAU,EACV,GAAK,EACL,SAEF,GAAI,IAAS,IAAK,CAEhB,IACA,MAAO,EAAI,EAAO,QAAU,EAAO,KAAO,IAExC,GADA,GAAU,EAAO,GACb,EAAO,KAAO,MAAQ,EAAI,EAAI,EAAO,OACvC,GAAU,EAAO,EAAI,GACrB,GAAK,EAEL,SAGJ,GAAI,EAAI,EAAO,OACb,GAAU,EAAO,GACjB,IAEF,SAEF,GAAI,IAAS,IAAK,CAEhB,IACA,MAAO,EAAI,EAAO,QAAU,WAAW,KAAK,EAAO,EAAE,EACnD,GAAU,EAAO,GACjB,IAEF,EAAQ,SACR,SAEF,IACA,aAEG,SAEH,GAAI,EAAc,OAAS,GACzB,GAAI,IAAS,IACX,EAAc,EAAc,OAAS,KAChC,QAAI,IAAS,KAElB,GADA,EAAc,EAAc,OAAS,KACjC,EAAc,EAAc,OAAS,KAAO,EAAG,CAEjD,EAAc,IAAI,EAClB,GAAU,EACV,IACA,EAAQ,kBACR,WAMN,GAAI,IAAS,IAAK,CAChB,GAAU,EACV,IACA,EAAQ,gBACR,SAEF,GAAI,IAAS,IAAK,CAChB,GAAU,EACV,IACA,EAAQ,gBACR,SAEF,GAAI,IAAS,IAAK,CAChB,GAAU,EACV,IACA,EAAQ,kBACR,SAEF,GAAI,IAAS,KAAO,IAAa,IAAK,CACpC,GAAU,EAAO,EACjB,GAAK,EACL,EAAQ,eACR,SAEF,GAAI,IAAS,KAAO,IAAa,IAAK,CACpC,GAAU,EAAO,EACjB,GAAK,EACL,EAAQ,gBACR,SAIF,GAAI,IAAS,IAAK,CAChB,IAAM,EAAS,EAAO,QAAQ,EAQ9B,GALE,CAFe,EAAO,EAAO,OAAS,IAGtC,0BAA0B,KAAK,CAAM,GACrC,oEAAoE,KAClE,CACF,EACkB,CAClB,GAAU,EACV,IACA,EAAQ,QACR,UAKJ,MAMJ,GAAI,IAAS,IAAK,CAChB,IACA,GAAU,EACV,IACA,SAEF,GAAI,IAAS,IAAK,CAChB,IAEA,IAAM,EAAQ,EAAa,EAAa,OAAS,GACjD,GAAI,GAAS,IAAe,EAAM,WAChC,EAAa,IAAI,EAEnB,GAAU,EACV,IACA,SAIF,IAAM,EAAa,EAChB,MAAM,CAAC,EACP,MAAM,wCAAwC,EACjD,GAAI,EAAY,CAEd,IAAM,EAAc,EAAW,GAAG,MAAM,EAAG,EAAE,EAC7C,GAAU,EACV,GAAK,EAAY,OAEjB,EAAa,KAAK,CAAE,KAAM,aAAc,YAAW,CAAC,EACpD,SAIF,IAAM,EAAY,EAAO,MAAM,CAAC,EAAE,MAAM,wBAAwB,EAChE,GAAI,EAAW,CACb,IAAM,EAAW,EAAU,GACrB,EAAW,EAAU,GAAG,OAGxB,EAAa,EAAO,EAAI,GAC1B,EAAiC,KACjC,EAAa,EAAI,EAErB,GAAI,IAAe,KAAO,IAAe,IAGvC,GAFA,EAAe,EACf,IACI,IAAiB,IACnB,EAAI,gBAAgB,IAAI,CAAQ,EAEhC,OAAI,cAAc,IAAI,CAAQ,EAIlC,GAAU,YAAY,KACtB,EAAI,EAGJ,IAAM,EAAe,GAAuB,EAAQ,EAAG,IAAK,GAAG,EAC/D,GAAI,CAAC,EAAc,CAEjB,GAAU,EAAO,GACjB,IACA,SAGF,IAAQ,QAAS,EAAQ,UAAW,EACpC,EAAI,EAGJ,IAAM,EAAkB,GAAmB,EAAQ,EAAK,EAAI,EAC5D,GAAU,EAAkB,IAG5B,IAAI,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAElD,IAAM,EAAc,EAAO,MAAM,EAAG,EAAI,CAAC,EACzC,GACE,IAAgB,MAChB,IAAgB,MAChB,IAAgB,KAChB,CAEA,GAAK,EAEL,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAElD,IAAM,EAAa,GAAuB,EAAQ,CAAC,EACnD,GAAI,EAAY,CACd,IAAQ,OAAM,OAAQ,GAAY,EAElC,GAAI,IAAoB,QAEtB,GADA,EAAkB,EACd,IAAgB,KAClB,EAAoB,OACf,QAAI,IAAgB,KACzB,EAAoB,SAGxB,EAAI,GAGR,SAOF,IAAM,EAAc,EACjB,MAAM,CAAC,EACP,MAAM,uDAAuD,EAK1D,GAAa,IAAM,CACvB,QAAS,EAAI,EAAO,OAAS,EAAG,GAAK,EAAG,IACtC,GAAI,CAAC,KAAK,KAAK,EAAO,EAAE,EAAG,OAAO,EAAO,GAE3C,MAAO;AAAA,IACN,EAGG,EACJ,IAAc,KACd,IAAc,KACd,IAAc,KACd,IAAc,KACd,IAAc,IAChB,GAAI,GAAe,EAAc,GAAK,CAAC,EAAc,CAInD,IAAM,EAAU,EAAY,GAAG,OAC/B,GAAU,EAAO,MAAM,EAAG,EAAI,CAAO,EACrC,GAAK,EACL,SAEF,GAAI,GAAe,EAAc,GAAK,EAAc,CAElD,IAAM,EAAa,EAAY,GACzB,EAAW,EAAY,GAAG,OAC1B,EAAa,EAAI,EAEvB,GAAU,EAAa,IACvB,EAAI,EAGJ,IAAM,EAAe,GAAuB,EAAQ,EAAG,IAAK,GAAG,EAC/D,GAAI,CAAC,EAAc,CACjB,GAAU,EAAO,GACjB,IACA,SAGF,IAAQ,QAAS,EAAQ,UAAW,EACpC,EAAI,EAGJ,IAAM,EAAkB,GAAmB,EAAQ,EAAK,EAAI,EAC5D,GAAU,EAAkB,IAG5B,IAAI,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAGlD,IAAM,EAAc,EAAO,MAAM,EAAG,EAAI,CAAC,EACzC,GACE,IAAgB,MAChB,IAAgB,MAChB,IAAgB,KAChB,CACA,GAAK,EACL,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,IAAM,EAAa,GAAuB,EAAQ,CAAC,EACnD,GAAI,EACF,EAAI,EAAW,OAId,QAAI,EAAO,KAAO,IAAK,CAC1B,IACA,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,IAAM,EAAa,GAAuB,EAAQ,CAAC,EACnD,GAAI,EACF,EAAI,EAAW,OAInB,SAKF,GAAI,EAAO,KAAO,IAAK,CAGrB,IAAM,EAAmB,GAAuB,EAAQ,EAAI,EAAG,IAAK,GAAG,EACvE,GAAI,CAAC,EAAkB,CACrB,GAAU,EAAO,GACjB,IACA,SAGF,IAAqC,QAA/B,EAC0B,OAA1B,GAAS,EAGX,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAGlD,IAAI,EACE,EAAc,EAAO,MAAM,EAAG,EAAI,CAAC,EACzC,GACE,IAAgB,MAChB,IAAgB,MAChB,IAAgB,KAChB,CACA,GAAK,EACL,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,IAAM,EAAa,GAAuB,EAAQ,CAAC,EACnD,GAAI,EAAY,CACd,EAAkB,EAAW,KAC7B,EAAI,EAAW,OACf,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,KAItD,GAAI,EAAO,MAAM,EAAG,EAAI,CAAC,IAAM,KAAM,CAEnC,IAAI,EAAiC,KACjC,EAAS,EAGP,EAAiB,EAAY,UAAU,EAC7C,GACE,EAAe,WAAW,GAAG,IAC5B,EAAe,SAAW,GAAK,KAAK,KAAK,EAAe,EAAE,GAE3D,EAAe,IACf,EAAS,EAAe,MAAM,CAAC,EAC1B,QACL,EAAe,WAAW,GAAG,IAC5B,EAAe,SAAW,GAAK,KAAK,KAAK,EAAe,EAAE,GAE3D,EAAe,IACf,EAAS,EAAe,MAAM,CAAC,EAIjC,IAAM,EAAkB,GAAmB,EAAQ,EAAK,EAAK,EAQ7D,GAAU,IALR,IAAiB,IACb,cACA,IAAiB,IACjB,gBACA,KACwB,KAE9B,EAAI,EAEJ,MAAO,EAAI,GAAK,KAAK,KAAK,EAAO,EAAE,EACjC,GAAU,EAAO,GACjB,IAGF,GAAI,EACF,EAAI,EAED,KAGL,IAAM,EAAc,GAA0B,EAAa,CAAG,EAC9D,GAAU,IAAI,EAAY,UAC1B,EAAI,EAEN,SAGF,GAAU,EAAO,GACjB,IAGF,MAAO,CACL,OAAQ,EACR,WAAY,EACZ,aAAc,CAChB,EAWF,SAAS,EAAsB,CAC7B,EACA,EACA,EACA,EAC4C,CAC5C,IAAI,EAAQ,EACR,EAAI,EACJ,EAAW,GACX,EAAa,GAEjB,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAO,EAAO,GAGpB,GAAI,CAAC,IAAa,IAAS,KAAO,IAAS,KAAO,IAAS,KACzD,EAAW,GACX,EAAa,EACR,QAAI,GAAY,IAAS,GAAc,EAAO,EAAI,KAAO,KAC9D,EAAW,GACN,QAAI,CAAC,GACV,GAAI,IAAS,EAAM,IACd,QAAI,IAAS,EAAO,IAE3B,IAGF,GAAI,IAAU,EAAG,OAAO,KAExB,MAAO,CACL,QAAS,EAAO,MAAM,EAAO,EAAI,CAAC,EAClC,OAAQ,CACV,EAQK,SAAS,EAAc,CAC5B,EACA,EAC0C,CAC1C,IAAI,EAAI,EAGR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,GAAI,GAAK,EAAO,OAAQ,OAAO,KAE/B,IAAM,EAAa,EACb,EAAY,EAAO,GAGzB,GAAI,IAAc,KAAO,IAAc,IAAK,CAC1C,IAAM,EAAQ,IAAc,IAAM,IAAM,IAClC,EAAS,GAAuB,EAAQ,EAAI,EAAG,EAAW,CAAK,EACrE,GAAI,CAAC,EAAQ,OAAO,KACpB,MAAO,CACL,MAAO,EAAO,MAAM,EAAY,EAAO,MAAM,EAC7C,OAAQ,EAAO,MACjB,EAIF,GAAI,IAAc,KAAO,IAAc,KAAO,IAAc,IAAK,CAC/D,IACA,MAAO,EAAI,EAAO,OAAQ,CACxB,GAAI,EAAO,KAAO,GAAa,EAAO,EAAI,KAAO,KAE/C,OADA,IACO,CAAE,MAAO,EAAO,MAAM,EAAY,CAAC,EAAG,OAAQ,CAAE,EAEzD,IAEF,OAAO,KAIT,GAAI,SAAS,KAAK,CAAS,EAAG,CAC5B,MAAO,EAAI,EAAO,QAAU,YAAY,KAAK,EAAO,EAAE,EAAG,IACzD,MAAO,CAAE,MAAO,EAAO,MAAM,EAAY,CAAC,EAAG,OAAQ,CAAE,EAIzD,IAAM,EAAe,EAAO,MAAM,CAAC,EAAE,MAAM,gCAAgC,EAC3E,GAAI,EACF,MAAO,CACL,MAAO,EAAa,GACpB,OAAQ,EAAI,EAAa,GAAG,MAC9B,EAGF,OAAO,KAOT,SAAS,EAAoB,CAAC,EAAsB,CAGlD,OAAO,EAAK,QAAQ,mBAAoB,MAAM,EAOhD,SAAS,EAAsB,CAC7B,EACA,EACyC,CACzC,IAAI,EAAI,EACJ,EAAQ,EACR,EAAW,GACX,EAAa,GACb,EAAa,GAGX,EAAa,CAAC,KAAoB,CACtC,KAAM,GAAqB,EAAO,MAAM,EAAO,CAAM,EAAE,KAAK,CAAC,EAC7D,QACF,GAEA,MAAO,EAAI,EAAO,OAAQ,CACxB,IAAM,EAAO,EAAO,GAGpB,GAAI,CAAC,IAAa,IAAS,KAAO,IAAS,KAAO,IAAS,KAAM,CAC/D,EAAW,GACX,EAAa,EACb,EAAa,GACb,IACA,SAEF,GAAI,EAAU,CACZ,GAAI,IAAS,GAAc,EAAO,EAAI,KAAO,KAAM,CAIjD,GAHA,EAAW,GACX,IAEI,IAAU,EAAG,CAEf,IAAI,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,GAAI,EAAO,KAAO,KAGhB,GAAI,CADe,EAAO,MAAM,EAAI,CAAC,EAAE,MAAM,eAAe,EAG1D,OAAO,EAAW,CAAC,EAGvB,GAAI,EAAO,KAAO,KAAO,EAAO,KAAO,IAErC,OAAO,EAAW,CAAC,EAGvB,SAEF,IACA,SAIF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,CAChD,IACA,EAAa,GACb,IACA,SAEF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,CAEhD,GADA,IACI,IAAU,EAAG,CACf,IAEA,IAAI,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,GAAI,EAAO,KAAO,KAAO,EAAO,KAAO,IACrC,SAEF,OAAO,EAAW,CAAC,EAErB,IACA,SAIF,GAAI,IAAU,GAAK,IAAS,IAAK,CAC/B,GAAI,EACF,OAAO,EAAW,CAAC,EAIrB,GADmB,EAAO,MAAM,EAAI,CAAC,EAAE,MAAM,eAAe,EAC5C,CACd,IACA,EAAa,GACb,IACA,SAEF,OAAO,EAAW,CAAC,EAIrB,GAAI,IAAU,IAAM,IAAS,KAAO,IAAS,KAAM,CAEjD,GADA,IACI,EAAI,EAAO,QAAU,EAAO,KAAO,IAAK,IAC5C,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,SAIF,GACE,IAAU,IACT,KAAK,KAAK,CAAI,GAAM,IAAS,KAAO,KAAK,KAAK,EAAO,EAAI,EAAE,GAC5D,CACA,IAAI,EAAI,EACR,GAAI,EAAO,KAAO,IAAK,IACvB,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAElD,GAAI,EAAI,EAAO,QAAU,EAAO,KAAO,KAAO,KAAK,KAAK,EAAO,EAAI,EAAE,EAAG,CACtE,IACA,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAGpD,GAAI,EAAI,EAAO,SAAW,EAAO,KAAO,KAAO,EAAO,KAAO,KAAM,CAEjE,GADA,IACI,EAAI,EAAO,SAAW,EAAO,KAAO,KAAO,EAAO,KAAO,KAAM,IACnE,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAEpD,EAAa,GACb,EAAI,EAEJ,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,GAAI,EAAI,EAAO,QAAU,EAAO,KAAO,IAErC,MAAO,CACL,KAAM,GAAqB,EAAO,MAAM,EAAO,CAAC,EAAE,KAAK,CAAC,EACxD,OAAQ,CACV,EAEF,GAAI,EAAO,KAAO,KAAO,EAAO,KAAO,IACrC,MAAO,CACL,KAAM,GAAqB,EAAO,MAAM,EAAO,CAAC,EAAE,KAAK,CAAC,EACxD,OAAQ,CACV,EAEF,SAIF,GAAI,IAAU,GAAK,YAAY,KAAK,CAAI,EAAG,CACzC,IAAI,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,EAAa,GACb,EAAI,EAEJ,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAIlD,GAAI,EAAI,EAAO,QAAU,EAAO,KAAO,IAAK,CAC1C,IACA,IACA,SAGF,GAAI,EAAI,EAAO,QAAU,EAAO,KAAO,KAGrC,GAAI,CADe,EAAO,MAAM,EAAI,CAAC,EAAE,MAAM,eAAe,EAC3C,CAEf,IAAI,EAAU,EACd,MAAO,EAAU,GAAS,KAAK,KAAK,EAAO,EAAU,EAAE,EAAG,IAC1D,MAAO,CACL,KAAM,GAAqB,EAAO,MAAM,EAAO,CAAO,EAAE,KAAK,CAAC,EAC9D,OAAQ,CACV,GAGJ,GAAI,EAAO,KAAO,KAAO,EAAO,KAAO,IACrC,MAAO,CACL,KAAM,GAAqB,EAAO,MAAM,EAAO,CAAC,EAAE,KAAK,CAAC,EACxD,OAAQ,CACV,EAEF,SAGF,IAIF,GAAI,EACF,OAAO,EAAW,CAAC,EAErB,OAAO,KAMT,SAAS,EAAe,CAAC,EAA0B,CACjD,IAAM,EAAmB,CAAC,EACtB,EAAU,GACV,EAAQ,EACR,EAAgB,GAChB,EAAiB,GACjB,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CACxB,IAAM,EAAO,EAAO,GACd,EAAW,EAAO,EAAI,GAG5B,GAAI,CAAC,GAAkB,IAAS,KAAO,IAAa,IAAK,CACvD,EAAgB,GAChB,GAAW,KACX,GAAK,EACL,SAIF,GAAI,CAAC,GAAiB,IAAS,KAAO,IAAa,IAAK,CACtD,EAAiB,GACjB,GAAW,KACX,GAAK,EACL,SAIF,GAAI,GAAiB,IAAS;AAAA,EAAM,CAClC,EAAgB,GAChB,GAAW,EACX,IACA,SAIF,GAAI,GAAkB,IAAS,KAAO,IAAa,IAAK,CACtD,EAAiB,GACjB,GAAW,KACX,GAAK,EACL,SAIF,GAAI,GAAiB,EAAgB,CACnC,GAAW,EACX,IACA,SAGF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAC3C,IACA,GAAW,EACN,QAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAClD,IACA,GAAW,EACN,QAAI,IAAS,KAAO,IAAU,EACnC,EAAO,KAAK,CAAO,EACnB,EAAU,GAEV,QAAW,EAEb,IAGF,GAAI,EAAQ,KAAK,EACf,EAAO,KAAK,CAAO,EAGrB,OAAO,EAOT,SAAS,EAAkB,CACzB,EACA,EAKA,EACQ,CAER,IAAM,EAAa,GAA0B,EAAQ,CACnD,eAAgB,EAChB,eAAgB,EAAI,eACpB,gBAAiB,EAAI,gBACrB,cAAe,EAAI,aACrB,CAAC,EAAE,OAGG,EAAY,GAAgB,CAAU,EACxC,EAAc,GACZ,EAAY,IAAI,IAGhB,EAAiB,CAAC,IAAiB,CACvC,GAAI,GAAiB,QAAQ,KAAK,CAAI,EAAG,CACvC,GAAI,EAAU,IAAI,CAAI,EACpB,MAAU,MAAM,6BAA6B,IAAO,EAEtD,EAAU,IAAI,CAAI,IAmFtB,OA/EkB,EAAU,IAAI,CAAC,IAAU,CACzC,IAAM,EAAU,EAAM,KAAK,EAC3B,GAAI,CAAC,EAAS,OAAO,EAMrB,GAAI,GAAiB,EAAQ,WAAW,GAAG,GAAK,EAAQ,SAAS,GAAG,EAAG,CACrE,IAAM,EAAQ,EAAQ,MAAM,EAAG,EAAE,EAEjC,MAAO,KADgB,GAAgC,EAAO,CAAG,MAMnE,GAAI,GAAiB,EAAQ,WAAW,GAAG,GAAK,EAAQ,SAAS,GAAG,EAAG,CACrE,IAAM,EAAQ,EAAQ,MAAM,EAAG,EAAE,EAEjC,MAAO,KADgB,GAAgC,EAAO,CAAG,MAMnE,GAAI,EAAQ,WAAW,KAAK,EAAG,CAC7B,IAAM,EAAe,GAAkB,CAAO,EAC9C,GAAI,IAAiB,GAEnB,OADiB,EAAQ,MAAM,EAAG,CAAY,EAAE,KAAK,EAGvD,OAAO,EAIT,IAAM,EAAgB,EAAQ,MAAM,yBAAyB,EAC7D,GAAI,EAAe,CACjB,KAAS,EAAM,GAAQ,EAIvB,OAHA,EAAe,CAAI,EACnB,EAAc,GAEP,GAAG,OAAU,IAItB,GAAI,CAAC,GAAkB,CAAO,EAAG,CAG/B,IAAM,EAAU,EAAQ,MAAM,YAAY,EAC1C,GAAI,EACF,EAAe,EAAQ,EAAE,EAG3B,OADA,EAAc,GACP,EAIT,IAAM,EAAW,GAAkB,CAAO,EAC1C,GAAI,IAAa,GAAI,CACnB,IAAM,EAAO,EAAQ,MAAM,EAAG,CAAQ,EAAE,KAAK,EACvC,EAAO,EAAQ,MAAM,EAAW,CAAC,EAAE,KAAK,EAO9C,GALA,EAAe,CAAI,EAKf,GAAe,GAAiB,QAAQ,KAAK,CAAI,EAAG,CAIxD,GAAI,GAAiB,QAAQ,KAAK,CAAI,EACpC,EAAI,eAAe,IAAI,CAAI,EAE7B,MAAO,GAAG,OAAU,IAGtB,OAAO,EACR,EAEgB,KAAK,GAAG,EAiB3B,SAAS,EAA+B,CACtC,EACA,EAKQ,CA0CR,OAxCc,GAAgB,CAAK,EAEX,IAAI,CAAC,IAAS,CACpC,IAAM,EAAU,EAAK,KAAK,EAC1B,GAAI,CAAC,EAAS,OAAO,EAIrB,IAAM,EAAoB,EAAQ,MAAM,6BAA6B,EACrE,GAAI,EAAmB,CACrB,KAAS,EAAM,GAAiB,EAChC,EAAI,eAAe,IAAI,CAAI,EAE3B,IAAM,EAAmB,GAA0B,CAAa,EAChE,MAAO,GAAG,OAAU,IAItB,IAAM,EAAmB,EAAQ,MAAM,6BAA6B,EACpE,GAAI,EAAkB,CACpB,KAAS,EAAM,GAAgB,EAC/B,EAAI,eAAe,IAAI,CAAI,EAE3B,IAAM,EAAmB,GAAyB,CAAY,EAC9D,MAAO,GAAG,OAAU,IAItB,IAAM,EAAa,EAAQ,MAAM,yBAAyB,EAC1D,GAAI,EAAY,CACd,KAAS,EAAM,GAAS,EAExB,OADA,EAAI,eAAe,IAAI,CAAI,EACpB,GAAG,OAAU,IAKtB,OAAO,EACR,EAEgB,KAAK,IAAI,EAe5B,SAAS,EAAyB,CAAC,EAAyB,CAE1D,IAAM,EAAQ,EAAQ,MAAM,EAAG,EAAE,EAAE,KAAK,EA0CxC,MAAO,KAzCO,GAAgB,CAAK,EAEX,IAAI,CAAC,IAAS,CACpC,IAAM,EAAU,EAAK,KAAK,EAC1B,GAAI,CAAC,EAAS,OAAO,EAGrB,IAAM,EAAsB,EAAQ,MAAM,6BAA6B,EACvE,GAAI,EAAqB,CACvB,KAAS,EAAK,GAAU,EACxB,MAAO,GAAG,MAAQ,GAA0B,CAAM,IAEpD,IAAM,EAAuB,EAAQ,MAAM,6BAA6B,EACxE,GAAI,EAAsB,CACxB,KAAS,EAAK,GAAU,EACxB,MAAO,GAAG,MAAQ,GAA0B,CAAM,IAIpD,IAAM,EAAsB,EAAQ,MAAM,6BAA6B,EACvE,GAAI,EAAqB,CACvB,KAAS,EAAK,GAAU,EACxB,MAAO,GAAG,MAAQ,GAAyB,CAAM,IAEnD,IAAM,EAAuB,EAAQ,MAAM,6BAA6B,EACxE,GAAI,EAAsB,CACxB,KAAS,EAAK,GAAU,EACxB,MAAO,GAAG,MAAQ,GAAyB,CAAM,IAInD,IAAM,EAAc,EAAQ,MAAM,yBAAyB,EAC3D,GAAI,EAAa,CACf,KAAS,EAAK,GAAS,EACvB,MAAO,GAAG,MAAQ,IAIpB,OAAO,EACR,EAEqB,KAAK,IAAI,MAOjC,SAAS,EAAwB,CAAC,EAAyB,CAEzD,IAAM,EAAQ,EAAQ,MAAM,EAAG,EAAE,EAAE,KAAK,EAqBxC,MAAO,KApBO,GAAgB,CAAK,EAEX,IAAI,CAAC,IAAS,CACpC,IAAM,EAAU,EAAK,KAAK,EAC1B,GAAI,CAAC,EAAS,OAAO,EAGrB,GAAI,EAAQ,WAAW,GAAG,GAAK,EAAQ,SAAS,GAAG,EACjD,OAAO,GAA0B,CAAO,EAI1C,GAAI,EAAQ,WAAW,GAAG,GAAK,EAAQ,SAAS,GAAG,EACjD,OAAO,GAAyB,CAAO,EAIzC,OAAO,EACR,EAEqB,KAAK,IAAI,MAOjC,SAAS,EAAiB,CAAC,EAAwB,CACjD,IAAI,EAAQ,EACR,EAAW,GACX,EAAY,GACZ,EAAW,GACX,EAAa,GAEjB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAO,EAAM,GAEnB,GAAI,CAAC,IAAa,IAAS,KAAO,IAAS,KAAO,IAAS,KAAM,CAC/D,EAAW,GACX,EAAa,EACb,SAEF,GAAI,EAAU,CACZ,GAAI,IAAS,GAAc,EAAM,EAAI,KAAO,KAAM,EAAW,GAC7D,SAGF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAC3C,IACK,QAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAClD,IACK,QAAI,IAAU,EAAG,CACtB,GAAI,IAAS,IAAK,EAAW,GAC7B,GAAI,IAAS,KAAO,EAAM,EAAI,KAAO,IAAK,EAAY,IAI1D,OAAO,GAAY,CAAC,EAMtB,SAAS,EAAiB,CAAC,EAAuB,CAChD,IAAI,EAAQ,EACR,EAAW,GACX,EAAa,GAEjB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAO,EAAM,GAEnB,GAAI,CAAC,IAAa,IAAS,KAAO,IAAS,KAAO,IAAS,KAAM,CAC/D,EAAW,GACX,EAAa,EACb,SAEF,GAAI,EAAU,CACZ,GAAI,IAAS,GAAc,EAAM,EAAI,KAAO,KAAM,EAAW,GAC7D,SAGF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAC3C,IACK,QAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAClD,IACK,QAAI,IAAU,GAAK,IAAS,IACjC,OAAO,EAIX,MAAO,GCxtCT,SAAS,EAAoB,CAC3B,EACA,EACyB,CACzB,IAAM,EAAI,EAAO,MAAM,CAAO,EAC9B,GAAI,CAAC,EAAG,OAAO,KAEf,IAAM,EAAa,EAAE,MAAS,EAAE,GAAG,OAAS,EACxC,EAAQ,EACR,EAAI,EAAa,EACrB,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,GAAI,EAAO,KAAO,IAAK,IAClB,QAAI,EAAO,KAAO,IAAK,IAC5B,IAEF,GAAI,IAAU,EAAG,OAAO,KAExB,IAAM,EAAW,EAAO,MAAM,EAAY,CAAC,EACrC,EAAS,CAAC,EAAE,GAAG,MAAM,EAAG,EAAE,EAAI,EAAU,CAAQ,EAEtD,OADA,EAAO,MAAQ,EAAE,MACV,EAWF,SAAS,EAAwB,CAAC,EAAwB,CAC/D,IAAI,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CAExB,IAAM,EAAW,EAAO,MAAM,CAAC,EAAE,MAAM,aAAa,EACpD,GAAI,EAAU,CAGZ,IAAM,EADa,EAAI,EAAS,GAAG,OAAS,EACb,EAC3B,EAAQ,EACR,EAAI,EAER,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAU,EAAG,CAEf,GAAU,EAAO,GACjB,IACA,SAMF,GAFiB,EAAO,MAAM,CAAC,EAAE,MAAM,uBAAuB,EAI5D,GAAU,EAAO,MAAM,EAAG,CAAC,EAC3B,EAAI,EACC,KAGL,IAAM,EAAO,EAAO,MAAM,EAAW,EAAI,CAAC,EAC1C,GAAU,QAAQ,gKAClB,EAAI,GAGN,QAAU,EAAO,GACjB,IAIJ,OAAO,EAyBF,SAAS,EAAiB,CAAC,EAGhC,CACA,IAAM,EAAsB,CAAC,EACzB,EAAS,GACT,EAAI,EACJ,EAAU,EAEd,MAAO,EAAI,EAAO,OAAQ,CAExB,IAAM,EAAY,EAAO,MAAM,CAAC,EAAE,MAAM,cAAc,EACtD,GAAI,EAAW,CACb,IAAM,EAAa,EAGb,EAAY,EAAI,EAAU,GAAG,OAC/B,EAAa,EACb,EAAI,EAER,MAAO,EAAI,EAAO,QAAU,EAAa,EAAG,CAC1C,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAe,EAAG,CACpB,GAAU,EAAO,GACjB,IACA,SAGF,IAAM,EAAO,EAAO,MAAM,EAAW,EAAI,CAAC,EACtC,EACA,EAAW,EAGT,EAAgB,EAAO,MAAM,CAAC,EAAE,MAAM,mBAAmB,EAC/D,GAAI,EAAe,CACjB,IAAM,EAAgB,EAAI,EAAc,GAAG,OAC3C,EAAa,EACb,IAAI,EAAI,EAER,MAAO,EAAI,EAAO,QAAU,EAAa,EAAG,CAC1C,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAe,EACjB,EAAe,EAAO,MAAM,EAAe,EAAI,CAAC,EAChD,EAAW,EASf,IAAM,EAJe,GAAe,CAAI,EAIV,IAAI,CAAC,IAAS,CAC1C,IAAM,EAAiB,GAAkB,EAAQ,EAAY,CAAI,EACjE,OAAO,EAAiB,GAAG,MAAS,IAAmB,EACxD,EAGK,EAAmB,CACvB,GAAI,cAAc,IAClB,OACA,SAAU,EACV,WACA,MAAO,EACP,IAAK,CACP,EACA,EAAO,KAAK,CAAK,EAIjB,IAAM,EAAe,GAAgB,EAE/B,EAAkB,EAAS,IAAI,CAAC,IAAM,EAAE,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,EAC5D,EACJ,EAAgB,OAAS,EAAI,EAAgB,KAAK,IAAI,EAAI,GAItD,EACJ,EAAgB,OAAS,EACrB,cAAc,EAAM,MAAM,KAC1B,cAAc,EAAM,OAEpB,EAAW,eAAe,EAAM,QAAQ,eAAsB,SAEpE,GAAU,EACV,EAAI,EACJ,IAEA,QAAU,EAAO,GACjB,IAIJ,MAAO,CAAE,OAAQ,EAAQ,QAAO,EAIlC,SAAS,EAAe,CAAC,EAAuB,CAC9C,OAAO,EAAK,WAAW,QAAQ,GAAK,EAAK,WAAW,OAAO,EAY7D,SAAS,EAAc,CAAC,EAAwB,CAE9C,IAAM,EAAsB,EACzB,QAAQ,cAAe,EAAE,EACzB,QAAQ,oBAAqB,EAAE,EAG5B,EAAe,IAAI,IACnB,EAAc,kCAChB,EACJ,OAAQ,EAAQ,EAAY,KAAK,CAAmB,KAAO,KACzD,EAAa,IAAI,EAAM,EAAE,EAI3B,IAAM,EAAoB,yCACpB,EAAiB,IAAI,IAC3B,OAAQ,EAAQ,EAAkB,KAAK,CAAmB,KAAO,KAC/D,EAAe,IAAI,EAAM,EAAE,EAI7B,QAAW,KAAQ,EAAc,CAC/B,GAAI,CAAC,EAAe,IAAI,CAAI,EAAG,SAE/B,IAAM,EAAoB,IAAI,OAAO,cAAc,OAAW,GAAG,EAC3D,EAAa,IAAI,OAAO,MAAM,OAAW,GAAG,EAC5C,EACJ,EAAoB,MAAM,CAAiB,GAAG,QAAU,EACpD,EAAa,EAAoB,MAAM,CAAU,GAAG,QAAU,EAEpE,GAAI,GAAqB,EACvB,EAAe,OAAO,CAAI,EAK9B,IAAM,EAAW,IAAI,IAGf,EAAc,oDACpB,OAAQ,EAAQ,EAAY,KAAK,CAAmB,KAAO,KACzD,EAAS,IAAI,EAAM,EAAE,EAIvB,IAAM,EACJ,+DACF,OAAQ,EAAQ,EAAW,KAAK,CAAmB,KAAO,KACxD,EAAS,IAAI,EAAM,EAAE,EAMvB,IAAM,EAAW,IAAI,IAAI,CACvB,KACA,OACA,MACA,QACA,KACA,SACA,OACA,QACA,WACA,SACA,WACA,MACA,QACA,MACA,MACA,OACA,OACA,QACA,OACA,YACA,SACA,aACA,KACA,KACA,MACA,QACA,UACA,QACA,QACA,QACA,QACA,UACA,QACA,SACA,SACA,UACA,OACA,KACA,SACA,MACA,MACA,QAEA,UACA,OACA,QACA,SACA,SACA,SACA,UACA,OACA,OACA,UACA,MACA,MACA,UACA,UACA,eACA,eACA,YACA,aACA,aACA,aACA,cACA,cACA,gBACA,iBACA,cACA,WACA,QACA,YACA,aACA,SACA,OACA,MACA,QACA,UACA,QACA,SACA,MACA,SACA,SACA,UACA,OACA,YACA,UACA,WACA,aACA,SACA,WACA,WACA,MACA,QACA,WACA,WACA,aACA,YACA,YACA,OACA,YACF,CAAC,EAGK,EAAqB,CAAC,EAC5B,QAAW,KAAM,EACf,GAAI,CAAC,EAAS,IAAI,CAAE,GAAK,CAAC,EAAS,IAAI,CAAE,GAAK,CAAC,GAAgB,CAAE,EAC/D,EAAS,KAAK,CAAE,EAIpB,OAAO,EAAS,KAAK,EAavB,SAAS,EAAiB,CACxB,EACA,EACA,EACoB,CAGpB,IAAM,EAAc,EAAO,MAAM,EAAG,CAAc,EAI5C,EAAc,uDACd,EAAQ,EAAY,MAAM,CAAW,EAE3C,GAAI,CAAC,EAAO,CAEV,IAAM,EACJ,kFACI,EAAa,EAAY,MAAM,CAAY,EACjD,GAAI,CAAC,EAAY,OACjB,OAAO,GAAsB,EAAW,GAAI,CAAS,EAGvD,OAAO,GAAsB,EAAM,GAAI,CAAS,EAMlD,SAAS,EAAqB,CAC5B,EACA,EACoB,CAEpB,IAAM,EAAS,EAAU,MAAM,GAAG,EAAE,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EAEvD,QAAW,KAAS,EAAQ,CAK1B,IAAM,EAAa,EAAM,MACvB,IAAI,OAAO,IAAI,kCAA0C,CAC3D,EACA,GAAI,EACF,OAAO,EAAW,GAIpB,IAAM,EAAc,EAAM,MACxB,IAAI,OACF,IAAI,0GACN,CACF,EACA,GAAI,EACF,OAAO,EAAY,GAIvB,OAYK,SAAS,EAAoB,CAAC,EAAwB,CAO3D,IAAM,EAAa,IAAI,OAHrB,kLAGiE,GAAG,EACtE,EAAS,EAAO,QAAQ,EAAY,eAAe,EAGnD,IAAM,EAAU,IAAI,OAPlB,+KAO2D,GAAG,EAGhE,OAFA,EAAS,EAAO,QAAQ,EAAS,YAAY,EAEtC,EAwBF,SAAS,EAAmB,CAAC,EAAwB,CAE1D,IAAM,EAAqB,kBAIrB,EAAsB,oCAGtB,EACJ,gGAEI,EAAQ,EAAO,MAAM;AAAA,CAAI,EACzB,EAAmB,CAAC,EAE1B,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAO,EAAM,GACb,EAAW,EAAI,EAAI,EAAM,EAAI,GAAK,GAGxC,GAAI,EAAI,GAAK,EAAmB,KAAK,CAAI,EAAG,CAE1C,IAAM,EAAgB,EACnB,QAAQ,UAAW,EAAE,EACrB,QAAQ,iBAAkB,EAAE,EAG/B,GACE,CAAC,EAAoB,KAAK,CAAa,GACvC,CAAC,EAAiB,KAAK,CAAa,EACpC,CAEA,IAAM,EAAQ,EAAK,MAAM,QAAQ,EAC3B,EAAS,EAAQ,EAAM,GAAK,GAC5B,EAAO,EAAK,MAAM,EAAO,MAAM,EACrC,EAAO,KAAK,EAAS,IAAM,CAAI,EAC/B,UAIJ,EAAO,KAAK,CAAI,EAGlB,OAAO,EAAO,KAAK;AAAA,CAAI,EAelB,SAAS,EAA6B,CAAC,EAAwB,CAEpE,EAAS,EAAO,QACd,iDACA,YACF,EAGA,IAAM,EAAuD,CAAC,EAC1D,EAAI,EACJ,EAAwB,SACtB,EAA0B,CAAC,EAEjC,MAAO,EAAI,EAAO,OAAQ,CACxB,IAAM,EAAO,EAAO,GACd,EAAW,EAAO,EAAI,GAG5B,OAAQ,OACD,gBACH,GAAI,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAK,EACL,SAEF,GAAI,IAAS,IAAK,EAAQ,SAC1B,IACA,aAEG,gBACH,GAAI,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAK,EACL,SAEF,GAAI,IAAS,IAAK,EAAQ,SAC1B,IACA,aAEG,kBACH,GAAI,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAK,EACL,SAEF,GAAI,IAAS,KAAO,IAAa,IAAK,CACpC,GAAK,EACL,EAAc,KAAK,CAAC,EACpB,EAAQ,SACR,SAEF,GAAI,IAAS,IAAK,EAAQ,SAC1B,IACA,aAEG,eACH,GAAI,IAAS;AAAA,EAAM,EAAQ,SAC3B,IACA,aAEG,gBACH,GAAI,IAAS,KAAO,IAAa,IAAK,CACpC,GAAK,EACL,EAAQ,SACR,SAEF,IACA,aAEG,QACH,GAAI,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAK,EACL,SAEF,GAAI,IAAS,IAAK,CAChB,IACA,MAAO,EAAI,EAAO,QAAU,EAAO,KAAO,IACxC,GAAI,EAAO,KAAO,MAAQ,EAAI,EAAI,EAAO,OACvC,GAAK,EAEL,SAGJ,GAAI,EAAI,EAAO,OAAQ,IACvB,SAEF,GAAI,IAAS,IAAK,CAChB,IACA,MAAO,EAAI,EAAO,QAAU,WAAW,KAAK,EAAO,EAAE,EAAG,IACxD,EAAQ,SACR,SAEF,IACA,aAEG,SAEH,GAAI,EAAc,OAAS,GACzB,GAAI,IAAS,IACX,EAAc,EAAc,OAAS,KAChC,QAAI,IAAS,KAElB,GADA,EAAc,EAAc,OAAS,KACjC,EAAc,EAAc,OAAS,KAAO,EAAG,CACjD,EAAc,IAAI,EAClB,IACA,EAAQ,kBACR,WAMN,GAAI,IAAS,IAAK,CAChB,IACA,EAAQ,gBACR,SAEF,GAAI,IAAS,IAAK,CAChB,IACA,EAAQ,gBACR,SAEF,GAAI,IAAS,IAAK,CAChB,IACA,EAAQ,kBACR,SAEF,GAAI,IAAS,KAAO,IAAa,IAAK,CACpC,GAAK,EACL,EAAQ,eACR,SAEF,GAAI,IAAS,KAAO,IAAa,IAAK,CACpC,GAAK,EACL,EAAQ,gBACR,SAIF,GAAI,IAAS,IAAK,CAChB,IAAI,EAAI,EAAI,EACZ,MAAO,GAAK,GAAK,KAAK,KAAK,EAAO,EAAE,EAAG,IACvC,IAAM,EAAa,GAAK,EAAI,EAAO,GAAK,GAQxC,GANE,CAAC,GACD,yBAAyB,KAAK,CAAU,GACvC,GAAK,GACJ,iEAAiE,KAC/D,EAAO,MAAM,KAAK,IAAI,EAAG,EAAI,EAAE,EAAG,EAAI,CAAC,CACzC,EACgB,CAClB,IACA,EAAQ,QACR,UAOJ,GACE,IAAS,KACT,IAAa,KACb,EAAO,EAAI,KAAO,KAClB,EAAO,EAAI,KAAO,IAClB,CACA,EAAY,KAAK,CAAE,IAAK,EAAG,GAAI,IAAK,CAAC,EACrC,GAAK,EACL,SAEF,GAAI,IAAS,KAAO,IAAa,KAAO,EAAO,EAAI,KAAO,IAAK,CAC7D,EAAY,KAAK,CAAE,IAAK,EAAG,GAAI,IAAK,CAAC,EACrC,GAAK,EACL,SAEF,MAGJ,IAIF,GAAI,EAAY,SAAW,EACzB,OAAO,EAIT,IAAI,EAAS,EACb,QAAS,EAAI,EAAY,OAAS,EAAG,GAAK,EAAG,IAAK,CAChD,IAAQ,MAAK,MAAO,EAAY,GAC1B,EAAW,IAAO,KAAO,KAAO,QAGhC,EAAe,GAAwB,EAAQ,CAAG,EAElD,EAAgB,GAAyB,EAAQ,EAAM,CAAC,EAExD,EAAW,EAAO,MAAM,EAAc,CAAG,EAAE,KAAK,EAChD,EAAY,EAAO,MAAM,EAAM,EAAG,CAAa,EAAE,KAAK,EAE5D,GAAI,GAAY,EAAW,CAEzB,IAAM,EAAS,EAAO,MAAM,EAAG,CAAY,EACrC,EAAQ,EAAO,MAAM,CAAa,EAGlC,EADa,iBAAiB,KAAK,CAAM,EACnB,IAAM,GAClC,EAAS,GAAG,IAAS,IAAS,KAAY,MAAa,KAAa,KAIxE,OAAO,EAUT,SAAS,EAAuB,CAAC,EAAgB,EAAuB,CACtE,IAAI,EAAI,EAAQ,EAGhB,MAAO,GAAK,GAAK,KAAK,KAAK,EAAO,EAAE,EAAG,IACvC,GAAI,EAAI,EAAG,MAAO,GAElB,IAAI,EAAQ,EACR,EAAW,GACX,EAAa,GAEjB,MAAO,GAAK,EAAG,CACb,IAAM,EAAO,EAAO,GACd,EAAW,EAAI,EAAI,EAAO,EAAI,GAAK,GAGzC,GAAI,EAAU,CACZ,GAAI,IAAS,GAAc,IAAa,KACtC,EAAW,GAEb,IACA,SAIF,IAAK,IAAS,KAAO,IAAS,KAAO,IAAS,MAAQ,IAAa,KAAM,CACvE,EAAW,GACX,EAAa,EACb,IACA,SAIF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,CAChD,IACA,IACA,SAEF,GAAI,IAAS,KAAO,IAAS,IAAK,CAChC,GAAI,EAAQ,EAAG,CACb,IACA,IACA,SAIF,OAAO,EAAI,EAEb,GAAI,IAAS,IAAK,CAChB,GAAI,EAAQ,EAAG,CACb,IACA,IACA,SAGF,OAAO,EAAI,EAIb,GAAI,EAAQ,EAAG,CACb,IACA,SAKF,GAAI,IAAS,IACX,OAAO,EAAI,EAKb,GAAI,QAAQ,KAAK,CAAI,EAAG,CAEtB,IAAM,EAAU,EAAI,EAChB,EAAY,EAChB,MAAO,EAAY,GAAK,SAAS,KAAK,EAAO,EAAY,EAAE,EACzD,IAEF,IAAM,EAAO,EAAO,MAAM,EAAW,CAAO,EAEtC,EAAa,EAAY,EAAI,EAAO,EAAY,GAAK,GAC3D,GAAI,CAAC,gBAAgB,KAAK,CAAU,EAAG,CAErC,GACE,CACE,SACA,QACA,OACA,SACA,OACA,SACA,QACA,OACF,EAAE,SAAS,CAAI,EAEf,OAAO,EAIT,GAAI,IAAS,MACX,OAAO,GAMb,GAAI,IAAS,KAAO,IAAa,IAC/B,OAAO,EAAI,EAIb,GACE,IAAS,KACT,IAAa,KACb,IAAa,KACb,IAAa,KACb,IAAa,IAEb,OAAO,EAAI,EAIb,GAAI,IAAS,KAAO,IAAa,IAC/B,OAAO,EAAI,EAEb,GAAI,IAAS,KAAO,IAAa,IAC/B,OAAO,EAAI,EAIb,GAAI,IAAS,KAAO,IAAS,IAC3B,OAAO,EAAI,EAIb,GAAI,IAAS,IACX,OAAO,EAAI,EAGb,IAGF,MAAO,GAQT,SAAS,EAAwB,CAC/B,EACA,EACQ,CACR,IAAI,EAAI,EAGR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,GAAI,GAAK,EAAO,OAAQ,OAAO,EAAO,OAEtC,IAAI,EAAQ,EACR,EAAW,GACX,EAAa,GAEjB,MAAO,EAAI,EAAO,OAAQ,CACxB,IAAM,EAAO,EAAO,GACd,EAAW,EAAI,EAAI,EAAO,OAAS,EAAO,EAAI,GAAK,GAGzD,GAAI,EAAU,CACZ,GAAI,IAAS,GAAc,EAAO,EAAI,KAAO,KAC3C,EAAW,GAEb,IACA,SAGF,IACG,IAAS,KAAO,IAAS,KAAO,IAAS,MAC1C,EAAO,EAAI,KAAO,KAClB,CACA,EAAW,GACX,EAAa,EACb,IACA,SAIF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,CAChD,IACA,IACA,SAEF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,CAChD,GAAI,EAAQ,EAAG,CACb,IACA,IACA,SAGF,OAAO,EAIT,GAAI,EAAQ,EAAG,CACb,IACA,SAIF,GAAI,IAAS,IACX,OAAO,EAIT,GAAI,IAAS,KAAO,IAAa,IAC/B,OAAO,EAET,GAAI,IAAS,KAAO,IAAa,IAC/B,OAAO,EAIT,GAAI,IAAS,IACX,OAAO,EAET,GAAI,IAAS,IACX,OAAO,EAIT,GAAI,IAAS,IACX,OAAO,EAIT,IACG,IAAS,KAAO,IAAS,MAC1B,IAAa,KACb,EAAO,EAAI,KAAO,IAElB,OAAO,EAGT,IAGF,OAAO,EAAO,OAgBT,SAAS,EAAyB,CAAC,EAAwB,CAChE,IAAI,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CAExB,IAAM,EAAY,EACf,MAAM,CAAC,EACP,MAAM,oCAAoC,EAC7C,GAAI,EAAW,CACb,IAAM,EAAW,EAAU,GACvB,EAAI,EAAI,EAAU,GAAG,OAIrB,EAAc,EACd,EAAyB,GACvB,EAAkB,EAAO,MAAM,CAAC,EAAE,MAAM,sBAAsB,EACpE,GAAI,EAAiB,CACnB,IAAM,EAAc,EAAI,EAAgB,GAAG,OACrC,EAAW,EAAO,GAGlB,EACJ,IAAa,QACb,GAAe,EAAO,QACrB,IAAa,KAAO,IAAa,IAEpC,GAAI,IAAa,KAAO,IAAa,IAEnC,EAAc,EAAgB,GAC9B,EAAyB,GACzB,EAAI,EACC,QAAI,EAAkB,CAE3B,IAAM,EAAQ,EAAgB,GAAG,KAAK,EAEhC,EAAa,EAAgB,GAAG,MAAM,EAAM,MAAM,EACxD,GAAU,SAAS,aAAoB,OAAc,KAAS,IAC9D,EAAI,EACJ,UAKJ,IAAI,EACA,EAAkB,EAChB,EAAc,EAAO,MAAM,CAAC,EAAE,MAAM,OAAO,EACjD,GAAI,EAAa,CACf,GAAK,EAAY,GAAG,OAEpB,IAAM,EAAa,EAChB,MAAM,CAAC,EACP,MACC,4EACF,EACF,GAAI,EAAY,CACd,EAAe,EAAW,GAC1B,GAAK,EAAW,GAAG,OACnB,EAAkB,EAElB,IAAM,EAAU,EAAO,MAAM,CAAC,EAAE,MAAM,MAAM,EAC5C,GAAI,EAAS,GAAK,EAAQ,GAAG,QAKjC,GAAI,EAAO,KAAO,IAAK,CAErB,IAAM,EAAY,EAAI,EAClB,EAAQ,EACR,EAAI,EAGR,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAU,EAAG,CAEf,GAAU,EAAO,GACjB,IACA,SAGF,IAAM,EAAY,EAAO,MAAM,EAAW,EAAI,CAAC,EAAE,KAAK,EAChD,EAAW,EAGX,EAAkB,EAAU,MAChC,oCACF,EACA,GAAI,GAAmB,CAAC,EACtB,EAAc,EAAgB,GAIhC,IAAI,EACE,EAAiB,EAAU,MAAM,gBAAgB,EACvD,GAAI,EAAgB,CAClB,IAAM,EAAa,EAAe,MAAS,EAAe,GAAG,OACvD,EAAY,GAAe,EAAW,CAAU,EACtD,GAAI,EACF,EAAU,EAAU,MAAM,KAAK,EAInC,IAAM,EAAiB,EAAU,MAC/B,sCACF,EAIA,GAAI,GAAkB,EAAS,CAE7B,IAAM,EAAS,EAAe,GAAG,KAAK,EAChC,EAAO,EAAe,GAAG,KAAK,EAC9B,EAAa,EAAe,KAAK,IAAiB,GACxD,GAAU,SAAS,aAAoB,QAAkB,2CAAgD,8BAAmC,sBAA4B,QAAW,IAAU,KACxL,QAAI,EAAgB,CAEzB,IAAM,EAAS,EAAe,GAAG,KAAK,EAChC,EAAO,EAAe,GAAG,KAAK,EAC9B,EAAa,EAAe,gBAAgB,IAAiB,GACnE,GAAU,SAAS,aAAoB,QAAkB,WAAgB,MAAS,KAC7E,QAAI,EAAS,CAElB,IAAM,EAAa,EAAe,KAAK,IAAiB,GACxD,GAAU,SAAS,aAAoB,kBAA4B,IAAU,KACxE,QAAI,EAET,GAAU,SAAS,aAAoB,OAAiB,KAGxD,QAAU,SAAS,aAAoB,MAGzC,EAAI,EACJ,SACK,QAAI,EAAc,CAEvB,GAAU,SAAS,aAAoB,OAAiB,KACxD,EAAI,EACJ,SACK,QAAI,CAAC,EAAiB,CAE3B,IAAM,EAAa,EAChB,MAAM,CAAC,EACP,MACC,yEACF,EACF,GAAI,EAAY,CACd,IAAM,EAAU,EAAW,GAC3B,GAAU,SAAS,aAAoB,OAAc,KACrD,EAAI,EAAI,EAAW,GAAG,OACtB,WAKN,GAAU,EAAO,GACjB,IAGF,OAAO,EAwBF,SAAS,EAAsC,CAAC,EAAwB,CAC7E,IAAI,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CACxB,IAAM,EAAU,EACb,MAAM,CAAC,EACP,MAAM,kEAAkE,EAC3E,GAAI,EAAS,CACX,IAAM,EAAS,EAAQ,GACjB,EAAgB,EAAQ,GACxB,EAAI,EAAI,EAAQ,GAAG,OAGzB,GAAI,EAAO,KAAO,IAAK,CAErB,IAAI,EAAQ,EACR,EAAI,EAAI,EACZ,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,GAAI,EAAO,KAAO,IAAK,IAClB,QAAI,EAAO,KAAO,IAAK,IAC5B,IAGF,GAAI,IAAU,EAAG,CACf,IAAM,EAAY,EAAO,MAAM,EAAI,EAAG,EAAI,CAAC,EAAE,KAAK,EAG5C,EAAc,GAAqB,EAAW,iBAAiB,EAE/D,EAAe,EAAU,MAAM,6BAA6B,EAE5D,EAAgB,EAAU,MAC9B,oCACF,EAEM,EAAY,EAAU,MAAM,mCAAmC,EAE/D,EAAiB,CAAC,EACxB,GAAI,EAAa,EAAK,KAAK,WAAW,EAAY,IAAI,EACtD,GAAI,EAAc,EAAK,KAAK,YAAY,EAAa,GAAG,KAAK,GAAG,EAChE,GAAI,EACF,EAAK,KAAK,oBAAoB,EAAc,KAAK,EAGnD,IAAM,EAAO,EAAY,EAAU,GAAK,EAExC,GAAI,EAAe,CAEjB,IAAM,EAAa,EAAc,MAAM,GAAG,EAAE,IAAI,CAAC,IAAM,CACrD,IAAM,EAAQ,EACX,KAAK,EACL,MAAM,GAAG,EACT,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EACtB,GAAI,EAAM,SAAW,EAAG,CACtB,IAAM,EACJ,EAAM,KAAO,OAAS,EAAM,KAAO,YAC/B,OACA,EAAM,GACZ,MAAO,KAAK,EAAM,QAAQ,KAE5B,MAAO,IAAI,EAAM,MAClB,EACK,EAAa,EAChB,MAAM,GAAG,EACT,IAAI,CAAC,IAAM,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,EAC3C,GAAU,SAAS,0BAA+B,QAAW,EAAW,KACtE,IACF,QAAQ,EAAW,KAAK,IAAI,YAAY,EAAK,KAAK,IAAI,QAGtD,QAAU,SAAS,0BAA+B,SAAY,EAAK,KACjE,IACF,OAEF,EAAI,EACJ,UAKJ,GAAI,EAAO,KAAO,IAAK,CAErB,IAAI,EAAQ,EACR,EAAI,EAAI,EACZ,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,GAAI,EAAO,KAAO,IAAK,IAClB,QAAI,EAAO,KAAO,IAAK,IAC5B,IAGF,GAAI,IAAU,EAAG,CACf,IAAM,EAAO,EAAO,MAAM,EAAI,EAAG,EAAI,CAAC,EAAE,KAAK,EAEvC,EAAW,EAAK,QAAQ,GAAG,EACjC,GAAI,IAAa,GAAI,CACnB,IAAM,EAAQ,EAAK,MAAM,EAAG,CAAQ,EAAE,KAAK,EACrC,EAAO,EAAK,MAAM,EAAW,CAAC,EAAE,KAAK,EAC3C,GAAU,SAAS,yBAA8B,MAAS,KAG1D,QAAU,SAAS,0BAA+B,OAAY,KAEhE,EAAI,EACJ,WAKN,GAAU,EAAO,GACjB,IAGF,OAAO,EAcF,SAAS,EAA4B,CAAC,EAAwB,CACnE,IAAI,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CAExB,IAAM,EAAe,EAClB,MAAM,CAAC,EACP,MAAM,oDAAoD,EAC7D,GAAI,EAAc,CAChB,IAAM,EAAc,EAAa,GAC3B,EAAgB,EAAa,GAE7B,EADa,EAAI,EAAa,GAAG,OAAS,EACjB,EAC3B,EAAQ,EACR,EAAI,EAGR,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAU,EAAG,CAEf,GAAU,EAAO,GACjB,IACA,SAGF,IAAM,EAAY,EAAO,MAAM,EAAW,EAAI,CAAC,EAAE,KAAK,EAChD,EAAW,EAGX,EAAa,EAAc,MAAM,GAAG,EAAE,IAAI,CAAC,IAAM,CACrD,IAAM,EAAQ,EACX,KAAK,EACL,MAAM,GAAG,EACT,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EACtB,GAAI,EAAM,SAAW,EAAG,CAEtB,IAAM,EACJ,EAAM,KAAO,OAAS,EAAM,KAAO,YAAc,OAAS,EAAM,GAClE,MAAO,KAAK,EAAM,QAAQ,KAE5B,MAAO,IAAI,EAAM,MAClB,EAIG,EAAa,EACX,EAAU,EAAW,OAAO,oBAAoB,EACtD,GAAI,IAAY,GAAI,CAElB,IAAM,EAAiB,EAAW,QAAQ,IAAK,CAAO,EAClD,EAAS,EACT,EAAK,EAAiB,EAC1B,MAAO,EAAK,EAAW,QAAU,EAAS,EAAG,CAC3C,GAAI,EAAW,KAAQ,IAAK,IACvB,QAAI,EAAW,KAAQ,IAAK,IACjC,IAGF,EAAa,EAAW,MAAM,EAAG,CAAO,EAAI,EAAW,MAAM,CAAE,EAGjE,IAAM,EAAY,EAAW,MAAM,oCAAoC,EACjE,EAAiB,EAAW,MAChC,sCACF,EAEM,EAAc,EAAY,EAAU,GAAK,EAE/C,GAAI,EAAgB,CAClB,IAAM,EAAS,EAAe,GAC3B,KAAK,EACL,MAAM,GAAG,EACT,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EAClB,EAAO,EAAe,GAAG,KAAK,EAG5B,EAAa,EAAO,IAAM,IAC1B,EAAiB,EAAO,MAAM,CAAC,EAC/B,EAAkB,EAAe,IAAI,CAAC,IAAM,QAAQ,GAAG,EAI7D,EAAe,QAAQ,CAAC,EAAM,IAAQ,CACpC,EAAO,EAAK,QACV,IAAI,OAAO,MAAM,WAAe,GAAG,EACnC,GAAG,EAAgB,KACrB,EACD,EAED,GAAU,SAAS,gBAA0B,EAAW,KACtD,IACF,QAAQ,MAAe,EAAgB,KACrC,IACF,WAAW,SAAY,MAGvB,QAAU,SAAS,gBAA0B,EAAW,KACtD,IACF,oBAAoB,MAGtB,EAAI,EACJ,SAGF,GAAU,EAAO,GACjB,IAGF,OAAO,EAiBF,SAAS,EAA0B,CAAC,EAAwB,CACjE,IAAI,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CAExB,IAAM,EAAa,EAChB,MAAM,CAAC,EACP,MAAM,uDAAuD,EAChE,GAAI,EAAY,CACd,IAAM,EAAY,EAAW,GACvB,EAAc,EAAW,GACzB,EAAI,EAAI,EAAW,GAAG,OAG5B,GAAI,EAAO,KAAO,IAAK,CAErB,IAAM,EAAY,EAAI,EAClB,EAAQ,EACR,EAAI,EAGR,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAU,EAAG,CACf,GAAU,EAAO,GACjB,IACA,SAGF,IAAM,EAAY,EAAO,MAAM,EAAW,EAAI,CAAC,EAAE,KAAK,EAChD,EAAW,EAGX,EAAS,GAAiB,CAAS,EACzC,GAAU,SAAS,cAAsB,QAAkB,EAAO,KAChE,IACF,MACA,EAAI,EACJ,SACK,KAGL,IAAI,EAAU,EAAO,QAAQ;AAAA,EAAM,CAAC,EACpC,GAAI,IAAY,GAAI,EAAU,EAAO,OACrC,IAAM,EAAe,EAAO,MAAM,EAAG,CAAO,EAAE,KAAK,EAEnD,GAAI,EAAc,CAChB,IAAM,EAAS,GAAiB,CAAY,EAC5C,GAAU,SAAS,cAAsB,QAAkB,EAAO,KAChE,IACF,MACA,EAAI,EACJ,WAKN,GAAU,EAAO,GACjB,IAGF,OAAO,EAOT,SAAS,EAAgB,CAAC,EAAyB,CACjD,IAAM,EAAmB,CAAC,EAEpB,EAAQ,EAAM,MAAM,GAAG,EAAE,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EAElD,QAAW,KAAQ,EAAO,CACxB,GAAI,CAAC,EAAM,SAEX,EAAO,KAAK,CAAI,EAGlB,OAAO,EAuBF,SAAS,EAAyB,CAAC,EAAwB,CAChE,IAAI,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CAExB,IAAM,EAAY,EACf,MAAM,CAAC,EACP,MAAM,wDAAwD,EACjE,GAAI,EAAW,CACb,IAAM,EAAW,EAAU,GACrB,EAAc,EAAU,GAExB,EADa,EAAI,EAAU,GAAG,OAAS,EACd,EAC3B,EAAQ,EACR,EAAI,EAGR,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAU,EAAG,CACf,GAAU,EAAO,GACjB,IACA,SAGF,IAAM,EAAY,EAAO,MAAM,EAAW,EAAI,CAAC,EAAE,KAAK,EAChD,EAAW,EAIX,EADU,GAAiB,CAAS,EAEvC,IAAI,EAAE,EAAK,KAAW,GAAG,MAAQ,GAAO,EACxC,KAAK,IAAI,EAEZ,GAAU,SAAS,aAAoB,SAAmB,OAC1D,EAAI,EACJ,SAGF,GAAU,EAAO,GACjB,IAGF,OAAO,EAQT,SAAS,EAAgB,CAAC,EAAmC,CAC3D,IAAM,EAA8B,CAAC,EACjC,EAAsB,EAGpB,EAAQ,EACX,MAAM,OAAO,EACb,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EACnB,OAAO,CAAC,IAAM,GAAK,CAAC,EAAE,WAAW,IAAI,CAAC,EAEzC,QAAW,KAAQ,EAAO,CAExB,IAAM,EAAQ,EAAK,MAAM,4CAA4C,EACrE,GAAI,EAAO,CACT,IAAM,EAAM,EAAM,GACZ,EAAgB,EAAM,IAAI,KAAK,EAErC,GAAI,IAAkB,OAAW,CAC/B,EAAQ,KAAK,CAAC,EAAK,CAAa,CAAC,EAEjC,IAAM,EAAS,OAAO,CAAa,EACnC,GAAI,CAAC,MAAM,CAAM,EACf,EAAsB,EAAS,EAIjC,OAAQ,KAAK,CAAC,EAAK,OAAO,CAAmB,CAAC,CAAC,EAC/C,KAKN,OAAO,EAOF,SAAS,EAA2B,CAAC,EAG1C,CACA,IAAM,EAAa,IAAI,IACnB,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CAExB,IAAM,EAAY,EAAO,MAAM,CAAC,EAC1B,EAAc,EAAU,MAAM,gCAAgC,EAEpE,GAAI,CAAC,EAAa,CAQhB,GALE,IAAM,GACN,EAAO,EAAI,KAAO;AAAA,GAClB,EAAO,EAAI,KAAO,KAClB,EAAO,EAAI,KAAO,IAEL,CACb,IAAM,EAAU,EAAU,MAAM,gCAAgC,EAKlE,GAAU,EAAO,GACjB,IACA,SAGF,IAAM,EAAS,EAAY,GACrB,EAAW,EAAY,GACvB,EAAa,EAAI,EAAY,GAAG,OAAS,EAGzC,EAAW,GAAoB,EAAQ,CAAU,EACjD,EAAY,EAAO,MAAM,EAAa,EAAG,EAAW,CAAC,EAAE,KAAK,EAI5D,EAAkE,CAAC,EACrE,EAAI,EACF,EAAa,EAAO,MAAM,EAAa,EAAG,EAAW,CAAC,EAE5D,MAAO,EAAI,EAAW,OAAQ,CAE5B,IAAM,EADkB,EAAW,MAAM,CAAC,EACN,MAAM,6BAA6B,EAEvE,GAAI,CAAC,EAAa,CAChB,IACA,SAGF,IAAM,EAAe,EAAY,GAC3B,EAAU,CAAC,CAAC,EAAY,GACxB,EAAa,EAAY,GAMzB,EAAa,EAAI,EAAY,GAAG,OAAS,EAC3C,EAAa,EACb,EAAI,EAAa,EACrB,MAAO,EAAI,EAAW,QAAU,EAAa,EAAG,CAC9C,GAAI,EAAW,KAAO,IAAK,IAC3B,GAAI,EAAW,KAAO,IAAK,IAC3B,IAEF,IAAM,EAAY,EAAW,MAAM,EAAa,EAAG,EAAI,CAAC,EAGpD,EAAc,EAClB,MACE,EAAc,EAAW,QACzB,KAAK,KAAK,EAAW,EAAY,EAEjC,IAIF,GACE,EAAW,KAAiB,KAC5B,EAAW,EAAc,KAAO,IAChC,CACA,IAAM,GAAM,GAAM,EAAQ,EAAa,EAAI,CAAC,EAC5C,MAAM,IAAI,GACR,6DAA6D,gBAAyB,qFAEtF,EACF,EAGF,GAAI,EAAW,KAAiB,IAAK,CACnC,IACA,SAIF,IAAM,EAAgB,GAAoB,EAAY,CAAW,EAC3D,EAAiB,EAAW,MAAM,EAAG,CAAa,EAAE,KAAK,EAIzD,EAAoB,EACvB,MAAM,GAAG,EACT,IAAI,CAAC,KAAM,GAAE,KAAK,CAAC,EACnB,OAAO,CAAC,KAAM,GAAE,OAAS,CAAC,EAC1B,IAAI,CAAC,KAAM,CAEV,IAAM,GAAa,GAAE,MAAM,oBAAoB,EAC/C,GAAI,GAAY,MAAO,GAAG,GAAW,QAAQ,GAAW,KACxD,OAAO,GACR,EACA,KAAK,IAAI,EACN,EAAc,EAAU,SAAW,GACnC,EAAa,EAAW,MAAM,EAAc,EAAG,EAAgB,CAAC,EACtE,EAAQ,KAAK,CACX,KAAM,EACN,UACA,SAAU,GAAG,MAAe,aAAuB,OAAuB,IAC5E,CAAC,EAED,EAAI,EAIN,IAAM,EAAiB,CAAC,EAAW,IAAI,CAAQ,EAC/C,GAAI,EACF,EAAW,IAAI,EAAU,IAAI,GAAK,EAEpC,IAAM,EAAS,EAAW,IAAI,CAAQ,EACtC,QAAW,KAAK,EACd,EAAO,IAAI,EAAE,IAAI,EAInB,IAAM,EAAgB,EAAQ,IAAI,CAAC,IAAM,KAAK,EAAE,UAAU,EAAE,KAAK;AAAA,CAAK,EAClE,EACJ,GAAI,EACF,EAAc,GAAG,gBAAqB;AAAA,EAAiB;AAAA,EAAkB;AAAA,EAGzE,OAAc,GAAG,wBAA6B;AAAA,EAAgB;AAAA,EAAkB;AAAA,EAIlF,QAAW,KAAK,EACd,GAAe,GAAG,6DAAkE,QAAe,EAAE,gBAAgB,KAAY,EAAE;AAAA,EAGrI,GAAU,EACV,EAAI,EAIN,GAAI,GAAK,EAAO,QAAU,EAAO,OAAS,EAAO,OAAQ,CAIzD,MAAO,CAAE,OAAQ,EAAQ,YAAW,EAa/B,SAAS,EAAuB,CACrC,EACA,EACQ,CACR,GAAI,EAAW,OAAS,EAAG,OAAO,EAGlC,IAAM,EAAgB,IAAI,IAC1B,QAAY,EAAU,KAAY,EAChC,QAAW,KAAU,EAAS,CAC5B,GAAI,CAAC,EAAc,IAAI,CAAM,EAC3B,EAAc,IAAI,EAAQ,CAAC,CAAC,EAE9B,EAAc,IAAI,CAAM,EAAG,KAAK,CAAQ,EAI5C,IAAI,EAAS,EAGb,QAAY,EAAQ,KAAc,EAAe,CAC/C,GAAI,CAAC,EAAU,SAAS,QAAQ,EAAG,SAInC,IAAM,EAAqB,IAAI,OAC7B,8BAA8B,cAC9B,GACF,EACA,EAAS,EAAO,QAAQ,EAAoB,CAAC,EAAG,EAAK,EAAM,IAAe,CACxE,OAAO,EACH,gBAAgB,UAAa,KAC7B,gBAAgB,UAAa,MAClC,EAGD,IAAM,EAAqB,IAAI,OAC7B,8BAA8B,cAC9B,GACF,EACA,EAAS,EAAO,QAAQ,EAAoB,CAAC,EAAG,EAAK,EAAM,IAAe,CACxE,OAAO,EACH,gBAAgB,UAAa,KAC7B,gBAAgB,UAAa,MAClC,EAGD,IAAM,EAAkB,IAAI,OAC1B,6BAA+B,EAAS,YACxC,GACF,EACA,EAAS,EAAO,QAAQ,EAAiB,CAAC,EAAG,EAAK,IAAe,CAC/D,OAAO,EACH,gBAAgB,UAAe,KAC/B,gBAAgB,UAAe,MACpC,EAIH,QAAY,EAAQ,KAAc,EAAe,CAC/C,GAAI,CAAC,EAAU,SAAS,OAAO,EAAG,SAKlC,IAAM,EAAY,KAAK,KACnB,EAAa,EACb,EACJ,OAAQ,EAAM,EAAO,QAAQ,EAAW,CAAU,KAAO,GAAI,CAE3D,IAAI,EAAe,EACf,EAAI,EAAM,EACV,EAAwB,GAC5B,MAAO,GAAK,GAAK,EAAe,EAAG,CACjC,IAAM,EAAK,EAAO,GAClB,GAAI,GACF,GAAI,IAAO,IAAU,IAAM,GAAK,EAAO,EAAI,KAAO,MAChD,EAAQ,GAEL,KACL,GAAI,IAAO,IAAK,IAChB,GAAI,IAAO,IAAK,IAChB,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,EAAQ,EAEtD,IAGF,GAAI,IAAiB,EAAG,CACtB,IAAM,EAAe,EAAO,MAAM,EAAI,EAAG,EAAM,CAAC,EAC1C,EAAS,EAAO,MAAM,EAAG,EAAI,CAAC,EAC9B,EAAQ,EAAO,MAAM,EAAM,EAAU,MAAM,EAEjD,GAAI,EAAM,KAAO,IACf,EAAS,GAAG,gBAAqB,UAAe,KAAgB,EAAM,MACpE,CACF,IAEA,OAAS,GAAG,gBAAqB,UAAe,MAAiB,IAIrE,EAAa,EAAM,GAKvB,QAAY,EAAQ,KAAc,EAAe,CAC/C,GAAI,CAAC,EAAU,SAAS,QAAQ,EAAG,SAEnC,IAAM,EAAa,IAAI,OACrB,yBAAyB,cACzB,GACF,EACA,EAAS,EAAO,QAAQ,EAAY,CAAC,EAAG,EAAK,EAAM,IAAe,CAChE,OAAO,EACH,gBAAgB,UAAa,KAC7B,gBAAgB,UAAa,MAClC,EAGH,OAAO,EAMF,SAAS,EAAK,CACnB,EACA,EACkC,CAClC,IAAI,EAAO,EACP,EAAS,EACb,QAAS,EAAI,EAAG,EAAI,GAAO,EAAI,EAAO,OAAQ,IAC5C,GAAI,EAAO,KAAO;AAAA,EAChB,IACA,EAAS,EAET,SAGJ,MAAO,CAAE,OAAM,QAAO,EAOxB,SAAS,EAAmB,CAAC,EAAiB,EAA8B,CAC1E,IAAM,EAAK,EAAa,KAAK,EAG7B,GAAI,SAAS,KAAK,CAAE,EAAG,MAAO,UAAU,iBAGxC,GAAI,IAAO,QAAU,IAAO,QAAS,MAAO,UAAU,kBAGtD,GAAI,IAAO,OAAQ,MAAO,GAAG,aAG7B,GAAI,IAAO,YAAa,MAAO,GAAG,kBAGlC,GAAI,EAAG,WAAW,GAAG,EAAG,MAAO,iBAAiB,KAGhD,GAAI,EAAG,WAAW,GAAG,EACnB,MAAO,WAAW,qBAA2B,gCAAsC,MAGrF,GAAI,SAAS,KAAK,CAAE,EAClB,MAAO,WAAW,sCAA4C,SAAe,UAG/E,GAAI,cAAc,KAAK,CAAE,EAAG,MAAO,UAAU,iBAG7C,GAAI,UAAU,KAAK,CAAE,EACnB,MAAO,WAAW,sCAA4C,MAGhE,MAAO,OAOT,SAAS,EAAuB,CAAC,EAA8B,CAC7D,IAAM,EAAK,EAAa,KAAK,EAC7B,GAAI,SAAS,KAAK,CAAE,EAAG,MAAO,SAC9B,GAAI,IAAO,QAAU,IAAO,QAAS,MAAO,UAC5C,GAAI,IAAO,OAAQ,MAAO,OAC1B,GAAI,IAAO,YAAa,MAAO,YAC/B,GAAI,EAAG,WAAW,GAAG,EAAG,MAAO,QAC/B,GAAI,EAAG,WAAW,GAAG,EAAG,MAAO,SAC/B,GAAI,SAAS,KAAK,CAAE,EAAG,MAAO,uBAC9B,GAAI,cAAc,KAAK,CAAE,EAAG,MAAO,SACnC,GAAI,UAAU,KAAK,CAAE,EAAG,MAAO,UAC/B,MAAO,MAQT,SAAS,EAAc,CACrB,EACA,EAC6D,CAC7D,IAAM,EAAsE,CAAC,EACzE,EAAQ,EACR,EAAU,GACV,EAA2B,GAE/B,QAAS,EAAI,EAAG,EAAI,EAAS,OAAQ,IAAK,CACxC,IAAM,EAAK,EAAS,GAGpB,GAAI,CAAC,IAAa,IAAO,KAAO,IAAO,KAAO,IAAO,KAAM,CACzD,EAAW,EACX,GAAW,EACX,SAEF,GAAI,EAAU,CAEZ,GADA,GAAW,EACP,IAAO,KAAM,CAEf,GADA,IACI,EAAI,EAAS,OAAQ,GAAW,EAAS,GAC7C,SAEF,GAAI,IAAO,EAAU,EAAW,GAChC,SAIF,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,CAC1C,IACA,GAAW,EACX,SAEF,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,CAC1C,IACA,GAAW,EACX,SAIF,GAAI,IAAO,KAAO,IAAU,EAAG,CAC7B,IAAM,EAAQ,GAAc,EAAQ,KAAK,EAAG,CAAc,EAC1D,GAAI,EAAO,EAAO,KAAK,CAAK,EAC5B,EAAU,GACV,SAGF,GAAW,EAIb,IAAM,EAAU,EAAQ,KAAK,EAC7B,GAAI,EAAS,CACX,IAAM,EAAQ,GAAc,EAAS,CAAc,EACnD,GAAI,EAAO,EAAO,KAAK,CAAK,EAG9B,OAAO,EAMT,SAAS,EAAa,CACpB,EACA,EACkE,CAElE,IAAM,EAAM,EAAS,QAAQ,2BAA4B,EAAE,EAG3D,GAAI,EAAI,WAAW,KAAK,EAAG,OAAO,KAGlC,IAAM,EAAQ,EAAI,QAAQ,GAAG,EAC7B,GAAI,IAAU,GAEZ,MAAO,CAAE,KAAM,EAAI,KAAK,EAAG,aAAc,GAAI,SAAU,EAAK,EAG9D,IAAM,EAAO,EAAI,MAAM,EAAG,CAAK,EAAE,KAAK,EAChC,EAAe,EAAI,MAAM,EAAQ,CAAC,EAAE,KAAK,EAC/C,MAAO,CAAE,OAAM,eAAc,SAAU,EAAe,IAAI,CAAI,CAAE,EAQ3D,SAAS,EAAmB,CACjC,EACA,EACQ,CACR,IAAI,EAAQ,EACR,EAAI,EAAe,EACnB,EAA2B,GAC3B,EAAgB,GAChB,EAAiB,GAErB,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAK,EAAO,GACZ,EAAO,EAAI,EAAI,EAAO,OAAS,EAAO,EAAI,GAAK,GAGrD,GAAI,EAAe,CACjB,GAAI,IAAO;AAAA,EAAM,EAAgB,GACjC,IACA,SAIF,GAAI,EAAgB,CAClB,GAAI,IAAO,KAAO,IAAS,IAAK,CAC9B,EAAiB,GACjB,GAAK,EACL,SAEF,IACA,SAIF,GAAI,EAAU,CACZ,GAAI,IAAO,KAAM,CACf,GAAK,EACL,SAEF,GAAI,IAAO,EAAU,EAAW,GAChC,IACA,SAIF,GAAI,IAAO,KAAO,IAAS,IAAK,CAC9B,EAAgB,GAChB,GAAK,EACL,SAEF,GAAI,IAAO,KAAO,IAAS,IAAK,CAC9B,EAAiB,GACjB,GAAK,EACL,SAIF,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,CAC1C,EAAW,EACX,IACA,SAIF,GAAI,IAAO,IAAK,IAChB,GAAI,IAAO,IAAK,IAEhB,IAGF,OAAO,EAuBF,SAAS,EAA6B,CAC3C,EACA,EACmD,CACnD,IAAM,EAAmB,IAAI,IAIvB,EACJ,sEACI,EAAe,IAAI,IACrB,EAGE,EAMA,CAAC,EAEP,OAAQ,EAAQ,EAAY,KAAK,CAAM,KAAO,KAAM,CAClD,IAAM,EAAW,CAAC,CAAC,EAAM,GACnB,EAAU,CAAC,CAAC,EAAM,GAClB,EAAO,EAAM,GACb,EAAiB,EAAM,MAEzB,EAAmB,EAEjB,EADS,EAAM,GACE,QAAQ,UAAU,EACzC,GAAI,GAAW,EAAG,EAAmB,EAAiB,EAEtD,EAAW,KAAK,CACd,OACA,iBACA,mBACA,WACA,SACF,CAAC,EAIH,QAAW,KAAK,EACd,GAAI,CAAC,EAAa,IAAI,EAAE,IAAI,EAC1B,EAAa,IAAI,EAAE,KAAM,CAAC,CAAC,EAK/B,IAAM,EAAa,IAAI,IACvB,QAAW,KAAK,EACd,EAAW,IAAI,EAAE,MAAO,EAAW,IAAI,EAAE,IAAI,GAAK,GAAK,CAAC,EAG1D,IAAM,EAAY,IAAI,IACtB,QAAY,EAAM,KAAU,EAC1B,GAAI,EAAQ,EAAG,EAAU,IAAI,CAAI,EAGnC,GAAI,EAAU,OAAS,EACrB,MAAO,CAAE,SAAQ,kBAAiB,EAIpC,QAAW,KAAK,EAAY,CAC1B,GAAI,CAAC,EAAU,IAAI,EAAE,IAAI,EAAG,SAG5B,IAAM,EAAY,EAAO,QAAQ,IAAK,EAAE,gBAAgB,EACxD,GAAI,IAAc,GAAI,SAGtB,IAAI,EAAa,EACb,EAAI,EAAY,EACpB,MAAO,EAAI,EAAO,QAAU,EAAa,EAAG,CAC1C,GAAI,EAAO,KAAO,IAAK,IACvB,GAAI,EAAO,KAAO,IAAK,IACvB,IAEF,IAAM,EAAa,EAAI,EACjB,EAAW,EAAO,MAAM,EAAY,EAAG,CAAU,EAGnD,EAAY,EAChB,MAAO,EAAY,EAAO,QAAU,EAAO,KAAe,IAAK,IAC/D,GAAI,GAAa,EAAO,OAAQ,SAGhC,IAAM,EAAU,GAAoB,EAAQ,CAAS,EAGjD,EAAY,EAAE,eAElB,MAAO,EAAY,GAAK,EAAO,EAAY,KAAO,IAAK,IAEvD,IAAM,EAAW,EAAa,IAAI,EAAE,IAAI,EAClC,EAAS,GAAe,EAAU,CAAc,EAItD,GADqB,EAAS,SAAS,KAAK,EAC1B,CAChB,IAAM,EAAM,GAAM,EAAQ,EAAE,gBAAgB,EAC5C,MAAM,IAAI,GACR,8DAA8D,EAAE,8CAEhE,CACF,EAGF,EAAS,KAAK,CACZ,MAAO,EAAS,OAAS,EACzB,MAAO,EACP,IAAK,EACL,KAAM,EAAO,MAAM,EAAW,CAAO,EACrC,SAAU,EAAE,SACZ,QAAS,EAAE,QACX,QACF,CAAC,EAIH,QAAY,EAAM,KAAa,EAAc,CAC3C,GAAI,EAAS,OAAS,EAAG,SAGzB,IAAM,EAAa,EAAS,OAAO,CAAC,IAAM,EAAE,OAAO,EAAE,OACrD,GAAI,EAAa,GAAK,EAAa,EAAS,OAAQ,CAClD,IAAM,EAAM,GAAM,EAAQ,EAAS,GAAG,KAAK,EAC3C,MAAM,IAAI,GACR,yBAAyB,4DACzB,CACF,EAIF,QAAS,EAAI,EAAG,EAAI,EAAS,OAAQ,IACnC,QAAS,EAAI,EAAI,EAAG,EAAI,EAAS,OAAQ,IAAK,CAC5C,IAAM,EAAI,EAAS,GACb,EAAI,EAAS,GAGnB,GAAI,EAAE,OAAO,SAAW,EAAE,OAAO,OAAQ,SAGzC,IAAI,EAAU,GACd,QAAS,EAAI,EAAG,EAAI,EAAE,OAAO,OAAQ,IAAK,CACxC,IAAM,EAAO,EAAE,OAAO,GAAG,aACrB,GAAwB,EAAE,OAAO,GAAG,YAAY,EAChD,MACE,EAAO,EAAE,OAAO,GAAG,aACrB,GAAwB,EAAE,OAAO,GAAG,YAAY,EAChD,MACJ,GAAI,IAAS,EAAM,CACjB,EAAU,GACV,OAIJ,GAAI,EAAS,CACX,IAAM,EAAM,GAAM,EAAQ,EAAE,KAAK,EACjC,MAAM,IAAI,GACR,yBAAyB,gBAAmB,EAAI,SAC9C,EAAI,2HAGN,CACF,IAQR,IAAM,EAAwD,CAAC,EAC/D,QAAY,EAAM,KAAa,EAAc,CAC3C,GAAI,EAAS,OAAS,EAAG,SACzB,QAAW,KAAK,EACd,EAAY,KAAK,CAAE,OAAM,QAAS,CAAE,CAAC,EAGzC,EAAY,KAAK,CAAC,EAAG,IAAM,EAAE,QAAQ,MAAQ,EAAE,QAAQ,KAAK,EAG5D,IAAI,EAAS,EACb,QAAa,OAAM,aAAa,EAAa,CAC3C,IAAM,EAAc,EAAQ,QAAU,SAAW,GAI3C,EAAU,EAAQ,KAAK,QAC3B,IAAI,OACF,kBACE,EAAc,EAAY,QAAQ,OAAQ,MAAM,EAAI,iBACvC,UACjB,EACA,GAAG,aAAuB,MAAS,EAAQ,QAC7C,EACA,EACE,EAAO,MAAM,EAAG,EAAQ,KAAK,EAAI,EAAU,EAAO,MAAM,EAAQ,GAAG,EAIvE,QAAY,EAAM,KAAa,EAAc,CAC3C,GAAI,EAAS,OAAS,EAAG,SACzB,EAAiB,IAAI,CAAI,EAEzB,IAAM,EAAU,EAAS,GAAG,QACtB,EAAa,EAAS,KAAK,CAAC,IAAM,EAAE,QAAQ,EAC5C,EAAc,EAAU,SAAW,GACnC,EAAe,EAAa,UAAY,GAKxC,EAAS,CAAC,GAAG,CAAQ,EAAE,KAAK,CAAC,EAAG,IAAM,CAE1C,GAAI,EAAE,OAAO,SAAW,EAAE,OAAO,OAAQ,MAAO,GAGhD,IAAI,EAAQ,EACR,EAAQ,EACZ,QAAW,KAAK,EAAE,OAAQ,CACxB,IAAM,EAAM,EAAE,aACV,GAAwB,EAAE,YAAY,EACtC,MACJ,GAAI,IAAQ,uBAAwB,GAAS,EACxC,QAAI,IAAQ,UAAW,GAAS,EAChC,QAAI,IAAQ,MAAO,GAAS,EAEnC,QAAW,KAAK,EAAE,OAAQ,CACxB,IAAM,EAAM,EAAE,aACV,GAAwB,EAAE,YAAY,EACtC,MACJ,GAAI,IAAQ,uBAAwB,GAAS,EACxC,QAAI,IAAQ,UAAW,GAAS,EAChC,QAAI,IAAQ,MAAO,GAAS,EAEnC,OAAO,EAAQ,EAChB,EAGK,EAAqB,CAAC,EAC5B,QAAW,KAAK,EAAQ,CACtB,IAAM,EAAmB,CAAC,qBAAqB,EAAE,OAAO,QAAQ,EAC1D,EAAiB,CAAC,EAExB,QAAS,EAAI,EAAG,EAAI,EAAE,OAAO,OAAQ,IAAK,CACxC,IAAM,EAAI,EAAE,OAAO,GAEnB,GADA,EAAK,KAAK,UAAU,IAAI,EACpB,EAAE,aAAc,CAClB,IAAM,EAAQ,GAAoB,UAAU,KAAM,EAAE,YAAY,EAChE,GAAI,IAAU,OAAQ,EAAO,KAAK,CAAK,GAI3C,EAAS,KACP,SAAS,EAAO,KAAK,MAAM,aAAa,KAAQ,EAAE,SAAS,EAAK,KAC9D,IACF,IACF,EAGF,IAAM,EAAa;AAAA,EACrB,IAAe,aAAuB;AAAA,EACtC,EAAS,KAAK;AAAA,CAAI;AAAA,4BACQ;AAAA;AAAA,EAGxB,GAAU,EAGZ,MAAO,CAAE,OAAQ,EAAQ,kBAAiB,EAWrC,SAAS,EAAwB,CAAC,EAAwB,CAG/D,OAAO,EAAO,QACZ,kDACA,CAAC,EAAO,IAAS,CAEf,OAAO,EAAM,QAAQ,EAAM,SAAS,GAAM,EAE9C,EAOK,SAAS,EAAkB,CAChC,EACA,EAAY,GAKZ,CACA,IAAM,EAAqB,CAAC,EACtB,EAAmB,CAAC,EACtB,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CAExB,IAAM,EAAY,EAAO,MAAM,CAAC,EAAE,MAAM,YAAY,EACpD,GAAI,EAAW,CACb,IAAM,EAAQ,EACV,EAAI,EAAI,EAAU,GAAG,OAGrB,EACE,EAAY,EAAO,MAAM,CAAC,EAAE,MAAM,sBAAsB,EAC9D,GAAI,EACF,EAAc,EAAU,GACxB,GAAK,EAAU,GAAG,OAIpB,GAAI,EAAO,KAAO,IAAK,CACrB,IAAM,EAAY,EAAI,EAClB,EAAQ,EACR,EAAI,EAGR,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAU,EAAG,CACf,IAAM,EAAO,EAAO,MAAM,EAAW,EAAI,CAAC,EAAE,KAAK,EAC3C,EAAM,EAEN,GAAQ,EAAO,MAAM,EAAG,CAAK,EAAE,MAAM,KAAK,GAAK,CAAC,GAAG,OAAS,EAIlE,GAHA,EAAM,KAAK,CAAE,cAAa,OAAM,QAAO,MAAK,MAAK,CAAC,EAG9C,CAAC,EACH,GAAI,CAGiB,SAAS,CAAI,EACzB,EACP,MAAO,EAAU,CACjB,IAAM,EAAO,GAAe,gBAAgB,IAC5C,EAAO,KACL,gBAAgB,WAAc;AAAA,IAAY,EAAI,SAAW,GAC3D,EAMJ,IAAM,GADU,EAAO,MAAM,EAAO,CAAG,EACb,MAAM,KAAK,GAAK,CAAC,GAAG,OAC9C,GAAU;AAAA,EAAK,OAAO,CAAQ,EAC9B,EAAI,EACJ,WAKN,GAAU,EAAO,GACjB,IAGF,MAAO,CAAE,OAAQ,EAAQ,QAAO,QAAO,EAmClC,SAAS,EAAgC,CAC9C,EACA,EACkD,CAClD,IAAM,EAAkB,IAAI,IAGtB,EAAa,2CACf,EAGE,EAMA,CAAC,EAEP,OAAQ,EAAa,EAAW,KAAK,CAAM,KAAO,KAAM,CACtD,IAAM,EAAY,EAAW,GACvB,EAAgB,EAAW,IAAI,KAAK,GAAK,GACzC,EAAY,EAAW,MAAQ,EAAW,GAAG,OAAS,EAEtD,EAAU,GAAoB,EAAQ,CAAS,EAC/C,EAAO,EAAO,MAAM,EAAW,CAAO,EAE5C,EAAW,KAAK,CAAE,YAAW,gBAAe,YAAW,UAAS,MAAK,CAAC,EAIxE,IAAI,EAAS,EACb,QAAS,EAAK,EAAW,OAAS,EAAG,GAAM,EAAG,IAAM,CAClD,IAAQ,YAAW,gBAAe,YAAW,UAAS,QACpD,EAAW,GAGP,EAAc,sBAChB,EACE,EAA0B,CAAC,EAEjC,OAAQ,EAAY,EAAY,KAAK,CAAI,KAAO,KAC9C,EAAc,KAAK,EAAU,KAAK,EAGpC,GAAI,EAAc,OAAS,EAAG,SAE9B,EAAgB,IAAI,CAAS,EAU7B,IAAM,EAAoB,CAAC,EAE3B,QAAS,EAAI,EAAG,EAAI,EAAc,OAAQ,IAAK,CAC7C,IAAM,EAAM,EAAc,GAGpB,EAAa,EAAK,QAAQ,IAAK,CAAG,EACpC,EAAa,EACb,EAAI,EAAa,EACrB,MAAO,EAAI,EAAK,QAAU,EAAa,EAAG,CACxC,GAAI,EAAK,KAAO,IAAK,IACrB,GAAI,EAAK,KAAO,IAAK,IACrB,IAEF,IAAM,EAAW,EAAK,MAAM,EAAa,EAAG,EAAI,CAAC,EAG7C,EAAa,EACjB,MAAO,EAAa,EAAK,QAAU,EAAK,KAAgB,IAAK,IAG7D,IAAM,EAAc,GAAoB,EAAM,CAAU,EAClD,EAAW,EAAK,MAAM,EAAa,EAAG,EAAc,CAAC,EAE3D,EAAM,KAAK,CACT,MAAO,EAAI,EACX,WACA,WACA,UAAW,EACX,QAAS,CACX,CAAC,EAKH,IAAI,EAAU,EAAK,MAAM,EAAG,EAAM,GAAG,OAAO,EAEtC,EAAgB,EAAM,EAAM,OAAS,GAAG,QAC9C,GAAW,EAAK,MAAM,CAAa,EAInC,IAAI,EAAY,EAChB,QAAS,EAAI,EAAM,OAAS,EAAG,GAAK,EAAG,IAAK,CAC1C,IAAM,EAAO,EAAM,GAEf,EAAQ,EAAK,UACjB,MAAO,EAAQ,GAAK,EAAU,EAAQ,KAAO,IAAK,IAClD,GAAI,EAAQ,GAAK,EAAU,EAAQ,KAAO;AAAA,EAAM,IAEhD,EAAY,EAAU,MAAM,EAAG,CAAK,EAAI,EAAU,MAAM,EAAK,OAAO,EAItE,IAAI,EAAY,GAChB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAO,EAAM,GAEb,EAAS,GAAe,EAAK,SAAU,CAAc,EAE3D,GADgB,EAAK,SAAS,SAAS,KAAK,EAC/B,CACX,IAAM,EAAM,GAAM,EAAQ,EAAY,EAAK,SAAS,EACpD,MAAM,IAAI,GACR,sEAAsE,MACtE,CACF,EAWF,GAAa;AAAA,WAAc,UAAkB,EAAK,SAAS,EAAK,cAChE,GAAa;AAAA,gCAAmC,eAOhD,GAAa;AAAA,kBAAqB,EAAK,yBACvC,GAAa;AAAA,gBACb,GAAa;AAAA;AAAA,EAKf,IAAM,EAA6B,CAAC,EAEpC,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAO,EAAM,GACb,EAAS,GAAe,EAAK,SAAU,CAAc,EACrD,EAAmB,CAAC,gBAAgB,EAAO,QAAQ,EAEzD,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,IAAM,EAAI,EAAO,GACjB,GAAI,EAAE,aAAc,CAClB,IAAM,EAAQ,GAAoB,KAAK,KAAM,EAAE,YAAY,EAC3D,GAAI,IAAU,OAAQ,EAAO,KAAK,CAAK,GAI3C,GAAI,IAAM,EAER,EAAiB,KACf,WAAW,EAAO,KAAK,MAAM,mCAC/B,EACK,KAEL,IAAM,EAAO,EAAO,IAAI,CAAC,EAAG,IAAM,KAAK,IAAI,EAAE,KAAK,IAAI,EACtD,EAAiB,KACf,WAAW,EAAO,KAAK,MAAM,aAAa,UACxC,EAAK,SACH,IACN,GAKJ,GAAa;AAAA,WAAc;AAAA,EAC3B,GAAa,EAAiB,KAAK;AAAA,CAAI,EAAI;AAAA,EAC3C,GAAa,+BAA+B;AAAA,EAC5C,GAAa;AAAA,EAGb,EAAS,EAAO,MAAM,EAAG,CAAS,EAAI,EAAY,EAAO,MAAM,CAAO,EAGtE,IAAM,EAAY,EAAY,EAAU,OACxC,EAAS,EAAO,MAAM,EAAG,CAAS,EAAI,EAAY,EAAO,MAAM,CAAS,EAG1E,MAAO,CAAE,OAAQ,EAAQ,iBAAgB,EAGpC,SAAS,EAAqB,CACnC,EACA,EAA+B,IAAI,IAC3B,CAGR,IAAM,EAAa,2CACf,EAAS,GACT,EAAY,EACZ,EAEJ,OAAQ,EAAQ,EAAW,KAAK,CAAM,KAAO,KAAM,CACjD,IAAM,EAAY,EAAM,GAClB,EAAgB,EAAM,IAAM,GAC5B,EAAa,EAAM,MACnB,EAAY,EAAa,EAAM,GAAG,OAAS,EAG7C,EAAQ,EACR,EAAI,EAAY,EACpB,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAU,EAAG,CACf,IAAM,EAAW,EACX,EAAY,EAAO,MAAM,EAAW,CAAQ,EAMlD,GAHA,GAAU,EAAO,MAAM,EAAW,CAAU,EAC5C,GAAU,OAAO,aAAqB,IAAY,KAAiB,MAE/D,EAAgB,IAAI,CAAS,EAE/B,GAAU,GAAG,iBAAyB,gCAAwC,gDAAwD,yBAEtI,QAAU,GAAG,iBAAyB,6DAExC,EAAY,GAKhB,OADA,GAAU,EAAO,MAAM,CAAS,EACzB,EAOF,SAAS,EAAc,CAAC,EAAwB,CAErD,IAAM,EAAe,CACnB,CACE,QAAS,iBACT,QACE,oFACJ,EACA,CACE,QAAS,gBACT,QAAS,gEACX,EACA,CACE,QAAS,kBACT,QACE,oEACJ,EACA,CACE,QAAS,gBACT,QACE,iEACJ,CACF,EAEA,QAAa,UAAS,aAAa,EACjC,GAAI,EAAQ,KAAK,CAAM,EACrB,MAAU,MAAM,CAAO,EAI3B,OAAO,EAqBF,SAAS,EAAkB,CAAC,EAAwB,CAEzD,IAAM,EAAiB,IAAI,IAGrB,EAAc,sBAChB,EACJ,OAAQ,EAAI,EAAY,KAAK,CAAM,KAAO,KACxC,EAAe,IAAI,EAAE,EAAE,EAGzB,GAAI,EAAe,OAAS,EAAG,OAAO,EAGtC,EAAS,EAAO,QAAQ,eAAgB,QAAQ,EAIhD,IAAM,EAAW,EACd,QAAQ,oBAAqB,EAAE,EAC/B,QAAQ,cAAe,EAAE,EAG5B,QAAW,KAAQ,EAAgB,CAMjC,GAJiB,IAAI,OACnB,MAAM,8HACN,GACF,EACa,KAAK,CAAQ,EACxB,MAAU,MACR,oCAAoC,oDAEtC,EAQF,GAJiB,IAAI,OACnB,oBAAoB,mCACpB,GACF,EACa,KAAK,CAAQ,EACxB,MAAU,MACR,oCAAoC,oDAEtC,EAQF,GAJiB,IAAI,OACnB,gBAAgB,mCAChB,GACF,EACa,KAAK,CAAQ,EACxB,MAAU,MACR,oCAAoC,oDAEtC,EAUF,GAJiB,IAAI,OACnB,MAAM,kBAFN,2EAGA,GACF,EACa,KAAK,CAAQ,EACxB,MAAU,MACR,qDAAqD,oDAEvD,EAIJ,OAAO,EAGF,SAAS,EAAa,CAAC,EAAwB,CAIpD,GADmB,0BACJ,KAAK,CAAM,EACxB,MAAU,MACR,gEACF,EAEF,OAAO,EAGF,SAAS,EAAc,CAAC,EAAwB,CAIrD,GADoB,6BACJ,KAAK,CAAM,EACzB,MAAU,MACR,2FACF,EAKF,GADwB,wBACJ,KAAK,CAAM,EAC7B,MAAU,MACR,uFACF,EAGF,OAAO,EH5+FF,SAAS,EAAU,CACxB,EACA,EAA6B,CAAC,EAgB9B,CACA,IAAM,EAAiB,EACnB,EACE,EAAiB,IAAI,IACrB,EAAkB,IAAI,IACtB,EAAgB,IAAI,IAGpB,EAAqB,CACzB,UAAW,GACX,SAAU,GACV,QAAS,GACT,UAAW,GACX,YAAa,GACb,YAAa,GACb,SAAU,EACZ,EAIM,EAAc,EAAO,MACzB,4EACF,EACA,GAAI,EACF,EAAe,EAAY,GAE3B,EAAS,EAAO,QACd,8EACA,IACF,EAMF,IAAM,EACJ,oIAEE,EACJ,MAAQ,EAAQ,EAAO,MAAM,CAAgB,EAAI,CAC/C,IAAM,EAAY,EAAM,GAExB,GAAI,IAAc,YAEhB,EAAS,UAAY,GACrB,EAAS,SAAW,GACpB,EAAS,QAAU,GACnB,EAAS,UAAY,GACrB,EAAS,SAAW,GACpB,EAAS,YAAc,GAClB,QAAI,IAAc,YACvB,EAAS,UAAY,GAChB,QAAI,IAAc,WACvB,EAAS,SAAW,GACf,QAAI,IAAc,UACvB,EAAS,QAAU,GACd,QAAI,IAAc,YACvB,EAAS,UAAY,GAChB,QAAI,IAAc,WACvB,EAAS,SAAW,GACf,QAAI,IAAc,cACvB,EAAS,YAAc,GAClB,QAAI,IAAc,cACvB,EAAS,YAAc,GAIzB,EAAS,EAAO,QACd,IAAI,OACF,8DAA8D,OAChE,EACA,IACF,EAKF,GAAI,EAAS,YACX,EAAS,GAAoB,CAAM,EAgBrC,GAXA,EAAS,GAAmB,CAAM,EAMlC,EAAS,GAAqB,CAAM,EAKhC,EAAS,WAAa,CAAC,EAAQ,SACjC,EAAS,GAA8B,CAAM,EAQ/C,EAAS,GAA0B,CAAM,EACzC,EAAS,GAA6B,CAAM,EAC5C,EAAS,GAAuC,CAAM,EACtD,EAAS,GAA2B,CAAM,EAC1C,EAAS,GAA0B,CAAM,EAIzC,EAAS,GAAyB,CAAM,EAKxC,IACE,OAAQ,EACR,aACA,gBACE,GAA0B,EAAQ,CACpC,iBACA,iBACA,kBACA,eACF,CAAC,EACD,EAAS,EAQT,IAAM,EAAY,GAA4B,CAAM,EACpD,EAAS,EAAU,OAInB,EAAS,GAAyB,CAAM,EAIxC,IAAM,EAAa,GAA8B,EAAQ,CAAc,EACvE,EAAS,EAAW,OAGpB,IAAM,EAAa,GAAkB,CAAM,EAC3C,EAAS,EAAW,OAIpB,IAAM,EAAa,GAAmB,EAAQ,EAAQ,oBAAoB,EAC1E,EAAS,EAAW,OAIpB,IAAM,EAAiB,GACrB,EACA,CACF,EACA,EAAS,EAAe,OAGxB,QAAW,KAAO,EAAe,gBAC/B,EAAgB,IAAI,GAAG,YAAc,EAMvC,GAAI,EAAS,SACX,EAAS,GAAsB,EAAQ,EAAe,eAAe,EAIvE,GAAI,EAAS,QACX,EAAS,GAAe,CAAM,EAIhC,GAAI,EAAS,UACX,EAAS,GAAe,CAAM,EAIhC,GAAI,EAAS,SACX,EAAS,GAAc,CAAM,EAO/B,OAFA,EAAS,GAAwB,EAAQ,EAAU,UAAU,EAEtD,CACL,SACA,aACA,eACA,eACA,WACA,iBACA,iBACA,kBACA,gBACA,WAAY,EAAW,OACvB,MAAO,EAAW,MAClB,WAAY,EAAW,OACvB,iBAAkB,EAAW,iBAC7B,WAAY,EAAU,UACxB,EAMK,SAAS,EAAK,CACnB,EACA,EAAwB,CAAC,EAazB,CACA,IACE,WAAW,WACX,iBAAiB,GACjB,WAAW,IACT,GAIF,OAAQ,EACR,aACA,eACA,eACA,iBACA,iBACA,kBACA,gBACA,aACA,QACA,cACE,EACA,GAAW,EAAQ,CAAE,UAAS,CAAC,EAC/B,CACE,SACA,WAAY,OACZ,aAAc,OACd,aAAc,OACd,eAAgB,EAChB,eAAgB,IAAI,IACpB,gBAAiB,IAAI,IACrB,cAAe,IAAI,IACnB,WAAY,CAAC,EACb,MAAO,CAAC,EACR,WAAY,CAAC,CACf,EAEJ,GAAI,CAQF,MAAO,CACL,IARgB,SAAM,EAAiB,CACvC,YAAa,KACb,WAAY,SACZ,UAAW,GACX,2BAA4B,EAC9B,CAAC,EAIC,aACA,eACA,eACA,iBACA,iBACA,kBACA,gBACA,aACA,QACA,YACF,EACA,MAAO,EAAQ,CAEf,IAAM,EAAM,EAAE,KAAO,CAAE,KAAM,EAAG,OAAQ,CAAE,EAC1C,MAAM,IAAI,GACR,EAAE,QAAQ,QAAQ,kBAAmB,EAAE,EACvC,EACA,EACA,CACF,GAOG,SAAS,EAAsB,CACpC,EACA,EACqB,CAGrB,QAAW,KAAQ,EAAI,KAAM,CAC3B,GAAI,EAAK,OAAS,oBAChB,MAAM,IAAI,GACR,uEACA,EAAK,KAAK,OAAS,CAAE,KAAM,EAAG,OAAQ,CAAE,EACxC,OACA,CACF,EAGF,GACE,EAAK,OAAS,0BACd,EAAK,OAAS,2BAEd,MAAM,IAAI,GACR,qEACA,EAAK,KAAK,OAAS,CAAE,KAAM,EAAG,OAAQ,CAAE,EACxC,OACA,CACF,EAGF,GAAI,EAAK,OAAS,mBAChB,MAAM,IAAI,GACR,kEACA,EAAK,KAAK,OAAS,CAAE,KAAM,EAAG,OAAQ,CAAE,EACxC,OACA,CACF,EAIJ,IAAM,EAAY,EAAI,KAAK,OACzB,CAAC,IAAsC,EAAK,OAAS,qBACvD,EAEA,GAAI,EAAU,SAAW,EACvB,MAAM,IAAI,GACR,6CACA,CAAE,KAAM,EAAG,OAAQ,CAAE,EACrB,OACA,CACF,EAGF,GAAI,EAAU,OAAS,EAAG,CACxB,IAAM,EAAS,EAAU,GACzB,MAAM,IAAI,GACR,8CACA,EAAO,KAAK,OAAS,CAAE,KAAM,EAAG,OAAQ,CAAE,EAC1C,OACA,CACF,EAGF,OAAO,EAAU,GASZ,SAAS,EAAW,CACzB,EACA,EAIA,CACA,IAAM,EAAmE,CACvE,OAAQ,CAAC,CACX,EAEA,GAAI,CAAC,EAAK,IAAK,OAAO,EAEtB,IAAM,EAAa,EAAO,UAAU,EAAG,EAAK,KAAK,EAM3C,EAAe,CAAC,GAAG,EAAW,SAAS,sBAAsB,CAAC,EACpE,GAAI,EAAa,OAAS,EAAG,CAC3B,IAAM,EAAY,EAAa,EAAa,OAAS,GAC/C,EAAa,EAAW,UAC5B,EAAU,MAAS,EAAU,GAAG,MAClC,EAGA,GAAI,uBAAuB,KAAK,CAAU,EAAG,CAE3C,IAAI,EAAU,EAAU,GAGlB,EAAQ,EAAQ,MAAM;AAAA,CAAI,EAE1B,EAAY,EACf,OAAO,CAAC,IAAS,EAAK,KAAK,EAAE,OAAS,CAAC,EACvC,OAAO,CAAC,EAAK,IAAS,CACrB,IAAM,EAAS,EAAK,MAAM,QAAQ,IAAI,GAAG,QAAU,EACnD,OAAO,KAAK,IAAI,EAAK,CAAM,GAC1B,GAAQ,EAGb,GAAI,EAAY,GAAK,EAAY,IAC/B,EAAU,EAAM,IAAI,CAAC,IAAS,EAAK,MAAM,CAAS,CAAC,EAAE,KAAK;AAAA,CAAI,EAIhE,OADA,EAAO,YAAc,EAAQ,KAAK,EAC3B,GAKX,IAAM,EAAa,EAAW,MAAM,wBAAwB,EAC5D,GAAI,CAAC,EAAY,OAAO,EAExB,IAAM,EAAQ,EAAW,GAGnB,EAAY,EAAM,MAAM,sCAAsC,EACpE,GAAI,EACF,EAAO,YAAc,EAAU,GAAG,KAAK,EAIzC,IAAM,EAAa,+CACf,EACJ,OAAQ,EAAQ,EAAW,KAAK,CAAK,KAAO,KAC1C,EAAO,OAAO,EAAM,IAAM,EAAM,GAAG,KAAK,EAG1C,OAAO,EIzfT,4BAAS,eAQF,SAAS,EAAkB,CAAC,EAAkC,CACnE,OAAQ,EAAK,UACN,UAAW,CACd,IAAM,EAAS,EAAa,MAC5B,GAAI,IAAU,KACZ,MAAO,CAAE,KAAM,MAAO,EAExB,GAAI,OAAO,IAAU,SACnB,MAAO,CAAE,KAAM,QAAS,EAE1B,GAAI,OAAO,IAAU,SAAU,CAG7B,IAAM,EAAO,EAAa,IAC1B,GAAI,GAAO,EAAI,SAAS,GAAG,EACzB,MAAO,CAAE,KAAM,QAAS,EAE1B,MAAO,CAAE,KAAM,SAAU,EAE3B,GAAI,OAAO,IAAU,UACnB,MAAO,CAAE,KAAM,SAAU,EAE3B,MAAO,CAAE,KAAM,KAAM,CACvB,KAEK,kBAAmB,CACtB,IAAM,EAAY,EAAa,SAC/B,GAAI,EAAS,SAAW,EACtB,MAAO,CAAE,KAAM,QAAS,MAAO,CAAE,KAAM,KAAM,CAAE,EAIjD,IAAM,EAAY,EACf,OAAO,CAAC,IAAO,GAAM,IAAI,EACzB,IAAI,CAAC,IAAO,GAAmB,CAAE,CAAC,EACrC,GAAI,EAAU,SAAW,EACvB,MAAO,CAAE,KAAM,QAAS,MAAO,CAAE,KAAM,KAAM,CAAE,EAGjD,IAAM,EAAO,IAAI,IACjB,QAAW,KAAK,EAAW,CACzB,IAAM,EAAM,KAAK,UAAU,CAAC,EAC5B,GAAI,CAAC,EAAK,IAAI,CAAG,EAAG,EAAK,IAAI,EAAK,CAAC,EAErC,IAAM,EAAS,CAAC,GAAG,EAAK,OAAO,CAAC,EAKhC,MAAO,CAAE,KAAM,QAAS,MAHtB,EAAO,SAAW,EACd,EAAO,GACP,CAAE,KAAM,QAAkB,QAAS,CAAO,CAClB,CAChC,KAEK,mBAAoB,CACvB,IAAM,EAAc,EAAa,WAC3B,EAAwC,CAAC,EAE/C,QAAW,KAAQ,EACjB,GAAI,EAAK,OAAS,YAAc,EAAK,IAAI,OAAS,aAAc,CAC9D,IAAM,EAAM,EAAK,IAAI,KACrB,EAAM,GAAO,GAAmB,EAAK,KAAK,EAI9C,MAAO,CAAE,KAAM,SAAU,OAAM,CACjC,KAEK,oBAAqB,CACxB,IAAQ,WAAU,OAAM,SAAU,EAElC,GAAI,IAAa,KAEf,OAAO,GAAmB,CAAI,EAGhC,GAAI,IAAa,KAGf,OADkB,GAAmB,CAAK,EAI5C,GAAI,IAAa,KAGf,OADkB,GAAmB,CAAK,EAI5C,MAAO,CAAE,KAAM,KAAM,CACvB,KAEK,mBAAoB,CACvB,IAAQ,WAAU,OAAM,SAAU,EAElC,GAAI,IAAa,IAAK,CACpB,IAAM,EAAW,GAAmB,CAAI,EAClC,EAAY,GAAmB,CAAK,EAE1C,GAAI,EAAU,OAAS,OACrB,MAAO,IAAK,EAAU,SAAU,EAAK,EAEvC,GAAI,EAAS,OAAS,OACpB,MAAO,IAAK,EAAW,SAAU,EAAK,EAExC,MAAO,CACL,KAAM,QACN,QAAS,CAAC,EAAU,CAAS,CAC/B,EAEF,MAAO,CAAE,KAAM,KAAM,CACvB,KAEK,aAAc,CAEjB,GAAK,EAAa,OAAS,YACzB,MAAO,CAAE,KAAM,WAAY,EAG7B,MAAO,CAAE,KAAM,KAAM,CACvB,KAEK,kBAAmB,CACtB,IAAyB,SAAnB,EACoB,SAApB,GAAO,EAGb,GAAI,IAAO,KAAO,EAAI,OAAS,WAE7B,GAAI,OADU,EAAI,QACG,SACnB,MAAO,CAAE,KAAM,sBAAuB,EAK1C,GAAI,IAAO,KAAO,EAAI,OAAS,WAE7B,GAAI,OADU,EAAI,QACG,SAAU,CAC7B,IAAM,EAAM,EAAI,IAChB,GAAI,GAAO,EAAI,SAAS,GAAG,EACzB,MAAO,CAAE,KAAM,QAAS,EAE1B,MAAO,CAAE,KAAM,SAAU,GAG7B,MAAO,CAAE,KAAM,KAAM,CACvB,SAGE,MAAO,CAAE,KAAM,KAAM,GAUpB,SAAS,EAAc,CAC5B,EACA,EACqB,CAErB,GAAI,EAAM,OAAS,aACjB,MAAO,CACL,KAAO,EAAc,KACrB,KAAM,CAAE,KAAM,KAAM,EACpB,SAAU,EACZ,EAIF,GAAI,EAAM,OAAS,oBAAqB,CACtC,IAAQ,OAAM,SAAU,EAExB,GAAI,EAAK,OAAS,aAChB,MAAM,IAAI,EACR,4CACA,EAAY,CAAK,CACnB,EAGF,IAAM,EAAO,EAAK,KAGZ,EAAa,GAAgB,IAAI,CAAI,GAAK,GAG1C,EAAO,GAAmB,CAAK,EAC/B,EAAe,GAAoB,CAAK,EAE9C,MAAO,CACL,OACA,OACA,SAAU,EACV,QAAS,EAAa,KAAO,EAC7B,QAAS,EACT,IAAK,CAAE,MAAO,EAAM,MAAO,IAAK,EAAM,GAAI,CAC5C,EAIF,GAAI,EAAM,OAAS,gBAAiB,CAGlC,IAAM,EAAc,EAAc,WAC5B,EAAwC,CAAC,EAEzC,EAA0D,CAAC,EAEjE,QAAW,KAAQ,EACjB,GAAI,EAAK,OAAS,WAAY,CAC5B,IAAM,EACJ,EAAK,IAAI,OAAS,aACd,EAAK,IAAI,KACT,OAAO,EAAK,IAAI,KAAK,EAE3B,GAAI,EAAK,MAAM,OAAS,aAEtB,EAAM,GAAO,CAAE,KAAM,KAAM,EAC3B,EAAmB,GAAO,CACxB,KAAM,EACN,KAAM,CAAE,KAAM,KAAM,EACpB,SAAU,EACZ,EACK,QAAI,EAAK,MAAM,OAAS,oBAAqB,CAElD,IAAM,EAAa,GAAe,EAAK,MAAO,CAAc,EACtD,EAAa,GAAgB,IAAI,CAAG,GAAK,GAC/C,EAAM,GAAO,EAAW,KACxB,EAAmB,GAAO,CACxB,KAAM,EACN,KAAM,EAAW,KACjB,SAAU,EACV,QAAS,EAAa,KAAO,EAAW,QACxC,QAAS,EAAW,OACtB,GAKN,MAAO,CACL,KAAM,mBACN,KAAM,CAAE,KAAM,SAAU,QAAO,oBAAmB,EAClD,SAAU,EACZ,EAGF,MAAM,IAAI,EACR,kCAAkC,EAAM,OACxC,EAAY,CAAK,CACnB,EAMK,SAAS,EAAmB,CAAC,EAAuB,CACzD,OAAQ,EAAK,UACN,UACH,OAAQ,EAAa,UAElB,kBACH,OAAQ,EAAa,SAAS,IAAI,CAAC,IACjC,EAAK,GAAoB,CAAE,EAAI,IACjC,MAEG,mBAAoB,CACvB,IAAM,EAA8B,CAAC,EACrC,QAAW,KAAS,EAAa,WAC/B,GAAI,EAAK,OAAS,YAAc,EAAK,IAAI,OAAS,aAChD,EAAO,EAAK,IAAI,MAAQ,GAAoB,EAAK,KAAK,EAG1D,OAAO,CACT,KAEK,kBACH,GAAK,EAAa,WAAa,IAAK,CAClC,IAAM,EAAM,GAAqB,EAAa,QAAQ,EACtD,OAAO,OAAO,IAAQ,SAAW,CAAC,EAAM,OAE1C,GAAK,EAAa,WAAa,IAAK,CAClC,IAAM,EAAM,GAAqB,EAAa,QAAQ,EACtD,OAAO,OAAO,IAAQ,SAAW,CAAC,EAAM,OAE1C,WAEG,mBAAoB,CACvB,IAAQ,WAAU,QAAS,EAE3B,GAAI,IAAa,IACf,OAAO,GAAoB,CAAI,EAEjC,MACF,KAEK,oBAAqB,CACxB,IAAQ,WAAU,OAAM,SAAU,EAClC,GAAI,IAAa,MAEf,GAAI,EAAK,OAAS,WAAa,EAAK,QAAU,KAC5C,OAAO,KAGX,GAAI,IAAa,KAGf,OADgB,GAAoB,CAAI,GACtB,GAAoB,CAAK,EAE7C,GAAI,IAAa,KAGf,OADgB,GAAoB,CAAI,GACtB,GAAoB,CAAK,EAE7C,MACF,SAGE,QAOC,SAAS,EAAe,CAAC,EAAkC,CAEhE,GAAI,CACF,IAAM,EAAM,GAAkB,EAAU,EAAG,CACzC,YAAa,IACf,CAAC,EACD,OAAO,GAAmB,CAAG,EAC7B,KAAM,CACN,MAAO,CAAE,KAAM,KAAM,GAOlB,SAAS,EAAY,CAAC,EAA8B,CACzD,OAAQ,EAAK,UACN,SACH,OAAO,EAAK,SAAW,gBAAkB,aACtC,SACH,OAAO,EAAK,SAAW,gBAAkB,aACtC,UACH,OAAO,EAAK,SAAW,iBAAmB,cACvC,uBACH,OAAO,EAAK,SACR,8BACA,2BACD,UACH,OAAO,EAAK,SAAW,iBAAmB,cACvC,OACH,MAAO,WACJ,MACH,MAAO,UACJ,QAAS,CACZ,IAAM,EAAQ,EAAK,MAAQ,GAAa,EAAK,KAAK,EAAI,MACtD,OAAO,EAAK,SAAW,GAAG,aAAmB,GAAG,KAClD,KACK,SAAU,CACb,GAAI,CAAC,EAAK,OAAS,OAAO,KAAK,EAAK,KAAK,EAAE,SAAW,EACpD,OAAO,EAAK,SAAW,gBAAkB,SAE3C,IAAM,EAAQ,OAAO,QAAQ,EAAK,KAAK,EACpC,IAAI,EAAE,EAAG,KAAO,GAAG,MAAM,GAAa,CAAC,GAAG,EAC1C,KAAK,IAAI,EACZ,OAAO,EAAK,SAAW,KAAK,aAAmB,KAAK,KACtD,KACK,QACH,OAAO,EAAK,SAAS,IAAI,EAAY,EAAE,KAAK,KAAK,GAAK,cAEtD,MAAO,OCvVb,SAAS,EAAgB,CAAC,EAA2B,CACnD,OAAQ,EAAK,UACN,SACH,MAAO,CAAE,KAAM,QAAS,MACrB,SACH,MAAO,CAAE,KAAM,QAAS,MACrB,UACH,MAAO,CAAE,KAAM,SAAU,MACtB,OAGH,MAAO,CAAC,MACL,YACH,MAAO,CAAC,MACL,MACH,MAAO,CAAC,MACL,QACH,MAAO,CACL,KAAM,QACN,MAAO,EAAK,MAAQ,GAAiB,EAAK,KAAK,EAAI,CAAC,CACtD,MACG,SACH,GAAI,EAAK,MAAO,CACd,IAAM,EAAkC,CAAC,EACzC,QAAY,EAAK,KAAa,OAAO,QAAQ,EAAK,KAAK,EACrD,EAAW,GAAO,GAAiB,CAAQ,EAE7C,MAAO,CACL,KAAM,SACN,aACA,qBAAsB,EACxB,EAEF,MAAO,CAAE,KAAM,QAAS,MACrB,QACH,GAAI,EAAK,QACP,MAAO,CAAE,MAAO,EAAK,QAAQ,IAAI,EAAgB,CAAE,EAErD,MAAO,CAAC,UAER,MAAO,CAAC,GAOd,SAAS,EAAsB,CAC7B,EACK,CACL,IAAM,EAAkC,CAAC,EACnC,EAAqB,CAAC,EAE5B,QAAY,EAAM,KAAU,OAAO,QAAQ,CAAU,EAEnD,GADA,EAAW,GAAQ,GAAiB,EAAM,IAAI,EAC1C,EAAM,SACR,EAAS,KAAK,CAAI,EAItB,MAAO,CACL,KAAM,SACN,aACA,SAAU,EAAS,OAAS,EAAI,EAAW,OAC3C,qBAAsB,EACxB,EAMK,SAAS,EAAiB,CAC/B,EACA,EACA,EACA,EAA4B,CAAC,EAC7B,EAKA,CAEA,IAAM,EAAO,GAAY,EAAQ,CAAI,EAG/B,EAAa,IAAI,IAEvB,QAAW,KAAS,EAAK,OAAQ,CAC/B,IAAM,EAAS,GAAe,EAAO,CAA4B,EAGjE,GACE,EAAO,OAAS,oBAChB,EAAO,KAAK,OAAS,UACrB,EAAO,KAAK,mBAEZ,QAAY,EAAK,KAAc,OAAO,QACpC,EAAO,KAAK,kBACd,EACE,EAAW,IAAI,EAAK,IACd,EACJ,YAAa,EAAK,OAAO,EAC3B,CAAC,EAGH,OAAO,YAAc,EAAK,OAAO,EAAO,MACxC,EAAW,IAAI,EAAO,KAAM,CAAM,EAKtC,IAAI,EACJ,GAAI,EACF,EAAa,GAAgB,CAAoB,EAInD,IAAM,EAAwB,CAC5B,MAAO,EACP,OAAQ,IAAI,IACZ,aACA,MAAO,IAAI,IAAI,OAAO,KAAK,EAAQ,OAAS,CAAC,CAAC,CAAC,EAC/C,SAAU,CAAC,EACX,SACA,SAAU,EAAQ,UAAY,WAC9B,SACF,EAGM,EAAY,GAAe,EAAK,KAAM,CAAG,EAGzC,EAAoB,CAAC,EACrB,EAA2B,CAAC,EAC5B,EAA6D,CAAC,EAEpE,QAAY,EAAM,KAAU,EAAW,QAAQ,EAC7C,GAAI,EAAM,SACR,EAAe,KAAK,CAAI,EACnB,QAAI,EAAM,UAAY,OAC3B,EAAe,KAAK,CAAE,OAAM,aAAc,EAAM,OAAQ,CAAC,EAGzD,OAAe,KAAK,CAAI,EAK5B,GAAI,EAAe,OAAS,EAC1B,EAAM,KAAK,CACT,GAAI,aACJ,KAAM,CACR,CAAC,EAIH,QAAa,OAAM,kBAAkB,EAEnC,EAAM,KAAK,CACT,GAAI,aACJ,KAAM,CAAC,CAAI,CACb,CAAC,EAED,EAAM,KAAK,CACT,GAAI,KACJ,UAAW,CACT,MAAO,SACP,GAAI,KACJ,KAAM,CAAE,MAAO,QAAS,MAAK,EAC7B,MAAO,CAAE,MAAO,UAAW,MAAO,IAAK,CACzC,EACA,KAAM,CACJ,CACE,GAAI,SACJ,IAAK,EACL,MAAO,CACT,CACF,CACF,CAAC,EAGH,EAAM,KAAK,GAAG,CAAS,EAGvB,IAAM,EAAkB,OAAO,YAAY,CAAU,EAC/C,EAA+B,CACnC,KAAM,EAAK,IAAI,MAAQ,YACvB,YAAa,EAAK,YAClB,WAAY,EACZ,QAAS,CACX,EAGM,EAAc,GAAuB,CAAe,EAE1D,MAAO,CACL,IAAK,CAAE,GAAI,MAAO,QAAO,aAAY,EACrC,YACA,SAAU,EAAI,QAChB,EAMK,SAAS,EAAc,CAC5B,EACA,EACY,CACZ,IAAM,EAAoB,CAAC,EAE3B,QAAW,KAAQ,EAAM,KAAM,CAC7B,IAAM,EAAc,GAAmB,EAAM,CAAG,EAChD,GAAI,EACF,GAAI,MAAM,QAAQ,CAAW,EAC3B,EAAM,KAAK,GAAG,CAAW,EAEzB,OAAM,KAAK,CAAW,EAK5B,OAAO,EAMF,SAAS,EAAkB,CAChC,EACA,EAC8B,CAC9B,OAAQ,EAAK,UACN,sBACH,OAAO,GAA6B,EAA6B,CAAG,MAEjE,sBACH,OAAO,GAA6B,EAA6B,CAAG,MAEjE,cACH,OAAO,GAAqB,EAAqB,CAAG,MAEjD,iBACH,OAAO,GAAwB,EAAwB,CAAG,MAEvD,iBACH,OAAO,GAAwB,EAAwB,CAAG,MAEvD,eACH,OAAO,GAAsB,EAAsB,CAAG,MAEnD,kBACH,OAAO,GAAyB,EAAyB,CAAG,MAEzD,iBACH,MAAM,IAAI,EACR,kFACA,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,MAEG,iBAEH,MAAO,CACL,GAAI,QACJ,MAAO,GAAe,EAAwB,GAAmB,CAAG,CAAC,CACvE,MAEG,iBACH,OAAO,aAGP,MAAM,IAAI,EACR,+BAA+B,EAAK,OACpC,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,GAON,SAAS,EAA4B,CACnC,EACA,EACY,CACZ,IAAM,EAAoB,CAAC,EACrB,EAAU,EAAK,OAAS,QACxB,EAAS,EAAU,WAAa,SAEtC,QAAW,KAAc,EAAK,aAAc,CAC1C,GAAI,EAAW,GAAG,OAAS,aACzB,MAAM,IAAI,EACR,2CACA,EAAY,CAAU,EACtB,EAAI,OACJ,EAAI,QACN,EAGF,IAAM,EAAQ,EAAW,GAAkB,KAE3C,GAAI,EAAW,KAAM,CAEnB,IAAQ,OAAM,aAAc,GAC1B,EAAW,KACX,EACA,EACA,CACF,EAEA,GAAI,EACF,EAAM,KAAK,CAAI,EACV,QAAI,IAAc,EAEvB,EAAM,KAAK,CACT,GAAI,EACJ,IAAK,EACL,MAAO,CACT,CAAC,EAIH,IAAM,EAAO,GAAmB,EAAW,IAAkB,EAC7D,EAAI,OAAO,IAAI,EAAM,CAAI,EACpB,KAEL,GAAI,EACF,MAAM,IAAI,EACR,yCACA,EAAY,CAAU,EACtB,EAAI,OACJ,EAAI,QACN,EAEF,EAAM,KAAK,CACT,GAAI,SACJ,IAAK,EACL,MAAO,IACT,CAAC,EACD,EAAI,OAAO,IAAI,EAAM,CAAE,KAAM,MAAO,SAAU,EAAK,CAAC,GAIxD,OAAO,EAMT,SAAS,EAA4B,CACnC,EACA,EACiB,CACjB,IAAM,EAAO,EAAK,WAGlB,GAAI,EAAK,OAAS,uBAChB,OAAO,GAAoB,EAA8B,CAAG,EAI9D,GAAI,EAAK,OAAS,iBAAkB,CAClC,IAAQ,OAAM,aAAc,GAA0B,EAAM,CAAG,EAC/D,GAAI,EACF,OAAO,EAIT,GAAI,EACF,MAAO,CACL,GAAI,SACJ,IAAK,IACL,MAAO,CACT,EAEF,OAAO,KAUT,OANA,EAAI,SAAS,KAAK,CAChB,QAAS,qCACT,KAAM,EAAY,CAAI,EAAE,KACxB,OAAQ,EAAY,CAAI,EAAE,MAC5B,CAAC,EAEM,KAMT,SAAS,EAAmB,CAC1B,EACA,EACU,CACV,GAAI,EAAK,KAAK,OAAS,aACrB,MAAM,IAAI,EACR,+CACA,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,EAGF,IAAM,EAAQ,EAAK,KAAoB,MAC/B,OAAM,aAAc,GAA0B,EAAK,MAAO,EAAK,CAAI,EAE3E,GAAI,EACF,OAAO,EAGT,MAAO,CACL,GAAI,SACJ,IAAK,EACL,MAAO,CACT,EAMF,SAAS,EAAoB,CAC3B,EACA,EACU,CAEV,IAAM,EAAY,EAAqB,EAAK,KAAM,CAAG,EAG/C,EACJ,EAAK,WAAW,OAAS,iBACrB,GACE,EAAK,WACL,GAAmB,CAAG,CACxB,EACC,CAAC,GAAmB,EAAK,WAAY,CAAG,CAAC,EAAE,OAC1C,OACF,EAGF,EACJ,GAAI,EAAK,UACP,EACE,EAAK,UAAU,OAAS,iBACpB,GACE,EAAK,UACL,GAAmB,CAAG,CACxB,EACC,CAAC,GAAmB,EAAK,UAAW,CAAG,CAAC,EAAE,OACzC,OACF,EAGR,MAAO,CACL,GAAI,KACJ,YACA,KAAM,KACF,GAAa,CAAE,KAAM,CAAU,CACrC,EAMF,SAAS,EAAuB,CAC9B,EACA,EACU,CACV,IAAM,EAAY,EAAqB,EAAK,KAAM,CAAG,EAE/C,EACJ,EAAK,KAAK,OAAS,iBACf,GAAe,EAAK,KAAwB,GAAmB,CAAG,CAAC,EAClE,CAAC,GAAmB,EAAK,KAAM,CAAG,CAAC,EAAE,OAAO,OAAO,EAE1D,MAAO,CACL,GAAI,QACJ,YACA,MACF,EAMF,SAAS,EAAuB,CAC9B,EACA,EACU,CAEV,IAAI,EACJ,GAAI,EAAK,KAAK,OAAS,sBAAuB,CAC5C,IAAM,EAAO,EAAK,KAAK,aAAa,GACpC,GAAI,EAAK,GAAG,OAAS,aACnB,MAAM,IAAI,EACR,uDACA,EAAY,EAAK,IAAI,EACrB,EAAI,OACJ,EAAI,QACN,EAEF,EAAW,EAAK,GAAkB,KAC7B,QAAI,EAAK,KAAK,OAAS,aAC5B,EAAW,EAAK,KAAoB,KAEpC,WAAM,IAAI,EACR,sCACA,EAAY,EAAK,IAAI,EACrB,EAAI,OACJ,EAAI,QACN,EAIF,IAAM,EAAQ,GAAkB,EAAK,MAAO,CAAG,EAGzC,EAAW,GAAmB,CAAG,EACvC,EAAS,OAAO,IAAI,EAAS,CAAE,KAAM,KAAM,CAAC,EAG5C,IAAM,EACJ,EAAK,KAAK,OAAS,iBACf,GAAe,EAAK,KAAwB,CAAQ,EACnD,CAAC,GAAmB,EAAK,KAAM,CAAQ,CAAC,EAAE,OACzC,OACF,EAEN,MAAO,CACL,GAAI,MACJ,QACA,GAAI,EACJ,OACF,EAMF,SAAS,EAAqB,CAC5B,EACA,EACU,CACV,IAAM,EAAW,GAAe,EAAK,MAAO,GAAmB,CAAG,CAAC,EAE/D,EACA,EACJ,GAAI,EAAK,QAAS,CAChB,IAAM,EAAW,GAAmB,CAAG,EAEvC,GAAI,EAAK,QAAQ,OAAO,OAAS,aAC/B,EAAc,EAAK,QAAQ,MAAqB,KAChD,EAAS,OAAO,IAAI,EAAY,CAC9B,KAAM,KACR,CAAC,EAEH,EAAa,GAAe,EAAK,QAAQ,KAAM,CAAQ,EAGzD,MAAO,CACL,GAAI,MACJ,IAAK,KACD,GAAc,CAAE,MAAO,CAAW,KAClC,GAAc,CAAE,YAAW,CACjC,EAMF,SAAS,EAAwB,CAC/B,EACA,EACuB,CACvB,GAAI,CAAC,EAAK,SACR,MAAO,CAAE,GAAI,SAAU,MAAO,CAAC,CAAE,EAInC,IAAQ,OAAM,aAAc,GAC1B,EAAK,SACL,EACA,eACF,EAGA,GAAI,EACF,MAAO,CAAC,EAAM,CAAE,GAAI,SAAU,MAAO,CAAU,CAAC,EAKlD,MAAO,CAAE,GAAI,SAAU,MADT,GAAkB,EAAK,SAAU,CAAG,CACrB,EAI/B,IAAM,GAAkB,IAAI,IAAI,CAC9B,OACA,OACA,QACA,SACA,SACA,SACA,UACA,OACA,QACF,CAAC,EAEK,GAAkB,IAAI,IAAI,CAC9B,WACA,aACA,QACA,WACA,YACA,YACA,qBACA,qBACA,MACA,OACA,QACF,CAAC,EAEK,GAAuB,IAAI,IAAI,CACnC,SACA,UACA,MACA,UACA,UACA,SACA,QACA,UACA,WACA,OACA,aACA,cACA,QACA,UACA,SACA,UACA,SACA,WACA,SACA,YACF,CAAC,EAIK,GAAmB,IAAI,IAAI,CAE/B,cACA,cACA,OACA,YACA,UACA,SACA,aACA,cACA,SACA,WACA,UACA,cACA,aACA,WACA,QACA,YACA,SACA,UACA,aACA,QACA,SACA,WACA,SACA,SACA,YACA,gBACA,WACA,UACA,KAEA,UACA,OACA,OACA,aACA,OACA,UACA,QACA,OACA,UAGA,MACA,SACA,MACA,QACA,UACA,QACA,eACA,OAEA,SACA,WACA,SAEF,CAAC,EAMD,SAAS,EAAa,CAAC,EAA+B,CAEpD,GAAI,EAAK,OAAO,OAAS,aAAc,CACrC,IAAM,EAAQ,EAAK,OAAsB,KACzC,OAAO,GAAgB,IAAI,CAAI,GAAK,GAAqB,IAAI,CAAI,EAInE,GAAI,EAAK,OAAO,OAAS,mBAAoB,CAC3C,IAAM,EAAS,EAAK,OAGpB,GAAI,EAAO,OAAO,OAAS,aAAc,CACvC,IAAM,EAAW,EAAO,OAAsB,KAC9C,GAAI,GAAgB,IAAI,CAAO,GAAK,GAAqB,IAAI,CAAO,EAClE,MAAO,GAKX,GAAI,EAAO,SAAS,OAAS,aAAc,CACzC,IAAM,EAAc,EAAO,SAAwB,KACnD,GAAI,GAAiB,IAAI,CAAU,EACjC,MAAO,IAKb,MAAO,GAMT,SAAS,EAAqB,CAAC,EAAiC,CAC9D,GAAI,EAAK,OAAO,OAAS,aAAc,CACrC,IAAM,EAAW,EAAK,OAAsB,KAC5C,OAAO,GAAgB,IAAI,CAAO,GAAK,GAAqB,IAAI,CAAO,EAEzE,MAAO,GAIT,IAAM,GAAuD,CAC3D,OAAQ,sEACR,QAAS,8DACT,IAAK,mDACL,QAAS,4BACT,QAAS,4BACT,OAAQ,2BACR,MAAO,0BACP,QAAS,4BACT,SAAU,oEACV,KAAM,0DACN,WAAY,mDACZ,YAAa,4DACb,MAAO,kDACP,QAAS,kEACT,OAAQ,iEACR,QAAS,qEACT,OAAQ,oEACR,SACE,sEACF,OAAQ,oEACR,WAAY,qDACd,EAKA,SAAS,EAA0B,CAAC,EAAqC,CACvE,GAAI,EAAK,OAAO,OAAS,aAAc,CACrC,IAAM,EAAQ,EAAK,OAAsB,KACzC,GAAI,GAAqB,IAAI,CAAI,EAC/B,OACE,GAA6B,IAC7B,GAAG,iCAKT,GAAI,EAAK,OAAO,OAAS,mBAAoB,CAC3C,IAAM,EAAS,EAAK,OACpB,GAAI,EAAO,OAAO,OAAS,aAAc,CACvC,IAAM,EAAW,EAAO,OAAsB,KAC9C,GAAI,GAAqB,IAAI,CAAO,EAClC,OACE,GAA6B,IAC7B,GAAG,kCAMX,OAAO,KAMT,SAAS,EAA0B,CAAC,EAAiC,CAanE,MAZ4C,CAC1C,KAAM,+DACN,IAAK,+CACL,IAAK,qCACL,MAAO,8CACP,OAAQ,oDACR,MAAO,6DACP,OAAQ,8CACR,QAAS,qDACT,QAAS,6BACT,QAAS,4BACX,EAEc,IACZ,qDAOJ,SAAS,EAAyB,CAChC,EACA,EACA,EACA,EAC2C,CAC3C,IAAM,EAAQ,EAAU,WAAa,SAGrC,GAAI,EAAK,OAAS,kBAIhB,OAAO,GAHO,EAIN,WACN,EACA,EACA,CACF,EAIF,GAAI,EAAK,OAAS,gBAAiB,CACjC,IAAM,EAAU,EACZ,EAAkB,cACtB,GAAI,EAAQ,OAAO,OAAS,aAC1B,EAAkB,EAAQ,OAAO,KAEnC,IAAM,EAAa,GAA2B,CAAe,EAC7D,MAAM,IAAI,EACR,iDAAiD,IACjD,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,EAIF,GAAI,EAAK,OAAS,iBAAkB,CAClC,IAAM,EAAmB,GAA2B,CAAsB,EAC1E,GAAI,EACF,MAAM,IAAI,EACR,EACA,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,EAMJ,GAAI,EAAK,OAAS,kBAAoB,GAAc,CAAsB,EAAG,CAC3E,IAAM,EAAW,EAAqB,EAAM,CAAG,EAE/C,GAAI,EACF,MAAO,CACL,KAAM,CACJ,GAAI,EACJ,IAAK,EACL,MAAO,CACT,EACA,WACF,EAGF,MAAO,CAAE,KAAM,KAAM,UAAW,CAAgB,EAIlD,GACE,EAAK,OAAS,oBACd,GAAsB,CAAwB,EAC9C,CACA,IAAM,EAAW,EAAqB,EAAM,CAAG,EAE/C,GAAI,EACF,MAAO,CACL,KAAM,CACJ,GAAI,EACJ,IAAK,EACL,MAAO,CACT,EACA,WACF,EAGF,MAAO,CAAE,KAAM,KAAM,UAAW,CAAgB,EAIlD,GAAI,EAAK,OAAS,iBAChB,OAAO,GACL,EACA,EACA,EACA,CACF,EAIF,GAAI,EAAK,OAAS,kBAChB,OAAO,GACL,EACA,EACA,EACA,CACF,EAIF,GACE,EAAK,OAAS,oBACd,EAAK,OAAS,qBACd,EAAK,OAAS,kBACd,CACA,IAAM,EAAW,EAAqB,EAAM,CAAG,EAG/C,GAAI,EACF,MAAO,CACL,KAAM,CACJ,GAAI,EACJ,IAAK,EACL,MAAO,CACT,EACA,WACF,EAIF,MAAO,CAAE,KAAM,KAAM,UAAW,CAAgB,EAKlD,MAAO,CAAE,KAAM,KAAM,UADP,GAAkB,EAAM,CAAG,CACH,EAMxC,SAAS,EAAuB,CAC9B,EACA,EACA,EACA,EACmD,CAEnD,IAAI,EACA,EAAe,GACf,EAEJ,GAAI,EAAK,OAAO,OAAS,aACvB,EAAY,EAAK,OAAsB,KAClC,QAAI,EAAK,OAAO,OAAS,mBAAoB,CAClD,IAAM,EAAS,EAAK,OACpB,GAAI,EAAO,SAAS,OAAS,aAC3B,EAAY,EAAO,SAAwB,KAC3C,EAAe,GACf,EAAW,GAAkB,EAAO,OAAsB,CAAG,EAE7D,WAAM,IAAI,EACR,0CACA,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,EAGF,WAAM,IAAI,EACR,0CACA,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,EAIF,GAAI,EACF,OAAO,GACL,EACA,EACA,EAAK,UACL,EACA,EACA,CACF,EAIF,GAAI,IAAa,WAAa,EAAK,OAAO,OAAS,mBAAoB,CASvE,IAAM,EAAO,GAAqB,EAAM,CAAG,EAE3C,MAAO,CACL,KAAM,CACJ,GAAI,KACD,KACC,GAAa,CAAE,OAAQ,CAAU,KACjC,GAAa,GAAW,CAAE,YAAa,EAAK,CAClD,EACA,WACF,EAMF,SAAS,EAAmB,CAC1B,EACA,EACA,EACA,EACA,EACA,EACmD,CACnD,OAAQ,OACD,MAEH,GACE,EAAK,OAAS,IACb,EAAK,GAAG,OAAS,2BAChB,EAAK,GAAG,OAAS,sBACnB,CACA,IAAM,EAAW,EAAK,GAChB,EAAQ,EAAS,OAAO,GACxB,EAAY,GAAO,OAAS,aAAe,EAAM,KAAO,OAExD,EAAW,GAAmB,CAAG,EACvC,EAAS,OAAO,IAAI,EAAW,CAAE,KAAM,KAAM,CAAC,EAE9C,IAAI,EACJ,GAAI,EAAS,KAAK,OAAS,iBACzB,EAAQ,GAAe,EAAS,KAAM,CAAQ,EACzC,KAEL,IAAQ,OAAM,UAAW,GAAe,GACtC,EAAS,KACT,EACA,QACF,EACA,EAAQ,EACJ,CAAC,CAAI,EACL,CAAC,CAAE,GAAI,SAAU,IAAK,SAAU,MAAO,CAAW,CAAC,EAGzD,MAAO,CACL,KAAM,CACJ,GAAI,MACJ,MAAO,EACP,GAAI,EACJ,WACI,GAAa,CAAE,OAAQ,CAAU,KACjC,GAAa,GAAW,CAAE,YAAa,EAAK,CAClD,EACA,WACF,EAEF,UAEG,SAEH,GACE,EAAK,OAAS,IACb,EAAK,GAAG,OAAS,2BAChB,EAAK,GAAG,OAAS,sBACnB,CACA,IAAM,EAAW,EAAK,GAChB,EAAQ,EAAS,OAAO,GACxB,EAAY,GAAO,OAAS,aAAe,EAAM,KAAO,OAExD,EAAW,GAAmB,CAAG,EACvC,EAAS,OAAO,IAAI,EAAW,CAAE,KAAM,KAAM,CAAC,EAI9C,IAAI,EACJ,GAAI,EAAS,KAAK,OAAS,iBAEzB,MAAM,IAAI,EACR,qDACA,EAAY,EAAK,EAAE,EACnB,EAAI,OACJ,EAAI,QACN,EAGA,OAAY,EAAqB,EAAS,KAAM,CAAQ,EAG1D,MAAO,CACL,KAAM,CACJ,GAAI,SACJ,MAAO,EACP,GAAI,EACJ,eACI,GAAa,CAAE,OAAQ,CAAU,KACjC,GAAa,GAAW,CAAE,YAAa,EAAK,CAClD,EACA,WACF,EAEF,UAEG,OAEH,GACE,EAAK,OAAS,IACb,EAAK,GAAG,OAAS,2BAChB,EAAK,GAAG,OAAS,sBACnB,CACA,IAAM,EAAW,EAAK,GAChB,EAAQ,EAAS,OAAO,GACxB,EAAY,GAAO,OAAS,aAAe,EAAM,KAAO,OAExD,EAAW,GAAmB,CAAG,EACvC,EAAS,OAAO,IAAI,EAAW,CAAE,KAAM,KAAM,CAAC,EAE9C,IAAI,EACJ,GAAI,EAAS,KAAK,OAAS,iBACzB,MAAM,IAAI,EACR,mDACA,EAAY,EAAK,EAAE,EACnB,EAAI,OACJ,EAAI,QACN,EAEA,OAAY,EAAqB,EAAS,KAAM,CAAQ,EAG1D,MAAO,CACL,KAAM,CACJ,GAAI,OACJ,MAAO,EACP,GAAI,EACJ,eACI,GAAa,CAAE,OAAQ,CAAU,KACjC,GAAa,GAAW,CAAE,YAAa,EAAK,CAClD,EACA,WACF,EAEF,UAEG,SAEH,GACE,EAAK,QAAU,IACd,EAAK,GAAG,OAAS,2BAChB,EAAK,GAAG,OAAS,sBACnB,CACA,IAAM,EAAW,EAAK,GAChB,EAAW,EAAS,OAAO,GAC3B,EAAY,EAAS,OAAO,GAC5B,EAAU,GAAU,OAAS,aAAe,EAAS,KAAO,MAC5D,EACJ,GAAW,OAAS,aAAe,EAAU,KAAO,OAEhD,EAAW,GAAmB,CAAG,EACvC,EAAS,OAAO,IAAI,EAAS,CAAE,KAAM,KAAM,CAAC,EAC5C,EAAS,OAAO,IAAI,EAAU,CAAE,KAAM,KAAM,CAAC,EAE7C,IAAI,EACJ,GAAI,EAAS,KAAK,OAAS,iBACzB,EAAQ,GAAe,EAAS,KAAM,CAAQ,EACzC,KAEL,IAAQ,OAAM,UAAW,GAAe,GACtC,EAAS,KACT,EACA,QACF,EACA,EAAQ,EACJ,CAAC,CAAI,EACL,CAAC,CAAE,GAAI,SAAU,IAAK,SAAU,MAAO,CAAW,CAAC,EAGzD,IAAM,EAAU,GAAkB,EAAK,GAAI,CAAG,EAE9C,MAAO,CACL,KAAM,CACJ,GAAI,SACJ,MAAO,EACP,GAAI,EACJ,YAAa,EACb,UACA,WACI,GAAa,CAAE,OAAQ,CAAU,KACjC,GAAa,GAAW,CAAE,YAAa,EAAK,CAClD,EACA,WACF,EAEF,UAEG,QAEH,UAEG,OACH,MAAO,CACL,KAAM,CACJ,GAAI,OACJ,KAAM,EACN,KAAM,GAAkB,EAAK,GAAI,CAAG,KAChC,GAAa,CAAE,OAAQ,CAAU,KACjC,GAAa,GAAW,CAAE,YAAa,EAAK,CAClD,EACA,WACF,MAEG,OACH,MAAO,CACL,KAAM,CACJ,GAAI,OACJ,KAAM,EACN,IAAK,EAAK,OAAS,EAAI,GAAkB,EAAK,GAAI,CAAG,EAAI,MACrD,GAAa,CAAE,OAAQ,CAAU,KACjC,GAAa,GAAW,CAAE,YAAa,EAAK,CAClD,EACA,WACF,MAEG,QACH,MAAO,CACL,KAAM,CACJ,GAAI,QACJ,IAAK,EACL,IAAK,EAAK,OAAS,EAAI,GAAkB,EAAK,GAAI,CAAG,EAAI,MACrD,GAAa,CAAE,OAAQ,CAAU,KACjC,GAAa,GAAW,CAAE,YAAa,EAAK,CAClD,EACA,WACF,EAUJ,OANA,EAAI,SAAS,KAAK,CAChB,QAAS,mBAAmB,6BAC5B,KAAM,EACN,OAAQ,CACV,CAAC,EAEM,CACL,KAAM,CACJ,GAAI,EACJ,WACA,KAAM,EAAK,IAAI,CAAC,IAAM,GAAkB,EAAG,CAAG,CAAC,KAC3C,GAAa,CAAE,OAAQ,CAAU,KACjC,GAAa,GAAW,CAAE,YAAa,EAAK,CAClD,EACA,WACF,EAMF,SAAS,EAAwB,CAC/B,EACA,EACA,EACA,EACmD,CAEnD,IAAI,EAAO,GACL,EAA4B,CAAC,EAEnC,QAAS,EAAI,EAAG,EAAI,EAAK,OAAO,OAAQ,IAGtC,GAFA,GAAQ,EAAK,OAAO,GAAG,MAAM,QAAU,EAAK,OAAO,GAAG,MAAM,IAExD,EAAI,EAAK,YAAY,OAAQ,CAC/B,IAAM,EAAW,EAAK,YAAY,GAC5B,EAAU,IAAI,IACpB,EAAK,GAAW,GAAkB,EAAwB,CAAG,EAC7D,GAAQ,KAAK,MAIjB,MAAO,CACL,KAAM,CACJ,GAAI,WACJ,OACA,UACI,GAAa,CAAE,OAAQ,CAAU,KACjC,GAAa,GAAW,CAAE,YAAa,EAAK,CAClD,EACA,WACF,EAOF,SAAS,CAAoB,CAC3B,EACA,EACU,CACV,OAAQ,EAAK,UACN,UAEH,MAAO,CAAE,MAAO,UAAW,MADf,EAC0B,KAAM,MAGzC,aAEH,MAAO,CAAE,MAAO,QAAS,KADd,EACuB,IAAK,MAGpC,mBAAoB,CACvB,IAAM,EAAM,EACN,EAAM,EAAqB,EAAI,OAAsB,CAAG,EACxD,EAAc,EAAY,WAAa,GAE7C,GAAI,EAAI,SAAU,CAGhB,IAAM,EAAO,EAAI,SACjB,GAAI,EAAK,OAAS,UAChB,MAAO,CACL,MAAO,SACP,OAAQ,EACR,SAAU,OAAQ,EAAiB,KAAK,EACxC,SAAU,MACN,GAAc,CAAE,SAAU,EAAK,CACrC,EAGF,MAAM,IAAI,EACR,0DACA,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,EAGF,IAAM,EAAY,EAAI,SAAwB,KAC9C,MAAO,CACL,MAAO,SACP,OAAQ,EACR,SAAU,KACN,GAAc,CAAE,SAAU,EAAK,CACrC,CACF,KAEK,kBAIH,OAAO,EADO,EACoB,WAA0B,CAAG,MAG5D,mBAAoB,CACvB,IAAM,EAAM,EACZ,MAAO,CACL,MAAO,SACP,GAAI,EAAI,SACR,KAAM,EAAqB,EAAI,KAAoB,CAAG,EACtD,MAAO,EAAqB,EAAI,MAAqB,CAAG,CAC1D,CACF,KAEK,oBAAqB,CACxB,IAAM,EAAM,EACZ,MAAO,CACL,MAAO,UACP,GAAI,EAAI,SACR,KAAM,EAAqB,EAAI,KAAoB,CAAG,EACtD,MAAO,EAAqB,EAAI,MAAqB,CAAG,CAC1D,CACF,KAEK,kBAAmB,CACtB,IAAM,EAAK,EACX,MAAO,CACL,MAAO,QACP,GAAI,EAAG,SACP,SAAU,EAAqB,EAAG,SAAwB,CAAG,CAC/D,CACF,KAEK,wBAAyB,CAC5B,IAAM,EAAO,EACb,MAAO,CACL,MAAO,cACP,KAAM,EAAqB,EAAK,KAAoB,CAAG,EACvD,WAAY,EAAqB,EAAK,WAA0B,CAAG,EACnE,UAAW,EAAqB,EAAK,UAAyB,CAAG,CACnE,CACF,KAEK,kBAEH,MAAO,CACL,MAAO,QACP,SAHU,EAGI,SACX,OAAO,CAAC,IAAyB,IAAO,IAAI,EAC5C,IAAI,CAAC,IAAO,EAAqB,EAAI,CAAG,CAAC,CAC9C,MAGG,mBAAoB,CACvB,IAAM,EAAM,EACN,EAAiD,CAAC,EAExD,QAAW,KAAQ,EAAI,WACrB,GAAI,EAAK,OAAS,WAAY,CAC5B,IAAM,EACJ,EAAK,IAAI,OAAS,aACb,EAAK,IAAmB,KACzB,OAAQ,EAAK,IAAgB,KAAK,EACxC,EAAW,KAAK,CACd,MACA,MAAO,EAAqB,EAAK,MAAqB,CAAG,CAC3D,CAAC,EAIL,MAAO,CAAE,MAAO,SAAU,YAAW,CACvC,KAEK,iBAAkB,CACrB,IAAM,EAAO,EAGb,GAAI,EAAK,OAAO,OAAS,mBAAoB,CAC3C,IAAM,EAAS,EAAK,OACd,EACJ,EAAO,SAAS,OAAS,aACpB,EAAO,SAAwB,KAChC,OAAQ,EAAO,SAAqB,KAAK,EAGzC,EACH,EAAe,WAAa,IAAS,EAAa,WAAa,GAElE,MAAO,CACL,MAAO,aACP,OAAQ,EAAqB,EAAO,OAAsB,CAAG,EAC7D,SACA,UAAW,EAAK,UAAU,IAAI,CAAC,IAC7B,EAAqB,EAAmB,CAAG,CAC7C,KACI,GAAc,CAAE,SAAU,EAAK,CACrC,EAIF,GAAI,EAAK,OAAO,OAAS,aAEvB,MAAO,CACL,MAAO,OACP,OAHgB,EAAK,OAAsB,KAI3C,UAAW,EAAK,UAAU,IAAI,CAAC,IAC7B,EAAqB,EAAmB,CAAG,CAC7C,CACF,EAIF,MAAM,IAAI,EACR,uEACA,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,CACF,KAEK,gBAAiB,CACpB,IAAM,EAAU,EACZ,EAAkB,cACtB,GAAI,EAAQ,OAAO,OAAS,aAC1B,EAAkB,EAAQ,OAAO,KAEnC,IAAM,EAAa,GAA2B,CAAe,EAC7D,MAAM,IAAI,EACR,iDAAiD,IACjD,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,CACF,KAEK,kBACH,MAAM,IAAI,EACR,gIAEA,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,UAGA,MAAM,IAAI,EACR,6CAA6C,EAAK,OAClD,EAAY,CAAI,EAChB,EAAI,OACJ,EAAI,QACN,GAWN,SAAS,EAAiB,CAAC,EAAkB,EAA4B,CACvE,OAAQ,EAAK,UACN,UACH,OAAQ,EAAiB,UAEtB,aAKH,OAJc,EAAoB,SAO/B,mBAAoB,CACvB,IAAM,EAAM,EAIZ,GAHoB,EAAY,WAAa,GAI3C,OAAO,EAAqB,EAAM,CAAG,EAGvC,IAAM,EAAW,GAAkB,EAAI,OAAsB,CAAG,EAIhE,GAAI,GAAY,OAAO,IAAa,UAAY,EAAS,MAAO,CAC9D,IAAM,EAAO,EAAI,SACb,OAAQ,EAAI,SAAqB,KAAK,EACrC,EAAI,SAAwB,KACjC,MAAO,CACL,MAAO,SACP,OAAQ,EACR,SAAU,KACN,EAAI,UAAY,CAAE,SAAU,EAAK,CACvC,EAGF,GAAI,EAAI,SAEN,MAAO,GAAG,KAAY,GACpB,EAAI,SACJ,CACF,KAGF,IAAM,EAAQ,EAAI,SAAwB,KAG1C,GAAI,OAAO,IAAa,SACtB,MAAO,GAAG,KAAY,IAIxB,GAAI,GAAY,EAAS,QAAU,MACjC,MAAO,CAAE,MAAO,MAAO,KAAM,GAAG,EAAS,QAAQ,GAAO,EAG1D,MAAO,GAAG,KAAY,GACxB,KAEK,kBAGH,OAAO,GADO,EACiB,WAA0B,CAAG,MAGzD,kBACH,OAAQ,EAAyB,SAAS,IAAI,CAAC,IAC7C,EAAK,GAAkB,EAAkB,CAAG,EAAI,IAClD,MAEG,mBAAoB,CACvB,IAAM,EAA8B,CAAC,EACrC,QAAW,KAAS,EAA0B,WAC5C,GAAI,EAAK,OAAS,WAAY,CAC5B,IAAM,EACJ,EAAK,IAAI,OAAS,aACb,EAAK,IAAmB,KACzB,OAAQ,EAAK,IAAgB,KAAK,EACxC,EAAO,GAAO,GAAkB,EAAK,MAAqB,CAAG,EAGjE,OAAO,CACT,KAEK,kBAGH,OAAO,EAAqB,EAAM,CAAG,MAElC,iBAEH,OAAO,EAAqB,EAAM,CAAG,MAElC,uBACA,wBACA,sBACA,wBAEH,OAAO,EAAqB,EAAM,CAAG,UAGrC,OAAO,MAOb,SAAS,EAAoB,CAC3B,EACA,EACqB,CAErB,GACE,EAAK,UAAU,SAAW,GAC1B,EAAK,UAAU,GAAG,OAAS,mBAC3B,CACA,IAAM,EAAM,EAAK,UAAU,GACrB,EAA8B,CAAC,EAErC,QAAW,KAAQ,EAAI,WACrB,GAAI,EAAK,OAAS,WAAY,CAC5B,IAAM,EACJ,EAAK,IAAI,OAAS,aACb,EAAK,IAAmB,KACzB,OAAQ,EAAK,IAAgB,KAAK,EACxC,EAAO,GAAO,GAAkB,EAAK,MAAqB,CAAG,EAIjE,OAAO,EAIT,MAAO,CACL,KAAM,EAAK,UAAU,IAAI,CAAC,IACxB,GAAkB,EAAmB,CAAG,CAC1C,CACF,EC/pDF,4BAAS,eCgBT,SAAS,EAAe,CAAC,EAAgB,EAAsB,CAE7D,IAAI,EAAY,EAChB,MAAO,EAAY,GAAK,EAAO,EAAY,KAAO;AAAA,EAChD,IAGF,GADsB,EAAO,MAAM,EAAW,CAAG,EAC/B,SAAS,IAAI,EAC7B,MAAO,GAIT,IAAI,EAAI,EACJ,EAAiB,GACrB,MAAO,EAAI,EACT,GAAI,CAAC,GAAkB,EAAO,MAAM,EAAG,EAAI,CAAC,IAAM,KAChD,EAAiB,GACjB,GAAK,EACA,QAAI,GAAkB,EAAO,MAAM,EAAG,EAAI,CAAC,IAAM,KACtD,EAAiB,GACjB,GAAK,EAEL,SAGJ,OAAO,EAcT,SAAS,EAAoB,CAAC,EAAiC,CAC7D,IAAM,EAAyB,CAAC,EAG1B,EACJ,0FAEE,EACJ,OAAQ,EAAQ,EAAc,KAAK,CAAM,KAAO,KAAM,CAGpD,IAAM,EAAO,EAAM,IAAM,iBAAiB,EAAM,OAAS,IACnD,GAAQ,EAAM,IAAM,EAAM,IAAM,IAAI,KAAK,EAE/C,EAAM,KAAK,CACT,YAAa,EACb,OACA,KAAM,GAAc,EAAQ,EAAM,KAAK,CACzC,CAAC,EAGH,OAAO,EASF,SAAS,EAAY,CAAC,EAAsC,CACjE,IAAM,EAAyB,CAAC,EAC1B,EAAyB,CAAC,EAI1B,EAAgB,GAAqB,CAAM,EACjD,EAAM,KAAK,GAAG,CAAa,EAM3B,IAAM,EACJ,qFACI,EAAY,aAEd,EAAY,EACZ,EAIE,EAAmE,CAAC,EAE1E,OAAQ,EAAQ,EAAU,KAAK,CAAM,KAAO,KAAM,CAChD,IAAM,EAAQ,EAAM,MAGpB,GAAI,GAAgB,EAAQ,CAAK,EAC/B,SAIF,IAAM,EAAO,EAAM,IAAM,EAAM,IAAM,QAAQ,EAAM,OAAS,IACtD,EAAY,EAAM,MAAQ,EAAM,GAAG,OAGnC,EAAM,GAAkB,EAAQ,EAAY,CAAC,EACnD,GAAI,IAAQ,GAAI,SAEhB,IAAM,EAAO,EAAO,MAAM,EAAW,CAAG,EAAE,KAAK,EAE/C,EAAM,KAAK,CACT,YAAa,EACb,OACA,KAAM,GAAc,EAAQ,CAAK,CACnC,CAAC,EAED,EAAY,KAAK,CAAE,QAAO,IAAK,EAAM,EAAG,MAAK,CAAC,EAIhD,IAAM,EAAqD,CAAC,EAE5D,OAAQ,EAAQ,EAAU,KAAK,CAAM,KAAO,KAAM,CAChD,IAAM,EAAQ,EAAM,MACd,EAAY,EAAM,MAAQ,EAAM,GAAG,OAEnC,EAAM,GAAkB,EAAQ,EAAY,CAAC,EACnD,GAAI,IAAQ,GAAI,SAEhB,IAAM,EAAO,EAAO,MAAM,EAAW,CAAG,EAAE,KAAK,EAE/C,EAAM,KAAK,CACT,OACA,KAAM,GAAc,EAAQ,CAAK,CACnC,CAAC,EAED,EAAY,KAAK,CAAE,QAAO,IAAK,EAAM,CAAE,CAAC,EAI1C,IAAM,EAAa,CAAC,GAAG,EAAa,GAAG,CAAW,EAAE,KAClD,CAAC,EAAG,IAAM,EAAE,MAAQ,EAAE,KACxB,EAEA,QAAW,KAAK,EACd,EAAY,EAAU,MAAM,EAAG,EAAE,KAAK,EAAI,EAAU,MAAM,EAAE,GAAG,EAIjE,EAAY,EAAU,QAAQ,gBAAiB;AAAA;AAAA,CAAM,EAAE,KAAK,EAG5D,IAAM,EAAa,GAAmB,EAAO,CAAK,EAElD,MAAO,CACL,KAAM,EACN,QACA,QACA,YACF,EAMF,SAAS,EAAiB,CAAC,EAAgB,EAAuB,CAChE,IAAI,EAAQ,EACR,EAA0B,KAC1B,EAAU,GAEd,QAAS,EAAI,EAAO,EAAI,EAAO,OAAQ,IAAK,CAC1C,IAAM,EAAO,EAAO,GAEpB,GAAI,EAAS,CACX,EAAU,GACV,SAGF,GAAI,IAAS,KAAM,CACjB,EAAU,GACV,SAIF,GAAI,CAAC,IAAa,IAAS,KAAO,IAAS,KAAO,IAAS,KAAM,CAC/D,EAAW,EACX,SAEF,GAAI,IAAa,EAAM,CACrB,EAAW,KACX,SAEF,GAAI,EAAU,SAGd,GAAI,IAAS,IAAK,IAClB,GAAI,IAAS,KAEX,GADA,IACI,IAAU,EAAG,OAAO,GAI5B,MAAO,GAMT,SAAS,EAAa,CAAC,EAAgB,EAAqB,CAC1D,OAAO,EAAO,MAAM,EAAG,CAAG,EAAE,MAAM;AAAA,CAAI,EAAE,OAM1C,SAAS,EAAkB,CACzB,EACA,EACQ,CACR,GAAI,EAAM,SAAW,EACnB,MAAO,sBAGT,IAAM,EAAY,EAAM,IAAI,CAAC,IAAM,EAAE,IAAI,EAAE,KAAK;AAAA,CAAI,EAuBpD,MAAO;AAAA;AAAA;AAAA,EArBW,EACf,IACC,CAAC,EAAG,IAAM;AAAA,YACJ,EAAI,MAAM,EAAE;AAAA;AAAA,MAElB;AAAA;AAAA,QAEE,EAAE;AAAA;AAAA,oCAE0B,KAAK,UACnC,EAAE,WACJ;AAAA;AAAA,oCAEgC,KAAK,UACnC,EAAE,WACJ;AAAA,IAEA,EACC,KAAK;AAAA,CAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcR,KAAK,EAOJ,IAAM,GAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYjB,GAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgGjB,GAAY,GAAiB;AAAA,EAAO,GC1ajD,mBAAS,QAAU,uBCMnB,mBAAS,QAAU,uBAmCZ,SAAS,EAAa,CAAC,EAAsC,CAClE,OACE,IAAU,MACV,OAAO,IAAU,UACjB,kBAAmB,GAClB,EAAc,gBAAkB,GAcrC,SAAS,EAAe,CAAC,EAAoC,CAC3D,OACE,IAAU,MACV,OAAO,IAAU,UACjB,WAAY,GACZ,OAAQ,EAAc,SAAW,SAOrC,SAAS,EAAY,CAAC,EAAqC,CACzD,OACE,IAAU,MACV,OAAO,IAAU,UACjB,SAAU,GACV,OAAQ,EAAc,OAAS,SAI5B,SAAS,CAAiB,CAC/B,EACA,EAKA,EACA,EACgB,CAEhB,IAAI,EACA,EACA,EACA,EAAyB,EACzB,EAA8B,EAElC,GAAI,OAAO,IAAwB,SAIjC,GAFA,EAAc,EAEV,OAAO,IAA+B,YAIxC,GAFA,EAAY,EAER,IAAY,OACd,EAAS,GAAE,MAAM,CAAO,EAErB,QACL,IAA+B,QAC/B,IAAY,OAGZ,EAAS,GAAE,MAAM,CAAO,EACnB,QAAI,GAAgB,CAA0B,EAEnD,EAAS,EACJ,QAAI,GAAa,CAA0B,EAEhD,EAAS,EACJ,QAAI,IAA+B,OAGxC,EAAU,EACV,EAAe,EACf,EAAS,GAAE,MAAM,CAAO,EAExB,WAAU,MACR,4DACF,EAEG,KAEL,GAAI,GAAgB,CAAmB,EACrC,EAAS,EAET,OAAS,EAEX,EAAc,GAAoB,CAAM,EAI1C,IAAI,EACJ,GAAI,EAAQ,CACV,IAAM,EAAc,GAAgB,QAAU,EAC9C,GACE,GACA,OAAO,IAAe,UACtB,MAAM,QAAS,EAAmB,QAAQ,EAE1C,EAAY,EAAmB,SAKnC,GAAI,IAAY,QAAa,GAAY,EAAS,OAAS,EACzD,EAAU,EAAS,GAcrB,MAAO,CACL,cACA,MAZY,CAAC,IAA+B,CAC5C,GAAI,EACF,OAAO,EAAU,CAAK,EAExB,GAAI,EACF,OAAO,GAAS,EAAO,CAAM,EAE/B,MAAO,IAMP,SACA,YACA,UACA,WACA,QAAS,EACT,cAAe,EACjB,EAMF,SAAS,EAAmB,CAAC,EAAwB,CAEnD,IAAM,EAAc,GAAgB,QAAU,EAG9C,GAAI,GAAc,OAAO,IAAe,UAAY,SAAU,EAAY,CACxE,IAAM,EAAI,EACV,OAAQ,EAAE,UACH,SACH,GAAI,EAAE,OAAQ,MAAO,WAAW,EAAE,UAClC,GAAI,EAAE,QAAS,MAAO,mBAAmB,EAAE,UAC3C,GAAI,EAAE,YAAc,QAAa,EAAE,YAAc,OAC/C,MAAO,WAAW,EAAE,aAAa,EAAE,mBACrC,MAAO,aACJ,aACA,UACH,GAAI,EAAE,UAAY,QAAa,EAAE,UAAY,OAC3C,MAAO,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,WACtC,GAAI,EAAE,UAAY,OAAW,MAAO,GAAG,EAAE,WAAW,EAAE,UACtD,GAAI,EAAE,UAAY,OAAW,MAAO,GAAG,EAAE,WAAW,EAAE,UACtD,OAAO,EAAE,SACN,UACH,MAAO,cACJ,QACH,MAAO,YACJ,SACH,MAAO,aACJ,OACH,MAAO,QAKb,MAAO,QAQF,IAAM,GAAU,EACrB,SACA,CAAC,IAAe,OAAO,IAAM,QAC/B,EAGa,GAAU,EACrB,SACA,CAAC,IAAe,OAAO,IAAM,QAC/B,EAGa,GAAW,EACtB,UACA,CAAC,IAAe,OAAO,IAAM,SAC/B,EAGa,GAAW,EACtB,UACA,CAAC,IAAe,OAAO,IAAM,UAAY,OAAO,UAAU,CAAC,CAC7D,EAGa,GAAe,EAC1B,mBACA,CAAC,IAAe,OAAO,IAAM,UAAY,OAAO,UAAU,CAAC,GAAK,EAAI,CACtE,EAGa,GAAkB,EAC7B,mBACA,CAAC,IAAe,OAAO,IAAM,UAAY,EAAE,OAAS,CACtD,EAGa,GAAS,EACpB,gBACA,CAAC,IAAe,OAAO,IAAM,UAAY,6BAA6B,KAAK,CAAC,CAC9E,EAMa,GAAa,CAAC,IAAuB,CAChD,GAAI,CAEF,OADA,IAAI,IAAI,CAAC,EACF,GACP,KAAM,CACN,MAAO,KAKE,GAAO,EAClB,MACA,CAAC,IAAe,OAAO,IAAM,UAAY,GAAW,CAAC,CACvD,EAGa,GAAQ,EACnB,OACA,CAAC,IACC,OAAO,IAAM,UACb,kEAAkE,KAAK,CAAC,CAC5E,EAMa,GAAmB,CAAC,IAAuB,CACtD,IAAM,EAAI,IAAI,KAAK,CAAC,EACpB,MAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAK,EAAE,SAAS,GAAG,GAOjC,GAAmB,CAAC,IAAuB,CACtD,GAAI,CAAC,sBAAsB,KAAK,CAAC,EAAG,MAAO,GAC3C,IAAM,EAAI,IAAI,KAAK,EAAI,YAAY,EACnC,MAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,GAId,GAAY,EACvB,qBACA,CAAC,IAAe,OAAO,IAAM,UAAY,GAAiB,CAAC,CAC7D,EAGa,GAAY,EACvB,oBACA,CAAC,IAAe,OAAO,IAAM,UAAY,GAAiB,CAAC,CAC7D,EAOO,SAAS,EAAW,CAAC,EAA6C,CACvE,OAAO,EACL,GAAG,EAAK,sBACR,CAAC,IAAe,IAAM,MAAQ,EAAK,MAAM,CAAC,CAC5C,EAIK,SAAS,EAAW,CACzB,EACmC,CACnC,OAAO,EACL,GAAG,EAAK,yBACR,CAAC,IAAe,IAAM,MAAQ,IAAM,QAAa,EAAK,MAAM,CAAC,CAC/D,EAiBK,SAAS,EAA0B,CACxC,EACA,KACG,EACU,CAEb,GAAI,OAAO,IAAsB,UAAY,MAAM,QAAQ,CAAY,EAAG,CACxE,IAAM,EAAc,EACd,EAAS,EACT,EAAW,IAAI,IAAI,CAAM,EAQ/B,MANoD,CAClD,cACA,MAAO,CAAC,IAA+B,EAAS,IAAI,CAAC,EACrD,cAAe,GACf,QACF,EAKF,IAAM,EAAuB,CAAC,EAC9B,GAAI,GAAc,CAAiB,EACjC,EAAM,KAAK,CAAiB,EAE9B,GAAI,GAAc,CAAY,EAC5B,EAAM,KAAK,CAA2B,EAExC,EAAM,KAAK,GAAG,CAAS,EAEvB,IAAM,EAAc,EAAM,IAAI,CAAC,IAAM,EAAE,WAAW,EAAE,KAAK,KAAK,EAC9D,OAAO,EAAK,EAAa,CAAC,IAAe,EAAM,KAAK,CAAC,IAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAIjE,SAAS,EAAS,CAAC,EAA4C,CACpE,OAAO,EACL,YAAY,EAAS,cACrB,CAAC,IAAe,MAAM,QAAQ,CAAC,GAAK,EAAE,MAAM,CAAC,IAAS,EAAS,MAAM,CAAI,CAAC,CAC5E,EAuBF,SAAS,EAAgB,CAAC,EAA+C,CACvE,GAAI,GAAc,CAAK,EACrB,MAAO,CAAC,IAAM,EAAM,MAAM,CAAC,EAG7B,GAAI,GAAS,OAAO,IAAU,UAAY,WAAY,EACpD,MAAO,CAAC,IAAM,GAAS,EAAG,CAAkB,EAG9C,IAAM,EAAS,GAAE,MAAM,CAAK,EAC5B,MAAO,CAAC,IAAM,GAAS,EAAG,CAAM,EAsB3B,SAAS,EAAiC,CAC/C,EACA,EAIA,EACsB,CAEtB,IAAM,EAAuB,CAAC,EACxB,EAAsC,CAAC,EAE7C,QAAW,KAAK,EACd,GAAI,OAAO,IAAM,SACf,EAAW,KAAK,CAAC,EACjB,EAAS,KAAK,MAAS,EAEvB,OAAW,KAAK,EAAE,EAAE,EACpB,EAAS,KAAK,EAAE,EAAE,EAKtB,IAAM,EAAU,IAAI,IAAuC,CAEzD,IAAM,EAAS,EAAW,IAAI,CAAC,EAAG,IAAM,CACtC,IAAM,EAAM,EAAI,EAAS,OAAS,EAAS,GAAK,EAAS,GACzD,GAAI,IAAQ,OAEV,MAAO,IAAM,GAEf,OAAO,GAAiB,CAAG,EAC5B,EAGG,EAAO,EAYX,OAXA,EAAW,QAAQ,CAAC,EAAM,IAAM,CAC9B,IAAM,EAAM,EAAI,EAAS,OAAS,EAAS,GAAK,EAAS,GACrD,EAAU,MACd,GAAI,GAAc,CAAG,EACnB,EAAU,EAAI,YACT,QAAI,IAAQ,OACjB,EAAU,OAAO,IAAQ,SAAW,SAAW,KAAK,UAAU,CAAG,EAEnE,EAAO,EAAK,QAAQ,IAAI,OAAO,MAAM,OAAW,GAAG,EAAG,CAAO,EAC9D,EAEM,EAAK,EAAM,CAAC,IAAmB,EAAU,EAAO,GAAG,CAAM,CAAC,GAMnE,OAHE,EAAgB,OAAS,EACzB,EAAgB,YAAc,EAEzB,EAQF,IAAM,GAAQ,GACnB,CAAC,IAAK,GAAG,EACT,CAAC,EAAG,EAAQ,IACV,MAAM,QAAQ,CAAC,GAAK,EAAE,SAAW,GAAK,EAAO,EAAE,EAAE,GAAK,EAAO,EAAE,EAAE,EACnE,YACF,EAGa,GAAU,GACrB,CAAC,GAAG,EACJ,CAAC,EAAG,IACF,OAAO,IAAM,UACb,IAAM,MACN,CAAC,MAAM,QAAQ,CAAC,GAChB,OAAO,OAAO,CAAC,EAAE,MAAM,CAAM,EAC/B,mBACF,EAuCO,SAAS,EAA+C,CAC7D,EACA,EACa,CACb,IAAM,EAAS,OAAO,OAAO,CAAO,EAC9B,EAAW,IAAI,IAAI,CAAM,EACzB,EAAO,OAAO,KAAK,CAAO,EAG1B,EAAyC,CAAC,EAChD,QAAY,EAAK,KAAU,OAAO,QAAQ,CAAO,EAC/C,EAAM,GAAS,EAajB,MAV8B,CAC5B,cACA,MAAO,CAAC,IAAgC,EAAS,IAAI,CAAe,EACpE,cAAe,GACf,UACA,QACA,SACA,MACF,EA6CF,SAAS,EAAa,CAAC,EAAiC,CACtD,GAAI,IAAY,KAAM,MAAO,OAC7B,GAAI,IAAY,OAAW,MAAO,YAClC,OAAQ,OAAO,OACR,SACH,MAAO,aACJ,UACH,MAAO,cACJ,SACH,OAAO,OAAO,UAAU,CAAO,EAAI,UAAY,aAC5C,SACH,OAAO,MAAM,QAAQ,CAAO,EAAI,QAAU,iBAE1C,OAAO,MAgCN,SAAS,EAAiB,CAC/B,EAEA,EACA,EACsD,CAEtD,GAAI,MAAM,QAAQ,CAAQ,GAAK,EAAa,CAC1C,IAAM,EAAa,EAGb,EAAuB,CAAC,EACxB,EAAsC,CAAC,EAC7C,QAAW,KAAM,EACf,GAAI,MAAM,QAAQ,CAAE,EAClB,EAAW,KAAK,EAAG,EAAE,EACrB,EAAS,KAAK,EAAG,EAAE,EAEnB,OAAW,KAAK,CAAE,EAClB,EAAS,KAAK,MAAS,EAI3B,IAAM,EAAW,IAAI,IAA0B,CAE7C,IAAM,EAAkB,EAAW,IAAI,CAAC,EAAG,IACzC,EAAM,EAAS,OAAS,EAAS,GAAO,EAAS,EACnD,EACM,EAAO,EAAY,GAAG,CAAQ,EACpC,OAAO,GAAkB,EAAM,CAAI,GASrC,OANA,OAAO,iBAAiB,EAAS,CAC/B,eAAgB,CAAE,MAAO,EAAY,WAAY,EAAK,EACtD,YAAa,CAAE,MAAO,EAAM,WAAY,EAAK,EAC7C,cAAe,CAAE,MAAO,GAAM,WAAY,EAAK,CACjD,CAAC,EAEM,EAIT,OAAO,GACL,EACA,CACF,EAKF,SAAS,EAAwB,CAC/B,EAEA,EACuB,CACvB,IAAI,EAA8B,CAAC,EAC/B,EAAe,OACf,EAAiC,gBAErC,GAAI,OAAO,IAAa,WAAY,CAElC,IAAM,EAAQ,EAAiB,MAC/B,GAAI,EAAM,CAER,GAAI,EAAK,OACP,QAAY,EAAK,KAAS,OAAO,QAAQ,EAAK,MAAM,EAClD,EAAO,GAAQ,GAAc,SAAW,KAI5C,GAAI,EAAK,QACP,EAAW,EAAK,SAAiB,SAAW,KAG9C,GAAI,EAAK,WAAY,EAAiB,iBACjC,QAAI,EAAK,OAAQ,EAAiB,gBAClC,OAAiB,WAGxB,OAAS,EAAS,QAAU,CAAC,EAC7B,EAAU,EAAS,QACnB,EAAiB,EAAS,gBAAkB,gBAgD9C,MA7CsC,CACpC,YAAa,EACb,SACA,UACA,iBAEA,MAAO,CAAC,IAAsC,CAC5C,GAAI,OAAO,IAAU,WAAY,MAAO,GAGxC,IAAM,EAAgB,OAAO,KAAK,CAAM,EAAE,OAC1C,GAAI,EAAgB,EAAG,CAIrB,IAAM,EADK,EACc,MACzB,GAAI,GAAM,OAAQ,CAGhB,GADuB,OAAO,KAAK,EAAK,MAAM,EAAE,SACzB,EAAe,MAAO,GAG7C,IAAM,EAAe,OAAO,KAAK,CAAM,EACjC,EAAW,OAAO,KAAK,EAAK,MAAM,EACxC,QAAS,EAAI,EAAG,EAAI,EAAa,OAAQ,IAAK,CAC5C,IAAM,EAAW,EAAK,OAAO,EAAS,IAChC,EAAkB,EAAO,EAAa,IAC5C,GAAI,GAAU,MAAM,MAAQ,IAAoB,OAAW,CACzD,IAAM,EAAe,GAAc,CAAe,EAClD,GACE,GACA,EAAS,KAAK,OAAS,GACvB,EAAS,KAAK,OAAS,MAEvB,MAAO,MAMjB,MAAO,IAET,cAAe,EACjB,ED5uBF,IAAM,QAEO,GAAsB,GAAI,QAU1B,GAA2B,OAAO,IAAI,YAAY,EAK/D,SAAS,EAAY,CAAC,EAIpB,CACA,IAAO,EAAQ,EAAG,EAAQ,EAAG,EAAQ,GAAK,EAAQ,MAAM,GAAG,EAAE,IAAI,MAAM,EACvE,MAAO,CAAE,QAAO,QAAO,OAAM,EAOxB,SAAS,EAAe,CAAC,EAAW,EAAuB,CAChE,IAAM,EAAK,GAAa,CAAC,EACnB,EAAK,GAAa,CAAC,EAEzB,GAAI,EAAG,QAAU,EAAG,MAAO,OAAO,EAAG,MAAQ,EAAG,MAAQ,GAAK,EAC7D,GAAI,EAAG,QAAU,EAAG,MAAO,OAAO,EAAG,MAAQ,EAAG,MAAQ,GAAK,EAC7D,GAAI,EAAG,QAAU,EAAG,MAAO,OAAO,EAAG,MAAQ,EAAG,MAAQ,GAAK,EAC7D,MAAO,GAMF,SAAS,EAAkB,CAAC,EAAW,EAAoB,CAChE,IAAM,EAAK,GAAa,CAAC,EACnB,EAAK,GAAa,CAAC,EACzB,OAAO,EAAG,QAAU,EAAG,MAalB,MAAM,WAAqB,KAAM,CAE7B,KAEA,SAEA,OAEA,UAET,WAAW,CACT,EACA,EACA,EACA,EACA,EACA,CACA,MAAM,CAAO,EAOb,GANA,KAAK,KAAO,eACZ,KAAK,KAAO,EACZ,KAAK,SAAW,EAChB,KAAK,OAAS,EACd,KAAK,UAAY,EAEb,MAAM,kBACR,MAAM,kBAAkB,KAAM,EAAY,EAGhD,CAaO,SAAS,EAAS,CACvB,EACA,EACA,EACc,CACd,IAAM,EAAS,IAAU,KAAO,OAAS,OAAO,EAE1C,EAAQ,GAAO,MAAQ,GAAS,EAAI,OACpC,EAAM,IAAI,GACd,YAAY,UAAiB,WAAc,IAC3C,EACA,EACA,EACA,CACF,EAGA,GAAI,GAAO,cACT,QAAQ,MAAM,mBAAmB,EAAI,SAAS,EAIhD,GAAI,GAAO,gBACT,MAAM,EAGR,OAAO,EAMF,SAAS,EAAc,CAAC,EAAuC,CAGpE,OACE,aAAiB,OAChB,EAAc,OAAS,gBACxB,SAAU,EAoDd,IAAM,GAA4B,CAChC,MAAO,GACP,OAAQ,SACR,mBAAoB,GACpB,aAAc,GAChB,EAGI,GAAoB,IAAK,EAAe,EAGtC,GAAsB,CAAC,EAGzB,GAAc,EAMX,SAAS,EAAW,EAAS,CAClC,KAMK,SAAS,EAAU,EAAS,CACjC,GAAI,GAAc,EAAG,KAMhB,SAAS,EAAY,EAAY,CACtC,OAAO,GAAc,EAMhB,SAAS,EAAS,CAAC,EAA0B,CAClD,GAAS,IAAK,MAAW,CAAQ,EAM5B,SAAS,EAAS,EAAc,CACrC,MAAO,IAAK,EAAO,EAOd,SAAS,EAAS,CAAC,EAAoB,CAC5C,GAAI,GAAO,OAAS,EAAM,CACxB,GAAU,KAAK,CAAI,EAEnB,IAAM,EAAU,GAAO,cAAgB,IACvC,MAAO,GAAU,OAAS,EACxB,GAAU,MAAM,GAQf,SAAS,EAAQ,EAAS,CAC/B,GAAI,GAAO,MACT,GAAU,IAAI,EAOX,SAAS,EAAQ,EAAa,CACnC,MAAO,CAAC,GAAG,EAAS,EASf,SAAS,EAAY,EAAS,CACnC,GAAS,IAAK,EAAe,EAC7B,GAAU,OAAS,EACnB,GAAc,EAgBT,SAAS,EAAE,CAAC,EAAY,EAAqB,CAElD,GACE,IAAM,MACN,OAAO,IAAM,UACb,OAAQ,EAAU,MAAe,WAEjC,OAAQ,EAAU,IAAW,CAAC,EAEhC,GACE,IAAM,MACN,OAAO,IAAM,UACb,OAAQ,EAAU,MAAe,WAEjC,OAAQ,EAAU,IAAW,CAAC,EAIhC,GACE,IAAM,MACN,OAAO,IAAM,UACb,OAAQ,EAAU,SAAW,WAE7B,OAAQ,EAAU,OAAO,CAAC,EAE5B,GACE,IAAM,MACN,OAAO,IAAM,UACb,OAAQ,EAAU,SAAW,WAE7B,OAAQ,EAAU,OAAO,CAAC,EAK5B,GAAI,aAAa,QAAU,aAAa,QAAU,aAAa,QAC7D,EAAI,EAAE,QAAQ,EAEhB,GAAI,aAAa,QAAU,aAAa,QAAU,aAAa,QAC7D,EAAI,EAAE,QAAQ,EAIhB,GAAI,IAAM,EAAG,MAAO,GAIpB,IAAK,IAAM,MAAQ,IAAM,UAAe,IAAM,MAAQ,IAAM,QAC1D,MAAO,GAIT,GAAI,IAAM,MAAQ,IAAM,QAAa,IAAM,MAAQ,IAAM,OACvD,MAAO,GAIT,GAAI,OAAO,IAAM,OAAO,EAAG,MAAO,GAGlC,GAAI,OAAO,IAAM,SAAU,MAAO,GAGlC,GAAI,aAAa,KAAO,aAAa,IAAK,CACxC,GAAK,EAAmB,OAAU,EAAmB,KAAM,MAAO,GAClE,QAAW,KAAK,EACd,GAAI,CAAE,EAAmB,IAAI,CAAC,EAAG,MAAO,GAE1C,MAAO,GAIT,GAAI,aAAa,KAAO,aAAa,IAAK,CACxC,GAAK,EAA4B,OAAU,EAA4B,KACrE,MAAO,GACT,QAAY,EAAG,KAAM,EAA4B,CAC/C,GAAI,CAAE,EAA4B,IAAI,CAAC,EAAG,MAAO,GACjD,GAAI,CAAC,GAAG,EAAI,EAA4B,IAAI,CAAC,CAAC,EAAG,MAAO,GAE1D,MAAO,GAIT,GAAI,aAAa,MAAQ,aAAa,KACpC,OAAO,EAAE,QAAQ,IAAM,EAAE,QAAQ,EAInC,GAAI,aAAa,QAAU,aAAa,OACtC,OAAO,EAAE,SAAS,IAAM,EAAE,SAAS,EAIrC,GAAI,MAAM,QAAQ,CAAC,GAAK,MAAM,QAAQ,CAAC,EAAG,CACxC,GAAI,EAAE,SAAW,EAAE,OAAQ,MAAO,GAClC,OAAO,EAAE,MAAM,CAAC,EAAG,IAAM,GAAG,EAAG,EAAE,EAAE,CAAC,EAEtC,GAAI,MAAM,QAAQ,CAAC,IAAM,MAAM,QAAQ,CAAC,EAAG,MAAO,GAGlD,IAAM,EAAQ,OAAO,KAAK,CAAW,EAC/B,EAAQ,OAAO,KAAK,CAAW,EACrC,GAAI,EAAM,SAAW,EAAM,OAAQ,MAAO,GAC1C,OAAO,EAAM,MAAM,CAAC,IAAM,GAAI,EAAU,GAAK,EAAU,EAAE,CAAC,EAQrD,SAAS,EAAK,CAAC,EAAY,EAAqB,CACrD,MAAO,CAAC,GAAG,EAAG,CAAC,EAwBV,SAAS,EAAM,CAAC,EAAwB,CAC7C,GAAI,IAAU,KAAM,MAAO,OAC3B,OAAO,OAAO,EAET,SAAS,EAAE,CAAC,EAAY,EAAqB,CAElD,GAAI,aAAa,QAAU,aAAa,QAAU,aAAa,QAC7D,EAAI,EAAE,QAAQ,EAEhB,GAAI,aAAa,QAAU,aAAa,QAAU,aAAa,QAC7D,EAAI,EAAE,QAAQ,EAIhB,GAAI,IAAM,EAAG,MAAO,GAGpB,IAAK,IAAM,MAAQ,IAAM,UAAe,IAAM,MAAQ,IAAM,QAC1D,MAAO,GAGT,MAAO,GAQF,SAAS,EAAK,CAAC,EAAY,EAAqB,CACrD,MAAO,CAAC,GAAG,EAAG,CAAC,EAMV,SAAS,EAAO,CAAC,EAAmC,CACzD,OACE,IAAU,MACV,OAAO,IAAU,UAChB,EAAc,SAAW,GAQvB,SAAS,EAAK,CACnB,EACA,EACU,CACV,IAAM,EAAgB,CACpB,OAAQ,GACR,aACG,CACL,EAGA,GAAI,GAAO,OAAS,GAAU,OAAS,EAAG,CAExC,IAAM,EAAY,GAAS,KACvB,CAAC,GAAG,GAAW,EAAQ,IAAI,EAC3B,CAAC,GAAG,EAAS,EACjB,EAAI,MAAQ,EAGd,OAAO,EAOF,SAAS,EAAa,CAAC,EAAoB,EAA6B,CAC7E,GAAI,EAAO,SAAW,EACpB,OAAO,GAAM,eAAe,EAE9B,GAAI,EAAO,SAAW,EACpB,OAAO,EAAO,GAIhB,IAAM,EAAa,EAChB,IAAI,CAAC,IAAM,CAEV,GAAI,EAAE,KAAM,CACV,IAAM,EAAQ,EAAE,KAAK,MAAM,GAAG,EAC9B,OAAO,EAAM,EAAM,OAAS,GAE9B,MAAO,UACR,EACA,KAAK,IAAI,EAEN,EAAU,gCACd,GAAY,eACT,IAEL,OAAO,GAAM,EAAS,CACpB,KAAM,EACN,QACF,CAAC,EAeI,SAAS,EAAM,CAAC,EAAwB,CAC7C,GAAI,IAAU,KAAM,MAAO,OAC3B,GAAI,IAAU,OAAW,MAAO,YAChC,GAAI,MAAM,QAAQ,CAAK,EAAG,MAAO,QAEjC,IAAM,EAAI,OAAO,EACjB,GAAI,IAAM,SAAU,OAAO,EAI3B,IAAM,EAAmB,EAAiB,aAAa,KACvD,GAAI,GAAmB,IAAoB,SACzC,OAAO,EAGT,MAAO,SAgBF,SAAS,EAAY,CAAC,EAAgB,EAA2B,CACtE,GAAI,IAAU,MAAQ,IAAU,OAAW,MAAO,GAClD,GAAI,OAAO,IAAU,UAAY,OAAO,IAAU,WAAY,MAAO,GAGrE,IAAI,EAAQ,EACZ,MAAO,IAAU,KAAM,CAErB,GADyB,EAAiB,aAAa,OAC/B,EAAU,MAAO,GACzC,EAAQ,OAAO,eAAe,CAAK,EAGrC,MAAO,GAWF,SAAS,EAAS,CACvB,EACA,EACA,EACiB,CAEjB,GAAI,GAAQ,CAAK,EAAG,OAAO,EAG3B,GACE,OAAO,IAAa,UACpB,IAAa,MACb,UAAW,EACX,CACA,GAAI,EAAS,MAAM,CAAK,EAAG,OAAO,KAClC,OAAO,GAAM,YAAY,EAAS,uBAAuB,GAAO,CAAK,IAAK,CACxE,OACA,SAAU,EAAS,YACnB,OAAQ,GAAO,CAAK,CACtB,CAAC,EAGH,IAAM,EAAS,GAAO,CAAK,EAG3B,GAAI,IAAa,MAAO,OAAO,KAC/B,GAAI,IAAa,EAAQ,OAAO,KAGhC,GAAI,IAAa,UAAY,IAAW,SAAU,OAAO,KACzD,GAAI,IAAa,WAAa,IAAW,UAAY,OAAO,UAAU,CAAK,EACzE,OAAO,KACT,GACE,IAAa,wBACb,IAAW,UACX,OAAO,UAAU,CAAK,GACrB,GAAoB,EAErB,OAAO,KAGT,GAAI,IAAa,UAAY,IAAW,SAAU,OAAO,KAEzD,OAAO,GAAM,YAAY,aAAoB,IAAU,CACrD,OACA,WACA,QACF,CAAC,EAkBI,SAAS,EAAY,CAC1B,EACA,EAGA,EACiB,CACjB,QAAY,EAAM,KAAU,OAAO,QAAQ,EAAK,MAAM,EAAG,CACvD,IAAM,EAAQ,EAAK,GAGnB,GAAI,GAAQ,CAAK,EAAG,OAAO,EAG3B,GAAI,EAAM,UAAY,IAAU,OAAW,CACzC,IAAM,EACJ,OAAO,EAAM,OAAS,SAAW,EAAM,KAAO,EAAM,KAAK,YAC3D,OAAO,GAAM,+BAA+B,KAAS,CACnD,KAAM,EAAW,GAAG,KAAY,IAAS,EACzC,SAAU,EACV,OAAQ,YACR,IAAK,EAAM,GACb,CAAC,EAIH,GAAI,IAAU,OAAW,SAGzB,IAAM,EAAY,GAChB,EACA,EAAM,KACN,EAAW,GAAG,KAAY,IAAS,CACrC,EACA,GAAI,EAAW,CAEb,GAAI,EAAM,IACR,EAAU,IAAM,EAAM,IAExB,OAAO,GAIX,OAAO,KAiEF,SAAS,EAAuC,CACrD,EACA,EACG,CAeH,GAbE,EAAW,MAAQ,EAajB,EARF,CAAC,EAAK,cACL,EAAK,MACJ,EAAK,YAEJ,GAAO,SAAW,QAAU,CAAC,EAAK,QAElC,EAAK,SAAW,GAAO,SAAW,OAAS,CAAC,EAAK,eAGpD,OAAO,EAIT,IAAM,EAAa,CAAC,CAAC,EAAK,QACpB,EAAa,CAAC,CAAC,EAAK,OACpB,EAAW,CAAC,CAAC,EAAK,KAClB,EAAmB,CAAC,CAAC,EAAK,aAC1B,EAAiB,CAAC,CAAC,EAAK,WAGxB,EAAiB,EAAK,SAAS,SAC/B,EAAe,OAAO,QAAQ,EAAK,MAAM,EACzC,EAAa,EAAa,OAE1B,EAAW,EAAG,MAAQ,EAAK,MAAQ,YAEnC,EAAU,QAAS,IAAe,EAAoC,CAE1E,GAAI,GAAc,EAChB,OAAO,EAAG,MAAM,KAAM,CAAI,EAI5B,IAAM,EAAiB,GAAa,CAAC,GAAc,GAAO,SAAW,OAC/D,EACJ,IACC,GAAmB,CAAC,GAAoB,GAAO,SAAW,OAG7D,GAAI,CAAC,GAAkB,CAAC,EACtB,OAAO,EAAG,MAAM,KAAM,CAAI,EAI5B,GAAI,EAAK,OAAS,GAAK,GAAQ,EAAK,EAAE,EACpC,OAAO,EAAK,GAId,GAAI,EAAgB,CAElB,IAAM,EACJ,EAAK,SAAW,GAChB,OAAO,EAAK,KAAO,UACnB,EAAK,KAAO,MACZ,CAAC,MAAM,QAAQ,EAAK,EAAE,EAGlB,EAA8B,CAAC,EAGrC,GAAI,CAAC,EACH,QAAS,EAAI,EAAG,EAAI,EAAY,IAAK,CACnC,IAAO,EAAM,GAAS,EAAa,GAC7B,EAAQ,EAAK,GAGnB,GAAI,GAAQ,CAAK,EAAG,CAClB,EAAgB,KAAK,CAAK,EAC1B,SAIF,GAAI,EAAM,UAAY,IAAU,OAAW,CACzC,EAAgB,KACd,GAAM,+BAA+B,KAAS,CAC5C,KAAM,GAAG,KAAY,IACrB,SACE,OAAO,EAAM,OAAS,SAClB,EAAM,KACN,EAAM,MAAM,aAAe,QACjC,OAAQ,YACR,IAAK,EAAM,GACb,CAAC,CACH,EACA,SAIF,GAAI,IAAU,OAAW,CACvB,IAAM,EAAU,GAAU,EAAO,EAAM,KAAM,GAAG,KAAY,GAAM,EAClE,GAAI,EAAS,CACX,GAAI,EAAM,IAAK,EAAQ,IAAM,EAAM,IACnC,EAAgB,KAAK,CAAO,IAI7B,KAEL,IAAM,EAAY,EAAK,GACvB,QAAS,EAAI,EAAG,EAAI,EAAY,IAAK,CACnC,IAAO,EAAM,GAAS,EAAa,GAC7B,EAAQ,EAAU,GAExB,GAAI,GAAQ,CAAK,EAAG,CAClB,EAAgB,KAAK,CAAK,EAC1B,SAGF,GAAI,EAAM,UAAY,IAAU,OAAW,CACzC,EAAgB,KACd,GAAM,+BAA+B,KAAS,CAC5C,KAAM,GAAG,KAAY,IACrB,SACE,OAAO,EAAM,OAAS,SAClB,EAAM,KACN,EAAM,MAAM,aAAe,QACjC,OAAQ,YACR,IAAK,EAAM,GACb,CAAC,CACH,EACA,SAGF,GAAI,IAAU,OAAW,CACvB,IAAM,EAAU,GAAU,EAAO,EAAM,KAAM,GAAG,KAAY,GAAM,EAClE,GAAI,EAAS,CACX,GAAI,EAAM,IAAK,EAAQ,IAAM,EAAM,IACnC,EAAgB,KAAK,CAAO,KAOpC,GAAI,EAAgB,OAAS,EAC3B,OAAO,GAAc,EAAiB,CAAQ,EAKlD,GAAU,CAAQ,EAElB,GAAI,CAEF,IAAM,EAAS,EAAG,MAAM,KAAM,CAAI,EAGlC,GAAI,GAAmB,EAAK,SAAW,CAAC,GAAQ,CAAM,EAAG,CAEvD,IAAM,EACJ,GAAkB,OAAO,IAAW,UAAY,IAAW,KACvD,OAAO,OAAO,CAAC,EAAG,EAAgB,CAAM,EACxC,EACA,EAAc,GAClB,EACA,EAAK,QAAQ,KACb,GAAG,KACL,EACA,GAAI,EAEF,OADA,GAAS,EACF,EAKX,OADA,GAAS,EACF,EACP,MAAO,EAAG,CAGV,OAFA,GAAS,EAEF,GAAO,EAAY,SAAW,OAAO,CAAC,EAAG,CAC9C,KAAM,EACN,MAAO,CACT,CAAC,IAQL,OAHA,OAAO,eAAe,EAAS,OAAQ,CAAE,MAAO,EAAG,IAAK,CAAC,EACvD,EAAgB,MAAQ,EAEnB,EAYF,SAAS,EAAgD,CAC9D,EAC8D,CAE9D,IAAM,EAAU,IAAI,MAAM,EAAK,CAE7B,SAAS,CAAC,EAAQ,EAAM,EAAW,CACjC,OAAO,QAAQ,UAAU,EAAQ,EAAM,CAAS,GAGlD,KAAK,CAAC,EAAQ,EAAU,EAAM,CAC5B,OAAO,QAAQ,UAAU,EAAQ,CAAI,EAEzC,CAAC,EAGD,OAAO,eAAe,EAAS,OAAQ,CAAE,MAAO,EAAI,IAAK,CAAC,EAG1D,QAAW,KAAO,OAAO,oBAAoB,CAAG,EAC9C,GAAI,IAAQ,UAAY,IAAQ,QAAU,IAAQ,YAChD,OAAO,eACL,EACA,EACA,OAAO,yBAAyB,EAAK,CAAG,CAC1C,EAIJ,OAAO,EA2BF,SAAS,EAAa,EAAG,CAE9B,IAAI,EAA4B,IAAK,EAAO,EACtC,EAA8B,CAAC,EACjC,EAAsB,EAG1B,SAAS,CAAiB,CAAC,EAA0B,CACnD,EAAiB,IAAK,KAAmB,CAAQ,EAGnD,SAAS,CAAiB,EAAc,CACtC,MAAO,IAAK,CAAe,EAG7B,SAAS,CAAiB,CAAC,EAAoB,CAC7C,GAAI,EAAe,OAAS,EAAM,CAChC,EAAkB,KAAK,CAAI,EAC3B,IAAM,EAAU,EAAe,cAAgB,IAC/C,MAAO,EAAkB,OAAS,EAChC,EAAkB,MAAM,GAK9B,SAAS,CAAgB,EAAS,CAChC,GAAI,EAAe,MACjB,EAAkB,IAAI,EAI1B,SAAS,CAAgB,EAAa,CACpC,MAAO,CAAC,GAAG,CAAiB,EAG9B,SAAS,CAAoB,EAAS,CACpC,EAAiB,IAAK,EAAe,EACrC,EAAkB,OAAS,EAC3B,EAAsB,EAGxB,SAAS,CAAmB,EAAS,CACnC,IAGF,SAAS,CAAkB,EAAS,CAClC,GAAI,EAAsB,EAAG,IAG/B,SAAS,CAAoB,EAAY,CACvC,OAAO,EAAsB,EAI/B,IAAM,EAAoB,IAAI,IAK9B,SAAS,CAAyB,CAChC,EACA,EACA,EACM,CACN,GAAI,CAAC,EAAkB,IAAI,CAAQ,EACjC,EAAkB,IAAI,EAAU,IAAI,GAAK,EAE3C,EAAkB,IAAI,CAAQ,EAAG,IAAI,EAAY,CAAE,EAGrD,SAAS,CAAwB,CAC/B,EACA,EACuC,CAEvC,IAAM,EAAI,OAAO,EACb,EACJ,GAAI,IAAU,MAAQ,IAAU,OAAW,OAC3C,GAAI,IAAM,SAAU,EAAW,SAC1B,QAAI,IAAM,SAAU,EAAW,SAC/B,QAAI,IAAM,UAAW,EAAW,UAChC,QAAI,MAAM,QAAQ,CAAK,EAAG,EAAW,QACrC,QAAI,IAAM,SAEb,EAAY,EAAc,aAAa,MAAQ,SAE/C,YAIF,IAAI,EAA8B,EAClC,MAAO,EAAS,CACd,IAAM,EAAU,EAAkB,IAAI,CAAO,EAC7C,GAAI,GAAS,IAAI,CAAU,EACzB,OAAO,EAAQ,IAAI,CAAU,EAG/B,GAAI,IAAM,UAAY,CAAC,MAAM,QAAQ,CAAK,GAKxC,GADA,EAHc,OAAO,eACnB,IAAY,EAAW,EAAQ,OAAO,eAAe,CAAK,CAC5D,GACiB,aAAa,KAC1B,IAAY,UAAY,IAAY,EAAU,MAElD,WAKJ,IAAM,EAAgB,EAAkB,IAAI,QAAQ,EACpD,GAAI,GAAe,IAAI,CAAU,EAC/B,OAAO,EAAc,IAAI,CAAU,EAGrC,OAGF,SAAS,CAAiB,CACxB,EACA,EACA,EACc,CACd,IAAM,EAAS,IAAU,KAAO,OAAS,OAAO,EAC1C,EAAQ,EAAe,MAAQ,EAAiB,EAAI,OACpD,EAAM,IAAI,GACd,YAAY,UAAiB,WAAc,IAC3C,EACA,EACA,EACA,CACF,EAEA,GAAI,EAAe,cACjB,QAAQ,MAAM,mBAAmB,EAAI,SAAS,EAEhD,GAAI,EAAe,gBACjB,MAAM,EAGR,OAAO,EAGT,SAAS,CAAa,CACpB,EACA,EACU,CACV,IAAM,EAAgB,CACpB,OAAQ,GACR,aACG,CACL,EACA,GAAI,EAAe,OAAS,EAAkB,OAAS,EAAG,CACxD,IAAM,EAAY,GAAS,KACvB,CAAC,GAAG,EAAmB,EAAQ,IAAI,EACnC,CAAC,GAAG,CAAiB,EACzB,EAAI,MAAQ,EAEd,OAAO,EAGT,MAAO,CACL,QAAS,GAET,gBACA,UAAW,EACX,kBAEA,WACA,MAAO,EACP,iBACA,UACA,gBACA,aACA,gBACA,QACA,aACA,mBACA,sBAEA,UAAW,EACX,UAAW,EACX,UAAW,EACX,SAAU,EACV,SAAU,EACV,aAAc,EAEd,YAAa,EACb,WAAY,EACZ,aAAc,EAEd,YACA,MAAO,GAAE,MAAM,KAAK,EAAC,EACrB,OACA,iBACA,SACA,WACA,QACA,qBACA,YACA,YACA,UACA,WACA,WACA,YACA,YACA,gBACA,mBACA,UACA,QACA,SACA,SACA,WAEA,MACA,SAEA,MACA,SAEA,UACA,aAEA,kBAAmB,EACnB,iBAAkB,CACpB,EAYK,IAAM,GAAU,CACrB,QAAS,GAET,gBACA,aACA,kBAEA,WACA,SACA,iBACA,UACA,gBACA,aACA,gBACA,QACA,aACA,mBACA,sBAEA,aACA,aACA,aACA,YACA,YACA,gBAEA,eACA,cACA,gBAEA,iBAEA,YACA,MAAO,GAAE,MAAM,KAAK,EAAC,EACrB,OACA,iBACA,SACA,WACA,QACA,qBACA,YACA,YACA,UAEA,WACA,WACA,YACA,YACA,gBACA,mBACA,UACA,QACA,SACA,aACA,aACA,SACA,WAEA,MACA,SAEA,MACA,SAEA,SACF,EAUO,SAAS,EAAc,EAAmB,CAC/C,IAAM,EAAI,WAEV,GAAI,EAAE,MAAO,CACX,IAAM,EAAkB,EAAE,MAAM,QAGhC,GAAI,OAAO,IAAoB,SAE7B,OADA,EAAE,MAAQ,GACH,GAGT,IAAM,EAAa,GAAgB,GAAa,CAAe,EAE/D,GAAI,IAAe,EAEjB,OAAO,EAAE,MAGX,GAAI,GAAmB,GAAa,CAAe,EAEjD,GAAI,EAAa,EACf,QAAQ,KACN,0BAA0B,OAAoB,IAChD,EACA,EAAE,MAAQ,GAEV,aAAQ,KACN,wBAAwB,iBAA+B,KACzD,EAQF,QAJA,QAAQ,KACN,iCAAiC,QAAsB,6BACzD,EAEI,EAAa,EACf,QAAQ,KAAK,gBAAgB,iCAA0C,EACvE,EAAE,MAAQ,GAId,OAAO,EAAE,MAIX,OADA,EAAE,MAAQ,GACH,GAOF,SAAS,EAAkB,CAAC,EAA0B,CAC3D,MAAO;AAAA;AAAA,aAEI,4BAAmC;AAAA,IAC5C,6BAAoC,MAAa;AAAA;AAAA,EAEnD,KAAK,EAQA,SAAS,EAAgB,CAAC,EAA2B,CAC1D,MAAO;AAAA;AAAA,EAEP,iBAAyB;AAAA,EACzB,KAAK,EE57CP,SAAS,EAAU,CAAC,EAAY,EAAY,EAAU,YAAe,CACnE,GAAI,IAAM,EAAG,MAAO,GACpB,GAAI,OAAO,IAAM,UAAY,OAAO,IAAM,UAExC,GAAI,CAAC,OAAO,UAAU,CAAC,GAAK,CAAC,OAAO,UAAU,CAAC,EAAG,CAChD,IAAM,EAAO,KAAK,IAAI,EAAI,CAAC,EACrB,EAAS,KAAK,IAAI,KAAK,IAAI,CAAC,EAAG,KAAK,IAAI,CAAC,EAAG,CAAC,EACnD,OAAO,EAAO,EAAS,GAG3B,MAAO,GAMT,SAAS,EAAS,CAAC,EAAY,EAAqB,CAClD,GAAI,IAAM,EAAG,MAAO,GAEpB,GACE,OAAO,IAAM,UACb,OAAO,IAAM,UACb,OAAO,MAAM,CAAC,GACd,OAAO,MAAM,CAAC,EAEd,MAAO,GACT,GAAI,GAAW,EAAG,CAAC,EAAG,MAAO,GAC7B,GAAI,IAAM,MAAQ,IAAM,KAAM,OAAO,IAAM,EAC3C,GAAI,IAAM,QAAa,IAAM,OAAW,OAAO,IAAM,EACrD,GAAI,OAAO,IAAM,OAAO,EAAG,MAAO,GAClC,GAAI,OAAO,IAAM,SAAU,MAAO,GAElC,GAAI,MAAM,QAAQ,CAAC,GAAK,MAAM,QAAQ,CAAC,EAAG,CACxC,GAAI,EAAE,SAAW,EAAE,OAAQ,MAAO,GAClC,OAAO,EAAE,MAAM,CAAC,EAAG,IAAM,GAAU,EAAG,EAAE,EAAE,CAAC,EAG7C,GAAI,MAAM,QAAQ,CAAC,IAAM,MAAM,QAAQ,CAAC,EAAG,MAAO,GAElD,IAAM,EAAQ,OAAO,KAAK,CAAW,EAC/B,EAAQ,OAAO,KAAK,CAAW,EACrC,GAAI,EAAM,SAAW,EAAM,OAAQ,MAAO,GAC1C,OAAO,EAAM,MAAM,CAAC,IAAM,GAAW,EAAU,GAAK,EAAU,EAAE,CAAC,EAgBnE,SAAS,EAAW,CAClB,EACA,EACA,EAAO,GAC+B,CAEtC,GAAI,IAAY,KAAM,CACpB,GAAI,IAAW,KAAM,MAAO,CAAE,QAAS,EAAK,EAC5C,MAAO,CACL,QAAS,GACT,MAAO,qBAAqB,WAAc,GAAO,CAAM,GACzD,EAIF,GAAI,IAAY,OAAW,CACzB,GAAI,IAAW,OAAW,MAAO,CAAE,QAAS,EAAK,EACjD,MAAO,CACL,QAAS,GACT,MAAO,0BAA0B,WAAc,GAAO,CAAM,GAC9D,EAIF,GAAI,OAAO,IAAY,SAAU,CAC/B,GAAI,OAAO,IAAW,SAAU,MAAO,CAAE,QAAS,EAAK,EACvD,MAAO,CACL,QAAS,GACT,MAAO,uBAAuB,WAAc,GAAO,CAAM,GAC3D,EAGF,GAAI,OAAO,IAAY,SAAU,CAC/B,GAAI,OAAO,IAAW,SAAU,MAAO,CAAE,QAAS,EAAK,EACvD,MAAO,CACL,QAAS,GACT,MAAO,uBAAuB,WAAc,GAAO,CAAM,GAC3D,EAGF,GAAI,OAAO,IAAY,UAAW,CAChC,GAAI,OAAO,IAAW,UAAW,MAAO,CAAE,QAAS,EAAK,EACxD,MAAO,CACL,QAAS,GACT,MAAO,wBAAwB,WAAc,GAAO,CAAM,GAC5D,EAIF,GAAI,MAAM,QAAQ,CAAO,EAAG,CAC1B,GAAI,CAAC,MAAM,QAAQ,CAAM,EACvB,MAAO,CACL,QAAS,GACT,MAAO,sBAAsB,WAAc,GAAO,CAAM,GAC1D,EAGF,GAAI,EAAQ,SAAW,EAAG,MAAO,CAAE,QAAS,EAAK,EAEjD,IAAM,EAAiB,EAAQ,GAC/B,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,IAAM,EAAS,GAAY,EAAO,GAAI,EAAgB,GAAG,KAAQ,IAAI,EACrE,GAAI,CAAC,EAAO,QAAS,OAAO,EAE9B,MAAO,CAAE,QAAS,EAAK,EAIzB,GAAI,OAAO,IAAY,UAAY,IAAY,KAAM,CACnD,GACE,OAAO,IAAW,UAClB,IAAW,MACX,MAAM,QAAQ,CAAM,EAEpB,MAAO,CACL,QAAS,GACT,MAAO,uBAAuB,WAAc,GAAO,CAAM,GAC3D,EAGF,QAAW,KAAO,OAAO,KAAK,CAAO,EAAG,CACtC,IAAM,EAAU,EAAO,GAAG,KAAQ,IAAQ,EAC1C,GAAI,EAAE,KAAO,GACX,MAAO,CAAE,QAAS,GAAO,MAAO,qBAAqB,IAAW,EAElE,IAAM,EAAS,GACZ,EAAe,GACf,EAAgB,GACjB,CACF,EACA,GAAI,CAAC,EAAO,QAAS,OAAO,EAE9B,MAAO,CAAE,QAAS,EAAK,EAIzB,GAAI,IAAW,EAAS,MAAO,CAAE,QAAS,EAAK,EAC/C,MAAO,CAAE,QAAS,GAAO,MAAO,qBAAqB,IAAQ,EAM/D,SAAS,EAAM,CAAC,EAAoB,CAClC,GAAI,IAAM,KAAM,MAAO,OACvB,GAAI,IAAM,OAAW,MAAO,YAC5B,GAAI,MAAM,QAAQ,CAAC,EAAG,MAAO,QAC7B,OAAO,OAAO,EAOhB,SAAS,EAAW,CAAC,EAAY,EAAS,EAAW,CACnD,GAAI,IAAM,KAAM,MAAO,OACvB,GAAI,IAAM,OAAW,MAAO,YAC5B,GAAI,OAAO,IAAM,SAAU,OAAO,KAAK,UAAU,CAAC,EAClD,GAAI,OAAO,IAAM,SAAU,OAAO,OAAO,CAAC,EAC1C,GAAI,OAAO,IAAM,UAAW,OAAO,OAAO,CAAC,EAC3C,GAAI,MAAM,QAAQ,CAAC,EAAG,CACpB,GAAI,EAAE,SAAW,EAAG,MAAO,KAC3B,GAAI,EAAE,QAAU,EACd,MAAO,IAAI,EAAE,IAAI,CAAC,IAAM,GAAY,EAAG,CAAM,CAAC,EAAE,KAAK,IAAI,KAC3D,MAAO,IAAI,EACR,MAAM,EAAG,CAAC,EACV,IAAI,CAAC,IAAM,GAAY,EAAG,CAAM,CAAC,EACjC,KAAK,IAAI,UAEd,GAAI,OAAO,IAAM,SAAU,CACzB,IAAM,EAAU,OAAO,QAAQ,CAAC,EAChC,GAAI,EAAQ,SAAW,EAAG,MAAO,KAEjC,IAAM,EAAY,CAAC,IACjB,6BAA6B,KAAK,CAAC,EAAI,EAAI,KAAK,UAAU,CAAC,EAG7D,GAAI,EAAQ,QAAU,EAIpB,MAAO,IAHW,EACf,IAAI,EAAE,EAAG,KAAS,GAAG,EAAU,CAAC,MAAM,GAAY,EAAK,CAAM,GAAG,EAChE,KAAK,IAAI,KAKd,IAAM,EAAM,KAAK,OAAO,EAAS,CAAC,EAC5B,EAAW,KAAK,OAAO,CAAM,EAC7B,EAAY,EACf,MAAM,EAAG,CAAC,EACV,IACC,EAAE,EAAG,KAAS,GAAG,IAAM,EAAU,CAAC,MAAM,GAAY,EAAK,EAAS,CAAC,GACrE,EACC,KAAK;AAAA,CAAK,EACP,EAAS,EAAQ,OAAS,EAAI;AAAA,EAAM,OAAW,GACrD,MAAO;AAAA,EAAM,IAAY;AAAA,EAAW,KAEtC,OAAO,OAAO,CAAC,EAOjB,SAAS,EAAa,CAAC,EAAsB,CAE3C,IAAI,EAAS,EAAK,QAAQ,oBAAqB,CAAC,IAAU,CAExD,IAAM,EAAW,EAAM,MAAM;AAAA,CAAI,EAAE,OAAS,EAC5C,MAAO;AAAA,EAAK,OAAO,CAAQ,EAC5B,EAKD,OAFA,EAAS,EAAO,QAAQ,cAAe,EAAE,EAElC,EAYF,SAAS,EAAiB,CAAC,EAAsB,CAEtD,IAAI,EAAS,EAAK,QAAQ,6CAA8C,EAAE,EAc1E,OAbA,EAAS,EAAO,QAAQ,mCAAoC,EAAE,EAG9D,EAAS,EAAO,QAAQ,yBAA0B,EAAE,EACpD,EAAS,EAAO,QAAQ,eAAgB,EAAE,EAI1C,EAAS,EAAO,QACd,uDACA,oDACF,EAEO,EAaF,SAAS,EAAgB,CAAC,EAAsB,CAIrD,IAAI,EAAS,EAAK,QAChB,wFACA,EACF,EAEA,OADA,EAAS,EAAO,QAAQ,8CAA+C,EAAE,EAClE,EAcT,SAAS,EAAwB,CAC/B,EACQ,CACR,GAAI,OAAO,KAAK,CAAe,EAAE,SAAW,EAC1C,MAAO,GAGT,IAAM,EAAkB,CAAC,EAEzB,QAAY,EAAW,KAAe,OAAO,QAAQ,CAAe,EAAG,CAErE,IAAM,EAAY,GAAkB,CAAU,EAE9C,EAAM,KAAK,uBAAuB,GAAW,EAC7C,EAAM,KAAK,CAAS,EAGtB,OAAO,EAAM,KAAK;AAAA,CAAI,EAQxB,SAAS,EAAkB,CACzB,EACgE,CAChE,IAAM,EAAoC,CAAC,EAGrC,EAAU,EAAI,KAAK,EACzB,GAAI,CAAC,EAAQ,WAAW,GAAG,GAAK,CAAC,EAAQ,SAAS,GAAG,EACnD,GAAI,CACF,MAAO,CAAE,QAAa,SAAS,UAAU,GAAK,EAAE,EAAG,UAAS,EAC5D,KAAM,CACN,OAAO,KAMX,IAAI,EAAc,GACd,EAAQ,EACR,EAAI,EAER,MAAO,EAAI,EAAQ,OAAQ,CACzB,IAAM,EAAK,EAAQ,GAEnB,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IACrC,IACA,GAAe,EACf,IACK,QAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAC5C,IACA,GAAe,EACf,IACK,QAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,CAEjD,IAAM,EAAQ,EACd,GAAe,EACf,IACA,MAAO,EAAI,EAAQ,QAAU,EAAQ,KAAO,EAAO,CACjD,GAAI,EAAQ,KAAO,KACjB,GAAe,EAAQ,KAEzB,GAAe,EAAQ,KAEzB,GAAI,EAAI,EAAQ,OACd,GAAe,EAAQ,KAEpB,QAAI,IAAU,GAAK,IAAO,IAAK,CAIpC,IAAM,GAFW,EAAY,MAAM,EAAY,YAAY,GAAG,EAAI,CAAC,EACtC,MAAM,GAAG,EAAE,IAAI,GAAK,IACpB,MAAM,cAAc,EACjD,GAAI,EAAU,CAEZ,IAAI,EAAI,EAAI,EACZ,MAAO,EAAI,EAAQ,QAAU,KAAK,KAAK,EAAQ,EAAE,EAAG,IAGpD,IAAI,EAAS,GACT,EAAW,EACf,MAAO,EAAI,EAAQ,OAAQ,CACzB,IAAM,EAAK,EAAQ,GACnB,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,IACvC,QAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,CAC/C,GAAI,IAAa,EAAG,MACpB,IACK,QAAI,IAAO,KAAO,IAAa,EAAG,MACzC,GAAU,EACV,IAGF,GAAI,CACF,EAAS,EAAS,IAAU,SAAS,UAAU,EAAO,KAAK,GAAG,EAAE,EAChE,KAAM,EAKR,GAAe,IACf,IACA,SAEF,GAAe,EACf,IAEA,QAAe,EACf,IAIJ,GAAI,CACF,MAAO,CAAE,QAAa,SAAS,UAAU,GAAa,EAAE,EAAG,UAAS,EACpE,KAAM,CACN,OAAO,MAmBJ,SAAS,EAAyB,CACvC,EACqB,CACrB,IAAM,EAA6B,CAAC,EAG9B,EAAwB,GAAc,CAAc,EAKpD,EAAY,0DAEd,EACJ,OAAQ,EAAQ,EAAU,KAAK,CAAqB,KAAO,KAAM,CAC/D,IAAM,EAAU,CAAC,CAAC,EAAM,GAClB,EAAW,EAAM,GACjB,EAAY,EAAM,GAClB,EAAe,EAAM,GAGrB,EAAa,EAChB,MAAM,EAAG,EAAM,KAAK,EACpB,MAAM;AAAA,CAAI,EAAE,OAGf,GAAI,IAAiB,KAAM,SAG3B,IAAM,EAAc,EAAsB,MACxC,EAAM,MAAQ,EAAM,GAAG,MACzB,EACM,EAAgB,GAA+B,CAAW,EAChE,GAAI,CAAC,EAAe,SAGpB,IAAM,EAAgB,GAAqB,CAAS,EACpD,GAAI,EAAU,KAAK,GAAK,EAAc,SAAW,EAAG,SAEpD,GAAI,CAEF,IAAM,EAAS,GAAmB,CAAa,EAC/C,GAAI,CAAC,EAAQ,SAEb,IAAM,EAAO,EAAc,IAAI,CAAC,IAAU,SAAS,UAAU,GAAG,EAAE,CAAC,EAEnE,EAAM,KAAK,CACT,WACA,OACA,SAAU,EAAO,QACjB,SACE,OAAO,KAAK,EAAO,QAAQ,EAAE,OAAS,EAAI,EAAO,SAAW,OAC9D,KAAM,EACN,SACF,CAAC,EACD,KAAM,GAKV,OAAO,EAOF,SAAS,EAAW,CACzB,EACA,EACA,EACA,EACA,EAA0C,CAAC,EAC3C,EAAuC,IAAI,IAC7B,CACd,IAAM,EAAwB,CAAC,EAG/B,GAAI,EAAM,SAAW,GAAK,EAAa,SAAW,EAChD,OAAO,EAIT,IAAM,EACJ,EAAe,MAAM,8CAA8C,GAAK,CAAC,EACrE,EACJ,EAAiB,OAAS,GAC1B,EAAiB,KAAK,CAAC,IAAQ,CAC7B,IAAM,EAAQ,EAAI,MAAM,yBAAyB,EACjD,OAAO,GAAS,EAAE,EAAM,KAAM,GAC/B,EAGG,EAAiB,GAAkB,CAAc,EAKjD,EAAe,GAAyB,CAAe,EAGvD,EAAY,EAAM,IAAI,CAAC,IAAM,EAAE,IAAI,EAAE,KAAK;AAAA,CAAI,EAG9C,EAAa,EAChB,IAAI,CAAC,EAAG,IAAM,CAEb,IAAM,EACJ,EAAW,KAAO,EACd,GAAwB,EAAE,KAAM,CAAU,EAC1C,EAAE,KACR,MAAO;AAAA,cACC,MAAM,EAAE;AAAA;AAAA,QAEd;AAAA,kCAC0B;AAAA;AAAA,kCAEA;AAAA;AAAA,IAG7B,EACA,KAAK;AAAA,CAAI,EAIN,EAAmB,EAAa,OAAO,CAAC,IAAS,CAAC,EAAK,OAAO,EAC9D,EAAoB,EAAa,OAAO,CAAC,IAAS,EAAK,OAAO,EAG9D,EAAgB,EACnB,IACC,CAAC,EAAM,IAAM;AAAA,wBACK,MAAM,EAAK;AAAA;AAAA,uBAEZ,EAAK,YAAY,EAAK,KACpC,IAAI,CAAC,IAAM,KAAK,UAAU,CAAC,CAAC,EAC5B,KAAK,IAAI;AAAA,2BACS,KAAK,UAAU,EAAK,QAAQ,KAC/C,EAAK,SACD;AAAA,2BACe,KAAK,UAAU,EAAK,QAAQ;AAAA,kHAE3C;AAAA;AAAA,uCAG2B;AAAA;AAAA,uCAEA,yEAC/B,EAAK;AAAA;AAAA;AAAA,qCAIwB;AAAA;AAAA,GAGjC,EACC,KAAK;AAAA,CAAI,EAGZ,GAAe,EAQf,IAAM,EAAW;AAAA,MAND;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAwEV;AAAA;AAAA;AAAA,QAGA;AAAA,QACA;AAAA;AAAA;AAAA,QAGA;AAAA;AAAA;AAAA,QAGA;AAAA;AAAA;AAAA,QA/Ea;AAAA;AAAA;AAAA,IAuFnB,GAAI,CAEF,IAAM,EAAS,SACb,cACA,WACA,gBACA,CACF,GACQ,YAAa,EAAc,kBAAmB,EACpD,GACA,GACA,EACF,EAGA,QAAW,KAAK,EAAc,CAC5B,IAAM,EAAO,EAAM,EAAE,KAEf,EACJ,GACA,CAAC,EAAE,QACH,EAAE,OACF,kBAAkB,KAAK,EAAE,KAAK,EAChC,EAAQ,KAAK,CACX,YAAa,EAAK,YAClB,OAAQ,EAAgB,GAAO,EAAE,OACjC,MAAO,EAAgB,OAAY,EAAE,MACrC,KAAM,EAAK,IACb,CAAC,EAIH,QAAW,KAAK,EAAgB,CAC9B,IAAM,EAAO,EAAiB,EAAE,KAE1B,EACJ,GACA,CAAC,EAAE,QACH,EAAE,OACF,kBAAkB,KAAK,EAAE,KAAK,EAChC,EAAQ,KAAK,CACX,YAAa,GAAG,EAAK,6BACrB,OAAQ,EAAgB,GAAO,EAAE,OACjC,MAAO,EAAgB,OAAY,EAAE,MACrC,gBAAiB,GACjB,KAAM,EAAK,IACb,CAAC,GAEH,MAAO,EAAQ,CAGf,IAAM,EAAkB,GAAwB,aAAa,eAE7D,QAAW,KAAQ,EACjB,EAAQ,KAAK,CACX,YAAa,EAAK,YAClB,OAAQ,EACR,MAAO,EACH,OACA,4BAA4B,EAAE,UAClC,KAAM,EAAK,IACb,CAAC,EAEH,QAAW,KAAQ,EACjB,EAAQ,KAAK,CACX,YAAa,GAAG,EAAK,6BACrB,OAAQ,EACR,MAAO,EACH,OACA,4BAA4B,EAAE,UAClC,gBAAiB,GACjB,KAAM,EAAK,IACb,CAAC,EAKL,QAAW,KAAQ,EACjB,EAAQ,KAAK,CACX,YAAa,GAAG,EAAK,6BACrB,OAAQ,GACR,gBAAiB,GACjB,KAAM,EAAK,IACb,CAAC,EAGH,OAAO,EAwQF,SAAS,EAA8B,CAAC,EAA+B,CAC5E,IAAI,EAAS,GACT,EAAQ,EACR,EAAa,GAEjB,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,IAAM,EAAO,EAAO,GAEpB,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,CAChD,GAAI,IAAS,KAAO,IAAU,GAAK,EAEjC,MAEF,IACA,GAAU,EACV,EAAa,GACR,QAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAClD,IACA,GAAU,EACL,QAAI,CAAC,KAAK,KAAK,CAAI,EACxB,GAAU,EACV,EAAa,GAEb,QAAU,EAKd,OADgB,EAAO,KAAK,GACV,KAMpB,SAAS,EAAoB,CAAC,EAA6B,CACzD,GAAI,CAAC,EAAU,KAAK,EAAG,MAAO,CAAC,EAE/B,IAAM,EAAqB,CAAC,EACtB,EAAS,GAAY,CAAS,EAEpC,QAAW,KAAS,EAAQ,CAC1B,IAAM,EAAU,EAAM,KAAK,EAGrB,EAAY,EAAQ,MAAM,iCAAiC,EACjE,GAAI,EAAW,CACb,GAAI,CACF,IAAM,EAAU,SAAS,UAAU,EAAU,IAAI,EAAE,EACnD,GAAI,MAAM,QAAQ,CAAG,EACnB,QAAW,KAAM,EACf,EAAS,KAAK,KAAK,UAAU,CAAE,CAAC,EAGpC,KAAM,EAGR,SAIF,GAAI,EAAQ,WAAW,KAAK,EAAG,SAI/B,IAAM,EAAQ,EAAQ,MAAM,+CAA+C,EAC3E,GAAI,EACF,EAAS,KAAK,EAAM,GAAG,KAAK,CAAC,EAG7B,WAAO,CAAC,EAIZ,OAAO,EAMT,SAAS,EAAW,CAAC,EAA6B,CAChD,IAAM,EAAmB,CAAC,EACtB,EAAU,GACV,EAAQ,EAEZ,QAAW,KAAQ,EAAW,CAC5B,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,IAC7C,QAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,IAClD,QAAI,IAAS,KAAO,IAAU,EAAG,CACpC,EAAO,KAAK,EAAQ,KAAK,CAAC,EAC1B,EAAU,GACV,SAEF,GAAW,EAGb,GAAI,EAAQ,KAAK,EAAG,EAAO,KAAK,EAAQ,KAAK,CAAC,EAC9C,OAAO,EClnCT,yBAQA,IAAM,GAAO,CACX,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,QAAS,IACT,UAAW,IACX,KAAM,EACR,EAGM,GAAU,CACd,OAAQ,EACR,KAAM,EACN,OAAQ,EACR,SAAU,EACV,MAAO,EACP,OAAQ,EACR,OAAQ,EACR,OAAQ,EACR,MAAO,EACP,QAAS,EACT,KAAM,GACN,KAAM,EACR,EAGM,EAAK,CAET,YAAa,EACb,IAAK,EACL,MAAO,EACP,KAAM,EACN,GAAI,EACJ,KAAM,EACN,IAAK,GACL,GAAI,GACJ,MAAO,GACP,SAAU,GACV,OAAQ,GACR,KAAM,GACN,cAAe,GAGf,KAAM,GACN,OAAQ,GAGR,UAAW,GACX,UAAW,GACX,UAAW,GACX,WAAY,GACZ,WAAY,GAGZ,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,YAAa,GACb,YAAa,GACb,aAAc,GACd,aAAc,GACd,UAAW,GACX,UAAW,GACX,UAAW,GACX,UAAW,GACX,WAAY,GACZ,YAAa,GACb,YAAa,GACb,YAAa,GAGb,UAAW,GACX,UAAW,GACX,UAAW,GACX,UAAW,GAGX,QAAS,GACT,OAAQ,GACR,OAAQ,GACR,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GAGV,QAAS,GACT,OAAQ,GACR,OAAQ,GACR,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GAGV,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,OAAQ,GAGR,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IAGR,QAAS,IACT,QAAS,IACT,WAAY,IACZ,QAAS,IACT,QAAS,IACT,QAAS,IACT,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,IACT,OAAQ,IACR,QAAS,IACT,QAAS,IACT,UAAW,IACX,UAAW,IACX,SAAU,IACV,SAAU,IAGV,QAAS,IACT,QAAS,IACT,QAAS,IACT,UAAW,IAGX,QAAS,IACT,QAAS,IACT,SAAU,IACV,UAAW,IACX,UAAW,IACX,YAAa,IACb,SAAU,IACV,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,aAAc,IAGd,QAAS,IACT,QAAS,IACT,SAAU,IACV,UAAW,IACX,UAAW,IACX,YAAa,IACb,SAAU,IACV,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,aAAc,IAGd,aAAc,IACd,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,iBAAkB,IAClB,iBAAkB,IAClB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,eAAgB,IAChB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,gBAAiB,IACjB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IAGrB,cAAe,IACf,eAAgB,GAClB,EAGM,GAAiC,OAAO,YAC5C,OAAO,QAAQ,CAAE,EAAE,IAAI,EAAE,EAAM,KAAU,CAAC,EAAM,EAAK,QAAQ,KAAM,GAAG,CAAC,CAAC,CAC1E,EAOM,GAAc,IAGd,GAAS,CAEb,UAAW,EACX,WAAY,GAGZ,WAAY,GAGZ,YAAa,GAGb,mBAAoB,GACpB,mBAAoB,GAGpB,UAAW,IACX,WAAY,IACZ,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,GACb,EAGM,GAAqC,OAAO,YAChD,OAAO,QAAQ,EAAM,EAAE,IAAI,EAAE,EAAM,KAAU,CAAC,EAAM,EAAK,QAAQ,KAAM,GAAG,CAAC,CAAC,CAC9E,EAGA,SAAS,EAAU,CAAC,EAAyB,CAC3C,MAAO,CAAC,GAAa,GAAG,EAAc,CAAK,CAAC,EAI9C,SAAS,EAAgB,CACvB,EACA,EACA,EACU,CACV,MAAO,CACL,GACA,GAAG,EAAc,CAAK,EACtB,GAAG,EAAc,CAAK,EACtB,GAAG,EAAc,CAAM,CACzB,EAYF,SAAS,CAAa,CAAC,EAAyB,CAC9C,IAAM,EAAmB,CAAC,EAC1B,EAAG,CACD,IAAI,EAAO,EAAQ,IAEnB,GADA,KAAW,EACP,IAAU,EAAG,GAAQ,IACzB,EAAO,KAAK,CAAI,QACT,IAAU,GACnB,OAAO,EAGT,SAAS,EAAa,CAAC,EAAyB,CAC9C,IAAM,EAAmB,CAAC,EACtB,EAAO,GACX,MAAO,EAAM,CACX,IAAI,EAAO,EAAQ,IAEnB,GADA,IAAU,EAEP,IAAU,IAAM,EAAO,MAAU,GACjC,IAAU,KAAO,EAAO,MAAU,EAEnC,EAAO,GAEP,QAAQ,IAEV,EAAO,KAAK,CAAI,EAElB,OAAO,EAGT,SAAS,EAAS,CAAC,EAAyB,CAC1C,IAAM,EAAS,IAAI,YAAY,CAAC,EAEhC,OADA,IAAI,aAAa,CAAM,EAAE,GAAK,EACvB,CAAC,GAAG,IAAI,WAAW,CAAM,CAAC,EAGnC,SAAS,EAAS,CAAC,EAAyB,CAC1C,IAAM,EAAS,IAAI,YAAY,CAAC,EAEhC,OADA,IAAI,aAAa,CAAM,EAAE,GAAK,EACvB,CAAC,GAAG,IAAI,WAAW,CAAM,CAAC,EAGnC,SAAS,EAAY,CAAC,EAAqB,CACzC,IAAM,EAAQ,IAAI,YAAY,EAAE,OAAO,CAAC,EACxC,MAAO,CAAC,GAAG,EAAc,EAAM,MAAM,EAAG,GAAG,CAAK,EAGlD,SAAS,EAAa,CAAC,EAAY,EAA8B,CAC/D,MAAO,CAAC,EAAI,GAAG,EAAc,EAAS,MAAM,EAAG,GAAG,CAAQ,EAY5D,SAAS,EAAa,CAAC,EAAiB,EAAkC,CACxE,IAAI,EAAS,EACT,EAAQ,EACR,EAAI,EACR,MAAO,EAAI,EAAM,OAAQ,CACvB,IAAM,EAAO,EAAM,GAGnB,GAFA,IAAW,EAAO,MAAS,EAC3B,KACK,EAAO,OAAU,EAAG,MACzB,GAAS,EAEX,MAAO,CAAC,EAAQ,EAAI,CAAM,EAI5B,SAAS,EAAS,CAAC,EAAiB,EAAwB,CAC1D,IAAM,EAAS,IAAI,YAAY,CAAC,EAC1B,EAAO,IAAI,WAAW,CAAM,EAClC,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,EAAK,GAAK,EAAM,EAAS,GACrD,OAAO,IAAI,aAAa,CAAM,EAAE,GAIlC,SAAS,EAAW,CAClB,EACA,EACA,EACQ,CACR,IAAM,EAAkB,CAAC,EACrB,EAAS,EACP,EAAM,IAAM,KAAK,OAAO,CAAM,EAG9B,EAAW,EACd,IAAI,CAAC,EAAG,IAAM,WAAW,EAAE,QAAQ,EAAE,OAAO,EAC5C,KAAK,GAAG,EACL,EAAW,EACd,IAAI,CAAC,EAAG,IAAM,YAAY,EAAO,OAAS,KAAK,IAAI,EACnD,KAAK,GAAG,EAEX,GADA,EAAM,KAAK,4BAA4B,gBAAuB,EAC1D,EAAU,EAAM,KAAK,KAAK,GAAU,EAExC,IAAI,EAAI,EACR,MAAO,EAAI,EAAK,OAAQ,CACtB,IAAM,EAAK,EAAK,GACV,EAAO,GAAO,IAAO,aAAa,EAAG,SAAS,EAAE,KAItD,GAHA,IAGI,IAAO,EAAG,WAAa,IAAO,EAAG,WAAa,IAAO,EAAG,UAAW,CACrE,IAAO,EAAK,GAAO,GAAc,EAAM,CAAC,EACxC,GAAK,EACL,IAAM,EACJ,EAAM,EAAO,OAAS,IAAI,EAAO,GAAK,OAAS,KAAK,IACtD,EAAM,KAAK,GAAG,EAAI,IAAI,KAAQ,GAAW,EACpC,QAAI,IAAO,EAAG,IAAM,IAAO,EAAG,MAAO,CAC1C,IAAO,EAAO,GAAO,GAAc,EAAM,CAAC,EAC1C,GAAK,EACL,EAAM,KAAK,GAAG,EAAI,IAAI,KAAQ,GAAO,EAChC,QAAI,IAAO,EAAG,UAAW,CAC9B,IAAO,EAAK,GAAO,GAAc,EAAM,CAAC,EACxC,GAAK,EACL,EAAM,KAAK,GAAG,EAAI,cAAc,GAAK,EAChC,QAAI,IAAO,EAAG,UAAW,CAC9B,IAAM,EAAS,IAAI,YAAY,CAAC,EAC1B,EAAO,IAAI,WAAW,CAAM,EAClC,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,EAAK,GAAK,EAAK,EAAI,GAC/C,IAAM,EAAM,IAAI,aAAa,CAAM,EAAE,GACrC,GAAK,EACL,EAAM,KAAK,GAAG,EAAI,cAAc,GAAK,EAChC,QAAI,IAAO,EAAG,UAAW,CAC9B,IAAM,EAAM,GAAU,EAAM,CAAC,EAC7B,GAAK,EACL,EAAM,KAAK,GAAG,EAAI,cAAc,GAAK,EAChC,QAAI,IAAO,EAAG,OAAS,IAAO,EAAG,KAAM,CAC5C,IAAM,EAAY,EAAK,GACvB,IACA,EAAM,KACJ,GAAG,EAAI,IAAI,IACT,IAAc,GAAK,KACf,GACA,YAAY,IAAc,GAAK,IAAM,MAAQ,UAErD,EACA,IACK,QAAI,IAAO,EAAG,GAAI,CACvB,IAAM,EAAY,EAAK,GACvB,IACA,EAAM,KACJ,GAAG,EAAI,MACL,IAAc,GAAK,KACf,GACA,YAAY,IAAc,GAAK,IAAM,MAAQ,UAErD,EACA,IACK,QAAI,IAAO,EAAG,KACnB,IACA,EAAM,KAAK,GAAG,EAAI,OAAO,EACzB,IACK,QAAI,IAAO,EAAG,IACnB,EAAS,KAAK,IAAI,EAAG,EAAS,CAAC,EAC/B,EAAM,KAAK,GAAG,EAAI,MAAM,EACnB,QACL,IAAO,EAAG,UACV,IAAO,EAAG,WACV,IAAO,EAAG,UACV,IAAO,EAAG,WACV,IAAO,EAAG,UACV,IAAO,EAAG,UACV,CACA,IAAO,EAAO,GAAQ,GAAc,EAAM,CAAC,EAC3C,GAAK,EACL,IAAO,EAAQ,GAAQ,GAAc,EAAM,CAAC,EAC5C,GAAK,EACL,EAAM,KAAK,GAAG,EAAI,IAAI,IAAO,EAAS,WAAW,IAAW,IAAI,EAC3D,QAAI,IAAO,GAAa,CAE7B,IAAO,EAAO,GAAU,GAAc,EAAM,CAAC,EAC7C,GAAK,EACL,IAAM,EACJ,GAAW,IAAU,kBAAkB,EAAM,SAAS,EAAE,KAC1D,GAAI,IAAU,GAAO,WAAa,IAAU,GAAO,WAAY,CAC7D,IAAO,EAAQ,GAAQ,GAAc,EAAM,CAAC,EAC5C,GAAK,EACL,IAAO,EAAQ,GAAQ,GAAc,EAAM,CAAC,EAC5C,GAAK,EACL,EAAM,KAAK,GAAG,EAAI,IAAI,IAAW,EAAS,WAAW,IAAW,IAAI,EAC/D,QAAI,IAAU,GAAO,WAAY,CACtC,IAAM,EAAQ,EAAK,MAAM,EAAG,EAAI,EAAE,EAClC,GAAK,GACL,EAAM,KACJ,GAAG,EAAI,eAAe,EACnB,IAAI,CAAC,IAAM,KAAO,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EACjD,KAAK,GAAG,GACb,EACK,QACL,IAAU,GAAO,oBACjB,IAAU,GAAO,mBACjB,CACA,IAAM,EAAO,EAAK,GAClB,IACA,EAAM,KAAK,GAAG,EAAI,IAAI,KAAY,GAAM,EAExC,OAAM,KAAK,GAAG,EAAI,IAAI,GAAU,EAGlC,OAAM,KAAK,GAAG,EAAI,IAAI,GAAM,EAKhC,OADA,EAAM,KAAK,GAAG,EACP,EAAM,KAAK;AAAA,CAAI,EAkBxB,IAAM,GAA+C,CACnD,UAAW,CACT,YAAa,MACb,gBAAiB,EACjB,OAAQ,EAAG,YACX,QAAS,EAAG,UACd,EACA,WAAY,CACV,YAAa,MACb,gBAAiB,EACjB,OAAQ,EAAG,YACX,QAAS,EAAG,UACd,EACA,kBAAmB,CACjB,YAAa,MACb,gBAAiB,EACjB,OAAQ,EAAG,YACX,QAAS,EAAG,UACd,EACA,WAAY,CACV,YAAa,MACb,gBAAiB,EACjB,OAAQ,EAAG,aACX,QAAS,EAAG,WACd,EACA,YAAa,CACX,YAAa,MACb,gBAAiB,EACjB,OAAQ,EAAG,aACX,QAAS,EAAG,WACd,EACA,WAAY,CACV,YAAa,MACb,gBAAiB,EACjB,OAAQ,EAAG,SACX,QAAS,EAAG,SACd,EACA,YAAa,CACX,YAAa,MACb,gBAAiB,EACjB,OAAQ,EAAG,SACX,QAAS,EAAG,SACd,EACA,aAAc,CACZ,YAAa,MACb,gBAAiB,EACjB,OAAQ,EAAG,SACX,QAAS,EAAG,SACd,EACA,aAAc,CACZ,YAAa,MACb,gBAAiB,EACjB,OAAQ,EAAG,SACX,QAAS,EAAG,SACd,CACF,EAyCA,SAAS,EAAa,CAAC,EAAsC,CAC3D,IAAM,EAAsB,CAC1B,SACA,OAAQ,IAAI,IACZ,eAAgB,EAAO,OACvB,WAAY,CAAC,EACb,SAAU,CAAC,EACX,OAAQ,CAAC,EACT,UAAW,EACX,iBAAkB,IAAI,IACtB,YAAa,GACb,UAAW,GACX,IAAK,CAAC,EACN,UAAW,CACb,EAOA,OAJA,EAAO,QAAQ,CAAC,EAAG,IAAM,CACvB,EAAI,OAAO,IAAI,EAAE,KAAM,CAAE,MAAO,EAAG,KAAM,EAAE,IAAK,CAAC,EAClD,EAEM,EAGT,SAAS,EAAY,CACnB,EACA,EACA,EACQ,CACR,GAAI,EAAI,OAAO,IAAI,CAAI,EAErB,OADA,EAAI,OAAO,KAAK,gCAAgC,GAAM,EAC/C,EAAI,OAAO,IAAI,CAAI,EAAG,MAE/B,IAAM,EAAQ,EAAI,iBAGlB,OAFA,EAAI,OAAO,IAAI,EAAM,CAAE,QAAO,MAAK,CAAC,EACpC,EAAI,WAAW,KAAK,CAAI,EACjB,EAGT,SAAS,EAAQ,CACf,EACA,EACoD,CACpD,OAAO,EAAI,OAAO,IAAI,CAAI,EAQ5B,SAAS,EAAgB,CACvB,EACA,EACU,CACV,OAAQ,EAAK,UACN,sBAAuB,CAE1B,IAAM,EAAQ,EAAmC,WAGjD,MAAO,CAAC,GAFS,EAAkB,EAAM,CAAG,EAEvB,EAAG,IAAI,CAC9B,KAEK,kBAAmB,CACtB,IAAM,EAAM,EAEZ,GADA,EAAI,UAAY,GACZ,CAAC,EAAI,SAEP,MAAO,CAAC,EAAG,MAAM,EAEnB,IAAM,EAAO,EAAkB,EAAI,SAA8B,CAAG,EAE9D,EAAU,EAAc,EAAI,SAA8B,CAAG,EACnE,GAAI,IAAY,MACd,EAAK,KAAK,EAAG,iBAAiB,EACzB,QAAI,IAAY,MACrB,EAAK,KAAK,EAAG,eAAe,EAG9B,OADA,EAAK,KAAK,EAAG,MAAM,EACZ,CACT,KAEK,sBAAuB,CAC1B,IAAM,EAAO,EACP,EAAiB,CAAC,EACxB,QAAW,KAAc,EAAK,aAAc,CAC1C,GAAI,EAAW,GAAG,OAAS,aAAc,CACvC,EAAI,OAAO,KAAK,4CAA4C,EAC5D,SAEF,IAAM,EAAQ,EAAW,GAAwB,KAE7C,EAAsB,MAC1B,GAAI,EAAW,KACb,EAAO,EAAc,EAAW,KAA0B,CAAG,EAE/D,IAAM,EAAQ,GAAa,EAAK,EAAM,CAAI,EAC1C,GAAI,EAAW,KACb,EAAK,KACH,GAAG,EAAkB,EAAW,KAA0B,CAAG,CAC/D,EACA,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,CAAK,CAAC,EAGnD,OAAO,CACT,KAEK,eAEH,OAAO,GADS,EACe,CAAG,MAG/B,cAEH,OAAO,GADQ,EACU,CAAG,MAGzB,iBAAkB,CACrB,IAAM,EAAQ,EACR,EAAiB,CAAC,EACxB,QAAW,KAAQ,EAAM,KACvB,EAAK,KAAK,GAAG,GAAiB,EAAM,CAAG,CAAC,EAE1C,OAAO,CACT,SAIE,OADA,EAAI,OAAO,KAAK,+BAA+B,EAAK,MAAM,EACnD,CAAC,GAKd,SAAS,EAAc,CACrB,EACA,EACU,CACV,IAAM,EAAiB,CAAC,EAGxB,GAAI,EAAK,KACP,GAAI,EAAK,KAAK,OAAS,sBACrB,EAAK,KAAK,GAAG,GAAiB,EAAK,KAAM,CAAG,CAAC,EAE7C,OAAK,KAAK,GAAG,EAAkB,EAAK,KAA0B,CAAG,CAAC,EAiBtE,GAJA,EAAK,KAAK,EAAG,MAAO,GAAK,IAAI,EAC7B,EAAK,KAAK,EAAG,KAAM,GAAK,IAAI,EAGxB,EAAK,KACP,EAAK,KAAK,GAAG,EAAkB,EAAK,KAAM,CAAG,CAAC,EAC9C,EAAK,KAAK,EAAG,OAAO,EACpB,EAAK,KAAK,EAAG,MAAO,CAAC,EAKvB,GADA,EAAI,YACA,EAAK,KACP,EAAK,KAAK,GAAG,GAAiB,EAAK,KAAM,CAAG,CAAC,EAK/C,GAHA,EAAI,YAGA,EAAK,OACP,EAAK,KAAK,GAAG,EAAkB,EAAK,OAAQ,CAAG,CAAC,EAChD,EAAK,KAAK,EAAG,IAAI,EASnB,OALA,EAAK,KAAK,EAAG,GAAI,CAAC,EAElB,EAAK,KAAK,EAAG,GAAG,EAChB,EAAK,KAAK,EAAG,GAAG,EAET,EAIT,SAAS,EAAS,CAAC,EAAyB,EAA+B,CACzE,IAAM,EAAiB,CAAC,EAYxB,GATA,EAAK,KAAK,GAAG,EAAkB,EAAK,KAAM,CAAG,CAAC,EAG9C,EAAK,KAAK,EAAG,GAAI,GAAK,IAAI,EAG1B,EAAK,KAAK,GAAG,GAAiB,EAAK,WAAY,CAAG,CAAC,EAG/C,EAAK,UACP,EAAK,KAAK,EAAG,IAAI,EACjB,EAAK,KAAK,GAAG,GAAiB,EAAK,UAAW,CAAG,CAAC,EAKpD,OAFA,EAAK,KAAK,EAAG,GAAG,EAET,EAIT,SAAS,CAAa,CACpB,EACA,EACe,CACf,OAAQ,EAAK,UACN,UAAW,CACd,IAAM,EAAM,EACZ,GAAI,OAAO,EAAI,QAAU,SAAU,CAGjC,GAAI,EAAI,MAAQ,EAAI,IAAI,SAAS,GAAG,GAAK,EAAI,IAAI,SAAS,GAAG,GAC3D,MAAO,MAGT,GACE,OAAO,UAAU,EAAI,KAAK,GAC1B,EAAI,OAAS,aACb,EAAI,OAAS,WAEb,MAAO,MAET,MAAO,MAET,MAAO,KACT,KAEK,aAEH,OADc,GAAS,EAAM,EAA0B,IAAI,GAC7C,MAAQ,UAGnB,uBACA,uBAAwB,CAC3B,IAAM,EAAU,EAEhB,GACE,CAAC,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,MAAO,KAAK,EAAE,SAC/C,EAAQ,QACV,EAEA,MAAO,MAGT,GAAI,CAAC,IAAK,IAAK,IAAK,KAAM,KAAM,KAAK,EAAE,SAAS,EAAQ,QAAQ,EAC9D,MAAO,MAGT,IAAM,EAAW,EAAc,EAAQ,KAA0B,CAAG,EAC9D,EAAY,EAAc,EAAQ,MAA2B,CAAG,EAEtE,GAAI,IAAa,QAAU,IAAc,OAAQ,MAAO,OAExD,GAAI,IAAa,OAAS,IAAc,MAAO,MAAO,MACtD,GAAI,IAAa,OAAS,IAAc,MAAO,MAAO,MACtD,MAAO,KACT,KAEK,kBAAmB,CACtB,IAAM,EAAQ,EACd,GAAI,EAAM,WAAa,IACrB,MAAO,MAGT,OAAO,EAAc,EAAM,SAA8B,CAAG,CAC9D,KAEK,mBAAoB,CAEvB,IAAM,EAAS,EACf,GAAI,EAAO,OAAO,OAAS,cAEzB,GADc,GAAS,EAAM,EAAO,OAA4B,IAAI,EACzD,CACT,IAAM,EAAQ,EAAI,OAAO,KACvB,CAAC,IAAM,EAAE,OAAU,EAAO,OAA4B,IACxD,EACA,GAAI,GAAO,UAAW,CACpB,IAAM,EAAY,GAAa,EAAM,WACrC,GAAI,EAAW,OAAO,EAAU,cAItC,MAAO,KACT,KAEK,iBAAkB,CACrB,IAAM,EAAO,EACb,GAAI,EAAK,OAAO,OAAS,mBAAoB,CAC3C,IAAM,EAAS,EAAK,OACpB,GACE,EAAO,OAAO,OAAS,cACtB,EAAO,OAA4B,OAAS,OAG7C,MAAO,MAIX,GAAI,EAAK,OAAO,OAAS,aAAc,CACrC,IAAM,EAAQ,EAAK,OAA4B,KAC/C,GAAI,IAAS,qBAAsB,MAAO,MAC1C,GAAI,EAAK,WAAW,QAAQ,GAAK,IAAS,YAAa,MAAO,OAEhE,MAAO,KACT,SAGE,MAAO,OAKb,SAAS,CAAiB,CACxB,EACA,EACU,CACV,OAAQ,EAAK,UACN,UAAW,CACd,IAAM,EAAM,EACZ,GAAI,OAAO,EAAI,QAAU,SAAU,CACjC,IAAM,EAAO,EAAc,EAAM,CAAG,EACpC,GAAI,IAAS,MACX,MAAO,CAAC,EAAG,UAAW,GAAG,GAAc,EAAI,MAAQ,CAAC,CAAC,EAChD,QAAI,IAAS,MAClB,MAAO,CAAC,EAAG,UAAW,GAAG,GAAU,EAAI,KAAK,CAAC,EAE7C,WAAO,CAAC,EAAG,UAAW,GAAG,GAAU,EAAI,KAAK,CAAC,EAIjD,OADA,EAAI,OAAO,KAAK,6BAA6B,OAAO,EAAI,OAAO,EACxD,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,CACvC,KAEK,aAAc,CACjB,IAAM,EAAQ,EAA0B,KAClC,EAAQ,GAAS,EAAK,CAAI,EAChC,GAAI,EACF,MAAO,CAAC,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EAGrD,OADA,EAAI,OAAO,KAAK,uBAAuB,GAAM,EACtC,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,CACvC,KAEK,mBAEH,OAAO,GADK,EACkB,CAAG,MAG9B,kBAEH,OAAO,GADO,EACiB,CAAG,MAG/B,uBAEH,OAAO,GADQ,EACkB,CAAG,MAGjC,mBAEH,OAAO,GADQ,EACc,CAAG,MAG7B,mBAEH,OAAO,GADQ,EACmB,CAAG,MAGlC,iBAEH,OAAO,GADM,EACY,CAAG,MAGzB,qBAAsB,CACzB,IAAM,EAAM,EACN,EAAiB,CAAC,EACxB,QAAS,EAAI,EAAG,EAAI,EAAI,YAAY,OAAQ,IAG1C,GAFA,EAAK,KAAK,GAAG,EAAkB,EAAI,YAAY,GAAI,CAAG,CAAC,EAEnD,EAAI,EAAI,YAAY,OAAS,EAC/B,EAAK,KAAK,EAAG,IAAI,EAGrB,OAAO,CACT,SAIE,OADA,EAAI,OAAO,KAAK,gCAAgC,EAAK,MAAM,EACpD,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,GAK3C,SAAS,EAAiB,CACxB,EACA,EACU,CACV,IAAM,EAAO,EAAkB,EAAK,KAA0B,CAAG,EAC3D,EAAQ,EAAkB,EAAK,MAA2B,CAAG,EAC7D,EAAa,EAAc,EAAM,CAAG,EAGpC,EAAW,EAAc,EAAK,KAA0B,CAAG,EAC3D,EAAY,EAAc,EAAK,MAA2B,CAAG,EAG7D,EAAe,CACnB,IACA,IACA,KACA,KACA,KACA,MACA,KACA,KACF,EAAE,SAAS,EAAK,QAAQ,EAIpB,EACJ,GAAI,IAAa,OAAS,IAAc,MACtC,EAAS,MACJ,QAAI,IAAa,OAAS,IAAc,MAC7C,EAAS,MAET,OAAS,MAIX,GAAI,CAAC,GAAgB,IAAe,MAClC,EAAS,MAGX,IAAI,EAAW,EACX,EAAY,EAGhB,GAAI,IAAW,MAAO,CACpB,GAAI,IAAa,MACf,EAAW,CAAC,GAAG,EAAM,EAAG,iBAAiB,EACpC,QAAI,IAAa,MACtB,EAAW,CAAC,GAAG,EAAM,EAAG,eAAe,EAEzC,GAAI,IAAc,MAChB,EAAY,CAAC,GAAG,EAAO,EAAG,iBAAiB,EACtC,QAAI,IAAc,MACvB,EAAY,CAAC,GAAG,EAAO,EAAG,eAAe,EAEtC,QAAI,IAAW,MAAO,CAC3B,GAAI,IAAa,MACf,EAAW,CAAC,GAAG,EAAM,EAAG,iBAAiB,EAE3C,GAAI,IAAc,MAChB,EAAY,CAAC,GAAG,EAAO,EAAG,iBAAiB,EA0B/C,IAAM,EAtBgD,CACpD,IAAK,CAAE,IAAK,EAAG,QAAS,IAAK,EAAG,QAAS,IAAK,EAAG,OAAQ,EACzD,IAAK,CAAE,IAAK,EAAG,QAAS,IAAK,EAAG,QAAS,IAAK,EAAG,OAAQ,EACzD,IAAK,CAAE,IAAK,EAAG,QAAS,IAAK,EAAG,QAAS,IAAK,EAAG,OAAQ,EACzD,IAAK,CAAE,IAAK,EAAG,UAAW,IAAK,EAAG,QAAS,IAAK,EAAG,OAAQ,EAC3D,IAAK,CAAE,IAAK,EAAG,SAAU,EACzB,IAAK,CAAE,IAAK,EAAG,SAAU,IAAK,EAAG,OAAQ,IAAK,EAAG,MAAO,EACxD,IAAK,CAAE,IAAK,EAAG,SAAU,IAAK,EAAG,OAAQ,IAAK,EAAG,MAAO,EACxD,KAAM,CAAE,IAAK,EAAG,SAAU,IAAK,EAAG,OAAQ,IAAK,EAAG,MAAO,EACzD,KAAM,CAAE,IAAK,EAAG,SAAU,IAAK,EAAG,OAAQ,IAAK,EAAG,MAAO,EACzD,KAAM,CAAE,IAAK,EAAG,OAAQ,IAAK,EAAG,OAAQ,IAAK,EAAG,MAAO,EACvD,MAAO,CAAE,IAAK,EAAG,OAAQ,IAAK,EAAG,OAAQ,IAAK,EAAG,MAAO,EACxD,KAAM,CAAE,IAAK,EAAG,OAAQ,IAAK,EAAG,OAAQ,IAAK,EAAG,MAAO,EACvD,MAAO,CAAE,IAAK,EAAG,OAAQ,IAAK,EAAG,OAAQ,IAAK,EAAG,MAAO,EACxD,IAAK,CAAE,IAAK,EAAG,MAAO,EACtB,IAAK,CAAE,IAAK,EAAG,OAAQ,EACvB,IAAK,CAAE,IAAK,EAAG,OAAQ,EACvB,KAAM,CAAE,IAAK,EAAG,OAAQ,EACxB,KAAM,CAAE,IAAK,EAAG,SAAU,EAC1B,MAAO,CAAE,IAAK,EAAG,SAAU,CAC7B,EAEkB,EAAK,UACvB,GAAI,CAAC,EAEH,OADA,EAAI,OAAO,KAAK,yBAAyB,EAAK,UAAU,EACjD,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,EAGvC,IAAM,EAAS,EAAI,IAAW,EAAI,KAAO,EAAI,IAC7C,GAAI,IAAW,OAIb,OAHA,EAAI,OAAO,KACT,YAAY,EAAK,mCAAmC,GACtD,EACO,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,EAGvC,MAAO,CAAC,GAAG,EAAU,GAAG,EAAW,CAAM,EAI3C,SAAS,EAAgB,CACvB,EACA,EACU,CACV,IAAM,EAAM,EAAkB,EAAK,SAA8B,CAAG,EAC9D,EAAO,EAAc,EAAK,SAA8B,CAAG,EAEjE,OAAQ,EAAK,cACN,IACH,GAAI,IAAS,MAEX,MAAO,CAAC,EAAG,UAAW,EAAG,GAAG,EAAK,EAAG,OAAO,EACtC,QAAI,IAAS,MAClB,MAAO,CAAC,GAAG,EAAK,EAAG,OAAO,EAE1B,WAAO,CAAC,GAAG,EAAK,EAAG,OAAO,MAGzB,IAEH,MAAO,CAAC,GAAG,EAAK,EAAG,OAAO,MAEvB,IAEH,MAAO,CAAC,GAAG,EAAK,EAAG,UAAW,GAAG,GAAc,EAAE,EAAG,EAAG,OAAO,UAI9D,OADA,EAAI,OAAO,KAAK,+BAA+B,EAAK,UAAU,EACvD,GAKb,SAAS,EAAiB,CACxB,EACA,EACU,CAEV,GAAI,EAAK,KAAK,OAAS,mBACrB,OAAO,GACL,EAAK,KACL,EAAK,MACL,EAAK,SACL,CACF,EAIF,GAAI,EAAK,KAAK,OAAS,aAErB,OADA,EAAI,OAAO,KAAK,uDAAuD,EAChE,CAAC,EAGV,IAAM,EAAQ,EAAK,KAA0B,KACvC,EAAQ,GAAS,EAAK,CAAI,EAChC,GAAI,CAAC,EAEH,OADA,EAAI,OAAO,KAAK,qBAAqB,GAAM,EACpC,CAAC,EAGV,IAAM,EAAiB,CAAC,EAExB,GAAI,EAAK,WAAa,IAAK,CACzB,EAAK,KAAK,GAAG,EAAkB,EAAK,MAA2B,CAAG,CAAC,EAEnE,IAAM,EAAU,EAAc,EAAK,MAA2B,CAAG,EACjE,GAAI,EAAM,OAAS,OAAS,IAAY,MACtC,EAAK,KAAK,EAAG,iBAAiB,EACzB,QAAI,EAAM,OAAS,OAAS,IAAY,MAC7C,EAAK,KAAK,EAAG,eAAe,EACvB,QAAI,EAAM,OAAS,OAAS,IAAY,MAC7C,EAAK,KAAK,EAAG,eAAe,EACvB,QAAI,EAAM,OAAS,OAAS,IAAY,MAC7C,EAAK,KAAK,EAAG,eAAe,EACvB,QAAI,EAAM,OAAS,OAAS,IAAY,MAC7C,EAAK,KAAK,EAAG,iBAAiB,EACzB,QAAI,EAAM,OAAS,OAAS,IAAY,MAC7C,EAAK,KAAK,EAAG,cAAc,EAExB,KAEL,IAAM,EAAU,EAAc,EAAK,MAA2B,CAAG,EAG7D,EAAwB,EAAM,KAClC,GAAI,IAAY,OAAS,EAAM,OAAS,MACtC,EAAS,MACJ,QAAI,IAAY,OAAS,EAAM,OAAS,MAC7C,EAAS,MAKX,GADA,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EACjD,IAAW,OAAS,EAAM,OAAS,MACrC,EAAK,KAAK,EAAG,iBAAiB,EACzB,QAAI,IAAW,OAAS,EAAM,OAAS,MAC5C,EAAK,KAAK,EAAG,eAAe,EACvB,QAAI,IAAW,OAAS,EAAM,OAAS,MAC5C,EAAK,KAAK,EAAG,iBAAiB,EAKhC,GADA,EAAK,KAAK,GAAG,EAAkB,EAAK,MAA2B,CAAG,CAAC,EAC/D,IAAW,OAAS,IAAY,MAClC,EAAK,KAAK,EAAG,iBAAiB,EACzB,QAAI,IAAW,OAAS,IAAY,MACzC,EAAK,KAAK,EAAG,eAAe,EACvB,QAAI,IAAW,OAAS,IAAY,MACzC,EAAK,KAAK,EAAG,iBAAiB,EAIhC,IAAM,EAAK,EAAK,SAAS,MAAM,EAAG,EAAE,EAO9B,EANgD,CACpD,IAAK,CAAE,IAAK,EAAG,QAAS,IAAK,EAAG,QAAS,IAAK,EAAG,OAAQ,EACzD,IAAK,CAAE,IAAK,EAAG,QAAS,IAAK,EAAG,QAAS,IAAK,EAAG,OAAQ,EACzD,IAAK,CAAE,IAAK,EAAG,QAAS,IAAK,EAAG,QAAS,IAAK,EAAG,OAAQ,EACzD,IAAK,CAAE,IAAK,EAAG,UAAW,IAAK,EAAG,QAAS,IAAK,EAAG,OAAQ,CAC7D,EACqB,KAAM,GAC3B,GAAI,CAAC,EAEH,OADA,EAAI,OAAO,KAAK,oCAAoC,EAAK,UAAU,EAC5D,CAAC,EAKV,GAHA,EAAK,KAAK,CAAM,EAGZ,EAAM,OAAS,OAAS,IAAW,MACrC,EAAK,KAAK,EAAG,eAAe,EACvB,QAAI,EAAM,OAAS,OAAS,IAAW,MAC5C,EAAK,KAAK,EAAG,eAAe,EACvB,QAAI,EAAM,OAAS,OAAS,IAAW,MAC5C,EAAK,KAAK,EAAG,cAAc,EAM/B,OAFA,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EAE9C,EAIT,SAAS,EAAa,CACpB,EACA,EACU,CACV,GAAI,EAAK,SAAS,OAAS,aAEzB,OADA,EAAI,OAAO,KAAK,+CAA+C,EACxD,CAAC,EAGV,IAAM,EAAQ,EAAK,SAA8B,KAC3C,EAAQ,GAAS,EAAK,CAAI,EAChC,GAAI,CAAC,EAEH,OADA,EAAI,OAAO,KAAK,qBAAqB,GAAM,EACpC,CAAC,EAGV,IAAM,EAAiB,CAAC,EAClB,EAAQ,EAAM,OAAS,MAE7B,GAAI,EAAK,OAAQ,CAGf,GADA,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EACjD,EACF,EAAK,KAAK,EAAG,UAAW,CAAC,EACzB,EAAK,KAAK,EAAK,WAAa,KAAO,EAAG,QAAU,EAAG,OAAO,EAE1D,OAAK,KAAK,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,EACvC,EAAK,KAAK,EAAK,WAAa,KAAO,EAAG,QAAU,EAAG,OAAO,EAE5D,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EAChD,KAKL,GAHA,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EAErD,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EACjD,EACF,EAAK,KAAK,EAAG,UAAW,CAAC,EACzB,EAAK,KAAK,EAAK,WAAa,KAAO,EAAG,QAAU,EAAG,OAAO,EAE1D,OAAK,KAAK,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,EACvC,EAAK,KAAK,EAAK,WAAa,KAAO,EAAG,QAAU,EAAG,OAAO,EAE5D,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EAGvD,OAAO,EAIT,SAAS,EAAkB,CACzB,EACA,EACU,CACV,GAAI,EAAK,OAAO,OAAS,aAEvB,OADA,EAAI,OAAO,KAAK,kCAAkC,EAC3C,CAAC,EAGV,IAAM,EAAQ,EAAK,OAA4B,KACzC,EAAQ,EAAI,OAAO,KAAK,CAAC,IAAM,EAAE,OAAS,CAAI,EAEpD,GAAI,CAAC,GAAO,SAAW,CAAC,EAAM,UAE5B,OADA,EAAI,OAAO,KAAK,GAAG,kCAAqC,EACjD,CAAC,EAGV,IAAM,EAAY,GAAa,EAAM,WACrC,GAAI,CAAC,EAEH,OADA,EAAI,OAAO,KAAK,uBAAuB,EAAM,WAAW,EACjD,CAAC,EAGV,EAAI,YAAc,GAElB,IAAM,EAAiB,CAAC,EAGlB,EAAQ,GAAS,EAAK,CAAI,EAChC,GAAI,CAAC,EAEH,OADA,EAAI,OAAO,KAAK,kBAAkB,GAAM,EACjC,CAAC,EAKV,GAHA,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EAGjD,CAAC,EAAK,UAAY,CAAC,EAAK,SAE1B,OADA,EAAI,OAAO,KAAK,sCAAsC,EAC/C,CAAC,EAGV,IAAM,EAAY,EAAkB,EAAK,SAA8B,CAAG,EACpE,EAAY,EAAc,EAAK,SAA8B,CAAG,EAKtE,GAHA,EAAK,KAAK,GAAG,CAAS,EAGlB,IAAc,MAChB,EAAK,KAAK,EAAG,eAAe,EAI9B,GAAI,EAAU,gBAAkB,EAC9B,EAAK,KAAK,EAAG,UAAW,GAAG,GAAc,EAAU,eAAe,CAAC,EACnE,EAAK,KAAK,EAAG,OAAO,EAStB,OALA,EAAK,KAAK,EAAG,OAAO,EAGpB,EAAK,KAAK,EAAU,OAAQ,EAAG,CAAC,EAEzB,EAIT,SAAS,EAAiB,CACxB,EACA,EACA,EACA,EACU,CACV,GAAI,EAAO,OAAO,OAAS,aAEzB,OADA,EAAI,OAAO,KAAK,iCAAiC,EAC1C,CAAC,EAGV,IAAM,EAAQ,EAAO,OAA4B,KAC3C,EAAQ,EAAI,OAAO,KAAK,CAAC,IAAM,EAAE,OAAS,CAAI,EAEpD,GAAI,CAAC,GAAO,SAAW,CAAC,EAAM,UAE5B,OADA,EAAI,OAAO,KAAK,GAAG,kCAAqC,EACjD,CAAC,EAGV,IAAM,EAAY,GAAa,EAAM,WACrC,GAAI,CAAC,EAEH,OADA,EAAI,OAAO,KAAK,uBAAuB,EAAM,WAAW,EACjD,CAAC,EAGV,EAAI,YAAc,GAElB,IAAM,EAAiB,CAAC,EAGlB,EAAQ,GAAS,EAAK,CAAI,EAChC,GAAI,CAAC,EAAO,MAAO,CAAC,EAEpB,GAAI,CAAC,EAAO,UAAY,CAAC,EAAO,SAE9B,OADA,EAAI,OAAO,KAAK,qCAAqC,EAC9C,CAAC,EAGV,IAAM,EAAY,EAAkB,EAAO,SAA8B,CAAG,EACtE,EAAY,EAAc,EAAO,SAA8B,CAAG,EAGlE,EAAiB,IAAgB,CACrC,IAAM,EAAiB,CAAC,EAGxB,GAFA,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EACrD,EAAK,KAAK,GAAG,CAAS,EAClB,IAAc,MAChB,EAAK,KAAK,EAAG,eAAe,EAE9B,GAAI,EAAU,gBAAkB,EAC9B,EAAK,KAAK,EAAG,UAAW,GAAG,GAAc,EAAU,eAAe,CAAC,EACnE,EAAK,KAAK,EAAG,OAAO,EAGtB,OADA,EAAK,KAAK,EAAG,OAAO,EACb,GAIT,GAAI,IAAa,IACf,EAAK,KAAK,GAAG,EAAkB,EAAO,CAAG,CAAC,EACrC,KAGL,IAAM,EAAY,GAAa,EAAK,UAAU,EAAI,iBAAkB,KAAK,EAGzE,EAAK,KAAK,GAAG,EAAe,CAAC,EAC7B,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,CAAS,CAAC,EACnD,EAAK,KAAK,EAAU,OAAQ,EAAG,CAAC,EAGhC,EAAK,KAAK,GAAG,EAAkB,EAAO,CAAG,CAAC,EAC1C,IAAM,EAAU,EAAc,EAAO,CAAG,EACxC,GAAI,EAAU,cAAgB,OAAS,IAAY,MACjD,EAAK,KAAK,EAAG,cAAc,EACtB,QAAI,EAAU,cAAgB,OAAS,IAAY,MACxD,EAAK,KAAK,EAAG,eAAe,EACvB,QAAI,EAAU,cAAgB,OAAS,IAAY,MACxD,EAAK,KAAK,EAAG,iBAAiB,EACzB,QAAI,EAAU,cAAgB,OAAS,IAAY,MACxD,EAAK,KAAK,EAAG,iBAAiB,EACzB,QAAI,EAAU,cAAgB,OAAS,IAAY,MACxD,EAAK,KAAK,EAAG,eAAe,EACvB,QAAI,EAAU,cAAgB,OAAS,IAAY,MACxD,EAAK,KAAK,EAAG,eAAe,EAG9B,IAAM,EAAK,EAAS,MAAM,EAAG,EAAE,EACzB,EAAgC,CACpC,IACE,EAAU,cAAgB,MACtB,EAAG,QACH,EAAU,cAAgB,MAC1B,EAAG,QACH,EAAG,QACT,IACE,EAAU,cAAgB,MACtB,EAAG,QACH,EAAU,cAAgB,MAC1B,EAAG,QACH,EAAG,QACT,IACE,EAAU,cAAgB,MACtB,EAAG,QACH,EAAU,cAAgB,MAC1B,EAAG,QACH,EAAG,OACX,EACA,EAAK,KAAK,EAAM,IAAO,EAAG,OAAO,EAIjC,IAAM,EAAW,GACf,EACA,SAAS,EAAI,iBACb,EAAU,WACZ,EAQA,OAPA,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,CAAQ,CAAC,EAClD,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,CAAS,CAAC,EACnD,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,CAAQ,CAAC,EAClD,EAAK,KAAK,EAAU,QAAS,EAAG,CAAC,EAGjC,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,CAAQ,CAAC,EAC3C,EAIT,IAAM,EAAU,EAAc,EAAO,CAAG,EACxC,GAAI,EAAU,cAAgB,OAAS,IAAY,MACjD,EAAK,KAAK,EAAG,cAAc,EACtB,QAAI,EAAU,cAAgB,OAAS,IAAY,MACxD,EAAK,KAAK,EAAG,eAAe,EACvB,QAAI,EAAU,cAAgB,OAAS,IAAY,MACxD,EAAK,KAAK,EAAG,eAAe,EAK9B,IAAM,EAAY,GAChB,EACA,SAAS,EAAI,iBACb,EAAU,WACZ,EAMA,GALA,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,CAAS,CAAC,EAGnD,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,EAAM,KAAK,CAAC,EACrD,EAAK,KAAK,GAAG,CAAS,EAClB,IAAc,MAChB,EAAK,KAAK,EAAG,eAAe,EAE9B,GAAI,EAAU,gBAAkB,EAC9B,EAAK,KAAK,EAAG,UAAW,GAAG,GAAc,EAAU,eAAe,CAAC,EACnE,EAAK,KAAK,EAAG,OAAO,EAUtB,OARA,EAAK,KAAK,EAAG,OAAO,EAEpB,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,CAAS,CAAC,EACnD,EAAK,KAAK,EAAU,QAAS,EAAG,CAAC,EAGjC,EAAK,KAAK,EAAG,UAAW,GAAG,EAAc,CAAS,CAAC,EAE5C,EAIT,SAAS,EAAW,CAClB,EACA,EACU,CAEV,GAAI,EAAK,OAAO,OAAS,mBAAoB,CAC3C,IAAM,EAAS,EAAK,OACpB,GACE,EAAO,OAAO,OAAS,cACtB,EAAO,OAA4B,OAAS,QAC7C,EAAO,SAAS,OAAS,aACzB,CACA,IAAM,EAAU,EAAO,SAA8B,KACrD,OAAO,GAAgB,EAAQ,EAAK,UAAiC,CAAG,GAK5E,GAAI,EAAK,OAAO,OAAS,aAAc,CACrC,IAAM,EAAQ,EAAK,OAA4B,KAC/C,GAAI,EAAK,WAAW,QAAQ,GAAK,EAAK,WAAW,OAAO,EACtD,OAAO,GAAgB,EAAM,EAAK,UAAiC,CAAG,EAK1E,OADA,EAAI,OAAO,KAAK,8BAA8B,EAAK,OAAO,MAAM,EACzD,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,EAIvC,SAAS,EAAe,CACtB,EACA,EACA,EACU,CACV,EAAI,YAAc,GAClB,IAAM,EAAiB,CAAC,EAExB,OAAQ,OACD,gBACA,aAAc,CAIjB,GAFA,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5B,EAAc,EAAK,GAAI,CAAG,IAC1B,MAAO,EAAK,KAAK,EAAG,eAAe,EACnD,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5C,IAAM,EAAU,EAAc,EAAK,GAAI,CAAG,EAC1C,GAAI,IAAY,MAAO,EAAK,KAAK,EAAG,eAAe,EAC9C,QAAI,IAAY,MAAO,EAAK,KAAK,EAAG,eAAe,EAIxD,OAHA,EAAK,KAAK,EAAG,OAAO,EAEpB,EAAK,KAAK,GAAG,GAAiB,GAAO,UAAW,EAAG,CAAC,CAAC,EAC9C,CACT,KAEK,iBACA,cAAe,CAIlB,GAFA,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5B,EAAc,EAAK,GAAI,CAAG,IAC1B,MAAO,EAAK,KAAK,EAAG,eAAe,EACnD,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5C,IAAM,EAAU,EAAc,EAAK,GAAI,CAAG,EAC1C,GAAI,IAAY,MAAO,EAAK,KAAK,EAAG,eAAe,EAC9C,QAAI,IAAY,MAAO,EAAK,KAAK,EAAG,eAAe,EAMxD,OALA,EAAK,KAAK,EAAG,OAAO,EACpB,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5C,EAAK,KAAK,GAAG,GAAiB,GAAO,WAAY,EAAG,CAAC,CAAC,EAEtD,EAAK,KAAK,EAAG,UAAW,CAAC,EAClB,CACT,KAEK,cAAe,CAElB,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5C,IAAM,EAAU,EAAc,EAAK,GAAI,CAAG,EAC1C,GAAI,IAAY,MAAO,EAAK,KAAK,EAAG,iBAAiB,EAChD,QAAI,IAAY,MAAO,EAAK,KAAK,EAAG,cAAc,EAEvD,OADA,EAAK,KAAK,GAAG,GAAW,GAAO,WAAW,CAAC,EACpC,CACT,KAEK,qBAAsB,CAEzB,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5C,IAAM,EAAQ,EAAK,GAAqB,MACxC,GAAI,CAAC,OAAO,UAAU,CAAI,GAAK,EAAO,GAAK,EAAO,EAEhD,OADA,EAAI,OAAO,KAAK,6CAA6C,GAAM,EAC5D,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,EAGvC,OADA,EAAK,KAAK,GAAa,GAAG,EAAc,GAAO,kBAAkB,EAAG,CAAI,EACjE,CACT,KAEK,qBAAsB,CAEzB,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5C,IAAM,EAAQ,EAAK,GAAqB,MACxC,GAAI,CAAC,OAAO,UAAU,CAAI,GAAK,EAAO,GAAK,EAAO,EAEhD,OADA,EAAI,OAAO,KAAK,6CAA6C,GAAM,EAC5D,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,EAEvC,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5C,IAAM,EAAU,EAAc,EAAK,GAAI,CAAG,EAC1C,GAAI,IAAY,MAAO,EAAK,KAAK,EAAG,iBAAiB,EAChD,QAAI,IAAY,MAAO,EAAK,KAAK,EAAG,cAAc,EAEvD,OADA,EAAK,KAAK,GAAa,GAAG,EAAc,GAAO,kBAAkB,EAAG,CAAI,EACjE,CACT,KAEK,gBACA,gBACA,gBACA,YAAa,CAEhB,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5C,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5C,IAAM,EAAgC,CACpC,UAAW,GAAO,UAClB,UAAW,GAAO,UAClB,UAAW,GAAO,UAClB,UAAW,GAAO,SACpB,EAEA,OADA,EAAK,KAAK,GAAG,GAAW,EAAM,EAAK,CAAC,EAC7B,CACT,KAEK,gBACA,aAAc,CAEjB,EAAK,KAAK,GAAG,EAAkB,EAAK,GAAI,CAAG,CAAC,EAC5C,IAAM,EAAmC,CACvC,UAAW,GAAO,UAClB,WAAY,GAAO,UACrB,EAEA,OADA,EAAK,KAAK,GAAG,GAAW,EAAS,EAAK,CAAC,EAChC,CACT,SAIE,OADA,EAAI,OAAO,KAAK,2BAA2B,GAAM,EAC1C,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,GAK3C,SAAS,EAAe,CACtB,EACA,EACA,EACU,CACV,IAAM,EAAiB,CAAC,EAGxB,QAAW,KAAO,EAAM,CACtB,EAAK,KAAK,GAAG,EAAkB,EAAK,CAAG,CAAC,EAExC,IAAM,EAAO,EAAc,EAAK,CAAG,EACnC,GAAI,IAAS,MACX,EAAK,KAAK,EAAG,iBAAiB,EACzB,QAAI,IAAS,MAClB,EAAK,KAAK,EAAG,eAAe,EAehC,IAAM,EAVmC,CACvC,IAAK,EAAG,QACR,KAAM,EAAG,SACT,MAAO,EAAG,UACV,MAAO,EAAG,UACV,KAAM,EAAG,SACT,IAAK,EAAG,QACR,IAAK,EAAG,OACV,EAEwB,GACxB,GAAI,IAAW,OAEb,OADA,EAAK,KAAK,CAAM,EACT,EAgBT,GAZoB,CAClB,MACA,MACA,MACA,OACA,OACA,OACA,QACA,MACA,MACA,KACF,EACgB,SAAS,CAAM,EAK7B,OAJA,EAAI,iBAAiB,IAAI,CAAM,EAG/B,EAAI,OAAO,KAAK,QAAQ,4CAAiD,EAClE,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,EAIvC,OADA,EAAI,OAAO,KAAK,wBAAwB,GAAQ,EACzC,CAAC,EAAG,UAAW,GAAG,GAAU,CAAC,CAAC,EAQvC,SAAS,EAAmB,CAAC,EAA6B,CACxD,IAAM,EAAQ,EAAQ,MAAM,GAAG,EAAE,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EAC9C,EAAO,EAAM,GAEnB,GAAI,EAAM,SAAW,EAEnB,MAAO,CAAE,OAAM,KAAM,KAAM,EAG7B,IAAM,EAAU,EAAM,GAGtB,GAAI,GAAa,GACf,MAAO,CAAE,OAAM,KAAM,MAAO,QAAS,GAAM,UAAW,CAAQ,EAahE,MAAO,CAAE,OAAM,KATgC,CAC7C,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,OAAQ,MACR,IAAK,KACP,EAE6B,IAAY,KAAM,EAIjD,SAAS,EAAW,CAClB,EACA,EACA,EACA,EACA,EACU,CAEV,IAAM,EAAS,CAAC,EAAM,GAAM,IAAM,IAAM,EAAM,EAAM,EAAM,CAAI,EAGxD,EAAiB,EAAO,IAAI,CAAC,IAAM,GAAK,EAAE,KAAK,EAC/C,EAAa,EAAY,CAAC,EAAM,GAAK,GAAG,EAAI,CAAC,CAAI,EACjD,EAAc,GAAc,GAAQ,KAAM,CAC9C,EACA,GACA,GAAG,EAAc,EAAO,MAAM,EAC9B,GAAG,EACH,GAAG,CACL,CAAC,EAGK,EAA0B,CAAC,EAO7B,EAA0B,CAAC,EAC/B,GAAI,EACF,EAAgB,GAAc,GAAQ,OAAQ,CAC5C,EACA,GAAG,GAAa,KAAK,EACrB,GAAG,GAAa,QAAQ,EACxB,EACA,EACA,CACF,CAAC,EAIH,IAAM,EAAc,GAAc,GAAQ,SAAU,CAClD,EACA,CACF,CAAC,EAGK,EAAgB,GAAc,GAAQ,OAAQ,CAClD,EACA,GAAG,GAAa,SAAS,EACzB,EACA,CACF,CAAC,EAIK,EAA0B,CAAC,EACjC,GAAI,EAAW,OAAS,EAAG,CACzB,IAAI,EAAc,EAAW,GACzB,EAAQ,EACZ,QAAS,EAAI,EAAG,EAAI,EAAW,OAAQ,IACrC,GAAI,EAAW,KAAO,EACpB,IAEA,OAAY,KAAK,CAAC,GAAG,EAAc,CAAK,EAAG,GAAK,EAAY,CAAC,EAC7D,EAAc,EAAW,GACzB,EAAQ,EAGZ,EAAY,KAAK,CAAC,GAAG,EAAc,CAAK,EAAG,GAAK,EAAY,CAAC,EAQ/D,IAAM,EAAW,CAAC,GALI,CACpB,GAAG,EAAc,EAAY,MAAM,EACnC,GAAG,EAAY,KAAK,CACtB,EAEoC,GAAG,EAAU,EAAG,GAAG,EAEjD,EAAc,GAAc,GAAQ,KAAM,CAC9C,EACA,GAAG,EAAc,EAAS,MAAM,EAChC,GAAG,CACL,CAAC,EAGK,EAAW,CAAC,GAAG,EAAQ,GAAG,CAAW,EAE3C,GAAI,EAAc,OAAS,EACzB,EAAS,KAAK,GAAG,CAAa,EAKhC,OAFA,EAAS,KAAK,GAAG,EAAa,GAAG,EAAe,GAAG,CAAW,EAEvD,EA0BF,SAAS,EAAa,CAAC,EAAqC,CACjE,GAAI,CAEF,IAAM,EAAS,EAAM,SAAS,IAAI,EAAmB,EAGjD,EACJ,GAAI,CAEF,IAAM,EAAU,qBAAqB,EAClC,IAAI,CAAC,IAAM,EAAE,IAAI,EACjB,KAAK,IAAI,QAAQ,EAAM,SAC1B,EAAY,SAAM,EAAS,CAAE,YAAa,IAAK,CAAC,EAChD,MAAO,EAAQ,CACf,MAAO,CACL,MAAO,IAAI,WACX,SAAU,CAAC,EACX,QAAS,GACT,MAAO,gBAAgB,EAAE,SAC3B,EAKF,IAAM,EADW,EAAI,KAAK,GACJ,KAAK,KAGrB,EAAM,GAAc,CAAM,EAG1B,EAAiB,CAAC,EACxB,QAAW,KAAQ,EACjB,EAAK,KAAK,GAAG,GAAiB,EAAM,CAAG,CAAC,EAI1C,GAAI,EAAI,OAAO,OAAS,EACtB,MAAO,CACL,MAAO,IAAI,WACX,SAAU,EAAI,SACd,QAAS,GACT,MAAO,EAAI,OAAO,KAAK,IAAI,CAC7B,EAIF,IAAM,EAAc,GAClB,EACA,EACA,EAAI,WACJ,EAAI,YACJ,EAAI,SACN,EAGM,EAAU,GAAY,EAAM,EAAQ,EAAI,UAAU,EAExD,MAAO,CACL,MAAO,IAAI,WAAW,CAAW,EACjC,SAAU,EAAI,SACd,QAAS,GACT,YAAa,EAAI,YACjB,IAAK,CACP,EACA,MAAO,EAAQ,CACf,MAAO,CACL,MAAO,IAAI,WACX,SAAU,CAAC,EACX,QAAS,GACT,MAAO,EAAE,OACX,GAOJ,eAAsB,EAAe,CACnC,EACA,EAC+B,CAC/B,IAAM,EAA+B,CAAC,EAEtC,GAAI,EACF,EAAQ,IAAM,CAAE,QAAO,EAGzB,IAAM,EAAS,MAAM,YAAY,QAAQ,CAAK,EAC9C,OAAO,YAAY,YAAY,EAAQ,CAAO,EAMhD,eAAsB,EAAkB,CAAC,EAKtC,CACD,IAAM,EAAS,GAAc,CAAK,EAElC,GAAI,CAAC,EAAO,QACV,MAAO,CAAE,GAAI,IAAM,EAAG,QAAS,GAAO,MAAO,EAAO,KAAM,EAG5D,GAAI,CACF,IAAI,EAEJ,GAAI,EAAO,YAET,EAAS,IAAI,YAAY,OAAO,CAAE,QAAS,GAAI,CAAC,EAIlD,IAAM,GADW,MAAM,GAAgB,EAAO,MAAO,CAAM,GAClC,QAAQ,QAG3B,EAAS,EAAM,SAAS,IAAI,EAAmB,EAGrD,GAAI,CAFc,EAAO,KAAK,CAAC,IAAM,EAAE,OAAO,EAG5C,MAAO,CAAE,GAAI,EAAS,SAAQ,QAAS,EAAK,EAkE9C,MAAO,CAAE,GA9DS,IAAI,IAAgB,CACpC,GAAI,CAAC,EAAQ,MAAU,MAAM,wBAAwB,EAErD,IAAM,EAAa,IAAI,WAAW,EAAO,MAAM,EAC3C,EAAS,EACP,EAAqB,CAAC,EAG5B,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,IAAM,EAAQ,EAAO,GACf,EAAM,EAAK,GAEjB,GAAI,EAAM,SAAW,aAAe,QAAU,WAAY,EAAK,CAC7D,IAAM,EAAa,EAKb,EAAQ,IAAI,WAChB,EAAW,OACX,EAAW,WACX,EAAW,UACb,EACA,EAAW,IAAI,EAAO,CAAM,EAC5B,EAAS,KAAK,CAAM,EACpB,GAAU,EAAM,OAEhB,EAAU,EAAS,GAAM,IAEzB,OAAS,KAAK,CAAa,EAK/B,IAAM,EAAY,EAAQ,GAAG,CAAQ,EAGrC,EAAS,EACT,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,IAAM,EAAQ,EAAO,GACf,EAAM,EAAK,GAEjB,GAAI,EAAM,SAAW,aAAe,QAAU,WAAY,EAAK,CAC7D,IAAM,EAAa,EAKb,EAAQ,IAAI,WAChB,EAAW,OACX,EAAW,WACX,EAAW,UACb,EACA,EAAM,IAAI,EAAW,MAAM,EAAQ,EAAS,EAAM,MAAM,CAAC,EACzD,GAAU,EAAM,OAChB,EAAU,EAAS,GAAM,KAI7B,OAAO,GAGe,SAAQ,QAAS,EAAK,EAC9C,MAAO,EAAQ,CACf,MAAO,CAAE,GAAI,IAAM,EAAG,QAAS,GAAO,MAAO,EAAE,OAAQ,GAO3D,eAAsB,EAAiB,CAAC,EAAoC,CAC1E,IAAM,EAAS,MAAM,GAAmB,CAAK,EAE7C,GAAI,CAAC,EAAO,QAEV,OADA,QAAQ,KAAK,+BAA+B,EAAM,MAAO,EAAO,KAAK,EAC9D,GAMT,OAFE,WAAmB,EAAM,IAAM,EAAO,GAEjC,GAMT,eAAsB,EAAiB,CAAC,EAIrC,CACD,IAAI,EAAW,EACX,EAAS,EACP,EAAmB,CAAC,EAE1B,QAAW,KAAS,EAElB,GADgB,MAAM,GAAkB,CAAK,EAE3C,IAEA,SACA,EAAO,KAAK,qBAAqB,EAAM,IAAI,EAI/C,MAAO,CAAE,WAAU,SAAQ,QAAO,ECtmE7B,SAAS,EAAqB,CAAC,EAQpC,CACA,IAAM,EAKA,CAAC,EACD,EAMA,CAAC,EAEP,QAAW,KAAS,EAAQ,CAC1B,IAAM,EAAS,GAAc,CAAK,EAClC,GAAI,EAAO,QAAS,CAElB,IAAM,EAAS,KAAK,OAAO,aAAa,GAAG,EAAO,KAAK,CAAC,EACxD,EAAe,KAAK,CAClB,GAAI,EAAM,GACV,SACA,SAAU,EAAM,SAChB,YAAa,EAAO,aAAe,GACnC,IAAK,EAAO,KAAO,EACrB,CAAC,EACD,EAAQ,KAAK,CACX,GAAI,EAAM,GACV,QAAS,GACT,WAAY,EAAO,MAAM,MAC3B,CAAC,EAED,OAAQ,KAAK,CACX,GAAI,EAAM,GACV,QAAS,GACT,MAAO,EAAO,KAChB,CAAC,EAIL,GAAI,EAAe,SAAW,EAC5B,MAAO,CAAE,KAAM,GAAI,SAAQ,EAI7B,IAAM,EAAc,EACjB,IAAI,CAAC,IAAM,CACV,IAAM,EAAW,EAAE,IAAI,MAAM;AAAA,CAAI,EAAE,IAAI,CAAC,IAAS,MAAM,GAAM,EAC7D,MAAO;AAAA,WAAiB,EAAE;AAAA,EAAO,EAAS,KAAK;AAAA,CAAI;AAAA,KACpD,EACA,KAAK;AAAA,CAAI,EAIN,EAAY,EACf,IACC,CAAC,IACC,OAAO,KAAK,UAAU,EAAE,EAAE,SAAS,KAAK,UACtC,EAAE,MACJ,OAAO,KAAK,UAAU,EAAE,QAAQ,OAAO,EAAE,cAC7C,EACC,KAAK,GAAG,EAGL,EAAiB,EAAe,KAAK,CAAC,IAAM,EAAE,WAAW,EAuC/D,MAAO,CAAE,KArCI,GAAG;AAAA;AAAA,sBAEI;AAAA;AAAA;AAAA,EAIpB,EACI;AAAA;AAAA,+OAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBJ,KAAK,EAEU,SAAQ,ENwBzB,SAAS,EAAuB,CAC9B,EACA,EACA,EACS,CACT,GAAI,CAAC,GAAU,CAAC,EAAU,MAAO,GAEjC,IAAM,EAAc,IAAI,OACtB,eAAe,oBAA2B,cAC1C,GACF,EACM,EAAQ,EAAO,MAAM,CAAW,EACtC,GAAI,CAAC,EAAO,MAAO,GACnB,OAAO,EAAM,KAAO,IAMtB,SAAS,EAAuB,CAC9B,EACA,EACA,EACA,EACA,EAC4C,CAC5C,IAAM,EAAqB,CAAC,EAGtB,EAAO,GAAY,EAAgB,CAAI,EAGvC,EAA8C,CAAC,EACjD,EAAsB,GACtB,EACA,EAGJ,GACE,EAAK,OAAO,SAAW,IACtB,EAAK,OAAO,GAAG,OAAS,iBACtB,EAAK,OAAO,GAAG,OAAS,qBACvB,EAAK,OAAO,GAAG,KAAK,OAAS,iBACjC,CACA,EAAsB,GACtB,IAAM,EAAQ,EAAK,OAAO,GACpB,EACJ,EAAM,OAAS,gBAAkB,EAAS,EAAc,KAEpD,EAAY,GAAe,EAAe,CAAc,EAC9D,GAAI,EAAU,KAAK,OAAS,UAAY,EAAU,KAAK,mBAAoB,CACzE,EAAoB,CAAC,EACrB,EAAuB,IAAI,IAG3B,QAAY,EAAK,KAAe,OAAO,QACrC,EAAU,KAAK,kBACjB,EAME,GALA,EAAO,GAAO,IACT,EACH,YAAa,EAAK,OAAO,EAC3B,EACA,EAAkB,GAAO,EAAW,KAChC,EAAW,SACb,EAAqB,IAAI,CAAG,GAMlC,aAAW,KAAS,EAAK,OACvB,GAAI,EAAM,OAAS,aAAc,CAC/B,IAAM,EAAY,GAAe,EAAO,CAAc,EACtD,EAAO,EAAM,MAAQ,IAChB,EACH,SAAU,EAAe,IAAI,EAAM,IAAI,EACvC,YAAa,EAAK,OAAO,EAAM,KACjC,EACK,QACL,EAAM,OAAS,qBACf,EAAM,KAAK,OAAS,aACpB,CACA,IAAM,EAAY,GAAe,EAAO,CAAc,EAKhD,EAAa,GACjB,GAAe,GACf,EAAK,IAAI,MAAQ,GACjB,EAAM,KAAK,IACb,EACA,EAAO,EAAM,KAAK,MAAQ,IACrB,EACH,SAAU,EACV,QAAS,EAAa,KAAO,EAAU,SAAW,EAAU,QAC5D,YAAa,EAAK,OAAO,EAAM,KAAK,KACtC,EACK,QAAI,EAAM,OAAS,gBAAiB,CAEzC,IAAM,EAAY,GAAe,EAAO,CAAc,EACtD,GACE,EAAU,KAAK,OAAS,UACxB,EAAU,KAAK,mBAEf,QAAY,EAAK,KAAe,OAAO,QACrC,EAAU,KAAK,kBACjB,EACE,EAAO,GAAO,IACT,EACH,YAAa,EAAK,OAAO,EAC3B,EAGC,QACL,EAAM,OAAS,eACf,EAAM,UAAU,OAAS,aACzB,CAIA,IAAM,EAAW,EAAM,SAAS,KAC1B,EAAgB,EAAe,MACnC,IAAI,OAAO,YAAY,2BAAkC,CAC3D,EACA,GAAI,EACF,GAAI,CACF,IAAM,EAAW,GAAkB,EAAc,GAAG,KAAK,EAAG,EAAG,CAC7D,YAAa,IACf,CAAC,EACK,EAAe,GAAmB,CAAe,EACvD,EAAO,GAAY,CACjB,KAAM,EACN,KAAM,EACN,SAAU,GACV,YAAa,EAAK,OAAO,EAC3B,EACA,KAAM,CAEN,EAAO,GAAY,CACjB,KAAM,EACN,KAAM,CAAE,KAAM,OAAQ,EACtB,SAAU,GACV,YAAa,EAAK,OAAO,EAC3B,EAIF,OAAO,GAAY,CACjB,KAAM,EACN,KAAM,CAAE,KAAM,OAAQ,EACtB,SAAU,GACV,YAAa,EAAK,OAAO,EAC3B,EAOR,IAAI,EACJ,GAAI,EACF,GAAI,CAEF,IAAM,EAAoB,EAAc,SAAS,GAAG,EAChD,GAAwB,CAAa,EACrC,EACE,EAAa,GAAkB,EAAmB,EAAG,CACzD,YAAa,IACf,CAAC,EACD,EAAU,GAAmB,CAAiB,EAC9C,KAAM,CAEN,EAAU,CAAE,KAAM,KAAM,EACxB,EAAS,KAAK,gCAAgC,GAAe,EAejE,MAAO,CAAE,MAVkB,CACzB,KAAM,EAAK,IAAI,MAAQ,YACvB,SACA,UACA,YAAa,EAAK,YAClB,sBACA,oBACA,sBACF,EAEgB,UAAS,EAe3B,SAAS,EAA4B,CACnC,EACA,EACA,EAC6C,CAC7C,IAAM,EAAkB,CAAC,EAEnB,EAAa,EAAS,GAAG,KAAY,GACrC,EAAa,EAAS,GAAG,KAAU,IAAa,EAGtD,GAAI,EAAM,qBAAuB,EAAM,kBAAmB,CACxD,IAAM,EAAQ,EAAM,kBACd,EAAiB,EAAM,sBAAwB,IAAI,IACnD,EAAa,OAAO,KAAK,CAAK,EAEpC,GAAI,EAAW,SAAW,EAAG,OAAO,KAGpC,QAAW,KAAa,EACtB,EAAM,KAAK,OAAO,8BAAsC,IAAY,EAItE,QAAY,EAAW,KAAc,OAAO,QAAQ,CAAK,EAAG,CAC1D,IAAM,EAAa,EAAe,IAAI,CAAS,EACzC,EAAO,GAAG,IAAa,KAAY,IACnC,EAAY,GAAsB,EAAW,CAAS,EAE5D,GAAI,EAAW,CACb,IAAM,EAAe,EAAU,KAC/B,GAAI,EACF,EAAM,KACJ,OAAO,8BAAsC,QAAW,OAAkB,KAC5E,EAEA,OAAM,KACJ,OAAO,sBAA8B,8BAAsC,QAAW,OAAkB,KAC1G,GAKN,GAAI,EAAM,SAAW,EAAG,OAAO,KAO/B,OAHA,EAAM,QAAQ,oBAAoB,MAAe,EACjD,EAAM,QAAQ,OAAO,EAEd,CACL,SAAU,EAAM,KAAK;AAAA,GAAM,EAC3B,OAAQ,iCACV,EAIF,IAAM,EAAS,OAAO,QAAQ,EAAM,MAAM,EAC1C,GAAI,EAAO,SAAW,EAAG,OAAO,KAGhC,QAAY,KAAc,EACxB,EAAM,KAAK,OAAO,8BAAsC,IAAY,EAItE,QAAY,EAAW,KAAU,EAAQ,CACvC,IAAM,EAAO,GAAG,IAAa,KAAY,IACnC,EAAY,GAAsB,EAAW,EAAM,IAAI,EAE7D,GAAI,EAAW,CACb,IAAM,EACJ,EAAM,KAAK,OAAS,QACf,EAAM,KAAa,QAAQ,IAAI,CAAC,IAAW,EAAE,IAAI,EAAE,KAAK,KAAK,EAC9D,EAAM,KAAK,KACjB,GAAI,EAAM,SACR,EAAM,KACJ,OAAO,8BAAsC,QAAW,OAAkB,KAC5E,EAEA,OAAM,KACJ,OAAO,sBAA8B,8BAAsC,QAAW,OAAkB,KAC1G,GAKN,GAAI,EAAM,SAAW,EAAG,OAAO,KAO/B,OAHA,EAAM,QAAQ,oBAAoB,MAAe,EACjD,EAAM,QAAQ,OAAO,EAEd,CACL,SAAU,EAAM,KAAK;AAAA,GAAM,EAC3B,OAAQ,iCACV,EAOF,SAAS,EAAuB,CAAC,EAAqB,CACpD,IAAI,EAAS,GACT,EAAQ,EAEZ,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,IAAM,EAAK,EAAI,GACf,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IACrC,IACA,GAAU,EACL,QAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAC5C,IACA,GAAU,EACL,QAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,CACjD,GAAU,EACV,IACA,MAAO,EAAI,EAAI,QAAU,EAAI,KAAO,EAAI,CACtC,GAAI,EAAI,KAAO,KAAM,GAAU,EAAI,KACnC,GAAU,EAAI,KAEhB,GAAI,EAAI,EAAI,OAAQ,GAAU,EAAI,GAC7B,QACL,IAAU,GACV,IAAO,KACP,EAAI,EAAI,KAAO,KACf,EAAI,EAAI,KAAO,IAGf,GAAU,IAEV,QAAU,EAId,OAAO,EAOT,SAAS,EAAyB,CAChC,EACA,EACe,CAQf,IAAM,EAJQ,IAAI,OAChB,eAAe,mCACf,GACF,EACoB,KAAK,CAAM,EAC/B,GAAI,CAAC,EAAO,OAAO,KAEnB,IAAM,EAAc,EAAO,MAAM,EAAM,MAAQ,EAAM,GAAG,MAAM,EAC9D,OAAO,GAA+B,CAAW,EAOnD,SAAS,EAA2B,CAClC,EACA,EAC+B,CAM/B,IAAM,EAJQ,IAAI,OAChB,eAAe,+BACf,GACF,EACoB,KAAK,CAAM,EAC/B,GAAI,CAAC,EAAO,OAEZ,IAAM,EAAS,EAAM,GACrB,GAAI,IAAW,IAAK,MAAO,OAC3B,GAAI,IAAW,IAAK,MAAO,SAC3B,OAOF,SAAS,EAA2B,CAAC,EAAoC,CACvE,IAAM,EAAQ,EAAO,MAAM,oCAAoC,EAC/D,OAAO,EAAQ,EAAM,GAAG,KAAK,EAAI,OAOnC,SAAS,EAAqB,CAC5B,EACA,EACoB,CAGpB,IAAM,EAAQ,IAAI,OAChB,mEAAmE,WACnE,GACF,EACM,EAAQ,EAAO,MAAM,CAAK,EAChC,OAAO,EAAQ,SAAS,EAAM,GAAI,EAAE,EAAI,OAYnC,SAAS,EAAa,CAC3B,EACA,EAA+B,CAAC,EACZ,CACpB,IACE,WAAW,WACX,WAAW,GACX,QAAQ,GACR,kBAAkB,CAAC,GACjB,EACE,EAAqB,CAAC,EAItB,EADuB,GAA4B,CAAM,GACb,GAG1C,KAAM,EAAa,QAAO,QAAO,cAAe,GAAa,CAAM,GAIzE,IAAK,EACL,iBACA,iBACA,mBACE,GAAM,EAAa,CACrB,WACA,eAAgB,EAClB,CAAC,EAGK,EAAY,GAAiB,CAAO,EAGpC,EAAe,GAAW,CAAW,EAGrC,EAAwC,CAAC,EAGzC,EAAmD,CAAC,EAGpD,EAA8C,CAAC,EAGrD,QAAW,KAAQ,EAAW,CAC5B,IAAM,EAAW,EAAK,IAAI,MAAQ,YAG5B,EAAgB,GAA0B,EAAa,CAAQ,EAGjE,GACJ,GAAI,GAAiB,EAAc,SAAS,GAAG,EAC7C,GAAI,CACF,IAAM,GAAgB,EAAc,SAAS,eAAe,EACtD,GAAc,GAAwB,CAAa,EACnD,GAAa,SAAS,UAAU,IAAa,EAAE,EAC/C,GAAoC,CAAC,EAC3C,QAAW,MAAK,GAAe,CAC7B,IAAM,GAAM,GAAE,GACd,GAAI,MAAO,GAAQ,GAAS,IAAO,GAAO,IAE5C,GAAI,OAAO,KAAK,EAAQ,EAAE,OAAS,EAAG,GAAiB,GACvD,KAAM,EAMV,IAAQ,SAAO,SAAU,IAAiB,GACxC,EACA,EACA,EACA,EACA,CACF,EACA,EAAS,KAAK,GAAG,EAAY,EAC7B,EAAS,GAAY,GAQrB,QAAW,MAAS,EAAK,OACvB,GAAI,GAAM,OAAS,oBAAqB,CACtC,IAAM,GACH,GAAc,MAAM,MAAS,GAAc,MAAM,MAC9C,GAAY,GAAY,GAAM,OAAO,IAAa,KAExD,GAAI,IAAW,UAAY,GAAU,UAAY,KAE/C,EAAU,KAAK,CACb,MAAQ,GAAc,KAAK,IAC3B,IAAM,GAAc,MAAM,GAC5B,CAAC,EACI,KAEL,IAAM,GAAS,GAAc,MAC7B,GAAI,GAAM,OAAS,oBAAsB,GAAM,WAAa,IAC1D,EAAU,KAAK,CAAE,MAAO,GAAM,KAAK,IAAK,IAAK,GAAM,GAAI,CAAC,GAQhE,IAAM,GACJ,EAAa,eAAiB,QAAU,EAAgB,IAAI,CAAQ,EAChE,GAAS,EAAa,cAAc,IAAI,CAAQ,EAEhD,GAAe,GAA4B,EAAa,CAAQ,EAGhE,GAAgB,GAAsB,EAAQ,CAAQ,EACtD,GAAU,CACd,KAAM,EACN,KAAM,IAAiB,EAAK,KAAK,MAAM,MAAQ,EAC/C,OAAQ,EAAK,KAAK,MAAM,QAAU,CACpC,EAEM,GAAgB,CACpB,OAAQ,GACR,KAAM,GACN,eACF,EAGM,GAA0B,EAAa,iBAAiB,IAAI,CAAQ,EAGtE,GACJ,GAAI,GAAyB,CAE3B,IAAM,GAAyB,CAAC,EAChC,QAAW,MAAK,EAAW,CACzB,IAAM,GAAK,GAAE,IAAI,MAAQ,GACzB,GAAI,GAAG,WAAW,EAAW,GAAG,EAAG,GAAa,KAAK,EAAE,EAEzD,IAAM,GAAgB,CACpB,YAAa,GACb,SAAU,EACZ,EACA,GAAI,GACF,GAAS,OAAS,GAAG,GAAQ,QAAQ,GAAQ,OAE/C,GAAe,GAAG,aAAoB,KAAK,UAAU,GAAU,KAAM,CAAC,IAEtE,QAAe,GAAqB,EAAU,GAAO,GAAe,CAClE,QACA,OAAQ,GACR,iBACF,CAAC,EAWH,GAPA,EAAW,KAAK,CACd,SAAU,EAAK,IACf,KAAM;AAAA,EAAK,IACb,CAAC,EAIG,CAAC,IAAY,CAAC,GAAyB,CACzC,IAAM,GAAY,GAAG,GAAQ,QAAQ,GAAQ,OACvC,GAAa,GACjB,EACA,GACA,EACF,EACA,GAAI,IAAc,EAAK,MAAQ,EAAK,KAAK,QAAU,OAEjD,EAAW,KAAK,CACd,SAAU,EAAK,KAAK,MAAQ,EAC5B,KAAM;AAAA,IAAO,GAAW;AAAA,CAC1B,CAAC,EAED,EAAW,KAAK,CACd,SAAU,EAAK,KAAK,IAAM,EAC1B,KAAM;AAAA,IAAO,GAAW;AAAA,CAC1B,CAAC,GAOP,EAAU,KAAK,CAAC,EAAG,IAAM,EAAE,MAAQ,EAAE,KAAK,EAC1C,IAAI,EAAO,EAAa,OACxB,QAAa,QAAO,SAAS,EAC3B,EAAO,EAAK,MAAM,EAAG,CAAK,EAAI,EAAK,MAAM,CAAG,EAI9C,QAAW,KAAO,EAAY,CAC5B,IAAI,EAAQ,EACZ,QAAW,KAAO,EAChB,GAAI,EAAI,MAAQ,EAAI,SAClB,GAAS,EAAI,IAAM,EAAI,MAG3B,EAAI,UAAY,EAIlB,EAAW,KAAK,CAAC,EAAG,IAAM,EAAE,SAAW,EAAE,QAAQ,EACjD,QAAa,WAAU,UAAU,EAC/B,EAAO,EAAK,MAAM,EAAG,CAAQ,EAAI,EAAO,EAAK,MAAM,CAAQ,EAK7D,IAAM,EAAiB,EAAK,SAAS,kBAAkB,EACjD,EAAa,EAAK,SAAS,kBAAkB,EAC7C,EAAU,EAAK,SAAS,KAAK,EAC7B,EAAa,EAAK,SAAS,QAAQ,EACnC,EAAU,EAAK,SAAS,KAAK,EAC7B,EAAa,EAAK,SAAS,QAAQ,EACnC,EAAc,EAAK,SAAS,SAAS,EAErC,EAAY,WAAW,KAAK,CAAI,EAChC,EAAe,cAAc,KAAK,CAAI,EACtC,EAAyB,wBAAwB,KAAK,CAAI,EAC1D,GAAY,WAAW,KAAK,CAAI,EAChC,GAAa,YAAY,KAAK,CAAI,EAClC,GAAgB,EAAa,SAAS,YAiB5C,GAdE,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GAEgB,CAIhB,IAAM,EAAwB,CAAC,EAG/B,GAAI,EACF,EAAY,KACV,yJACA,0RACA,6FACF,EAIF,GAAI,EACF,EAAY,KACV,kIACF,EAIF,GAAI,EACF,EAAY,KACV,yRACF,EAEF,GAAI,EACF,EAAY,KAAK,qCAAqC,EAIxD,GAAI,EACF,EAAY,KAAK,qDAAqD,EAIxE,GAAI,EACF,EAAY,KACV,44CACF,EAEF,GAAI,EACF,EAAY,KAAK,qCAAqC,EAKxD,GAAI,EACF,EAAY,KACV,mOACF,EAEF,GAAI,EACF,EAAY,KACV,yLACF,EAEF,GAAI,EACF,EAAY,KACV,4ZACF,EAEF,GAAI,GACF,EAAY,KACV,uJACF,EAEF,GAAI,GACF,EAAY,KACV,4HACF,EAKF,IAAM,EACJ,EAAY,OAAS,EAAI,EAAY,KAAK;AAAA,CAAK,EAAI;AAAA,EAAQ,GAGvD,EAA4B,CAAC,EACnC,GAAI,EAAgB,EAAgB,KAAK,YAAa,gBAAgB,EACtE,GAAI,EAAY,EAAgB,KAAK,YAAa,WAAY,UAAU,EACxE,GAAI,EAAS,EAAgB,KAAK,IAAI,EACtC,GAAI,EAAY,EAAgB,KAAK,OAAO,EAC5C,GAAI,EAAa,EAAgB,KAAK,QAAQ,EAC9C,GAAI,EAAS,EAAgB,KAAK,KAAM,WAAW,EACnD,GAAI,EAAY,EAAgB,KAAK,OAAO,EAC5C,GAAI,EAAW,EAAgB,KAAK,MAAM,EAC1C,GAAI,EAAc,EAAgB,KAAK,SAAS,EAChD,GAAI,EAAwB,EAAgB,KAAK,mBAAmB,EACpE,GAAI,GAAW,EAAgB,KAAK,MAAM,EAC1C,GAAI,GAAY,EAAgB,KAAK,OAAO,EAE5C,IAAM,GACJ,EAAgB,OAAS,EACrB,IAAI,EAAgB,KAAK,GAAG,KAC5B,YAMN,EAHE,EACA,wDAAwD;AAAA,EAExC,EAIpB,GAAI,GACF,EAAO;AAAA,EAAqD,EAI9D,IAAI,GAEJ,GAAI,EAAU,CAEZ,IAAM,EAAe,GAA0B,CAAM,EAGrD,GAAc,GACZ,EACA,EACA,EACA,EACA,EACA,EAAa,UACf,EAIA,IAAM,EAAW,GAAY,OAAO,CAAC,IAAM,CAAC,EAAE,MAAM,EACpD,GAAI,EAAS,OAAS,GAAK,IAAa,GAAM,CAC5C,IAAM,EAAa,EAAS,IAAI,CAAC,KAAM,CACrC,GAAI,GAAE,gBACJ,MAAO;AAAA,MAAsD,GAAE,QAEjE,IAAM,GAAM,GAAE,KAAO,UAAU,GAAE,QAAU,GAC3C,MAAO,WAAW,GAAE,eAAe;AAAA,MAAoB,GAAE,QAC1D,EACD,MAAU,MAAM;AAAA,EAAkC,EAAW,KAAK;AAAA,CAAI,GAAG,GAK7E,GAAI,IAAa,OACf,MAAO,CACL,KAAM,GACN,MAAO,EACP,SAAU,EACV,eACA,UAAW,IAAa,MAC1B,EAIF,IAAI,GAGJ,GAAI,EAAa,WAAW,OAAS,EAAG,CACtC,GAAe,CAAC,EAChB,IAAM,EAAgB,GAAsB,EAAa,UAAU,EACnE,GAAI,EAAc,KAChB,EAAO,EAAc,KAAO;AAAA,EAAO,EAErC,GAAe,EAAc,QAG/B,MAAO,CACL,OACA,MAAO,EACP,SAAU,EACV,SAAU,EAAS,OAAS,EAAI,EAAW,OAC3C,WAAY,EAAM,OAAS,EAAI,EAAa,OAC5C,UAAW,EAAM,OAAS,EAAI,EAAM,OAAS,OAC7C,eACA,eACF,EAOF,SAAS,EAAgB,CAAC,EAAyC,CACjE,IAAM,EAAmC,CAAC,EAE1C,QAAW,KAAQ,EAAQ,KACzB,GAAI,EAAK,OAAS,sBAChB,EAAU,KAAK,CAAI,EACd,QACL,EAAK,OAAS,0BACd,EAAK,aAAa,OAAS,sBAE3B,EAAU,KAAK,EAAK,WAAkC,EACjD,QACL,EAAK,OAAS,4BACd,EAAK,aAAa,OAAS,sBAE3B,EAAU,KAAK,EAAK,WAAkC,EAI1D,OAAO,EAOT,SAAS,EAAa,CAAC,EAAwB,CAC7C,IAAM,EAAc,CAAE,KAAM,EAAE,IAAK,EACnC,GAAI,EAAE,SAAU,EAAO,SAAW,GAClC,GAAI,EAAE,MAAO,EAAO,MAAQ,GAAc,EAAE,KAAK,EACjD,GAAI,EAAE,MACJ,EAAO,MAAQ,OAAO,YACpB,OAAO,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAG,KAAO,CAAC,EAAG,GAAc,CAAC,CAAC,CAAC,CAC/D,EAEF,GAAI,EAAE,QAAS,EAAO,QAAU,EAAE,QAAQ,IAAI,EAAa,EAC3D,OAAO,EAuCT,SAAS,EAAoB,CAC3B,EACA,EACA,EAAwB,CAAC,EACzB,EAA0B,CAAC,EACnB,CACR,IAAM,EAAiC,CAAC,EAExC,QAAY,EAAM,KAAU,OAAO,QAAQ,EAAM,MAAM,EAAG,CAKxD,GAJA,EAAU,GAAQ,CAChB,KAAM,GAAc,EAAM,IAAI,EAC9B,SAAU,EAAM,QAClB,EACI,EAAM,UAAY,OACpB,EAAU,GAAM,QAAU,EAAM,QAElC,GAAI,EAAM,YACR,EAAU,GAAM,YAAc,EAAM,YAIxC,IAAM,EAAgB,CACpB,OAAQ,CACV,EAEA,GAAI,EAAM,QAAS,CAIjB,GAHA,EAAS,QAAU,CACjB,KAAM,GAAc,EAAM,OAAO,CACnC,EACI,EAAU,eACZ,EAAS,QAAQ,SAAW,EAAU,eAGxC,GAAI,EAAO,eAAiB,OAC1B,EAAS,WAAa,GACjB,QAAI,EAAO,eAAiB,SACjC,EAAS,aAAe,GAI5B,GAAI,EAAM,YACR,EAAS,YAAc,EAAM,YAI/B,GAAI,EAAO,OACT,EAAS,OAAS,GAIpB,GAAI,EAAO,KACT,EAAS,KAAO,GAIlB,GAAI,EAAU,OAAQ,CACpB,IAAQ,OAAM,QAAS,EAAU,OACjC,EAAS,OAAS,GAAG,KAAQ,IAG/B,MAAO,GAAG,aAAoB,KAAK,UAAU,EAAU,KAAM,CAAC,IAoFhE,SAAS,EAAqB,CAC5B,EACA,EACe,CACf,IAAI,EAEJ,OAAQ,EAAK,UACN,SACH,EAAQ,UAAU,iBAClB,UACG,SACH,EAAQ,UAAU,iBAClB,UACG,UACH,EAAQ,WAAW,uCAA+C,MAClE,UACG,uBACH,EAAQ,WAAW,uCAA+C,SAAiB,SACnF,UACG,UACH,EAAQ,UAAU,kBAClB,UACG,OACH,MAAO,GAAG,iBACP,YACH,MAAO,GAAG,sBACP,QACH,EAAQ,kBAAkB,KAC1B,UACG,SAEH,EAAQ,WAAW,qBAA6B,+BAAuC,MACvF,UACG,QAAS,CACZ,IAAM,EAAU,EAAa,QAC1B,IAAI,CAAC,IAAsB,GAAsB,EAAW,CAAC,CAAC,EAC9D,OAAO,CAAC,IAAqB,IAAM,IAAI,EAC1C,GAAI,EAAO,SAAW,EAAG,OAAO,KAChC,EAAQ,IAAI,EAAO,KAAK,MAAM,KAC9B,KACF,KACK,MACH,OAAO,aAEP,OAAO,KAIX,GAAI,GAAS,EAAK,SAChB,EAAQ,IAAI,iBAAyB,KAGvC,OAAO,EOltCF,SAAS,EAAkB,CAAC,EAA4B,CAC7D,IAAI,EAEJ,OAAQ,EAAG,UACJ,SACH,EAAO,SACP,UACG,aACA,cACA,uBACH,EAAO,SACP,UACG,UACH,EAAO,UACP,UACG,OACH,MAAO,WACJ,YACH,MAAO,gBACJ,MACH,EAAO,MACP,UACG,QACH,GAAI,EAAG,MAAO,CACZ,IAAM,EAAQ,GAAmB,EAAG,KAAK,EAEzC,EAAO,EAAM,SAAS,GAAG,EAAI,IAAI,OAAa,GAAG,MAEjD,OAAO,QAET,UACG,SACH,GAAI,EAAG,OAAS,OAAO,KAAK,EAAG,KAAK,EAAE,OAAS,EAI7C,EAAO,KAHQ,OAAO,QAAQ,EAAG,KAAK,EACnC,IAAI,EAAE,EAAG,KAAO,GAAG,MAAM,GAAmB,CAAC,GAAG,EAChD,KAAK,IAAI,MAGZ,OAAO,sBAET,UACG,QACH,GAAI,EAAG,SAAW,EAAG,QAAQ,OAAS,EACpC,OAAO,EAAG,QAAQ,IAAI,EAAkB,EAAE,KAAK,KAAK,EAEtD,EAAO,MACP,cAEA,EAAO,MAGX,GAAI,EAAG,SACL,MAAO,GAAG,WAEZ,OAAO,EAMT,SAAS,EAAgB,CACvB,EACA,EACA,EACA,EACQ,CACR,IAAM,EAAS,OAAO,QAAQ,EAAK,MAAM,EACtC,IAAI,EAAE,EAAO,KAAO,CACnB,IAAM,EAAW,CAAC,EAAE,SACd,EAAS,GAAmB,EAAE,IAAI,EACxC,OAAO,EAAW,GAAG,OAAW,IAAW,GAAG,MAAU,IACzD,EACA,KAAK,IAAI,EAEN,EAAa,EAAK,QAAU,GAAmB,EAAK,OAAO,EAAI,MAOrE,MAAO,GANQ,EACX,EACE,0BACA,0BACF,sBAEgB,KAAQ,OAAY,KAoB1C,SAAS,EAAa,CAAC,EAAyC,CAC9D,IAAM,EAAS,IAAI,IACf,EAGE,EAAS,kDACf,OAAQ,EAAI,EAAO,KAAK,CAAM,KAAO,KACnC,EAAO,IAAI,EAAE,GAAI,CAAE,SAAU,GAAM,UAAW,CAAC,CAAC,EAAE,EAAG,CAAC,EAIxD,IAAM,EAAU,+CAChB,OAAQ,EAAI,EAAQ,KAAK,CAAM,KAAO,KACpC,EAAO,IAAI,EAAE,GAAI,CAAE,SAAU,GAAM,UAAW,CAAC,CAAC,EAAE,EAAG,CAAC,EAIxD,IAAM,EAAQ,2DACd,OAAQ,EAAI,EAAM,KAAK,CAAM,KAAO,KAClC,EAAO,IAAI,EAAE,GAAI,CAAE,SAAU,GAAM,UAAW,CAAC,CAAC,EAAE,EAAG,CAAC,EAIxD,IAAM,EAAS,iCACf,OAAQ,EAAI,EAAO,KAAK,CAAM,KAAO,KACnC,EAAO,IAAI,EAAE,GAAI,CAAE,SAAU,GAAM,UAAW,EAAM,CAAC,EAIvD,IAAM,EAAY,oCAClB,OAAQ,EAAI,EAAU,KAAK,CAAM,KAAO,KACtC,EAAO,IAAI,EAAE,GAAI,CAAE,SAAU,GAAM,UAAW,EAAM,CAAC,EAIvD,IAAM,EAAO,8CACb,OAAQ,EAAI,EAAK,KAAK,CAAM,KAAO,KACjC,EAAO,IAAI,EAAE,GAAI,CAAE,SAAU,GAAM,UAAW,EAAM,CAAC,EAIvD,IAAM,EAAa,gCACnB,OAAQ,EAAI,EAAW,KAAK,CAAM,KAAO,KAAM,CAC7C,IAAM,EAAQ,EAAE,GAAG,MAAM,GAAG,EAAE,IAAI,CAAC,IAAM,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC,EACnE,QAAW,KAAS,EAAO,CACzB,IAAM,EAAe,EAAM,OAAS,EAAI,EAAM,GAAK,EAAM,GACzD,GAAI,GAAgB,QAAQ,KAAK,CAAY,EAC3C,EAAO,IAAI,EAAc,CAAE,SAAU,GAAM,UAAW,EAAM,CAAC,GAKnE,OAAO,EAWT,SAAS,EAAwB,CAC/B,EACoC,CACpC,IAAM,EAAS,IAAI,IAGb,EACJ,yEACE,EACJ,OAAQ,EAAI,EAAQ,KAAK,CAAM,KAAO,KAAM,CAC1C,IAAM,EAAO,EAAE,GACT,EAAgB,EAAE,GAClB,EAAa,EAAE,MAAQ,EAAE,GAAG,OAAS,EAGvC,EAAQ,EACR,EAAI,EAAa,EACrB,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,GAAI,EAAO,KAAO,IAAK,IAClB,QAAI,EAAO,KAAO,IAAK,IAC5B,IAEF,IAAM,EAAO,EAAO,MAAM,EAAa,EAAG,EAAI,CAAC,EAG3C,EACJ,GAAI,EACF,EAAa,EAAc,MAAM,GAAG,EAAE,IAAI,CAAC,IAAO,EAAG,KAAK,CAAC,EAI7D,IAAM,EAA0C,CAAC,EAC3C,EAAc,EAAK,MAAM,0BAA0B,EACzD,GAAI,EAAa,CACf,IAAM,EAAY,EAAY,GACxB,EAAe,GAAY,CAAS,EAC1C,QAAW,KAAS,EAAc,CAChC,IAAM,EAAK,EAAM,MAAM,oBAAoB,EAC3C,GAAI,EACF,EAAO,KAAK,CAAE,KAAM,EAAG,GAAI,QAAS,EAAG,GAAG,KAAK,CAAE,CAAC,GAMxD,IAAI,EACE,EAAe,EAAK,MAAM,6BAA6B,EAC7D,GAAI,EACF,EAAU,EAAa,GAAG,KAAK,EAGjC,EAAO,IAAI,EAAM,CAAE,SAAQ,UAAS,YAAW,CAAC,EAGlD,OAAO,EAcT,SAAS,EAAa,CAAC,EAAwC,CAC7D,IAAM,EAAS,IAAI,IAGb,EACJ,gFACE,EACJ,OAAQ,EAAI,EAAQ,KAAK,CAAM,KAAO,KAAM,CAC1C,IAAM,EAAY,EAAE,GACd,EAAiB,EAAE,MAAQ,EAAE,GAAG,OAAS,EAG3C,EAAQ,EACR,EAAI,EAAiB,EACzB,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,GAAI,EAAO,KAAO,IAAK,IAClB,QAAI,EAAO,KAAO,IAAK,IAC5B,IAEF,IAAM,EAAY,EAAO,MAAM,EAAiB,EAAG,EAAI,CAAC,EAGlD,EAAY,EAAU,QAAQ,aAAa,EAC7C,EAAa,GACjB,GAAI,IAAc,GAAI,CACpB,IAAM,EAAa,EAAU,QAAQ,IAAK,CAAS,EACnD,GAAI,IAAe,GAAI,CACrB,IAAI,EAAQ,EACR,EAAI,EAAa,EACrB,MAAO,EAAI,EAAU,QAAU,EAAQ,EAAG,CACxC,GAAI,EAAU,KAAO,IAAK,IACrB,QAAI,EAAU,KAAO,IAAK,IAC/B,IAEF,EAAa,EAAU,MAAM,EAAa,EAAG,EAAI,CAAC,EAAE,KAAK,GAM7D,IAAM,EAAgC,CAAC,EACvC,CACE,IAAI,EAAM,EACN,EAAY,EAEhB,MAAO,EAAM,EAAU,OAAQ,CAC7B,IAAM,EAAK,EAAU,GAGrB,GAAI,IAAO,IAAK,CACd,IACA,IACA,SAEF,GAAI,IAAO,IAAK,CACd,IACA,IACA,SAIF,GAAI,IAAc,EAAG,CACnB,IAAM,EAAc,EAAU,MAAM,CAAG,EAAE,MAAM,aAAa,EAC5D,GAAI,EAAa,CACf,IAAM,EAAO,EAAY,GACzB,GAAI,IAAS,eAAiB,IAAS,OAAS,IAAS,MAAO,CAE9D,GAAO,EAAK,OACZ,SACK,KAEL,IAAM,EAAa,EAAM,EAAY,GAAG,OAAS,EAC7C,EAAQ,EACR,EAAI,EAAa,EACrB,MAAO,EAAI,EAAU,QAAU,EAAQ,EAAG,CACxC,GAAI,EAAU,KAAO,IAAK,IACrB,QAAI,EAAU,KAAO,IAAK,IAC/B,IAEF,IAAM,EAAS,EAAU,MAAM,EAAa,EAAG,EAAI,CAAC,EAAE,KAAK,EAGrD,EAAa,EAAU,MAAM,CAAC,EAAE,MAAM,qBAAqB,EAC3D,EAAa,EAAa,EAAW,GAAG,KAAK,EAAI,KAEvD,EAAQ,KAAK,CAAE,OAAM,SAAQ,YAAW,CAAC,EACzC,EAAM,EACN,WAKN,IAEJ,CAEA,EAAO,IAAI,EAAW,CACpB,KAAM,EACN,kBAAmB,EACnB,SACF,CAAC,EAGH,OAAO,EAOT,SAAS,EAAW,CAAC,EAA4B,CAC/C,IAAM,EAAmB,CAAC,EACtB,EAAQ,EACR,EAAU,GACd,QAAW,KAAM,EAAU,CACzB,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,IACvC,QAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,IAEjD,GAAI,IAAO,KAAO,IAAU,EAC1B,EAAO,KAAK,EAAQ,KAAK,CAAC,EAC1B,EAAU,GAEV,QAAW,EAGf,GAAI,EAAQ,KAAK,EAAG,EAAO,KAAK,EAAQ,KAAK,CAAC,EAC9C,OAAO,EAUT,SAAS,EAAa,CAAC,EAA0B,CAC/C,GAAI,CAAC,EAAS,KAAK,EAAG,MAAO,GAE7B,OAAO,GAAY,CAAQ,EACxB,IAAI,CAAC,IAAY,CAEhB,IAAM,EAAa,EAAQ,MAAM,oBAAoB,EACrD,GAAI,EAAY,CACd,IAAM,EAAO,EAAW,GAClB,EAAS,GAAuB,EAAW,GAAG,KAAK,CAAC,EAC1D,MAAO,GAAG,MAAS,IAErB,IAAM,EAAU,EAAQ,MAAM,oBAAoB,EAClD,GAAI,EAAS,CACX,IAAM,EAAO,EAAQ,GACf,EAAS,GAAuB,EAAQ,GAAG,KAAK,CAAC,EACvD,MAAO,GAAG,OAAU,IAGtB,GAAI,EAAQ,WAAW,GAAG,EAAG,MAAO,eACpC,MAAO,GAAG,SACX,EACA,KAAK,IAAI,EAId,SAAS,EAAsB,CAAC,EAAqC,CACnE,IAAM,EAAS,IAAI,IACf,EAGE,EAAW,kDACjB,OAAQ,EAAI,EAAS,KAAK,CAAM,KAAO,KACrC,EAAO,IAAI,EAAE,GAAI,EAAE,GAAG,KAAK,CAAC,EAI9B,IAAM,EAAW,mDACjB,OAAQ,EAAI,EAAS,KAAK,CAAM,KAAO,KACrC,GAAI,CAAC,EAAO,IAAI,EAAE,EAAE,EAClB,EAAO,IAAI,EAAE,GAAI,EAAE,GAAG,KAAK,CAAC,EAKhC,IAAM,EACJ,iFACF,OAAQ,EAAI,EAAQ,KAAK,CAAM,KAAO,KACpC,EAAO,IAAI,EAAE,GAAI,EAAE,GAAG,KAAK,CAAC,EAG9B,OAAO,EAWT,SAAS,EAAc,CAAC,EAA0C,CAChE,IAAM,EAAS,IAAI,IACb,EAAK,0DACP,EACJ,OAAQ,EAAI,EAAG,KAAK,CAAM,KAAO,KAAM,CACrC,IAAM,EAAO,EAAE,GACT,EAAa,EAAE,GAAG,MAAM,GAAG,EAAE,IAAI,CAAC,IAAO,CAC7C,OAAO,EAAG,KAAK,EAAE,MAAM,MAAM,EAAE,GAAG,KAAK,EACxC,EAGK,EAAa,EAAE,MAAQ,EAAE,GAAG,OAAS,EACvC,EAAQ,EACR,EAAI,EAAa,EACrB,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,GAAI,EAAO,KAAO,IAAK,IAClB,QAAI,EAAO,KAAO,IAAK,IAC5B,IAEF,IAAM,EAAY,EAAO,MAAM,EAAa,EAAG,EAAI,CAAC,EAGhD,EACE,EAAY,EAAU,MAAM,oBAAoB,EACtD,GAAI,GAAa,EAAU,QAAU,OAAW,CAC9C,IAAM,EAAY,EAAU,MAAQ,EAAU,GAAG,OAAS,EACtD,EAAS,EACT,EAAI,EAAY,EACpB,MAAO,EAAI,EAAU,QAAU,EAAS,EAAG,CACzC,GAAI,EAAU,KAAO,IAAK,IACrB,QAAI,EAAU,KAAO,IAAK,IAC/B,IAEF,EAAc,EAAU,MAAM,EAAY,EAAG,EAAI,CAAC,EAAE,KAAK,EAG3D,EAAO,IAAI,EAAM,CAAE,aAAY,aAAY,CAAC,EAE9C,OAAO,EAWF,SAAS,EAAW,CACzB,EACA,EACA,EAA8B,CAAC,EACvB,CACR,IAAM,EAAkB,CAAC,EACnB,EAAU,GAAc,CAAM,EAC9B,EAAY,GAAuB,CAAM,EACzC,EAAU,GAAc,CAAM,EAC9B,EAAW,GAAe,CAAM,EAIhC,EAAe,EAAQ,KAAO,EAG9B,EAAU,IAAI,IAGpB,QAAY,EAAM,KAAS,OAAO,QAAQ,EAAO,KAAK,EAAG,CAEvD,GAAI,EAAK,SAAS,GAAG,EAAG,SAExB,IAAM,EAAa,EAAQ,IAAI,CAAI,EAC7B,EAAa,EAAe,CAAC,CAAC,GAAY,SAAW,GACrD,EAAY,GAAY,WAAa,GAE3C,GAAI,CAAC,EAAY,SAEjB,GAAI,EAAK,YACP,EAAM,KAAK,OAAO,EAAK,gBAAgB,EAGzC,EAAM,KAAK,GAAiB,EAAM,EAAM,GAAM,CAAS,CAAC,EACxD,EAAQ,IAAI,CAAI,EAOlB,QAAY,EAAM,KAAc,EAAS,CACvC,GAAI,EAAQ,IAAI,CAAI,EAAG,SAEvB,IAAM,EAAa,EAAQ,IAAI,CAAI,EAEnC,GAAI,EADe,EAAe,CAAC,CAAC,GAAY,SAAW,IAC1C,SAEjB,IAAM,EAAW,EAAU,kBACvB,GAAc,EAAU,iBAAiB,EACzC,GAMJ,GAHA,EAAM,KAAK,2BAA2B,KAAQ,UAAiB,EAG3D,GAAY,EAAU,QAAQ,OAAS,EAAG,CAE5C,GADA,EAAM,KAAK,wBAAwB,KAAQ,EACvC,EAAU,kBACZ,EAAM,KAAK,iBAAiB,KAAY,EAE1C,QAAW,KAAU,EAAU,QAAS,CACtC,IAAM,EAAU,EAAO,OAAS,GAAc,EAAO,MAAM,EAAI,GAC/D,EAAM,KAAK,KAAK,EAAO,QAAQ,UAAgB,EAEjD,EAAM,KAAK,GAAG,EAGhB,EAAQ,IAAI,CAAI,EAMlB,QAAY,EAAM,KAAe,EAAW,CAC1C,GAAI,EAAQ,IAAI,CAAI,EAAG,SAEvB,IAAM,EAAa,EAAQ,IAAI,CAAI,EAEnC,GAAI,EADe,EAAe,CAAC,CAAC,GAAY,SAAW,IAC1C,SAEjB,IAAM,EAAS,GAAuB,CAAU,EAChD,EAAM,KACJ,wBAAwB,6CAET,8BAGjB,EACA,EAAQ,IAAI,CAAI,EAMlB,QAAY,EAAM,KAAS,EAAU,CACnC,GAAI,EAAQ,IAAI,CAAI,EAAG,SAEvB,IAAM,EAAa,EAAQ,IAAI,CAAI,EAEnC,GAAI,EADe,EAAe,CAAC,CAAC,GAAY,SAAW,IAC1C,SAEjB,IAAM,EACJ,EAAK,WAAW,OAAS,EAAI,IAAI,EAAK,WAAW,KAAK,IAAI,KAAO,GAEnE,GAAI,EAAK,YAAa,CAEpB,IAAM,EAAY,EAAK,YACpB,MAAM;AAAA,CAAI,EACV,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EACnB,OAAO,CAAC,IAAM,EAAE,OAAS,CAAC,EAC1B,IAAI,CAAC,IAAM,KAAK,GAAG,EACnB,KAAK;AAAA,CAAI,EACZ,EAAM,KAAK,oBAAoB,IAAO;AAAA,EAAmB;AAAA,EAAc,EAGvE,OAAM,KACJ,2BAA2B,4EAG7B,EAEF,EAAQ,IAAI,CAAI,EAMlB,IAAM,EAAY,GAAyB,CAAM,EACjD,QAAY,EAAM,KAAW,EAAW,CACtC,GAAI,EAAQ,IAAI,CAAI,EAAG,SAEvB,IAAM,EAAa,EAAQ,IAAI,CAAI,EAEnC,GAAI,EADe,EAAe,CAAC,CAAC,GAAY,SAAW,IAC1C,SAGjB,IAAM,EAAU,IAAI,IAClB,EAAO,YAAY,IAAI,CAAC,IAAO,EAAG,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,GAAK,CAAC,CAC9D,EACM,EAAe,EAAO,WACxB,IAAI,EAAO,WAAW,KAAK,IAAI,KAC/B,GAEE,EAAW,EAAO,OACrB,IAAI,CAAC,IAAM,CACV,IAAM,EAAS,EAAQ,IAAI,EAAE,OAAO,EAChC,EAAE,QACF,GAAuB,EAAE,OAAO,EACpC,MAAO,GAAG,EAAE,SAAS,IACtB,EACA,KAAK,IAAI,EACN,EACJ,EAAO,UAAY,OACf,EAAQ,IAAI,EAAO,OAAO,EACxB,EAAO,QACP,GAAuB,EAAO,OAAO,EACvC,OACN,EAAM,KACJ,eAAe,IAAO,QAAmB,SAAgB,IAC3D,EACA,EAAQ,IAAI,CAAI,EAGlB,GAAI,EAAQ,WAAY,CACtB,IAAM,EAAW,EAAM,IAAI,CAAC,IAAM,KAAK,GAAG,EAAE,KAAK;AAAA,CAAI,EACrD,MAAO,mBAAmB,EAAQ;AAAA,EAAkB;AAAA;AAAA,EAGtD,OAAO,EAAM,KAAK;AAAA,CAAI,EAAI;AAAA,EAQ5B,SAAS,EAAsB,CAAC,EAAyB,CACvD,IAAM,EAAI,EAAQ,KAAK,EAIvB,GAAI,GAAgB,CAAC,EAAG,CACtB,IAAM,EAAU,GAAY,CAAC,EAAE,IAAI,CAAC,IAAM,GAAuB,EAAE,KAAK,CAAC,CAAC,EAC1E,MAAO,CAAC,GAAG,IAAI,IAAI,CAAO,CAAC,EAAE,KAAK,KAAK,EAIzC,GAAI,QAAQ,KAAK,CAAC,EAAG,MAAO,SAG5B,GAAI,IAAM,QAAU,IAAM,QAAS,MAAO,UAG1C,GAAI,IAAM,OAAQ,MAAO,OACzB,GAAI,IAAM,YAAa,MAAO,YAG9B,GAAI,kBAAkB,KAAK,CAAC,EAAG,MAAO,SACtC,GAAI,aAAa,KAAK,CAAC,EAAG,MAAO,SAGjC,GAAI,EAAE,WAAW,GAAG,EAAG,MAAO,QAG9B,GAAI,EAAE,WAAW,GAAG,EAAG,MAAO,sBAE9B,MAAO,MAIT,SAAS,EAAe,CAAC,EAAoB,CAC3C,IAAI,EAAQ,EACR,EAAuB,KAC3B,QAAW,KAAM,EAAG,CAClB,GAAI,EAAO,CACT,GAAI,IAAO,EAAO,EAAQ,KAC1B,SAEF,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,CAC1C,EAAQ,EACR,SAEF,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,IACvC,QAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,IAC5C,QAAI,IAAO,KAAO,IAAU,EAAG,MAAO,GAE7C,MAAO,GAIT,SAAS,EAAW,CAAC,EAAqB,CACxC,IAAM,EAAmB,CAAC,EACtB,EAAQ,EACR,EAAuB,KACvB,EAAU,GACd,QAAW,KAAM,EAAG,CAClB,GAAI,EAAO,CAET,GADA,GAAW,EACP,IAAO,EAAO,EAAQ,KAC1B,SAEF,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,CAC1C,EAAQ,EACR,GAAW,EACX,SAEF,GAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,IACvC,QAAI,IAAO,KAAO,IAAO,KAAO,IAAO,IAAK,IAEjD,GAAI,IAAO,KAAO,IAAU,EAC1B,EAAO,KAAK,CAAO,EACnB,EAAU,GAEV,QAAW,EAGf,GAAI,EAAS,EAAO,KAAK,CAAO,EAChC,OAAO,ECruBT,0BAmGA,IAAM,GAAoB,IAAI,IAAI,CAEhC,QACA,cACA,aACA,gBACA,eACA,aACA,aACA,aACA,mBACA,aACA,YACA,iBACA,kBACA,iBACA,UACA,gBACA,aACA,eACA,gBACA,kBACA,sBACA,eACA,oBACA,cAEA,cACA,gBAEA,OACA,UACA,cACA,aACA,WACA,mBACA,aACA,OACA,UACA,OAEA,mBACA,sBACA,oBACA,oBACA,kBACA,oBACA,mBACA,mBACA,mBACA,oBACA,iBACA,kBACA,uBACA,mBACA,sBACA,kBACA,oBACA,qBACA,mBACA,oBACA,oBACA,oBACA,mBACA,kBACA,kBACA,kBACA,kBACA,mBAEA,gBACA,iBACA,cACA,mBACA,iBACA,iBACA,iBACA,oBAEA,WACA,iBACA,eACA,eACA,eACA,sBACA,UACA,kBACA,WACA,YAEA,QACA,YACA,cAEA,mBACA,iBACA,uBACA,4BACA,iBACA,sBACA,sBACA,mBAEA,SACA,WACA,UACA,YACA,SACA,UAEA,2BACA,wBACA,yBACA,kBACA,YACA,cACA,cACA,gBACA,eACA,YACA,cAEA,SACA,eACA,gBACA,4BACA,mBACA,iBACA,cAEA,YACA,iBACA,aACA,WACA,eACA,SACA,eACA,YACA,cACA,eACA,mBACA,iBACA,aACA,eACA,eACF,CAAC,EAOD,SAAS,CAAa,CACpB,EACA,EACA,EACA,EACQ,CACR,G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",
|
|
43
|
+
"debugId": "948AC34BF53CD3C264756E2164756E21",
|
|
44
44
|
"names": []
|
|
45
45
|
}
|