tjs-lang 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +7 -1
- package/dist/index.js +111 -107
- package/dist/index.js.map +3 -3
- package/dist/src/lang/emitters/js-wasm.d.ts +2 -0
- package/dist/src/lang/parser-types.d.ts +7 -0
- package/dist/tjs-browser-from-ts.js +1 -1
- package/dist/tjs-browser-from-ts.js.map +1 -1
- package/dist/tjs-browser.js +93 -89
- package/dist/tjs-browser.js.map +3 -3
- package/dist/tjs-eval.js +14 -14
- package/dist/tjs-eval.js.map +2 -2
- package/dist/tjs-from-ts.js +1 -1
- package/dist/tjs-from-ts.js.map +1 -1
- package/dist/tjs-lang.js +94 -90
- package/dist/tjs-lang.js.map +3 -3
- package/dist/tjs-runtime.js +1 -1
- package/dist/tjs-runtime.js.map +1 -1
- package/dist/tjs-vm.js +2 -2
- package/dist/tjs-vm.js.map +2 -2
- package/docs/type-system-north-star.md +100 -0
- package/package.json +1 -1
- package/src/lang/emitters/js-wasm.ts +8 -4
- package/src/lang/emitters/js.ts +36 -11
- package/src/lang/parser-transforms.ts +4 -1
- package/src/lang/parser-types.ts +7 -0
- package/src/lang/parser.ts +9 -1
- package/src/lang/predicate-report.test.ts +24 -0
- package/src/lang/wasm-fallback-warning.test.ts +50 -0
- package/src/lang/wasm-intdiv-lint.test.ts +45 -0
- package/src/lang/wasm-ready.test.ts +94 -0
- package/src/lang/wasm-simd-ops.test.ts +84 -0
- package/src/lang/wasm.ts +61 -2
package/dist/tjs-lang.js
CHANGED
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
var
|
|
1
|
+
var vs=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var Dr=vs((Ea,ki)=>{ki.exports={name:"tjs-lang",version:"0.9.1",description:"Type-safe JavaScript dialect with runtime validation, sandboxed VM execution, and AI agent orchestration. Transpiles TypeScript to validated JS with fuel-metered execution for untrusted code.",keywords:["typescript","transpiler","runtime-validation","type-safety","sandbox","virtual-machine","wasm-alternative","ai-agents","llm","orchestration","security","fuel-metering","capability-based","json-ast","untrusted-code"],license:"Apache-2.0",main:"./dist/index.js",types:"./dist/src/index.d.ts",typesVersions:{"*":{eval:["./dist/src/lang/eval.d.ts"],lang:["./dist/src/lang/transpiler.d.ts"],"lang/from-ts":["./dist/src/lang/emitters/from-ts.d.ts"],browser:["./dist/src/lang/browser.d.ts"],"browser/from-ts":["./dist/src/lang/browser-from-ts.d.ts"],vm:["./dist/src/vm/index.d.ts"],batteries:["./dist/src/batteries/index.d.ts"],css:["./dist/src/css/index.d.ts"],schema:["./dist/src/schema/index.d.ts"],runtime:["./dist/src/lang/runtime.d.ts"]}},exports:{".":{bun:"./src/index.ts",types:"./dist/src/index.d.ts",default:"./dist/index.js"},"./eval":{bun:"./src/lang/eval.ts",types:"./dist/src/lang/eval.d.ts",default:"./dist/tjs-eval.js"},"./lang":{bun:"./src/lang/transpiler.ts",types:"./dist/src/lang/transpiler.d.ts",default:"./dist/tjs-lang.js"},"./lang/from-ts":{bun:"./src/lang/emitters/from-ts.ts",types:"./dist/src/lang/emitters/from-ts.d.ts",default:"./dist/tjs-from-ts.js"},"./browser":{types:"./dist/src/lang/browser.d.ts",default:"./dist/tjs-browser.js"},"./browser/from-ts":{types:"./dist/src/lang/browser-from-ts.d.ts",default:"./dist/tjs-browser-from-ts.js"},"./vm":{bun:"./src/vm/index.ts",types:"./dist/src/vm/index.d.ts",default:"./dist/tjs-vm.js"},"./batteries":{bun:"./src/batteries/index.ts",types:"./dist/src/batteries/index.d.ts",default:"./dist/tjs-batteries.js"},"./linalg":{bun:"./src/linalg/index.tjs",default:"./dist/tjs-linalg.js"},"./css":{bun:"./src/css/index.ts",types:"./dist/src/css/index.d.ts",default:"./dist/tjs-css.js"},"./schema":{bun:"./src/schema/index.ts",types:"./dist/src/schema/index.d.ts",default:"./dist/tjs-schema.js"},"./runtime":{bun:"./src/lang/runtime.ts",types:"./dist/src/lang/runtime.d.ts",default:"./dist/tjs-runtime.js"},"./bun-plugin":{bun:"./src/bun-plugin/tjs-plugin.ts"},"./src":"./src/index.ts","./editors/monaco":"./editors/monaco/ajs-monarch.js","./editors/codemirror":"./editors/codemirror/ajs-language.js","./editors/ace":"./editors/ace/ajs-mode.js"},bin:{tjs:"./src/cli/tjs.ts",tjsx:"./src/cli/tjsx.ts","tjs-playground":"./src/cli/playground.ts","create-tjs-app":"./src/cli/create-app.ts","ajs-install-vscode":"./bin/install-vscode.sh","ajs-install-cursor":"./bin/install-cursor.sh"},type:"module",files:["dist","src","docs","editors","bin","demo","tjs-lang.svg","CONTEXT.md","CLAUDE.md","llms.txt"],sideEffects:["./src/schema/index.ts","./dist/tjs-schema.js"],repository:{type:"git",url:"https://github.com/tonioloewald/tjs-lang.git"},devDependencies:{"@codemirror/lang-css":"^6.3.1","@codemirror/lang-html":"^6.4.11","@codemirror/lang-javascript":"^6.2.4","@codemirror/lang-markdown":"^6.5.0","@codemirror/state":"^6.5.3","@codemirror/theme-one-dark":"^6.1.3","@codemirror/view":"^6.39.9","@eslint/js":"^10.0.1","@happy-dom/global-registrator":"^20.1.0","@types/bun":"latest","@types/jsdom":"^21.1.7","acorn-walk":"^8.3.4",chokidar:"^4.0.3",codemirror:"^6.0.2",esbuild:"^0.28.0",eslint:"^10.4.1",firebase:"^10.12.0","firebase-admin":"^13.6.0","firebase-functions":"^7.0.5",globals:"^17.6.0",marked:"^9.1.6",prettier:"^2.8.8",tosijs:"^1.5.6","tosijs-ui":"^1.4.7",typescript:"^5.6.2","typescript-eslint":"^8.61.0",valibot:"^0.36.0",vitest:"^2.0.5"},scripts:{format:"bun eslint src --fix && bun prettier --write .",lint:"eslint src","build:grammars":"bun editors/build-grammars.ts","build:editors":"bun scripts/build-editors.ts","test:fast":"SKIP_LLM_TESTS=1 SKIP_BENCHMARKS=1 bun test","test:llm":"bun test src/batteries/models.integration.test.ts",bench:"bun bin/benchmarks.ts",make:"rm -rf dist && bun format && bun run build:grammars && bun run build:editors && tsc -p tsconfig.build.json && bun scripts/build.ts","build:bundles":"bun scripts/build.ts",typecheck:"tsc --noEmit",latest:"rm -rf node_modules && bun install",docs:"node bin/docs.js",dev:"bun run bin/dev.ts","build:demo":"bun scripts/build-demo.ts","build:cli":"bun build src/cli/tjs.ts --compile --outfile=dist/tjs && bun build src/cli/tjsx.ts --compile --outfile=dist/tjsx","functions:build":"cd functions && npm run build","functions:deploy":"cd functions && npm run deploy","functions:serve":"cd functions && npm run serve","deploy:hosting":"bun run build:demo && firebase deploy --only hosting",deploy:"bun run build:demo && bun run functions:deploy && firebase deploy --only hosting",start:"bun run build:demo && bun run dev"},dependencies:{acorn:"^8.15.0","acorn-loose":"^8.5.2","acorn-walk":"^8.3.4","tosijs-schema":"^1.4.0"}}});import*as Sr from"acorn";var W=class extends Error{line;column;source;filename;constructor(n,t,r,s){let o=`${s||"<source>"}:${t.line}:${t.column}`;super(`${n} at ${o}`),this.name="TranspileError",this.line=t.line,this.column=t.column,this.source=r,this.filename=s}},G=class extends W{constructor(n,t,r,s){super(n,t,r,s),this.name="SyntaxError"}formatWithContext(n=2){if(!this.source)return this.message;let t=this.source.split(`
|
|
2
2
|
`),r=this.line-1,s=Math.max(0,r-n),o=Math.min(t.length-1,r+n),i=[],a=String(o+1).length;for(let c=s;c<=o;c++){let l=String(c+1).padStart(a),f=c===r?">":" ";if(i.push(`${f} ${l} | ${t[c]}`),c===r){let p=" ".repeat(a+4+this.column);i.push(`${p}^ ${this.message.split(" at ")[0]}`)}}return i.join(`
|
|
3
|
-
`)}};function re(e){return{depth:e.depth+1,locals:new Map,parent:e,parameters:e.parameters,atoms:e.atoms,warnings:e.warnings,source:e.source,filename:e.filename,options:e.options,helpers:e.helpers,helperSteps:e.helperSteps,helperTransforming:e.helperTransforming}}function U(e){return e.loc?{line:e.loc.start.line,column:e.loc.start.column}:{line:1,column:0}}import*as ut from"acorn";function ie(e,n,t,r,s){t||(t=
|
|
4
|
-
`)}var lt=e=>e&&e.type==="Literal"&&typeof e.value=="string";function
|
|
5
|
-
${ft(r.diagnostics)}`);let s=t.fuel??1e6,o=
|
|
3
|
+
`)}};function re(e){return{depth:e.depth+1,locals:new Map,parent:e,parameters:e.parameters,atoms:e.atoms,warnings:e.warnings,source:e.source,filename:e.filename,options:e.options,helpers:e.helpers,helperSteps:e.helperSteps,helperTransforming:e.helperTransforming}}function U(e){return e.loc?{line:e.loc.start.line,column:e.loc.start.column}:{line:1,column:0}}import*as ut from"acorn";function ie(e,n,t,r,s){t||(t=j),(function o(i,a,c){var l=c||i.type;t[l](i,a,o),n[l]&&n[l](i,a)})(e,r,s)}function Ln(e,n,t,r,s){var o=[];t||(t=j),(function i(a,c,l){var f=l||a.type,p=a!==o[o.length-1];p&&o.push(a),t[f](a,c,i),n[f]&&n[f](a,c||o,o),p&&o.pop()})(e,r,s)}function Lt(e,n,t){t(e,n)}function we(e,n,t){}var j={};j.Program=j.BlockStatement=j.StaticBlock=function(e,n,t){for(var r=0,s=e.body;r<s.length;r+=1){var o=s[r];t(o,n,"Statement")}};j.Statement=Lt;j.EmptyStatement=we;j.ExpressionStatement=j.ParenthesizedExpression=j.ChainExpression=function(e,n,t){return t(e.expression,n,"Expression")};j.IfStatement=function(e,n,t){t(e.test,n,"Expression"),t(e.consequent,n,"Statement"),e.alternate&&t(e.alternate,n,"Statement")};j.LabeledStatement=function(e,n,t){return t(e.body,n,"Statement")};j.BreakStatement=j.ContinueStatement=we;j.WithStatement=function(e,n,t){t(e.object,n,"Expression"),t(e.body,n,"Statement")};j.SwitchStatement=function(e,n,t){t(e.discriminant,n,"Expression");for(var r=0,s=e.cases;r<s.length;r+=1){var o=s[r];t(o,n)}};j.SwitchCase=function(e,n,t){e.test&&t(e.test,n,"Expression");for(var r=0,s=e.consequent;r<s.length;r+=1){var o=s[r];t(o,n,"Statement")}};j.ReturnStatement=j.YieldExpression=j.AwaitExpression=function(e,n,t){e.argument&&t(e.argument,n,"Expression")};j.ThrowStatement=j.SpreadElement=function(e,n,t){return t(e.argument,n,"Expression")};j.TryStatement=function(e,n,t){t(e.block,n,"Statement"),e.handler&&t(e.handler,n),e.finalizer&&t(e.finalizer,n,"Statement")};j.CatchClause=function(e,n,t){e.param&&t(e.param,n,"Pattern"),t(e.body,n,"Statement")};j.WhileStatement=j.DoWhileStatement=function(e,n,t){t(e.test,n,"Expression"),t(e.body,n,"Statement")};j.ForStatement=function(e,n,t){e.init&&t(e.init,n,"ForInit"),e.test&&t(e.test,n,"Expression"),e.update&&t(e.update,n,"Expression"),t(e.body,n,"Statement")};j.ForInStatement=j.ForOfStatement=function(e,n,t){t(e.left,n,"ForInit"),t(e.right,n,"Expression"),t(e.body,n,"Statement")};j.ForInit=function(e,n,t){e.type==="VariableDeclaration"?t(e,n):t(e,n,"Expression")};j.DebuggerStatement=we;j.FunctionDeclaration=function(e,n,t){return t(e,n,"Function")};j.VariableDeclaration=function(e,n,t){for(var r=0,s=e.declarations;r<s.length;r+=1){var o=s[r];t(o,n)}};j.VariableDeclarator=function(e,n,t){t(e.id,n,"Pattern"),e.init&&t(e.init,n,"Expression")};j.Function=function(e,n,t){e.id&&t(e.id,n,"Pattern");for(var r=0,s=e.params;r<s.length;r+=1){var o=s[r];t(o,n,"Pattern")}t(e.body,n,e.expression?"Expression":"Statement")};j.Pattern=function(e,n,t){e.type==="Identifier"?t(e,n,"VariablePattern"):e.type==="MemberExpression"?t(e,n,"MemberPattern"):t(e,n)};j.VariablePattern=we;j.MemberPattern=Lt;j.RestElement=function(e,n,t){return t(e.argument,n,"Pattern")};j.ArrayPattern=function(e,n,t){for(var r=0,s=e.elements;r<s.length;r+=1){var o=s[r];o&&t(o,n,"Pattern")}};j.ObjectPattern=function(e,n,t){for(var r=0,s=e.properties;r<s.length;r+=1){var o=s[r];o.type==="Property"?(o.computed&&t(o.key,n,"Expression"),t(o.value,n,"Pattern")):o.type==="RestElement"&&t(o.argument,n,"Pattern")}};j.Expression=Lt;j.ThisExpression=j.Super=j.MetaProperty=we;j.ArrayExpression=function(e,n,t){for(var r=0,s=e.elements;r<s.length;r+=1){var o=s[r];o&&t(o,n,"Expression")}};j.ObjectExpression=function(e,n,t){for(var r=0,s=e.properties;r<s.length;r+=1){var o=s[r];t(o,n)}};j.FunctionExpression=j.ArrowFunctionExpression=j.FunctionDeclaration;j.SequenceExpression=function(e,n,t){for(var r=0,s=e.expressions;r<s.length;r+=1){var o=s[r];t(o,n,"Expression")}};j.TemplateLiteral=function(e,n,t){for(var r=0,s=e.quasis;r<s.length;r+=1){var o=s[r];t(o,n)}for(var i=0,a=e.expressions;i<a.length;i+=1){var c=a[i];t(c,n,"Expression")}};j.TemplateElement=we;j.UnaryExpression=j.UpdateExpression=function(e,n,t){t(e.argument,n,"Expression")};j.BinaryExpression=j.LogicalExpression=function(e,n,t){t(e.left,n,"Expression"),t(e.right,n,"Expression")};j.AssignmentExpression=j.AssignmentPattern=function(e,n,t){t(e.left,n,"Pattern"),t(e.right,n,"Expression")};j.ConditionalExpression=function(e,n,t){t(e.test,n,"Expression"),t(e.consequent,n,"Expression"),t(e.alternate,n,"Expression")};j.NewExpression=j.CallExpression=function(e,n,t){if(t(e.callee,n,"Expression"),e.arguments)for(var r=0,s=e.arguments;r<s.length;r+=1){var o=s[r];t(o,n,"Expression")}};j.MemberExpression=function(e,n,t){t(e.object,n,"Expression"),e.computed&&t(e.property,n,"Expression")};j.ExportNamedDeclaration=j.ExportDefaultDeclaration=function(e,n,t){e.declaration&&t(e.declaration,n,e.type==="ExportNamedDeclaration"||e.declaration.id?"Statement":"Expression"),e.source&&t(e.source,n,"Expression")};j.ExportAllDeclaration=function(e,n,t){e.exported&&t(e.exported,n),t(e.source,n,"Expression")};j.ImportDeclaration=function(e,n,t){for(var r=0,s=e.specifiers;r<s.length;r+=1){var o=s[r];t(o,n)}t(e.source,n,"Expression")};j.ImportExpression=function(e,n,t){t(e.source,n,"Expression")};j.ImportSpecifier=j.ImportDefaultSpecifier=j.ImportNamespaceSpecifier=j.Identifier=j.PrivateIdentifier=j.Literal=we;j.TaggedTemplateExpression=function(e,n,t){t(e.tag,n,"Expression"),t(e.quasi,n,"Expression")};j.ClassDeclaration=j.ClassExpression=function(e,n,t){return t(e,n,"Class")};j.Class=function(e,n,t){e.id&&t(e.id,n,"Pattern"),e.superClass&&t(e.superClass,n,"Expression"),t(e.body,n)};j.ClassBody=function(e,n,t){for(var r=0,s=e.body;r<s.length;r+=1){var o=s[r];t(o,n)}};j.MethodDefinition=j.PropertyDefinition=j.Property=function(e,n,t){e.computed&&t(e.key,n,"Expression"),e.value&&t(e.value,n,"Expression")};var As=new Set(["parseInt","parseFloat","isNaN","isFinite","encodeURIComponent","decodeURIComponent","String","Number","Boolean","Array","Object","Eq","NotEq","Is","IsNot","TypeOf"]),Ps=new Set(["Math","JSON","Object","Array","String","Number"]),Rs=new Set(["Math.random","Date.now"]);function Vn(e,n){let t=e[n],r=0;if(t==="*"||t==="+")r=1;else if(t==="{"){let s=e.slice(n).match(/^\{\d+,\}/);s&&(r=s[0].length)}return r===0?0:(e[n+r]==="?"&&r++,r)}function Ms(e){let n=[],t=0,r=!1;for(;t<e.length;){let s=e[t];if(s==="\\"){t+=2;continue}if(r){s==="]"&&(r=!1),t++;continue}if(s==="["){r=!0,t++;continue}if(s==="("){n.push({hadUnbounded:!1}),t++;continue}if(s===")"){let i=n.pop()??{hadUnbounded:!1},a=Vn(e,t+1);if(a>0){if(i.hadUnbounded)return"an unbounded quantifier is nested inside another (e.g. `(a+)+`)";n.length&&(n[n.length-1].hadUnbounded=!0),t+=1+a;continue}i.hadUnbounded&&n.length&&(n[n.length-1].hadUnbounded=!0),t++;continue}let o=Vn(e,t);if(o>0){n.length&&(n[n.length-1].hadUnbounded=!0),t+=o;continue}t++}return null}var Cs=new Set(["startsWith","endsWith","includes","indexOf","lastIndexOf","slice","substring","substr","toLowerCase","toUpperCase","trim","trimStart","trimEnd","split","replace","replaceAll","match","matchAll","charAt","charCodeAt","codePointAt","padStart","padEnd","repeat","concat","at","normalize","search","localeCompare","every","some","map","filter","reduce","reduceRight","find","findIndex","findLast","findLastIndex","flat","flatMap","join","keys","entries","values","forEach","test","exec","toFixed","toPrecision","toString","valueOf","hasOwnProperty"]),Jt=["fetch","XMLHttpRequest","WebSocket","Date","console","setTimeout","setInterval","requestAnimationFrame","queueMicrotask","localStorage","sessionStorage","indexedDB","document","window","globalThis","self","process","require","eval","Function","import","crypto","performance","navigator"];function Ns(e){let n=new Set(Jt);for(let[t,r]of Object.entries(e))r?.effects==="io"&&n.add(r.op??t);return n}function $e(e,n={}){let t=n.effectful??new Set(Jt),r;try{r=ut.parse(e,{ecmaVersion:"latest",locations:!0})}catch(i){return{safe:!1,predicates:[],diagnostics:[{predicate:"<source>",message:`parse error: ${i.message}`,line:i.loc?.line??0,column:i.loc?.column??0}]}}let s=new Set(n.knownPredicates??[]);for(let i of r.body)i.type==="FunctionDeclaration"&&i.id&&s.add(i.id.name);let o=[];for(let i of r.body){if(i.type!=="FunctionDeclaration"||!i.id)continue;let a=i.id.name,c=(f,p)=>o.push({predicate:a,message:f,line:p?.loc?.start?.line??0,column:p?.loc?.start?.column??0}),l=f=>c("loops are not allowed \u2014 iterate with recursion or array methods (every/some/map/filter/reduce) so work stays fuel-bounded",f);ie(i,{AwaitExpression(f){c("`await` not allowed \u2014 predicates must be synchronous",f)},NewExpression(f){c("`new` not allowed in a predicate (non-pure construction)",f)},WhileStatement:l,DoWhileStatement:l,ForStatement:l,ForInStatement:l,ForOfStatement:l,Literal(f){if(f.regex&&typeof f.regex.pattern=="string"){let p=Ms(f.regex.pattern);p&&c(`regex /${f.regex.pattern}/ risks catastrophic backtracking (ReDoS): ${p}. A single match is not fuel-bounded, so it can't be certified predicate-safe \u2014 simplify the pattern or validate without it.`,f)}},CallExpression(f){let p=f.callee;if(p.type==="Identifier"){let u=p.name;t.has(u)?c(`'${u}' is effectful \u2014 not allowed in a predicate`,p):s.has(u)||As.has(u)||c(`unknown reference '${u}' \u2014 not a predicate or pure builtin`,p);return}if(p.type==="MemberExpression"&&!p.computed){let u=p.property.name,m=p.object;m.type==="Identifier"&&t.has(m.name)?c(`'${m.name}.${u}' is effectful`,p):m.type==="Identifier"&&Ps.has(m.name)?Rs.has(`${m.name}.${u}`)&&c(`'${m.name}.${u}' is nondeterministic`,p):Cs.has(u)||c(`method '.${u}()' is not a known pure method`,p.property);return}c("unsupported call form in a predicate",p)}})}return{safe:o.length===0,predicates:[...s],diagnostics:o}}function ft(e){return e.map(n=>` ${n.predicate} (${n.line}:${n.column}): ${n.message}`).join(`
|
|
4
|
+
`)}var lt=e=>e&&e.type==="Literal"&&typeof e.value=="string";function Is(e,n={}){let t;try{t=ut.parse(e,{ecmaVersion:"latest"})}catch{return[]}let r=new Set,s=new Set;ie(t,{BinaryExpression(c){(c.operator==="=="||c.operator==="===")&&(lt(c.left)&&r.add(c.left.value),lt(c.right)&&r.add(c.right.value))},ArrayExpression(c){for(let l of c.elements)lt(l)&&r.add(l.value)},CallExpression(c){let l=c.callee;if(l.type!=="MemberExpression"||l.computed)return;let f=l.property.name,p=c.arguments[0];lt(p)&&f==="startsWith"&&s.add(p.value)}});let o=null;if(n.validate!==!1){let c=$e(e,n);if(c.safe&&c.predicates.length){let l=n.entry??c.predicates[c.predicates.length-1];try{let p=Je(e,[l],n)[l];o=u=>{try{return p(u)===!0}catch{return!1}}}catch{o=null}}}let i=[];for(let c of r)(!o||o(c))&&i.push({value:c,kind:"value"});for(let c of s)i.push({value:c,kind:"stub"});let a=i;if(n.prefix){let c=n.prefix;a=i.filter(l=>l.value.startsWith(c)||l.kind==="stub"&&c.startsWith(l.value))}return a.sort((c,l)=>(c.kind===l.kind?0:c.kind==="value"?-1:1)||c.value.localeCompare(l.value)),n.limit?a.slice(0,n.limit):a}var Le=class extends Error{constructor(n){super(`predicate exceeded its fuel budget (${n})`),this.name="PredicateFuelExhausted"}};function zn(e){let n=ut.parse(e,{ecmaVersion:"latest"}),t=[],r=o=>t.push([o.body.start+1,"__fuel();"]);ie(n,{FunctionDeclaration:r,FunctionExpression:r,ArrowFunctionExpression(o){o.body.type==="BlockStatement"?t.push([o.body.start+1,"__fuel();"]):(t.push([o.body.start,"(__fuel(), "]),t.push([o.body.end,")"]))}}),t.sort((o,i)=>i[0]-o[0]);let s=e;for(let[o,i]of t)s=s.slice(0,o)+i+s.slice(o);return s}function Je(e,n,t={}){let r=$e(e,t);if(!r.safe)throw new Error(`Not predicate-safe:
|
|
5
|
+
${ft(r.diagnostics)}`);let s=t.fuel??1e6,o=zn(e),i=Jt.filter(u=>u!=="import"&&u!=="eval"&&u!=="arguments"),a=new Function("__fuel",...i,`"use strict";
|
|
6
6
|
${o}
|
|
7
|
-
;return { ${n.join(", ")} };`),c=0,f=a(()=>{if(--c<0)throw new Le(s)},...i.map(()=>{})),p={};for(let u of n){let m=f[u];p[u]=(...
|
|
8
|
-
`);if(
|
|
9
|
-
${f}${
|
|
10
|
-
`),o=[],i=!1;for(let a=0;a<s.length;a++){let c=s[a],l=a>0?s[a-1]:"";if(i){o.push(c),c.includes("*/")&&(i=!1);continue}let f=c.indexOf("/*"),p=c.indexOf("*/");if(f!==-1&&(p===-1||p<f)){i=!0,o.push(c);continue}if(a>0&&n.test(c)){let u=l.replace(/\/\/.*$/,"").replace(/\/\*.*\*\/\s*$/,"");if(!t.test(u)&&!r.test(u)){let m=c.match(/^(\s*)/),
|
|
11
|
-
`)}function
|
|
12
|
-
`&&(r="normal"),t++;continue;case"block-comment":if(i==="*"&&a==="/"){t+=2,r="normal";continue}t++;continue;case"regex":if(i==="\\"&&t+1<e.length){t+=2;continue}if(i==="["){for(t++;t<e.length&&e[t]!=="]";)e[t]==="\\"&&t+1<e.length?t+=2:t++;t<e.length&&t++;continue}if(i==="/"){for(t++;t<e.length&&/[gimsuy]/.test(e[t]);)t++;r="normal";continue}t++;continue;case"normal":if(s.length>0){if(i==="{")s[s.length-1]++;else if(i==="}"&&(s[s.length-1]--,s[s.length-1]===0)){s.pop(),t++,r="template-string";continue}}if(i==="'"){t++,r="single-string";continue}if(i==='"'){t++,r="double-string";continue}if(i==="`"){t++,r="template-string";continue}if(i==="/"&&a==="/"){t+=2,r="line-comment";continue}if(i==="/"&&a==="*"){t+=2,r="block-comment";continue}if(i==="/"){let c=t-1;for(;c>=0&&/\s/.test(e[c]);)c--;let l=c>=0?e[c]:"";if(!l||/[=(!,;:{[&|?+\-*%<>~^]/.test(l)||c>=5&&/\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)$/.test(e.slice(Math.max(0,c-10),c+1))){t++,r="regex";continue}}if(i==="t"&&e.slice(t,t+6)==="typeof"&&(t===0||!/[\w$]/.test(e[t-1]))&&/\s/.test(e[t+6]??"")){let c=t+6;for(;c<e.length&&/\s/.test(e[c]);)c++;if(c<e.length&&/[a-zA-Z_$]/.test(e[c])){let l=c;for(;c<e.length&&/[\w$]/.test(e[c]);)c++;for(;c<e.length;)if(e[c]==="."&&/[a-zA-Z_$]/.test(e[c+1]??""))for(c++;c<e.length&&/[\w$]/.test(e[c]);)c++;else if(e[c]==="?"&&e[c+1]==="."&&/[a-zA-Z_$]/.test(e[c+2]??""))for(c+=2;c<e.length&&/[\w$]/.test(e[c]);)c++;else break;n.push({keywordStart:t,operandEnd:c,operand:e.slice(l,c)}),t=c;continue}}break}t++}if(n.length===0)return e;let o=e;for(let i=n.length-1;i>=0;i--){let a=n[i];o=o.slice(0,a.keywordStart)+`TypeOf(${a.operand})`+o.slice(a.operandEnd)}return o}function Ge(e){e=
|
|
13
|
-
`&&(r="normal"),t++;continue;case"block-comment":if(i==="*"&&a==="/"){t+=2,r="normal";continue}t++;continue;case"regex":if(i==="\\"&&t+1<e.length){t+=2;continue}if(i==="["){for(t++;t<e.length&&e[t]!=="]";)e[t]==="\\"&&t+1<e.length?t+=2:t++;t<e.length&&t++;continue}if(i==="/"){for(t++;t<e.length&&/[gimsuy]/.test(e[t]);)t++;r="normal";continue}t++;continue;case"normal":if(s.length>0){if(i==="{")s[s.length-1]++;else if(i==="}"&&(s[s.length-1]--,s[s.length-1]===0)){s.pop(),t++,r="template-string";continue}}if(i==="'"){t++,r="single-string";continue}if(i==='"'){t++,r="double-string";continue}if(i==="`"){t++,r="template-string";continue}if(i==="/"&&a==="/"){t+=2,r="line-comment";continue}if(i==="/"&&a==="*"){t+=2,r="block-comment";continue}if(i==="/"){let c=t-1;for(;c>=0&&/\s/.test(e[c]);)c--;let l=c>=0?e[c]:"";if(!l||/[=(!,;:{[&|?+\-*%<>~^]/.test(l)||c>=5&&/\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)$/.test(e.slice(Math.max(0,c-10),c+1))){t++,r="regex";continue}}if(i==="="&&a==="="&&e[t+2]!=="="&&e[t-1]!=="!"){n.push({pos:t,op:"=="}),t+=2;continue}if(i==="!"&&a==="="&&e[t+2]!=="="){n.push({pos:t,op:"!="}),t+=2;continue}break}t++}if(n.length===0)return e;let o=e;for(let i=n.length-1;i>=0;i--){let{pos:a,op:c}=n[i],l=c==="=="?"Eq":"NotEq",f=
|
|
14
|
-
`,i);a===-1&&(a=e.length);let c=e.slice(i,a).trim();if(c){let l=
|
|
15
|
-
`||e[r-1]===";"||e[r-1]==="}"){let
|
|
16
|
-
`),
|
|
7
|
+
;return { ${n.join(", ")} };`),c=0,f=a(()=>{if(--c<0)throw new Le(s)},...i.map(()=>{})),p={};for(let u of n){let m=f[u];p[u]=(...g)=>{c=s;try{return m(...g)}catch(y){throw y instanceof RangeError&&/stack/i.test(y.message)?new Le(s):y}}}return p}function Vt(e,n,t={}){let r=$e(e,t);if(!r.safe)return{safe:!1,diagnostics:r.diagnostics};if(!r.predicates.includes(n))return{safe:!1,diagnostics:[{predicate:n,message:`entry predicate '${n}' not found in the verified cluster`,line:0,column:0}]};let s=t.fuel??1e6;return{safe:!0,code:`(() => {let __f = 0;const __fuel = () => { if (--__f < 0) throw new RangeError('tjs:predicate-fuel'); };${zn(e)}return (...__a) => {__f = ${s};try { return !!${n}(...__a); }catch (e) {if (e instanceof RangeError && /tjs:predicate-fuel|stack/i.test(e.message)) return false;throw e;}};})()`,diagnostics:[]}}function Os(e={}){let{onUnsafe:n,...t}=e,r=new Map,s=new Set;return(o,i)=>{let a=r.get(o);if(a===void 0){try{let c=$e(o,t).predicates,l=c[c.length-1];if(!l)throw new Error("$predicate declares no function");a=Je(o,[l],t)[l]}catch(c){if(a=null,!s.has(o)){s.add(o);let l=c instanceof Error?c:new Error(String(c));n?n(o,l):console.warn(`[tjs-lang] $predicate not verifiable \u2014 failing closed: ${l.message}`)}}r.set(o,a)}if(a===null)return!1;try{return a(i)===!0}catch{return!1}}}function Bs(e,n){let t=e.match(n);if(!t)return null;let r=t.index+t[0].length-1,s=1,o=r+1;for(;o<e.length&&s>0;)e[o]==="{"?s++:e[o]==="}"&&s--,o++;if(s!==0)return null;let i=e.slice(r,o),a=[t[0].slice(0,-1)+i,i];return a.index=t.index,a}function zt(e,n,t,r,s,o){let i=`__pred_${e}`,a=`function ${i}(${t}) { ${r} }`,c=Vt(a,i,s?{knownPredicates:new Set(s)}:{});return c.safe?(o?.push({name:e,kind:n,verified:!0}),c.code):(o?.push({name:e,kind:n,verified:!1,reason:ft(c.diagnostics).replace(/__pred_/g,"")}),null)}function Yn(e){let n="",t=0;for(;t<e.length;){let r=e.slice(t).match(/^\btry\s*\{/);if(r){let o=t+r[0].length-1+1,i=1,a=o;for(;a<e.length&&i>0;){let l=e[a];l==="{"?i++:l==="}"&&i--,a++}if(i!==0){n+=e[t],t++;continue}if(e.slice(a).match(/^\s*(catch|finally)\b/))n+=e.slice(t,a),t=a;else{let l=e.slice(o,a-1);n+=`try {${l}} catch (__try_err) { return new (__tjs?.MonadicError ?? Error)(__try_err?.message || String(__try_err), 'try', undefined, undefined, __tjs?.getStack?.()) }`,t=a}}else n+=e[t],t++}return n}function Xn(e){let n=[],t="",r=0,s=0;for(;r<e.length;){let o=e.slice(r).match(/^\bwasm\s*\{/);if(o){let i=r,a=r+o[0].length,c=1,l=a;for(;l<e.length&&c>0;){let _=e[l];_==="{"?c++:_==="}"&&c--,l++}if(c!==0){t+=e[r],r++;continue}let f=e.slice(a,l-1),p,u=l,m=e.slice(l).match(/^\s*fallback\s*\{/);if(m){let _=l+m[0].length;c=1;let E=_;for(;E<e.length&&c>0;){let k=e[E];k==="{"?c++:k==="}"&&c--,E++}c===0&&(p=e.slice(_,E-1),u=E)}let y=qs(f).map(_=>{let E=Ws(e,i,_);return E?`${_}: ${E}`:_}),x={id:`__tjs_wasm_${s}`,body:f,fallback:p,captures:y,start:i,end:u};n.push(x);let S=p??f,w=y.map(_=>_.split(":")[0].trim()),h=w.length>0?w.join(", "):"",b=w.length>0?`globalThis.${x.id}(${h})`:`globalThis.${x.id}()`,$=`((globalThis.__tjs_wasm_enabled !== false && globalThis.${x.id}) ? ${b} : (() => {${S}})())`;t+=$,r=u,s++}else t+=e[r],r++}return{source:t,blocks:n}}function Qn(e){let n=[],t="",r=0;for(;r<e.length;){let s=/^\b(export\s+)?wasm\s+function\s+(\w+)\s*\(/,o=e.slice(r).match(s);if(!o){t+=e[r],r++;continue}let i=!!o[1],a=o[2],c=r,l=r+o[0].length,f=1,p=l;for(;p<e.length&&f>0;)e[p]==="("?f++:e[p]===")"&&f--,p++;if(f!==0){t+=e[r],r++;continue}let u=e.slice(l,p-1);if(u.match(/^\s*!/))throw new G(`Unsafe wasm functions (with \`!\` marker) are reserved for a future phase. Remove the bang from \`wasm function ${a}\` to declare it as a regular (pure) wasm function, or wait until the unsafe variant is implemented.`,pe(e,c));let g,y=p,x=e.slice(p).match(/^\s*:\s*(\w+)/);x&&(g=x[1],y=p+x[0].length);let S=e.slice(y).match(/^\s*\{/);if(!S){t+=e[r],r++;continue}let w=y+S[0].length,h=1,b=w;for(;b<e.length&&h>0;)e[b]==="{"?h++:e[b]==="}"&&h--,b++;if(h!==0){t+=e[r],r++;continue}let $=e.slice(w,b-1),_=Ds(u),E=`__tjs_wasm_${a}`,k={id:E,name:a,returnType:g,body:$,captures:_,start:c,end:b};n.push(k);let T=_.map(N=>N.split(":")[0].trim()),A=`${i?"export ":""}function ${a}(${T.join(", ")}) { return globalThis.${E}(${T.join(", ")}) }`;t+=A,r=b}return{source:t,blocks:n}}function er(e,n){let{loader:t,importerPath:r}=n;if(!t)return{source:e,blocks:[]};let s=[],o=new Set;function i(l,f){if(!o.has(l.id)){s.push(l),o.add(l.id);for(let[p,u]of f){if(p===l.name||o.has(u.id))continue;new RegExp(`\\b${p}\\s*\\(`).test(l.body)&&i(u,f)}}}let a=/^(\s*)import\s*\{([^}]*?)\}\s*from\s*(['"])([^'"]+)\3\s*;?\s*$/gm;return{source:e.replace(a,(l,f,p,u,m)=>{let g=t.load(m,r);if(!g)return l;let y=new Map;for(let $ of g.parseResult.wasmBlocks)$.name&&y.set($.name,$);if(y.size===0)return l;let x=p.split(",").map($=>$.trim()).filter($=>$.length>0),S=[],w=[];for(let $ of x){let _=$.match(/^(\w+)(?:\s+as\s+(\w+))?$/);if(!_){w.push($);continue}let E=_[1],k=_[2]??_[1],T=y.get(E);if(!T){w.push($);continue}i(T,y);let P=T.captures.map(A=>A.split(":")[0].trim());S.push(`function ${k}(${P.join(", ")}) { return globalThis.${T.id}(${P.join(", ")}) }`)}let h=S.join(`
|
|
8
|
+
`);if(w.length===0)return h?`${f}${h}`:`${f}`;let b=`${f}import { ${w.join(", ")} } from '${m}'`;return h?`${b}
|
|
9
|
+
${f}${h}`:b}),blocks:s}}function Ds(e){let n=e.trim();return n?n.split(",").map(t=>t.trim()).filter(t=>t.length>0):[]}function Fs(e){return e.startsWith("f32x4_")||e.startsWith("v128_")}function qs(e){let n=e.replace(/\/\/[^\n]*/g,"").replace(/\/\*[\s\S]*?\*\//g,""),t=new Set,r=/\.([a-zA-Z_$][a-zA-Z0-9_$]*)\b/g,s;for(;(s=r.exec(n))!==null;)t.add(s[1]);let o=/(?<!\.)(\b[a-zA-Z_$][a-zA-Z0-9_$]*)\b/g,i=new Set;for(;(s=o.exec(n))!==null;)i.add(s[1]);for(let u of t){if(!i.has(u))continue;let m=new RegExp(`(?<!\\.)\\b${u}\\b`,"g"),g=new RegExp(`\\.${u}\\b`,"g"),y=n.match(m)?.length||0,x=n.match(g)?.length||0;y<=x&&i.delete(u)}let a=new Set,c=/\b(?:let|const|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;for(;(s=c.exec(n))!==null;)a.add(s[1]);let l=/\bfor\s*\(\s*(?:let|const|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;for(;(s=l.exec(n))!==null;)a.add(s[1]);let f=new Set(["if","else","for","while","do","switch","case","break","continue","return","function","let","const","var","new","this","true","false","null","undefined","typeof","instanceof","in","of","try","catch","finally","throw","async","await","class","extends","super","import","export","default","from","as","static","get","set","yield","console","Math","Array","Object","String","Number","Boolean","Date","JSON","Promise","Map","Set","WeakMap","WeakSet","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","ArrayBuffer","DataView","Error","TypeError","RangeError","length","push","pop","shift","unshift","slice","splice","map","filter","reduce","forEach","find","findIndex","indexOf","includes","globalThis","window","document","Infinity","NaN","isNaN","isFinite","parseInt","parseFloat","encodeURI","decodeURI","eval","wasmBuffer"]),p=[];for(let u of i)!a.has(u)&&!f.has(u)&&!Fs(u)&&p.push(u);return p.sort()}function Ws(e,n,t){let r=e.slice(0,n),s=/function\s+\w+\s*\(([^)]*)\)\s*(?:->.*?)?\s*\{[^}]*$/,o=r.match(s);if(!o){let i=/(?:const|let|var)?\s*\w+\s*=\s*(?:async\s*)?\(([^)]*)\)\s*(?:=>|->)?\s*\{[^}]*$/,a=r.match(i);return a?Gn(a[1],t):void 0}return Gn(o[1],t)}function Gn(e,n){let t=e.split(",").map(r=>r.trim());for(let r of t){let s=r.match(new RegExp(`^${n}\\s*:\\s*([A-Za-z][A-Za-z0-9]*)`));if(s)return s[1];let o=r.match(new RegExp(`^${n}\\s*=\\s*(Float32Array|Float64Array|Int32Array|Uint8Array|Int8Array|Int16Array|Uint16Array|Uint32Array)`));if(o)return o[1]}}function ze(e){let n=`([\\w][\\w.\\[\\]()]*|null|undefined|true|false|\\d+(?:\\.\\d+)?|'[^']*'|"[^"]*")`,t=new RegExp(n+"\\s+IsNot\\s+"+n,"g");e=e.replace(t,"IsNot($1, $2)");let r=new RegExp(n+"\\s+Is\\s+"+n,"g");return e=e.replace(r,"Is($1, $2)"),e}function tr(e){let n=/^[\s]*[([`]/,t=/[{([,;:+\-*/%=&|?<>!~^]\s*$|^\s*$/,r=/\b(return|throw|yield|await|case|default|extends|new|typeof|void|delete|in|of|instanceof)\s*$/,s=e.split(`
|
|
10
|
+
`),o=[],i=!1;for(let a=0;a<s.length;a++){let c=s[a],l=a>0?s[a-1]:"";if(i){o.push(c),c.includes("*/")&&(i=!1);continue}let f=c.indexOf("/*"),p=c.indexOf("*/");if(f!==-1&&(p===-1||p<f)){i=!0,o.push(c);continue}if(a>0&&n.test(c)){let u=l.replace(/\/\/.*$/,"").replace(/\/\*.*\*\/\s*$/,"");if(!t.test(u)&&!r.test(u)){let m=c.match(/^(\s*)/),g=m?m[1]:"",y=c.slice(g.length);o.push(g+";"+y);continue}}o.push(c)}return o.join(`
|
|
11
|
+
`)}function Us(e){let n=[],t=0,r="normal",s=[];for(;t<e.length;){let i=e[t],a=e[t+1];switch(r){case"single-string":if(i==="\\"&&t+1<e.length){t+=2;continue}i==="'"&&(r="normal"),t++;continue;case"double-string":if(i==="\\"&&t+1<e.length){t+=2;continue}i==='"'&&(r="normal"),t++;continue;case"template-string":if(i==="\\"&&t+1<e.length){t+=2;continue}if(i==="$"&&a==="{"){t+=2,s.push(1),r="normal";continue}i==="`"&&(r="normal"),t++;continue;case"line-comment":i===`
|
|
12
|
+
`&&(r="normal"),t++;continue;case"block-comment":if(i==="*"&&a==="/"){t+=2,r="normal";continue}t++;continue;case"regex":if(i==="\\"&&t+1<e.length){t+=2;continue}if(i==="["){for(t++;t<e.length&&e[t]!=="]";)e[t]==="\\"&&t+1<e.length?t+=2:t++;t<e.length&&t++;continue}if(i==="/"){for(t++;t<e.length&&/[gimsuy]/.test(e[t]);)t++;r="normal";continue}t++;continue;case"normal":if(s.length>0){if(i==="{")s[s.length-1]++;else if(i==="}"&&(s[s.length-1]--,s[s.length-1]===0)){s.pop(),t++,r="template-string";continue}}if(i==="'"){t++,r="single-string";continue}if(i==='"'){t++,r="double-string";continue}if(i==="`"){t++,r="template-string";continue}if(i==="/"&&a==="/"){t+=2,r="line-comment";continue}if(i==="/"&&a==="*"){t+=2,r="block-comment";continue}if(i==="/"){let c=t-1;for(;c>=0&&/\s/.test(e[c]);)c--;let l=c>=0?e[c]:"";if(!l||/[=(!,;:{[&|?+\-*%<>~^]/.test(l)||c>=5&&/\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)$/.test(e.slice(Math.max(0,c-10),c+1))){t++,r="regex";continue}}if(i==="t"&&e.slice(t,t+6)==="typeof"&&(t===0||!/[\w$]/.test(e[t-1]))&&/\s/.test(e[t+6]??"")){let c=t+6;for(;c<e.length&&/\s/.test(e[c]);)c++;if(c<e.length&&/[a-zA-Z_$]/.test(e[c])){let l=c;for(;c<e.length&&/[\w$]/.test(e[c]);)c++;for(;c<e.length;)if(e[c]==="."&&/[a-zA-Z_$]/.test(e[c+1]??""))for(c++;c<e.length&&/[\w$]/.test(e[c]);)c++;else if(e[c]==="?"&&e[c+1]==="."&&/[a-zA-Z_$]/.test(e[c+2]??""))for(c+=2;c<e.length&&/[\w$]/.test(e[c]);)c++;else break;n.push({keywordStart:t,operandEnd:c,operand:e.slice(l,c)}),t=c;continue}}break}t++}if(n.length===0)return e;let o=e;for(let i=n.length-1;i>=0;i--){let a=n[i];o=o.slice(0,a.keywordStart)+`TypeOf(${a.operand})`+o.slice(a.operandEnd)}return o}function Ge(e){e=Us(e);let n=[],t=0,r="normal",s=[];for(;t<e.length;){let i=e[t],a=e[t+1];switch(r){case"single-string":if(i==="\\"&&t+1<e.length){t+=2;continue}i==="'"&&(r="normal"),t++;continue;case"double-string":if(i==="\\"&&t+1<e.length){t+=2;continue}i==='"'&&(r="normal"),t++;continue;case"template-string":if(i==="\\"&&t+1<e.length){t+=2;continue}if(i==="$"&&a==="{"){t+=2,s.push(1),r="normal";continue}i==="`"&&(r="normal"),t++;continue;case"line-comment":i===`
|
|
13
|
+
`&&(r="normal"),t++;continue;case"block-comment":if(i==="*"&&a==="/"){t+=2,r="normal";continue}t++;continue;case"regex":if(i==="\\"&&t+1<e.length){t+=2;continue}if(i==="["){for(t++;t<e.length&&e[t]!=="]";)e[t]==="\\"&&t+1<e.length?t+=2:t++;t<e.length&&t++;continue}if(i==="/"){for(t++;t<e.length&&/[gimsuy]/.test(e[t]);)t++;r="normal";continue}t++;continue;case"normal":if(s.length>0){if(i==="{")s[s.length-1]++;else if(i==="}"&&(s[s.length-1]--,s[s.length-1]===0)){s.pop(),t++,r="template-string";continue}}if(i==="'"){t++,r="single-string";continue}if(i==='"'){t++,r="double-string";continue}if(i==="`"){t++,r="template-string";continue}if(i==="/"&&a==="/"){t+=2,r="line-comment";continue}if(i==="/"&&a==="*"){t+=2,r="block-comment";continue}if(i==="/"){let c=t-1;for(;c>=0&&/\s/.test(e[c]);)c--;let l=c>=0?e[c]:"";if(!l||/[=(!,;:{[&|?+\-*%<>~^]/.test(l)||c>=5&&/\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)$/.test(e.slice(Math.max(0,c-10),c+1))){t++,r="regex";continue}}if(i==="="&&a==="="&&e[t+2]!=="="&&e[t-1]!=="!"){n.push({pos:t,op:"=="}),t+=2;continue}if(i==="!"&&a==="="&&e[t+2]!=="="){n.push({pos:t,op:"!="}),t+=2;continue}break}t++}if(n.length===0)return e;let o=e;for(let i=n.length-1;i>=0;i--){let{pos:a,op:c}=n[i],l=c==="=="?"Eq":"NotEq",f=Ls(o,a),p=Js(o,a+2),u=o.slice(f,a).trim(),m=o.slice(a+2,p).trim();if(u&&m){let g=o.slice(0,f),y=o.slice(p),S=/[a-zA-Z0-9_$]$/.test(g)?" ":"";o=`${g}${S}${l}(${u}, ${m})${y}`}}return o}function Ls(e,n){let t=n-1;for(;t>=0&&/\s/.test(e[t]);)t--;if(t<0)return 0;let r=0,s=!1,o="";for(;t>=0;){let i=e[t],a=t>0?e[t-1]:"";if(s){i===o&&a!=="\\"&&(s=!1),t--;continue}if((i==='"'||i==="'"||i==="`")&&a!=="\\"){s=!0,o=i,t--;continue}if(i===")"||i==="]"||i==="}"){r++,t--;continue}if(i==="("||i==="["){if(r>0){r--,t--;continue}return t+1}if(i==="{"){if(r>0){r--,t--;continue}return t+1}if(r>0){t--;continue}if(i===";")return t+1;if(/[a-z]/.test(i)){let c=t+1,l=t;for(;l>0&&/[a-z]/i.test(e[l-1]);)l--;let f=e.slice(l,c),p=l>0?e[l-1]:"";if(!/[a-zA-Z0-9_$]/.test(p)){if(["return","throw","case","typeof","void","delete","await","yield"].includes(f))return c;if(f==="new")return l}}if(i===">"&&a==="="||i==="="&&a!=="="&&a!=="!"&&a!=="<"&&a!==">"||i==="&"&&a==="&"||i==="|"&&a==="|"||i==="?"||i===":"||i===",")return t+1;t--}return 0}function Js(e,n){let t=n;for(;t<e.length&&/\s/.test(e[t]);)t++;if(t>=e.length)return e.length;let r=0,s=!1,o="";for(;t<e.length;){let i=e[t],a=t+1<e.length?e[t+1]:"";if(s){i===o&&e[t-1]!=="\\"&&(s=!1),t++;continue}if((i==='"'||i==="'"||i==="`")&&e[t-1]!=="\\"){s=!0,o=i,t++;continue}if(i==="("||i==="["||i==="{"){r++,t++;continue}if(i===")"||i==="]"||i==="}"){if(r>0){r--,t++;continue}return t}if(r>0){t++;continue}if(i===";"||i==="&"&&a==="&"||i==="|"&&a==="|"||i==="?"||i===":"||i===","||(i==="="||i==="!")&&a==="="&&e[t+2]!=="=")return t;t++}return e.length}function nr(e,n){let t="",r=0;for(;r<e.length;){let s=e.slice(r).match(/^\bType\s+([A-Z_][a-zA-Z0-9_]*)\s*/);if(s){let o=s[1],i=r+s[0].length,a=o,c=!1,l=e.slice(i).match(/^(['"`])([^]*?)\1\s*/);if(l){let m=i+l[0].length,g=e[m],y=g===void 0||m>=e.length||g!=="="&&g!=="{";if(g==="="||g==="{")a=l[2],c=!0,i=m;else if(y){let x=l[0].trim(),S=l[0].slice(x.length);t+=`const ${o} = Type('${o}', ${x})${S}`,r=m;continue}}let f,p=i,u=e.slice(i).match(/^=\s*/);if(u){i+=u[0].length;let m=e.slice(i).match(/^(\+?\d+(?:\.\d+)?|['"`][^'"`]*['"`]|\{[^}]*\}|\[[^\]]*\]|true|false|null)/);if(m){f=m[0],i+=m[0].length,p=i;let g=e.slice(i).match(/^\s*/);g&&(i+=g[0].length)}}if(e[i]==="{"){let m=i+1,g=1,y=m;for(;y<e.length&&g>0;){let _=e[y];_==="{"?g++:_==="}"&&g--,y++}if(g!==0){t+=e[r],r++;continue}let x=e.slice(m,y-1).trim(),S=y,w=x.match(/description\s*:\s*(['"`])([^]*?)\1/);w&&!c&&(a=w[2]);let h,b=x.match(/example\s*:\s*/);if(b){let _=b.index+b[0].length,E=_r(x,_);E&&(h=E.value.trim())}let $=x.match(/predicate\s*\(([^)]*)\)\s*\{([^]*)\}/);if($&&h){let _=$[1].trim(),E=$[2].trim(),k=f?`, ${f}`:"",T=`globalThis.__tjs?.validate(${_}, globalThis.__tjs?.infer(${h}))`,P=zt(o,"Type",_,E,void 0,n),A=P?`(__g => (${_}) => (${T} ? __g(${_}) : false))(${P})`:`(${_}) => { if (!${T}) return false; ${E} }`;t+=`const ${o} = Type('${a}', ${A}, ${h}${k})`}else if($){let _=$[1].trim(),E=$[2].trim(),k=f?`, undefined, ${f}`:"",P=zt(o,"Type",_,E,void 0,n)??`(${_}) => { ${E} }`;t+=`const ${o} = Type('${a}', ${P}${k})`}else if(h){let _=f?`, ${f}`:"";t+=`const ${o} = Type('${a}', undefined, ${h}${_})`}else f?t+=`const ${o} = Type('${a}', ${f})`:t+=`const ${o} = Type('${a}')`;r=S;continue}else if(f){t+=`const ${o} = Type('${a}', ${f})`,r=p;continue}else if(!l){let m=e.slice(i).match(/^(['"`][^]*?['"`]|\+?\d+(?:\.\d+)?|true|false|null|\{[^]*?\}|\[[^]*?\])/);if(m){let g=m[0];t+=`const ${o} = Type('${o}', ${g})`,r=i+m[0].length;continue}}}t+=e[r],r++}return t}function rr(e){let n="",t=0;for(;t<e.length;){let r=e.slice(t).match(/^\bFunctionPredicate\s+([A-Z_][a-zA-Z0-9_]*)\s*(?:<([^>]+)>)?\s*/);if(r){let s=r[1],o=r[2],i=t+r[0].length;if(e[i]==="{"){let a=1,c=i+1;for(;c<e.length&&a>0;)e[c]==="{"?a++:e[c]==="}"&&a--,c++;if(a===0){let l=e.slice(i+1,c-1).trim(),f=Bs(l,/params\s*:\s*\{/),p=l.match(/returns\s*:\s*(.+?)(?:\n|$)/),u=l.match(/returnContract\s*:\s*['"](\w+)['"]/),m=l.match(/description\s*:\s*(['"])([^]*?)\1/),g=[];f&&g.push(`params: ${f[1]}`),p&&g.push(`returns: ${p[1].trim()}`),u&&g.push(`returnContract: '${u[1]}'`);let y=m?m[2]:s;if(o){let x=o.split(",").map(w=>{let h=w.trim().split("=").map(b=>b.trim());if(h.length===2){let b=h[1]==="any"||h[1]==="undefined"?"null":h[1];return`['${h[0]}', ${b}]`}return`'${h[0]}'`}),S=o.split(",").map(w=>w.trim().split("=")[0].trim());n+=`const ${s} = FunctionPredicate('${y}', [${x.join(", ")}], (${S.join(", ")}) => ({ ${g.join(", ")} }))`}else n+=`const ${s} = FunctionPredicate('${y}', { ${g.join(", ")} })`;t=c;continue}}if(e[i]==="("){let a=1,c=i+1;for(;c<e.length&&a>0;)e[c]==="("?a++:e[c]===")"&&a--,c++;if(a===0){let l=e.slice(i+1,c-1).trim(),f=l.indexOf(",");if(f!==-1){let p=l.slice(0,f).trim(),u=l.slice(f+1).trim();n+=`const ${s} = FunctionPredicate(${u}, ${p})`}else n+=`const ${s} = FunctionPredicate('${s}', ${l})`;t=c;continue}}}n+=e[t],t++}return n}function sr(e,n){let t="",r=0;for(;r<e.length;){let s=e.slice(r).match(/^\bGeneric\s+([A-Z][a-zA-Z0-9_]*)\s*<([^>]+)>\s*\{/);if(s){let o=s[1],i=s[2],c=r+s[0].length-1+1,l=1,f=c;for(;f<e.length&&l>0;){let h=e[f];h==="{"?l++:h==="}"&&l--,f++}if(l!==0){t+=e[r],r++;continue}let p=e.slice(c,f-1).trim(),u=f,m=i.split(",").map(h=>{let b=h.trim().split("=").map($=>$.trim());if(b.length===2){let $=b[1]==="any"||b[1]==="undefined"?"null":b[1];return`['${b[0]}', ${$}]`}return`'${b[0]}'`}),g=p,y=g.search(/\bdeclaration\s*\{/);if(y!==-1){let h=g.indexOf("{",y),b=1,$=h+1;for(;$<g.length&&b>0;)g[$]==="{"?b++:g[$]==="}"&&b--,$++;g=g.slice(0,y)+g.slice($)}let x=g.match(/description\s*:\s*(['"`])([^]*?)\1/),S=g.match(/predicate\s*\(([^)]*)\)\s*\{([^]*)\}/),w=x?x[2]:o;if(S){let h=S[1].trim().split(",").map(A=>A.trim()),b=S[2].trim(),$=h[0]||"x",_=h.slice(1),E=_.map(A=>`check${A}`);_.forEach((A,N)=>{b=b.replace(new RegExp(`\\b${A}\\s*\\(`,"g"),`${E[N]}(`)});let k=[$,...E].join(", "),P=zt(o,"Generic",k,b,E,n)??`(${k}) => { ${b} }`;t+=`const ${o} = Generic([${m.join(", ")}], ${P}, '${w}')`}else t+=`const ${o} = Generic([${m.join(", ")}], () => true, '${w}')`;r=u;continue}t+=e[r],r++}return t}function ir(e){let n="",t=0;for(;t<e.length;){let r=e.slice(t).match(/^\bUnion\s+([A-Z][a-zA-Z0-9_]*)\s+(['"`])([^]*?)\2\s*/);if(r){let s=r[1],o=r[3],i=t+r[0].length;if(e[i]==="{"){let a=i+1,c=1,l=a;for(;l<e.length&&c>0;){let m=e[l];m==="{"?c++:m==="}"&&c--,l++}if(c!==0){n+=e[t],t++;continue}let f=e.slice(a,l-1).trim(),p=l,u=Zn(f);n+=`const ${s} = Union('${o}', [${u.join(", ")}])`,t=p;continue}else{let a=e.indexOf(`
|
|
14
|
+
`,i);a===-1&&(a=e.length);let c=e.slice(i,a).trim();if(c){let l=Zn(c);n+=`const ${s} = Union('${o}', [${l.join(", ")}])`,t=a;continue}}}n+=e[t],t++}return n}function Zn(e){let n=[],t=e.split("|").map(r=>r.trim());for(let r of t)r&&n.push(r);return n}function or(e){let n="",t=0;for(;t<e.length;){let r=e.slice(t).match(/^\bEnum\s+([A-Z][a-zA-Z0-9_]*)\s+(['"`])([^]*?)\2\s*\{/);if(r){let s=r[1],o=r[3],a=t+r[0].length-1+1,c=1,l=a;for(;l<e.length&&c>0;){let g=e[l];g==="{"?c++:g==="}"&&c--,l++}if(c!==0){n+=e[t],t++;continue}let f=e.slice(a,l-1).trim(),p=l,m=Vs(f).map(([g,y])=>`${g}: ${y}`).join(", ");n+=`const ${s} = Enum('${o}', { ${m} })`,t=p;continue}n+=e[t],t++}return n}function Vs(e){let n=[],t=0,r=e.split(/[\n,]/).map(s=>s.trim()).filter(s=>s&&!s.startsWith("//"));for(let s of r){let o=s.match(/^([A-Za-z_][A-Za-z0-9_]*)\s*(?:=\s*(.+))?$/);if(o){let i=o[1],a=o[2]?.trim();if(a!==void 0){n.push([i,a]);let c=Number(a);isNaN(c)||(t=c+1)}else n.push([i,String(t)]),t++}}return n}function ar(e){let n=new Map,t="",r=0;for(;r<e.length;){let s=e.slice(r),o=s.match(/^(\s*)extend\s+([A-Z]\w*)\s*\{/);if(!o){if(r===0||e[r-1]===`
|
|
15
|
+
`||e[r-1]===";"||e[r-1]==="}"){let h=s.match(/^(\s*)extend\s+([A-Z]\w*)\s*\{/)}t+=e[r],r++;continue}let i=o[1],a=o[2],c=r+o[0].length-1,l=Ve(e,c),f=e.slice(c+1,l-1).trim(),p=[],u=0,m=e.slice(c+1,l-1);for(;u<m.length;){let h=m.slice(u).match(/^(\s*)(async\s+)?(\w+)\s*\(/);if(!h){u++;continue}let b=h[1],$=!!h[2],_=h[3],E=u+h[0].length-1,k=1,T=E+1;for(;T<m.length&&k>0;)m[T]==="("&&k++,m[T]===")"&&k--,T++;let P=m.slice(E+1,T-1),A=T;for(;A<m.length&&/\s/.test(m[A]);)A++;if(m[A]==="="&&m[A+1]===">"){let z=pe(e,c+1+u);throw new G(`Arrow functions are not allowed in extend blocks (method '${_}' in extend ${a}). Use regular function syntax instead, as extension methods need 'this' binding.`,z)}if(m[A]!=="{"){u++;continue}let N=Ve(m,A),R=m.slice(u,N).trim(),B=P.split(",").map(z=>z.trim()).filter(z=>z.length>0).map(z=>{let X=z.match(/^(\w+)\s*:\s*(.+)$/);return X?`${X[1]} = ${X[2]}`:z}).join(", "),D=$?"async ":"",V=m.slice(A+1,N-1);p.push({name:_,isAsync:$,fullText:`${_}: ${D}function(${B}) {${V}}`}),u=N}let g=!n.has(a);g&&n.set(a,new Set);let y=n.get(a);for(let w of p)y.add(w.name);let x=p.map(w=>` ${w.fullText}`).join(`,
|
|
16
|
+
`),S;g?S=`${i}const __ext_${a} = {
|
|
17
17
|
${x}
|
|
18
18
|
${i}}
|
|
19
|
-
`:
|
|
19
|
+
`:S=`${i}Object.assign(__ext_${a}, {
|
|
20
20
|
${x}
|
|
21
21
|
${i}})
|
|
22
|
-
`;for(let
|
|
23
|
-
`;t+=
|
|
24
|
-
`?(t++,r=0):r++;return{line:t,column:r}}function
|
|
25
|
-
`&&(o=!1),r++;continue}if(i){if(a==="*"&&c==="/"){i=!1,r+=2;continue}r++;continue}if(s){if(a==="\\"){r+=2;continue}a===s&&(s=!1),r++;continue}if(a==="/"&&c==="/"){o=!0,r+=2;continue}if(a==="/"&&c==="*"){i=!0,r+=2;continue}if(a==="'"||a==='"'||a==="`"){s=a,r++;continue}a==="{"&&t++,a==="}"&&t--,r++}return r}function
|
|
26
|
-
${x}${
|
|
27
|
-
${
|
|
22
|
+
`;for(let w of p)S+=`${i}if (__tjs?.registerExtension) { __tjs.registerExtension('${a}', '${w.name}', __ext_${a}.${w.name}) }
|
|
23
|
+
`;t+=S,r=l}return r<=e.length&&t.length<e.length,{source:t,extensions:n}}function Ze(e,n){if(n.size===0)return e;let t=new Map;for(let[s,o]of n)for(let i of o)t.has(i)||t.set(i,[]),t.get(i).push(s);let r=e;for(let[s,o]of t){if(!o.includes("String"))continue;let i=new RegExp(`('(?:[^'\\\\]|\\\\.)*')\\.(${s})\\((\\))?`,"g");r=r.replace(i,(l,f,p,u)=>u?`__ext_String.${p}.call(${f})`:`__ext_String.${p}.call(${f}, `);let a=new RegExp(`("(?:[^"\\\\]|\\\\.)*")\\.(${s})\\((\\))?`,"g");r=r.replace(a,(l,f,p,u)=>u?`__ext_String.${p}.call(${f})`:`__ext_String.${p}.call(${f}, `);let c=new RegExp("(`(?:[^`\\\\]|\\\\.)*`)\\."+s+"\\((\\))?","g");r=r.replace(c,(l,f,p)=>p?`__ext_String.${s}.call(${f})`:`__ext_String.${s}.call(${f}, `)}for(let[s,o]of t){if(!o.includes("Array"))continue;let i=`].${s}(`,a=0,c;for(;(c=r.indexOf(i,a))!==-1;){let l=1,f=c-1,p=!1;for(;f>=0&&l>0;){let u=r[f];p?u===p&&(f===0||r[f-1]!=="\\")&&(p=!1):(u==="]"&&l++,u==="["&&l--,(u==="'"||u==='"'||u==="`")&&(p=u)),f--}if(l===0){let u=r.slice(f+1,c+1),m=r.slice(0,f+1),g=r.slice(c+i.length);g[0]===")"?r=`${m}__ext_Array.${s}.call(${u})${g.slice(1)}`:r=`${m}__ext_Array.${s}.call(${u}, ${g}`}a=c+1}}for(let[s,o]of t){if(!o.includes("Number"))continue;let i=new RegExp(`(\\d+(?:\\.\\d+)?)\\.(${s})\\((\\))?`,"g");r=r.replace(i,(a,c,l,f)=>f?`__ext_Number.${l}.call(${c})`:`__ext_Number.${l}.call(${c}, `)}return r}function pe(e,n){let t=1,r=0;for(let s=0;s<n&&s<e.length;s++)e[s]===`
|
|
24
|
+
`?(t++,r=0):r++;return{line:t,column:r}}function cr(e,n){let t=n.trim();return/^['"`]/.test(t)?`typeof ${e} === 'string'`:t==="true"||t==="false"?`typeof ${e} === 'boolean'`:t==="null"?`${e} === null`:t==="undefined"?`${e} === undefined`:t.startsWith("[")?`Array.isArray(${e})`:t.startsWith("{")?`(typeof ${e} === 'object' && ${e} !== null && !Array.isArray(${e}))`:/^\+\d+/.test(t)?`(typeof ${e} === 'number' && Number.isInteger(${e}) && ${e} >= 0)`:/^-?\d+\.\d+/.test(t)?`typeof ${e} === 'number'`:/^-?\d+$/.test(t)?`(typeof ${e} === 'number' && Number.isInteger(${e}))`:"true"}function pt(e){let n=e.trim();return/^['"`]/.test(n)?"string":n==="true"||n==="false"?"boolean":n==="null"?"null":n==="undefined"?"undefined":n.startsWith("[")?"array":n.startsWith("{")?"object":/^\+\d+/.test(n)?"non-negative-integer":/^-?\d+\.\d+/.test(n)?"number":/^-?\d+$/.test(n)?"integer":"any"}function Gt(e,n){let t=[],r=0,s="",o=!1;for(let a=0;a<e.length;a++){let c=e[a];if(!o&&(c==="'"||c==='"'||c==="`")){o=c,s+=c;continue}if(o){if(s+=c,c==="\\"){a++,a<e.length&&(s+=e[a]);continue}c===o&&(o=!1);continue}if(c==="("||c==="["||c==="{"){r++,s+=c;continue}if(c===")"||c==="]"||c==="}"){r--,s+=c;continue}if(c===","&&r===0){let l=Kn(s.trim(),n);l&&t.push(l),s="";continue}s+=c}let i=s.trim();if(i){let a=Kn(i,n);a&&t.push(a)}return t}function Kn(e,n){let t=e.replace(/^\/\*\s*unsafe\s*\*\/\s*/,"");if(t.startsWith("..."))return null;let r=t.indexOf("=");if(r===-1)return{name:t.trim(),defaultValue:"",required:!0};let s=t.slice(0,r).trim(),o=t.slice(r+1).trim();return{name:s,defaultValue:o,required:n.has(s)}}function Ve(e,n){let t=1,r=n+1,s=!1,o=!1,i=!1;for(;r<e.length&&t>0;){let a=e[r],c=r+1<e.length?e[r+1]:"";if(o){a===`
|
|
25
|
+
`&&(o=!1),r++;continue}if(i){if(a==="*"&&c==="/"){i=!1,r+=2;continue}r++;continue}if(s){if(a==="\\"){r+=2;continue}a===s&&(s=!1),r++;continue}if(a==="/"&&c==="/"){o=!0,r+=2;continue}if(a==="/"&&c==="*"){i=!0,r+=2;continue}if(a==="'"||a==='"'||a==="`"){s=a,r++;continue}a==="{"&&t++,a==="}"&&t--,r++}return r}function lr(e,n){let t=new Set,r=/(?:^|(?<=[\n;{}]))\s*(export\s+)?(async\s+)?function\s+(\w+)\s*\(/gm,s=new Map,o,i=[];for(;(o=r.exec(e))!==null;){let p=!!o[1],u=!!o[2],m=o[3],g=o.index,y=g,S=o[0].indexOf("function");S>=0&&(y=g+S),i.push({name:m,fullMatchStart:g,funcKeywordStart:y,exported:p,isAsync:u})}for(let p of i)s.has(p.name)||s.set(p.name,[]);let a=new Map;for(let p of i)a.set(p.name,(a.get(p.name)||0)+1);let c=new Set;for(let[p,u]of a)u>1&&c.add(p);if(c.size===0)return{source:e,polymorphicNames:t};for(let p of i){if(!c.has(p.name))continue;let u=e.indexOf("(",p.funcKeywordStart);if(u===-1)continue;let m=1,g=u+1;for(;g<e.length&&m>0;)e[g]==="("&&m++,e[g]===")"&&m--,g++;let y=g-1,x=e.slice(u+1,y),S=g;for(;S<e.length&&e[S]!=="{";)S++;if(S>=e.length)continue;let w=Ve(e,S),h=p.fullMatchStart;for(;h>0&&e[h-1]===" ";)h--;let b=s.get(p.name),$=Gt(x,n);if(x.includes("...")){let E=pe(e,p.funcKeywordStart);throw new G(`Rest parameters are not supported in polymorphic function '${p.name}'. Use separate function names instead.`,E)}b.push({index:b.length+1,start:h,end:w,text:e.slice(h,w),exported:p.exported,isAsync:p.isAsync,params:$})}for(let[p,u]of s){if(u.length<2)continue;let m=u.filter(g=>g.isAsync).length;if(m>0&&m<u.length){let g=pe(e,u[0].start);throw new G(`Polymorphic function '${p}': all variants must be either sync or async, not mixed.`,g)}for(let g=0;g<u.length;g++)for(let y=g+1;y<u.length;y++){let x=u[g],S=u[y];if(x.params.length!==S.params.length)continue;let w=!0;for(let h=0;h<x.params.length;h++){let b=x.params[h].defaultValue?pt(x.params[h].defaultValue):"any",$=S.params[h].defaultValue?pt(S.params[h].defaultValue):"any";if(b!==$){w=!1;break}}if(w){let h=pe(e,S.start);throw new G(`Polymorphic function '${p}': variants ${g+1} and ${y+1} have ambiguous signatures (same parameter types at every position). Overloads must differ by arity or parameter types.`,h)}}}let l=[];for(let[p,u]of s)if(!(u.length<2))for(let m of u)l.push({name:p,variant:m});l.sort((p,u)=>u.variant.start-p.variant.start);let f=e;for(let{name:p,variant:u}of l){let m=u.isAsync?"async ":"",g=u.text.replace(new RegExp(`(?:export\\s+)?${m?m.replace(/\s+$/,"\\s+"):""}function\\s+${p}\\s*\\(`),`${m}function ${p}$$${u.index}(`);f=f.slice(0,u.start)+g+f.slice(u.end)}for(let[p,u]of s){if(u.length<2)continue;t.add(p);let m=u[0].isAsync,g=u.some(b=>b.exported),y=m?"async ":"",x=g?"export ":"",S=[...u].sort((b,$)=>{if(b.params.length!==$.params.length)return 0;let _=0,E=0;for(let k of b.params){let T=k.defaultValue?pt(k.defaultValue):"any";T==="non-negative-integer"?_+=3:T==="integer"?_+=2:T!=="any"&&(_+=1)}for(let k of $.params){let T=k.defaultValue?pt(k.defaultValue):"any";T==="non-negative-integer"?E+=3:T==="integer"?E+=2:T!=="any"&&(E+=1)}return E-_}),w=[];for(let b of S){let $=[`__args.length === ${b.params.length}`],_=[];for(let E=0;E<b.params.length;E++){let k=b.params[E];if(_.push(`__args[${E}]`),k.defaultValue){let T=cr(`__args[${E}]`,k.defaultValue);T!=="true"&&$.push(T)}}w.push(` if (${$.join(" && ")}) return ${p}$${b.index}(${_.join(", ")})`)}let h=`
|
|
26
|
+
${x}${y}function ${p}(...__args) {
|
|
27
|
+
${w.join(`
|
|
28
28
|
`)}
|
|
29
29
|
return __tjs.typeError('${p}', 'no matching overload', __args)
|
|
30
30
|
}
|
|
31
|
-
`;f+=
|
|
32
|
-
`,m);m=
|
|
33
|
-
${
|
|
34
|
-
`.repeat(
|
|
35
|
-
|
|
36
|
-
function ${c}$ctor$${_.index}(${_.paramStr}) {`,
|
|
37
|
-
const __obj = Object.create(${c}.prototype)`,
|
|
38
|
-
;(function() {${_.bodyText}}).call(__obj)`,
|
|
39
|
-
return __obj`,
|
|
31
|
+
`;f+=h}return{source:f,polymorphicNames:t}}function ur(e){let n=new Set,t=/\b(?:let|const|var|function|class)\s+([A-Z][a-zA-Z0-9_]*)/g;for(let r;r=t.exec(e);)n.add(r[1]);return e.replace(/(?<=^|[;\n{])(\s*)([A-Z][a-zA-Z0-9_]*)\s*=(?!=)/gm,(r,s,o)=>n.has(o)?r:r.replace(o,`const ${o}`))}function fr(e,n=!1){let t=[],r=[],s="",o=0;for(;o<e.length;){let i=e.slice(o).match(/^\btest\s+/);if(i){let a=o,c=o+i[0].length,l,f=e.slice(c).match(/^(['"`])([^]*?)\1\s*/);if(f&&(l=f[2],c+=f[0].length),e[c]==="{"){let p=c+1,u=1,m=p,g=null,y=!1;for(;m<e.length&&u>0;){let x=e[m];if(y){y=!1,m++;continue}if(x==="\\"&&g){y=!0,m++;continue}if(g){x===g&&(g=null),m++;continue}if(x==="/"&&e[m+1]==="/"){let S=e.indexOf(`
|
|
32
|
+
`,m);m=S===-1?e.length:S+1;continue}if(x==="/"&&e[m+1]==="*"){let S=e.indexOf("*/",m+2);m=S===-1?e.length:S+2;continue}if(x==="'"||x==='"'||x==="`"){g=x,m++;continue}x==="{"?u++:x==="}"&&u--,m++}if(u===0){let x=e.slice(p,m-1).trim(),S=m,w=(e.slice(0,a).match(/\n/g)||[]).length+1;if(t.push({description:l,body:x,start:a,end:S,line:w}),!n)try{new Function(x)()}catch($){let _=l||`test at line ${w}`;r.push(`Test failed: ${_} (line ${w})
|
|
33
|
+
${$.message||$}`)}let b=(e.slice(a,S).match(/\n/g)||[]).length;s+=`
|
|
34
|
+
`.repeat(b),o=S;continue}}}s+=e[o],o++}return{source:s,tests:t,errors:r}}function pr(e,n){let t=new Set,r=/\bclass\s+(\w+)(\s+extends\s+\w+)?\s*\{/g,s,o=[];for(;(s=r.exec(e))!==null;){let a=s[1],c=s[2]?.trim()||"",l=s.index+s[0].length-1,f=Ve(e,l),p=e.slice(l,f);o.push({className:a,extendsClause:c,bodyStart:l,bodyEnd:f,body:p})}let i=e;for(let a=o.length-1;a>=0;a--){let{className:c,extendsClause:l,bodyStart:f,bodyEnd:p,body:u}=o[a],m=/\bconstructor\s*\(/g,g,y=[];for(;(g=m.exec(u))!==null;)y.push(g.index);if(y.length<2)continue;t.add(c);let x=[];for(let $=0;$<y.length;$++){let _=y[$],E=u.indexOf("(",_),k=1,T=E+1;for(;T<u.length&&k>0;)u[T]==="("&&k++,u[T]===")"&&k--,T++;let P=u.slice(E+1,T-1),A=T;for(;A<u.length&&u[A]!=="{";)A++;let N=Ve(u,A),R=u.slice(A+1,N-1);x.push({index:$+1,paramStr:P,bodyText:R,fullStart:_,fullEnd:N})}let S=u;for(let $=x.length-1;$>=1;$--){let _=x[$],E=_.fullStart;for(;E>0&&S[E-1]===" ";)E--;E>0&&S[E-1]===`
|
|
35
|
+
`&&E--,S=S.slice(0,E)+S.slice(_.fullEnd)}let w="";for(let $=1;$<x.length;$++){let _=x[$],E=Gt(_.paramStr,n);if(_.paramStr.includes("...")){let T=pe(e,f+_.fullStart);throw new G(`Rest parameters are not supported in polymorphic constructors for '${c}'.`,T)}w+=`
|
|
36
|
+
function ${c}$ctor$${_.index}(${_.paramStr}) {`,w+=`
|
|
37
|
+
const __obj = Object.create(${c}.prototype)`,w+=`
|
|
38
|
+
;(function() {${_.bodyText}}).call(__obj)`,w+=`
|
|
39
|
+
return __obj`,w+=`
|
|
40
40
|
}
|
|
41
|
-
`}let
|
|
41
|
+
`}let h=[];for(let $=0;$<x.length;$++){let _=x[$],E=Gt(_.paramStr,n),k=[`a.length === ${E.length}`];for(let T=0;T<E.length;T++){let P=E[T];if(P.defaultValue){let A=cr(`a[${T}]`,P.defaultValue);A!=="true"&&k.push(A)}}if($===0)h.push(` if (${k.join(" && ")}) return Reflect.construct(t, a)`);else{let T=E.map((P,A)=>`a[${A}]`).join(", ");h.push(` if (${k.join(" && ")}) return ${c}$ctor$${_.index}(${T})`)}}w+=`
|
|
42
42
|
function ${c}$dispatch(t, a) {
|
|
43
|
-
`,
|
|
43
|
+
`,w+=h.join(`
|
|
44
44
|
`)+`
|
|
45
|
-
`,
|
|
46
|
-
`,
|
|
47
|
-
`,i=i.slice(0,f)+
|
|
48
|
-
`&&(r="normal"),t++):r==="block-comment"?(n+=o,o==="*"&&i==="/"?(n+=i,r="normal",t+=2):t++):r==="string-single"?(n+=o,o==="\\"?(n+=i||"",t+=2):(o==="'"&&(r="normal"),t++)):r==="string-double"?(n+=o,o==="\\"?(n+=i||"",t+=2):(o==='"'&&(r="normal"),t++)):r==="string-template"?(n+=o,o==="\\"?(n+=i||"",t+=2):o==="`"?(s--,r=s>0?"string-template":"normal",t++):o==="$"&&i==="{"?(n+=i,t+=2,r="normal"):t++):(n+=o,t++)}return n}function
|
|
49
|
-
`&&(s="normal"),r++;continue;case"block-comment":if(a==="*"&&c==="/"){r+=2,s="normal";continue}r++;continue;case"regex":if(a==="\\"&&r+1<e.length){r+=2;continue}if(a==="["){for(r++;r<e.length&&e[r]!=="]";)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++;continue}if(a==="/"){for(r++;r<e.length&&/[gimsuy]/.test(e[r]);)r++;s="normal";continue}r++;continue;case"normal":if(o.length>0){if(a==="{")o[o.length-1]++;else if(a==="}"&&(o[o.length-1]--,o[o.length-1]===0)){o.pop(),r++,s="template-string";continue}}if(a==="'"){r++,s="single-string";continue}if(a==='"'){r++,s="double-string";continue}if(a==="`"){r++,s="template-string";continue}if(a==="/"&&c==="/"){r+=2,s="line-comment";continue}if(a==="/"&&c==="*"){r+=2,s="block-comment";continue}if(a==="/"){let l=r-1;for(;l>=0&&/\s/.test(e[l]);)l--;let f=l>=0?e[l]:"";if(!f||/[=(!,;:{[&|?+\-*%<>~^]/.test(f)||l>=5&&/\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)$/.test(e.slice(Math.max(0,l-10),l+1))){r++,s="regex";continue}}if(a==="l"&&e.slice(r,r+4)==="let "&&(r===0||!/[\w$]/.test(e[r-1]))){let l=r+4;for(;l<e.length&&/\s/.test(e[l]);)l++;if(l<e.length&&/[a-zA-Z_$]/.test(e[l])){let f=l;for(;l<e.length&&/[\w$]/.test(e[l]);)l++;let p=l,u=e.slice(f,p),m=l;for(;m<e.length&&/\s/.test(e[m]);)m++;if(m<e.length&&e[m]===":"&&e[m+1]!==":"){let
|
|
50
|
-
`))return t;t++}return t}function
|
|
51
|
-
`&&(i="normal"),r++;continue;case"block-comment":if(t+=u,u==="*"&&m==="/"){t+=m,r+=2,i="normal";continue}r++;continue;case"regex":if(t+=u,u==="\\"&&r+1<e.length){t+=m,r+=2;continue}if(u==="["){for(r++;r<e.length&&e[r]!=="]";)t+=e[r],e[r]==="\\"&&r+1<e.length?(t+=e[r+1],r+=2):r++;r<e.length&&(t+=e[r],r++);continue}if(u==="/"){for(r++;r<e.length&&/[gimsuy]/.test(e[r]);)t+=e[r],r++;i="normal";continue}r++;continue;case"normal":if(a.length>0){if(u==="{")a[a.length-1]++;else if(u==="}"&&(a[a.length-1]--,a[a.length-1]===0)){a.pop(),t+=u,r++,i="template-string";continue}}if(u==="'"){t+=u,r++,i="single-string";continue}if(u==='"'){t+=u,r++,i="double-string";continue}if(u==="`"){t+=u,r++,i="template-string";continue}if(u==="/"&&m==="/"){t+=u+m,r+=2,i="line-comment";continue}if(u==="/"&&m==="*"){t+=u+m,r+=2,i="block-comment";continue}if(u==="/"){let
|
|
52
|
-
`})(),S
|
|
53
|
-
`){s=!1,t+=a,i++;continue}if(o&&a==="*"&&c==="/"){o=!1,t+="*/",i+=2;continue}if(s||o){t+=a,i++;continue}a==="("||a==="{"||a==="["?(r++,t+=a):a===")"||a==="}"||a==="]"?(r--,t+=a):a===","&&r===0?(n.push(t),t=""):t+=a,i++}return t.trim()&&n.push(t),n}function
|
|
54
|
-
`,t),o=s===-1?e.length:s;n+=" ".repeat(o-t),t=o;continue}n+=r,t++}return n}function bt(e,n={}){let t=e,r,s=new Set,o=new Set,i=new Set,a=/\/\*\s*tjs\s*<-\s*\S+\s*\*\//.test(e),c=n.dialect==="js"?!0:n.dialect==="tjs"?!1:a||n.vmTarget,l=c?{tjsEquals:!1,tjsClass:!1,tjsDate:!1,tjsNoeval:!1,tjsStandard:!1,tjsSafeEval:!1,tjsNoVar:!1,tjsSafeAssign:!1}:{tjsEquals:!0,tjsClass:!0,tjsDate:!0,tjsNoeval:!0,tjsStandard:!0,tjsSafeEval:!1,tjsNoVar:!0,tjsSafeAssign:!0};c&&(r="none");let f=e.match(/^(\s*(?:\/\/[^\n]*\n|\/\*[\s\S]*?\*\/\s*)*)\s*safety\s+(none|inputs|all)\b/);f&&(r=f[2],e=e.replace(/^(\s*(?:\/\/[^\n]*\n|\/\*[\s\S]*?\*\/\s*)*)\s*safety\s+(none|inputs|all)\s*/,"$1"));let p=/^(\s*(?:\/\/[^\n]*\n|\/\*[\s\S]*?\*\/\s*)*)\s*(TjsStrict|TjsCompat|TjsEquals|TjsClass|TjsDate|TjsNoeval|TjsNoVar|TjsStandard|TjsSafeEval|TjsSafeAssign)\b/,u;for(;u=e.match(p);){let A=u[2];A==="TjsStrict"?(l.tjsEquals=!0,l.tjsClass=!0,l.tjsDate=!0,l.tjsNoeval=!0,l.tjsNoVar=!0,l.tjsStandard=!0,l.tjsSafeAssign=!0):A==="TjsCompat"?(l.tjsEquals=!1,l.tjsClass=!1,l.tjsDate=!1,l.tjsNoeval=!1,l.tjsNoVar=!1,l.tjsStandard=!1,l.tjsSafeEval=!1,l.tjsSafeAssign=!1):A==="TjsEquals"?l.tjsEquals=!0:A==="TjsClass"?l.tjsClass=!0:A==="TjsDate"?l.tjsDate=!0:A==="TjsNoeval"?l.tjsNoeval=!0:A==="TjsNoVar"?l.tjsNoVar=!0:A==="TjsStandard"?l.tjsStandard=!0:A==="TjsSafeEval"?l.tjsSafeEval=!0:A==="TjsSafeAssign"&&(l.tjsSafeAssign=!0),e=e.replace(new RegExp(`^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*${A}\\s*`),"$1")}e=
|
|
55
|
-
`),
|
|
56
|
-
`)),t.description=u.trim(),t}}let o=r.match(/\/\*\*[\s\S]*?\*\/\s*$/);if(!o)return t;let i=o[0],a=i.match(/\/\*\*\s*\n?\s*\*?\s*([^@\n][^\n]*)/m);a&&(t.description=a[1].trim());let c=/@param\s+(?:\{[^}]+\}\s+)?(\w+)\s*-?\s*(.*)/g,l;for(;(l=c.exec(i))!==null;)t.params[l[1]]=l[2].trim();return t}import{parseExpressionAt as Gs}from"acorn";function Y(e){switch(e.type){case"Literal":{let n=e.value;if(n===null)return{kind:"null"};if(typeof n=="string")return{kind:"string"};if(typeof n=="number"){let t=e.raw;return t&&t.includes(".")?{kind:"number"}:{kind:"integer"}}return typeof n=="boolean"?{kind:"boolean"}:{kind:"any"}}case"ArrayExpression":{let n=e.elements;if(n.length===0)return{kind:"array",items:{kind:"any"}};let t=n.filter(i=>i!=null).map(i=>Y(i));if(t.length===0)return{kind:"array",items:{kind:"any"}};let r=new Map;for(let i of t){let a=JSON.stringify(i);r.has(a)||r.set(a,i)}let s=[...r.values()];return{kind:"array",items:s.length===1?s[0]:{kind:"union",members:s}}}case"ObjectExpression":{let n=e.properties,t={};for(let r of n)if(r.type==="Property"&&r.key.type==="Identifier"){let s=r.key.name;t[s]=Y(r.value)}return{kind:"object",shape:t}}case"LogicalExpression":{let{operator:n,left:t,right:r}=e;return n==="||"?Y(t):n==="&&"||n==="??"?Y(r):{kind:"any"}}case"BinaryExpression":{let{operator:n,left:t,right:r}=e;if(n==="|"){let s=Y(t),o=Y(r);return o.kind==="null"?{...s,nullable:!0}:s.kind==="null"?{...o,nullable:!0}:{kind:"union",members:[s,o]}}return{kind:"any"}}case"Identifier":return e.name==="undefined"?{kind:"undefined"}:{kind:"any"};case"ArrowFunctionExpression":case"FunctionExpression":{let n=e,t=n.params.map(s=>Zs(s)),r={kind:"any"};return n.type==="ArrowFunctionExpression"&&n.body&&n.body.type!=="BlockStatement"&&(r=Y(n.body)),{kind:"function",params:t,returns:r}}case"UnaryExpression":{let n=e.operator,t=e.argument;if(n==="+"&&t.type==="Literal"&&typeof t.value=="number")return{kind:"non-negative-integer"};if(n==="-"&&t.type==="Literal"&&typeof t.value=="number"){let s=t.raw;return s&&s.includes(".")?{kind:"number"}:{kind:"integer"}}return{kind:"any"}}default:return{kind:"any"}}}function Zs(e){return e.type==="Identifier"?{name:e.name,type:{kind:"any"}}:e.type==="AssignmentPattern"&&e.left?.type==="Identifier"?{name:e.left.name,type:Y(e.right)}:e.type==="RestElement"&&e.argument?.type==="Identifier"?{name:`...${e.argument.name}`,type:{kind:"array",items:{kind:"any"}}}:{name:"?",type:{kind:"any"}}}function ge(e,n){if(e.type==="Identifier")return{name:e.name,type:{kind:"any"},required:!0};if(e.type==="AssignmentPattern"){let{left:t,right:r}=e;if(t.type!=="Identifier")throw new W("Only simple parameter names are supported",U(e));let s=t.name,o=n?.has(s)??!1,i=Y(r),a=ce(r);return{name:s,type:i,required:o,default:o?null:a,example:a,loc:{start:e.start,end:e.end}}}if(e.type==="ObjectPattern"){let t=e.properties,r={},s={};for(let o of t)if(o.type==="Property"){let i=o.key.type==="Identifier"?o.key.name:String(o.key.value);if(o.value.type==="Identifier")r[i]={kind:"any"},s[i]={name:i,type:{kind:"any"},required:!0};else if(o.value.type==="AssignmentPattern"){let a=ge(o.value,n),c=n?.has(i)??!1;r[i]=a.type,s[i]={name:i,type:a.type,required:c,default:c?null:a.example,example:a.example}}}return{name:"__destructured__",type:{kind:"object",shape:r,destructuredParams:s},required:!0}}throw new W(`Unsupported parameter pattern: ${e.type}`,U(e))}function ce(e){switch(e.type){case"Literal":return e.value;case"ArrayExpression":return e.elements.map(n=>n?ce(n):null);case"ObjectExpression":{let n={};for(let t of e.properties)t.type==="Property"&&t.key.type==="Identifier"&&(n[t.key.name]=ce(t.value));return n}case"UnaryExpression":if(e.operator==="-"){let n=ce(e.argument);return typeof n=="number"?-n:void 0}if(e.operator==="+"){let n=ce(e.argument);return typeof n=="number"?+n:void 0}return;case"BinaryExpression":{let{operator:n,left:t}=e;return n==="|"?ce(t):void 0}case"LogicalExpression":{let{operator:n,left:t,right:r}=e;return n==="&&"&&t.type==="Literal"&&t.value===null?null:n==="||"||n==="??"?ce(t)??ce(r):void 0}default:return}}function Sr(e){try{let n=Gs(e,0,{ecmaVersion:2022});return Y(n)}catch{return{kind:"any"}}}function Gt(e){switch(e.kind){case"string":return e.nullable?"string | null":"string";case"number":return e.nullable?"number | null":"number";case"integer":return e.nullable?"integer | null":"integer";case"non-negative-integer":return e.nullable?"non-negative integer | null":"non-negative integer";case"boolean":return e.nullable?"boolean | null":"boolean";case"null":return"null";case"any":return"any";case"array":{let n=e.items?Gt(e.items):"any";return e.nullable?`${n}[] | null`:`${n}[]`}case"object":{if(!e.shape||Object.keys(e.shape).length===0)return e.nullable?"object | null":"object";let n=Object.entries(e.shape).map(([t,r])=>`${t}: ${Gt(r)}`).join(", ");return e.nullable?`{ ${n} } | null`:`{ ${n} }`}case"union":return e.members?.map(Gt).join(" | ")||"any";default:return"any"}}function xt(e){switch(e.kind){case"string":return{type:"string"};case"number":return{type:"number"};case"boolean":return{type:"boolean"};case"null":return{};case"undefined":return{};case"any":return{};case"array":return{type:"array",items:e.items?xt(e.items):{}};case"object":if(e.shape){let n={};for(let[t,r]of Object.entries(e.shape))n[t]=xt(r);return{type:"object",properties:n,additionalProperties:!1}}return{type:"object"};case"union":return e.members?{oneOf:e.members.map(xt)}:{};default:return{}}}function Ks(e){let n={},t=[];for(let[r,s]of Object.entries(e))n[r]=xt(s.type),s.required&&t.push(r);return{type:"object",properties:n,required:t.length>0?t:void 0,additionalProperties:!1}}function Zt(e,n,t,r={},s,o){let i=He(n,e),a=new Map;for(let S of e.params){let b=ge(S,s);if(b.name==="__destructured__"&&b.type.kind==="object"&&b.type.destructuredParams)for(let[h,w]of Object.entries(b.type.destructuredParams))a.set(h,{...w,description:i.params[h]});else b.description=i.params[b.name],a.set(b.name,b)}let c;t&&(c=Sr(t));let l={depth:0,locals:new Map,parameters:a,atoms:new Set(Object.keys(r.atoms||{})),warnings:[],source:n,filename:r.filename||"<source>",options:r,helpers:o,helperSteps:o?new Map:void 0,helperTransforming:o?new Set:void 0},f=oe(e.body,l),p=[],u=[],m=[];for(let[S,b]of a.entries())b.required?u.push(S):b.default!==void 0?m.push({name:S,defaultValue:b.default}):u.push(S);u.length>0&&p.push({op:"varsImport",keys:u});for(let{name:S,defaultValue:b}of m)p.push({op:"varsImport",keys:[S]}),p.push({op:"if",condition:{$expr:"binary",op:"==",left:{$expr:"ident",name:S},right:{$expr:"literal",value:null}},then:[{op:"varSet",key:S,value:b}]});p.push(...f);let y=Object.fromEntries(a),g={name:e.id?.name||"anonymous",description:i.description,parameters:y,returns:c},x=Ks(y),E=l.helperSteps&&l.helperSteps.size>0?Object.fromEntries(l.helperSteps):void 0;return{ast:{op:"seq",steps:p,inputSchema:x,...E&&{helpers:E}},signature:g,warnings:l.warnings}}function oe(e,n){let t=[];for(let r of e.body){let s=Ye(r,n);s&&(Array.isArray(s)?t.push(...s):t.push(s))}return t}function Ye(e,n){switch(e.type){case"VariableDeclaration":return Hs(e,n);case"ExpressionStatement":return Ys(e,n);case"IfStatement":return Qs(e,n);case"WhileStatement":return ei(e,n);case"ForOfStatement":return ti(e,n);case"TryStatement":return ni(e,n);case"ReturnStatement":return ri(e,n);case"ThrowStatement":throw new W("'throw' is not supported in AsyncJS. Use Error('message') to trigger error flow",U(e),n.source,n.filename);case"BlockStatement":return{op:"scope",steps:oe(e,re(n))};case"EmptyStatement":return null;default:throw new W(`Unsupported statement type: ${e.type}`,U(e),n.source,n.filename)}}function Hs(e,n){let t=[],r=e.kind==="const",s=r?"constSet":"varSet";for(let o of e.declarations){if(o.id.type!=="Identifier")throw new W("Only simple variable names are supported",U(o),n.source,n.filename);let i=o.id.name;if(o.init){let{step:a,resultVar:c}=Ee(o.init,n,i,r);a?t.push(a):c!==i&&t.push({op:s,key:i,value:c});let l=Y(o.init);n.locals.set(i,l)}else{if(r)throw new W("const declarations must be initialized",U(o),n.source,n.filename);t.push({op:"varSet",key:i,value:null}),n.locals.set(i,{kind:"any",nullable:!0})}}return t}function Ys(e,n){let t=e.expression;if(t.type==="AssignmentExpression")return Xs(t,n);if(t.type==="CallExpression"){let{step:r,resultVar:s}=Ee(t,n);return r||(s?{op:"varSet",key:"_",value:s}:null)}return n.warnings.push({message:"Expression statement has no effect",line:U(e).line,column:U(e).column}),null}function Xs(e,n){if(e.left.type!=="Identifier")throw new W("Only simple variable assignment is supported",U(e),n.source,n.filename);let t=e.left.name,{step:r,resultVar:s}=Ee(e.right,n,t);return r||{op:"varSet",key:t,value:s}}function Qs(e,n){let t=F(e.test,n),r=e.consequent.type==="BlockStatement"?oe(e.consequent,re(n)):[Ye(e.consequent,n)].filter(Boolean),s;return e.alternate&&(s=e.alternate.type==="BlockStatement"?oe(e.alternate,re(n)):[Ye(e.alternate,n)].filter(Boolean)),{op:"if",condition:t,then:r,...s&&{else:s}}}function ei(e,n){let t=F(e.test,n),r=e.body.type==="BlockStatement"?oe(e.body,re(n)):[Ye(e.body,n)].filter(Boolean);return{op:"while",condition:t,body:r}}function ti(e,n){let t;if(e.left.type==="VariableDeclaration"){let i=e.left.declarations[0];if(i.id.type!=="Identifier")throw new W("Only simple variable names are supported in for...of",U(e.left),n.source,n.filename);t=i.id.name}else if(e.left.type==="Identifier")t=e.left.name;else throw new W("Unsupported for...of left-hand side",U(e.left),n.source,n.filename);let r=K(e.right,n),s=re(n);s.locals.set(t,{kind:"any"});let o=e.body.type==="BlockStatement"?oe(e.body,s):[Ye(e.body,s)].filter(Boolean);return{op:"map",items:r,as:t,steps:o}}function ni(e,n){let t=oe(e.block,re(n)),r,s;if(e.handler){let o=re(n);e.handler.param?.type==="Identifier"&&(s=e.handler.param.name,o.locals.set(s,{kind:"any"})),r=oe(e.handler.body,o)}return{op:"try",try:t,...r&&{catch:r},...s&&{catchParam:s}}}function ri(e,n){if(!e.argument)return{op:"return",value:{}};let{step:t,resultVar:r}=Ee(e.argument,n,"__returnVal__");return t?[t,{op:"return",value:r}]:{op:"return",value:K(e.argument,n)}}var Tr=new Set(["Math","JSON","Array","Object","String","Number","console","Date","Schema"]),si=new Set(["parseInt","parseFloat","isNaN","isFinite","encodeURI","decodeURI","encodeURIComponent","decodeURIComponent","Set","Date","filter"]),Xe=new Set(["RegExp","Promise","Map","WeakSet","WeakMap","Symbol","Proxy","Reflect","Function","eval","setTimeout","setInterval","fetch","require","import","process","window","document","global","globalThis"]),ii=new Set(["toUpperCase","toLowerCase","trim","trimStart","trimEnd","charAt","charCodeAt","codePointAt","concat","includes","indexOf","lastIndexOf","startsWith","endsWith","slice","substring","substr","replace","replaceAll","match","search","padStart","padEnd","repeat","normalize","localeCompare","toString","valueOf","at","reverse","sort","fill","copyWithin","flat","flatMap","every","some","forEach","add","remove","has","clear","toArray","union","intersection","diff","format","isBefore","isAfter"]);function oi(e){if(e.callee.type==="Identifier"){let n=e.callee.name;return si.has(n)||Xe.has(n)}if(e.callee.type==="MemberExpression"){let n=e.callee;if(n.object.type==="Identifier"){let t=n.object.name;if(Tr.has(t)||Xe.has(t))return!0}if(n.property.type==="Identifier"){let t=n.property.name;if(ii.has(t))return!0}}return!1}function ai(e){if(e.object.type==="Identifier"){let n=e.object.name;return Tr.has(n)||Xe.has(n)}return!1}var Er={RegExp:"RegExp is not available. Use string methods or the regexMatch atom.",Promise:"Promise is not needed. All operations are implicitly async.",Map:"Map is not available. Use plain objects instead.",WeakSet:"WeakSet is not available.",WeakMap:"WeakMap is not available.",Symbol:"Symbol is not available.",Proxy:"Proxy is not available.",Reflect:"Reflect is not available.",Function:"Function constructor is not available. Define functions normally.",eval:"eval is not available. Code is compiled, not evaluated.",setTimeout:"setTimeout is not available. Use the delay atom.",setInterval:"setInterval is not available. Use while loops with delay.",fetch:"fetch is not available. Use the httpFetch atom.",require:"require is not available. Atoms must be registered with the VM.",import:"import is not available. Atoms must be registered with the VM.",process:"process is not available. AsyncJS runs in a sandboxed environment.",window:"window is not available. AsyncJS runs in a sandboxed environment.",document:"document is not available. AsyncJS runs in a sandboxed environment.",global:"global is not available. AsyncJS runs in a sandboxed environment.",globalThis:"globalThis is not available. Use builtins directly."};function ci(e){if(e.callee.type==="Identifier"){let n=e.callee.name;if(Xe.has(n))return Er[n]||`${n} is not available in AsyncJS.`}if(e.callee.type==="MemberExpression"){let n=e.callee;if(n.object.type==="Identifier"){let t=n.object.name;if(Xe.has(t))return Er[t]||`${t} is not available in AsyncJS.`}}return null}function kr(e){return{Date:" Use Date() or Date('2024-01-15') instead - no 'new' needed.",Set:" Use Set([items]) instead - no 'new' needed.",Map:" Use plain objects instead of Map.",Array:" Use array literals like [1, 2, 3] instead.",Object:" Use object literals like { key: value } instead.",Error:" Return an error object like { error: 'message' } instead.",RegExp:" Use string methods or the regexMatch atom.",Promise:" Not needed - all operations are implicitly async.",WeakSet:" WeakSet is not available.",WeakMap:" WeakMap is not available."}[e]||" Use factory functions or object literals instead."}function Ee(e,n,t,r){let s=r?"constSet":"varSet";if(e.type==="ChainExpression")return Ee(e.expression,n,t,r);if(e.type==="NewExpression"){let i=e,a="constructor";i.callee.type==="Identifier"&&(a=i.callee.name);let c=kr(a);throw new W(`The 'new' keyword is not supported in AsyncJS.${c}`,U(e),n.source,n.filename)}if(e.type==="CallExpression"){let i=ci(e);if(i)throw new W(i,U(e),n.source,n.filename)}if(e.type==="CallExpression"&&oi(e)){let i=F(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}if(e.type==="MemberExpression"&&ai(e)){let i=F(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}if(e.type==="CallExpression")return li(e,n,t,r);if(e.type==="TemplateLiteral")return pi(e,n,t,r);if(e.type==="BinaryExpression"||e.type==="LogicalExpression"||e.type==="UnaryExpression"){let i=F(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}return{step:null,resultVar:K(e,n)}}function li(e,n,t,r){let s,o=!1,i;if(e.callee.type==="Identifier")s=e.callee.name;else if(e.callee.type==="MemberExpression"){let c=e.callee;if(c.property.type==="Identifier")s=c.property.name,o=!0,i=K(c.object,n);else throw new W("Computed method names are not supported",U(e),n.source,n.filename)}else throw new W("Only named function calls are supported",U(e),n.source,n.filename);if(o)return fi(s,i,e.arguments,n,t,r);if(s==="console"&&e.callee.type,n.helpers?.has(s)){let c=ui(s,n,e),l=e.arguments.map(f=>K(f,n));if(l.length!==c.length)throw new W(`Helper '${s}' expects ${c.length} argument(s), got ${l.length}`,U(e),n.source,n.filename);return{step:{op:"callLocal",name:s,args:l,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}let a=mi(e,n);return{step:{op:s,...a,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}function ui(e,n,t){let r=n.helpers.get(e),s=[];for(let o of r.params){let i;if(o.type==="Identifier"?i=o:o.type==="AssignmentPattern"&&o.left?.type==="Identifier"&&(i=o.left),!i)throw new W(`Helper '${e}' parameters must be plain identifiers (optionally with an example value); destructuring is not supported`,o.loc?.start??U(t),n.source,n.filename);s.push(i.name)}if(n.helperSteps.has(e)||n.helperTransforming.has(e))return s;n.helperTransforming.add(e);try{let o={depth:0,locals:new Map,parameters:new Map(s.map(a=>[a,{name:a,type:{kind:"any"},required:!0}])),atoms:n.atoms,warnings:n.warnings,source:n.source,filename:n.filename,options:n.options,helpers:n.helpers,helperSteps:n.helperSteps,helperTransforming:n.helperTransforming},i=oe(r.body,o);n.helperSteps.set(e,{steps:i,paramNames:s})}finally{n.helperTransforming.delete(e)}return s}function fi(e,n,t,r,s,o){switch(e){case"map":if(t.length>0&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=a?.type==="Identifier"?a.name:"item",l=re(r);l.locals.set(c,{kind:"any"});let f;if(i.body.type==="BlockStatement")f=oe(i.body,l);else{let{step:p,resultVar:u}=Ee(i.body,l,"result");f=p?[p]:[{op:"varSet",key:"result",value:u}]}return{step:{op:"map",items:n,as:c,steps:f,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"filter":if(t.length>0&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=a?.type==="Identifier"?a.name:"item",l=re(r);l.locals.set(c,{kind:"any"});let f;if(i.body.type==="BlockStatement")throw new W("filter callback must be an expression, not a block",U(t[0]),r.source,r.filename);return f=F(i.body,l),{step:{op:"filter",items:n,as:c,condition:f,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"find":if(t.length>0&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=a?.type==="Identifier"?a.name:"item",l=re(r);l.locals.set(c,{kind:"any"});let f;if(i.body.type==="BlockStatement")throw new W("find callback must be an expression, not a block",U(t[0]),r.source,r.filename);return f=F(i.body,l),{step:{op:"find",items:n,as:c,condition:f,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"reduce":if(t.length>=2&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=i.params[1],l=a?.type==="Identifier"?a.name:"acc",f=c?.type==="Identifier"?c.name:"item",p=re(r);p.locals.set(l,{kind:"any"}),p.locals.set(f,{kind:"any"});let u;if(i.body.type==="BlockStatement")u=oe(i.body,p);else{let{step:y,resultVar:g}=Ee(i.body,p,"result");u=y?[y]:[{op:"varSet",key:"result",value:g}]}let m=K(t[1],r);return{step:{op:"reduce",items:n,as:f,accumulator:l,initial:m,steps:u,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"slice":break;case"push":return{step:{op:"push",list:n,item:K(t[0],r),...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s};case"join":return{step:{op:"join",list:n,sep:t.length>0?K(t[0],r):"",...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s};case"split":return{step:{op:"split",str:n,sep:t.length>0?K(t[0],r):"",...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}return r.warnings.push({message:`Unknown method '${e}' - treating as atom call`,line:0,column:0}),{step:{op:e,receiver:n,args:t.map(i=>K(i,r)),...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}function pi(e,n,t,r){let s="",o={};for(let i=0;i<e.quasis.length;i++)if(s+=e.quasis[i].value.cooked||e.quasis[i].value.raw,i<e.expressions.length){let a=e.expressions[i],c=`_${i}`;o[c]=K(a,n),s+=`{{${c}}}`}return{step:{op:"template",tmpl:s,vars:o,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}function F(e,n){switch(e.type){case"Literal":return{$expr:"literal",value:e.value};case"Identifier":return{$expr:"ident",name:e.name};case"MemberExpression":{let t=e,r=F(t.object,n),s=t.optional===!0;if(t.computed){let i=t.property;return i.type==="Literal"?{$expr:"member",object:r,property:String(i.value),computed:!0,...s&&{optional:!0}}:{$expr:"member",object:r,property:F(i,n),computed:!0,...s&&{optional:!0}}}let o=t.property.name;return{$expr:"member",object:r,property:o,...s&&{optional:!0}}}case"ChainExpression":return F(e.expression,n);case"BinaryExpression":{let t=e;return{$expr:"binary",op:t.operator,left:F(t.left,n),right:F(t.right,n)}}case"LogicalExpression":{let t=e;return{$expr:"logical",op:t.operator,left:F(t.left,n),right:F(t.right,n)}}case"UnaryExpression":{let t=e;return{$expr:"unary",op:t.operator,argument:F(t.argument,n)}}case"ConditionalExpression":{let t=e;return{$expr:"conditional",test:F(t.test,n),consequent:F(t.consequent,n),alternate:F(t.alternate,n)}}case"ArrayExpression":return{$expr:"array",elements:e.elements.filter(r=>r!==null).map(r=>F(r,n))};case"ObjectExpression":{let t=e,r=[];for(let s of t.properties)if(s.type==="Property"){let o=s.key.type==="Identifier"?s.key.name:String(s.key.value);r.push({key:o,value:F(s.value,n)})}return{$expr:"object",properties:r}}case"CallExpression":{let t=e;if(t.callee.type==="MemberExpression"){let r=t.callee,s=r.property.type==="Identifier"?r.property.name:String(r.property.value),o=r.optional===!0||t.optional===!0;return{$expr:"methodCall",object:F(r.object,n),method:s,arguments:t.arguments.map(i=>F(i,n)),...o&&{optional:!0}}}if(t.callee.type==="Identifier"){let r=t.callee.name;if(n.helpers?.has(r))throw new W(`Helper '${r}' cannot be called inside an expression. Assign its result to a variable first: const result = ${r}(...); then use result.`,U(e),n.source,n.filename);return{$expr:"call",callee:r,arguments:t.arguments.map(s=>F(s,n))}}throw new W("Complex function calls in expressions should be lifted to statements",U(e),n.source,n.filename)}case"NewExpression":{let t=e,r="constructor";t.callee.type==="Identifier"&&(r=t.callee.name);let s=kr(r);throw new W(`The 'new' keyword is not supported in AsyncJS.${s}`,U(e),n.source,n.filename)}case"TemplateLiteral":throw new W("Template literals inside expressions are not supported. Assign to a variable first: const msg = `hello ${name}`; then use msg",U(e),n.source,n.filename);default:throw new W(`Unsupported expression type in condition: ${e.type}`,U(e),n.source,n.filename)}}function K(e,n){switch(e.type){case"Literal":return e.value;case"Identifier":return e.name;case"MemberExpression":{let t=e;if(t.optional===!0)return F(e,n);let s=K(t.object,n);if(s&&typeof s=="object"&&s.$expr){let i=t.computed?String(t.property.value):t.property.name;return{$expr:"member",object:s,property:i,...t.computed&&{computed:!0}}}if(t.computed)return F(e,n);let o=t.property.name;return typeof s=="string"?`${s}.${o}`:s&&s.$kind==="arg"?{$kind:"arg",path:`${s.path}.${o}`}:`${s}.${o}`}case"ChainExpression":return K(e.expression,n);case"ArrayExpression":return e.elements.map(t=>t?K(t,n):null);case"ObjectExpression":{let t={};for(let r of e.properties)if(r.type==="Property"){let s=r.key.type==="Identifier"?r.key.name:String(r.key.value);t[s]=K(r.value,n)}return t}case"TemplateLiteral":return F(e,n);case"CallExpression":return F(e,n);case"BinaryExpression":case"LogicalExpression":case"UnaryExpression":case"ConditionalExpression":return F(e,n);default:return null}}function mi(e,n){if(e.arguments.length===1&&e.arguments[0].type==="ObjectExpression"){let t=e.arguments[0],r={};for(let s of t.properties)if(s.type==="Property"){let o=s.key.type==="Identifier"?s.key.name:String(s.key.value);r[o]=K(s.value,n)}return r}return{args:e.arguments.map(t=>K(t,n))}}import{parseExpressionAt as as}from"acorn";function di(e,n){let t=n;for(;t>0&&e[t-1]!==`
|
|
57
|
-
`;)t--;if(e.slice(t,n).includes("//"))return!0;let s=0,o=!1;for(;s<n;)!o&&e.slice(s,s+2)==="/*"?(o=!0,s+=2):o&&e.slice(s,s+2)==="*/"?(o=!1,s+=2):s++;return o}function
|
|
45
|
+
`,w+=` return __tjs.typeError('${c}', 'no matching constructor', a)
|
|
46
|
+
`,w+=`}
|
|
47
|
+
`,i=i.slice(0,f)+S+i.slice(p);let b=f+S.length;i=i.slice(0,b)+w+i.slice(b)}return{source:i,polyCtorClasses:t}}function mr(e,n=new Set){let t=/\bclass\s+(\w+)(\s+extends\s+\w+)?\s*\{/g,r="",s=0,o;for(;(o=t.exec(e))!==null;){let i=o[1],a=o[2]||"",c=o.index,l=c+o[0].length-1,f=1,p=l+1;for(;p<e.length&&f>0;){let u=e[p];u==="{"?f++:u==="}"&&f--,p++}if(f===0){let u=p,m=e.slice(l,u);r+=e.slice(s,c),r+=`let ${i} = class ${i}${a} ${m}; `,n.has(i)?r+=`${i} = new Proxy(${i}, { apply(t, _, a) { return ${i}$dispatch(t, a) }, construct(t, a) { return ${i}$dispatch(t, a) } });`:r+=`${i} = new Proxy(${i}, { apply(t, _, a) { return Reflect.construct(t, a) } });`,s=u}}return r+=e.slice(s),r}function dr(e){let n=[{pattern:/\bnew\s+Date\b/,message:"new Date() is not allowed in TjsDate mode. Use Timestamp.now()/Timestamp.from() for wall-clock dates, or performance.now() for a monotonic counter (timing, id generation)"},{pattern:/\bDate\.now\b/,message:"Date.now() is not allowed in TjsDate mode. Use Timestamp.now() for a wall-clock date, or performance.now() for a monotonic counter (timing, id generation)"},{pattern:/\bDate\.parse\b/,message:"Date.parse() is not allowed in TjsDate mode. Use Timestamp.parse()"},{pattern:/\bDate\.UTC\b/,message:"Date.UTC() is not allowed in TjsDate mode. Use Timestamp.from()"}];for(let{pattern:t,message:r}of n)if(t.test(e))throw new Error(r);return e}function gr(e){let n=new Set,t=/\bconst!\s+(\w+)\b/g,r;for(;(r=t.exec(e))!==null;)n.add(r[1]);if(n.size===0)return e;e=e.replace(/\bconst!\s+/g,"const ");let s=e.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"");for(let o of n){if(new RegExp(`\\b${o}\\s*(?:\\.[\\w]+|\\[[^\\]]+\\])\\s*(?:=(?!=)|\\+\\+|--|\\+=|-=|\\*=|\\/=|%=|&&=|\\|\\|=|\\?\\?=|<<=|>>=|>>>=|\\^=|&=|\\|=)`,"g").test(s))throw new Error(`Cannot mutate immutable binding '${o}'. const! bindings are read-only at compile time.`);if(new RegExp(`(?:\\+\\+|--)\\s*${o}\\s*(?:\\.[\\w]+|\\[[^\\]]+\\])`,"g").test(s))throw new Error(`Cannot mutate immutable binding '${o}'. const! bindings are read-only at compile time.`);if(new RegExp(`\\bdelete\\s+${o}\\s*(?:\\.[\\w]+|\\[[^\\]]+\\])`,"g").test(s))throw new Error(`Cannot mutate immutable binding '${o}'. const! bindings are read-only at compile time.`);let l="push|pop|splice|shift|unshift|sort|reverse|fill|copyWithin|set";if(new RegExp(`\\b${o}\\s*\\.\\s*(?:${l})\\s*\\(`,"g").test(s))throw new Error(`Cannot call mutating method on immutable binding '${o}'. const! bindings are read-only at compile time.`)}return e}function yr(e){if(/(?<![a-zA-Z_$])\bvar\s+/.test(e))throw new Error("var is not allowed in TjsNoVar mode. Use const or let instead.");return e}function hr(e){if(/(?<![A-Za-z_$])\beval\s*\(/.test(e))throw new Error("eval() is not allowed in TjsNoeval mode. Use Eval() from TJS runtime for safe evaluation.");if(/\bnew\s+Function\s*\(/.test(e))throw new Error("new Function() is not allowed in TjsNoeval mode. Use SafeFunction() from TJS runtime.");return e}function br(e){if(!e.includes("!."))return e;let n="",t=0,r="normal",s=0;for(;t<e.length;){let o=e[t],i=e[t+1];if(r==="normal"){if(o==="/"&&i==="/"){r="line-comment",n+=o,t++;continue}if(o==="/"&&i==="*"){r="block-comment",n+=o,t++;continue}if(o==="'"){r="string-single",n+=o,t++;continue}if(o==='"'){r="string-double",n+=o,t++;continue}if(o==="`"){r="string-template",s++,n+=o,t++;continue}if(o==="!"&&i==="."&&t+2<e.length&&/[a-zA-Z_$]/.test(e[t+2])){let a=n.length,c=zs(n);if(c<a){let l=n.slice(c);n=n.slice(0,c);let f=t+2;for(;f<e.length&&/[\w$]/.test(e[f]);)f++;let p=e.slice(t+2,f);n+=`__tjs.bang(${l},'${p}')`,t=f;continue}}n+=o,t++}else r==="line-comment"?(n+=o,o===`
|
|
48
|
+
`&&(r="normal"),t++):r==="block-comment"?(n+=o,o==="*"&&i==="/"?(n+=i,r="normal",t+=2):t++):r==="string-single"?(n+=o,o==="\\"?(n+=i||"",t+=2):(o==="'"&&(r="normal"),t++)):r==="string-double"?(n+=o,o==="\\"?(n+=i||"",t+=2):(o==='"'&&(r="normal"),t++)):r==="string-template"?(n+=o,o==="\\"?(n+=i||"",t+=2):o==="`"?(s--,r=s>0?"string-template":"normal",t++):o==="$"&&i==="{"?(n+=i,t+=2,r="normal"):t++):(n+=o,t++)}return n}function zs(e){let n=e.length-1;for(;n>=0&&/\s/.test(e[n]);)n--;if(n<0)return e.length;for(;n>=0;){let t=e[n];if(/[\w$]/.test(t)){for(;n>=0&&/[\w$]/.test(e[n]);)n--;if(n>=0&&e[n]==="."){n>=1&&e[n-1]==="?"?n-=2:n--;continue}return n+1}else if(t===")"){if(n=Hn(e,n,"(",")"),n<0)return 0;if(n--,n>=0&&/[\w$]/.test(e[n]))continue;if(n>=0&&e[n]==="."){n>=1&&e[n-1]==="?"?n-=2:n--;continue}return n+1}else if(t==="]"){if(n=Hn(e,n,"[","]"),n<0)return 0;if(n--,n>=0&&/[\w$]/.test(e[n]))continue;if(n>=0&&e[n]==="."){n>=1&&e[n-1]==="?"?n-=2:n--;continue}return n+1}else return n+1}return 0}function Hn(e,n,t,r){let s=1;for(n--;n>=0&&s>0;)e[n]===r?s++:e[n]===t&&s--,s>0&&n--;return n}function xr(e){let n=new Map;if(!e.includes("let "))return{source:e,annotations:n};let t=[],r=0,s="normal",o=[];for(;r<e.length;){let a=e[r],c=e[r+1];switch(s){case"single-string":if(a==="\\"&&r+1<e.length){r+=2;continue}a==="'"&&(s="normal"),r++;continue;case"double-string":if(a==="\\"&&r+1<e.length){r+=2;continue}a==='"'&&(s="normal"),r++;continue;case"template-string":if(a==="\\"&&r+1<e.length){r+=2;continue}if(a==="$"&&c==="{"){r+=2,o.push(1),s="normal";continue}a==="`"&&(s="normal"),r++;continue;case"line-comment":a===`
|
|
49
|
+
`&&(s="normal"),r++;continue;case"block-comment":if(a==="*"&&c==="/"){r+=2,s="normal";continue}r++;continue;case"regex":if(a==="\\"&&r+1<e.length){r+=2;continue}if(a==="["){for(r++;r<e.length&&e[r]!=="]";)e[r]==="\\"&&r+1<e.length?r+=2:r++;r<e.length&&r++;continue}if(a==="/"){for(r++;r<e.length&&/[gimsuy]/.test(e[r]);)r++;s="normal";continue}r++;continue;case"normal":if(o.length>0){if(a==="{")o[o.length-1]++;else if(a==="}"&&(o[o.length-1]--,o[o.length-1]===0)){o.pop(),r++,s="template-string";continue}}if(a==="'"){r++,s="single-string";continue}if(a==='"'){r++,s="double-string";continue}if(a==="`"){r++,s="template-string";continue}if(a==="/"&&c==="/"){r+=2,s="line-comment";continue}if(a==="/"&&c==="*"){r+=2,s="block-comment";continue}if(a==="/"){let l=r-1;for(;l>=0&&/\s/.test(e[l]);)l--;let f=l>=0?e[l]:"";if(!f||/[=(!,;:{[&|?+\-*%<>~^]/.test(f)||l>=5&&/\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)$/.test(e.slice(Math.max(0,l-10),l+1))){r++,s="regex";continue}}if(a==="l"&&e.slice(r,r+4)==="let "&&(r===0||!/[\w$]/.test(e[r-1]))){let l=r+4;for(;l<e.length&&/\s/.test(e[l]);)l++;if(l<e.length&&/[a-zA-Z_$]/.test(e[l])){let f=l;for(;l<e.length&&/[\w$]/.test(e[l]);)l++;let p=l,u=e.slice(f,p),m=l;for(;m<e.length&&/\s/.test(e[m]);)m++;if(m<e.length&&e[m]===":"&&e[m+1]!==":"){let y=m+1;for(;y<e.length&&/[ \t]/.test(e[y]);)y++;let x=Gs(e,y);if(x>y){let S=e.slice(y,x).trim();n.set(u,S),t.push({start:p,end:x,replacement:""}),r=x;continue}}}}break}r++}if(t.length===0)return{source:e,annotations:n};let i=e;for(let a=t.length-1;a>=0;a--){let c=t[a];i=i.slice(0,c.start)+c.replacement+i.slice(c.end)}return{source:i,annotations:n}}function Gs(e,n){let t=n,r=0,s=0,o=0,i="normal",a=[];for(;t<e.length;){let c=e[t];if(i==="sq"){if(c==="\\"){t+=2;continue}c==="'"&&(i="normal"),t++;continue}if(i==="dq"){if(c==="\\"){t+=2;continue}c==='"'&&(i="normal"),t++;continue}if(i==="tpl"){if(c==="\\"){t+=2;continue}if(c==="$"&&e[t+1]==="{"){a.push(1),i="normal",t+=2;continue}c==="`"&&(i="normal"),t++;continue}if(a.length>0){if(c==="{")a[a.length-1]++;else if(c==="}"&&(a[a.length-1]--,a[a.length-1]===0)){a.pop(),i="tpl",t++;continue}}if(c==="'"){i="sq",t++;continue}if(c==='"'){i="dq",t++;continue}if(c==="`"){i="tpl",t++;continue}if(c==="("?r++:c===")"?r--:c==="{"?s++:c==="}"?s--:c==="["?o++:c==="]"&&o--,r===0&&s===0&&o===0&&(c==="="||c===","||c===";"||c===`
|
|
50
|
+
`))return t;t++}return t}function yt(e,n){let t="",r=0,s,o,i="normal",a=[],c=[{type:"top-level",braceDepth:0}],l=0,f=()=>c[c.length-1]?.type||"top-level",p=()=>{let u=c[c.length-1];return u?.type==="class-body"&&l===u.braceDepth+1};for(;r<e.length;){let u=e[r],m=e[r+1];switch(i){case"single-string":if(t+=u,u==="\\"&&r+1<e.length){t+=m,r+=2;continue}u==="'"&&(i="normal"),r++;continue;case"double-string":if(t+=u,u==="\\"&&r+1<e.length){t+=m,r+=2;continue}u==='"'&&(i="normal"),r++;continue;case"template-string":if(t+=u,u==="\\"&&r+1<e.length){t+=m,r+=2;continue}if(u==="$"&&m==="{"){t+=m,r+=2,a.push(1),i="normal";continue}u==="`"&&(i="normal"),r++;continue;case"line-comment":t+=u,u===`
|
|
51
|
+
`&&(i="normal"),r++;continue;case"block-comment":if(t+=u,u==="*"&&m==="/"){t+=m,r+=2,i="normal";continue}r++;continue;case"regex":if(t+=u,u==="\\"&&r+1<e.length){t+=m,r+=2;continue}if(u==="["){for(r++;r<e.length&&e[r]!=="]";)t+=e[r],e[r]==="\\"&&r+1<e.length?(t+=e[r+1],r+=2):r++;r<e.length&&(t+=e[r],r++);continue}if(u==="/"){for(r++;r<e.length&&/[gimsuy]/.test(e[r]);)t+=e[r],r++;i="normal";continue}r++;continue;case"normal":if(a.length>0){if(u==="{")a[a.length-1]++;else if(u==="}"&&(a[a.length-1]--,a[a.length-1]===0)){a.pop(),t+=u,r++,i="template-string";continue}}if(u==="'"){t+=u,r++,i="single-string";continue}if(u==='"'){t+=u,r++,i="double-string";continue}if(u==="`"){t+=u,r++,i="template-string";continue}if(u==="/"&&m==="/"){t+=u+m,r+=2,i="line-comment";continue}if(u==="/"&&m==="*"){t+=u+m,r+=2,i="block-comment";continue}if(u==="/"){let h=t.trimEnd();if(!h[h.length-1]||/[=(!,;:{[&|?+\-*%<>~^]$/.test(h)||/\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)\s*$/.test(h)){t+=u,r++,i="regex";continue}}break}if(u==="{"){l++,t+=u,r++;continue}if(u==="}"){l--;let h=c[c.length-1];h&&l===h.braceDepth&&c.pop(),t+=u,r++;continue}let g=e.slice(r).match(/^class\s+\w+(?:\s+extends\s+\w+)?\s*\{/);if(g){let h=g[0].slice(0,-1);t+=h,r+=h.length,c.push({type:"class-body",braceDepth:l});continue}let y=e.slice(r).match(/^function\s+(\w+)\s*\(/);if(y){let h=y[1],b=y[0].length,$=e[r+b],_,E=r+b;($==="?"||$==="!")&&(_=$,E++,_==="!"?n.unsafeFunctions.add(h):n.safeFunctions.add(h)),t+=`function ${h}(`,r=E;let k=mt(e,r,"(",")");if(!k){t+=e[r],r++;continue}let{content:T,endPos:P}=k;r=P;let A=Kt(T,n,!0);t+=A+")";let N=r;for(;N<e.length&&/\s/.test(e[N]);)N++;if(e[N]===":"){let B=e.slice(N,N+2),D;for(B===":?"||B===":!"?(N+=2,D=B===":?"?"safe":"unsafe"):N+=1;N<e.length&&/\s/.test(e[N]);)N++;let V=Zt(e,N);V&&(s===void 0&&(s=V.type,D&&(o=D)),r=V.endPos)}let R=r;for(;R<e.length&&/\s/.test(e[R]);)R++;if(e[R]==="="&&e[R+1]===">")throw new G("Unexpected '=>' after function declaration. Function declarations use `function name(params) { body }`, not arrow syntax. Remove the `=>`.",pe(n.originalSource,R),n.originalSource);continue}let x=e.slice(r).match(/^(constructor|(?:get|set)\s+\w+|async\s+\w+|\w+)\s*\(/),S=(()=>{for(let h=t.length-1;h>=0;h--)if(!/\s/.test(t[h]))return t[h];return`
|
|
52
|
+
`})(),w=S!=="="&&S!==","&&S!=="("&&S!=="["&&S!==">";if(x&&p()&&!w){let h=x[1].length;t+=e.slice(r,r+h),r+=h;continue}if(x&&p()&&w){let h=x[1],b=x[0].length,$=r+b;t+=h+"(",r=$;let _=mt(e,r,"(",")");if(!_){t+=e[r],r++;continue}let{content:E,endPos:k}=_;r=k;let T=Kt(E,n,!0);t+=T+")";let P=r;for(;P<e.length&&/\s/.test(e[P]);)P++;if(e[P]===":"){let N=e.slice(P,P+2);for(N===":?"||N===":!"?P+=2:P++;P<e.length&&/\s/.test(e[P]);)P++;let R=Zt(e,P);R&&(r=R.endPos)}let A=r;for(;A<e.length&&/\s/.test(e[A]);)A++;if(e[A]==="="&&e[A+1]===">")throw new G("Unexpected '=>' after method declaration. Methods use `name(params) { body }`, not arrow syntax. Remove the `=>`.",pe(n.originalSource,A),n.originalSource);continue}if(e[r]==="("){let h=mt(e,r+1,"(",")");if(!h){t+=e[r],r++;continue}let b=h.content,$=h.endPos,_=$;for(;_<e.length&&/\s/.test(e[_]);)_++;let E;if(e[_]===":"){let k=e.slice(_,_+2);for(k===":?"||k===":!"?_+=2:_++;_<e.length&&/\s/.test(e[_]);)_++;let T=Zt(e,_);if(T)for(E=T.type,_=T.endPos;_<e.length&&/\s/.test(e[_]);)_++}if(e.slice(_,_+2)==="=>"){let k=null,T=b,P=b.trimStart();P.startsWith("?")&&(P.length===1||/\s/.test(P[1]))?(k="?",T=P.slice(1)):P.startsWith("!")&&(P.length===1||/\s/.test(P[1]))&&(k="!",T=P.slice(1));let A=Kt(T,n,!1);for(t+=`(${k==="?"?"/* safe */ ":k==="!"?"/* unsafe */ ":""}${A})`,r=$;r<_&&/\s/.test(e[r]);)t+=e[r],r++;E&&(r=_)}else{let k=yt(b,n);t+=`(${k.source})`,r=$}continue}t+=e[r],r++}return{source:t,returnType:s,returnSafety:o}}function mt(e,n,t,r){let s=1,o=n,i=!1,a="";for(;o<e.length&&s>0;){let c=e[o];!i&&(c==="'"||c==='"'||c==="`")?(i=!0,a=c):i&&c===a&&e[o-1]!=="\\"?i=!1:i||(c===t?s++:c===r&&s--),o++}return s!==0?null:{content:e.slice(n,o-1),endPos:o}}function _r(e,n){let t=n;for(;t<e.length&&/\s/.test(e[t]);)t++;if(t>=e.length)return null;let r=t,s=e[t];if(s==="{"||s==="["){let i=s==="{"?"}":"]",a=mt(e,t+1,s,i);return a?{value:e.slice(r,a.endPos),endPos:a.endPos}:null}if(s==="'"||s==='"'||s==="`"){for(t++;t<e.length;){if(e[t]===s&&e[t-1]!=="\\")return t++,{value:e.slice(r,t),endPos:t};t++}return null}if(/[-+\d]/.test(s)){for(;t<e.length&&/[\d.eE+-]/.test(e[t]);)t++;return{value:e.slice(r,t),endPos:t}}let o=e.slice(t).match(/^(true|false|null|undefined)\b/);return o?{value:o[1],endPos:t+o[1].length}:null}function Ke(e){return e.replace(/(?<!\|)\|(?!\|)/g," || ")}function Zt(e,n){let t=n,r=0,s=!1,o="",i=!1,a=c=>({type:Ke(e.slice(n,c).trim()),endPos:c});for(;t<e.length;){let c=e[t];if(!s&&(c==="'"||c==='"'||c==="`")){s=!0,o=c,i=!0,t++;continue}if(s){if(c===o&&e[t-1]!=="\\"){if(s=!1,t++,r===0){let l=t;for(;l<e.length&&/\s/.test(e[l]);)l++;if(e[l]==="{"&&!e.slice(l+1).match(/^\s*(\w+)\s*:/)||e[l]!=="|"&&e[l]!=="&")return a(t)}continue}t++;continue}if(c==="{"||c==="["||c==="("){r++,i=!0,t++;continue}if(c==="}"||c==="]"||c===")"){if(r--,r===0){t++;let l=t;for(;l<e.length&&/\s/.test(e[l]);)l++;if(e[l]==="|"||e[l]==="&")continue;return a(t)}t++;continue}if(r===0&&c==="{"){if(i)return a(t);if(e.slice(t+1).match(/^\s*(\w+)\s*:/)){r++,i=!0,t++;continue}return a(t)}if(r===0&&(c==="|"||c==="&")){for(t++,t<e.length&&e[t]==="|"&&t++;t<e.length&&/\s/.test(e[t]);)t++;continue}if(r===0&&(/\d/.test(c)||c==="-"&&/\d/.test(e[t+1]))){let l=t;for(e[l]==="-"&&l++;l<e.length&&/\d/.test(e[l]);)l++;if(l<e.length&&e[l]==="."&&/\d/.test(e[l+1]))for(l++;l<e.length&&/\d/.test(e[l]);)l++;if(l<e.length&&(e[l]==="e"||e[l]==="E"))for(l++,l<e.length&&(e[l]==="+"||e[l]==="-")&&l++;l<e.length&&/\d/.test(e[l]);)l++;for(i=!0,t=l;t<e.length&&/\s/.test(e[t]);)t++;if(t<e.length&&e[t]==="{")return{type:Ke(e.slice(n,l).trim()),endPos:l};if(e[t]!=="|"&&e[t]!=="&")return{type:Ke(e.slice(n,l).trim()),endPos:l};continue}if(r===0&&/[a-zA-Z_]/.test(c)){let l=t;for(;l<e.length&&/\w/.test(e[l]);)l++;for(i=!0,t=l;t<e.length&&/\s/.test(e[t]);)t++;if(t<e.length&&e[t]==="("){r++,t++;continue}if(t<e.length&&e[t]==="{"&&!e.slice(t+1).match(/^\s*(\w+)\s*:/)){let p=l;for(;p>n&&/\s/.test(e[p-1]);)p--;return{type:Ke(e.slice(n,p).trim()),endPos:l}}if(e[t]!=="|"&&e[t]!=="&")return{type:Ke(e.slice(n,l).trim()),endPos:l};continue}t++}return i?a(t):null}function ht(e){let n=[],t="",r=0,s=!1,o=!1,i=0;for(;i<e.length;){let a=e[i],c=e[i+1];if(!o&&a==="/"&&c==="/"){s=!0,t+="//",i+=2;continue}if(!s&&a==="/"&&c==="*"){o=!0,t+="/*",i+=2;continue}if(s&&a===`
|
|
53
|
+
`){s=!1,t+=a,i++;continue}if(o&&a==="*"&&c==="/"){o=!1,t+="*/",i+=2;continue}if(s||o){t+=a,i++;continue}a==="("||a==="{"||a==="["?(r++,t+=a):a===")"||a==="}"||a==="]"?(r--,t+=a):a===","&&r===0?(n.push(t),t=""):t+=a,i++}return t.trim()&&n.push(t),n}function Kt(e,n,t){let r=yt(e,{originalSource:e,requiredParams:n.requiredParams,unsafeFunctions:n.unsafeFunctions,safeFunctions:n.safeFunctions}).source,s=ht(r),o=!1,i=new Set,a=l=>{if(t&&/^\w+$/.test(l)){if(i.has(l))throw new Error(`Duplicate parameter name '${l}'`);i.add(l)}};return s.map(l=>{let f=l.trim();if(!f)return l;if(t&&f.startsWith("{")&&f.endsWith("}")){let m=f.slice(1,-1);return`{ ${wr(m,n)} }`}if(t&&f.startsWith("[")&&f.endsWith("]")){let m=f.slice(1,-1);return`[ ${wr(m,n)} ]`}if(f.startsWith("...")){let m=$r(f);return m!==-1?f.slice(0,m).trim():l}let p=f.match(/^(\w+)\s*\?\s*:\s*(.+)$/);if(p){let[,m,g]=p;return a(m),o=!0,`${m} = ${g}`}if(!Zs(f)){let m=f.match(/^(\w+)\s*=/);return m&&a(m[1]),o=!0,l}let u=$r(f);if(u!==-1){let m=f.slice(0,u).trim(),g=f.slice(u+1).trim();return a(m),o&&t&&/^\w+$/.test(m),t&&/^\w+$/.test(m)&&n.requiredParams.add(m),`${m} = ${g}`}return l}).join(",")}function wr(e,n){return ht(e).map(s=>{let o=s.trim();if(!o)return s;let i=o.match(/^(\w+)\s*:\s*(\{[\s\S]*\})$/);if(i){let[,l,f]=i;n.requiredParams.add(l);let p=dt(f);return`${l} = ${p}`}let a=o.match(/^(\w+)\s*:\s*(\[[\s\S]*\])$/);if(a){let[,l,f]=a;n.requiredParams.add(l);let p=gt(f);return`${l} = ${p}`}let c=o.match(/^(\w+)\s*:\s*([\s\S]+)$/);if(c){let[,l,f]=c;return n.requiredParams.add(l),`${l} = ${f}`}return s}).join(", ")}function dt(e){let n=e.slice(1,-1).trim();return`{ ${ht(n).map(s=>{let o=s.trim();if(!o)return s;let i=o.match(/^(\w+)\s*:\s*(\{[\s\S]*\})$/);if(i){let[,p,u]=i;return`${p}: ${dt(u)}`}let a=o.match(/^(\w+)\s*=\s*(\{[\s\S]*\})$/);if(a){let[,p,u]=a;return`${p}: ${dt(u)}`}let c=o.match(/^(\w+)\s*:\s*(\[[\s\S]*\])$/);if(c){let[,p,u]=c;return`${p}: ${gt(u)}`}let l=o.match(/^(\w+)\s*=\s*(\[[\s\S]*\])$/);if(l){let[,p,u]=l;return`${p}: ${gt(u)}`}let f=o.match(/^(\w+)\s*=\s*([\s\S]+)$/);if(f){let[,p,u]=f;return`${p}: ${u}`}return s}).join(", ")} }`}function gt(e){let n=e.slice(1,-1).trim();return`[ ${ht(n).map(s=>{let o=s.trim();return o?o.startsWith("{")&&o.endsWith("}")?dt(o):o.startsWith("[")&&o.endsWith("]")?gt(o):s:s}).join(", ")} ]`}function Zs(e){let n=0,t=!1,r=!1,s=!1,o="";for(let i=0;i<e.length;i++){let a=e[i];if(!s&&(a==="'"||a==='"'||a==="`")){s=!0,o=a;continue}if(s){a===o&&e[i-1]!=="\\"&&(s=!1);continue}a==="("||a==="{"||a==="["?n++:a===")"||a==="}"||a==="]"?n--:n===0&&(a===":"&&(t=!0),a==="="&&e[i+1]!==">"&&(r=!0))}return t&&!r}function $r(e){let n=0,t=!1,r="";for(let s=0;s<e.length;s++){let o=e[s];if(!t&&(o==="'"||o==='"'||o==="`")){t=!0,r=o;continue}if(t){o===r&&e[s-1]!=="\\"&&(t=!1);continue}if(o==="("||o==="{"||o==="[")n++;else if(o===")"||o==="}"||o==="]")n--;else if(n===0&&o===":")return s}return-1}function Ht(e){let n="",t=0;for(;t<e.length;){let r=e[t];if(r==="'"||r==='"'||r==="`"){let s=r;for(n+=r,t++;t<e.length&&e[t]!==s;)e[t]==="\\"&&(n+=e[t++]),t<e.length&&(n+=e[t++]);t<e.length&&(n+=e[t++]);continue}if(r==="/"&&e[t+1]==="*"){let s=e.indexOf("*/",t+2),o=s===-1?e.slice(t):e.slice(t,s+2);n+=o,t+=o.length;continue}if(r==="/"&&e[t+1]==="/"){let s=e.indexOf(`
|
|
54
|
+
`,t),o=s===-1?e.length:s;n+=" ".repeat(o-t),t=o;continue}n+=r,t++}return n}function bt(e,n={}){let t=e,r,s=new Set,o=new Set,i=new Set,a=/\/\*\s*tjs\s*<-\s*\S+\s*\*\//.test(e),c=n.dialect==="js"?!0:n.dialect==="tjs"?!1:a||n.vmTarget,l=c?{tjsEquals:!1,tjsClass:!1,tjsDate:!1,tjsNoeval:!1,tjsStandard:!1,tjsSafeEval:!1,tjsNoVar:!1,tjsSafeAssign:!1,tjsStrict:!1}:{tjsEquals:!0,tjsClass:!0,tjsDate:!0,tjsNoeval:!0,tjsStandard:!0,tjsSafeEval:!1,tjsNoVar:!0,tjsSafeAssign:!0,tjsStrict:!1};c&&(r="none");let f=e.match(/^(\s*(?:\/\/[^\n]*\n|\/\*[\s\S]*?\*\/\s*)*)\s*safety\s+(none|inputs|all)\b/);f&&(r=f[2],e=e.replace(/^(\s*(?:\/\/[^\n]*\n|\/\*[\s\S]*?\*\/\s*)*)\s*safety\s+(none|inputs|all)\s*/,"$1"));let p=/^(\s*(?:\/\/[^\n]*\n|\/\*[\s\S]*?\*\/\s*)*)\s*(TjsStrict|TjsCompat|TjsEquals|TjsClass|TjsDate|TjsNoeval|TjsNoVar|TjsStandard|TjsSafeEval|TjsSafeAssign)\b/,u;for(;u=e.match(p);){let A=u[2];A==="TjsStrict"?(l.tjsEquals=!0,l.tjsClass=!0,l.tjsDate=!0,l.tjsNoeval=!0,l.tjsNoVar=!0,l.tjsStandard=!0,l.tjsSafeAssign=!0,l.tjsStrict=!0):A==="TjsCompat"?(l.tjsEquals=!1,l.tjsClass=!1,l.tjsDate=!1,l.tjsNoeval=!1,l.tjsNoVar=!1,l.tjsStandard=!1,l.tjsSafeEval=!1,l.tjsSafeAssign=!1):A==="TjsEquals"?l.tjsEquals=!0:A==="TjsClass"?l.tjsClass=!0:A==="TjsDate"?l.tjsDate=!0:A==="TjsNoeval"?l.tjsNoeval=!0:A==="TjsNoVar"?l.tjsNoVar=!0:A==="TjsStandard"?l.tjsStandard=!0:A==="TjsSafeEval"?l.tjsSafeEval=!0:A==="TjsSafeAssign"&&(l.tjsSafeAssign=!0),e=e.replace(new RegExp(`^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*${A}\\s*`),"$1")}e=Ht(e),l.tjsStandard&&(e=tr(e)),e=gr(e),e=br(e);let m=xr(e);e=m.source;let g=m.annotations,y=Qn(e);e=y.source,e=ze(e),l.tjsEquals&&!n.vmTarget&&(e=Ge(e));let x=[];e=nr(e,x),e=sr(e,x),e=rr(e),e=ir(e),e=or(e),l.tjsSafeAssign&&(e=ur(e));let S=er(e,{loader:n.moduleLoader,importerPath:n.filename});e=S.source;let{source:w,returnType:h,returnSafety:b}=yt(e,{originalSource:t,requiredParams:s,unsafeFunctions:o,safeFunctions:i});e=w;let $=ar(e);e=$.source,e=Yn(e);let _=lr(e,s);e=_.source;let E=Xn(e);e=E.source;let k=[...y.blocks,...S.blocks,...E.blocks],T=fr(e,n.dangerouslySkipTests);e=T.source;let P=pr(e,s);e=P.source;for(let A of P.polyCtorClasses)o.add(`${A}$dispatch`);return l.tjsClass&&(e=mr(e,P.polyCtorClasses)),l.tjsDate&&(e=dr(e)),l.tjsNoeval&&(e=hr(e)),l.tjsNoVar&&(e=yr(e)),e=Ze(e,$.extensions),{source:e,returnType:h,returnSafety:b,moduleSafety:r,tjsModes:l,originalSource:t,requiredParams:s,unsafeFunctions:o,safeFunctions:i,wasmBlocks:k,tests:T.tests,testErrors:T.errors,polymorphicNames:_.polymorphicNames,extensions:$.extensions,letAnnotations:g,predicates:x}}function Se(e,n={}){let{filename:t="<source>",colonShorthand:r=!0,vmTarget:s=!1,dialect:o}=n,{source:i,returnType:a,returnSafety:c,moduleSafety:l,originalSource:f,requiredParams:p,unsafeFunctions:u,safeFunctions:m,wasmBlocks:g,tests:y,testErrors:x,letAnnotations:S,tjsModes:w}=r?bt(e,{vmTarget:s,dialect:o,moduleLoader:n.moduleLoader,filename:n.filename}):{source:e,returnType:void 0,returnSafety:void 0,moduleSafety:void 0,originalSource:e,requiredParams:new Set,unsafeFunctions:new Set,safeFunctions:new Set,wasmBlocks:[],tests:[],testErrors:[],letAnnotations:new Map,tjsModes:{tjsEquals:!1,tjsClass:!1,tjsDate:!1,tjsNoeval:!1,tjsStandard:!1,tjsSafeEval:!1,tjsNoVar:!1,tjsSafeAssign:!1,tjsStrict:!1}};try{return{ast:Sr.parse(i,{ecmaVersion:2022,sourceType:"module",locations:!0,allowReturnOutsideFunction:!1}),returnType:a,returnSafety:c,moduleSafety:l,originalSource:f,requiredParams:p,unsafeFunctions:u,safeFunctions:m,wasmBlocks:g,tests:y,testErrors:x,letAnnotations:S,tjsModes:w}}catch(h){let b=h.loc||{line:1,column:0};throw new G(h.message.replace(/\s*\(\d+:\d+\)$/,""),b,f,t)}}function Er(e,n){for(let o of e.body){if(o.type==="ImportDeclaration")throw new G("Imports are not supported. All atoms must be registered with the VM.",o.loc?.start||{line:1,column:0},void 0,n);if(o.type==="ExportNamedDeclaration"||o.type==="ExportDefaultDeclaration")throw new G("Exports are not supported. The function is automatically exported.",o.loc?.start||{line:1,column:0},void 0,n);if(o.type==="ClassDeclaration")throw new G("Classes are not supported. Agent99 uses functional composition.",o.loc?.start||{line:1,column:0},void 0,n)}let t=e.body.filter(o=>o.type==="FunctionDeclaration");if(t.length===0)throw new G("Source must contain a function declaration",{line:1,column:0},void 0,n);let r=t[t.length-1],s=new Map;for(let o=0;o<t.length-1;o++){let i=t[o],a=i.id?.name;if(!a)throw new G("Helper function must have a name",i.loc?.start||{line:1,column:0},void 0,n);if(s.has(a))throw new G(`Duplicate helper function name: ${a}`,i.loc?.start||{line:1,column:0},void 0,n);if(a===r.id?.name)throw new G(`Helper function cannot share a name with the entry function: ${a}`,i.loc?.start||{line:1,column:0},void 0,n);s.set(a,i)}return{entry:r,helpers:s}}function He(e,n){let t={params:{}};if(!n.loc)return t;let r=e.substring(0,n.start),s=[...r.matchAll(/(?<=^[ \t]*)\/\*#([\s\S]*?)\*\//gm)];if(s.length>0){let f=s[s.length-1],p=r.substring(f.index+f[0].length);if(/^(?:\s|\/\/[^\n]*)*$/.test(p)){let u=f[1],m=u.split(`
|
|
55
|
+
`),g=m.filter(y=>y.trim().length>0).reduce((y,x)=>{let S=x.match(/^(\s*)/)?.[1].length||0;return Math.min(y,S)},1/0);return g>0&&g<1/0&&(u=m.map(y=>y.slice(g)).join(`
|
|
56
|
+
`)),t.description=u.trim(),t}}let o=r.match(/\/\*\*[\s\S]*?\*\/\s*$/);if(!o)return t;let i=o[0],a=i.match(/\/\*\*\s*\n?\s*\*?\s*([^@\n][^\n]*)/m);a&&(t.description=a[1].trim());let c=/@param\s+(?:\{[^}]+\}\s+)?(\w+)\s*-?\s*(.*)/g,l;for(;(l=c.exec(i))!==null;)t.params[l[1]]=l[2].trim();return t}import{parseExpressionAt as Ks}from"acorn";function Y(e){switch(e.type){case"Literal":{let n=e.value;if(n===null)return{kind:"null"};if(typeof n=="string")return{kind:"string"};if(typeof n=="number"){let t=e.raw;return t&&t.includes(".")?{kind:"number"}:{kind:"integer"}}return typeof n=="boolean"?{kind:"boolean"}:{kind:"any"}}case"ArrayExpression":{let n=e.elements;if(n.length===0)return{kind:"array",items:{kind:"any"}};let t=n.filter(i=>i!=null).map(i=>Y(i));if(t.length===0)return{kind:"array",items:{kind:"any"}};let r=new Map;for(let i of t){let a=JSON.stringify(i);r.has(a)||r.set(a,i)}let s=[...r.values()];return{kind:"array",items:s.length===1?s[0]:{kind:"union",members:s}}}case"ObjectExpression":{let n=e.properties,t={};for(let r of n)if(r.type==="Property"&&r.key.type==="Identifier"){let s=r.key.name;t[s]=Y(r.value)}return{kind:"object",shape:t}}case"LogicalExpression":{let{operator:n,left:t,right:r}=e;return n==="||"?Y(t):n==="&&"||n==="??"?Y(r):{kind:"any"}}case"BinaryExpression":{let{operator:n,left:t,right:r}=e;if(n==="|"){let s=Y(t),o=Y(r);return o.kind==="null"?{...s,nullable:!0}:s.kind==="null"?{...o,nullable:!0}:{kind:"union",members:[s,o]}}return{kind:"any"}}case"Identifier":return e.name==="undefined"?{kind:"undefined"}:{kind:"any"};case"ArrowFunctionExpression":case"FunctionExpression":{let n=e,t=n.params.map(s=>Hs(s)),r={kind:"any"};return n.type==="ArrowFunctionExpression"&&n.body&&n.body.type!=="BlockStatement"&&(r=Y(n.body)),{kind:"function",params:t,returns:r}}case"UnaryExpression":{let n=e.operator,t=e.argument;if(n==="+"&&t.type==="Literal"&&typeof t.value=="number")return{kind:"non-negative-integer"};if(n==="-"&&t.type==="Literal"&&typeof t.value=="number"){let s=t.raw;return s&&s.includes(".")?{kind:"number"}:{kind:"integer"}}return{kind:"any"}}default:return{kind:"any"}}}function Hs(e){return e.type==="Identifier"?{name:e.name,type:{kind:"any"}}:e.type==="AssignmentPattern"&&e.left?.type==="Identifier"?{name:e.left.name,type:Y(e.right)}:e.type==="RestElement"&&e.argument?.type==="Identifier"?{name:`...${e.argument.name}`,type:{kind:"array",items:{kind:"any"}}}:{name:"?",type:{kind:"any"}}}function ye(e,n){if(e.type==="Identifier")return{name:e.name,type:{kind:"any"},required:!0};if(e.type==="AssignmentPattern"){let{left:t,right:r}=e;if(t.type!=="Identifier")throw new W("Only simple parameter names are supported",U(e));let s=t.name,o=n?.has(s)??!1,i=Y(r),a=ce(r);return{name:s,type:i,required:o,default:o?null:a,example:a,loc:{start:e.start,end:e.end}}}if(e.type==="ObjectPattern"){let t=e.properties,r={},s={};for(let o of t)if(o.type==="Property"){let i=o.key.type==="Identifier"?o.key.name:String(o.key.value);if(o.value.type==="Identifier")r[i]={kind:"any"},s[i]={name:i,type:{kind:"any"},required:!0};else if(o.value.type==="AssignmentPattern"){let a=ye(o.value,n),c=n?.has(i)??!1;r[i]=a.type,s[i]={name:i,type:a.type,required:c,default:c?null:a.example,example:a.example}}}return{name:"__destructured__",type:{kind:"object",shape:r,destructuredParams:s},required:!0}}throw new W(`Unsupported parameter pattern: ${e.type}`,U(e))}function ce(e){switch(e.type){case"Literal":return e.value;case"ArrayExpression":return e.elements.map(n=>n?ce(n):null);case"ObjectExpression":{let n={};for(let t of e.properties)t.type==="Property"&&t.key.type==="Identifier"&&(n[t.key.name]=ce(t.value));return n}case"UnaryExpression":if(e.operator==="-"){let n=ce(e.argument);return typeof n=="number"?-n:void 0}if(e.operator==="+"){let n=ce(e.argument);return typeof n=="number"?+n:void 0}return;case"BinaryExpression":{let{operator:n,left:t}=e;return n==="|"?ce(t):void 0}case"LogicalExpression":{let{operator:n,left:t,right:r}=e;return n==="&&"&&t.type==="Literal"&&t.value===null?null:n==="||"||n==="??"?ce(t)??ce(r):void 0}default:return}}function Tr(e){try{let n=Ks(e,0,{ecmaVersion:2022});return Y(n)}catch{return{kind:"any"}}}function Yt(e){switch(e.kind){case"string":return e.nullable?"string | null":"string";case"number":return e.nullable?"number | null":"number";case"integer":return e.nullable?"integer | null":"integer";case"non-negative-integer":return e.nullable?"non-negative integer | null":"non-negative integer";case"boolean":return e.nullable?"boolean | null":"boolean";case"null":return"null";case"any":return"any";case"array":{let n=e.items?Yt(e.items):"any";return e.nullable?`${n}[] | null`:`${n}[]`}case"object":{if(!e.shape||Object.keys(e.shape).length===0)return e.nullable?"object | null":"object";let n=Object.entries(e.shape).map(([t,r])=>`${t}: ${Yt(r)}`).join(", ");return e.nullable?`{ ${n} } | null`:`{ ${n} }`}case"union":return e.members?.map(Yt).join(" | ")||"any";default:return"any"}}function xt(e){switch(e.kind){case"string":return{type:"string"};case"number":return{type:"number"};case"boolean":return{type:"boolean"};case"null":return{};case"undefined":return{};case"any":return{};case"array":return{type:"array",items:e.items?xt(e.items):{}};case"object":if(e.shape){let n={};for(let[t,r]of Object.entries(e.shape))n[t]=xt(r);return{type:"object",properties:n,additionalProperties:!1}}return{type:"object"};case"union":return e.members?{oneOf:e.members.map(xt)}:{};default:return{}}}function Ys(e){let n={},t=[];for(let[r,s]of Object.entries(e))n[r]=xt(s.type),s.required&&t.push(r);return{type:"object",properties:n,required:t.length>0?t:void 0,additionalProperties:!1}}function Xt(e,n,t,r={},s,o){let i=He(n,e),a=new Map;for(let w of e.params){let h=ye(w,s);if(h.name==="__destructured__"&&h.type.kind==="object"&&h.type.destructuredParams)for(let[b,$]of Object.entries(h.type.destructuredParams))a.set(b,{...$,description:i.params[b]});else h.description=i.params[h.name],a.set(h.name,h)}let c;t&&(c=Tr(t));let l={depth:0,locals:new Map,parameters:a,atoms:new Set(Object.keys(r.atoms||{})),warnings:[],source:n,filename:r.filename||"<source>",options:r,helpers:o,helperSteps:o?new Map:void 0,helperTransforming:o?new Set:void 0},f=oe(e.body,l),p=[],u=[],m=[];for(let[w,h]of a.entries())h.required?u.push(w):h.default!==void 0?m.push({name:w,defaultValue:h.default}):u.push(w);u.length>0&&p.push({op:"varsImport",keys:u});for(let{name:w,defaultValue:h}of m)p.push({op:"varsImport",keys:[w]}),p.push({op:"if",condition:{$expr:"binary",op:"==",left:{$expr:"ident",name:w},right:{$expr:"literal",value:null}},then:[{op:"varSet",key:w,value:h}]});p.push(...f);let g=Object.fromEntries(a),y={name:e.id?.name||"anonymous",description:i.description,parameters:g,returns:c},x=Ys(g),S=l.helperSteps&&l.helperSteps.size>0?Object.fromEntries(l.helperSteps):void 0;return{ast:{op:"seq",steps:p,inputSchema:x,...S&&{helpers:S}},signature:y,warnings:l.warnings}}function oe(e,n){let t=[];for(let r of e.body){let s=Ye(r,n);s&&(Array.isArray(s)?t.push(...s):t.push(s))}return t}function Ye(e,n){switch(e.type){case"VariableDeclaration":return Xs(e,n);case"ExpressionStatement":return Qs(e,n);case"IfStatement":return ti(e,n);case"WhileStatement":return ni(e,n);case"ForOfStatement":return ri(e,n);case"TryStatement":return si(e,n);case"ReturnStatement":return ii(e,n);case"ThrowStatement":throw new W("'throw' is not supported in AsyncJS. Use Error('message') to trigger error flow",U(e),n.source,n.filename);case"BlockStatement":return{op:"scope",steps:oe(e,re(n))};case"EmptyStatement":return null;default:throw new W(`Unsupported statement type: ${e.type}`,U(e),n.source,n.filename)}}function Xs(e,n){let t=[],r=e.kind==="const",s=r?"constSet":"varSet";for(let o of e.declarations){if(o.id.type!=="Identifier")throw new W("Only simple variable names are supported",U(o),n.source,n.filename);let i=o.id.name;if(o.init){let{step:a,resultVar:c}=Ee(o.init,n,i,r);a?t.push(a):c!==i&&t.push({op:s,key:i,value:c});let l=Y(o.init);n.locals.set(i,l)}else{if(r)throw new W("const declarations must be initialized",U(o),n.source,n.filename);t.push({op:"varSet",key:i,value:null}),n.locals.set(i,{kind:"any",nullable:!0})}}return t}function Qs(e,n){let t=e.expression;if(t.type==="AssignmentExpression")return ei(t,n);if(t.type==="CallExpression"){let{step:r,resultVar:s}=Ee(t,n);return r||(s?{op:"varSet",key:"_",value:s}:null)}return n.warnings.push({message:"Expression statement has no effect",line:U(e).line,column:U(e).column}),null}function ei(e,n){if(e.left.type!=="Identifier")throw new W("Only simple variable assignment is supported",U(e),n.source,n.filename);let t=e.left.name,{step:r,resultVar:s}=Ee(e.right,n,t);return r||{op:"varSet",key:t,value:s}}function ti(e,n){let t=F(e.test,n),r=e.consequent.type==="BlockStatement"?oe(e.consequent,re(n)):[Ye(e.consequent,n)].filter(Boolean),s;return e.alternate&&(s=e.alternate.type==="BlockStatement"?oe(e.alternate,re(n)):[Ye(e.alternate,n)].filter(Boolean)),{op:"if",condition:t,then:r,...s&&{else:s}}}function ni(e,n){let t=F(e.test,n),r=e.body.type==="BlockStatement"?oe(e.body,re(n)):[Ye(e.body,n)].filter(Boolean);return{op:"while",condition:t,body:r}}function ri(e,n){let t;if(e.left.type==="VariableDeclaration"){let i=e.left.declarations[0];if(i.id.type!=="Identifier")throw new W("Only simple variable names are supported in for...of",U(e.left),n.source,n.filename);t=i.id.name}else if(e.left.type==="Identifier")t=e.left.name;else throw new W("Unsupported for...of left-hand side",U(e.left),n.source,n.filename);let r=H(e.right,n),s=re(n);s.locals.set(t,{kind:"any"});let o=e.body.type==="BlockStatement"?oe(e.body,s):[Ye(e.body,s)].filter(Boolean);return{op:"map",items:r,as:t,steps:o}}function si(e,n){let t=oe(e.block,re(n)),r,s;if(e.handler){let o=re(n);e.handler.param?.type==="Identifier"&&(s=e.handler.param.name,o.locals.set(s,{kind:"any"})),r=oe(e.handler.body,o)}return{op:"try",try:t,...r&&{catch:r},...s&&{catchParam:s}}}function ii(e,n){if(!e.argument)return{op:"return",value:{}};let{step:t,resultVar:r}=Ee(e.argument,n,"__returnVal__");return t?[t,{op:"return",value:r}]:{op:"return",value:H(e.argument,n)}}var jr=new Set(["Math","JSON","Array","Object","String","Number","console","Date","Schema"]),oi=new Set(["parseInt","parseFloat","isNaN","isFinite","encodeURI","decodeURI","encodeURIComponent","decodeURIComponent","Set","Date","filter"]),Xe=new Set(["RegExp","Promise","Map","WeakSet","WeakMap","Symbol","Proxy","Reflect","Function","eval","setTimeout","setInterval","fetch","require","import","process","window","document","global","globalThis"]),ai=new Set(["toUpperCase","toLowerCase","trim","trimStart","trimEnd","charAt","charCodeAt","codePointAt","concat","includes","indexOf","lastIndexOf","startsWith","endsWith","slice","substring","substr","replace","replaceAll","match","search","padStart","padEnd","repeat","normalize","localeCompare","toString","valueOf","at","reverse","sort","fill","copyWithin","flat","flatMap","every","some","forEach","add","remove","has","clear","toArray","union","intersection","diff","format","isBefore","isAfter"]);function ci(e){if(e.callee.type==="Identifier"){let n=e.callee.name;return oi.has(n)||Xe.has(n)}if(e.callee.type==="MemberExpression"){let n=e.callee;if(n.object.type==="Identifier"){let t=n.object.name;if(jr.has(t)||Xe.has(t))return!0}if(n.property.type==="Identifier"){let t=n.property.name;if(ai.has(t))return!0}}return!1}function li(e){if(e.object.type==="Identifier"){let n=e.object.name;return jr.has(n)||Xe.has(n)}return!1}var kr={RegExp:"RegExp is not available. Use string methods or the regexMatch atom.",Promise:"Promise is not needed. All operations are implicitly async.",Map:"Map is not available. Use plain objects instead.",WeakSet:"WeakSet is not available.",WeakMap:"WeakMap is not available.",Symbol:"Symbol is not available.",Proxy:"Proxy is not available.",Reflect:"Reflect is not available.",Function:"Function constructor is not available. Define functions normally.",eval:"eval is not available. Code is compiled, not evaluated.",setTimeout:"setTimeout is not available. Use the delay atom.",setInterval:"setInterval is not available. Use while loops with delay.",fetch:"fetch is not available. Use the httpFetch atom.",require:"require is not available. Atoms must be registered with the VM.",import:"import is not available. Atoms must be registered with the VM.",process:"process is not available. AsyncJS runs in a sandboxed environment.",window:"window is not available. AsyncJS runs in a sandboxed environment.",document:"document is not available. AsyncJS runs in a sandboxed environment.",global:"global is not available. AsyncJS runs in a sandboxed environment.",globalThis:"globalThis is not available. Use builtins directly."};function ui(e){if(e.callee.type==="Identifier"){let n=e.callee.name;if(Xe.has(n))return kr[n]||`${n} is not available in AsyncJS.`}if(e.callee.type==="MemberExpression"){let n=e.callee;if(n.object.type==="Identifier"){let t=n.object.name;if(Xe.has(t))return kr[t]||`${t} is not available in AsyncJS.`}}return null}function vr(e){return{Date:" Use Date() or Date('2024-01-15') instead - no 'new' needed.",Set:" Use Set([items]) instead - no 'new' needed.",Map:" Use plain objects instead of Map.",Array:" Use array literals like [1, 2, 3] instead.",Object:" Use object literals like { key: value } instead.",Error:" Return an error object like { error: 'message' } instead.",RegExp:" Use string methods or the regexMatch atom.",Promise:" Not needed - all operations are implicitly async.",WeakSet:" WeakSet is not available.",WeakMap:" WeakMap is not available."}[e]||" Use factory functions or object literals instead."}function Ee(e,n,t,r){let s=r?"constSet":"varSet";if(e.type==="ChainExpression")return Ee(e.expression,n,t,r);if(e.type==="NewExpression"){let i=e,a="constructor";i.callee.type==="Identifier"&&(a=i.callee.name);let c=vr(a);throw new W(`The 'new' keyword is not supported in AsyncJS.${c}`,U(e),n.source,n.filename)}if(e.type==="CallExpression"){let i=ui(e);if(i)throw new W(i,U(e),n.source,n.filename)}if(e.type==="CallExpression"&&ci(e)){let i=F(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}if(e.type==="MemberExpression"&&li(e)){let i=F(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}if(e.type==="CallExpression")return fi(e,n,t,r);if(e.type==="TemplateLiteral")return di(e,n,t,r);if(e.type==="BinaryExpression"||e.type==="LogicalExpression"||e.type==="UnaryExpression"){let i=F(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}return{step:null,resultVar:H(e,n)}}function fi(e,n,t,r){let s,o=!1,i;if(e.callee.type==="Identifier")s=e.callee.name;else if(e.callee.type==="MemberExpression"){let c=e.callee;if(c.property.type==="Identifier")s=c.property.name,o=!0,i=H(c.object,n);else throw new W("Computed method names are not supported",U(e),n.source,n.filename)}else throw new W("Only named function calls are supported",U(e),n.source,n.filename);if(o)return mi(s,i,e.arguments,n,t,r);if(s==="console"&&e.callee.type,n.helpers?.has(s)){let c=pi(s,n,e),l=e.arguments.map(f=>H(f,n));if(l.length!==c.length)throw new W(`Helper '${s}' expects ${c.length} argument(s), got ${l.length}`,U(e),n.source,n.filename);return{step:{op:"callLocal",name:s,args:l,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}let a=gi(e,n);return{step:{op:s,...a,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}function pi(e,n,t){let r=n.helpers.get(e),s=[];for(let o of r.params){let i;if(o.type==="Identifier"?i=o:o.type==="AssignmentPattern"&&o.left?.type==="Identifier"&&(i=o.left),!i)throw new W(`Helper '${e}' parameters must be plain identifiers (optionally with an example value); destructuring is not supported`,o.loc?.start??U(t),n.source,n.filename);s.push(i.name)}if(n.helperSteps.has(e)||n.helperTransforming.has(e))return s;n.helperTransforming.add(e);try{let o={depth:0,locals:new Map,parameters:new Map(s.map(a=>[a,{name:a,type:{kind:"any"},required:!0}])),atoms:n.atoms,warnings:n.warnings,source:n.source,filename:n.filename,options:n.options,helpers:n.helpers,helperSteps:n.helperSteps,helperTransforming:n.helperTransforming},i=oe(r.body,o);n.helperSteps.set(e,{steps:i,paramNames:s})}finally{n.helperTransforming.delete(e)}return s}function mi(e,n,t,r,s,o){switch(e){case"map":if(t.length>0&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=a?.type==="Identifier"?a.name:"item",l=re(r);l.locals.set(c,{kind:"any"});let f;if(i.body.type==="BlockStatement")f=oe(i.body,l);else{let{step:p,resultVar:u}=Ee(i.body,l,"result");f=p?[p]:[{op:"varSet",key:"result",value:u}]}return{step:{op:"map",items:n,as:c,steps:f,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"filter":if(t.length>0&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=a?.type==="Identifier"?a.name:"item",l=re(r);l.locals.set(c,{kind:"any"});let f;if(i.body.type==="BlockStatement")throw new W("filter callback must be an expression, not a block",U(t[0]),r.source,r.filename);return f=F(i.body,l),{step:{op:"filter",items:n,as:c,condition:f,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"find":if(t.length>0&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=a?.type==="Identifier"?a.name:"item",l=re(r);l.locals.set(c,{kind:"any"});let f;if(i.body.type==="BlockStatement")throw new W("find callback must be an expression, not a block",U(t[0]),r.source,r.filename);return f=F(i.body,l),{step:{op:"find",items:n,as:c,condition:f,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"reduce":if(t.length>=2&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=i.params[1],l=a?.type==="Identifier"?a.name:"acc",f=c?.type==="Identifier"?c.name:"item",p=re(r);p.locals.set(l,{kind:"any"}),p.locals.set(f,{kind:"any"});let u;if(i.body.type==="BlockStatement")u=oe(i.body,p);else{let{step:g,resultVar:y}=Ee(i.body,p,"result");u=g?[g]:[{op:"varSet",key:"result",value:y}]}let m=H(t[1],r);return{step:{op:"reduce",items:n,as:f,accumulator:l,initial:m,steps:u,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"slice":break;case"push":return{step:{op:"push",list:n,item:H(t[0],r),...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s};case"join":return{step:{op:"join",list:n,sep:t.length>0?H(t[0],r):"",...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s};case"split":return{step:{op:"split",str:n,sep:t.length>0?H(t[0],r):"",...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}return r.warnings.push({message:`Unknown method '${e}' - treating as atom call`,line:0,column:0}),{step:{op:e,receiver:n,args:t.map(i=>H(i,r)),...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}function di(e,n,t,r){let s="",o={};for(let i=0;i<e.quasis.length;i++)if(s+=e.quasis[i].value.cooked||e.quasis[i].value.raw,i<e.expressions.length){let a=e.expressions[i],c=`_${i}`;o[c]=H(a,n),s+=`{{${c}}}`}return{step:{op:"template",tmpl:s,vars:o,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}function F(e,n){switch(e.type){case"Literal":return{$expr:"literal",value:e.value};case"Identifier":return{$expr:"ident",name:e.name};case"MemberExpression":{let t=e,r=F(t.object,n),s=t.optional===!0;if(t.computed){let i=t.property;return i.type==="Literal"?{$expr:"member",object:r,property:String(i.value),computed:!0,...s&&{optional:!0}}:{$expr:"member",object:r,property:F(i,n),computed:!0,...s&&{optional:!0}}}let o=t.property.name;return{$expr:"member",object:r,property:o,...s&&{optional:!0}}}case"ChainExpression":return F(e.expression,n);case"BinaryExpression":{let t=e;return{$expr:"binary",op:t.operator,left:F(t.left,n),right:F(t.right,n)}}case"LogicalExpression":{let t=e;return{$expr:"logical",op:t.operator,left:F(t.left,n),right:F(t.right,n)}}case"UnaryExpression":{let t=e;return{$expr:"unary",op:t.operator,argument:F(t.argument,n)}}case"ConditionalExpression":{let t=e;return{$expr:"conditional",test:F(t.test,n),consequent:F(t.consequent,n),alternate:F(t.alternate,n)}}case"ArrayExpression":return{$expr:"array",elements:e.elements.filter(r=>r!==null).map(r=>F(r,n))};case"ObjectExpression":{let t=e,r=[];for(let s of t.properties)if(s.type==="Property"){let o=s.key.type==="Identifier"?s.key.name:String(s.key.value);r.push({key:o,value:F(s.value,n)})}return{$expr:"object",properties:r}}case"CallExpression":{let t=e;if(t.callee.type==="MemberExpression"){let r=t.callee,s=r.property.type==="Identifier"?r.property.name:String(r.property.value),o=r.optional===!0||t.optional===!0;return{$expr:"methodCall",object:F(r.object,n),method:s,arguments:t.arguments.map(i=>F(i,n)),...o&&{optional:!0}}}if(t.callee.type==="Identifier"){let r=t.callee.name;if(n.helpers?.has(r))throw new W(`Helper '${r}' cannot be called inside an expression. Assign its result to a variable first: const result = ${r}(...); then use result.`,U(e),n.source,n.filename);return{$expr:"call",callee:r,arguments:t.arguments.map(s=>F(s,n))}}throw new W("Complex function calls in expressions should be lifted to statements",U(e),n.source,n.filename)}case"NewExpression":{let t=e,r="constructor";t.callee.type==="Identifier"&&(r=t.callee.name);let s=vr(r);throw new W(`The 'new' keyword is not supported in AsyncJS.${s}`,U(e),n.source,n.filename)}case"TemplateLiteral":throw new W("Template literals inside expressions are not supported. Assign to a variable first: const msg = `hello ${name}`; then use msg",U(e),n.source,n.filename);default:throw new W(`Unsupported expression type in condition: ${e.type}`,U(e),n.source,n.filename)}}function H(e,n){switch(e.type){case"Literal":return e.value;case"Identifier":return e.name;case"MemberExpression":{let t=e;if(t.optional===!0)return F(e,n);let s=H(t.object,n);if(s&&typeof s=="object"&&s.$expr){let i=t.computed?String(t.property.value):t.property.name;return{$expr:"member",object:s,property:i,...t.computed&&{computed:!0}}}if(t.computed)return F(e,n);let o=t.property.name;return typeof s=="string"?`${s}.${o}`:s&&s.$kind==="arg"?{$kind:"arg",path:`${s.path}.${o}`}:`${s}.${o}`}case"ChainExpression":return H(e.expression,n);case"ArrayExpression":return e.elements.map(t=>t?H(t,n):null);case"ObjectExpression":{let t={};for(let r of e.properties)if(r.type==="Property"){let s=r.key.type==="Identifier"?r.key.name:String(r.key.value);t[s]=H(r.value,n)}return t}case"TemplateLiteral":return F(e,n);case"CallExpression":return F(e,n);case"BinaryExpression":case"LogicalExpression":case"UnaryExpression":case"ConditionalExpression":return F(e,n);default:return null}}function gi(e,n){if(e.arguments.length===1&&e.arguments[0].type==="ObjectExpression"){let t=e.arguments[0],r={};for(let s of t.properties)if(s.type==="Property"){let o=s.key.type==="Identifier"?s.key.name:String(s.key.value);r[o]=H(s.value,n)}return r}return{args:e.arguments.map(t=>H(t,n))}}import{parseExpressionAt as ls}from"acorn";function yi(e,n){let t=n;for(;t>0&&e[t-1]!==`
|
|
57
|
+
`;)t--;if(e.slice(t,n).includes("//"))return!0;let s=0,o=!1;for(;s<n;)!o&&e.slice(s,s+2)==="/*"?(o=!0,s+=2):o&&e.slice(s,s+2)==="*/"?(o=!1,s+=2):s++;return o}function hi(e){let n=[],t=/\/\*test\s+'([^']*)'\s*\{([\s\S]*?)\}\s*\*\/|\/\*test\s+"([^"]*)"\s*\{([\s\S]*?)\}\s*\*\/|\/\*test\s+`([^`]*)`\s*\{([\s\S]*?)\}\s*\*\/|\/\*test\s*\{([\s\S]*?)\}\s*\*\//g,r;for(;(r=t.exec(e))!==null;){let s=r[1]||r[3]||r[5]||`embedded test ${n.length+1}`,o=(r[2]||r[4]||r[6]||r[7]||"").trim();n.push({description:s,body:o,line:Qt(e,r.index)})}return n}function en(e){let n=[],t=[],r=hi(e);n.push(...r);let s=/test\s+'([^']*)'\s*\{|test\s+"([^"]*)"\s*\{|test\s+`([^`]*)`\s*\{|test\s*\(\s*'([^']*)'\s*\)\s*\{|test\s*\(\s*"([^"]*)"\s*\)\s*\{|test\s*\(\s*`([^`]*)`\s*\)\s*\{|test\s*\{/g,o=/mock\s*\{/g,i=e,a,c=[];for(;(a=s.exec(e))!==null;){let u=a.index;if(yi(e,u))continue;let m=a[1]||a[2]||a[3]||a[4]||a[5]||a[6]||`test ${n.length+1}`,g=a.index+a[0].length,y=Ar(e,g-1);if(y===-1)continue;let x=e.slice(g,y).trim();n.push({description:m,body:x,line:Qt(e,u)}),c.push({start:u,end:y+1,desc:m})}let l=[];for(;(a=o.exec(e))!==null;){let u=a.index,m=a.index+a[0].length,g=Ar(e,m-1);if(g===-1)continue;let y=e.slice(m,g).trim();t.push({body:y,line:Qt(e,u)}),l.push({start:u,end:g+1})}let f=[...c,...l].sort((u,m)=>m.start-u.start);for(let u of f)i=i.slice(0,u.start)+i.slice(u.end);i=i.replace(/\n\s*\n\s*\n/g,`
|
|
58
58
|
|
|
59
|
-
`).trim();let p=
|
|
60
|
-
`).length}function
|
|
59
|
+
`).trim();let p=bi(n,t);return{code:i,tests:n,mocks:t,testRunner:p}}function Ar(e,n){let t=0,r=null,s=!1;for(let o=n;o<e.length;o++){let i=e[o];if(s){s=!1;continue}if(i==="\\"){s=!0;continue}if(!r&&(i==='"'||i==="'"||i==="`")){r=i;continue}if(r===i){r=null;continue}if(!r&&(i==="{"&&t++,i==="}"&&(t--,t===0)))return o}return-1}function Qt(e,n){return e.slice(0,n).split(`
|
|
60
|
+
`).length}function bi(e,n){if(e.length===0)return"// No tests defined";let t=n.map(s=>s.body).join(`
|
|
61
61
|
`);return`(async () => {
|
|
62
62
|
const __results = []
|
|
63
63
|
|
|
@@ -80,13 +80,13 @@ const __failed = __results.filter(r => !r.passed).length
|
|
|
80
80
|
|
|
81
81
|
// Return summary
|
|
82
82
|
return { passed: __passed, failed: __failed, results: __results }
|
|
83
|
-
})()`.trim()}var
|
|
83
|
+
})()`.trim()}var Pr=`
|
|
84
84
|
function assert(condition, message) {
|
|
85
85
|
if (!condition) {
|
|
86
86
|
throw new Error(message || 'Assertion failed')
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
`,
|
|
89
|
+
`,Rr=`
|
|
90
90
|
function expect(actual) {
|
|
91
91
|
const deepEqual = (a, b) => {
|
|
92
92
|
if (a === b) return true
|
|
@@ -177,52 +177,52 @@ function expect(actual) {
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
|
-
`,
|
|
181
|
-
`+Ar;import{validate as Br,s as St}from"tosijs-schema";function Ne(e){if(e.nullable)return{anyOf:[Ne({...e,nullable:!1}),{type:"null"}]};switch(e.kind){case"string":return{type:"string"};case"number":return{type:"number"};case"integer":return{type:"integer"};case"non-negative-integer":return{type:"integer",minimum:0};case"boolean":return{type:"boolean"};case"null":return{type:"null"};case"undefined":return{};case"any":return{};case"array":return e.items?{type:"array",items:Ne(e.items)}:{type:"array"};case"object":if(e.shape){let n={},t=[];for(let[r,s]of Object.entries(e.shape))n[r]=Ne(s),t.push(r);return{type:"object",properties:n,required:t,additionalProperties:!1}}return{type:"object"};case"union":return e.members?{anyOf:e.members.map(Ne)}:{};default:return{}}}function Ie(e){if(e===null)return{type:"null"};if(e===void 0)return{};switch(typeof e){case"string":return{type:"string"};case"number":return Number.isInteger(e)?{type:"integer"}:{type:"number"};case"boolean":return{type:"boolean"};case"object":{if(Array.isArray(e))return e.length===0?{type:"array"}:{type:"array",items:Ie(e[0])};let n={},t=[];for(let[r,s]of Object.entries(e))n[r]=Ie(s),t.push(r);return{type:"object",properties:n,required:t,additionalProperties:!1}}default:return{}}}function Yt(e){let n={},t=[];for(let[o,i]of Object.entries(e.params))i?.type?.kind?n[o]=Ne(i.type):i?.example!==void 0?n[o]=Ie(i.example):n[o]={},i?.required!==!1&&t.push(o),i?.example!==void 0&&(n[o].examples=[i.example]);let r={type:"object",properties:n,required:t},s;return e.returns&&(e.returns.type?.kind?s=Ne(e.returns.type):e.returns.example!==void 0&&(s=Ie(e.returns.example))),{input:r,output:s}}import{validate as Xt,filter as bi,s as _t}from"tosijs-schema";function Te(e){return e!==null&&typeof e=="object"&&"__runtimeType"in e&&e.__runtimeType===!0}function Pr(e){return e!==null&&typeof e=="object"&&"schema"in e&&typeof e.schema=="object"}function xi(e){return e!==null&&typeof e=="object"&&"type"in e&&typeof e.type=="string"}function Z(e,n,t,r){let s,o,i,a=t,c=r;if(typeof e=="string")if(s=e,typeof n=="function")o=n,a!==void 0&&(i=_t.infer(a));else if(n===void 0&&a!==void 0)i=_t.infer(a);else if(Pr(n))i=n;else if(xi(n))i=n;else if(n!==void 0)a=n,c=a,i=_t.infer(a);else throw new Error("Type(description) requires a predicate, schema, or example");else Pr(e),i=e,s=_i(i);let l;if(i){let p=i?.schema??i;p&&typeof p=="object"&&Array.isArray(p.examples)&&(l=p.examples)}return a===void 0&&l&&l.length>0&&(a=l[0]),{description:s,check:p=>o?o(p):i?Xt(p,i):!1,schema:i,predicate:o,example:a,examples:l,default:c,toJSONSchema(){if(i){let p=i?.schema??i;if(p&&typeof p=="object"&&"type"in p)return p}return a!==void 0?Ie(a):{description:s}},strip(p){return i?bi(p,i):p},__runtimeType:!0}}function _i(e){let n=e?.schema??e;if(n&&typeof n=="object"&&"type"in n){let t=n;switch(t.type){case"string":return t.format?`string (${t.format})`:t.pattern?`string matching ${t.pattern}`:t.minLength!==void 0&&t.maxLength!==void 0?`string (${t.minLength}-${t.maxLength} chars)`:"string";case"number":case"integer":return t.minimum!==void 0&&t.maximum!==void 0?`${t.type} (${t.minimum}-${t.maximum})`:t.minimum!==void 0?`${t.type} >= ${t.minimum}`:t.maximum!==void 0?`${t.type} <= ${t.maximum}`:t.type;case"boolean":return"boolean";case"array":return"array";case"object":return"object";case"null":return"null"}}return"value"}var Qt=Z("string",e=>typeof e=="string"?!0:`expected string, got ${e===null?"null":typeof e}`),en=Z("number",e=>typeof e=="number"?!0:`expected number, got ${e===null?"null":typeof e}`),tn=Z("boolean",e=>typeof e=="boolean"?!0:`expected boolean, got ${e===null?"null":typeof e}`),nn=Z("integer",e=>typeof e!="number"?`expected integer, got ${e===null?"null":typeof e}`:Number.isInteger(e)?!0:`${e} is not an integer`),rn=Z("positive integer",e=>typeof e!="number"?`expected positive integer, got ${e===null?"null":typeof e}`:Number.isInteger(e)?e<=0?`${e} is not positive`:!0:`${e} is not an integer`),sn=Z("non-empty string",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:e.length===0?"string is empty":!0),on=Z("email address",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)?!0:`"${e}" is not a valid email`),Rr=e=>{try{return new URL(e),!0}catch{return!1}},an=Z("URL",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:Rr(e)?!0:`"${e}" is not a valid URL`),cn=Z("UUID",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)?!0:`"${e}" is not a valid UUID`),Mr=e=>{let n=new Date(e);return!isNaN(n.getTime())&&e.includes("T")},Cr=e=>{if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let n=new Date(e+"T00:00:00Z");return!isNaN(n.getTime())},Nr=Z("ISO 8601 timestamp",e=>typeof e=="string"&&Mr(e)),Ir=Z("date (YYYY-MM-DD)",e=>typeof e=="string"&&Cr(e));function ln(e){return Z(`${e.description} or null`,n=>n===null||e.check(n)===!0)}function un(e){return Z(`${e.description} (optional)`,n=>n==null||e.check(n)===!0)}function fn(e,n,...t){if(typeof e=="string"&&Array.isArray(n)){let o=e,i=n,a=new Set(i);return{description:o,check:l=>a.has(l),toJSONSchema:()=>({enum:i}),strip:l=>l,__runtimeType:!0,values:i}}let r=[];Te(e)&&r.push(e),Te(n)&&r.push(n),r.push(...t);let s=r.map(o=>o.description).join(" | ");return Z(s,o=>r.some(i=>i.check(o)===!0))}function pn(e){return Z(`array of ${e.description}`,n=>Array.isArray(n)&&n.every(t=>e.check(t)===!0))}function wi(e){if(Te(e))return t=>e.check(t)===!0;if(e&&typeof e=="object"&&"schema"in e)return t=>Xt(t,e);let n=_t.infer(e);return t=>Xt(t,n)}function Qe(e,n,t){let r=[],s=[];for(let i of e)typeof i=="string"?(r.push(i),s.push(void 0)):(r.push(i[0]),s.push(i[1]));let o=(...i)=>{let a=r.map((l,f)=>{let p=f<i.length?i[f]:s[f];return p===void 0?()=>!0:wi(p)}),c=t;return r.forEach((l,f)=>{let p=f<i.length?i[f]:s[f],u="any";Te(p)?u=p.description:p!==void 0&&(u=typeof p=="string"?"string":JSON.stringify(p)),c=c.replace(new RegExp(`\\b${l}\\b`,"g"),u)}),Z(c,l=>n(l,...a))};return o.params=r,o.description=t,o}var mn=Qe(["T","U"],(e,n,t)=>Array.isArray(e)&&e.length===2&&n(e[0])&&t(e[1]),"Pair<T, U>"),dn=Qe(["V"],(e,n)=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.values(e).every(n),"Record<string, V>");function yn(e,n){let t=Object.values(n),r=new Set(t),s=Object.keys(n),o={};for(let[a,c]of Object.entries(n))o[c]=a;return{description:e,check:a=>r.has(a),toJSONSchema:()=>({enum:t}),strip:a=>a,__runtimeType:!0,members:n,names:o,values:t,keys:s}}function $i(e){if(e===null)return"null";if(e===void 0)return"undefined";switch(typeof e){case"string":return"string";case"boolean":return"boolean";case"number":return Number.isInteger(e)?"integer":"number";case"object":return Array.isArray(e)?"array":"object";default:return null}}function wt(e,n,t){if(Array.isArray(n)&&t){let r=n,s=[],o=[];for(let a of r)Array.isArray(a)?(s.push(a[0]),o.push(a[1])):(s.push(a),o.push(void 0));let i=((...a)=>{let c=s.map((f,p)=>p<a.length?a[p]:o[p]),l=t(...c);return wt(e,l)});return Object.defineProperties(i,{typeParamNames:{value:s,enumerable:!0},description:{value:e,enumerable:!0},__runtimeType:{value:!0,enumerable:!0}}),i}return Si(e,n)}function Si(e,n){let t={},r,s="assertReturns";if(typeof n=="function"){let i=n.__tjs;if(i){if(i.params)for(let[a,c]of Object.entries(i.params))t[a]=c?.example??null;i.returns&&(r=i.returns?.example??null),i.safeReturn?s="checkedReturns":i.unsafe?s="assertReturns":s="returns"}}else t=n.params??{},r=n.returns,s=n.returnContract??"assertReturns";return{description:e,params:t,returns:r,returnContract:s,toJSONSchema:()=>({description:e,type:"function"}),strip:i=>i,check:i=>{if(typeof i!="function")return`expected function, got ${i===null?"null":typeof i}`;let a=Object.keys(t).length;if(a>0){let l=i.__tjs;if(l?.params){let f=Object.keys(l.params).length;if(f!==a)return`expected ${a} params, got ${f}`;let p=Object.keys(t),u=Object.keys(l.params);for(let m=0;m<p.length;m++){let y=l.params[u[m]],g=t[p[m]];if(y?.type?.kind&&g!==void 0){let x=$i(g);if(x&&y.type.kind!==x&&y.type.kind!=="any")return`param '${p[m]}' expected ${x}, got ${y.type.kind}`}}}}return!0},__runtimeType:!0}}var Ti=Or(),me=Ti.version,et=Symbol.for("tjs.equals");function Et(e){let[n=0,t=0,r=0]=e.split(".").map(Number);return{major:n,minor:t,patch:r}}function hn(e,n){let t=Et(e),r=Et(n);return t.major!==r.major?t.major<r.major?-1:1:t.minor!==r.minor?t.minor<r.minor?-1:1:t.patch!==r.patch?t.patch<r.patch?-1:1:0}function bn(e,n){let t=Et(e),r=Et(n);return t.major===r.major}var he=class e extends Error{path;expected;actual;callStack;reason;constructor(n,t,r,s,o,i){super(n),this.name="MonadicError",this.path=t,this.expected=r,this.actual=s,this.callStack=o,this.reason=i,Error.captureStackTrace&&Error.captureStackTrace(this,e)}};function ki(e,n,t,r){let s=t===null?"null":typeof t,o=q.callStacks||q.debug?_n():void 0,i=r?`Expected ${n} for '${e}': ${r}`:`Expected ${n} for '${e}', got ${s}`,a=new he(i,e,n,s,o,r);if(q.trackErrors!==!1){let c=q.maxErrors??Tt;Fr[Oe]=a,Oe=(Oe+1)%c,ve<c&&ve++,kt++}if(q.logTypeErrors&&console.error(`[TJS TypeError] ${a.message}`),q.throwTypeErrors)throw a;return a}function gn(e){return e instanceof Error&&e.name==="MonadicError"&&"path"in e}var xn={debug:!1,safety:"inputs",requireReturnTypes:!1,callStacks:!1,maxStackSize:64,trackErrors:!0,maxErrors:64},q={...xn},tt=64,Dr=new Array(tt).fill(""),je=0,ye=0,Tt=64,Fr=new Array(Tt).fill(null),Oe=0,ve=0,kt=0,Fe=0;function ji(){Fe++}function vi(){Fe>0&&Fe--}function Ai(){return Fe>0}function Pi(e){q={...q,...e}}function Ri(){return{...q}}function qr(e){if((q.callStacks||q.debug)&&e){let n=q.maxStackSize??tt;Dr[je]=e,je=(je+1)%n,ye<n&&ye++}}function $t(){if((q.callStacks||q.debug)&&ye>0){let e=q.maxStackSize??tt;je=(je-1+e)%e,ye--}}function _n(){if(ye===0)return[];let e=q.maxStackSize??tt,n=[],t=(je-ye+e)%e;for(let r=0;r<ye;r++)n.push(Dr[(t+r)%e]);return n}function Wr(){if(q.trackErrors===!1||ve===0)return[];let e=q.maxErrors??Tt,n=[],t=(Oe-ve+e)%e;for(let r=0;r<ve;r++)n.push(Fr[(t+r)%e]);return n}function Mi(){let e=Wr();return Oe=0,ve=0,kt=0,e}function Ci(){return kt}function Ni(){q={...xn},je=0,ye=0,Oe=0,ve=0,kt=0,Fe=0}function Be(e,n){if(e!==null&&typeof e=="object"&&typeof e[et]=="function")return e[et](n);if(n!==null&&typeof n=="object"&&typeof n[et]=="function")return n[et](e);if(e!==null&&typeof e=="object"&&typeof e.Equals=="function")return e.Equals(n);if(n!==null&&typeof n=="object"&&typeof n.Equals=="function")return n.Equals(e);if((e instanceof String||e instanceof Number||e instanceof Boolean)&&(e=e.valueOf()),(n instanceof String||n instanceof Number||n instanceof Boolean)&&(n=n.valueOf()),e===n||typeof e=="number"&&typeof n=="number"&&isNaN(e)&&isNaN(n)||e==null&&n==null)return!0;if(e==null||n===null||n===void 0||typeof e!=typeof n||typeof e!="object")return!1;if(e instanceof Set&&n instanceof Set){if(e.size!==n.size)return!1;for(let s of e)if(!n.has(s))return!1;return!0}if(e instanceof Map&&n instanceof Map){if(e.size!==n.size)return!1;for(let[s,o]of e)if(!n.has(s)||!Be(o,n.get(s)))return!1;return!0}if(e instanceof Date&&n instanceof Date)return e.getTime()===n.getTime();if(e instanceof RegExp&&n instanceof RegExp)return e.toString()===n.toString();if(Array.isArray(e)&&Array.isArray(n))return e.length!==n.length?!1:e.every((s,o)=>Be(s,n[o]));if(Array.isArray(e)!==Array.isArray(n))return!1;let t=Object.keys(e),r=Object.keys(n);return t.length!==r.length?!1:t.every(s=>Be(e[s],n[s]))}function Ur(e,n){return!Be(e,n)}function Lr(e){return e===null?"null":typeof e}function Jr(e){return e instanceof Boolean||e instanceof Number||e instanceof String?!!e.valueOf():!!e}function wn(e,n){return(e instanceof String||e instanceof Number||e instanceof Boolean)&&(e=e.valueOf()),(n instanceof String||n instanceof Number||n instanceof Boolean)&&(n=n.valueOf()),!!(e===n||typeof e=="number"&&typeof n=="number"&&isNaN(e)&&isNaN(n)||e==null&&n==null)}function Vr(e,n){return!wn(e,n)}function de(e){return e!==null&&typeof e=="object"&&e.$error===!0}function le(e,n){let t={$error:!0,message:e,...n};if((q.callStacks||q.debug)&&ye>0){let r=_n(),s=n?.path?[...r,n.path]:r;t.stack=s}return t}function $n(e,n){if(e.length===0)return le("Unknown error");if(e.length===1)return e[0];let t=e.map(s=>{if(s.path){let o=s.path.split(".");return o[o.length-1]}return"unknown"}).join(", "),r=`Multiple parameter errors in ${n||"function"}: ${t}`;return le(r,{path:n,errors:e})}function De(e){if(e===null)return"null";if(e===void 0)return"undefined";if(Array.isArray(e))return"array";let n=typeof e;if(n!=="object")return n;let t=e.constructor?.name;return t&&t!=="Object"?t:"object"}function zr(e,n){if(e==null||typeof e!="object"&&typeof e!="function")return!1;let t=e;for(;t!==null;){if(t.constructor?.name===n)return!0;t=Object.getPrototypeOf(t)}return!1}function Ae(e,n,t){if(de(e))return e;if(typeof n=="object"&&n!==null&&"check"in n){let s=n.check(e);if(s===!0)return null;let o=typeof s=="string"?s:void 0,i=o?`Expected ${n.description} for '${t}': ${o}`:`Expected ${n.description} but got ${De(e)}`;return le(i,{path:t,expected:n.description,actual:De(e),reason:o})}let r=De(e);return n==="any"||n===r||n==="number"&&r==="number"||n==="integer"&&r==="number"&&Number.isInteger(e)||n==="non-negative-integer"&&r==="number"&&Number.isInteger(e)&&e>=0||n==="object"&&r==="object"?null:le(`Expected ${n} but got ${r}`,{path:t,expected:n,actual:r})}function Gr(e,n,t,r){if(typeof e!="function")return e;let s=e.__tjs;if(!s||!s.params)return e;let o=Object.entries(s.params);for(let i=0;i<n.length;i++){let a=n[i];if(a==="any")continue;let c=o[i];if(!c)continue;let l=c[1]?.type?.kind;if(!(!l||l==="any")&&l!==a)return new he(`Expected (...arg${i}: ${a}, ...) for '${r}', but callback declares arg${i} as ${l}`,`${r}(arg${i})`,a,l)}if(t!=="any"&&s.returns){let i=s.returns.type?.kind??s.returns.kind;if(i&&i!=="any"&&i!==t)return new he(`Expected callback returning ${t} for '${r}', but callback returns ${i}`,`${r}(return)`,t,i)}return e}function Sn(e,n,t){for(let[r,s]of Object.entries(n.params)){let o=e[r];if(de(o))return o;if(s.required&&o===void 0){let a=typeof s.type=="string"?s.type:s.type.description;return le(`Missing required parameter '${r}'`,{path:t?`${t}.${r}`:r,expected:a,actual:"undefined",loc:s.loc})}if(o===void 0)continue;let i=Ae(o,s.type,t?`${t}.${r}`:r);if(i)return s.loc&&(i.loc=s.loc),i}return null}function En(e,n){if(e.__tjs=n,e.__tjs.schema=()=>Yt(n),!(!n.polymorphic&&(n.safe||n.safeReturn||q.safety!=="none"&&!n.unsafe||n.returns&&q.safety==="all"&&!n.unsafeReturn)))return e;let r=!!n.returns,s=!!n.unsafe,o=!!n.safe,i=!!n.unsafeReturn,a=!!n.safeReturn,c=n.returns?.defaults,l=Object.entries(n.params),f=l.length,p=e.name||n.name||"anonymous",u=function(...m){if(Fe>0)return e.apply(this,m);let y=o||!s&&q.safety!=="none",g=r&&(a||!i&&q.safety==="all");if(!y&&!g)return e.apply(this,m);if(m.length>0&&de(m[0]))return m[0];if(y){let E=m.length===1&&typeof m[0]=="object"&&m[0]!==null&&!Array.isArray(m[0]),S=[];if(E){let b=m[0];for(let h=0;h<f;h++){let[w,_]=l[h],$=b[w];if(de($)){S.push($);continue}if(_.required&&$===void 0){S.push(le(`Missing required parameter '${w}'`,{path:`${p}.${w}`,expected:typeof _.type=="string"?_.type:_.type?.description||"value",actual:"undefined",loc:_.loc}));continue}if($!==void 0){let T=Ae($,_.type,`${p}.${w}`);T&&(_.loc&&(T.loc=_.loc),S.push(T))}}}else for(let b=0;b<f;b++){let[h,w]=l[b],_=m[b];if(de(_)){S.push(_);continue}if(w.required&&_===void 0){S.push(le(`Missing required parameter '${h}'`,{path:`${p}.${h}`,expected:typeof w.type=="string"?w.type:w.type?.description||"value",actual:"undefined",loc:w.loc}));continue}if(_!==void 0){let $=Ae(_,w.type,`${p}.${h}`);$&&(w.loc&&($.loc=w.loc),S.push($))}}if(S.length>0)return $n(S,p)}let x=q.callStacks||q.debug;x&&qr(p);try{let E=e.apply(this,m);if(g&&n.returns&&!de(E)){let S=c&&typeof E=="object"&&E!==null?Object.assign({},c,E):E,b=Ae(S,n.returns.type,`${p}()`);if(b)return x&&$t(),b}return x&&$t(),E}catch(E){return x&&$t(),le(E.message||String(E),{path:p,cause:E})}};return Object.defineProperty(u,"name",{value:e.name}),u.__tjs=n,u.__tjs.schema=()=>Yt(n),u}function Zr(e){let n=new Proxy(e,{construct(t,r,s){return Reflect.construct(t,r,s)},apply(t,r,s){return Reflect.construct(t,s)}});Object.defineProperty(n,"name",{value:e.name});for(let t of Object.getOwnPropertyNames(e))t!=="length"&&t!=="name"&&t!=="prototype"&&Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t));return n}function Kr(){let e={...q},n=e.maxStackSize??tt,t=new Array(n).fill(""),r=0,s=0,o=e.maxErrors??Tt,i=new Array(o).fill(null),a=0,c=0,l=0,f=0;function p(R){e={...e,...R}}function u(){return{...e}}function m(R){(e.callStacks||e.debug)&&R&&(t[r]=R,r=(r+1)%n,s<n&&s++)}function y(){(e.callStacks||e.debug)&&s>0&&(r=(r-1+n)%n,s--)}function g(){if(s===0)return[];let R=[],I=(r-s+n)%n;for(let B=0;B<s;B++)R.push(t[(I+B)%n]);return R}function x(){e={...xn},r=0,s=0,a=0,c=0,l=0,f=0}function E(){f++}function S(){f>0&&f--}function b(){return f>0}let h=new Map;function w(R,I,B){h.has(R)||h.set(R,new Map),h.get(R).set(I,B)}function _(R,I){let B=typeof R,J;if(R==null)return;if(B==="string")J="String";else if(B==="number")J="Number";else if(B==="boolean")J="Boolean";else if(Array.isArray(R))J="Array";else if(B==="object")J=R.constructor?.name||"Object";else return;let V=J;for(;V;){let Me=h.get(V);if(Me?.has(I))return Me.get(I);if(B==="object"&&!Array.isArray(R)){if(V=Object.getPrototypeOf(V===J?R:Object.getPrototypeOf(R))?.constructor?.name,V==="Object"||V===J)break}else break}let X=h.get("Object");if(X?.has(I))return X.get(I)}function $(R,I,B){let J=B===null?"null":typeof B,V=e.callStacks||e.debug?g():void 0,X=new he(`Expected ${I} for '${R}', got ${J}`,R,I,J,V);if(e.trackErrors!==!1&&(i[a]=X,a=(a+1)%o,c<o&&c++,l++),e.logTypeErrors&&console.error(`[TJS TypeError] ${X.message}`),e.throwTypeErrors)throw X;return X}function T(){if(e.trackErrors===!1||c===0)return[];let R=[],I=(a-c+o)%o;for(let B=0;B<c;B++)R.push(i[(I+B)%o]);return R}function j(){let R=T();return a=0,c=0,l=0,R}function P(){return l}function A(R,I){let B={$error:!0,message:R,...I};if((e.callStacks||e.debug)&&s>0){let J=I?.path?[...g(),I.path]:g();B.stack=J}return B}function C(R,I){return R==null?$(`bang.${I}`,"non-null",R):gn(R)?R:R[I]}return{version:me,MonadicError:he,typeError:$,isMonadicError:gn,bang:C,isError:de,error:A,composeErrors:$n,typeOf:De,isNativeType:zr,checkType:Ae,validateArgs:Sn,wrap:En,checkFnShape:Gr,wrapClass:Zr,compareVersions:hn,versionsCompatible:bn,createRuntime:Kr,configure:p,getConfig:u,pushStack:m,popStack:y,getStack:g,errors:T,clearErrors:j,getErrorCount:P,resetRuntime:x,enterUnsafe:E,exitUnsafe:S,isUnsafeMode:b,validate:Br,infer:St.infer.bind(St),Type:Z,isRuntimeType:Te,Union:fn,Generic:Qe,Enum:yn,FunctionPredicate:wt,Nullable:ln,Optional:un,TArray:pn,TString:Qt,TNumber:en,TBoolean:tn,TInteger:nn,TPositiveInt:rn,TNonEmptyString:sn,TEmail:on,TUrl:an,TUuid:cn,TPair:mn,TRecord:dn,Is:Be,IsNot:Ur,Eq:wn,NotEq:Vr,TypeOf:Lr,toBool:Jr,tjsEquals:et,registerExtension:w,resolveExtension:_}}var ke={version:me,MonadicError:he,typeError:ki,isMonadicError:gn,isError:de,error:le,composeErrors:$n,typeOf:De,isNativeType:zr,checkType:Ae,validateArgs:Sn,wrap:En,checkFnShape:Gr,wrapClass:Zr,compareVersions:hn,versionsCompatible:bn,configure:Pi,getConfig:Ri,pushStack:qr,popStack:$t,getStack:_n,errors:Wr,clearErrors:Mi,getErrorCount:Ci,resetRuntime:Ni,enterUnsafe:ji,exitUnsafe:vi,isUnsafeMode:Ai,createRuntime:Kr,validate:Br,infer:St.infer.bind(St),Type:Z,isRuntimeType:Te,Union:fn,Generic:Qe,Enum:yn,FunctionPredicate:wt,Nullable:ln,Optional:un,TArray:pn,TString:Qt,TNumber:en,TBoolean:tn,TInteger:nn,TPositiveInt:rn,TNonEmptyString:sn,TEmail:on,TUrl:an,TUuid:cn,Timestamp:Nr,LegalDate:Ir,TPair:mn,TRecord:dn,Is:Be,IsNot:Ur,Eq:wn,NotEq:Vr,TypeOf:Lr,toBool:Jr};function Tn(){let e=globalThis;if(e.__tjs){let n=e.__tjs.version;if(typeof n!="string")return e.__tjs=ke,ke;let t=hn(me,n);return t===0||(bn(me,n)?t>0?(console.info(`TJS runtime: upgrading ${n} \u2192 ${me}`),e.__tjs=ke):console.info(`TJS runtime: keeping ${n} (newer than ${me})`):(console.warn(`TJS runtime version conflict: ${n} vs ${me} (major version mismatch)`),t>0&&(console.warn(`Upgrading to ${me} - check for breaking changes`),e.__tjs=ke))),e.__tjs}return e.__tjs=ke,ke}function Ii(e){return`
|
|
180
|
+
`,xi=Pr+`
|
|
181
|
+
`+Rr;import{validate as Fr,s as St}from"tosijs-schema";function Ne(e){if(e.nullable)return{anyOf:[Ne({...e,nullable:!1}),{type:"null"}]};switch(e.kind){case"string":return{type:"string"};case"number":return{type:"number"};case"integer":return{type:"integer"};case"non-negative-integer":return{type:"integer",minimum:0};case"boolean":return{type:"boolean"};case"null":return{type:"null"};case"undefined":return{};case"any":return{};case"array":return e.items?{type:"array",items:Ne(e.items)}:{type:"array"};case"object":if(e.shape){let n={},t=[];for(let[r,s]of Object.entries(e.shape))n[r]=Ne(s),t.push(r);return{type:"object",properties:n,required:t,additionalProperties:!1}}return{type:"object"};case"union":return e.members?{anyOf:e.members.map(Ne)}:{};default:return{}}}function Ie(e){if(e===null)return{type:"null"};if(e===void 0)return{};switch(typeof e){case"string":return{type:"string"};case"number":return Number.isInteger(e)?{type:"integer"}:{type:"number"};case"boolean":return{type:"boolean"};case"object":{if(Array.isArray(e))return e.length===0?{type:"array"}:{type:"array",items:Ie(e[0])};let n={},t=[];for(let[r,s]of Object.entries(e))n[r]=Ie(s),t.push(r);return{type:"object",properties:n,required:t,additionalProperties:!1}}default:return{}}}function tn(e){let n={},t=[];for(let[o,i]of Object.entries(e.params))i?.type?.kind?n[o]=Ne(i.type):i?.example!==void 0?n[o]=Ie(i.example):n[o]={},i?.required!==!1&&t.push(o),i?.example!==void 0&&(n[o].examples=[i.example]);let r={type:"object",properties:n,required:t},s;return e.returns&&(e.returns.type?.kind?s=Ne(e.returns.type):e.returns.example!==void 0&&(s=Ie(e.returns.example))),{input:r,output:s}}import{validate as nn,filter as _i,s as _t}from"tosijs-schema";function Te(e){return e!==null&&typeof e=="object"&&"__runtimeType"in e&&e.__runtimeType===!0}function Mr(e){return e!==null&&typeof e=="object"&&"schema"in e&&typeof e.schema=="object"}function wi(e){return e!==null&&typeof e=="object"&&"type"in e&&typeof e.type=="string"}function K(e,n,t,r){let s,o,i,a=t,c=r;if(typeof e=="string")if(s=e,typeof n=="function")o=n,a!==void 0&&(i=_t.infer(a));else if(n===void 0&&a!==void 0)i=_t.infer(a);else if(Mr(n))i=n;else if(wi(n))i=n;else if(n!==void 0)a=n,c=a,i=_t.infer(a);else throw new Error("Type(description) requires a predicate, schema, or example");else Mr(e),i=e,s=$i(i);let l;if(i){let p=i?.schema??i;p&&typeof p=="object"&&Array.isArray(p.examples)&&(l=p.examples)}return a===void 0&&l&&l.length>0&&(a=l[0]),{description:s,check:p=>o?o(p):i?nn(p,i):!1,schema:i,predicate:o,example:a,examples:l,default:c,toJSONSchema(){if(i){let p=i?.schema??i;if(p&&typeof p=="object"&&"type"in p)return p}return a!==void 0?Ie(a):{description:s}},strip(p){return i?_i(p,i):p},__runtimeType:!0}}function $i(e){let n=e?.schema??e;if(n&&typeof n=="object"&&"type"in n){let t=n;switch(t.type){case"string":return t.format?`string (${t.format})`:t.pattern?`string matching ${t.pattern}`:t.minLength!==void 0&&t.maxLength!==void 0?`string (${t.minLength}-${t.maxLength} chars)`:"string";case"number":case"integer":return t.minimum!==void 0&&t.maximum!==void 0?`${t.type} (${t.minimum}-${t.maximum})`:t.minimum!==void 0?`${t.type} >= ${t.minimum}`:t.maximum!==void 0?`${t.type} <= ${t.maximum}`:t.type;case"boolean":return"boolean";case"array":return"array";case"object":return"object";case"null":return"null"}}return"value"}var rn=K("string",e=>typeof e=="string"?!0:`expected string, got ${e===null?"null":typeof e}`),sn=K("number",e=>typeof e=="number"?!0:`expected number, got ${e===null?"null":typeof e}`),on=K("boolean",e=>typeof e=="boolean"?!0:`expected boolean, got ${e===null?"null":typeof e}`),an=K("integer",e=>typeof e!="number"?`expected integer, got ${e===null?"null":typeof e}`:Number.isInteger(e)?!0:`${e} is not an integer`),cn=K("positive integer",e=>typeof e!="number"?`expected positive integer, got ${e===null?"null":typeof e}`:Number.isInteger(e)?e<=0?`${e} is not positive`:!0:`${e} is not an integer`),ln=K("non-empty string",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:e.length===0?"string is empty":!0),un=K("email address",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)?!0:`"${e}" is not a valid email`),Cr=e=>{try{return new URL(e),!0}catch{return!1}},fn=K("URL",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:Cr(e)?!0:`"${e}" is not a valid URL`),pn=K("UUID",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)?!0:`"${e}" is not a valid UUID`),Nr=e=>{let n=new Date(e);return!isNaN(n.getTime())&&e.includes("T")},Ir=e=>{if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let n=new Date(e+"T00:00:00Z");return!isNaN(n.getTime())},Or=K("ISO 8601 timestamp",e=>typeof e=="string"&&Nr(e)),Br=K("date (YYYY-MM-DD)",e=>typeof e=="string"&&Ir(e));function mn(e){return K(`${e.description} or null`,n=>n===null||e.check(n)===!0)}function dn(e){return K(`${e.description} (optional)`,n=>n==null||e.check(n)===!0)}function gn(e,n,...t){if(typeof e=="string"&&Array.isArray(n)){let o=e,i=n,a=new Set(i);return{description:o,check:l=>a.has(l),toJSONSchema:()=>({enum:i}),strip:l=>l,__runtimeType:!0,values:i}}let r=[];Te(e)&&r.push(e),Te(n)&&r.push(n),r.push(...t);let s=r.map(o=>o.description).join(" | ");return K(s,o=>r.some(i=>i.check(o)===!0))}function yn(e){return K(`array of ${e.description}`,n=>Array.isArray(n)&&n.every(t=>e.check(t)===!0))}function Si(e){if(Te(e))return t=>e.check(t)===!0;if(e&&typeof e=="object"&&"schema"in e)return t=>nn(t,e);let n=_t.infer(e);return t=>nn(t,n)}function Qe(e,n,t){let r=[],s=[];for(let i of e)typeof i=="string"?(r.push(i),s.push(void 0)):(r.push(i[0]),s.push(i[1]));let o=(...i)=>{let a=r.map((l,f)=>{let p=f<i.length?i[f]:s[f];return p===void 0?()=>!0:Si(p)}),c=t;return r.forEach((l,f)=>{let p=f<i.length?i[f]:s[f],u="any";Te(p)?u=p.description:p!==void 0&&(u=typeof p=="string"?"string":JSON.stringify(p)),c=c.replace(new RegExp(`\\b${l}\\b`,"g"),u)}),K(c,l=>n(l,...a))};return o.params=r,o.description=t,o}var hn=Qe(["T","U"],(e,n,t)=>Array.isArray(e)&&e.length===2&&n(e[0])&&t(e[1]),"Pair<T, U>"),bn=Qe(["V"],(e,n)=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.values(e).every(n),"Record<string, V>");function xn(e,n){let t=Object.values(n),r=new Set(t),s=Object.keys(n),o={};for(let[a,c]of Object.entries(n))o[c]=a;return{description:e,check:a=>r.has(a),toJSONSchema:()=>({enum:t}),strip:a=>a,__runtimeType:!0,members:n,names:o,values:t,keys:s}}function Ei(e){if(e===null)return"null";if(e===void 0)return"undefined";switch(typeof e){case"string":return"string";case"boolean":return"boolean";case"number":return Number.isInteger(e)?"integer":"number";case"object":return Array.isArray(e)?"array":"object";default:return null}}function wt(e,n,t){if(Array.isArray(n)&&t){let r=n,s=[],o=[];for(let a of r)Array.isArray(a)?(s.push(a[0]),o.push(a[1])):(s.push(a),o.push(void 0));let i=((...a)=>{let c=s.map((f,p)=>p<a.length?a[p]:o[p]),l=t(...c);return wt(e,l)});return Object.defineProperties(i,{typeParamNames:{value:s,enumerable:!0},description:{value:e,enumerable:!0},__runtimeType:{value:!0,enumerable:!0}}),i}return Ti(e,n)}function Ti(e,n){let t={},r,s="assertReturns";if(typeof n=="function"){let i=n.__tjs;if(i){if(i.params)for(let[a,c]of Object.entries(i.params))t[a]=c?.example??null;i.returns&&(r=i.returns?.example??null),i.safeReturn?s="checkedReturns":i.unsafe?s="assertReturns":s="returns"}}else t=n.params??{},r=n.returns,s=n.returnContract??"assertReturns";return{description:e,params:t,returns:r,returnContract:s,toJSONSchema:()=>({description:e,type:"function"}),strip:i=>i,check:i=>{if(typeof i!="function")return`expected function, got ${i===null?"null":typeof i}`;let a=Object.keys(t).length;if(a>0){let l=i.__tjs;if(l?.params){let f=Object.keys(l.params).length;if(f!==a)return`expected ${a} params, got ${f}`;let p=Object.keys(t),u=Object.keys(l.params);for(let m=0;m<p.length;m++){let g=l.params[u[m]],y=t[p[m]];if(g?.type?.kind&&y!==void 0){let x=Ei(y);if(x&&g.type.kind!==x&&g.type.kind!=="any")return`param '${p[m]}' expected ${x}, got ${g.type.kind}`}}}}return!0},__runtimeType:!0}}var ji=Dr(),me=ji.version,et=Symbol.for("tjs.equals");function Et(e){let[n=0,t=0,r=0]=e.split(".").map(Number);return{major:n,minor:t,patch:r}}function wn(e,n){let t=Et(e),r=Et(n);return t.major!==r.major?t.major<r.major?-1:1:t.minor!==r.minor?t.minor<r.minor?-1:1:t.patch!==r.patch?t.patch<r.patch?-1:1:0}function $n(e,n){let t=Et(e),r=Et(n);return t.major===r.major}var he=class e extends Error{path;expected;actual;callStack;reason;constructor(n,t,r,s,o,i){super(n),this.name="MonadicError",this.path=t,this.expected=r,this.actual=s,this.callStack=o,this.reason=i,Error.captureStackTrace&&Error.captureStackTrace(this,e)}};function vi(e,n,t,r){let s=t===null?"null":typeof t,o=q.callStacks||q.debug?En():void 0,i=r?`Expected ${n} for '${e}': ${r}`:`Expected ${n} for '${e}', got ${s}`,a=new he(i,e,n,s,o,r);if(q.trackErrors!==!1){let c=q.maxErrors??Tt;Wr[Oe]=a,Oe=(Oe+1)%c,ve<c&&ve++,kt++}if(q.logTypeErrors&&console.error(`[TJS TypeError] ${a.message}`),q.throwTypeErrors)throw a;return a}function _n(e){return e instanceof Error&&e.name==="MonadicError"&&"path"in e}var Sn={debug:!1,safety:"inputs",requireReturnTypes:!1,callStacks:!1,maxStackSize:64,trackErrors:!0,maxErrors:64},q={...Sn},tt=64,qr=new Array(tt).fill(""),je=0,ge=0,Tt=64,Wr=new Array(Tt).fill(null),Oe=0,ve=0,kt=0,Fe=0;function Ai(){Fe++}function Pi(){Fe>0&&Fe--}function Ri(){return Fe>0}function Mi(e){q={...q,...e}}function Ci(){return{...q}}function Ur(e){if((q.callStacks||q.debug)&&e){let n=q.maxStackSize??tt;qr[je]=e,je=(je+1)%n,ge<n&&ge++}}function $t(){if((q.callStacks||q.debug)&&ge>0){let e=q.maxStackSize??tt;je=(je-1+e)%e,ge--}}function En(){if(ge===0)return[];let e=q.maxStackSize??tt,n=[],t=(je-ge+e)%e;for(let r=0;r<ge;r++)n.push(qr[(t+r)%e]);return n}function Lr(){if(q.trackErrors===!1||ve===0)return[];let e=q.maxErrors??Tt,n=[],t=(Oe-ve+e)%e;for(let r=0;r<ve;r++)n.push(Wr[(t+r)%e]);return n}function Ni(){let e=Lr();return Oe=0,ve=0,kt=0,e}function Ii(){return kt}function Oi(){q={...Sn},je=0,ge=0,Oe=0,ve=0,kt=0,Fe=0}function Be(e,n){if(e!==null&&typeof e=="object"&&typeof e[et]=="function")return e[et](n);if(n!==null&&typeof n=="object"&&typeof n[et]=="function")return n[et](e);if(e!==null&&typeof e=="object"&&typeof e.Equals=="function")return e.Equals(n);if(n!==null&&typeof n=="object"&&typeof n.Equals=="function")return n.Equals(e);if((e instanceof String||e instanceof Number||e instanceof Boolean)&&(e=e.valueOf()),(n instanceof String||n instanceof Number||n instanceof Boolean)&&(n=n.valueOf()),e===n||typeof e=="number"&&typeof n=="number"&&isNaN(e)&&isNaN(n)||e==null&&n==null)return!0;if(e==null||n===null||n===void 0||typeof e!=typeof n||typeof e!="object")return!1;if(e instanceof Set&&n instanceof Set){if(e.size!==n.size)return!1;for(let s of e)if(!n.has(s))return!1;return!0}if(e instanceof Map&&n instanceof Map){if(e.size!==n.size)return!1;for(let[s,o]of e)if(!n.has(s)||!Be(o,n.get(s)))return!1;return!0}if(e instanceof Date&&n instanceof Date)return e.getTime()===n.getTime();if(e instanceof RegExp&&n instanceof RegExp)return e.toString()===n.toString();if(Array.isArray(e)&&Array.isArray(n))return e.length!==n.length?!1:e.every((s,o)=>Be(s,n[o]));if(Array.isArray(e)!==Array.isArray(n))return!1;let t=Object.keys(e),r=Object.keys(n);return t.length!==r.length?!1:t.every(s=>Be(e[s],n[s]))}function Jr(e,n){return!Be(e,n)}function Vr(e){return e===null?"null":typeof e}function zr(e){return e instanceof Boolean||e instanceof Number||e instanceof String?!!e.valueOf():!!e}function Tn(e,n){return(e instanceof String||e instanceof Number||e instanceof Boolean)&&(e=e.valueOf()),(n instanceof String||n instanceof Number||n instanceof Boolean)&&(n=n.valueOf()),!!(e===n||typeof e=="number"&&typeof n=="number"&&isNaN(e)&&isNaN(n)||e==null&&n==null)}function Gr(e,n){return!Tn(e,n)}function de(e){return e!==null&&typeof e=="object"&&e.$error===!0}function le(e,n){let t={$error:!0,message:e,...n};if((q.callStacks||q.debug)&&ge>0){let r=En(),s=n?.path?[...r,n.path]:r;t.stack=s}return t}function kn(e,n){if(e.length===0)return le("Unknown error");if(e.length===1)return e[0];let t=e.map(s=>{if(s.path){let o=s.path.split(".");return o[o.length-1]}return"unknown"}).join(", "),r=`Multiple parameter errors in ${n||"function"}: ${t}`;return le(r,{path:n,errors:e})}function De(e){if(e===null)return"null";if(e===void 0)return"undefined";if(Array.isArray(e))return"array";let n=typeof e;if(n!=="object")return n;let t=e.constructor?.name;return t&&t!=="Object"?t:"object"}function Zr(e,n){if(e==null||typeof e!="object"&&typeof e!="function")return!1;let t=e;for(;t!==null;){if(t.constructor?.name===n)return!0;t=Object.getPrototypeOf(t)}return!1}function Ae(e,n,t){if(de(e))return e;if(typeof n=="object"&&n!==null&&"check"in n){let s=n.check(e);if(s===!0)return null;let o=typeof s=="string"?s:void 0,i=o?`Expected ${n.description} for '${t}': ${o}`:`Expected ${n.description} but got ${De(e)}`;return le(i,{path:t,expected:n.description,actual:De(e),reason:o})}let r=De(e);return n==="any"||n===r||n==="number"&&r==="number"||n==="integer"&&r==="number"&&Number.isInteger(e)||n==="non-negative-integer"&&r==="number"&&Number.isInteger(e)&&e>=0||n==="object"&&r==="object"?null:le(`Expected ${n} but got ${r}`,{path:t,expected:n,actual:r})}function Kr(e,n,t,r){if(typeof e!="function")return e;let s=e.__tjs;if(!s||!s.params)return e;let o=Object.entries(s.params);for(let i=0;i<n.length;i++){let a=n[i];if(a==="any")continue;let c=o[i];if(!c)continue;let l=c[1]?.type?.kind;if(!(!l||l==="any")&&l!==a)return new he(`Expected (...arg${i}: ${a}, ...) for '${r}', but callback declares arg${i} as ${l}`,`${r}(arg${i})`,a,l)}if(t!=="any"&&s.returns){let i=s.returns.type?.kind??s.returns.kind;if(i&&i!=="any"&&i!==t)return new he(`Expected callback returning ${t} for '${r}', but callback returns ${i}`,`${r}(return)`,t,i)}return e}function jn(e,n,t){for(let[r,s]of Object.entries(n.params)){let o=e[r];if(de(o))return o;if(s.required&&o===void 0){let a=typeof s.type=="string"?s.type:s.type.description;return le(`Missing required parameter '${r}'`,{path:t?`${t}.${r}`:r,expected:a,actual:"undefined",loc:s.loc})}if(o===void 0)continue;let i=Ae(o,s.type,t?`${t}.${r}`:r);if(i)return s.loc&&(i.loc=s.loc),i}return null}function vn(e,n){if(e.__tjs=n,e.__tjs.schema=()=>tn(n),!(!n.polymorphic&&(n.safe||n.safeReturn||q.safety!=="none"&&!n.unsafe||n.returns&&q.safety==="all"&&!n.unsafeReturn)))return e;let r=!!n.returns,s=!!n.unsafe,o=!!n.safe,i=!!n.unsafeReturn,a=!!n.safeReturn,c=n.returns?.defaults,l=Object.entries(n.params),f=l.length,p=e.name||n.name||"anonymous",u=function(...m){if(Fe>0)return e.apply(this,m);let g=o||!s&&q.safety!=="none",y=r&&(a||!i&&q.safety==="all");if(!g&&!y)return e.apply(this,m);if(m.length>0&&de(m[0]))return m[0];if(g){let S=m.length===1&&typeof m[0]=="object"&&m[0]!==null&&!Array.isArray(m[0]),w=[];if(S){let h=m[0];for(let b=0;b<f;b++){let[$,_]=l[b],E=h[$];if(de(E)){w.push(E);continue}if(_.required&&E===void 0){w.push(le(`Missing required parameter '${$}'`,{path:`${p}.${$}`,expected:typeof _.type=="string"?_.type:_.type?.description||"value",actual:"undefined",loc:_.loc}));continue}if(E!==void 0){let k=Ae(E,_.type,`${p}.${$}`);k&&(_.loc&&(k.loc=_.loc),w.push(k))}}}else for(let h=0;h<f;h++){let[b,$]=l[h],_=m[h];if(de(_)){w.push(_);continue}if($.required&&_===void 0){w.push(le(`Missing required parameter '${b}'`,{path:`${p}.${b}`,expected:typeof $.type=="string"?$.type:$.type?.description||"value",actual:"undefined",loc:$.loc}));continue}if(_!==void 0){let E=Ae(_,$.type,`${p}.${b}`);E&&($.loc&&(E.loc=$.loc),w.push(E))}}if(w.length>0)return kn(w,p)}let x=q.callStacks||q.debug;x&&Ur(p);try{let S=e.apply(this,m);if(y&&n.returns&&!de(S)){let w=c&&typeof S=="object"&&S!==null?Object.assign({},c,S):S,h=Ae(w,n.returns.type,`${p}()`);if(h)return x&&$t(),h}return x&&$t(),S}catch(S){return x&&$t(),le(S.message||String(S),{path:p,cause:S})}};return Object.defineProperty(u,"name",{value:e.name}),u.__tjs=n,u.__tjs.schema=()=>tn(n),u}function Hr(e){let n=new Proxy(e,{construct(t,r,s){return Reflect.construct(t,r,s)},apply(t,r,s){return Reflect.construct(t,s)}});Object.defineProperty(n,"name",{value:e.name});for(let t of Object.getOwnPropertyNames(e))t!=="length"&&t!=="name"&&t!=="prototype"&&Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t));return n}function Yr(){let e={...q},n=e.maxStackSize??tt,t=new Array(n).fill(""),r=0,s=0,o=e.maxErrors??Tt,i=new Array(o).fill(null),a=0,c=0,l=0,f=0;function p(R){e={...e,...R}}function u(){return{...e}}function m(R){(e.callStacks||e.debug)&&R&&(t[r]=R,r=(r+1)%n,s<n&&s++)}function g(){(e.callStacks||e.debug)&&s>0&&(r=(r-1+n)%n,s--)}function y(){if(s===0)return[];let R=[],B=(r-s+n)%n;for(let D=0;D<s;D++)R.push(t[(B+D)%n]);return R}function x(){e={...Sn},r=0,s=0,a=0,c=0,l=0,f=0}function S(){f++}function w(){f>0&&f--}function h(){return f>0}let b=new Map;function $(R,B,D){b.has(R)||b.set(R,new Map),b.get(R).set(B,D)}function _(R,B){let D=typeof R,V;if(R==null)return;if(D==="string")V="String";else if(D==="number")V="Number";else if(D==="boolean")V="Boolean";else if(Array.isArray(R))V="Array";else if(D==="object")V=R.constructor?.name||"Object";else return;let z=V;for(;z;){let Me=b.get(z);if(Me?.has(B))return Me.get(B);if(D==="object"&&!Array.isArray(R)){if(z=Object.getPrototypeOf(z===V?R:Object.getPrototypeOf(R))?.constructor?.name,z==="Object"||z===V)break}else break}let X=b.get("Object");if(X?.has(B))return X.get(B)}function E(R,B,D){let V=D===null?"null":typeof D,z=e.callStacks||e.debug?y():void 0,X=new he(`Expected ${B} for '${R}', got ${V}`,R,B,V,z);if(e.trackErrors!==!1&&(i[a]=X,a=(a+1)%o,c<o&&c++,l++),e.logTypeErrors&&console.error(`[TJS TypeError] ${X.message}`),e.throwTypeErrors)throw X;return X}function k(){if(e.trackErrors===!1||c===0)return[];let R=[],B=(a-c+o)%o;for(let D=0;D<c;D++)R.push(i[(B+D)%o]);return R}function T(){let R=k();return a=0,c=0,l=0,R}function P(){return l}function A(R,B){let D={$error:!0,message:R,...B};if((e.callStacks||e.debug)&&s>0){let V=B?.path?[...y(),B.path]:y();D.stack=V}return D}function N(R,B){return R==null?E(`bang.${B}`,"non-null",R):_n(R)?R:R[B]}return{version:me,MonadicError:he,typeError:E,isMonadicError:_n,bang:N,isError:de,error:A,composeErrors:kn,typeOf:De,isNativeType:Zr,checkType:Ae,validateArgs:jn,wrap:vn,checkFnShape:Kr,wrapClass:Hr,compareVersions:wn,versionsCompatible:$n,createRuntime:Yr,configure:p,getConfig:u,pushStack:m,popStack:g,getStack:y,errors:k,clearErrors:T,getErrorCount:P,resetRuntime:x,enterUnsafe:S,exitUnsafe:w,isUnsafeMode:h,validate:Fr,infer:St.infer.bind(St),Type:K,isRuntimeType:Te,Union:gn,Generic:Qe,Enum:xn,FunctionPredicate:wt,Nullable:mn,Optional:dn,TArray:yn,TString:rn,TNumber:sn,TBoolean:on,TInteger:an,TPositiveInt:cn,TNonEmptyString:ln,TEmail:un,TUrl:fn,TUuid:pn,TPair:hn,TRecord:bn,Is:Be,IsNot:Jr,Eq:Tn,NotEq:Gr,TypeOf:Vr,toBool:zr,tjsEquals:et,registerExtension:$,resolveExtension:_}}var ke={version:me,MonadicError:he,typeError:vi,isMonadicError:_n,isError:de,error:le,composeErrors:kn,typeOf:De,isNativeType:Zr,checkType:Ae,validateArgs:jn,wrap:vn,checkFnShape:Kr,wrapClass:Hr,compareVersions:wn,versionsCompatible:$n,configure:Mi,getConfig:Ci,pushStack:Ur,popStack:$t,getStack:En,errors:Lr,clearErrors:Ni,getErrorCount:Ii,resetRuntime:Oi,enterUnsafe:Ai,exitUnsafe:Pi,isUnsafeMode:Ri,createRuntime:Yr,validate:Fr,infer:St.infer.bind(St),Type:K,isRuntimeType:Te,Union:gn,Generic:Qe,Enum:xn,FunctionPredicate:wt,Nullable:mn,Optional:dn,TArray:yn,TString:rn,TNumber:sn,TBoolean:on,TInteger:an,TPositiveInt:cn,TNonEmptyString:ln,TEmail:un,TUrl:fn,TUuid:pn,Timestamp:Or,LegalDate:Br,TPair:hn,TRecord:bn,Is:Be,IsNot:Jr,Eq:Tn,NotEq:Gr,TypeOf:Vr,toBool:zr};function An(){let e=globalThis;if(e.__tjs){let n=e.__tjs.version;if(typeof n!="string")return e.__tjs=ke,ke;let t=wn(me,n);return t===0||($n(me,n)?t>0?(console.info(`TJS runtime: upgrading ${n} \u2192 ${me}`),e.__tjs=ke):console.info(`TJS runtime: keeping ${n} (newer than ${me})`):(console.warn(`TJS runtime version conflict: ${n} vs ${me} (major version mismatch)`),t>0&&(console.warn(`Upgrading to ${me} - check for breaking changes`),e.__tjs=ke))),e.__tjs}return e.__tjs=ke,ke}function Bi(e){return`
|
|
182
182
|
// TJS runtime wrapper (skips unsafe functions)
|
|
183
183
|
if (typeof ${e}.__tjs === 'object' && !${e}.__tjs.unsafe && typeof globalThis.__tjs?.wrap === 'function') {
|
|
184
184
|
${e} = globalThis.__tjs.wrap(${e}, ${e}.__tjs)
|
|
185
185
|
}
|
|
186
|
-
`.trim()}function
|
|
186
|
+
`.trim()}function Di(e,n,t=1e-9){if(e===n)return!0;if(typeof e=="number"&&typeof n=="number"&&(!Number.isInteger(e)||!Number.isInteger(n))){let r=Math.abs(e-n),s=Math.max(Math.abs(e),Math.abs(n),1);return r/s<t}return!1}function Rn(e,n){if(e===n||typeof e=="number"&&typeof n=="number"&&Number.isNaN(e)&&Number.isNaN(n)||Di(e,n))return!0;if(e===null||n===null||e===void 0||n===void 0)return e===n;if(typeof e!=typeof n||typeof e!="object")return!1;if(Array.isArray(e)&&Array.isArray(n))return e.length!==n.length?!1:e.every((s,o)=>Rn(s,n[o]));if(Array.isArray(e)!==Array.isArray(n))return!1;let t=Object.keys(e),r=Object.keys(n);return t.length!==r.length?!1:t.every(s=>Rn(e[s],n[s]))}function Mn(e,n,t=""){if(n===null)return e===null?{matches:!0}:{matches:!1,error:`Expected null at '${t}', got ${Pe(e)}`};if(n===void 0)return e===void 0?{matches:!0}:{matches:!1,error:`Expected undefined at '${t}', got ${Pe(e)}`};if(typeof n=="number")return typeof e=="number"?{matches:!0}:{matches:!1,error:`Expected number at '${t}', got ${Pe(e)}`};if(typeof n=="string")return typeof e=="string"?{matches:!0}:{matches:!1,error:`Expected string at '${t}', got ${Pe(e)}`};if(typeof n=="boolean")return typeof e=="boolean"?{matches:!0}:{matches:!1,error:`Expected boolean at '${t}', got ${Pe(e)}`};if(Array.isArray(n)){if(!Array.isArray(e))return{matches:!1,error:`Expected array at '${t}', got ${Pe(e)}`};if(n.length===0)return{matches:!0};let r=n[0];for(let s=0;s<e.length;s++){let o=Mn(e[s],r,`${t}[${s}]`);if(!o.matches)return o}return{matches:!0}}if(typeof n=="object"&&n!==null){if(typeof e!="object"||e===null||Array.isArray(e))return{matches:!1,error:`Expected object at '${t}', got ${Pe(e)}`};for(let r of Object.keys(n)){let s=t?`${t}.${r}`:r;if(!(r in e))return{matches:!1,error:`Missing property '${s}'`};let o=Mn(e[r],n[r],s);if(!o.matches)return o}return{matches:!0}}return e===n?{matches:!0}:{matches:!1,error:`Type mismatch at '${t}'`}}function Pe(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?"array":typeof e}function nt(e,n=0){if(e===null)return"null";if(e===void 0)return"undefined";if(typeof e=="string")return JSON.stringify(e);if(typeof e=="number"||typeof e=="boolean")return String(e);if(Array.isArray(e))return e.length===0?"[]":e.length<=3?`[${e.map(t=>nt(t,n)).join(", ")}]`:`[${e.slice(0,3).map(t=>nt(t,n)).join(", ")}, ...]`;if(typeof e=="object"){let t=Object.entries(e);if(t.length===0)return"{}";let r=c=>/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(c)?c:JSON.stringify(c);if(t.length<=2)return`{${t.map(([l,f])=>`${r(l)}: ${nt(f,n)}`).join(", ")}}`;let s=" ".repeat(n+1),o=" ".repeat(n),i=t.slice(0,8).map(([c,l])=>`${s}${r(c)}: ${nt(l,n+1)}`).join(`,
|
|
187
187
|
`),a=t.length>8?`,
|
|
188
188
|
${s}...`:"";return`{
|
|
189
189
|
${i}${a}
|
|
190
|
-
${o}}`}return String(e)}function
|
|
190
|
+
${o}}`}return String(e)}function Fi(e){let n=e.replace(/\/\*[\s\S]*?\*\//g,t=>{let r=t.split(`
|
|
191
191
|
`).length-1;return`
|
|
192
|
-
`.repeat(r)});return n=n.replace(/\/\/[^\n]*/g,""),n}function
|
|
193
|
-
`)}function
|
|
194
|
-
`).length;if(f===":!")continue;let u=t.slice(s.index+s[0].length),m=jt(u);if(!m)continue;let
|
|
195
|
-
`).length,
|
|
196
|
-
`),u="const { Is, IsNot, Eq, NotEq, TypeOf } = globalThis.__tjs ?? {};",m=e.map((
|
|
197
|
-
// Test ${
|
|
192
|
+
`.repeat(r)});return n=n.replace(/\/\/[^\n]*/g,""),n}function Qr(e){let n=e.replace(/^import\s+.*?from\s+['"][^'"]+['"];?\s*$/gm,"");return n=n.replace(/^import\s+['"][^'"]+['"];?\s*$/gm,""),n=n.replace(/^export\s+default\s+/gm,""),n=n.replace(/^export\s+/gm,""),n=n.replace(/^(\s*)((?:const|let|var)\s+\w+\s*=\s*)?await\s+.+$/gm,"$1/* top-level await removed for test execution */"),n}function qi(e){if(Object.keys(e).length===0)return"";let n=[];for(let[t,r]of Object.entries(e)){let s=Qr(r);n.push(`// Resolved import: ${t}`),n.push(s)}return n.join(`
|
|
193
|
+
`)}function Xr(e){let n={},t=e.trim();if(!t.startsWith("{")||!t.includes("="))try{return{pattern:new Function(`return ${e}`)(),defaults:n}}catch{return null}let r="",s=0,o=0;for(;o<t.length;){let i=t[o];if(i==="{"||i==="["||i==="(")s++,r+=i,o++;else if(i==="}"||i==="]"||i===")")s--,r+=i,o++;else if(i==="'"||i==='"'||i==="`"){let a=i;for(r+=i,o++;o<t.length&&t[o]!==a;)t[o]==="\\"&&(r+=t[o++]),r+=t[o++];o<t.length&&(r+=t[o++])}else if(s===1&&i==="="){let l=(r.slice(r.lastIndexOf("{")+1).split(",").pop()||"").match(/\s*(\w+)\s*$/);if(l){let f=o+1;for(;f<t.length&&/\s/.test(t[f]);)f++;let p="",u=0;for(;f<t.length;){let m=t[f];if(m==="{"||m==="["||m==="(")u++;else if(m==="}"||m==="]"||m===")"){if(u===0)break;u--}else if(m===","&&u===0)break;p+=m,f++}try{n[l[1]]=new Function(`return ${p.trim()}`)()}catch{}r+=":",o++;continue}r+=i,o++}else r+=i,o++}try{return{pattern:new Function(`return ${r}`)(),defaults:n}}catch{return null}}function es(e){let n=[],t=Fi(e),r=/(async\s+)?function\s+(\w+)\s*\(([^)]*)\)\s*(:[?!]?)\s*/g,s;for(;(s=r.exec(t))!==null;){let a=!!s[1],c=s[2],l=s[3],f=s[4],p=t.slice(0,s.index).split(`
|
|
194
|
+
`).length;if(f===":!")continue;let u=t.slice(s.index+s[0].length),m=jt(u);if(!m)continue;let g=Pn(l);if(!(l.trim()&&g.length===0))try{let y=Xr(m);if(!y)continue;let x=g.map(S=>new Function(`return ${S}`)());n.push({funcName:c,args:x,expected:y.pattern,defaults:Object.keys(y.defaults).length>0?y.defaults:void 0,line:p,isAsync:a})}catch{}}let o=/class\s+(\w+)(?:\s+extends\s+\w+)?\s*\{/g,i;for(;(i=o.exec(t))!==null;){let a=i[1],c=i.index+i[0].length,l=1,f=c;for(let h=c;h<t.length;h++)if(t[h]==="{")l++;else if(t[h]==="}"&&(l--,l===0)){f=h;break}let p=t.slice(c,f),m=/constructor\s*\(([^)]*)\)/.exec(p);if(!m)continue;let g=m[1],y=Pn(g);if(g.trim()&&y.length===0)continue;let x;try{x=y.map(h=>new Function(`return ${h}`)())}catch{continue}let S=/(async\s+)?(\w+)\s*\(([^)]*)\)\s*(:[?!]?)\s*/g,w;for(;(w=S.exec(p))!==null;){let h=w[2];if(h==="constructor")continue;let b=!!w[1],$=w[3];if(w[4]===":!")continue;let E=c+w.index,k=t.slice(0,E).split(`
|
|
195
|
+
`).length,T=p.slice(w.index+w[0].length),P=jt(T);if(!P)continue;let A=Pn($);if(!($.trim()&&A.length===0))try{let N=Xr(P);if(!N)continue;let R=A.map(B=>new Function(`return ${B}`)());n.push({funcName:h,args:R,expected:N.pattern,defaults:Object.keys(N.defaults).length>0?N.defaults:void 0,line:k,isAsync:b,className:a,constructorArgs:x})}catch{}}}return n}function ts(e,n,t,r,s={},o=new Map){let i=[];if(e.length===0&&t.length===0)return i;let a=r.match(/^import\s+.*?from\s+['"]([^'"]+)['"];?\s*$/gm)||[],c=a.length>0&&a.some(b=>{let $=b.match(/from\s+['"]([^'"]+)['"]/);return $&&!($[1]in s)}),l=Qr(r),f=qi(s),p=n.map(b=>b.body).join(`
|
|
196
|
+
`),u="const { Is, IsNot, Eq, NotEq, TypeOf } = globalThis.__tjs ?? {};",m=e.map((b,$)=>{let _=o.size>0?Ze(b.body,o):b.body;return`
|
|
197
|
+
// Test ${$}: ${b.description}
|
|
198
198
|
try {
|
|
199
199
|
${u}
|
|
200
200
|
${_}
|
|
201
|
-
__testResults.push({ idx: ${
|
|
201
|
+
__testResults.push({ idx: ${$}, passed: true });
|
|
202
202
|
} catch (e) {
|
|
203
|
-
__testResults.push({ idx: ${
|
|
203
|
+
__testResults.push({ idx: ${$}, passed: false, isRef: e instanceof ReferenceError, error: e.message || String(e) });
|
|
204
204
|
}
|
|
205
205
|
`}).join(`
|
|
206
|
-
`),
|
|
207
|
-
// Signature test ${
|
|
206
|
+
`),g=t.filter(b=>!b.isAsync),y=t.filter(b=>b.isAsync),x=g.map((b,$)=>{let _=b.className?`${b.className}.${b.funcName}`:b.funcName,E=b.className?`new ${b.className}(${(b.constructorArgs||[]).map(k=>JSON.stringify(k)).join(", ")}).${b.funcName}(${b.args.map(k=>JSON.stringify(k)).join(", ")})`:`${b.funcName}(${b.args.map(k=>JSON.stringify(k)).join(", ")})`;return`
|
|
207
|
+
// Signature test ${$}: ${_}
|
|
208
208
|
try {
|
|
209
|
-
let __actual = ${
|
|
210
|
-
const __expected = ${JSON.stringify(
|
|
211
|
-
const __defaults = ${JSON.stringify(
|
|
209
|
+
let __actual = ${E};
|
|
210
|
+
const __expected = ${JSON.stringify(b.expected)};${b.defaults?`
|
|
211
|
+
const __defaults = ${JSON.stringify(b.defaults)};
|
|
212
212
|
if (typeof __actual === 'object' && __actual !== null) __actual = Object.assign({}, __defaults, __actual);`:""}
|
|
213
213
|
if (__deepEqual(__actual, __expected)) {
|
|
214
|
-
__sigTestResults.push({ idx: ${
|
|
214
|
+
__sigTestResults.push({ idx: ${$}, passed: true });
|
|
215
215
|
} else {
|
|
216
|
-
__sigTestResults.push({ idx: ${
|
|
216
|
+
__sigTestResults.push({ idx: ${$}, passed: false, error: 'Expected ' + __format(__expected) + ' at \\'${_}\\', got ' + __format(__actual) });
|
|
217
217
|
}
|
|
218
218
|
} catch (e) {
|
|
219
219
|
// The function threw on its example inputs \u2014 the example couldn't be
|
|
220
220
|
// *evaluated* (e.g. it calls an atom that doesn't exist at build time).
|
|
221
221
|
// That's inconclusive, not a mismatch. Never block transpilation on it.
|
|
222
|
-
__sigTestResults.push({ idx: ${
|
|
222
|
+
__sigTestResults.push({ idx: ${$}, passed: false, threw: true, error: e.message || String(e) });
|
|
223
223
|
}
|
|
224
224
|
`}).join(`
|
|
225
|
-
`);
|
|
225
|
+
`);An();let h=`
|
|
226
226
|
|
|
227
227
|
const __saved_tjs = globalThis.__tjs;
|
|
228
228
|
|
|
@@ -306,15 +306,17 @@ ${o}}`}return String(e)}function Bi(e){let n=e.replace(/\/\*[\s\S]*?\*\//g,t=>{l
|
|
|
306
306
|
globalThis.__tjs = __saved_tjs;
|
|
307
307
|
}
|
|
308
308
|
return { testResults: __testResults, sigTestResults: __sigTestResults };
|
|
309
|
-
`;try{let
|
|
310
|
-
`)}var At={Int8Array:{elementType:"i32",bytesPerElement:1,loadOp:d.i32_load8_s,storeOp:d.i32_store8},Uint8Array:{elementType:"i32",bytesPerElement:1,loadOp:d.i32_load8_u,storeOp:d.i32_store8},Uint8ClampedArray:{elementType:"i32",bytesPerElement:1,loadOp:d.i32_load8_u,storeOp:d.i32_store8},Int16Array:{elementType:"i32",bytesPerElement:2,loadOp:d.i32_load16_s,storeOp:d.i32_store16},Uint16Array:{elementType:"i32",bytesPerElement:2,loadOp:d.i32_load16_u,storeOp:d.i32_store16},Int32Array:{elementType:"i32",bytesPerElement:4,loadOp:d.i32_load,storeOp:d.i32_store},Uint32Array:{elementType:"i32",bytesPerElement:4,loadOp:d.i32_load,storeOp:d.i32_store},Float32Array:{elementType:"f32",bytesPerElement:4,loadOp:d.f32_load,storeOp:d.f32_store},Float64Array:{elementType:"f64",bytesPerElement:8,loadOp:d.f64_load,storeOp:d.f64_store}};function Ji(e,n=new Map){let t={params:e,locals:new Map,nextLocalIndex:e.length,localTypes:[],warnings:[],errors:[],loopDepth:0,needsMathImports:new Set,needsMemory:!1,hasReturn:!1,wat:[],watIndent:1,moduleFunctions:n};return e.forEach((r,s)=>{t.locals.set(r.name,{index:s,type:r.type})}),t}function vt(e,n,t){if(e.locals.has(n))return e.errors.push(`Duplicate local declaration: ${n}`),e.locals.get(n).index;let r=e.nextLocalIndex++;return e.locals.set(n,{index:r,type:t}),e.localTypes.push(t),r}function Re(e,n){return e.locals.get(n)}function qe(e,n){switch(e.type){case"ExpressionStatement":{let t=e.expression;return[...D(t,n),d.drop]}case"ReturnStatement":{let t=e;if(n.hasReturn=!0,!t.argument)return[d.return];let r=D(t.argument,n),s=L(t.argument,n);return s==="i32"?r.push(d.f64_convert_i32_s):s==="f32"&&r.push(d.f64_promote_f32),r.push(d.return),r}case"VariableDeclaration":{let t=e,r=[];for(let s of t.declarations){if(s.id.type!=="Identifier"){n.errors.push("Destructuring not supported in WASM blocks");continue}let o=s.id.name,i="f64";s.init&&(i=L(s.init,n));let a=vt(n,o,i);s.init&&(r.push(...D(s.init,n)),r.push(d.local_set,...M(a)))}return r}case"ForStatement":return Vi(e,n);case"IfStatement":return zi(e,n);case"BlockStatement":{let t=e,r=[];for(let s of t.body)r.push(...qe(s,n));return r}default:return n.errors.push(`Unsupported statement type: ${e.type}`),[]}}function Vi(e,n){let t=[];return e.init&&(e.init.type==="VariableDeclaration"?t.push(...qe(e.init,n)):t.push(...D(e.init,n))),t.push(d.block,ae.void),t.push(d.loop,ae.void),e.test&&(t.push(...D(e.test,n)),t.push(d.i32_eqz),t.push(d.br_if,1)),n.loopDepth++,e.body&&t.push(...qe(e.body,n)),n.loopDepth--,e.update&&(t.push(...D(e.update,n)),t.push(d.drop)),t.push(d.br,0),t.push(d.end),t.push(d.end),t}function zi(e,n){let t=[];return t.push(...D(e.test,n)),t.push(d.if,ae.void),t.push(...qe(e.consequent,n)),e.alternate&&(t.push(d.else),t.push(...qe(e.alternate,n))),t.push(d.end),t}function L(e,n){switch(e.type){case"Literal":{let t=e;return typeof t.value=="number"?t.raw&&(t.raw.includes(".")||t.raw.includes("e"))?"f64":Number.isInteger(t.value)&&t.value>=-2147483648&&t.value<=2147483647?"i32":"f64":"f64"}case"Identifier":return Re(n,e.name)?.type??"f64";case"BinaryExpression":case"AssignmentExpression":{let t=e;if(["<",">","<=",">=","==","!=","===","!=="].includes(t.operator)||["|","&","^","<<",">>",">>>"].includes(t.operator))return"i32";let r=L(t.left,n),s=L(t.right,n);return r==="v128"||s==="v128"?"v128":r==="f64"||s==="f64"?"f64":r==="f32"||s==="f32"?"f32":"i32"}case"UnaryExpression":{let t=e;return t.operator==="!"?"i32":L(t.argument,n)}case"MemberExpression":{let t=e;if(t.object.type==="Identifier"&&Re(n,t.object.name)){let s=n.params.find(o=>o.name===t.object.name);if(s?.arrayType){let o=At[s.arrayType];if(o)return o.elementType}}return"f64"}case"CallExpression":{let t=e;if(t.callee.type==="MemberExpression"){let r=t.callee;if(r.object.type==="Identifier"&&r.object.name==="Math")return"f64"}if(t.callee.type==="Identifier"){let r=t.callee.name;if(r==="f32x4_extract_lane")return"f32";if(r.startsWith("f32x4_")||r==="v128_load")return"v128";let s=n.moduleFunctions.get(r);if(s)return s.hasReturn?"f64":"i32"}return"f64"}default:return"f64"}}function D(e,n){switch(e.type){case"Literal":{let t=e;if(typeof t.value=="number"){let r=L(e,n);return r==="i32"?[d.i32_const,...ot(t.value|0)]:r==="f32"?[d.f32_const,...Pn(t.value)]:[d.f64_const,...ne(t.value)]}return n.errors.push(`Unsupported literal type: ${typeof t.value}`),[d.f64_const,...ne(0)]}case"Identifier":{let t=e.name,r=Re(n,t);return r?[d.local_get,...M(r.index)]:(n.errors.push(`Unknown identifier: ${t}`),[d.f64_const,...ne(0)])}case"BinaryExpression":return Gi(e,n);case"UnaryExpression":return Zi(e,n);case"AssignmentExpression":return Ki(e,n);case"UpdateExpression":return Hi(e,n);case"MemberExpression":return Yi(e,n);case"CallExpression":return Qi(e,n);case"SequenceExpression":{let t=e,r=[];for(let s=0;s<t.expressions.length;s++)r.push(...D(t.expressions[s],n)),s<t.expressions.length-1&&r.push(d.drop);return r}default:return n.errors.push(`Unsupported expression type: ${e.type}`),[d.f64_const,...ne(0)]}}function Gi(e,n){let t=D(e.left,n),r=D(e.right,n),s=L(e,n),o=L(e.left,n),i=L(e.right,n),a=["<",">","<=",">=","==","===","!=","!=="].includes(e.operator),c;o==="f64"||i==="f64"?c="f64":o==="f32"||i==="f32"?c="f32":c="i32",!a&&s==="f64"&&(c="f64");let l=t,f=r;c==="f64"?(o==="i32"?l=[...t,d.f64_convert_i32_s]:o==="f32"&&(l=[...t,d.f64_promote_f32]),i==="i32"?f=[...r,d.f64_convert_i32_s]:i==="f32"&&(f=[...r,d.f64_promote_f32])):c==="f32"&&(o==="i32"&&(l=[...t,d.f32_convert_i32_s]),i==="i32"&&(f=[...r,d.f32_convert_i32_s]));let u={"+":{i32:d.i32_add,f32:d.f32_add,f64:d.f64_add},"-":{i32:d.i32_sub,f32:d.f32_sub,f64:d.f64_sub},"*":{i32:d.i32_mul,f32:d.f32_mul,f64:d.f64_mul},"/":{i32:d.i32_div_s,f32:d.f32_div,f64:d.f64_div},"%":{i32:d.i32_rem_s},"<":{i32:d.i32_lt_s,f32:d.f32_lt,f64:d.f64_lt},">":{i32:d.i32_gt_s,f32:d.f32_gt,f64:d.f64_gt},"<=":{i32:d.i32_le_s,f32:d.f32_le,f64:d.f64_le},">=":{i32:d.i32_ge_s,f32:d.f32_ge,f64:d.f64_ge},"==":{i32:d.i32_eq,f32:d.f32_eq,f64:d.f64_eq},"===":{i32:d.i32_eq,f32:d.f32_eq,f64:d.f64_eq},"!=":{i32:d.i32_ne,f32:d.f32_ne,f64:d.f64_ne},"!==":{i32:d.i32_ne,f32:d.f32_ne,f64:d.f64_ne},"|":{i32:d.i32_or},"&":{i32:d.i32_and},"^":{i32:d.i32_xor},"<<":{i32:d.i32_shl},">>":{i32:d.i32_shr_s},">>>":{i32:d.i32_shr_u}}[e.operator];if(!u)return n.errors.push(`Unsupported operator: ${e.operator}`),[d.f64_const,...ne(0)];let m=u[c]??u.f64??u.i32;return m===void 0?(n.errors.push(`Operator ${e.operator} not supported for type ${c}`),[d.f64_const,...ne(0)]):[...l,...f,m]}function Zi(e,n){let t=D(e.argument,n),r=L(e.argument,n);switch(e.operator){case"-":return r==="i32"?[d.i32_const,0,...t,d.i32_sub]:r==="f32"?[...t,d.f32_neg]:[...t,d.f64_neg];case"!":return[...t,d.i32_eqz];case"~":return[...t,d.i32_const,...ot(-1),d.i32_xor];default:return n.errors.push(`Unsupported unary operator: ${e.operator}`),t}}function Ki(e,n){if(e.left.type==="MemberExpression")return Xi(e.left,e.right,e.operator,n);if(e.left.type!=="Identifier")return n.errors.push("Assignment target must be identifier or array element"),[];let t=e.left.name,r=Re(n,t);if(!r)return n.errors.push(`Unknown variable: ${t}`),[];let s=[];if(e.operator==="="){s.push(...D(e.right,n));let o=L(e.right,n);r.type==="f64"&&o==="i32"?s.push(d.f64_convert_i32_s):r.type==="f64"&&o==="f32"?s.push(d.f64_promote_f32):r.type==="i32"&&o==="f64"?s.push(d.i32_trunc_f64_s):r.type==="i32"&&o==="f32"?s.push(d.i32_trunc_f32_s):r.type==="f32"&&o==="i32"?s.push(d.f32_convert_i32_s):r.type==="f32"&&o==="f64"&&s.push(d.f32_demote_f64)}else{let o=L(e.right,n),i=r.type;o==="f64"||r.type==="f64"?i="f64":(o==="f32"||r.type==="f32")&&(i="f32"),s.push(d.local_get,...M(r.index)),i==="f64"&&r.type==="i32"?s.push(d.f64_convert_i32_s):i==="f64"&&r.type==="f32"?s.push(d.f64_promote_f32):i==="f32"&&r.type==="i32"&&s.push(d.f32_convert_i32_s),s.push(...D(e.right,n)),i==="f64"&&o==="i32"?s.push(d.f64_convert_i32_s):i==="f64"&&o==="f32"?s.push(d.f64_promote_f32):i==="f32"&&o==="i32"&&s.push(d.f32_convert_i32_s);let a=e.operator.slice(0,-1),l={"+":{i32:d.i32_add,f32:d.f32_add,f64:d.f64_add},"-":{i32:d.i32_sub,f32:d.f32_sub,f64:d.f64_sub},"*":{i32:d.i32_mul,f32:d.f32_mul,f64:d.f64_mul},"/":{i32:d.i32_div_s,f32:d.f32_div,f64:d.f64_div}}[a]?.[i];if(!l)return n.errors.push(`Unsupported compound assignment: ${e.operator}`),[];s.push(l),r.type==="i32"&&i==="f64"?s.push(d.i32_trunc_f64_s):r.type==="i32"&&i==="f32"?s.push(d.i32_trunc_f32_s):r.type==="f32"&&i==="f64"&&s.push(d.f32_demote_f64)}return s.push(d.local_tee,...M(r.index)),s}function Hi(e,n){if(e.argument.type!=="Identifier")return n.errors.push("Update expression argument must be identifier"),[];let t=e.argument.name,r=Re(n,t);if(!r)return n.errors.push(`Unknown variable: ${t}`),[];let s=[],o=r.type==="i32";return e.prefix?(s.push(d.local_get,...M(r.index)),o?(s.push(d.i32_const,1),s.push(e.operator==="++"?d.i32_add:d.i32_sub)):(s.push(d.f64_const,...ne(1)),s.push(e.operator==="++"?d.f64_add:d.f64_sub)),s.push(d.local_tee,...M(r.index))):(s.push(d.local_get,...M(r.index)),s.push(d.local_get,...M(r.index)),o?(s.push(d.i32_const,1),s.push(e.operator==="++"?d.i32_add:d.i32_sub)):(s.push(d.f64_const,...ne(1)),s.push(e.operator==="++"?d.f64_add:d.f64_sub)),s.push(d.local_set,...M(r.index))),s}function Yi(e,n){if(e.object.type!=="Identifier")return n.errors.push("Array access requires identifier"),[];let t=e.object.name,r=n.params.find(l=>l.name===t);if(!r?.isArray||!r.arrayType)return n.errors.push(`${t} is not a typed array parameter`),[];let s=At[r.arrayType];if(!s)return n.errors.push(`Unknown array type: ${r.arrayType}`),[];n.needsMemory=!0;let o=[],i=Re(n,t);if(!i)return n.errors.push(`Unknown array: ${t}`),[];if(o.push(d.local_get,...M(i.index)),!e.computed||!e.property)return n.errors.push("Array access requires computed index"),[];let a=D(e.property,n),c=L(e.property,n);return o.push(...a),c==="f64"&&o.push(d.i32_trunc_f64_s),s.bytesPerElement>1&&(o.push(d.i32_const,...ot(s.bytesPerElement)),o.push(d.i32_mul)),o.push(d.i32_add),o.push(s.loadOp,0,0),o}function Xi(e,n,t,r){if(e.object.type!=="Identifier")return r.errors.push("Array store requires identifier"),[];let s=e.object.name,o=r.params.find(y=>y.name===s);if(!o?.isArray||!o.arrayType)return r.errors.push(`${s} is not a typed array parameter`),[];let i=At[o.arrayType];if(!i)return r.errors.push(`Unknown array type: ${o.arrayType}`),[];r.needsMemory=!0;let a=[],c=Re(r,s);if(!c)return[];if(!e.computed||!e.property)return r.errors.push("Array store requires computed index"),[];let l=D(e.property,r),f=L(e.property,r),p=()=>{let y=[];return y.push(d.local_get,...M(c.index)),y.push(...l),f==="f64"&&y.push(d.i32_trunc_f64_s),i.bytesPerElement>1&&(y.push(d.i32_const,...ot(i.bytesPerElement)),y.push(d.i32_mul)),y.push(d.i32_add),y};if(t==="=")a.push(...D(n,r));else{let y=vt(r,`__addr_${r.nextLocalIndex}`,"i32");a.push(...p()),a.push(d.local_tee,...M(y)),a.push(i.loadOp,0,0),a.push(...D(n,r));let g=L(n,r);i.elementType==="f32"&&g==="f64"?a.push(d.f32_demote_f64):i.elementType==="f64"&&g==="f32"?a.push(d.f64_promote_f32):i.elementType==="f32"&&g==="i32"?a.push(d.f32_convert_i32_s):i.elementType==="f64"&&g==="i32"?a.push(d.f64_convert_i32_s):i.elementType==="i32"&&g==="f64"?a.push(d.i32_trunc_f64_s):i.elementType==="i32"&&g==="f32"&&a.push(d.i32_trunc_f32_s);let x=t.slice(0,-1),E={"+":i.elementType==="i32"?d.i32_add:i.elementType==="f32"?d.f32_add:d.f64_add,"-":i.elementType==="i32"?d.i32_sub:i.elementType==="f32"?d.f32_sub:d.f64_sub,"*":i.elementType==="i32"?d.i32_mul:i.elementType==="f32"?d.f32_mul:d.f64_mul};a.push(E[x]??d.f64_add);let S=vt(r,`__val_${r.nextLocalIndex}`,i.elementType);return a.push(d.local_set,...M(S)),a.push(d.local_get,...M(y)),a.push(d.local_get,...M(S)),a.push(i.storeOp,0,0),a.push(d.local_get,...M(S)),a}let u=L(n,r);i.elementType==="f32"&&u==="f64"?a.push(d.f32_demote_f64):i.elementType==="f64"&&u==="f32"?a.push(d.f64_promote_f32):i.elementType==="i32"&&u==="f64"&&a.push(d.i32_trunc_f64_s);let m=vt(r,`__tmp_${r.nextLocalIndex}`,i.elementType);return a.push(d.local_set,...M(m)),a.push(d.local_get,...M(c.index)),a.push(...l),f==="f64"&&a.push(d.i32_trunc_f64_s),i.bytesPerElement>1&&(a.push(d.i32_const,...ot(i.bytesPerElement)),a.push(d.i32_mul)),a.push(d.i32_add),a.push(d.local_get,...M(m)),a.push(i.storeOp,0,0),a.push(d.local_get,...M(m)),a}function Qi(e,n){if(e.callee.type==="MemberExpression"){let t=e.callee;if(t.object.type==="Identifier"&&t.object.name==="Math"&&t.property.type==="Identifier"){let r=t.property.name;return ro(r,e.arguments,n)}}if(e.callee.type==="Identifier"){let t=e.callee.name;if(t.startsWith("f32x4_")||t.startsWith("v128_"))return no(t,e.arguments,n);let r=n.moduleFunctions.get(t);if(r)return eo(r,t,e.arguments,n)}return n.errors.push(`Unsupported function call: ${e.callee.type}`),[d.f64_const,...ne(0)]}function eo(e,n,t,r){if(t.length!==e.params.length)return r.errors.push(`wasm function ${n} expects ${e.params.length} arguments, got ${t.length}`),[d.f64_const,...ne(0)];let s=[];for(let o=0;o<t.length;o++){let i=t[o],a=e.params[o].type,c=L(i,r);if(s.push(...D(i,r)),c!==a){let l=to(c,a);l===void 0?r.errors.push(`wasm function ${n} param ${o} expects ${a}, got ${c} (no conversion available)`):l!==null&&s.push(l)}}return s.push(d.call,...M(e.index)),e.hasReturn||s.push(d.i32_const,0),s}function to(e,n){if(e===n)return null;if(!(e==="v128"||n==="v128")&&!(e==="i64"||n==="i64"))switch(`${e}->${n}`){case"f64->i32":return d.i32_trunc_f64_s;case"f32->i32":return d.i32_trunc_f32_s;case"i32->f64":return d.f64_convert_i32_s;case"i32->f32":return d.f32_convert_i32_s;case"f32->f64":return d.f64_promote_f32;case"f64->f32":return d.f32_demote_f64;default:return}}function no(e,n,t){t.needsMemory=!0;let r=[];switch(e){case"v128_load":case"f32x4_load":{r.push(...D(n[0],t)),L(n[0],t)==="f64"&&r.push(d.i32_trunc_f64_s),r.push(...D(n[1],t));let o=L(n[1],t);return o==="f64"?r.push(d.i32_trunc_f64_s):o==="f32"&&r.push(d.i32_trunc_f32_s),r.push(d.i32_add),r.push(...es(H.v128_load,2,0)),r}case"v128_store":case"f32x4_store":{r.push(...D(n[0],t)),L(n[0],t)==="f64"&&r.push(d.i32_trunc_f64_s),r.push(...D(n[1],t));let o=L(n[1],t);return o==="f64"?r.push(d.i32_trunc_f64_s):o==="f32"&&r.push(d.i32_trunc_f32_s),r.push(d.i32_add),r.push(...D(n[2],t)),r.push(...es(H.v128_store,2,0)),r.push(d.i32_const,0),r}case"f32x4_splat":{r.push(...D(n[0],t));let s=L(n[0],t);return s==="i32"?r.push(d.f32_convert_i32_s):s==="f64"&&r.push(d.f32_demote_f64),r.push(...An(H.f32x4_splat)),r}case"f32x4_extract_lane":{r.push(...D(n[0],t));let s=n[1].value;return!Number.isInteger(s)||s<0||s>3?(t.errors.push(`f32x4_extract_lane: lane must be 0-3, got ${s}`),[d.f32_const,...Pn(0)]):(r.push(it,...M(H.f32x4_extract_lane),s),r)}case"f32x4_replace_lane":{r.push(...D(n[0],t));let s=n[1].value;if(!Number.isInteger(s)||s<0||s>3)return t.errors.push(`f32x4_replace_lane: lane must be 0-3, got ${s}`),[d.f32_const,...Pn(0)];r.push(...D(n[2],t));let o=L(n[2],t);return o==="i32"?r.push(d.f32_convert_i32_s):o==="f64"&&r.push(d.f32_demote_f64),r.push(it,...M(H.f32x4_replace_lane),s),r}case"f32x4_add":case"f32x4_sub":case"f32x4_mul":case"f32x4_div":{r.push(...D(n[0],t)),r.push(...D(n[1],t));let s={f32x4_add:H.f32x4_add,f32x4_sub:H.f32x4_sub,f32x4_mul:H.f32x4_mul,f32x4_div:H.f32x4_div};return r.push(...An(s[e])),r}case"f32x4_neg":case"f32x4_sqrt":{r.push(...D(n[0],t));let s={f32x4_neg:H.f32x4_neg,f32x4_sqrt:H.f32x4_sqrt};return r.push(...An(s[e])),r}default:return t.errors.push(`Unknown SIMD intrinsic: ${e}`),[d.f64_const,...ne(0)]}}function ro(e,n,t){let r=[];for(let a of n){r.push(...D(a,t));let c=L(a,t);c==="i32"?r.push(d.f64_convert_i32_s):c==="f32"&&r.push(d.f64_promote_f32)}let o={abs:d.f64_abs,ceil:d.f64_ceil,floor:d.f64_floor,trunc:d.f64_trunc,sqrt:d.f64_sqrt,min:d.f64_min,max:d.f64_max}[e];return o!==void 0?(r.push(o),r):["sin","cos","tan","asin","acos","atan","atan2","exp","log","pow"].includes(e)?(t.needsMathImports.add(e),t.errors.push(`Math.${e} requires JS import (not yet implemented)`),[d.f64_const,...ne(0)]):(t.errors.push(`Unknown Math method: ${e}`),[d.f64_const,...ne(0)])}function ns(e){let n=e.split(":").map(o=>o.trim()),t=n[0];if(n.length===1)return{name:t,type:"f64"};let r=n[1];return At[r]?{name:t,type:"i32",isArray:!0,arrayType:r}:{name:t,type:{i32:"i32",i64:"i64",f32:"f32",f64:"f64",number:"f64",int:"i32"}[r]??"f64"}}function so(e,n){let t=e.map(s=>ae[s.type]),r=n?[1,ae.f64]:[0];return[96,...M(e.length),...t,...r]}function io(e,n){let t=[];if(n.length>0){let o=n[0],i=1;for(let a=1;a<n.length;a++)n[a]===o?i++:(t.push([...M(i),ae[o]]),o=n[a],i=1);t.push([...M(i),ae[o]])}let s=[...[...M(t.length),...t.flat()],...e,d.end];return[...M(s.length),...s]}function oo(){return st(rt.import,[1,...Rn("env"),...Rn("memory"),2,0,1])}function ao(e,n){if(e.length!==n.length)throw new Error("functions and exportNames length mismatch");let t=[0,97,115,109,1,0,0,0],r=e.map(u=>so(u.params,u.hasReturn)),s=st(rt.type,[...M(r.length),...r.flat()]),i=e.some(u=>u.needsMemory)?oo():[],a=st(rt.function,[...M(e.length),...e.map((u,m)=>M(m)).flat()]),c=st(rt.export,[...M(e.length),...n.map((u,m)=>[...Rn(u),0,...M(m)]).flat()]),l=e.map(u=>io(u.bodyCode,u.localTypes)),f=st(rt.code,[...M(l.length),...l.flat()]),p=[...t,...s];return i.length>0&&p.push(...i),p.push(...a,...c,...f),p}function co(e,n=new Map){try{let t=e.captures.map(ns),r;try{let c=`function __wasm__(${t.map(l=>l.name).join(", ")}) { ${e.body} }`;r=ts.parse(c,{ecmaVersion:2022})}catch(c){return{success:!1,warnings:[],error:`Parse error: ${c.message}`}}let o=r.body[0].body.body,i=Ji(t,n),a=[];for(let c of o)a.push(...qe(c,i));return i.errors.length>0?{success:!1,warnings:i.warnings,error:i.errors.join("; ")}:{success:!0,fn:{params:t,bodyCode:a,localTypes:i.localTypes,needsMemory:i.needsMemory,hasReturn:i.hasReturn},wat:Li(a,t,i.localTypes),warnings:i.warnings}}catch(t){return{success:!1,warnings:[],error:t.message}}}function rs(e){let n=new Map,t=[];for(let c=0;c<e.length;c++){let l=e[c],f=l.captures.map(ns),p=l.returnType!==void 0;t.push({params:f,hasReturn:p}),l.name&&n.set(l.name,{index:c,params:f,hasReturn:p})}let r=[],s=[],o=[],i=[];for(let c=0;c<e.length;c++){let l=e[c],f=co(l,n);if(i.push(...f.warnings),!f.success||!f.fn){r.push({id:l.id,success:!1,error:f.error}),s.push(lo(t[c])),o.push({id:l.id,exportName:`compute_${c}`,captures:l.captures,needsMemory:!1,wat:`(failed: ${f.error??"unknown error"})`});continue}s.push(f.fn),o.push({id:l.id,exportName:`compute_${c}`,captures:l.captures,needsMemory:f.fn.needsMemory,wat:f.wat??""}),r.push({id:l.id,success:!0,exportIndex:c})}if(s.length===0)return{bytes:new Uint8Array,results:r,exports:[],needsMemory:!1,warnings:i};let a=ao(s,o.map(c=>c.exportName));return{bytes:new Uint8Array(a),results:r,exports:o,needsMemory:o.some(c=>c.needsMemory),warnings:i}}function lo(e){let n=e.hasReturn?[d.f64_const,...ne(0)]:[];return{params:e.params,bodyCode:n,localTypes:[],needsMemory:!1,hasReturn:e.hasReturn}}function ss(e){let n=rs(e),t=new Map(n.exports.map(f=>[f.id,f])),r=n.results.map(f=>{if(!f.success)return{id:f.id,success:!1,error:f.error};let p=t.get(f.id);return{id:f.id,success:!0,byteLength:n.bytes.length,_exportName:p.exportName}});if(n.exports.length===0)return{code:"",results:r};let s=n.exports.map(f=>{let p=f.wat.split(`
|
|
309
|
+
`;try{let b=new Function("__deepEqual","__format","__typeMatches",h),{testResults:$,sigTestResults:_}=b(Rn,nt,Mn);for(let E of $){let k=e[E.idx],T=!E.passed&&(E.isRef||c&&E.error&&/is not defined$/.test(E.error));i.push({description:k.description,passed:E.passed,inconclusive:T||void 0,error:E.error,line:k.line})}for(let E of _){let k=g[E.idx],T=!E.passed&&(E.threw||c&&E.error&&/is not defined$/.test(E.error)),P=k.className?`${k.className}.${k.funcName}`:k.funcName;i.push({description:`${P} signature example`,passed:E.passed,inconclusive:T||void 0,error:E.error,isSignatureTest:!0,line:k.line})}}catch(b){let $=`Module could not be executed for testing: ${b.message}`;for(let _ of e)i.push({description:_.description,passed:!1,inconclusive:!0,error:$});for(let _ of g){let E=_.className?`${_.className}.${_.funcName}`:_.funcName;i.push({description:`${E} signature example`,passed:!1,inconclusive:!0,error:$,isSignatureTest:!0})}}for(let b of y){let $=b.className?`${b.className}.${b.funcName}`:b.funcName;i.push({description:`${$} signature example`,passed:!0,isSignatureTest:!0,line:b.line})}return i}function jt(e){let n="",t=0,r=!1;for(let o=0;o<e.length;o++){let i=e[o];if(i==="{"||i==="["||i==="("){if(i==="{"&&t===0&&r)break;t++,n+=i,r=!0}else i==="}"||i==="]"||i===")"?(t--,n+=i):/\s/.test(i)?n+=i:(n+=i,r=!0)}return n.trim()||null}function Pn(e){if(!e.trim())return[];let n=[],t=Wi(e);for(let r of t){let s=r.trim(),o=s.match(/^\.\.\.(\w+)\s*[:=]\s*(\[.+\])$/);if(o){try{let a=new Function(`return ${o[2]}`)();if(Array.isArray(a))for(let c of a)n.push(JSON.stringify(c))}catch{}continue}if(s.startsWith("..."))continue;let i=s.match(/(?:\(\s*[?!]\s*)?(\w+)\s*[:=]\s*(.+?)(?:\))?$/);if(i)n.push(i[2].trim());else return[]}return n}function Wi(e){let n=[],t="",r=0;for(let s of e){if(s==="("||s==="["||s==="{")r++;else if(s===")"||s==="]"||s==="}")r--;else if(s===","&&r===0){n.push(t.trim()),t="";continue}t+=s}return t.trim()&&n.push(t.trim()),n}import*as rs from"acorn";var ae={i32:127,i64:126,f32:125,f64:124,v128:123,funcref:112,externref:111,void:64},rt={custom:0,type:1,import:2,function:3,table:4,memory:5,global:6,export:7,start:8,element:9,code:10,data:11},d={unreachable:0,nop:1,block:2,loop:3,if:4,else:5,end:11,br:12,br_if:13,br_table:14,return:15,call:16,call_indirect:17,drop:26,select:27,local_get:32,local_set:33,local_tee:34,global_get:35,global_set:36,i32_load:40,i64_load:41,f32_load:42,f64_load:43,i32_load8_s:44,i32_load8_u:45,i32_load16_s:46,i32_load16_u:47,i32_store:54,i64_store:55,f32_store:56,f64_store:57,i32_store8:58,i32_store16:59,memory_size:63,memory_grow:64,i32_const:65,i64_const:66,f32_const:67,f64_const:68,i32_eqz:69,i32_eq:70,i32_ne:71,i32_lt_s:72,i32_lt_u:73,i32_gt_s:74,i32_gt_u:75,i32_le_s:76,i32_le_u:77,i32_ge_s:78,i32_ge_u:79,i64_eqz:80,i64_eq:81,i64_ne:82,i64_lt_s:83,i64_lt_u:84,i64_gt_s:85,i64_gt_u:86,i64_le_s:87,i64_le_u:88,i64_ge_s:89,i64_ge_u:90,f32_eq:91,f32_ne:92,f32_lt:93,f32_gt:94,f32_le:95,f32_ge:96,f64_eq:97,f64_ne:98,f64_lt:99,f64_gt:100,f64_le:101,f64_ge:102,i32_clz:103,i32_ctz:104,i32_popcnt:105,i32_add:106,i32_sub:107,i32_mul:108,i32_div_s:109,i32_div_u:110,i32_rem_s:111,i32_rem_u:112,i32_and:113,i32_or:114,i32_xor:115,i32_shl:116,i32_shr_s:117,i32_shr_u:118,i32_rotl:119,i32_rotr:120,i64_add:124,i64_sub:125,i64_mul:126,i64_div_s:127,f32_abs:139,f32_neg:140,f32_ceil:141,f32_floor:142,f32_trunc:143,f32_nearest:144,f32_sqrt:145,f32_add:146,f32_sub:147,f32_mul:148,f32_div:149,f32_min:150,f32_max:151,f32_copysign:152,f64_abs:153,f64_neg:154,f64_ceil:155,f64_floor:156,f64_trunc:157,f64_nearest:158,f64_sqrt:159,f64_add:160,f64_sub:161,f64_mul:162,f64_div:163,f64_min:164,f64_max:165,f64_copysign:166,i32_wrap_i64:167,i32_trunc_f32_s:168,i32_trunc_f32_u:169,i32_trunc_f64_s:170,i32_trunc_f64_u:171,i64_extend_i32_s:172,i64_extend_i32_u:173,f32_convert_i32_s:178,f32_convert_i32_u:179,f32_convert_i64_s:180,f32_demote_f64:182,f64_convert_i32_s:183,f64_convert_i32_u:184,f64_convert_i64_s:185,f64_promote_f32:187,i32_reinterpret_f32:188,f32_reinterpret_i32:190,f64_reinterpret_i64:191,i32_extend8_s:192,i32_extend16_s:193},Ui=Object.fromEntries(Object.entries(d).map(([e,n])=>[n,e.replace(/_/g,".")])),it=253,L={v128_load:0,v128_store:11,v128_const:12,f32x4_splat:19,f32x4_extract_lane:31,f32x4_replace_lane:32,f32x4_neg:225,f32x4_sqrt:227,f32x4_add:228,f32x4_sub:229,f32x4_mul:230,f32x4_div:231,f32x4_min:232,f32x4_max:233,f32x4_eq:65,f32x4_ne:66,f32x4_lt:67,f32x4_gt:68,f32x4_le:69,f32x4_ge:70,v128_bitselect:82},Li=Object.fromEntries(Object.entries(L).map(([e,n])=>[n,e.replace(/_/g,".")]));function vt(e){return[it,...M(e)]}function ns(e,n,t){return[it,...M(e),...M(n),...M(t)]}function M(e){let n=[];do{let t=e&127;e>>>=7,e!==0&&(t|=128),n.push(t)}while(e!==0);return n}function ot(e){let n=[],t=!0;for(;t;){let r=e&127;e>>=7,e===0&&(r&64)===0||e===-1&&(r&64)!==0?t=!1:r|=128,n.push(r)}return n}function Cn(e){let n=new ArrayBuffer(4);return new Float32Array(n)[0]=e,[...new Uint8Array(n)]}function te(e){let n=new ArrayBuffer(8);return new Float64Array(n)[0]=e,[...new Uint8Array(n)]}function Nn(e){let n=new TextEncoder().encode(e);return[...M(n.length),...n]}function st(e,n){return[e,...M(n.length),...n]}function be(e,n){let t=0,r=0,s=n;for(;s<e.length;){let o=e[s];if(t|=(o&127)<<r,s++,(o&128)===0)break;r+=7}return[t,s-n]}function Ji(e,n){let t=new ArrayBuffer(8),r=new Uint8Array(t);for(let s=0;s<8;s++)r[s]=e[n+s];return new Float64Array(t)[0]}function Vi(e,n,t){let r=[],s=1,o=()=>" ".repeat(s),i=n.map((l,f)=>`(param $${l.name} ${l.type})`).join(" "),a=t.map((l,f)=>`(local $L${n.length+f} ${l})`).join(" ");r.push(`(func (export "compute") ${i} (result f64)`),a&&r.push(` ${a}`);let c=0;for(;c<e.length;){let l=e[c],f=Ui[l]||`unknown(0x${l.toString(16)})`;if(c++,l===d.local_get||l===d.local_set||l===d.local_tee){let[p,u]=be(e,c);c+=u;let m=p<n.length?`$${n[p].name}`:`$L${p}`;r.push(`${o()}${f} ${m}`)}else if(l===d.br||l===d.br_if){let[p,u]=be(e,c);c+=u,r.push(`${o()}${f} ${p}`)}else if(l===d.i32_const){let[p,u]=be(e,c);c+=u,r.push(`${o()}i32.const ${p}`)}else if(l===d.f32_const){let p=new ArrayBuffer(4),u=new Uint8Array(p);for(let g=0;g<4;g++)u[g]=e[c+g];let m=new Float32Array(p)[0];c+=4,r.push(`${o()}f32.const ${m}`)}else if(l===d.f64_const){let p=Ji(e,c);c+=8,r.push(`${o()}f64.const ${p}`)}else if(l===d.block||l===d.loop){let p=e[c];c++,r.push(`${o()}${f}${p===ae.void?"":` (result ${p===ae.f64?"f64":"i32"})`}`),s++}else if(l===d.if){let p=e[c];c++,r.push(`${o()}if${p===ae.void?"":` (result ${p===ae.f64?"f64":"i32"})`}`),s++}else if(l===d.else)s--,r.push(`${o()}else`),s++;else if(l===d.end)s=Math.max(1,s-1),r.push(`${o()}end`);else if(l===d.f64_load||l===d.f64_store||l===d.f32_load||l===d.f32_store||l===d.i32_load||l===d.i32_store){let[p,u]=be(e,c);c+=u;let[m,g]=be(e,c);c+=g,r.push(`${o()}${f}${m?` offset=${m}`:""}`)}else if(l===it){let[p,u]=be(e,c);c+=u;let m=Li[p]||`simd.unknown(0x${p.toString(16)})`;if(p===L.v128_load||p===L.v128_store){let[g,y]=be(e,c);c+=y;let[x,S]=be(e,c);c+=S,r.push(`${o()}${m}${x?` offset=${x}`:""}`)}else if(p===L.v128_const){let g=e.slice(c,c+16);c+=16,r.push(`${o()}v128.const ${g.map(y=>"0x"+y.toString(16).padStart(2,"0")).join(" ")}`)}else if(p===L.f32x4_extract_lane||p===L.f32x4_replace_lane){let g=e[c];c++,r.push(`${o()}${m} ${g}`)}else r.push(`${o()}${m}`)}else r.push(`${o()}${f}`)}return r.push(")"),r.join(`
|
|
310
|
+
`)}var Pt={Int8Array:{elementType:"i32",bytesPerElement:1,loadOp:d.i32_load8_s,storeOp:d.i32_store8},Uint8Array:{elementType:"i32",bytesPerElement:1,loadOp:d.i32_load8_u,storeOp:d.i32_store8},Uint8ClampedArray:{elementType:"i32",bytesPerElement:1,loadOp:d.i32_load8_u,storeOp:d.i32_store8},Int16Array:{elementType:"i32",bytesPerElement:2,loadOp:d.i32_load16_s,storeOp:d.i32_store16},Uint16Array:{elementType:"i32",bytesPerElement:2,loadOp:d.i32_load16_u,storeOp:d.i32_store16},Int32Array:{elementType:"i32",bytesPerElement:4,loadOp:d.i32_load,storeOp:d.i32_store},Uint32Array:{elementType:"i32",bytesPerElement:4,loadOp:d.i32_load,storeOp:d.i32_store},Float32Array:{elementType:"f32",bytesPerElement:4,loadOp:d.f32_load,storeOp:d.f32_store},Float64Array:{elementType:"f64",bytesPerElement:8,loadOp:d.f64_load,storeOp:d.f64_store}};function zi(e,n=new Map){let t={params:e,locals:new Map,nextLocalIndex:e.length,localTypes:[],warnings:[],errors:[],loopDepth:0,needsMathImports:new Set,needsMemory:!1,hasReturn:!1,wat:[],watIndent:1,moduleFunctions:n};return e.forEach((r,s)=>{t.locals.set(r.name,{index:s,type:r.type})}),t}function At(e,n,t){if(e.locals.has(n))return e.errors.push(`Duplicate local declaration: ${n}`),e.locals.get(n).index;let r=e.nextLocalIndex++;return e.locals.set(n,{index:r,type:t}),e.localTypes.push(t),r}function Re(e,n){return e.locals.get(n)}function qe(e,n){switch(e.type){case"ExpressionStatement":{let t=e.expression;return[...O(t,n),d.drop]}case"ReturnStatement":{let t=e;if(n.hasReturn=!0,!t.argument)return[d.return];let r=O(t.argument,n),s=J(t.argument,n);return s==="i32"?r.push(d.f64_convert_i32_s):s==="f32"&&r.push(d.f64_promote_f32),r.push(d.return),r}case"VariableDeclaration":{let t=e,r=[];for(let s of t.declarations){if(s.id.type!=="Identifier"){n.errors.push("Destructuring not supported in WASM blocks");continue}let o=s.id.name,i="f64";s.init&&(i=J(s.init,n));let a=At(n,o,i);s.init&&(r.push(...O(s.init,n)),r.push(d.local_set,...M(a)))}return r}case"ForStatement":return Gi(e,n);case"IfStatement":return Zi(e,n);case"BlockStatement":{let t=e,r=[];for(let s of t.body)r.push(...qe(s,n));return r}default:return n.errors.push(`Unsupported statement type: ${e.type}`),[]}}function Gi(e,n){let t=[];return e.init&&(e.init.type==="VariableDeclaration"?t.push(...qe(e.init,n)):t.push(...O(e.init,n))),t.push(d.block,ae.void),t.push(d.loop,ae.void),e.test&&(t.push(...O(e.test,n)),t.push(d.i32_eqz),t.push(d.br_if,1)),n.loopDepth++,e.body&&t.push(...qe(e.body,n)),n.loopDepth--,e.update&&(t.push(...O(e.update,n)),t.push(d.drop)),t.push(d.br,0),t.push(d.end),t.push(d.end),t}function Zi(e,n){let t=[];return t.push(...O(e.test,n)),t.push(d.if,ae.void),t.push(...qe(e.consequent,n)),e.alternate&&(t.push(d.else),t.push(...qe(e.alternate,n))),t.push(d.end),t}function J(e,n){switch(e.type){case"Literal":{let t=e;return typeof t.value=="number"?t.raw&&(t.raw.includes(".")||t.raw.includes("e"))?"f64":Number.isInteger(t.value)&&t.value>=-2147483648&&t.value<=2147483647?"i32":"f64":"f64"}case"Identifier":return Re(n,e.name)?.type??"f64";case"BinaryExpression":case"AssignmentExpression":{let t=e;if(["<",">","<=",">=","==","!=","===","!=="].includes(t.operator)||["|","&","^","<<",">>",">>>"].includes(t.operator))return"i32";let r=J(t.left,n),s=J(t.right,n);return r==="v128"||s==="v128"?"v128":r==="f64"||s==="f64"?"f64":r==="f32"||s==="f32"?"f32":"i32"}case"UnaryExpression":{let t=e;return t.operator==="!"?"i32":J(t.argument,n)}case"MemberExpression":{let t=e;if(t.object.type==="Identifier"&&Re(n,t.object.name)){let s=n.params.find(o=>o.name===t.object.name);if(s?.arrayType){let o=Pt[s.arrayType];if(o)return o.elementType}}return"f64"}case"CallExpression":{let t=e;if(t.callee.type==="MemberExpression"){let r=t.callee;if(r.object.type==="Identifier"&&r.object.name==="Math")return"f64"}if(t.callee.type==="Identifier"){let r=t.callee.name;if(r==="f32x4_extract_lane")return"f32";if(r.startsWith("f32x4_")||r==="v128_load")return"v128";let s=n.moduleFunctions.get(r);if(s)return s.hasReturn?"f64":"i32"}return"f64"}default:return"f64"}}function O(e,n){switch(e.type){case"Literal":{let t=e;if(typeof t.value=="number"){let r=J(e,n);return r==="i32"?[d.i32_const,...ot(t.value|0)]:r==="f32"?[d.f32_const,...Cn(t.value)]:[d.f64_const,...te(t.value)]}return n.errors.push(`Unsupported literal type: ${typeof t.value}`),[d.f64_const,...te(0)]}case"Identifier":{let t=e.name,r=Re(n,t);return r?[d.local_get,...M(r.index)]:(n.errors.push(`Unknown identifier: ${t}`),[d.f64_const,...te(0)])}case"BinaryExpression":return Ki(e,n);case"UnaryExpression":return Hi(e,n);case"AssignmentExpression":return Yi(e,n);case"UpdateExpression":return Xi(e,n);case"MemberExpression":return Qi(e,n);case"CallExpression":return to(e,n);case"SequenceExpression":{let t=e,r=[];for(let s=0;s<t.expressions.length;s++)r.push(...O(t.expressions[s],n)),s<t.expressions.length-1&&r.push(d.drop);return r}default:return n.errors.push(`Unsupported expression type: ${e.type}`),[d.f64_const,...te(0)]}}function Ki(e,n){let t=O(e.left,n),r=O(e.right,n),s=J(e,n),o=J(e.left,n),i=J(e.right,n),a=["<",">","<=",">=","==","===","!=","!=="].includes(e.operator),c;o==="f64"||i==="f64"?c="f64":o==="f32"||i==="f32"?c="f32":c="i32",!a&&s==="f64"&&(c="f64");let l=t,f=r;c==="f64"?(o==="i32"?l=[...t,d.f64_convert_i32_s]:o==="f32"&&(l=[...t,d.f64_promote_f32]),i==="i32"?f=[...r,d.f64_convert_i32_s]:i==="f32"&&(f=[...r,d.f64_promote_f32])):c==="f32"&&(o==="i32"&&(l=[...t,d.f32_convert_i32_s]),i==="i32"&&(f=[...r,d.f32_convert_i32_s]));let u={"+":{i32:d.i32_add,f32:d.f32_add,f64:d.f64_add},"-":{i32:d.i32_sub,f32:d.f32_sub,f64:d.f64_sub},"*":{i32:d.i32_mul,f32:d.f32_mul,f64:d.f64_mul},"/":{i32:d.i32_div_s,f32:d.f32_div,f64:d.f64_div},"%":{i32:d.i32_rem_s},"<":{i32:d.i32_lt_s,f32:d.f32_lt,f64:d.f64_lt},">":{i32:d.i32_gt_s,f32:d.f32_gt,f64:d.f64_gt},"<=":{i32:d.i32_le_s,f32:d.f32_le,f64:d.f64_le},">=":{i32:d.i32_ge_s,f32:d.f32_ge,f64:d.f64_ge},"==":{i32:d.i32_eq,f32:d.f32_eq,f64:d.f64_eq},"===":{i32:d.i32_eq,f32:d.f32_eq,f64:d.f64_eq},"!=":{i32:d.i32_ne,f32:d.f32_ne,f64:d.f64_ne},"!==":{i32:d.i32_ne,f32:d.f32_ne,f64:d.f64_ne},"|":{i32:d.i32_or},"&":{i32:d.i32_and},"^":{i32:d.i32_xor},"<<":{i32:d.i32_shl},">>":{i32:d.i32_shr_s},">>>":{i32:d.i32_shr_u}}[e.operator];if(!u)return n.errors.push(`Unsupported operator: ${e.operator}`),[d.f64_const,...te(0)];let m=u[c]??u.f64??u.i32;if(m===void 0)return n.errors.push(`Operator ${e.operator} not supported for type ${c}`),[d.f64_const,...te(0)];if(e.operator==="/"&&c==="i32"){let g="integer division: '/' with two i32 operands truncates (result coerces to f64 only at the next operator). Add `+ 0.0` to an operand to force f64 division.";n.warnings.includes(g)||n.warnings.push(g)}return[...l,...f,m]}function Hi(e,n){let t=O(e.argument,n),r=J(e.argument,n);switch(e.operator){case"-":return r==="i32"?[d.i32_const,0,...t,d.i32_sub]:r==="f32"?[...t,d.f32_neg]:[...t,d.f64_neg];case"!":return[...t,d.i32_eqz];case"~":return[...t,d.i32_const,...ot(-1),d.i32_xor];default:return n.errors.push(`Unsupported unary operator: ${e.operator}`),t}}function Yi(e,n){if(e.left.type==="MemberExpression")return eo(e.left,e.right,e.operator,n);if(e.left.type!=="Identifier")return n.errors.push("Assignment target must be identifier or array element"),[];let t=e.left.name,r=Re(n,t);if(!r)return n.errors.push(`Unknown variable: ${t}`),[];let s=[];if(e.operator==="="){s.push(...O(e.right,n));let o=J(e.right,n);r.type==="f64"&&o==="i32"?s.push(d.f64_convert_i32_s):r.type==="f64"&&o==="f32"?s.push(d.f64_promote_f32):r.type==="i32"&&o==="f64"?s.push(d.i32_trunc_f64_s):r.type==="i32"&&o==="f32"?s.push(d.i32_trunc_f32_s):r.type==="f32"&&o==="i32"?s.push(d.f32_convert_i32_s):r.type==="f32"&&o==="f64"&&s.push(d.f32_demote_f64)}else{let o=J(e.right,n),i=r.type;o==="f64"||r.type==="f64"?i="f64":(o==="f32"||r.type==="f32")&&(i="f32"),s.push(d.local_get,...M(r.index)),i==="f64"&&r.type==="i32"?s.push(d.f64_convert_i32_s):i==="f64"&&r.type==="f32"?s.push(d.f64_promote_f32):i==="f32"&&r.type==="i32"&&s.push(d.f32_convert_i32_s),s.push(...O(e.right,n)),i==="f64"&&o==="i32"?s.push(d.f64_convert_i32_s):i==="f64"&&o==="f32"?s.push(d.f64_promote_f32):i==="f32"&&o==="i32"&&s.push(d.f32_convert_i32_s);let a=e.operator.slice(0,-1),l={"+":{i32:d.i32_add,f32:d.f32_add,f64:d.f64_add},"-":{i32:d.i32_sub,f32:d.f32_sub,f64:d.f64_sub},"*":{i32:d.i32_mul,f32:d.f32_mul,f64:d.f64_mul},"/":{i32:d.i32_div_s,f32:d.f32_div,f64:d.f64_div}}[a]?.[i];if(!l)return n.errors.push(`Unsupported compound assignment: ${e.operator}`),[];s.push(l),r.type==="i32"&&i==="f64"?s.push(d.i32_trunc_f64_s):r.type==="i32"&&i==="f32"?s.push(d.i32_trunc_f32_s):r.type==="f32"&&i==="f64"&&s.push(d.f32_demote_f64)}return s.push(d.local_tee,...M(r.index)),s}function Xi(e,n){if(e.argument.type!=="Identifier")return n.errors.push("Update expression argument must be identifier"),[];let t=e.argument.name,r=Re(n,t);if(!r)return n.errors.push(`Unknown variable: ${t}`),[];let s=[],o=r.type==="i32";return e.prefix?(s.push(d.local_get,...M(r.index)),o?(s.push(d.i32_const,1),s.push(e.operator==="++"?d.i32_add:d.i32_sub)):(s.push(d.f64_const,...te(1)),s.push(e.operator==="++"?d.f64_add:d.f64_sub)),s.push(d.local_tee,...M(r.index))):(s.push(d.local_get,...M(r.index)),s.push(d.local_get,...M(r.index)),o?(s.push(d.i32_const,1),s.push(e.operator==="++"?d.i32_add:d.i32_sub)):(s.push(d.f64_const,...te(1)),s.push(e.operator==="++"?d.f64_add:d.f64_sub)),s.push(d.local_set,...M(r.index))),s}function Qi(e,n){if(e.object.type!=="Identifier")return n.errors.push("Array access requires identifier"),[];let t=e.object.name,r=n.params.find(l=>l.name===t);if(!r?.isArray||!r.arrayType)return n.errors.push(`${t} is not a typed array parameter`),[];let s=Pt[r.arrayType];if(!s)return n.errors.push(`Unknown array type: ${r.arrayType}`),[];n.needsMemory=!0;let o=[],i=Re(n,t);if(!i)return n.errors.push(`Unknown array: ${t}`),[];if(o.push(d.local_get,...M(i.index)),!e.computed||!e.property)return n.errors.push("Array access requires computed index"),[];let a=O(e.property,n),c=J(e.property,n);return o.push(...a),c==="f64"&&o.push(d.i32_trunc_f64_s),s.bytesPerElement>1&&(o.push(d.i32_const,...ot(s.bytesPerElement)),o.push(d.i32_mul)),o.push(d.i32_add),o.push(s.loadOp,0,0),o}function eo(e,n,t,r){if(e.object.type!=="Identifier")return r.errors.push("Array store requires identifier"),[];let s=e.object.name,o=r.params.find(g=>g.name===s);if(!o?.isArray||!o.arrayType)return r.errors.push(`${s} is not a typed array parameter`),[];let i=Pt[o.arrayType];if(!i)return r.errors.push(`Unknown array type: ${o.arrayType}`),[];r.needsMemory=!0;let a=[],c=Re(r,s);if(!c)return[];if(!e.computed||!e.property)return r.errors.push("Array store requires computed index"),[];let l=O(e.property,r),f=J(e.property,r),p=()=>{let g=[];return g.push(d.local_get,...M(c.index)),g.push(...l),f==="f64"&&g.push(d.i32_trunc_f64_s),i.bytesPerElement>1&&(g.push(d.i32_const,...ot(i.bytesPerElement)),g.push(d.i32_mul)),g.push(d.i32_add),g};if(t==="=")a.push(...O(n,r));else{let g=At(r,`__addr_${r.nextLocalIndex}`,"i32");a.push(...p()),a.push(d.local_tee,...M(g)),a.push(i.loadOp,0,0),a.push(...O(n,r));let y=J(n,r);i.elementType==="f32"&&y==="f64"?a.push(d.f32_demote_f64):i.elementType==="f64"&&y==="f32"?a.push(d.f64_promote_f32):i.elementType==="f32"&&y==="i32"?a.push(d.f32_convert_i32_s):i.elementType==="f64"&&y==="i32"?a.push(d.f64_convert_i32_s):i.elementType==="i32"&&y==="f64"?a.push(d.i32_trunc_f64_s):i.elementType==="i32"&&y==="f32"&&a.push(d.i32_trunc_f32_s);let x=t.slice(0,-1),S={"+":i.elementType==="i32"?d.i32_add:i.elementType==="f32"?d.f32_add:d.f64_add,"-":i.elementType==="i32"?d.i32_sub:i.elementType==="f32"?d.f32_sub:d.f64_sub,"*":i.elementType==="i32"?d.i32_mul:i.elementType==="f32"?d.f32_mul:d.f64_mul};a.push(S[x]??d.f64_add);let w=At(r,`__val_${r.nextLocalIndex}`,i.elementType);return a.push(d.local_set,...M(w)),a.push(d.local_get,...M(g)),a.push(d.local_get,...M(w)),a.push(i.storeOp,0,0),a.push(d.local_get,...M(w)),a}let u=J(n,r);i.elementType==="f32"&&u==="f64"?a.push(d.f32_demote_f64):i.elementType==="f64"&&u==="f32"?a.push(d.f64_promote_f32):i.elementType==="i32"&&u==="f64"&&a.push(d.i32_trunc_f64_s);let m=At(r,`__tmp_${r.nextLocalIndex}`,i.elementType);return a.push(d.local_set,...M(m)),a.push(d.local_get,...M(c.index)),a.push(...l),f==="f64"&&a.push(d.i32_trunc_f64_s),i.bytesPerElement>1&&(a.push(d.i32_const,...ot(i.bytesPerElement)),a.push(d.i32_mul)),a.push(d.i32_add),a.push(d.local_get,...M(m)),a.push(i.storeOp,0,0),a.push(d.local_get,...M(m)),a}function to(e,n){if(e.callee.type==="MemberExpression"){let t=e.callee;if(t.object.type==="Identifier"&&t.object.name==="Math"&&t.property.type==="Identifier"){let r=t.property.name;return io(r,e.arguments,n)}}if(e.callee.type==="Identifier"){let t=e.callee.name;if(t.startsWith("f32x4_")||t.startsWith("v128_"))return so(t,e.arguments,n);let r=n.moduleFunctions.get(t);if(r)return no(r,t,e.arguments,n)}return n.errors.push(`Unsupported function call: ${e.callee.type}`),[d.f64_const,...te(0)]}function no(e,n,t,r){if(t.length!==e.params.length)return r.errors.push(`wasm function ${n} expects ${e.params.length} arguments, got ${t.length}`),[d.f64_const,...te(0)];let s=[];for(let o=0;o<t.length;o++){let i=t[o],a=e.params[o].type,c=J(i,r);if(s.push(...O(i,r)),c!==a){let l=ro(c,a);l===void 0?r.errors.push(`wasm function ${n} param ${o} expects ${a}, got ${c} (no conversion available)`):l!==null&&s.push(l)}}return s.push(d.call,...M(e.index)),e.hasReturn||s.push(d.i32_const,0),s}function ro(e,n){if(e===n)return null;if(!(e==="v128"||n==="v128")&&!(e==="i64"||n==="i64"))switch(`${e}->${n}`){case"f64->i32":return d.i32_trunc_f64_s;case"f32->i32":return d.i32_trunc_f32_s;case"i32->f64":return d.f64_convert_i32_s;case"i32->f32":return d.f32_convert_i32_s;case"f32->f64":return d.f64_promote_f32;case"f64->f32":return d.f32_demote_f64;default:return}}function so(e,n,t){t.needsMemory=!0;let r=[];switch(e){case"v128_load":case"f32x4_load":{r.push(...O(n[0],t)),J(n[0],t)==="f64"&&r.push(d.i32_trunc_f64_s),r.push(...O(n[1],t));let o=J(n[1],t);return o==="f64"?r.push(d.i32_trunc_f64_s):o==="f32"&&r.push(d.i32_trunc_f32_s),r.push(d.i32_add),r.push(...ns(L.v128_load,2,0)),r}case"v128_store":case"f32x4_store":{r.push(...O(n[0],t)),J(n[0],t)==="f64"&&r.push(d.i32_trunc_f64_s),r.push(...O(n[1],t));let o=J(n[1],t);return o==="f64"?r.push(d.i32_trunc_f64_s):o==="f32"&&r.push(d.i32_trunc_f32_s),r.push(d.i32_add),r.push(...O(n[2],t)),r.push(...ns(L.v128_store,2,0)),r.push(d.i32_const,0),r}case"f32x4_splat":{r.push(...O(n[0],t));let s=J(n[0],t);return s==="i32"?r.push(d.f32_convert_i32_s):s==="f64"&&r.push(d.f32_demote_f64),r.push(...vt(L.f32x4_splat)),r}case"f32x4_extract_lane":{r.push(...O(n[0],t));let s=n[1].value;return!Number.isInteger(s)||s<0||s>3?(t.errors.push(`f32x4_extract_lane: lane must be 0-3, got ${s}`),[d.f32_const,...Cn(0)]):(r.push(it,...M(L.f32x4_extract_lane),s),r)}case"f32x4_replace_lane":{r.push(...O(n[0],t));let s=n[1].value;if(!Number.isInteger(s)||s<0||s>3)return t.errors.push(`f32x4_replace_lane: lane must be 0-3, got ${s}`),[d.f32_const,...Cn(0)];r.push(...O(n[2],t));let o=J(n[2],t);return o==="i32"?r.push(d.f32_convert_i32_s):o==="f64"&&r.push(d.f32_demote_f64),r.push(it,...M(L.f32x4_replace_lane),s),r}case"f32x4_add":case"f32x4_sub":case"f32x4_mul":case"f32x4_div":case"f32x4_min":case"f32x4_max":case"f32x4_eq":case"f32x4_ne":case"f32x4_lt":case"f32x4_gt":case"f32x4_le":case"f32x4_ge":{r.push(...O(n[0],t)),r.push(...O(n[1],t));let s={f32x4_add:L.f32x4_add,f32x4_sub:L.f32x4_sub,f32x4_mul:L.f32x4_mul,f32x4_div:L.f32x4_div,f32x4_min:L.f32x4_min,f32x4_max:L.f32x4_max,f32x4_eq:L.f32x4_eq,f32x4_ne:L.f32x4_ne,f32x4_lt:L.f32x4_lt,f32x4_gt:L.f32x4_gt,f32x4_le:L.f32x4_le,f32x4_ge:L.f32x4_ge};return r.push(...vt(s[e])),r}case"f32x4_select":return n.length!==3?(t.errors.push(`f32x4_select expects (mask, a, b) \u2014 3 args, got ${n.length}`),[d.f64_const,...te(0)]):(r.push(...O(n[1],t)),r.push(...O(n[2],t)),r.push(...O(n[0],t)),r.push(...vt(L.v128_bitselect)),r);case"f32x4_neg":case"f32x4_sqrt":{r.push(...O(n[0],t));let s={f32x4_neg:L.f32x4_neg,f32x4_sqrt:L.f32x4_sqrt};return r.push(...vt(s[e])),r}default:return t.errors.push(`Unknown SIMD intrinsic: ${e}`),[d.f64_const,...te(0)]}}function io(e,n,t){let r=[];for(let a of n){r.push(...O(a,t));let c=J(a,t);c==="i32"?r.push(d.f64_convert_i32_s):c==="f32"&&r.push(d.f64_promote_f32)}let o={abs:d.f64_abs,ceil:d.f64_ceil,floor:d.f64_floor,trunc:d.f64_trunc,sqrt:d.f64_sqrt,min:d.f64_min,max:d.f64_max}[e];return o!==void 0?(r.push(o),r):["sin","cos","tan","asin","acos","atan","atan2","exp","log","pow"].includes(e)?(t.needsMathImports.add(e),t.errors.push(`Math.${e} requires JS import (not yet implemented)`),[d.f64_const,...te(0)]):(t.errors.push(`Unknown Math method: ${e}`),[d.f64_const,...te(0)])}function ss(e){let n=e.split(":").map(o=>o.trim()),t=n[0];if(n.length===1)return{name:t,type:"f64"};let r=n[1];return Pt[r]?{name:t,type:"i32",isArray:!0,arrayType:r}:{name:t,type:{i32:"i32",i64:"i64",f32:"f32",f64:"f64",number:"f64",int:"i32"}[r]??"f64"}}function oo(e,n){let t=e.map(s=>ae[s.type]),r=n?[1,ae.f64]:[0];return[96,...M(e.length),...t,...r]}function ao(e,n){let t=[];if(n.length>0){let o=n[0],i=1;for(let a=1;a<n.length;a++)n[a]===o?i++:(t.push([...M(i),ae[o]]),o=n[a],i=1);t.push([...M(i),ae[o]])}let s=[...[...M(t.length),...t.flat()],...e,d.end];return[...M(s.length),...s]}function co(){return st(rt.import,[1,...Nn("env"),...Nn("memory"),2,0,1])}function lo(e,n){if(e.length!==n.length)throw new Error("functions and exportNames length mismatch");let t=[0,97,115,109,1,0,0,0],r=e.map(u=>oo(u.params,u.hasReturn)),s=st(rt.type,[...M(r.length),...r.flat()]),i=e.some(u=>u.needsMemory)?co():[],a=st(rt.function,[...M(e.length),...e.map((u,m)=>M(m)).flat()]),c=st(rt.export,[...M(e.length),...n.map((u,m)=>[...Nn(u),0,...M(m)]).flat()]),l=e.map(u=>ao(u.bodyCode,u.localTypes)),f=st(rt.code,[...M(l.length),...l.flat()]),p=[...t,...s];return i.length>0&&p.push(...i),p.push(...a,...c,...f),p}function uo(e,n=new Map){try{let t=e.captures.map(ss),r;try{let c=`function __wasm__(${t.map(l=>l.name).join(", ")}) { ${e.body} }`;r=rs.parse(c,{ecmaVersion:2022})}catch(c){return{success:!1,warnings:[],error:`Parse error: ${c.message}`}}let o=r.body[0].body.body,i=zi(t,n),a=[];for(let c of o)a.push(...qe(c,i));return i.errors.length>0?{success:!1,warnings:i.warnings,error:i.errors.join("; ")}:{success:!0,fn:{params:t,bodyCode:a,localTypes:i.localTypes,needsMemory:i.needsMemory,hasReturn:i.hasReturn},wat:Vi(a,t,i.localTypes),warnings:i.warnings}}catch(t){return{success:!1,warnings:[],error:t.message}}}function is(e){let n=new Map,t=[];for(let c=0;c<e.length;c++){let l=e[c],f=l.captures.map(ss),p=l.returnType!==void 0;t.push({params:f,hasReturn:p}),l.name&&n.set(l.name,{index:c,params:f,hasReturn:p})}let r=[],s=[],o=[],i=[];for(let c=0;c<e.length;c++){let l=e[c],f=uo(l,n);if(i.push(...f.warnings),!f.success||!f.fn){r.push({id:l.id,success:!1,error:f.error}),s.push(fo(t[c])),o.push({id:l.id,exportName:`compute_${c}`,captures:l.captures,needsMemory:!1,wat:`(failed: ${f.error??"unknown error"})`});continue}s.push(f.fn),o.push({id:l.id,exportName:`compute_${c}`,captures:l.captures,needsMemory:f.fn.needsMemory,wat:f.wat??""}),r.push({id:l.id,success:!0,exportIndex:c})}if(s.length===0)return{bytes:new Uint8Array,results:r,exports:[],needsMemory:!1,warnings:i};let a=lo(s,o.map(c=>c.exportName));return{bytes:new Uint8Array(a),results:r,exports:o,needsMemory:o.some(c=>c.needsMemory),warnings:i}}function fo(e){let n=e.hasReturn?[d.f64_const,...te(0)]:[];return{params:e.params,bodyCode:n,localTypes:[],needsMemory:!1,hasReturn:e.hasReturn}}function os(e){let n=is(e),t=new Map(n.exports.map(f=>[f.id,f])),r=n.results.map(f=>{if(!f.success)return{id:f.id,success:!1,error:f.error};let p=t.get(f.id);return{id:f.id,success:!0,byteLength:n.bytes.length,_exportName:p.exportName}});if(n.exports.length===0)return{code:"",results:r,warnings:n.warnings};let s=n.exports.map(f=>{let p=f.wat.split(`
|
|
311
311
|
`).map(u=>` * ${u}`);return`/**
|
|
312
312
|
* WASM: ${f.id} (export: ${f.exportName})
|
|
313
313
|
${p.join(`
|
|
314
314
|
`)}
|
|
315
315
|
*/`}).join(`
|
|
316
316
|
`),o=n.exports.map(f=>`{id:${JSON.stringify(f.id)},n:${JSON.stringify(f.exportName)},c:${JSON.stringify(f.captures)},m:${f.needsMemory}}`).join(","),i=btoa(String.fromCharCode(...n.bytes)),a=n.needsMemory,c=`${s}
|
|
317
|
-
;(
|
|
317
|
+
;(globalThis.__tjs_wasm_pending??=[]);
|
|
318
|
+
globalThis.__tjs_wasm_ready??=(()=>Promise.all(globalThis.__tjs_wasm_pending));
|
|
319
|
+
globalThis.__tjs_wasm_pending.push((async()=>{
|
|
318
320
|
const __wasmExports=[${o}];
|
|
319
321
|
const __wasmModuleB64=${JSON.stringify(i)};
|
|
320
322
|
const __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};
|
|
@@ -341,32 +343,34 @@ for(const{id,n,c,m}of __wasmExports){
|
|
|
341
343
|
if(a.buffer===__wasmMem.buffer) continue;
|
|
342
344
|
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}}
|
|
343
345
|
return r};
|
|
344
|
-
}})();
|
|
345
|
-
`.trim(),l=r.map(({_exportName:f,...p})=>p);return{code:c,results:l}}import*as
|
|
346
|
-
`),suffix:"__tjs.popStack();"})}let i=Object.entries(n.params);if(i.length===0)return null;for(let[a]of i)r.push(`if (${a} instanceof Error) return ${a};`);for(let[a,c]of i){let l=`${s}${e}.${a}`;c.type.kind==="array"&&r.push(`if (Array.isArray(${a})) { for (const __i of ${a}) { if (__i instanceof Error && __i.path !== undefined) return __i } }`);let f=
|
|
347
|
-
`),suffix:"__tjs.popStack();"})}function
|
|
348
|
-
${
|
|
346
|
+
}})().catch(()=>{}));
|
|
347
|
+
`.trim(),l=r.map(({_exportName:f,...p})=>p);return{code:c,results:l,warnings:n.warnings}}import*as as from"acorn";function On(e,n){let t=[];function r(o){t.push({start:o.start,end:o.end,newText:`__tjs.toBool(${ne(o,n)})`})}function s(o){if(!(!o||typeof o!="object"||!("type"in o))){switch(o.type){case"IfStatement":case"WhileStatement":case"DoWhileStatement":{let i=o;r(i.test),i.consequent&&s(i.consequent),i.alternate&&s(i.alternate),i.body&&s(i.body);return}case"ForStatement":{let i=o;i.init&&s(i.init),i.test&&r(i.test),i.update&&s(i.update),i.body&&s(i.body);return}case"ConditionalExpression":{let i=o;t.push({start:i.start,end:i.end,newText:`__tjs.toBool(${ne(i.test,n)})?(${ne(i.consequent,n)}):(${ne(i.alternate,n)})`});return}case"LogicalExpression":{let i=o;if(i.operator==="&&"||i.operator==="||"){t.push({start:i.start,end:i.end,newText:ne(o,n)});return}break}case"UnaryExpression":{let i=o;if(i.operator==="!"){t.push({start:i.start,end:i.end,newText:`!__tjs.toBool(${ne(i.argument,n)})`});return}break}case"CallExpression":{let i=o;if(i.callee&&i.callee.type==="Identifier"&&i.callee.name==="Boolean"&&i.arguments.length===1&&i.arguments[0].type!=="SpreadElement"){t.push({start:i.start,end:i.end,newText:`__tjs.toBool(${ne(i.arguments[0],n)})`});return}break}}po(o,s)}}return s(e),mo(t)}function ne(e,n){if(!e)return"";switch(e.type){case"LogicalExpression":{let t=e,r=ne(t.left,n),s=ne(t.right,n);return t.operator==="&&"?`((__tjs__t)=>__tjs.toBool(__tjs__t)?(${s}):__tjs__t)(${r})`:t.operator==="||"?`((__tjs__t)=>__tjs.toBool(__tjs__t)?__tjs__t:(${s}))(${r})`:`(${r})??(${s})`}case"ConditionalExpression":{let t=e;return`__tjs.toBool(${ne(t.test,n)})?(${ne(t.consequent,n)}):(${ne(t.alternate,n)})`}case"UnaryExpression":{let t=e;return t.operator==="!"?`!__tjs.toBool(${ne(t.argument,n)})`:In(e,n)}case"CallExpression":{let t=e;return t.callee&&t.callee.type==="Identifier"&&t.callee.name==="Boolean"&&t.arguments.length===1&&t.arguments[0].type!=="SpreadElement"?`__tjs.toBool(${ne(t.arguments[0],n)})`:In(e,n)}}return In(e,n)}function In(e,n){let t=e.start,r=e.end;if(typeof t!="number"||typeof r!="number")return"";let s=cs(e);if(s.length===0)return n.slice(t,r);s.sort((a,c)=>a.start-c.start);let o="",i=t;for(let a of s)a.start<i||(a.start>i&&(o+=n.slice(i,a.start)),o+=ne(a,n),i=a.end);return i<r&&(o+=n.slice(i,r)),o}function po(e,n){for(let t of cs(e))n(t)}function cs(e){let n=[];for(let t in e){if(t==="type"||t==="start"||t==="end"||t==="loc")continue;let r=e[t];if(Array.isArray(r))for(let s of r)s&&typeof s=="object"&&typeof s.type=="string"&&n.push(s);else r&&typeof r=="object"&&typeof r.type=="string"&&n.push(r)}return n}function mo(e){let n=[...e].sort((s,o)=>s.start-o.start||o.end-s.end),t=[],r=-1;for(let s of n)s.start>=r&&(t.push(s),r=s.end);return t}function Bn(e){let n;try{n=as.parse(`function __wrap__(){${e}}`,{ecmaVersion:2022,sourceType:"module",locations:!1})}catch{return e}let t=`function __wrap__(){${e}}`,r=On(n,t);if(r.length===0)return e;r.sort((a,c)=>c.start-a.start);let s=t;for(let a of r)s=s.slice(0,a.start)+a.newText+s.slice(a.end);return s.slice("function __wrap__(){".length,s.length-"}".length)}function go(e,n,t){if(!e||!n)return!1;let r=new RegExp(`function\\s+${n}\\s*\\([^)]*?\\b${t}\\s*([=:])`,"s"),s=e.match(r);return s?s[1]===":":!1}function yo(e,n,t,r,s){let o=[],i=He(n,e),a={},c=!1,l,f;if(e.params.length===1&&(e.params[0].type==="ObjectPattern"||e.params[0].type==="AssignmentPattern"&&e.params[0].left.type==="ObjectPattern")){c=!0;let m=e.params[0],g=m.type==="ObjectPattern"?m:m.left,y=ye(g,t);if(y.type.kind==="object"&&y.type.destructuredParams){l={},f=new Set;for(let[x,S]of Object.entries(y.type.destructuredParams))a[x]={...S,description:i.params[x]},l[x]=S.type,S.required&&f.add(x)}}else for(let m of e.params)if(m.type==="Identifier"){let g=ye(m,t);a[m.name]={...g,required:t.has(m.name),description:i.params[m.name]}}else if(m.type==="AssignmentPattern"&&m.left.type==="Identifier"){let g=ye(m,t),y=go(s||"",e.id?.name||"",m.left.name);a[m.left.name]={...g,required:y,default:y?null:g.example??g.default,description:i.params[m.left.name]}}else if(m.type==="ObjectPattern"){let g=ye(m,t);if(g.type.kind==="object"&&g.type.destructuredParams)for(let[y,x]of Object.entries(g.type.destructuredParams))a[y]={...x,description:i.params[y]}}else if(m.type==="RestElement"&&m.argument?.type==="Identifier"){let g=m.argument.name,y=n.match(new RegExp(`\\.\\.\\.${g}\\s*:\\s*([^)]+?)\\s*\\)`));if(y)try{let x=ls(y[1].trim(),0,{ecmaVersion:2022}),S=Y(x);a[g]={name:g,type:S,required:!1,description:i.params[g]}}catch{a[g]={name:g,type:{kind:"array"},required:!1,description:i.params[g]}}else a[g]={name:g,type:{kind:"array"},required:!1,description:i.params[g]}}let p;if(r)try{let m=r.includes("=")?fs(r):r,g=ls(m,0,{ecmaVersion:2022});p=Y(g)}catch{p={kind:"any"},o.push(`Could not parse return type: ${r}`)}return{types:{name:e.id?.name||"anonymous",params:a,returns:p,description:i.description,isDestructuredParam:c,destructuredShape:l,destructuredRequired:f},warnings:o}}function ho(e,n,t){let r=[],s=t?`${t}:`:"",o=t?`${t}:${e}`:e;if(n.isDestructuredParam&&n.destructuredShape){let a=n.destructuredShape,c=n.destructuredRequired||new Set,l=Object.keys(a);if(l.length===0)return null;for(let f of l)r.push(`if (${f} instanceof Error) return ${f};`);for(let[f,p]of Object.entries(a)){let u=c.has(f),m=`${s}${e}.${f}`,g=Rt(f,p);if(g){let y=p.kind;u?r.push(`if (${g}) return __tjs.typeError('${m}', '${y}', ${f});`):r.push(`if (${f} !== undefined && ${g}) return __tjs.typeError('${m}', '${y}', ${f});`)}}return r.length===0?null:(r.unshift(`__tjs.pushStack('${o}');`),{preamble:r.join(`
|
|
348
|
+
`),suffix:"__tjs.popStack();"})}let i=Object.entries(n.params);if(i.length===0)return null;for(let[a]of i)r.push(`if (${a} instanceof Error) return ${a};`);for(let[a,c]of i){let l=`${s}${e}.${a}`;c.type.kind==="array"&&r.push(`if (Array.isArray(${a})) { for (const __i of ${a}) { if (__i instanceof Error && __i.path !== undefined) return __i } }`);let f=Rt(a,c.type);if(f){let p=c.type.kind==="union"?c.type.members.map(u=>u.kind).join(" | "):c.type.kind;c.required?r.push(`if (${f}) return __tjs.typeError('${l}', '${p}', ${a});`):r.push(`if (${a} !== undefined && ${f}) return __tjs.typeError('${l}', '${p}', ${a});`)}if(c.type.kind==="function"){let p=Eo(a,c.type,l);p&&(r.push(p),r.push(`if (${a} instanceof Error) return ${a};`))}}return r.length===0?null:(r.unshift(`__tjs.pushStack('${o}');`),{preamble:r.join(`
|
|
349
|
+
`),suffix:"__tjs.popStack();"})}function fs(e){let n="",t=0;for(let r=0;r<e.length;r++){let s=e[r];if(s==="{"||s==="["||s==="(")t++,n+=s;else if(s==="}"||s==="]"||s===")")t--,n+=s;else if(s==="'"||s==='"'||s==="`"){for(n+=s,r++;r<e.length&&e[r]!==s;)e[r]==="\\"&&(n+=e[r++]),n+=e[r++];r<e.length&&(n+=e[r])}else t===1&&s==="="&&e[r-1]!=="!"&&e[r+1]!=="="?n+=":":n+=s}return n}function bo(e,n){let r=new RegExp(`function\\s+${n}\\s*\\([^)]*\\)\\s*(:[?!]?)\\s*`,"g").exec(e);if(!r)return null;let s=e.slice(r.index+r[0].length);return jt(s)}function xo(e,n){let r=new RegExp(`function\\s+${n}\\s*\\([^)]*\\)\\s*:([?!]?)`,"g").exec(e);if(!r)return;let s=r[1];if(s==="?")return"safe";if(s==="!")return"unsafe"}function _o(e){let n=e.match(/^\/\*\s*tjs\s*<-\s*([^*]+?)\s*\*\//);return n?n[1].trim():void 0}function wo(e,n){let t=new RegExp(`\\/\\*\\s*line\\s+(\\d+)\\s*\\*\\/\\s*(?:async\\s+)?function\\s+${n}\\s*\\(`,"m"),r=e.match(t);return r?parseInt(r[1],10):void 0}function Mt(e,n={}){let{filename:t="<source>",runTests:r=!0,debug:s=!1,resolvedImports:o={}}=n,i=[];e=Ht(e);let c=_o(e)||t,{code:l,tests:f,mocks:p,testRunner:u}=en(e),{ast:m,originalSource:g,requiredParams:y,unsafeFunctions:x}=Se(l,{filename:t,colonShorthand:!0,dialect:n.dialect,moduleLoader:n.moduleLoader}),S=$o(m),w=bt(l,{dialect:n.dialect,moduleLoader:n.moduleLoader,filename:t}),h=w.predicates.filter(v=>!v.verified),b=v=>`${v.kind} '${v.name}': predicate is not verifiable, compiled as a plain function (not fuel-bounded, not safe on untrusted data)${v.reason?` \u2014 ${v.reason.replace(/\s+/g," ").trim()}`:""}`;if(h.length&&w.tjsModes.tjsStrict)throw new Error(`TjsStrict: ${h.length} predicate(s) could not be verified:
|
|
350
|
+
${h.map(v=>` ${b(v)}`).join(`
|
|
351
|
+
`)}`);for(let v of h)i.push(b(v));let $=w.predicates.length?w.predicates:void 0;for(let v of f)v.body=ze(v.body),w.tjsModes.tjsEquals&&(v.body=Ge(v.body)),w.tjsModes.tjsStandard&&(v.body=Bn(v.body));for(let v of p)v.body=ze(v.body),w.tjsModes.tjsEquals&&(v.body=Ge(v.body)),w.tjsModes.tjsStandard&&(v.body=Bn(v.body));let _={},E=[],k=[];for(let v of S){let C=v.id?.name||"anonymous",I=bo(l,C),se;if(I&&I.includes("="))try{let Z=I.matchAll(/(\w+)\s*=\s*/g),Q=fs(I),fe=new Function(`return ${Q}`)(),ee={};for(let Ut of Z){let Ue=Ut[1];Ue in fe&&(ee[Ue]=fe[Ue])}Object.keys(ee).length>0&&(se=ee)}catch{}let{types:ue,warnings:ws}=yo(v,g,y,I,l);i.push(...ws),_[C]=ue;for(let Z of v.params)if(Z.type==="AssignmentPattern"&&Z.left.type==="Identifier"&&Z.right.type==="Identifier"){let Q=Z.left.name,fe=Z.right.name,ee=_[fe];if(ee&&ue.params[Q]){let Ut=Object.entries(ee.params).map(([ks,js])=>({name:ks,type:js.type})),Ue=ee.returns??{kind:"any"};ue.params[Q].type={kind:"function",params:Ut,returns:Ue}}}for(let Z of v.params)if(Z.type==="AssignmentPattern"){let Q=Z.left?.name||Z.left?.value,fe=Q?ue.params[Q]:null;if(fe?.required&&fe.default===null)k.push({start:Z.left.end,end:Z.right.end});else{let ee=Z.right;ee.type==="BinaryExpression"&&ee.operator==="|"&&k.push({start:ee.left.end,end:ee.end})}}let Wn=w.moduleSafety==="none"||x.has(C),$s=w.safeFunctions.has(C),Ss=xo(l,C),Es=wo(e,C),Ce={file:c,line:Es??v.loc?.start.line??0,column:v.loc?.start.column??0},Ts={unsafe:Wn,safe:$s,returnSafety:Ss},Un=w.polymorphicNames.has(C),Wt;if(Un){let Z=[];for(let fe of S){let ee=fe.id?.name||"";ee.startsWith(C+"$")&&Z.push(ee)}let Q={polymorphic:!0,variants:Z};Ce&&(Q.source=`${Ce.file}:${Ce.line}`),Wt=`${C}.__tjs = ${JSON.stringify(Q,null,2)}`}else Wt=So(C,ue,Ts,{debug:s,source:Ce,returnDefaults:se});if(E.push({position:v.end,text:`
|
|
352
|
+
${Wt}`}),!Wn&&!Un){let Z=`${Ce.file}:${Ce.line}`,Q=ho(C,ue,Z);Q&&v.body&&v.body.start!==void 0&&(E.push({position:v.body.start+1,text:`
|
|
349
353
|
${Q.preamble}
|
|
350
|
-
`}),Q.suffix&&
|
|
354
|
+
`}),Q.suffix&&E.push({position:v.body.end-1,text:`
|
|
351
355
|
${Q.suffix}
|
|
352
|
-
`}))}}if(
|
|
356
|
+
`}))}}if(w.tjsModes.tjsStandard){let v=On(m,w.source);for(let C of v)k.push({start:C.start,end:C.end}),E.push({position:C.start,text:C.newText})}k.sort((v,C)=>C.start-v.start);let T=w.source;for(let{start:v,end:C}of k)T=T.slice(0,v)+T.slice(C);for(let v of E){let C=0;for(let I of k)I.start<v.position&&(C+=I.end-I.start);v.position-=C}E.sort((v,C)=>C.position-v.position);for(let{position:v,text:C}of E)T=T.slice(0,v)+C+T.slice(v);let P=T.includes("__tjs.typeError("),A=T.includes("__tjs.pushStack("),N=T.includes("Is("),R=T.includes("IsNot("),B=T.includes("Eq("),D=T.includes("NotEq("),V=T.includes("TypeOf("),z=/\bType\(/.test(T),X=/\bGeneric\(/.test(T),Me=/\bFunctionPredicate\(/.test(T),ct=/\bEnum\(/.test(T),Ot=/\bUnion\(/.test(T),Bt=T.includes("__tjs.bang("),Dt=T.includes("__tjs.toBool("),Ft=T.includes("__tjs.checkFnShape("),qn=w.tjsModes.tjsSafeEval;if(P||A||N||R||B||D||V||z||X||Me||ct||Ot||Bt||Dt||Ft||qn){let v=[];P&&v.push("class MonadicError extends Error{constructor(m,p,e,a,c,r){super(m);this.name='MonadicError';this.path=p;this.expected=e;this.actual=a;this.callStack=c;this.reason=r}}",`function typeError(p,e,v,r){const a=v===null?'null':typeof v;const m=r?'Expected '+e+" for '"+p+"': "+r:'Expected '+e+" for '"+p+"', got "+a;const err=new MonadicError(m,p,e,a,undefined,r);const c=globalThis.__tjs?.getConfig?.();if(c?.logTypeErrors)console.error('[TJS TypeError] '+err.message);if(c?.throwTypeErrors)throw err;return err}`,"function isMonadicError(v){return v instanceof Error&&v.name==='MonadicError'&&'path' in v}"),A&&v.push("const __stack=[];function pushStack(n){__stack.push(n)}function popStack(){__stack.pop()}function getStack(){return[...__stack]}"),B&&v.push("function Eq(a,b){if(a instanceof String||a instanceof Number||a instanceof Boolean)a=a.valueOf();if(b instanceof String||b instanceof Number||b instanceof Boolean)b=b.valueOf();if(a===b)return true;if(typeof a==='number'&&typeof b==='number'&&isNaN(a)&&isNaN(b))return true;if((a===null||a===undefined)&&(b===null||b===undefined))return true;return false}"),D&&v.push("function NotEq(a,b){return!Eq(a,b)}"),V&&v.push("function TypeOf(v){return v===null?'null':typeof v}"),N&&v.push("const tjsEquals=Symbol.for('tjs.equals');function Is(a,b){if(a!=null&&typeof a==='object'&&typeof a[tjsEquals]==='function')return a[tjsEquals](b);if(b!=null&&typeof b==='object'&&typeof b[tjsEquals]==='function')return b[tjsEquals](a);if(a!=null&&typeof a==='object'&&typeof a.Equals==='function')return a.Equals(b);if(b!=null&&typeof b==='object'&&typeof b.Equals==='function')return b.Equals(a);if(a instanceof String||a instanceof Number||a instanceof Boolean)a=a.valueOf();if(b instanceof String||b instanceof Number||b instanceof Boolean)b=b.valueOf();if(a===b)return true;if(typeof a==='number'&&typeof b==='number'&&isNaN(a)&&isNaN(b))return true;if((a==null)&&(b==null))return true;if(a==null||b==null)return false;if(typeof a!==typeof b)return false;if(typeof a!=='object')return false;if(a instanceof Set&&b instanceof Set){if(a.size!==b.size)return false;for(const v of a)if(!b.has(v))return false;return true}if(a instanceof Map&&b instanceof Map){if(a.size!==b.size)return false;for(const[k,v]of a)if(!b.has(k)||!Is(v,b.get(k)))return false;return true}if(a instanceof Date&&b instanceof Date)return a.getTime()===b.getTime();if(a instanceof RegExp&&b instanceof RegExp)return a.toString()===b.toString();if(Array.isArray(a)&&Array.isArray(b)){if(a.length!==b.length)return false;return a.every((v,i)=>Is(v,b[i]))}if(Array.isArray(a)!==Array.isArray(b))return false;const ka=Object.keys(a),kb=Object.keys(b);if(ka.length!==kb.length)return false;return ka.every(k=>Is(a[k],b[k]))}"),R&&v.push("function IsNot(a,b){return!Is(a,b)}"),z&&v.push("function Type(d,p,e){const t={description:d,__runtimeType:true};if(typeof p==='function'){t.check=p;t.default=e??null}else{const ex=e??p;t.default=ex;t.check=v=>{if(ex===null)return true;return typeof v===typeof ex}}return t}"),X&&v.push("function Generic(tp,pred,d){const f=(...args)=>{const t={description:d||'generic',__runtimeType:true,check:v=>pred(v,...args)};return t};f.__runtimeType=true;f.description=d;return f}"),Me&&v.push("function FunctionPredicate(n,s,b){if(Array.isArray(s)&&b){const f=(...a)=>FunctionPredicate(n,b(...a));f.typeParamNames=s.map(p=>Array.isArray(p)?p[0]:p);f.description=n;f.__runtimeType=true;return f}const spec=typeof s==='function'?{}:s||{};return{description:n,params:spec.params||{},returns:spec.returns,returnContract:spec.returnContract||'assertReturns',check:v=>typeof v==='function',__runtimeType:true}}"),ct&&v.push("function Enum(d,m){const vals=typeof m==='object'?Object.values(m):[];return{description:d,check:v=>vals.includes(v),values:vals,__runtimeType:true}}"),Ot&&v.push("function Union(d,...v){const vals=v.flat();return{description:d,check:x=>vals.includes(x),values:vals,__runtimeType:true}}"),Dt&&v.push("function toBool(v){if(v instanceof Boolean||v instanceof Number||v instanceof String)return Boolean(v.valueOf());return Boolean(v)}"),Ft&&(P||v.push("class MonadicError extends Error{constructor(m,p,e,a,c,r){super(m);this.name='MonadicError';this.path=p;this.expected=e;this.actual=a;this.callStack=c;this.reason=r}}",`function typeError(p,e,v,r){const a=v===null?'null':typeof v;const m=r?'Expected '+e+" for '"+p+"': "+r:'Expected '+e+" for '"+p+"', got "+a;const err=new MonadicError(m,p,e,a,undefined,r);const c=globalThis.__tjs?.getConfig?.();if(c?.logTypeErrors)console.error('[TJS TypeError] '+err.message);if(c?.throwTypeErrors)throw err;return err}`,"function isMonadicError(v){return v instanceof Error&&v.name==='MonadicError'&&'path' in v}"),v.push(`function checkFnShape(fn,expectedParams,expectedReturn,path){if(typeof fn!=='function')return fn;const meta=fn.__tjs;if(!meta||!meta.params)return fn;const entries=Object.entries(meta.params);for(let i=0;i<expectedParams.length;i++){const e=expectedParams[i];if(e==='any')continue;const a=entries[i];if(!a)continue;const ak=a[1]&&a[1].type&&a[1].type.kind;if(!ak||ak==='any')continue;if(ak!==e)return new MonadicError("Expected (...arg"+i+": "+e+", ...) for '"+path+"', but callback declares arg"+i+" as "+ak,path+"(arg"+i+")",e,ak)}if(expectedReturn!=='any'&&meta.returns){const ar=(meta.returns.type&&meta.returns.type.kind)||meta.returns.kind;if(ar&&ar!=='any'&&ar!==expectedReturn)return new MonadicError("Expected callback returning "+expectedReturn+" for '"+path+"', but callback returns "+ar,path+"(return)",expectedReturn,ar)}return fn}`)),Bt&&(P||v.push("class MonadicError extends Error{constructor(m,p,e,a,c,r){super(m);this.name='MonadicError';this.path=p;this.expected=e;this.actual=a;this.callStack=c;this.reason=r}}",`function typeError(p,e,v,r){const a=v===null?'null':typeof v;const m=r?'Expected '+e+" for '"+p+"': "+r:'Expected '+e+" for '"+p+"', got "+a;const err=new MonadicError(m,p,e,a,undefined,r);const c=globalThis.__tjs?.getConfig?.();if(c?.logTypeErrors)console.error('[TJS TypeError] '+err.message);if(c?.throwTypeErrors)throw err;return err}`,"function isMonadicError(v){return v instanceof Error&&v.name==='MonadicError'&&'path' in v}"),v.push("function bang(o,p){if(o===null||o===undefined)return typeError('bang.'+p,'non-null',o);if(isMonadicError(o))return o;return o[p]}"));let C=v.length>0?v.join(`;
|
|
353
357
|
`)+`;
|
|
354
|
-
`:"",
|
|
355
|
-
|
|
356
|
-
|
|
358
|
+
`:"",I=[];P&&I.push("typeError","isMonadicError"),A&&I.push("pushStack","popStack","getStack"),B&&I.push("Eq"),D&&I.push("NotEq"),V&&I.push("TypeOf"),N&&I.push("Is","tjsEquals"),R&&I.push("IsNot"),z&&I.push("Type"),X&&I.push("Generic"),Me&&I.push("FunctionPredicate"),ct&&I.push("Enum"),Ot&&I.push("Union"),Dt&&I.push("toBool"),Ft&&(I.push("checkFnShape"),P||I.push("typeError","isMonadicError")),Bt&&(I.push("bang"),P||I.push("typeError","isMonadicError"));let se=I.length>0?`{${I.join(",")}}`:"undefined";T=C+`const __tjs = globalThis.__tjs?.createRuntime?.() ?? ${se};
|
|
359
|
+
`+T}qn&&(T=`import { Eval, SafeFunction } from 'tjs-lang';
|
|
360
|
+
`+T);let We;if(r){let v=es(e);We=ts(f,p,v,T,o,w.extensions);let C=We.filter(I=>!I.passed&&!I.inconclusive);if(C.length>0&&r===!0){let I=C.map(se=>{if(se.isSignatureTest)return` Function signature example is inconsistent:
|
|
357
361
|
${se.error}`;let ue=se.line?` (line ${se.line})`:"";return` Test '${se.description}'${ue} failed:
|
|
358
362
|
${se.error}`});throw new Error(`Transpile-time test failures:
|
|
359
|
-
${
|
|
360
|
-
`)}`)}}if(r==="only")return{code:"",types:
|
|
361
|
-
`+$),Dn=v.results}return{code:$,types:h,metadata:h,warnings:i.length>0?i:void 0,predicates:b,testRunner:f.length>0?u:void 0,testCount:f.length>0?f.length:void 0,testResults:We,wasmCompiled:Dn}}function _o(e){let n=[];for(let t of e.body)t.type==="FunctionDeclaration"?n.push(t):(t.type==="ExportNamedDeclaration"&&t.declaration?.type==="FunctionDeclaration"||t.type==="ExportDefaultDeclaration"&&t.declaration?.type==="FunctionDeclaration")&&n.push(t.declaration);return n}function at(e){let n={kind:e.kind};return e.nullable&&(n.nullable=!0),e.items&&(n.items=at(e.items)),e.shape&&(n.shape=Object.fromEntries(Object.entries(e.shape).map(([t,r])=>[t,at(r)]))),e.members&&(n.members=e.members.map(at)),n}function wo(e,n,t={},r={}){let s={};for(let[i,a]of Object.entries(n.params))s[i]={type:at(a.type),required:a.required},a.default!==void 0&&(s[i].default=a.default),a.description&&(s[i].description=a.description);let o={params:s};if(n.returns&&(o.returns={type:at(n.returns)},r.returnDefaults&&(o.returns.defaults=r.returnDefaults),t.returnSafety==="safe"?o.safeReturn=!0:t.returnSafety==="unsafe"&&(o.unsafeReturn=!0)),n.description&&(o.description=n.description),t.unsafe&&(o.unsafe=!0),t.safe&&(o.safe=!0),r.source){let{file:i,line:a}=r.source;o.source=`${i}:${a}`}return`${e}.__tjs = ${JSON.stringify(o,null,2)}`}function Pt(e,n){let t;switch(n.kind){case"string":t=`typeof ${e} !== 'string'`;break;case"number":t=`typeof ${e} !== 'number'`;break;case"integer":t=`(typeof ${e} !== 'number' || !Number.isInteger(${e}))`;break;case"non-negative-integer":t=`(typeof ${e} !== 'number' || !Number.isInteger(${e}) || ${e} < 0)`;break;case"boolean":t=`typeof ${e} !== 'boolean'`;break;case"null":return`${e} !== null`;case"undefined":return`${e} !== undefined`;case"array":{let r=n.items&&n.items.kind!=="any"?Pt("__a",n.items):null;r?t=`(!Array.isArray(${e}) || ${e}.some(__a => ${r}))`:t=`!Array.isArray(${e})`;break}case"object":t=`(typeof ${e} !== 'object' || ${e} === null || Array.isArray(${e}))`;break;case"function":t=`typeof ${e} !== 'function'`;break;case"union":{let r=n.members.map(s=>Pt(e,s)).filter(s=>s!==null);if(r.length===0)return null;t=`(${r.join(" && ")})`;break}case"any":return null;default:return null}return t&&n.nullable&&(t=`(${e} !== null && ${t})`),t}var cs=new Set(["string","number","integer","non-negative-integer","boolean","function","any","undefined","null","object"]);function $o(e,n,t){let r=n.params??[],s=n.returns??{kind:"any"},o=r.map(l=>l.type?.kind),i=o.every(l=>l&&cs.has(l))&&cs.has(s.kind),a=o.some(l=>l!=="any")||s.kind!=="any";if(!i||!a)return null;let c=JSON.stringify(o);return`if (typeof ${e} === 'function') ${e} = __tjs.checkFnShape(${e}, ${c}, '${s.kind}', '${t}');`}function Ct(e,n={}){let{ast:t,returnType:r,originalSource:s,requiredParams:o}=Se(e,{filename:n.filename,colonShorthand:!0,vmTarget:!0}),{entry:i,helpers:a}=$r(t,n.filename),{ast:c,signature:l,warnings:f}=Zt(i,s,r,n,o,a.size>0?a:void 0);return{ast:c,signature:l,warnings:f}}function So(e,...n){if(typeof e=="string")return Ct(e).ast;let t=e.reduce((r,s,o)=>r+s+(n[o]!==void 0?String(n[o]):""),"");return Ct(t).ast}function Eo(e,n,t){let{ast:r,signature:s}=Ct(e),o=async i=>(await n.run(r,i,t)).result;return o.signature=s,o.ast=r,o}function Mt(e){switch(e.kind){case"string":return{type:"string"};case"number":return{type:"number"};case"boolean":return{type:"boolean"};case"null":return{type:"null"};case"array":return{type:"array",items:e.items?Mt(e.items):{}};case"object":return e.shape?{type:"object",properties:Object.fromEntries(Object.entries(e.shape).map(([n,t])=>[n,Mt(t)]))}:{type:"object"};case"union":return e.members?{anyOf:e.members.map(Mt)}:{};default:return{}}}function To(e){return Object.entries(e).map(([n,t])=>{let r=t.signature,s={},o=[];for(let[i,a]of Object.entries(r.parameters))s[i]=Mt(a.type),a.description&&(s[i].description=a.description),a.required&&o.push(i);return{type:"function",function:{name:n,description:r.description,parameters:{type:"object",properties:s,required:o}}}})}function ko(e,n,...t){if(typeof e=="string")return Rt(e,n);let r=n!==void 0?[n,...t]:t,s=e.reduce((o,i,a)=>o+i+(r[a]!==void 0?String(r[a]):""),"");return Rt(s)}var jo=/\.[mc]?js$/i,vo=/\.[mc]?ts$/i,Ao=/\.tjs$/i;function us(e){return Ao.test(e)?"tjs":jo.test(e)?"js":vo.test(e)?"ts":"tjs"}function Po(e){return us(e)==="js"?"js":"tjs"}var fs=e=>e===null?"null":Array.isArray(e)?"array":typeof e;function Ro(e,n){return n==="integer"?typeof e=="number"&&Number.isInteger(e):fs(e)===n}function ps(e,n={}){let{ignorePredicates:t,...r}=n,s=new Map,o=a=>{if(a.$predicate&&!t&&!s.has(a.$predicate)){let c=a.$predicate,l=$e(c,r).predicates,f=l[l.length-1];if(!f)throw new Error("$predicate must declare at least one function");let p=Je(c,[f],r);s.set(c,p[f])}if(a.properties)for(let c of Object.values(a.properties))o(c);a.items&&o(a.items)};o(e);let i=(a,c,l,f)=>{if(a.type&&!Ro(c,a.type)){f.push({path:l||"/",message:`expected ${a.type}, got ${fs(c)}`});return}if(a.type==="object"&&a.properties&&c&&typeof c=="object"){let p=c;for(let u of a.required??[])u in p||f.push({path:`${l}/${u}`,message:`missing required '${u}'`});for(let[u,m]of Object.entries(a.properties))u in p&&i(m,p[u],`${l}/${u}`,f)}a.type==="array"&&a.items&&Array.isArray(c)&&c.forEach((p,u)=>i(a.items,p,`${l}/${u}`,f)),a.$predicate&&!t&&(s.get(a.$predicate)(c)||f.push({path:l||"/",message:`failed predicate at ${l||"/"}`}))};return a=>{let c=[];return i(e,a,"",c),{valid:c.length===0,errors:c}}}function Mo(e,n,t){return ps(e,t)(n)}function xe(e){let n;switch(e.kind){case"string":n="string";break;case"number":case"integer":case"non-negative-integer":n="number";break;case"boolean":n="boolean";break;case"null":return"null";case"undefined":return"undefined";case"any":n="any";break;case"array":if(e.items){let t=xe(e.items);n=t.includes("|")?`(${t})[]`:`${t}[]`}else n="any[]";break;case"object":e.shape&&Object.keys(e.shape).length>0?n=`{ ${Object.entries(e.shape).map(([r,s])=>`${r}: ${xe(s)}`).join("; ")} }`:n="Record<string, any>";break;case"union":if(e.members&&e.members.length>0)return e.members.map(xe).join(" | ");n="any";break;case"function":{let t=e.params??[],r=e.returns?xe(e.returns):"any";n=`(${t.map(o=>`${o.name}: ${xe(o.type)}`).join(", ")}) => ${r}`;break}default:n="any"}return e.nullable?`${n} | null`:n}function Co(e,n,t,r){let s=Object.entries(n.params),o=new Array(s.length),i=!1;for(let f=s.length-1;f>=0;f--){let p=s[f][1],u=!p.required&&p.default!==void 0;o[f]=u&&!i,o[f]||(i=!0)}let a=s.map(([f,p],u)=>{let m=xe(p.type);return o[u]?`${f}?: ${m}`:`${f}: ${m}`}).join(", "),c=n.returns?xe(n.returns):"any";return`${t?r?"export default function":"export declare function":"declare function"} ${e}(${a}): ${c};`}function No(e){let n=new Map,t,r=/^[ \t]*export\s+(default\s+)?function\s+(\w+)/gm;for(;(t=r.exec(e))!==null;)n.set(t[2],{exported:!0,isDefault:!!t[1]});let s=/^[ \t]*export\s+(default\s+)?class\s+(\w+)/gm;for(;(t=s.exec(e))!==null;)n.set(t[2],{exported:!0,isDefault:!!t[1]});let o=/^[ \t]*export\s+(default\s+)?(?:const|let|var)\s+(\w+)/gm;for(;(t=o.exec(e))!==null;)n.set(t[2],{exported:!0,isDefault:!!t[1]});let i=/^[ \t]*export\s+Type\s+(\w+)/gm;for(;(t=i.exec(e))!==null;)n.set(t[1],{exported:!0,isDefault:!1});let a=/^[ \t]*export\s+Generic\s+(\w+)/gm;for(;(t=a.exec(e))!==null;)n.set(t[1],{exported:!0,isDefault:!1});let c=/^[ \t]*export\s+FunctionPredicate\s+(\w+)/gm;for(;(t=c.exec(e))!==null;)n.set(t[1],{exported:!0,isDefault:!1});let l=/^[ \t]*export\s*\{([^}]+)\}/gm;for(;(t=l.exec(e))!==null;){let f=t[1].split(",").map(p=>p.trim().split(/\s+as\s+/));for(let p of f){let u=p.length>1?p[1]:p[0];u&&/^\w+$/.test(u)&&n.set(u,{exported:!0,isDefault:!1})}}return n}function Io(e){let n=new Map,t=/^[ \t]*(?:export\s+)?FunctionPredicate\s+(\w+)\s*(?:<([^>]+)>)?\s*\{/gm,r;for(;(r=t.exec(e))!==null;){let s=r[1],o=r[2],i=r.index+r[0].length-1,a=1,c=i+1;for(;c<e.length&&a>0;)e[c]==="{"?a++:e[c]==="}"&&a--,c++;let l=e.slice(i+1,c-1),f;o&&(f=o.split(",").map(g=>g.trim()));let p=[],u=l.match(/params\s*:\s*\{([^}]*)\}/);if(u){let g=u[1],x=ds(g);for(let E of x){let S=E.match(/^(\w+)\s*:\s*(.+)$/);S&&p.push({name:S[1],example:S[2].trim()})}}let m,y=l.match(/returns\s*:\s*(.+?)(?:\n|$)/);y&&(m=y[1].trim()),n.set(s,{params:p,returns:m,typeParams:f})}return n}function Oo(e){let n=new Map,t=/^[ \t]*(?:export\s+(?:default\s+)?)?class\s+(\w+)(?:\s+extends\s+\w+)?\s*\{/gm,r;for(;(r=t.exec(e))!==null;){let s=r[1],o=r.index+r[0].length-1,i=1,a=o+1;for(;a<e.length&&i>0;)e[a]==="{"?i++:e[a]==="}"&&i--,a++;let c=e.slice(o+1,a-1),l=c.indexOf("constructor"),f="";if(l!==-1){let u=c.indexOf("(",l);if(u!==-1){let m=1,y=u+1;for(;y<c.length&&m>0;)c[y]==="("?m++:c[y]===")"&&m--,y++;f=c.slice(u+1,y-1).trim()}}let p=[];{let u=0,m=0;for(;u<c.length;){let y=c[u];if(y==="{"){m++,u++;continue}if(y==="}"){m--,u++;continue}if(m===0){let g=c.slice(u).match(/^(\w+)\s*\(/);if(g){let x=g[1];if(x==="constructor"||x==="get"||x==="set"){u+=x.length;continue}else{let E=u+g[0].length-1,S=1,b=E+1;for(;b<c.length&&S>0;)c[b]==="("?S++:c[b]===")"&&S--,b++;let h=c.slice(E+1,b-1).trim(),w=c.slice(b).match(/^\s*->\s*(.+?)\s*\{/),_=w?w[1].trim():null;p.push({name:x,params:h,returnType:_}),u=b;continue}}}u++}}n.set(s,{name:s,constructorParams:f,methods:p})}return n}function ds(e){let n=[],t=0,r="";for(let s of e)s==="{"||s==="["||s==="("?t++:(s==="}"||s==="]"||s===")")&&t--,s===","&&t===0?(n.push(r.trim()),r=""):r+=s;return r.trim()&&n.push(r.trim()),n}function ms(e){return e.trim()?ds(e).map(n=>{let t=n.match(/^(\w+)\s*:\s*(.+)$/);if(t){let s=t[1],o=_e(t[2].trim());return`${s}: ${o}`}let r=n.match(/^(\w+)\s*=\s*(.+)$/);if(r){let s=r[1],o=_e(r[2].trim());return`${s}?: ${o}`}return n.startsWith("{")?"options: any":`${n}: any`}).join(", "):""}function Bo(e){let n=new Map,t,r=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*=\s*(.+)$/gm;for(;(t=r.exec(e))!==null;)n.set(t[1],t[2].trim());let s=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s+([^{=].*)$/gm;for(;(t=s.exec(e))!==null;)n.has(t[1])||n.set(t[1],t[2].trim());let o=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*\{[^}]*example\s*:\s*(.+?)(?:\n|\s*[,}])/gm;for(;(t=o.exec(e))!==null;)n.set(t[1],t[2].trim());let i=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*\{[^}]*\/\/\s*TS:\s*(.+?)(?:\n|\s*\})/gm;for(;(t=i.exec(e))!==null;)n.has(t[1])||n.set(t[1],`__ts__:${t[2].trim()}`);let a=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*\{\s*\}/gm;for(;(t=a.exec(e))!==null;)n.has(t[1])||n.set(t[1],"");return n}function Do(e){let n=new Map,t=/^[ \t]*(?:export\s+)?Generic\s+(\w+)\s*<([^>]+)>\s*\{/gm,r;for(;(r=t.exec(e))!==null;){let s=r[1],o=r[2].split(",").map(u=>u.trim().split(/\s*=/)[0].trim()),i=r.index+r[0].length-1,a=1,c=i+1;for(;c<e.length&&a>0;)e[c]==="{"?a++:e[c]==="}"&&a--,c++;let l=e.slice(i+1,c-1),f,p=l.match(/\bdeclaration\s*\{/);if(p&&p.index!==void 0){let u=p.index+p[0].length-1,m=1,y=u+1;for(;y<l.length&&m>0;)l[y]==="{"?m++:l[y]==="}"&&m--,y++;f=l.slice(u+1,y-1).trim()}n.set(s,{typeParams:o,declaration:f})}return n}function Fo(e){let n=[],t=/^[ \t]*export\s+(?:default\s+)?(const|let|var)\s+(\w+)\s*(?::\s*\w+\s*)?=\s*(.+)/gm,r;for(;(r=t.exec(e))!==null;){let s=r[3].trim();s.endsWith(";")&&(s=s.slice(0,-1).trim()),n.push({name:r[2],value:s,kind:r[1]})}return n}function qo(e){return/^['"]/.test(e)||e.startsWith("`")?"string":e==="true"||e==="false"?"boolean":/^[+-]?\d+(\.\d+)?$/.test(e)?"number":e.startsWith("Symbol(")||e.startsWith("Symbol.")?"symbol":e.startsWith("[")?"any[]":e.startsWith("new WeakMap")?"WeakMap<any, any>":e.startsWith("new Map")?"Map<any, any>":e.startsWith("new Set")?"Set<any>":e.startsWith("new ")?"any":e.startsWith("{")?"Record<string, any>":e==="null"?"null":e==="undefined"?"undefined":"any"}function Wo(e,n,t={}){let r=[],s=No(n),o=Bo(n),i=Oo(n),a=Do(n),c=s.size>0,l=new Set;for(let[u,m]of Object.entries(e.types)){if(u.includes("$"))continue;let y=s.get(u),g=c?!!y?.exported:!0,x=y?.isDefault??!1;g&&(m.description&&r.push(`/** ${m.description} */`),r.push(Co(u,m,!0,x)),l.add(u))}for(let[u,m]of i){if(l.has(u))continue;let y=s.get(u);if(!(c?!!y?.exported:!0))continue;let x=m.constructorParams?ms(m.constructorParams):"";if(r.push(`export declare function ${u}(${x}): any;`),x||m.methods.length>0){r.push(`export declare class ${u} {`),m.constructorParams&&r.push(` constructor(${x});`);for(let E of m.methods){let S=E.params?ms(E.params):"";r.push(` ${E.name}(${S}): any;`)}r.push("}")}l.add(u)}for(let[u,m]of o){if(l.has(u))continue;let y=s.get(u);if(!c||y?.exported){if(m.startsWith("__ts__:")){let x=m.slice(7);r.push(`export type ${u} = ${x};`)}else if(m==="")r.push(`export type ${u} = any;`);else{let x=_e(m);r.push(`export declare const ${u}: { check(value: any): boolean; default: ${x}; (value: any): boolean; };`)}l.add(u)}}for(let[u,m]of a){if(l.has(u))continue;let y=s.get(u);if(!(c?!!y?.exported:!0))continue;let x=m.typeParams.length>0?`<${m.typeParams.join(", ")}>`:"";if(m.declaration){let E=m.declaration.trim(),S=E.match(/^\/\/\s*TS:\s*(.+)$/s);if(S)r.push(`export type ${u}${x} = ${S[1].trim()};`);else{let b=E.split(`
|
|
362
|
-
`).map(
|
|
363
|
+
${I.join(`
|
|
364
|
+
`)}`)}}if(r==="only")return{code:"",types:_,metadata:_,testResults:We,testCount:We?.length,predicates:$};let qt;if(w.wasmBlocks.length>0){let v=os(w.wasmBlocks);v.code&&(T=v.code+`
|
|
365
|
+
`+T),qt=v.results;for(let C of qt)C.success||i.push(`wasm{} block '${C.id}' did not compile \u2014 running the fallback{} (JS)${C.error?`: ${C.error}`:""}`);for(let C of v.warnings)i.push(`wasm{}: ${C}`)}return{code:T,types:_,metadata:_,warnings:i.length>0?i:void 0,predicates:$,testRunner:f.length>0?u:void 0,testCount:f.length>0?f.length:void 0,testResults:We,wasmCompiled:qt}}function $o(e){let n=[];for(let t of e.body)t.type==="FunctionDeclaration"?n.push(t):(t.type==="ExportNamedDeclaration"&&t.declaration?.type==="FunctionDeclaration"||t.type==="ExportDefaultDeclaration"&&t.declaration?.type==="FunctionDeclaration")&&n.push(t.declaration);return n}function at(e){let n={kind:e.kind};return e.nullable&&(n.nullable=!0),e.items&&(n.items=at(e.items)),e.shape&&(n.shape=Object.fromEntries(Object.entries(e.shape).map(([t,r])=>[t,at(r)]))),e.members&&(n.members=e.members.map(at)),n}function So(e,n,t={},r={}){let s={};for(let[i,a]of Object.entries(n.params))s[i]={type:at(a.type),required:a.required},a.default!==void 0&&(s[i].default=a.default),a.description&&(s[i].description=a.description);let o={params:s};if(n.returns&&(o.returns={type:at(n.returns)},r.returnDefaults&&(o.returns.defaults=r.returnDefaults),t.returnSafety==="safe"?o.safeReturn=!0:t.returnSafety==="unsafe"&&(o.unsafeReturn=!0)),n.description&&(o.description=n.description),t.unsafe&&(o.unsafe=!0),t.safe&&(o.safe=!0),r.source){let{file:i,line:a}=r.source;o.source=`${i}:${a}`}return`${e}.__tjs = ${JSON.stringify(o,null,2)}`}function Rt(e,n){let t;switch(n.kind){case"string":t=`typeof ${e} !== 'string'`;break;case"number":t=`typeof ${e} !== 'number'`;break;case"integer":t=`(typeof ${e} !== 'number' || !Number.isInteger(${e}))`;break;case"non-negative-integer":t=`(typeof ${e} !== 'number' || !Number.isInteger(${e}) || ${e} < 0)`;break;case"boolean":t=`typeof ${e} !== 'boolean'`;break;case"null":return`${e} !== null`;case"undefined":return`${e} !== undefined`;case"array":{let r=n.items&&n.items.kind!=="any"?Rt("__a",n.items):null;r?t=`(!Array.isArray(${e}) || ${e}.some(__a => ${r}))`:t=`!Array.isArray(${e})`;break}case"object":t=`(typeof ${e} !== 'object' || ${e} === null || Array.isArray(${e}))`;break;case"function":t=`typeof ${e} !== 'function'`;break;case"union":{let r=n.members.map(s=>Rt(e,s)).filter(s=>s!==null);if(r.length===0)return null;t=`(${r.join(" && ")})`;break}case"any":return null;default:return null}return t&&n.nullable&&(t=`(${e} !== null && ${t})`),t}var us=new Set(["string","number","integer","non-negative-integer","boolean","function","any","undefined","null","object"]);function Eo(e,n,t){let r=n.params??[],s=n.returns??{kind:"any"},o=r.map(l=>l.type?.kind),i=o.every(l=>l&&us.has(l))&&us.has(s.kind),a=o.some(l=>l!=="any")||s.kind!=="any";if(!i||!a)return null;let c=JSON.stringify(o);return`if (typeof ${e} === 'function') ${e} = __tjs.checkFnShape(${e}, ${c}, '${s.kind}', '${t}');`}function Nt(e,n={}){let{ast:t,returnType:r,originalSource:s,requiredParams:o}=Se(e,{filename:n.filename,colonShorthand:!0,vmTarget:!0}),{entry:i,helpers:a}=Er(t,n.filename),{ast:c,signature:l,warnings:f}=Xt(i,s,r,n,o,a.size>0?a:void 0);return{ast:c,signature:l,warnings:f}}function To(e,...n){if(typeof e=="string")return Nt(e).ast;let t=e.reduce((r,s,o)=>r+s+(n[o]!==void 0?String(n[o]):""),"");return Nt(t).ast}function ko(e,n,t){let{ast:r,signature:s}=Nt(e),o=async i=>(await n.run(r,i,t)).result;return o.signature=s,o.ast=r,o}function Ct(e){switch(e.kind){case"string":return{type:"string"};case"number":return{type:"number"};case"boolean":return{type:"boolean"};case"null":return{type:"null"};case"array":return{type:"array",items:e.items?Ct(e.items):{}};case"object":return e.shape?{type:"object",properties:Object.fromEntries(Object.entries(e.shape).map(([n,t])=>[n,Ct(t)]))}:{type:"object"};case"union":return e.members?{anyOf:e.members.map(Ct)}:{};default:return{}}}function jo(e){return Object.entries(e).map(([n,t])=>{let r=t.signature,s={},o=[];for(let[i,a]of Object.entries(r.parameters))s[i]=Ct(a.type),a.description&&(s[i].description=a.description),a.required&&o.push(i);return{type:"function",function:{name:n,description:r.description,parameters:{type:"object",properties:s,required:o}}}})}function vo(e,n,...t){if(typeof e=="string")return Mt(e,n);let r=n!==void 0?[n,...t]:t,s=e.reduce((o,i,a)=>o+i+(r[a]!==void 0?String(r[a]):""),"");return Mt(s)}var Ao=/\.[mc]?js$/i,Po=/\.[mc]?ts$/i,Ro=/\.tjs$/i;function ps(e){return Ro.test(e)?"tjs":Ao.test(e)?"js":Po.test(e)?"ts":"tjs"}function Mo(e){return ps(e)==="js"?"js":"tjs"}var ms=e=>e===null?"null":Array.isArray(e)?"array":typeof e;function Co(e,n){return n==="integer"?typeof e=="number"&&Number.isInteger(e):ms(e)===n}function ds(e,n={}){let{ignorePredicates:t,...r}=n,s=new Map,o=a=>{if(a.$predicate&&!t&&!s.has(a.$predicate)){let c=a.$predicate,l=$e(c,r).predicates,f=l[l.length-1];if(!f)throw new Error("$predicate must declare at least one function");let p=Je(c,[f],r);s.set(c,p[f])}if(a.properties)for(let c of Object.values(a.properties))o(c);a.items&&o(a.items)};o(e);let i=(a,c,l,f)=>{if(a.type&&!Co(c,a.type)){f.push({path:l||"/",message:`expected ${a.type}, got ${ms(c)}`});return}if(a.type==="object"&&a.properties&&c&&typeof c=="object"){let p=c;for(let u of a.required??[])u in p||f.push({path:`${l}/${u}`,message:`missing required '${u}'`});for(let[u,m]of Object.entries(a.properties))u in p&&i(m,p[u],`${l}/${u}`,f)}a.type==="array"&&a.items&&Array.isArray(c)&&c.forEach((p,u)=>i(a.items,p,`${l}/${u}`,f)),a.$predicate&&!t&&(s.get(a.$predicate)(c)||f.push({path:l||"/",message:`failed predicate at ${l||"/"}`}))};return a=>{let c=[];return i(e,a,"",c),{valid:c.length===0,errors:c}}}function No(e,n,t){return ds(e,t)(n)}function xe(e){let n;switch(e.kind){case"string":n="string";break;case"number":case"integer":case"non-negative-integer":n="number";break;case"boolean":n="boolean";break;case"null":return"null";case"undefined":return"undefined";case"any":n="any";break;case"array":if(e.items){let t=xe(e.items);n=t.includes("|")?`(${t})[]`:`${t}[]`}else n="any[]";break;case"object":e.shape&&Object.keys(e.shape).length>0?n=`{ ${Object.entries(e.shape).map(([r,s])=>`${r}: ${xe(s)}`).join("; ")} }`:n="Record<string, any>";break;case"union":if(e.members&&e.members.length>0)return e.members.map(xe).join(" | ");n="any";break;case"function":{let t=e.params??[],r=e.returns?xe(e.returns):"any";n=`(${t.map(o=>`${o.name}: ${xe(o.type)}`).join(", ")}) => ${r}`;break}default:n="any"}return e.nullable?`${n} | null`:n}function Io(e,n,t,r){let s=Object.entries(n.params),o=new Array(s.length),i=!1;for(let f=s.length-1;f>=0;f--){let p=s[f][1],u=!p.required&&p.default!==void 0;o[f]=u&&!i,o[f]||(i=!0)}let a=s.map(([f,p],u)=>{let m=xe(p.type);return o[u]?`${f}?: ${m}`:`${f}: ${m}`}).join(", "),c=n.returns?xe(n.returns):"any";return`${t?r?"export default function":"export declare function":"declare function"} ${e}(${a}): ${c};`}function Oo(e){let n=new Map,t,r=/^[ \t]*export\s+(default\s+)?function\s+(\w+)/gm;for(;(t=r.exec(e))!==null;)n.set(t[2],{exported:!0,isDefault:!!t[1]});let s=/^[ \t]*export\s+(default\s+)?class\s+(\w+)/gm;for(;(t=s.exec(e))!==null;)n.set(t[2],{exported:!0,isDefault:!!t[1]});let o=/^[ \t]*export\s+(default\s+)?(?:const|let|var)\s+(\w+)/gm;for(;(t=o.exec(e))!==null;)n.set(t[2],{exported:!0,isDefault:!!t[1]});let i=/^[ \t]*export\s+Type\s+(\w+)/gm;for(;(t=i.exec(e))!==null;)n.set(t[1],{exported:!0,isDefault:!1});let a=/^[ \t]*export\s+Generic\s+(\w+)/gm;for(;(t=a.exec(e))!==null;)n.set(t[1],{exported:!0,isDefault:!1});let c=/^[ \t]*export\s+FunctionPredicate\s+(\w+)/gm;for(;(t=c.exec(e))!==null;)n.set(t[1],{exported:!0,isDefault:!1});let l=/^[ \t]*export\s*\{([^}]+)\}/gm;for(;(t=l.exec(e))!==null;){let f=t[1].split(",").map(p=>p.trim().split(/\s+as\s+/));for(let p of f){let u=p.length>1?p[1]:p[0];u&&/^\w+$/.test(u)&&n.set(u,{exported:!0,isDefault:!1})}}return n}function Bo(e){let n=new Map,t=/^[ \t]*(?:export\s+)?FunctionPredicate\s+(\w+)\s*(?:<([^>]+)>)?\s*\{/gm,r;for(;(r=t.exec(e))!==null;){let s=r[1],o=r[2],i=r.index+r[0].length-1,a=1,c=i+1;for(;c<e.length&&a>0;)e[c]==="{"?a++:e[c]==="}"&&a--,c++;let l=e.slice(i+1,c-1),f;o&&(f=o.split(",").map(y=>y.trim()));let p=[],u=l.match(/params\s*:\s*\{([^}]*)\}/);if(u){let y=u[1],x=ys(y);for(let S of x){let w=S.match(/^(\w+)\s*:\s*(.+)$/);w&&p.push({name:w[1],example:w[2].trim()})}}let m,g=l.match(/returns\s*:\s*(.+?)(?:\n|$)/);g&&(m=g[1].trim()),n.set(s,{params:p,returns:m,typeParams:f})}return n}function Do(e){let n=new Map,t=/^[ \t]*(?:export\s+(?:default\s+)?)?class\s+(\w+)(?:\s+extends\s+\w+)?\s*\{/gm,r;for(;(r=t.exec(e))!==null;){let s=r[1],o=r.index+r[0].length-1,i=1,a=o+1;for(;a<e.length&&i>0;)e[a]==="{"?i++:e[a]==="}"&&i--,a++;let c=e.slice(o+1,a-1),l=c.indexOf("constructor"),f="";if(l!==-1){let u=c.indexOf("(",l);if(u!==-1){let m=1,g=u+1;for(;g<c.length&&m>0;)c[g]==="("?m++:c[g]===")"&&m--,g++;f=c.slice(u+1,g-1).trim()}}let p=[];{let u=0,m=0;for(;u<c.length;){let g=c[u];if(g==="{"){m++,u++;continue}if(g==="}"){m--,u++;continue}if(m===0){let y=c.slice(u).match(/^(\w+)\s*\(/);if(y){let x=y[1];if(x==="constructor"||x==="get"||x==="set"){u+=x.length;continue}else{let S=u+y[0].length-1,w=1,h=S+1;for(;h<c.length&&w>0;)c[h]==="("?w++:c[h]===")"&&w--,h++;let b=c.slice(S+1,h-1).trim(),$=c.slice(h).match(/^\s*->\s*(.+?)\s*\{/),_=$?$[1].trim():null;p.push({name:x,params:b,returnType:_}),u=h;continue}}}u++}}n.set(s,{name:s,constructorParams:f,methods:p})}return n}function ys(e){let n=[],t=0,r="";for(let s of e)s==="{"||s==="["||s==="("?t++:(s==="}"||s==="]"||s===")")&&t--,s===","&&t===0?(n.push(r.trim()),r=""):r+=s;return r.trim()&&n.push(r.trim()),n}function gs(e){return e.trim()?ys(e).map(n=>{let t=n.match(/^(\w+)\s*:\s*(.+)$/);if(t){let s=t[1],o=_e(t[2].trim());return`${s}: ${o}`}let r=n.match(/^(\w+)\s*=\s*(.+)$/);if(r){let s=r[1],o=_e(r[2].trim());return`${s}?: ${o}`}return n.startsWith("{")?"options: any":`${n}: any`}).join(", "):""}function Fo(e){let n=new Map,t,r=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*=\s*(.+)$/gm;for(;(t=r.exec(e))!==null;)n.set(t[1],t[2].trim());let s=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s+([^{=].*)$/gm;for(;(t=s.exec(e))!==null;)n.has(t[1])||n.set(t[1],t[2].trim());let o=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*\{[^}]*example\s*:\s*(.+?)(?:\n|\s*[,}])/gm;for(;(t=o.exec(e))!==null;)n.set(t[1],t[2].trim());let i=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*\{[^}]*\/\/\s*TS:\s*(.+?)(?:\n|\s*\})/gm;for(;(t=i.exec(e))!==null;)n.has(t[1])||n.set(t[1],`__ts__:${t[2].trim()}`);let a=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*\{\s*\}/gm;for(;(t=a.exec(e))!==null;)n.has(t[1])||n.set(t[1],"");return n}function qo(e){let n=new Map,t=/^[ \t]*(?:export\s+)?Generic\s+(\w+)\s*<([^>]+)>\s*\{/gm,r;for(;(r=t.exec(e))!==null;){let s=r[1],o=r[2].split(",").map(u=>u.trim().split(/\s*=/)[0].trim()),i=r.index+r[0].length-1,a=1,c=i+1;for(;c<e.length&&a>0;)e[c]==="{"?a++:e[c]==="}"&&a--,c++;let l=e.slice(i+1,c-1),f,p=l.match(/\bdeclaration\s*\{/);if(p&&p.index!==void 0){let u=p.index+p[0].length-1,m=1,g=u+1;for(;g<l.length&&m>0;)l[g]==="{"?m++:l[g]==="}"&&m--,g++;f=l.slice(u+1,g-1).trim()}n.set(s,{typeParams:o,declaration:f})}return n}function Wo(e){let n=[],t=/^[ \t]*export\s+(?:default\s+)?(const|let|var)\s+(\w+)\s*(?::\s*\w+\s*)?=\s*(.+)/gm,r;for(;(r=t.exec(e))!==null;){let s=r[3].trim();s.endsWith(";")&&(s=s.slice(0,-1).trim()),n.push({name:r[2],value:s,kind:r[1]})}return n}function Uo(e){return/^['"]/.test(e)||e.startsWith("`")?"string":e==="true"||e==="false"?"boolean":/^[+-]?\d+(\.\d+)?$/.test(e)?"number":e.startsWith("Symbol(")||e.startsWith("Symbol.")?"symbol":e.startsWith("[")?"any[]":e.startsWith("new WeakMap")?"WeakMap<any, any>":e.startsWith("new Map")?"Map<any, any>":e.startsWith("new Set")?"Set<any>":e.startsWith("new ")?"any":e.startsWith("{")?"Record<string, any>":e==="null"?"null":e==="undefined"?"undefined":"any"}function Lo(e,n,t={}){let r=[],s=Oo(n),o=Fo(n),i=Do(n),a=qo(n),c=s.size>0,l=new Set;for(let[u,m]of Object.entries(e.types)){if(u.includes("$"))continue;let g=s.get(u),y=c?!!g?.exported:!0,x=g?.isDefault??!1;y&&(m.description&&r.push(`/** ${m.description} */`),r.push(Io(u,m,!0,x)),l.add(u))}for(let[u,m]of i){if(l.has(u))continue;let g=s.get(u);if(!(c?!!g?.exported:!0))continue;let x=m.constructorParams?gs(m.constructorParams):"";if(r.push(`export declare function ${u}(${x}): any;`),x||m.methods.length>0){r.push(`export declare class ${u} {`),m.constructorParams&&r.push(` constructor(${x});`);for(let S of m.methods){let w=S.params?gs(S.params):"";r.push(` ${S.name}(${w}): any;`)}r.push("}")}l.add(u)}for(let[u,m]of o){if(l.has(u))continue;let g=s.get(u);if(!c||g?.exported){if(m.startsWith("__ts__:")){let x=m.slice(7);r.push(`export type ${u} = ${x};`)}else if(m==="")r.push(`export type ${u} = any;`);else{let x=_e(m);r.push(`export declare const ${u}: { check(value: any): boolean; default: ${x}; (value: any): boolean; };`)}l.add(u)}}for(let[u,m]of a){if(l.has(u))continue;let g=s.get(u);if(!(c?!!g?.exported:!0))continue;let x=m.typeParams.length>0?`<${m.typeParams.join(", ")}>`:"";if(m.declaration){let S=m.declaration.trim(),w=S.match(/^\/\/\s*TS:\s*(.+)$/s);if(w)r.push(`export type ${u}${x} = ${w[1].trim()};`);else{let h=S.split(`
|
|
366
|
+
`).map(b=>b.trim()).filter(b=>b.length>0).map(b=>` ${b}`).join(`
|
|
363
367
|
`);r.push(`export interface ${u}${x} {
|
|
364
|
-
${
|
|
365
|
-
}`)}}else r.push(`export declare function ${u}(...args: any[]): { check(value: any): boolean; (value: any): boolean; };`);l.add(u)}let f=
|
|
368
|
+
${h}
|
|
369
|
+
}`)}}else r.push(`export declare function ${u}(...args: any[]): { check(value: any): boolean; (value: any): boolean; };`);l.add(u)}let f=Bo(n);for(let[u,m]of f){if(l.has(u))continue;let g=s.get(u);if(!(c?!!g?.exported:!0))continue;let x=new Set(m.typeParams?.map(b=>b.split("=")[0].trim())??[]),S=m.typeParams?`<${m.typeParams.join(", ")}>`:"",w=m.params.map((b,$)=>{let _=$===m.params.length-1;if(b.example.startsWith("[")&&b.example.endsWith("]")&&_){let k=b.example.slice(1,-1).trim(),T=!k||k==="null"?"any":x.has(k)?k:_e(k);return`...${b.name}: ${T}[]`}if(b.example.startsWith("[")&&b.example.endsWith("]")){let k=b.example.slice(1,-1).trim(),T=!k||k==="null"?"any":x.has(k)?k:_e(k);return`${b.name}: ${T}[]`}let E=b.example==="null"?"any":x.has(b.example)?b.example:_e(b.example);return`${b.name}: ${E}`}).join(", "),h=m.returns!==void 0?m.returns==="null"?"any":x.has(m.returns)?m.returns:_e(m.returns):"void";r.push(`export type ${u}${S} = (${w}) => ${h};`),l.add(u)}let p=Wo(n);for(let u of p){if(l.has(u.name))continue;let m=s.get(u.name);if(!(c?!!m?.exported:!0))continue;let y=Uo(u.value);r.push(`export declare const ${u.name}: ${y};`),l.add(u.name)}if(t.moduleName){let u=r.map(m=>` ${m}`).join(`
|
|
366
370
|
`);return`declare module '${t.moduleName}' {
|
|
367
371
|
${u}
|
|
368
372
|
}
|
|
369
373
|
`}return r.join(`
|
|
370
374
|
`)+`
|
|
371
|
-
`}function _e(e){let n=e.trim();if(
|
|
375
|
+
`}function _e(e){let n=e.trim();if(Jo(n)){let t=Vo(n).map(r=>_e(r.trim()));return[...new Set(t)].join(" | ")}return/^['"]/.test(n)?"string":n==="true"||n==="false"?"boolean":n==="null"?"null":n==="undefined"?"undefined":/^[+-]?\d+\.\d+$/.test(n)||/^[+-]?\d+$/.test(n)?"number":n.startsWith("[")?"any[]":n.startsWith("{")?"Record<string, any>":"any"}function Jo(e){let n=0,t=null;for(let r of e){if(t){r===t&&(t=null);continue}if(r==="'"||r==='"'||r==="`"){t=r;continue}if(r==="{"||r==="["||r==="(")n++;else if(r==="}"||r==="]"||r===")")n--;else if(r==="|"&&n===0)return!0}return!1}function Vo(e){let n=[],t=0,r=null,s="";for(let o of e){if(r){s+=o,o===r&&(r=null);continue}if(o==="'"||o==='"'||o==="`"){r=o,s+=o;continue}o==="{"||o==="["||o==="("?t++:(o==="}"||o==="]"||o===")")&&t--,o==="|"&&t===0?(n.push(s),s=""):s+=o}return s&&n.push(s),n}import{s as hs}from"tosijs-schema";function bs(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?"array":typeof e}function It(e){return hs.infer(e)}function Dn(e){return It(e)}Dn.type=bs;Dn.infer=It;var zo=new Proxy(Dn,{get(e,n){return n==="type"?bs:n==="infer"?It:hs[n]},apply(e,n,t){return It(t[0])}});var Go={unusedVariables:!0,undefinedVariables:!0,unreachableCode:!0,noExplicitNew:!0};function Zo(e,n={}){let t={...Go,...n},r=[],s,o=new Map,i;try{let f=Se(e,{filename:t.filename,colonShorthand:!0});s=f.ast,o=f.letAnnotations,i=f.tjsModes.tjsSafeAssign}catch(f){return{diagnostics:[{severity:"error",message:f.message,line:f.loc?.line,column:f.loc?.column,rule:"parse-error"}],valid:!1}}let a=t.safeAssign!==void 0?t.safeAssign:i,c=t.strict?"error":"warning",l=[xs()];if(Ln(s,{FunctionDeclaration(f,p,u){let m=xs();l.push(m);for(let g of f.params)Ko(m,g,"parameter");f.id&&(l[l.length-2]||l[0]).declarations.set(f.id.name,{node:f.id,kind:"function",used:!1})},VariableDeclaration(f){let p=l[l.length-1];for(let u of f.declarations)u.id.type==="Identifier"&&p.declarations.set(u.id.name,{node:u.id,kind:f.kind,used:!1})}}),ie(s,{Identifier(f){for(let p=l.length-1;p>=0;p--){let u=l[p].declarations.get(f.name);if(u){u.used=!0;break}}}}),t.unusedVariables)for(let f of l)for(let[p,u]of f.declarations)p.startsWith("_")||!u.used&&u.kind!=="function"&&r.push({severity:"warning",message:`'${p}' is declared but never used`,line:u.node.loc?.start?.line,column:u.node.loc?.start?.column,rule:"no-unused-vars"});if(t.unreachableCode&&ie(s,{BlockStatement(f){let p=!1;for(let u of f.body){if(p){r.push({severity:"warning",message:"Unreachable code after return statement",line:u.loc?.start?.line,column:u.loc?.start?.column,rule:"no-unreachable"});break}u.type==="ReturnStatement"&&(p=!0)}}}),a){let f=new Set;ie(s,{VariableDeclaration(p){if(p.kind==="let")for(let u of p.declarations){if(u.id.type!=="Identifier")continue;let m=u.id.name,g=o.has(m),y=u.init;(g||y&&!Fn(y))&&f.add(m)}}}),ie(s,{VariableDeclaration(p){if(p.kind==="let")for(let u of p.declarations){if(u.id.type!=="Identifier")continue;let m=u.id.name;o.has(m)||(u.init?Fn(u.init)&&r.push({severity:c,message:`'let ${m}' is initialized to ${_s(u.init)} with no type annotation. Annotate (let ${m}: <example>) to record the intended type.`,line:u.loc?.start?.line,column:u.loc?.start?.column,rule:"safe-assign-let-needs-type"}):r.push({severity:c,message:`'let ${m}' has no initializer or type annotation. Add an initializer (let ${m} = ...) or annotate (let ${m}: <example>).`,line:u.loc?.start?.line,column:u.loc?.start?.column,rule:"safe-assign-let-needs-type"}))}}}),ie(s,{AssignmentExpression(p){if(p.operator!=="="||p.left.type!=="Identifier")return;let u=p.left.name;f.has(u)&&Fn(p.right)&&r.push({severity:c,message:`Cannot assign ${_s(p.right)} to typed let '${u}'.`,line:p.loc?.start?.line,column:p.loc?.start?.column,rule:"safe-assign-no-nullish"})}})}return t.noExplicitNew&&ie(s,{NewExpression(f){let p="class";f.callee.type==="Identifier"?p=f.callee.name:f.callee.type==="MemberExpression"&&f.callee.property.type==="Identifier"&&(p=f.callee.property.name),r.push({severity:"warning",message:`Unnecessary 'new' keyword. In TJS, classes are callable without 'new': ${p}(...) instead of new ${p}(...)`,line:f.loc?.start?.line,column:f.loc?.start?.column,rule:"no-explicit-new"})}}),{diagnostics:r,valid:r.filter(f=>f.severity==="error").length===0}}function xs(){return{declarations:new Map}}function Fn(e){return e?e.type==="Identifier"&&e.name==="undefined"||e.type==="Literal"&&e.value===null||e.type==="UnaryExpression"&&e.operator==="void":!1}function _s(e){return e.type==="Identifier"?"undefined":e.type==="Literal"&&e.value===null?"null":e.type==="UnaryExpression"&&e.operator==="void"?"void <expr> (undefined)":"a nullish value"}function Ko(e,n,t){n.type==="Identifier"?e.declarations.set(n.name,{node:n,kind:t,used:!1}):n.type==="AssignmentPattern"&&n.left.type==="Identifier"&&e.declarations.set(n.left.name,{node:n.left,kind:t,used:!1})}export{Le as PredicateFuelExhausted,zo as Schema,me as TJS_VERSION,To as ajs,Pr as assertFunction,Ae as checkType,Je as compilePredicate,ds as compilePredicateSchema,ko as createAgent,Os as createPredicateEvaluator,Mo as dialectForFilename,Ns as effectfulFromAtoms,Bi as emitRuntimeWrapper,Vt as emitVerifiedPredicate,le as error,Rr as expectFunction,ce as extractLiteralValue,He as extractTDoc,en as extractTests,ft as formatPredicateDiagnostics,Lo as generateDTS,jo as getToolDefinitions,Y as inferTypeFromValue,An as installRuntime,de as isError,Zo as lint,Se as parse,ye as parseParameter,Tr as parseReturnType,bt as preprocess,ke as runtime,ps as sourceKindForFilename,Is as suggest,xi as testUtils,vo as tjs,Xt as transformFunction,Nt as transpile,Mt as transpileToJS,xe as typeDescriptorToTS,De as typeOf,Yt as typeToString,jn as validateArgs,No as validatePredicateSchema,$e as verifyPredicate,vn as wrap};
|
|
372
376
|
//# sourceMappingURL=tjs-lang.js.map
|