tjs-lang 0.8.7 → 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 +19 -5
- package/dist/experiments/ambient/probe.d.ts +52 -0
- package/dist/index.js +110 -162
- package/dist/index.js.map +4 -4
- package/dist/scripts/build-editors.d.ts +19 -0
- package/dist/src/css/dimensions.d.ts +23 -0
- package/dist/src/css/index.d.ts +85 -0
- package/dist/src/css/predicates.d.ts +38 -0
- package/dist/src/css/shorthands.d.ts +31 -0
- package/dist/src/css/style.d.ts +48 -0
- package/dist/src/lang/emitters/js-wasm.d.ts +2 -0
- package/dist/src/lang/emitters/js.d.ts +9 -1
- package/dist/src/lang/index.d.ts +2 -2
- package/dist/src/lang/parser-transforms.d.ts +9 -5
- package/dist/src/lang/parser-types.d.ts +7 -0
- package/dist/src/lang/parser.d.ts +2 -0
- package/dist/src/lang/predicate.d.ts +60 -0
- package/dist/src/lang/transpiler.d.ts +3 -2
- package/dist/src/lang/types.d.ts +16 -0
- package/dist/src/schema/index.d.ts +12 -0
- package/dist/tjs-browser-from-ts.js +20 -20
- package/dist/tjs-browser-from-ts.js.map +3 -3
- package/dist/tjs-browser.js +108 -94
- package/dist/tjs-browser.js.map +4 -4
- package/dist/tjs-css.js +193 -0
- package/dist/tjs-css.js.map +7 -0
- package/dist/tjs-eval.js +43 -42
- package/dist/tjs-eval.js.map +4 -4
- package/dist/tjs-from-ts.js +13 -13
- package/dist/tjs-from-ts.js.map +2 -2
- package/dist/tjs-lang.js +106 -92
- package/dist/tjs-lang.js.map +4 -4
- package/dist/tjs-runtime.js +10 -0
- package/dist/tjs-runtime.js.map +7 -0
- package/dist/tjs-schema.js +6 -0
- package/dist/tjs-schema.js.map +7 -0
- package/dist/tjs-vm.js +55 -54
- package/dist/tjs-vm.js.map +4 -4
- package/docs/ambient-contracts.md +261 -0
- package/docs/type-system-north-star.md +100 -0
- package/editors/ace/ajs-mode.js +214 -233
- package/editors/codemirror/ajs-language.js +1570 -233
- package/editors/editors-build.test.ts +29 -0
- package/editors/monaco/ajs-monarch.js +239 -195
- package/llms.txt +4 -0
- package/package.json +35 -4
- package/src/css/css.test.ts +122 -0
- package/src/css/dimensions.test.ts +112 -0
- package/src/css/dimensions.ts +146 -0
- package/src/css/index.ts +243 -0
- package/src/css/perf.bench.test.ts +109 -0
- package/src/css/predicates.ts +232 -0
- package/src/css/property-aware.test.ts +84 -0
- package/src/css/shorthands.test.ts +90 -0
- package/src/css/shorthands.ts +113 -0
- package/src/css/style.test.ts +125 -0
- package/src/css/style.ts +134 -0
- package/src/index-tsfree.test.ts +58 -0
- package/src/lang/emit-verified-predicate.test.ts +95 -0
- package/src/lang/emitters/dts.test.ts +31 -0
- package/src/lang/emitters/dts.ts +23 -4
- package/src/lang/emitters/js-wasm.ts +8 -4
- package/src/lang/emitters/js.ts +58 -1
- package/src/lang/from-ts.test.ts +1 -1
- package/src/lang/generic-verified-predicate.test.ts +39 -0
- package/src/lang/index.ts +14 -5
- package/src/lang/parser-transforms.ts +113 -15
- package/src/lang/parser-types.ts +7 -0
- package/src/lang/parser.ts +18 -3
- package/src/lang/predicate-evaluator.test.ts +49 -0
- package/src/lang/predicate-report.test.ts +78 -0
- package/src/lang/predicate.ts +268 -0
- package/src/lang/redos-lint.test.ts +81 -0
- package/src/lang/transpiler.ts +13 -0
- package/src/lang/type-verified-predicate.test.ts +83 -0
- package/src/lang/types.ts +17 -0
- package/src/lang/typescript-syntax.test.ts +2 -1
- 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/src/schema/index.ts +62 -0
- package/src/schema/schema.test.ts +66 -0
- package/src/use-cases/bootstrap.test.ts +14 -4
package/dist/tjs-lang.js
CHANGED
|
@@ -1,59 +1,63 @@
|
|
|
1
|
-
var
|
|
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),
|
|
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
|
|
4
|
-
`);
|
|
5
|
-
${
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
`),
|
|
13
|
-
${S}
|
|
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
|
+
`),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=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
|
+
${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]=(...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
|
+
${x}
|
|
14
18
|
${i}}
|
|
15
|
-
`:
|
|
16
|
-
${
|
|
19
|
+
`:S=`${i}Object.assign(__ext_${a}, {
|
|
20
|
+
${x}
|
|
17
21
|
${i}})
|
|
18
|
-
`;for(let w of
|
|
19
|
-
`;t+=
|
|
20
|
-
`?(t++,r=0):r++;return{line:t,column:r}}function
|
|
21
|
-
`&&(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
|
|
22
|
-
${
|
|
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) {
|
|
23
27
|
${w.join(`
|
|
24
28
|
`)}
|
|
25
|
-
return __tjs.typeError('${
|
|
29
|
+
return __tjs.typeError('${p}', 'no matching overload', __args)
|
|
26
30
|
}
|
|
27
|
-
`;
|
|
28
|
-
`,m);m=
|
|
29
|
-
${
|
|
30
|
-
`.repeat(
|
|
31
|
-
|
|
32
|
-
function ${c}$ctor$${
|
|
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+=`
|
|
33
37
|
const __obj = Object.create(${c}.prototype)`,w+=`
|
|
34
|
-
;(function() {${
|
|
38
|
+
;(function() {${_.bodyText}}).call(__obj)`,w+=`
|
|
35
39
|
return __obj`,w+=`
|
|
36
40
|
}
|
|
37
|
-
`}let h=[];for(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+=`
|
|
38
42
|
function ${c}$dispatch(t, a) {
|
|
39
43
|
`,w+=h.join(`
|
|
40
44
|
`)+`
|
|
41
45
|
`,w+=` return __tjs.typeError('${c}', 'no matching constructor', a)
|
|
42
46
|
`,w+=`}
|
|
43
|
-
`,i=i.slice(0,
|
|
44
|
-
`&&(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
|
|
45
|
-
`&&(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
|
|
46
|
-
`))return t;t++}return t}function
|
|
47
|
-
`&&(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
|
|
48
|
-
`})(),w=
|
|
49
|
-
`){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
|
|
50
|
-
`,t),o=s===-1?e.length:s;n+=" ".repeat(o-t),t=o;continue}n+=r,t++}return n}function
|
|
51
|
-
`),
|
|
52
|
-
`)),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 Rs}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=>Ms(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 Ms(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 U("Only simple parameter names are supported",W(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 U(`Unsupported parameter pattern: ${e.type}`,W(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 mr(e){try{let n=Rs(e,0,{ecmaVersion:2022});return Y(n)}catch{return{kind:"any"}}}function Dt(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?Dt(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}: ${Dt(r)}`).join(", ");return e.nullable?`{ ${n} } | null`:`{ ${n} }`}case"union":return e.members?.map(Dt).join(" | ")||"any";default:return"any"}}function mt(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?mt(e.items):{}};case"object":if(e.shape){let n={};for(let[t,r]of Object.entries(e.shape))n[t]=mt(r);return{type:"object",properties:n,additionalProperties:!1}}return{type:"object"};case"union":return e.members?{oneOf:e.members.map(mt)}:{};default:return{}}}function Cs(e){let n={},t=[];for(let[r,s]of Object.entries(e))n[r]=mt(s.type),s.required&&t.push(r);return{type:"object",properties:n,required:t.length>0?t:void 0,additionalProperties:!1}}function qt(e,n,t,r={},s,o){let i=Ve(n,e),a=new Map;for(let w of e.params){let h=ge(w,s);if(h.name==="__destructured__"&&h.type.kind==="object"&&h.type.destructuredParams)for(let[x,_]of Object.entries(h.type.destructuredParams))a.set(x,{..._,description:i.params[x]});else h.description=i.params[h.name],a.set(h.name,h)}let c;t&&(c=mr(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},p=ie(e.body,l),f=[],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&&f.push({op:"varsImport",keys:u});for(let{name:w,defaultValue:h}of m)f.push({op:"varsImport",keys:[w]}),f.push({op:"if",condition:{$expr:"binary",op:"==",left:{$expr:"ident",name:w},right:{$expr:"literal",value:null}},then:[{op:"varSet",key:w,value:h}]});f.push(...p);let y=Object.fromEntries(a),b={name:e.id?.name||"anonymous",description:i.description,parameters:y,returns:c},S=Cs(y),E=l.helperSteps&&l.helperSteps.size>0?Object.fromEntries(l.helperSteps):void 0;return{ast:{op:"seq",steps:f,inputSchema:S,...E&&{helpers:E}},signature:b,warnings:l.warnings}}function ie(e,n){let t=[];for(let r of e.body){let s=ze(r,n);s&&(Array.isArray(s)?t.push(...s):t.push(s))}return t}function ze(e,n){switch(e.type){case"VariableDeclaration":return Ps(e,n);case"ExpressionStatement":return Ns(e,n);case"IfStatement":return Os(e,n);case"WhileStatement":return Bs(e,n);case"ForOfStatement":return Fs(e,n);case"TryStatement":return Ds(e,n);case"ReturnStatement":return qs(e,n);case"ThrowStatement":throw new U("'throw' is not supported in AsyncJS. Use Error('message') to trigger error flow",W(e),n.source,n.filename);case"BlockStatement":return{op:"scope",steps:ie(e,re(n))};case"EmptyStatement":return null;default:throw new U(`Unsupported statement type: ${e.type}`,W(e),n.source,n.filename)}}function Ps(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 U("Only simple variable names are supported",W(o),n.source,n.filename);let i=o.id.name;if(o.init){let{step:a,resultVar:c}=_e(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 U("const declarations must be initialized",W(o),n.source,n.filename);t.push({op:"varSet",key:i,value:null}),n.locals.set(i,{kind:"any",nullable:!0})}}return t}function Ns(e,n){let t=e.expression;if(t.type==="AssignmentExpression")return Is(t,n);if(t.type==="CallExpression"){let{step:r,resultVar:s}=_e(t,n);return r||(s?{op:"varSet",key:"_",value:s}:null)}return n.warnings.push({message:"Expression statement has no effect",line:W(e).line,column:W(e).column}),null}function Is(e,n){if(e.left.type!=="Identifier")throw new U("Only simple variable assignment is supported",W(e),n.source,n.filename);let t=e.left.name,{step:r,resultVar:s}=_e(e.right,n,t);return r||{op:"varSet",key:t,value:s}}function Os(e,n){let t=D(e.test,n),r=e.consequent.type==="BlockStatement"?ie(e.consequent,re(n)):[ze(e.consequent,n)].filter(Boolean),s;return e.alternate&&(s=e.alternate.type==="BlockStatement"?ie(e.alternate,re(n)):[ze(e.alternate,n)].filter(Boolean)),{op:"if",condition:t,then:r,...s&&{else:s}}}function Bs(e,n){let t=D(e.test,n),r=e.body.type==="BlockStatement"?ie(e.body,re(n)):[ze(e.body,n)].filter(Boolean);return{op:"while",condition:t,body:r}}function Fs(e,n){let t;if(e.left.type==="VariableDeclaration"){let i=e.left.declarations[0];if(i.id.type!=="Identifier")throw new U("Only simple variable names are supported in for...of",W(e.left),n.source,n.filename);t=i.id.name}else if(e.left.type==="Identifier")t=e.left.name;else throw new U("Unsupported for...of left-hand side",W(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"?ie(e.body,s):[ze(e.body,s)].filter(Boolean);return{op:"map",items:r,as:t,steps:o}}function Ds(e,n){let t=ie(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=ie(e.handler.body,o)}return{op:"try",try:t,...r&&{catch:r},...s&&{catchParam:s}}}function qs(e,n){if(!e.argument)return{op:"return",value:{}};let{step:t,resultVar:r}=_e(e.argument,n,"__returnVal__");return t?[t,{op:"return",value:r}]:{op:"return",value:K(e.argument,n)}}var yr=new Set(["Math","JSON","Array","Object","String","Number","console","Date","Schema"]),Us=new Set(["parseInt","parseFloat","isNaN","isFinite","encodeURI","decodeURI","encodeURIComponent","decodeURIComponent","Set","Date","filter"]),Ze=new Set(["RegExp","Promise","Map","WeakSet","WeakMap","Symbol","Proxy","Reflect","Function","eval","setTimeout","setInterval","fetch","require","import","process","window","document","global","globalThis"]),Ws=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 Ls(e){if(e.callee.type==="Identifier"){let n=e.callee.name;return Us.has(n)||Ze.has(n)}if(e.callee.type==="MemberExpression"){let n=e.callee;if(n.object.type==="Identifier"){let t=n.object.name;if(yr.has(t)||Ze.has(t))return!0}if(n.property.type==="Identifier"){let t=n.property.name;if(Ws.has(t))return!0}}return!1}function Js(e){if(e.object.type==="Identifier"){let n=e.object.name;return yr.has(n)||Ze.has(n)}return!1}var dr={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 Vs(e){if(e.callee.type==="Identifier"){let n=e.callee.name;if(Ze.has(n))return dr[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(Ze.has(t))return dr[t]||`${t} is not available in AsyncJS.`}}return null}function gr(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 _e(e,n,t,r){let s=r?"constSet":"varSet";if(e.type==="ChainExpression")return _e(e.expression,n,t,r);if(e.type==="NewExpression"){let i=e,a="constructor";i.callee.type==="Identifier"&&(a=i.callee.name);let c=gr(a);throw new U(`The 'new' keyword is not supported in AsyncJS.${c}`,W(e),n.source,n.filename)}if(e.type==="CallExpression"){let i=Vs(e);if(i)throw new U(i,W(e),n.source,n.filename)}if(e.type==="CallExpression"&&Ls(e)){let i=D(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}if(e.type==="MemberExpression"&&Js(e)){let i=D(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}if(e.type==="CallExpression")return zs(e,n,t,r);if(e.type==="TemplateLiteral")return Ks(e,n,t,r);if(e.type==="BinaryExpression"||e.type==="LogicalExpression"||e.type==="UnaryExpression"){let i=D(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 zs(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 U("Computed method names are not supported",W(e),n.source,n.filename)}else throw new U("Only named function calls are supported",W(e),n.source,n.filename);if(o)return Gs(s,i,e.arguments,n,t,r);if(s==="console"&&e.callee.type,n.helpers?.has(s)){let c=Zs(s,n,e),l=e.arguments.map(p=>K(p,n));if(l.length!==c.length)throw new U(`Helper '${s}' expects ${c.length} argument(s), got ${l.length}`,W(e),n.source,n.filename);return{step:{op:"callLocal",name:s,args:l,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}let a=Hs(e,n);return{step:{op:s,...a,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}function Zs(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 U(`Helper '${e}' parameters must be plain identifiers (optionally with an example value); destructuring is not supported`,o.loc?.start??W(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=ie(r.body,o);n.helperSteps.set(e,{steps:i,paramNames:s})}finally{n.helperTransforming.delete(e)}return s}function Gs(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 p;if(i.body.type==="BlockStatement")p=ie(i.body,l);else{let{step:f,resultVar:u}=_e(i.body,l,"result");p=f?[f]:[{op:"varSet",key:"result",value:u}]}return{step:{op:"map",items:n,as:c,steps:p,...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 p;if(i.body.type==="BlockStatement")throw new U("filter callback must be an expression, not a block",W(t[0]),r.source,r.filename);return p=D(i.body,l),{step:{op:"filter",items:n,as:c,condition:p,...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 p;if(i.body.type==="BlockStatement")throw new U("find callback must be an expression, not a block",W(t[0]),r.source,r.filename);return p=D(i.body,l),{step:{op:"find",items:n,as:c,condition:p,...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",p=c?.type==="Identifier"?c.name:"item",f=re(r);f.locals.set(l,{kind:"any"}),f.locals.set(p,{kind:"any"});let u;if(i.body.type==="BlockStatement")u=ie(i.body,f);else{let{step:y,resultVar:b}=_e(i.body,f,"result");u=y?[y]:[{op:"varSet",key:"result",value:b}]}let m=K(t[1],r);return{step:{op:"reduce",items:n,as:p,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 Ks(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 D(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=D(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:D(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 D(e.expression,n);case"BinaryExpression":{let t=e;return{$expr:"binary",op:t.operator,left:D(t.left,n),right:D(t.right,n)}}case"LogicalExpression":{let t=e;return{$expr:"logical",op:t.operator,left:D(t.left,n),right:D(t.right,n)}}case"UnaryExpression":{let t=e;return{$expr:"unary",op:t.operator,argument:D(t.argument,n)}}case"ConditionalExpression":{let t=e;return{$expr:"conditional",test:D(t.test,n),consequent:D(t.consequent,n),alternate:D(t.alternate,n)}}case"ArrayExpression":return{$expr:"array",elements:e.elements.filter(r=>r!==null).map(r=>D(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:D(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:D(r.object,n),method:s,arguments:t.arguments.map(i=>D(i,n)),...o&&{optional:!0}}}if(t.callee.type==="Identifier"){let r=t.callee.name;if(n.helpers?.has(r))throw new U(`Helper '${r}' cannot be called inside an expression. Assign its result to a variable first: const result = ${r}(...); then use result.`,W(e),n.source,n.filename);return{$expr:"call",callee:r,arguments:t.arguments.map(s=>D(s,n))}}throw new U("Complex function calls in expressions should be lifted to statements",W(e),n.source,n.filename)}case"NewExpression":{let t=e,r="constructor";t.callee.type==="Identifier"&&(r=t.callee.name);let s=gr(r);throw new U(`The 'new' keyword is not supported in AsyncJS.${s}`,W(e),n.source,n.filename)}case"TemplateLiteral":throw new U("Template literals inside expressions are not supported. Assign to a variable first: const msg = `hello ${name}`; then use msg",W(e),n.source,n.filename);default:throw new U(`Unsupported expression type in condition: ${e.type}`,W(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 D(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 D(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 D(e,n);case"CallExpression":return D(e,n);case"BinaryExpression":case"LogicalExpression":case"UnaryExpression":case"ConditionalExpression":return D(e,n);default:return null}}function Hs(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 Yr}from"acorn";function Ys(e,n){let t=n;for(;t>0&&e[t-1]!==`
|
|
53
|
-
`;)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
|
|
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,`
|
|
54
58
|
|
|
55
|
-
`).trim();let
|
|
56
|
-
`).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(`
|
|
57
61
|
`);return`(async () => {
|
|
58
62
|
const __results = []
|
|
59
63
|
|
|
@@ -76,13 +80,13 @@ const __failed = __results.filter(r => !r.passed).length
|
|
|
76
80
|
|
|
77
81
|
// Return summary
|
|
78
82
|
return { passed: __passed, failed: __failed, results: __results }
|
|
79
|
-
})()`.trim()}var
|
|
83
|
+
})()`.trim()}var Pr=`
|
|
80
84
|
function assert(condition, message) {
|
|
81
85
|
if (!condition) {
|
|
82
86
|
throw new Error(message || 'Assertion failed')
|
|
83
87
|
}
|
|
84
88
|
}
|
|
85
|
-
`,
|
|
89
|
+
`,Rr=`
|
|
86
90
|
function expect(actual) {
|
|
87
91
|
const deepEqual = (a, b) => {
|
|
88
92
|
if (a === b) return true
|
|
@@ -173,52 +177,52 @@ function expect(actual) {
|
|
|
173
177
|
}
|
|
174
178
|
}
|
|
175
179
|
}
|
|
176
|
-
`,
|
|
177
|
-
`+xr;import{validate as jr,s as ht}from"tosijs-schema";function Me(e){if(e.nullable)return{anyOf:[Me({...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:Me(e.items)}:{type:"array"};case"object":if(e.shape){let n={},t=[];for(let[r,s]of Object.entries(e.shape))n[r]=Me(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(Me)}:{};default:return{}}}function Ce(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:Ce(e[0])};let n={},t=[];for(let[r,s]of Object.entries(e))n[r]=Ce(s),t.push(r);return{type:"object",properties:n,required:t,additionalProperties:!1}}default:return{}}}function Lt(e){let n={},t=[];for(let[o,i]of Object.entries(e.params))i?.type?.kind?n[o]=Me(i.type):i?.example!==void 0?n[o]=Ce(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=Me(e.returns.type):e.returns.example!==void 0&&(s=Ce(e.returns.example))),{input:r,output:s}}import{validate as Jt,filter as ti,s as dt}from"tosijs-schema";function we(e){return e!==null&&typeof e=="object"&&"__runtimeType"in e&&e.__runtimeType===!0}function _r(e){return e!==null&&typeof e=="object"&&"schema"in e&&typeof e.schema=="object"}function ni(e){return e!==null&&typeof e=="object"&&"type"in e&&typeof e.type=="string"}function G(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=dt.infer(a));else if(n===void 0&&a!==void 0)i=dt.infer(a);else if(_r(n))i=n;else if(ni(n))i=n;else if(n!==void 0)a=n,c=a,i=dt.infer(a);else throw new Error("Type(description) requires a predicate, schema, or example");else _r(e),i=e,s=ri(i);let l;if(i){let f=i?.schema??i;f&&typeof f=="object"&&Array.isArray(f.examples)&&(l=f.examples)}return a===void 0&&l&&l.length>0&&(a=l[0]),{description:s,check:f=>o?o(f):i?Jt(f,i):!1,schema:i,predicate:o,example:a,examples:l,default:c,toJSONSchema(){if(i){let f=i?.schema??i;if(f&&typeof f=="object"&&"type"in f)return f}return a!==void 0?Ce(a):{description:s}},strip(f){return i?ti(f,i):f},__runtimeType:!0}}function ri(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 Vt=G("string",e=>typeof e=="string"?!0:`expected string, got ${e===null?"null":typeof e}`),zt=G("number",e=>typeof e=="number"?!0:`expected number, got ${e===null?"null":typeof e}`),Zt=G("boolean",e=>typeof e=="boolean"?!0:`expected boolean, got ${e===null?"null":typeof e}`),Gt=G("integer",e=>typeof e!="number"?`expected integer, got ${e===null?"null":typeof e}`:Number.isInteger(e)?!0:`${e} is not an integer`),Kt=G("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`),Ht=G("non-empty string",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:e.length===0?"string is empty":!0),Yt=G("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`),wr=e=>{try{return new URL(e),!0}catch{return!1}},Xt=G("URL",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:wr(e)?!0:`"${e}" is not a valid URL`),Qt=G("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`),Sr=e=>{let n=new Date(e);return!isNaN(n.getTime())&&e.includes("T")},$r=e=>{if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let n=new Date(e+"T00:00:00Z");return!isNaN(n.getTime())},Er=G("ISO 8601 timestamp",e=>typeof e=="string"&&Sr(e)),Tr=G("date (YYYY-MM-DD)",e=>typeof e=="string"&&$r(e));function en(e){return G(`${e.description} or null`,n=>n===null||e.check(n)===!0)}function tn(e){return G(`${e.description} (optional)`,n=>n==null||e.check(n)===!0)}function nn(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=[];we(e)&&r.push(e),we(n)&&r.push(n),r.push(...t);let s=r.map(o=>o.description).join(" | ");return G(s,o=>r.some(i=>i.check(o)===!0))}function rn(e){return G(`array of ${e.description}`,n=>Array.isArray(n)&&n.every(t=>e.check(t)===!0))}function si(e){if(we(e))return t=>e.check(t)===!0;if(e&&typeof e=="object"&&"schema"in e)return t=>Jt(t,e);let n=dt.infer(e);return t=>Jt(t,n)}function Ge(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,p)=>{let f=p<i.length?i[p]:s[p];return f===void 0?()=>!0:si(f)}),c=t;return r.forEach((l,p)=>{let f=p<i.length?i[p]:s[p],u="any";we(f)?u=f.description:f!==void 0&&(u=typeof f=="string"?"string":JSON.stringify(f)),c=c.replace(new RegExp(`\\b${l}\\b`,"g"),u)}),G(c,l=>n(l,...a))};return o.params=r,o.description=t,o}var sn=Ge(["T","U"],(e,n,t)=>Array.isArray(e)&&e.length===2&&n(e[0])&&t(e[1]),"Pair<T, U>"),on=Ge(["V"],(e,n)=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.values(e).every(n),"Record<string, V>");function an(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 ii(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 yt(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((p,f)=>f<a.length?a[f]:o[f]),l=t(...c);return yt(e,l)});return Object.defineProperties(i,{typeParamNames:{value:s,enumerable:!0},description:{value:e,enumerable:!0},__runtimeType:{value:!0,enumerable:!0}}),i}return oi(e,n)}function oi(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 p=Object.keys(l.params).length;if(p!==a)return`expected ${a} params, got ${p}`;let f=Object.keys(t),u=Object.keys(l.params);for(let m=0;m<f.length;m++){let y=l.params[u[m]],b=t[f[m]];if(y?.type?.kind&&b!==void 0){let S=ii(b);if(S&&y.type.kind!==S&&y.type.kind!=="any")return`param '${f[m]}' expected ${S}, got ${y.type.kind}`}}}}return!0},__runtimeType:!0}}var ci=kr(),me=ci.version,Ke=Symbol.for("tjs.equals");function bt(e){let[n=0,t=0,r=0]=e.split(".").map(Number);return{major:n,minor:t,patch:r}}function ln(e,n){let t=bt(e),r=bt(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 un(e,n){let t=bt(e),r=bt(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 li(e,n,t,r){let s=t===null?"null":typeof t,o=q.callStacks||q.debug?pn():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??xt;Ar[Pe]=a,Pe=(Pe+1)%c,Ee<c&&Ee++,_t++}if(q.logTypeErrors&&console.error(`[TJS TypeError] ${a.message}`),q.throwTypeErrors)throw a;return a}function cn(e){return e instanceof Error&&e.name==="MonadicError"&&"path"in e}var fn={debug:!1,safety:"inputs",requireReturnTypes:!1,callStacks:!1,maxStackSize:64,trackErrors:!0,maxErrors:64},q={...fn},He=64,vr=new Array(He).fill(""),$e=0,ye=0,xt=64,Ar=new Array(xt).fill(null),Pe=0,Ee=0,_t=0,Oe=0;function ui(){Oe++}function fi(){Oe>0&&Oe--}function pi(){return Oe>0}function mi(e){q={...q,...e}}function di(){return{...q}}function Rr(e){if((q.callStacks||q.debug)&&e){let n=q.maxStackSize??He;vr[$e]=e,$e=($e+1)%n,ye<n&&ye++}}function gt(){if((q.callStacks||q.debug)&&ye>0){let e=q.maxStackSize??He;$e=($e-1+e)%e,ye--}}function pn(){if(ye===0)return[];let e=q.maxStackSize??He,n=[],t=($e-ye+e)%e;for(let r=0;r<ye;r++)n.push(vr[(t+r)%e]);return n}function Mr(){if(q.trackErrors===!1||Ee===0)return[];let e=q.maxErrors??xt,n=[],t=(Pe-Ee+e)%e;for(let r=0;r<Ee;r++)n.push(Ar[(t+r)%e]);return n}function yi(){let e=Mr();return Pe=0,Ee=0,_t=0,e}function gi(){return _t}function hi(){q={...fn},$e=0,ye=0,Pe=0,Ee=0,_t=0,Oe=0}function Ne(e,n){if(e!==null&&typeof e=="object"&&typeof e[Ke]=="function")return e[Ke](n);if(n!==null&&typeof n=="object"&&typeof n[Ke]=="function")return n[Ke](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)||!Ne(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)=>Ne(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=>Ne(e[s],n[s]))}function Cr(e,n){return!Ne(e,n)}function Pr(e){return e===null?"null":typeof e}function Nr(e){return e instanceof Boolean||e instanceof Number||e instanceof String?!!e.valueOf():!!e}function mn(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 Ir(e,n){return!mn(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=pn(),s=n?.path?[...r,n.path]:r;t.stack=s}return t}function dn(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 Ie(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 Or(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 Te(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 ${Ie(e)}`;return le(i,{path:t,expected:n.description,actual:Ie(e),reason:o})}let r=Ie(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 Br(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 yn(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=Te(o,s.type,t?`${t}.${r}`:r);if(i)return s.loc&&(i.loc=s.loc),i}return null}function gn(e,n){if(e.__tjs=n,e.__tjs.schema=()=>Lt(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),p=l.length,f=e.name||n.name||"anonymous",u=function(...m){if(Oe>0)return e.apply(this,m);let y=o||!s&&q.safety!=="none",b=r&&(a||!i&&q.safety==="all");if(!y&&!b)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]),w=[];if(E){let h=m[0];for(let x=0;x<p;x++){let[_,g]=l[x],$=h[_];if(de($)){w.push($);continue}if(g.required&&$===void 0){w.push(le(`Missing required parameter '${_}'`,{path:`${f}.${_}`,expected:typeof g.type=="string"?g.type:g.type?.description||"value",actual:"undefined",loc:g.loc}));continue}if($!==void 0){let k=Te($,g.type,`${f}.${_}`);k&&(g.loc&&(k.loc=g.loc),w.push(k))}}}else for(let h=0;h<p;h++){let[x,_]=l[h],g=m[h];if(de(g)){w.push(g);continue}if(_.required&&g===void 0){w.push(le(`Missing required parameter '${x}'`,{path:`${f}.${x}`,expected:typeof _.type=="string"?_.type:_.type?.description||"value",actual:"undefined",loc:_.loc}));continue}if(g!==void 0){let $=Te(g,_.type,`${f}.${x}`);$&&(_.loc&&($.loc=_.loc),w.push($))}}if(w.length>0)return dn(w,f)}let S=q.callStacks||q.debug;S&&Rr(f);try{let E=e.apply(this,m);if(b&&n.returns&&!de(E)){let w=c&&typeof E=="object"&&E!==null?Object.assign({},c,E):E,h=Te(w,n.returns.type,`${f}()`);if(h)return S&>(),h}return S&>(),E}catch(E){return S&>(),le(E.message||String(E),{path:f,cause:E})}};return Object.defineProperty(u,"name",{value:e.name}),u.__tjs=n,u.__tjs.schema=()=>Lt(n),u}function Fr(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 Dr(){let e={...q},n=e.maxStackSize??He,t=new Array(n).fill(""),r=0,s=0,o=e.maxErrors??xt,i=new Array(o).fill(null),a=0,c=0,l=0,p=0;function f(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 b(){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 S(){e={...fn},r=0,s=0,a=0,c=0,l=0,p=0}function E(){p++}function w(){p>0&&p--}function h(){return p>0}let x=new Map;function _(R,I,B){x.has(R)||x.set(R,new Map),x.get(R).set(I,B)}function g(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 Ae=x.get(V);if(Ae?.has(I))return Ae.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=x.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?b():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 k(){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=k();return a=0,c=0,l=0,R}function A(){return l}function M(R,I){let B={$error:!0,message:R,...I};if((e.callStacks||e.debug)&&s>0){let J=I?.path?[...b(),I.path]:b();B.stack=J}return B}function P(R,I){return R==null?$(`bang.${I}`,"non-null",R):cn(R)?R:R[I]}return{version:me,MonadicError:he,typeError:$,isMonadicError:cn,bang:P,isError:de,error:M,composeErrors:dn,typeOf:Ie,isNativeType:Or,checkType:Te,validateArgs:yn,wrap:gn,checkFnShape:Br,wrapClass:Fr,compareVersions:ln,versionsCompatible:un,createRuntime:Dr,configure:f,getConfig:u,pushStack:m,popStack:y,getStack:b,errors:k,clearErrors:j,getErrorCount:A,resetRuntime:S,enterUnsafe:E,exitUnsafe:w,isUnsafeMode:h,validate:jr,infer:ht.infer.bind(ht),Type:G,isRuntimeType:we,Union:nn,Generic:Ge,Enum:an,FunctionPredicate:yt,Nullable:en,Optional:tn,TArray:rn,TString:Vt,TNumber:zt,TBoolean:Zt,TInteger:Gt,TPositiveInt:Kt,TNonEmptyString:Ht,TEmail:Yt,TUrl:Xt,TUuid:Qt,TPair:sn,TRecord:on,Is:Ne,IsNot:Cr,Eq:mn,NotEq:Ir,TypeOf:Pr,toBool:Nr,tjsEquals:Ke,registerExtension:_,resolveExtension:g}}var Se={version:me,MonadicError:he,typeError:li,isMonadicError:cn,isError:de,error:le,composeErrors:dn,typeOf:Ie,isNativeType:Or,checkType:Te,validateArgs:yn,wrap:gn,checkFnShape:Br,wrapClass:Fr,compareVersions:ln,versionsCompatible:un,configure:mi,getConfig:di,pushStack:Rr,popStack:gt,getStack:pn,errors:Mr,clearErrors:yi,getErrorCount:gi,resetRuntime:hi,enterUnsafe:ui,exitUnsafe:fi,isUnsafeMode:pi,createRuntime:Dr,validate:jr,infer:ht.infer.bind(ht),Type:G,isRuntimeType:we,Union:nn,Generic:Ge,Enum:an,FunctionPredicate:yt,Nullable:en,Optional:tn,TArray:rn,TString:Vt,TNumber:zt,TBoolean:Zt,TInteger:Gt,TPositiveInt:Kt,TNonEmptyString:Ht,TEmail:Yt,TUrl:Xt,TUuid:Qt,Timestamp:Er,LegalDate:Tr,TPair:sn,TRecord:on,Is:Ne,IsNot:Cr,Eq:mn,NotEq:Ir,TypeOf:Pr,toBool:Nr};function hn(){let e=globalThis;if(e.__tjs){let n=e.__tjs.version;if(typeof n!="string")return e.__tjs=Se,Se;let t=ln(me,n);return t===0||(un(me,n)?t>0?(console.info(`TJS runtime: upgrading ${n} \u2192 ${me}`),e.__tjs=Se):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=Se))),e.__tjs}return e.__tjs=Se,Se}function bi(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`
|
|
178
182
|
// TJS runtime wrapper (skips unsafe functions)
|
|
179
183
|
if (typeof ${e}.__tjs === 'object' && !${e}.__tjs.unsafe && typeof globalThis.__tjs?.wrap === 'function') {
|
|
180
184
|
${e} = globalThis.__tjs.wrap(${e}, ${e}.__tjs)
|
|
181
185
|
}
|
|
182
|
-
`.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(`,
|
|
183
187
|
`),a=t.length>8?`,
|
|
184
188
|
${s}...`:"";return`{
|
|
185
189
|
${i}${a}
|
|
186
|
-
${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(`
|
|
187
191
|
`).length-1;return`
|
|
188
|
-
`.repeat(r)});return n=n.replace(/\/\/[^\n]*/g,""),n}function
|
|
189
|
-
`)}function
|
|
190
|
-
`).length;if(
|
|
191
|
-
`).length,
|
|
192
|
-
`),u="const { Is, IsNot, Eq, NotEq, TypeOf } = globalThis.__tjs ?? {};",m=e.map((
|
|
193
|
-
// 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}
|
|
194
198
|
try {
|
|
195
199
|
${u}
|
|
196
|
-
${
|
|
197
|
-
__testResults.push({ idx: ${
|
|
200
|
+
${_}
|
|
201
|
+
__testResults.push({ idx: ${$}, passed: true });
|
|
198
202
|
} catch (e) {
|
|
199
|
-
__testResults.push({ idx: ${
|
|
203
|
+
__testResults.push({ idx: ${$}, passed: false, isRef: e instanceof ReferenceError, error: e.message || String(e) });
|
|
200
204
|
}
|
|
201
205
|
`}).join(`
|
|
202
|
-
`),
|
|
203
|
-
// 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 ${$}: ${_}
|
|
204
208
|
try {
|
|
205
|
-
let __actual = ${
|
|
206
|
-
const __expected = ${JSON.stringify(
|
|
207
|
-
const __defaults = ${JSON.stringify(
|
|
209
|
+
let __actual = ${E};
|
|
210
|
+
const __expected = ${JSON.stringify(b.expected)};${b.defaults?`
|
|
211
|
+
const __defaults = ${JSON.stringify(b.defaults)};
|
|
208
212
|
if (typeof __actual === 'object' && __actual !== null) __actual = Object.assign({}, __defaults, __actual);`:""}
|
|
209
213
|
if (__deepEqual(__actual, __expected)) {
|
|
210
|
-
__sigTestResults.push({ idx: ${
|
|
214
|
+
__sigTestResults.push({ idx: ${$}, passed: true });
|
|
211
215
|
} else {
|
|
212
|
-
__sigTestResults.push({ idx: ${
|
|
216
|
+
__sigTestResults.push({ idx: ${$}, passed: false, error: 'Expected ' + __format(__expected) + ' at \\'${_}\\', got ' + __format(__actual) });
|
|
213
217
|
}
|
|
214
218
|
} catch (e) {
|
|
215
219
|
// The function threw on its example inputs \u2014 the example couldn't be
|
|
216
220
|
// *evaluated* (e.g. it calls an atom that doesn't exist at build time).
|
|
217
221
|
// That's inconclusive, not a mismatch. Never block transpilation on it.
|
|
218
|
-
__sigTestResults.push({ idx: ${
|
|
222
|
+
__sigTestResults.push({ idx: ${$}, passed: false, threw: true, error: e.message || String(e) });
|
|
219
223
|
}
|
|
220
224
|
`}).join(`
|
|
221
|
-
`);
|
|
225
|
+
`);An();let h=`
|
|
222
226
|
|
|
223
227
|
const __saved_tjs = globalThis.__tjs;
|
|
224
228
|
|
|
@@ -286,31 +290,33 @@ ${o}}`}return String(e)}function _i(e){let n=e.replace(/\/\*[\s\S]*?\*\//g,t=>{l
|
|
|
286
290
|
}
|
|
287
291
|
|
|
288
292
|
// Inject resolved imports first (they may be dependencies)
|
|
289
|
-
${
|
|
293
|
+
${f}
|
|
290
294
|
|
|
291
295
|
// Execute the module code ONCE
|
|
292
296
|
${l}
|
|
293
|
-
${
|
|
297
|
+
${p}
|
|
294
298
|
|
|
295
299
|
// Run explicit test blocks
|
|
296
300
|
${m}
|
|
297
301
|
|
|
298
302
|
// Run signature tests
|
|
299
|
-
${
|
|
303
|
+
${x}
|
|
300
304
|
|
|
301
305
|
} finally {
|
|
302
306
|
globalThis.__tjs = __saved_tjs;
|
|
303
307
|
}
|
|
304
308
|
return { testResults: __testResults, sigTestResults: __sigTestResults };
|
|
305
|
-
`;try{let
|
|
306
|
-
`)}var $t={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 St(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 je(e,n){return e.locals.get(n)}function Be(e,n){switch(e.type){case"ExpressionStatement":{let t=e.expression;return[...F(t,n),d.drop]}case"ReturnStatement":{let t=e;if(n.hasReturn=!0,!t.argument)return[d.return];let r=F(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=St(n,o,i);s.init&&(r.push(...F(s.init,n)),r.push(d.local_set,...C(a)))}return r}case"ForStatement":return vi(e,n);case"IfStatement":return Ai(e,n);case"BlockStatement":{let t=e,r=[];for(let s of t.body)r.push(...Be(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(...Be(e.init,n)):t.push(...F(e.init,n))),t.push(d.block,oe.void),t.push(d.loop,oe.void),e.test&&(t.push(...F(e.test,n)),t.push(d.i32_eqz),t.push(d.br_if,1)),n.loopDepth++,e.body&&t.push(...Be(e.body,n)),n.loopDepth--,e.update&&(t.push(...F(e.update,n)),t.push(d.drop)),t.push(d.br,0),t.push(d.end),t.push(d.end),t}function Ai(e,n){let t=[];return t.push(...F(e.test,n)),t.push(d.if,oe.void),t.push(...Be(e.consequent,n)),e.alternate&&(t.push(d.else),t.push(...Be(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 je(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"&&je(n,t.object.name)){let s=n.params.find(o=>o.name===t.object.name);if(s?.arrayType){let o=$t[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 F(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,...tt(t.value|0)]:r==="f32"?[d.f32_const,...Sn(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=je(n,t);return r?[d.local_get,...C(r.index)]:(n.errors.push(`Unknown identifier: ${t}`),[d.f64_const,...ne(0)])}case"BinaryExpression":return Ri(e,n);case"UnaryExpression":return Mi(e,n);case"AssignmentExpression":return Ci(e,n);case"UpdateExpression":return Pi(e,n);case"MemberExpression":return Ni(e,n);case"CallExpression":return Oi(e,n);case"SequenceExpression":{let t=e,r=[];for(let s=0;s<t.expressions.length;s++)r.push(...F(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 Ri(e,n){let t=F(e.left,n),r=F(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,p=r;c==="f64"?(o==="i32"?l=[...t,d.f64_convert_i32_s]:o==="f32"&&(l=[...t,d.f64_promote_f32]),i==="i32"?p=[...r,d.f64_convert_i32_s]:i==="f32"&&(p=[...r,d.f64_promote_f32])):c==="f32"&&(o==="i32"&&(l=[...t,d.f32_convert_i32_s]),i==="i32"&&(p=[...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,...p,m]}function Mi(e,n){let t=F(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,...tt(-1),d.i32_xor];default:return n.errors.push(`Unsupported unary operator: ${e.operator}`),t}}function Ci(e,n){if(e.left.type==="MemberExpression")return Ii(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=je(n,t);if(!r)return n.errors.push(`Unknown variable: ${t}`),[];let s=[];if(e.operator==="="){s.push(...F(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,...C(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(...F(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,...C(r.index)),s}function Pi(e,n){if(e.argument.type!=="Identifier")return n.errors.push("Update expression argument must be identifier"),[];let t=e.argument.name,r=je(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,...C(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,...C(r.index))):(s.push(d.local_get,...C(r.index)),s.push(d.local_get,...C(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,...C(r.index))),s}function Ni(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=$t[r.arrayType];if(!s)return n.errors.push(`Unknown array type: ${r.arrayType}`),[];n.needsMemory=!0;let o=[],i=je(n,t);if(!i)return n.errors.push(`Unknown array: ${t}`),[];if(o.push(d.local_get,...C(i.index)),!e.computed||!e.property)return n.errors.push("Array access requires computed index"),[];let a=F(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,...tt(s.bytesPerElement)),o.push(d.i32_mul)),o.push(d.i32_add),o.push(s.loadOp,0,0),o}function Ii(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=$t[o.arrayType];if(!i)return r.errors.push(`Unknown array type: ${o.arrayType}`),[];r.needsMemory=!0;let a=[],c=je(r,s);if(!c)return[];if(!e.computed||!e.property)return r.errors.push("Array store requires computed index"),[];let l=F(e.property,r),p=L(e.property,r),f=()=>{let y=[];return y.push(d.local_get,...C(c.index)),y.push(...l),p==="f64"&&y.push(d.i32_trunc_f64_s),i.bytesPerElement>1&&(y.push(d.i32_const,...tt(i.bytesPerElement)),y.push(d.i32_mul)),y.push(d.i32_add),y};if(t==="=")a.push(...F(n,r));else{let y=St(r,`__addr_${r.nextLocalIndex}`,"i32");a.push(...f()),a.push(d.local_tee,...C(y)),a.push(i.loadOp,0,0),a.push(...F(n,r));let b=L(n,r);i.elementType==="f32"&&b==="f64"?a.push(d.f32_demote_f64):i.elementType==="f64"&&b==="f32"?a.push(d.f64_promote_f32):i.elementType==="f32"&&b==="i32"?a.push(d.f32_convert_i32_s):i.elementType==="f64"&&b==="i32"?a.push(d.f64_convert_i32_s):i.elementType==="i32"&&b==="f64"?a.push(d.i32_trunc_f64_s):i.elementType==="i32"&&b==="f32"&&a.push(d.i32_trunc_f32_s);let S=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[S]??d.f64_add);let w=St(r,`__val_${r.nextLocalIndex}`,i.elementType);return a.push(d.local_set,...C(w)),a.push(d.local_get,...C(y)),a.push(d.local_get,...C(w)),a.push(i.storeOp,0,0),a.push(d.local_get,...C(w)),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=St(r,`__tmp_${r.nextLocalIndex}`,i.elementType);return a.push(d.local_set,...C(m)),a.push(d.local_get,...C(c.index)),a.push(...l),p==="f64"&&a.push(d.i32_trunc_f64_s),i.bytesPerElement>1&&(a.push(d.i32_const,...tt(i.bytesPerElement)),a.push(d.i32_mul)),a.push(d.i32_add),a.push(d.local_get,...C(m)),a.push(i.storeOp,0,0),a.push(d.local_get,...C(m)),a}function Oi(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 qi(r,e.arguments,n)}}if(e.callee.type==="Identifier"){let t=e.callee.name;if(t.startsWith("f32x4_")||t.startsWith("v128_"))return Di(t,e.arguments,n);let r=n.moduleFunctions.get(t);if(r)return Bi(r,t,e.arguments,n)}return n.errors.push(`Unsupported function call: ${e.callee.type}`),[d.f64_const,...ne(0)]}function Bi(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(...F(i,r)),c!==a){let l=Fi(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,...C(e.index)),e.hasReturn||s.push(d.i32_const,0),s}function Fi(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 Di(e,n,t){t.needsMemory=!0;let r=[];switch(e){case"v128_load":case"f32x4_load":{r.push(...F(n[0],t)),L(n[0],t)==="f64"&&r.push(d.i32_trunc_f64_s),r.push(...F(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(...Jr(H.v128_load,2,0)),r}case"v128_store":case"f32x4_store":{r.push(...F(n[0],t)),L(n[0],t)==="f64"&&r.push(d.i32_trunc_f64_s),r.push(...F(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(...F(n[2],t)),r.push(...Jr(H.v128_store,2,0)),r.push(d.i32_const,0),r}case"f32x4_splat":{r.push(...F(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(...wn(H.f32x4_splat)),r}case"f32x4_extract_lane":{r.push(...F(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,...Sn(0)]):(r.push(et,...C(H.f32x4_extract_lane),s),r)}case"f32x4_replace_lane":{r.push(...F(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,...Sn(0)];r.push(...F(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(et,...C(H.f32x4_replace_lane),s),r}case"f32x4_add":case"f32x4_sub":case"f32x4_mul":case"f32x4_div":{r.push(...F(n[0],t)),r.push(...F(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(...wn(s[e])),r}case"f32x4_neg":case"f32x4_sqrt":{r.push(...F(n[0],t));let s={f32x4_neg:H.f32x4_neg,f32x4_sqrt:H.f32x4_sqrt};return r.push(...wn(s[e])),r}default:return t.errors.push(`Unknown SIMD intrinsic: ${e}`),[d.f64_const,...ne(0)]}}function qi(e,n,t){let r=[];for(let a of n){r.push(...F(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 zr(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 $t[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 Ui(e,n){let t=e.map(s=>oe[s.type]),r=n?[1,oe.f64]:[0];return[96,...C(e.length),...t,...r]}function Wi(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([...C(i),oe[o]]),o=n[a],i=1);t.push([...C(i),oe[o]])}let s=[...[...C(t.length),...t.flat()],...e,d.end];return[...C(s.length),...s]}function Li(){return Qe(Xe.import,[1,...$n("env"),...$n("memory"),2,0,1])}function Ji(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=>Ui(u.params,u.hasReturn)),s=Qe(Xe.type,[...C(r.length),...r.flat()]),i=e.some(u=>u.needsMemory)?Li():[],a=Qe(Xe.function,[...C(e.length),...e.map((u,m)=>C(m)).flat()]),c=Qe(Xe.export,[...C(e.length),...n.map((u,m)=>[...$n(u),0,...C(m)]).flat()]),l=e.map(u=>Wi(u.bodyCode,u.localTypes)),p=Qe(Xe.code,[...C(l.length),...l.flat()]),f=[...t,...s];return i.length>0&&f.push(...i),f.push(...a,...c,...p),f}function Vi(e,n=new Map){try{let t=e.captures.map(zr),r;try{let c=`function __wasm__(${t.map(l=>l.name).join(", ")}) { ${e.body} }`;r=Vr.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(...Be(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:ki(a,t,i.localTypes),warnings:i.warnings}}catch(t){return{success:!1,warnings:[],error:t.message}}}function Zr(e){let n=new Map,t=[];for(let c=0;c<e.length;c++){let l=e[c],p=l.captures.map(zr),f=l.returnType!==void 0;t.push({params:p,hasReturn:f}),l.name&&n.set(l.name,{index:c,params:p,hasReturn:f})}let r=[],s=[],o=[],i=[];for(let c=0;c<e.length;c++){let l=e[c],p=Vi(l,n);if(i.push(...p.warnings),!p.success||!p.fn){r.push({id:l.id,success:!1,error:p.error}),s.push(zi(t[c])),o.push({id:l.id,exportName:`compute_${c}`,captures:l.captures,needsMemory:!1,wat:`(failed: ${p.error??"unknown error"})`});continue}s.push(p.fn),o.push({id:l.id,exportName:`compute_${c}`,captures:l.captures,needsMemory:p.fn.needsMemory,wat:p.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=Ji(s,o.map(c=>c.exportName));return{bytes:new Uint8Array(a),results:r,exports:o,needsMemory:o.some(c=>c.needsMemory),warnings:i}}function zi(e){let n=e.hasReturn?[d.f64_const,...ne(0)]:[];return{params:e.params,bodyCode:n,localTypes:[],needsMemory:!1,hasReturn:e.hasReturn}}function Gr(e){let n=Zr(e),t=new Map(n.exports.map(p=>[p.id,p])),r=n.results.map(p=>{if(!p.success)return{id:p.id,success:!1,error:p.error};let f=t.get(p.id);return{id:p.id,success:!0,byteLength:n.bytes.length,_exportName:f.exportName}});if(n.exports.length===0)return{code:"",results:r};let s=n.exports.map(p=>{let f=p.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(`
|
|
307
311
|
`).map(u=>` * ${u}`);return`/**
|
|
308
|
-
* WASM: ${
|
|
309
|
-
${
|
|
312
|
+
* WASM: ${f.id} (export: ${f.exportName})
|
|
313
|
+
${p.join(`
|
|
310
314
|
`)}
|
|
311
315
|
*/`}).join(`
|
|
312
|
-
`),o=n.exports.map(
|
|
313
|
-
;(
|
|
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
|
+
;(globalThis.__tjs_wasm_pending??=[]);
|
|
318
|
+
globalThis.__tjs_wasm_ready??=(()=>Promise.all(globalThis.__tjs_wasm_pending));
|
|
319
|
+
globalThis.__tjs_wasm_pending.push((async()=>{
|
|
314
320
|
const __wasmExports=[${o}];
|
|
315
321
|
const __wasmModuleB64=${JSON.stringify(i)};
|
|
316
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};
|
|
@@ -337,26 +343,34 @@ for(const{id,n,c,m}of __wasmExports){
|
|
|
337
343
|
if(a.buffer===__wasmMem.buffer) continue;
|
|
338
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}}
|
|
339
345
|
return r};
|
|
340
|
-
}})();
|
|
341
|
-
`.trim(),l=r.map(({_exportName:p
|
|
342
|
-
`),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
|
|
343
|
-
`),suffix:"__tjs.popStack();"})}function
|
|
344
|
-
${
|
|
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:`
|
|
345
353
|
${Q.preamble}
|
|
346
|
-
`}),Q.suffix&&
|
|
354
|
+
`}),Q.suffix&&E.push({position:v.body.end-1,text:`
|
|
347
355
|
${Q.suffix}
|
|
348
|
-
`}))}}if(w.tjsModes.tjsStandard){let v=
|
|
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(`;
|
|
349
357
|
`)+`;
|
|
350
|
-
`:"",
|
|
351
|
-
`+
|
|
352
|
-
`+
|
|
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:
|
|
353
361
|
${se.error}`;let ue=se.line?` (line ${se.line})`:"";return` Test '${se.description}'${ue} failed:
|
|
354
362
|
${se.error}`});throw new Error(`Transpile-time test failures:
|
|
355
|
-
${
|
|
356
|
-
`)}`)}}if(r==="only")return{code:"",types:
|
|
357
|
-
`+g),Cn=v.results}return{code:g,types:h,metadata:h,warnings:i.length>0?i:void 0,testRunner:p.length>0?u:void 0,testCount:p.length>0?p.length:void 0,testResults:Fe,wasmCompiled:Cn}}function no(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 nt(e){let n={kind:e.kind};return e.nullable&&(n.nullable=!0),e.items&&(n.items=nt(e.items)),e.shape&&(n.shape=Object.fromEntries(Object.entries(e.shape).map(([t,r])=>[t,nt(r)]))),e.members&&(n.members=e.members.map(nt)),n}function ro(e,n,t={},r={}){let s={};for(let[i,a]of Object.entries(n.params))s[i]={type:nt(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:nt(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 Et(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"?Et("__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=>Et(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 Xr=new Set(["string","number","integer","non-negative-integer","boolean","function","any","undefined","null","object"]);function so(e,n,t){let r=n.params??[],s=n.returns??{kind:"any"},o=r.map(l=>l.type?.kind),i=o.every(l=>l&&Xr.has(l))&&Xr.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 jt(e,n={}){let{ast:t,returnType:r,originalSource:s,requiredParams:o}=xe(e,{filename:n.filename,colonShorthand:!0,vmTarget:!0}),{entry:i,helpers:a}=pr(t,n.filename),{ast:c,signature:l,warnings:p}=qt(i,s,r,n,o,a.size>0?a:void 0);return{ast:c,signature:l,warnings:p}}function io(e,...n){if(typeof e=="string")return jt(e).ast;let t=e.reduce((r,s,o)=>r+s+(n[o]!==void 0?String(n[o]):""),"");return jt(t).ast}function oo(e,n,t){let{ast:r,signature:s}=jt(e),o=async i=>(await n.run(r,i,t)).result;return o.signature=s,o.ast=r,o}function kt(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?kt(e.items):{}};case"object":return e.shape?{type:"object",properties:Object.fromEntries(Object.entries(e.shape).map(([n,t])=>[n,kt(t)]))}:{type:"object"};case"union":return e.members?{anyOf:e.members.map(kt)}:{};default:return{}}}function ao(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]=kt(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 co(e,n,...t){if(typeof e=="string")return Tt(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 Tt(s)}var lo=/\.[mc]?js$/i,uo=/\.[mc]?ts$/i,fo=/\.tjs$/i;function es(e){return fo.test(e)?"tjs":lo.test(e)?"js":uo.test(e)?"ts":"tjs"}function po(e){return es(e)==="js"?"js":"tjs"}import*as At from"acorn";function ae(e,n,t,r,s){t||(t=T),(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 ts(e,n,t,r,s){var o=[];t||(t=T),(function i(a,c,l){var p=l||a.type,f=a!==o[o.length-1];f&&o.push(a),t[p](a,c,i),n[p]&&n[p](a,c||o,o),f&&o.pop()})(e,r,s)}function jn(e,n,t){t(e,n)}function ve(e,n,t){}var T={};T.Program=T.BlockStatement=T.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")}};T.Statement=jn;T.EmptyStatement=ve;T.ExpressionStatement=T.ParenthesizedExpression=T.ChainExpression=function(e,n,t){return t(e.expression,n,"Expression")};T.IfStatement=function(e,n,t){t(e.test,n,"Expression"),t(e.consequent,n,"Statement"),e.alternate&&t(e.alternate,n,"Statement")};T.LabeledStatement=function(e,n,t){return t(e.body,n,"Statement")};T.BreakStatement=T.ContinueStatement=ve;T.WithStatement=function(e,n,t){t(e.object,n,"Expression"),t(e.body,n,"Statement")};T.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)}};T.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")}};T.ReturnStatement=T.YieldExpression=T.AwaitExpression=function(e,n,t){e.argument&&t(e.argument,n,"Expression")};T.ThrowStatement=T.SpreadElement=function(e,n,t){return t(e.argument,n,"Expression")};T.TryStatement=function(e,n,t){t(e.block,n,"Statement"),e.handler&&t(e.handler,n),e.finalizer&&t(e.finalizer,n,"Statement")};T.CatchClause=function(e,n,t){e.param&&t(e.param,n,"Pattern"),t(e.body,n,"Statement")};T.WhileStatement=T.DoWhileStatement=function(e,n,t){t(e.test,n,"Expression"),t(e.body,n,"Statement")};T.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")};T.ForInStatement=T.ForOfStatement=function(e,n,t){t(e.left,n,"ForInit"),t(e.right,n,"Expression"),t(e.body,n,"Statement")};T.ForInit=function(e,n,t){e.type==="VariableDeclaration"?t(e,n):t(e,n,"Expression")};T.DebuggerStatement=ve;T.FunctionDeclaration=function(e,n,t){return t(e,n,"Function")};T.VariableDeclaration=function(e,n,t){for(var r=0,s=e.declarations;r<s.length;r+=1){var o=s[r];t(o,n)}};T.VariableDeclarator=function(e,n,t){t(e.id,n,"Pattern"),e.init&&t(e.init,n,"Expression")};T.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")};T.Pattern=function(e,n,t){e.type==="Identifier"?t(e,n,"VariablePattern"):e.type==="MemberExpression"?t(e,n,"MemberPattern"):t(e,n)};T.VariablePattern=ve;T.MemberPattern=jn;T.RestElement=function(e,n,t){return t(e.argument,n,"Pattern")};T.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")}};T.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")}};T.Expression=jn;T.ThisExpression=T.Super=T.MetaProperty=ve;T.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")}};T.ObjectExpression=function(e,n,t){for(var r=0,s=e.properties;r<s.length;r+=1){var o=s[r];t(o,n)}};T.FunctionExpression=T.ArrowFunctionExpression=T.FunctionDeclaration;T.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")}};T.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")}};T.TemplateElement=ve;T.UnaryExpression=T.UpdateExpression=function(e,n,t){t(e.argument,n,"Expression")};T.BinaryExpression=T.LogicalExpression=function(e,n,t){t(e.left,n,"Expression"),t(e.right,n,"Expression")};T.AssignmentExpression=T.AssignmentPattern=function(e,n,t){t(e.left,n,"Pattern"),t(e.right,n,"Expression")};T.ConditionalExpression=function(e,n,t){t(e.test,n,"Expression"),t(e.consequent,n,"Expression"),t(e.alternate,n,"Expression")};T.NewExpression=T.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")}};T.MemberExpression=function(e,n,t){t(e.object,n,"Expression"),e.computed&&t(e.property,n,"Expression")};T.ExportNamedDeclaration=T.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")};T.ExportAllDeclaration=function(e,n,t){e.exported&&t(e.exported,n),t(e.source,n,"Expression")};T.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")};T.ImportExpression=function(e,n,t){t(e.source,n,"Expression")};T.ImportSpecifier=T.ImportDefaultSpecifier=T.ImportNamespaceSpecifier=T.Identifier=T.PrivateIdentifier=T.Literal=ve;T.TaggedTemplateExpression=function(e,n,t){t(e.tag,n,"Expression"),t(e.quasi,n,"Expression")};T.ClassDeclaration=T.ClassExpression=function(e,n,t){return t(e,n,"Class")};T.Class=function(e,n,t){e.id&&t(e.id,n,"Pattern"),e.superClass&&t(e.superClass,n,"Expression"),t(e.body,n)};T.ClassBody=function(e,n,t){for(var r=0,s=e.body;r<s.length;r+=1){var o=s[r];t(o,n)}};T.MethodDefinition=T.PropertyDefinition=T.Property=function(e,n,t){e.computed&&t(e.key,n,"Expression"),e.value&&t(e.value,n,"Expression")};var mo=new Set(["parseInt","parseFloat","isNaN","isFinite","encodeURIComponent","decodeURIComponent","String","Number","Boolean","Array","Object"]),yo=new Set(["Math","JSON","Object","Array","String","Number"]),go=new Set(["Math.random","Date.now"]),ho=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"]),vn=["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 bo(e){let n=new Set(vn);for(let[t,r]of Object.entries(e))r?.effects==="io"&&n.add(r.op??t);return n}function st(e,n={}){let t=n.effectful??new Set(vn),r;try{r=At.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=(p,f)=>o.push({predicate:a,message:p,line:f?.loc?.start?.line??0,column:f?.loc?.start?.column??0}),l=p=>c("loops are not allowed \u2014 iterate with recursion or array methods (every/some/map/filter/reduce) so work stays fuel-bounded",p);ae(i,{AwaitExpression(p){c("`await` not allowed \u2014 predicates must be synchronous",p)},NewExpression(p){c("`new` not allowed in a predicate (non-pure construction)",p)},WhileStatement:l,DoWhileStatement:l,ForStatement:l,ForInStatement:l,ForOfStatement:l,CallExpression(p){let f=p.callee;if(f.type==="Identifier"){let u=f.name;t.has(u)?c(`'${u}' is effectful \u2014 not allowed in a predicate`,f):s.has(u)||mo.has(u)||c(`unknown reference '${u}' \u2014 not a predicate or pure builtin`,f);return}if(f.type==="MemberExpression"&&!f.computed){let u=f.property.name,m=f.object;m.type==="Identifier"&&t.has(m.name)?c(`'${m.name}.${u}' is effectful`,f):m.type==="Identifier"&&yo.has(m.name)?go.has(`${m.name}.${u}`)&&c(`'${m.name}.${u}' is nondeterministic`,f):ho.has(u)||c(`method '.${u}()' is not a known pure method`,f.property);return}c("unsupported call form in a predicate",f)}})}return{safe:o.length===0,predicates:[...s],diagnostics:o}}function rs(e){return e.map(n=>` ${n.predicate} (${n.line}:${n.column}): ${n.message}`).join(`
|
|
358
|
-
`)
|
|
359
|
-
|
|
360
|
-
${
|
|
361
|
-
|
|
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(`
|
|
367
|
+
`);r.push(`export interface ${u}${x} {
|
|
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(`
|
|
370
|
+
`);return`declare module '${t.moduleName}' {
|
|
371
|
+
${u}
|
|
372
|
+
}
|
|
373
|
+
`}return r.join(`
|
|
374
|
+
`)+`
|
|
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};
|
|
362
376
|
//# sourceMappingURL=tjs-lang.js.map
|