tjs-lang 0.8.7 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +12 -4
- package/dist/experiments/ambient/probe.d.ts +52 -0
- package/dist/index.js +115 -171
- 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.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.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 +100 -90
- 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 +102 -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/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.ts +33 -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 +109 -14
- package/src/lang/parser.ts +9 -2
- package/src/lang/predicate-evaluator.test.ts +49 -0
- package/src/lang/predicate-report.test.ts +54 -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/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
|
-
|
|
1
|
+
var ks=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var Or=ks(($a,Ei)=>{Ei.exports={name:"tjs-lang",version:"0.9.0",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 wr 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}},z=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=k),(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 Wn(e,n,t,r,s){var o=[];t||(t=k),(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 Ft(e,n,t){t(e,n)}function we(e,n,t){}var k={};k.Program=k.BlockStatement=k.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")}};k.Statement=Ft;k.EmptyStatement=we;k.ExpressionStatement=k.ParenthesizedExpression=k.ChainExpression=function(e,n,t){return t(e.expression,n,"Expression")};k.IfStatement=function(e,n,t){t(e.test,n,"Expression"),t(e.consequent,n,"Statement"),e.alternate&&t(e.alternate,n,"Statement")};k.LabeledStatement=function(e,n,t){return t(e.body,n,"Statement")};k.BreakStatement=k.ContinueStatement=we;k.WithStatement=function(e,n,t){t(e.object,n,"Expression"),t(e.body,n,"Statement")};k.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)}};k.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")}};k.ReturnStatement=k.YieldExpression=k.AwaitExpression=function(e,n,t){e.argument&&t(e.argument,n,"Expression")};k.ThrowStatement=k.SpreadElement=function(e,n,t){return t(e.argument,n,"Expression")};k.TryStatement=function(e,n,t){t(e.block,n,"Statement"),e.handler&&t(e.handler,n),e.finalizer&&t(e.finalizer,n,"Statement")};k.CatchClause=function(e,n,t){e.param&&t(e.param,n,"Pattern"),t(e.body,n,"Statement")};k.WhileStatement=k.DoWhileStatement=function(e,n,t){t(e.test,n,"Expression"),t(e.body,n,"Statement")};k.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")};k.ForInStatement=k.ForOfStatement=function(e,n,t){t(e.left,n,"ForInit"),t(e.right,n,"Expression"),t(e.body,n,"Statement")};k.ForInit=function(e,n,t){e.type==="VariableDeclaration"?t(e,n):t(e,n,"Expression")};k.DebuggerStatement=we;k.FunctionDeclaration=function(e,n,t){return t(e,n,"Function")};k.VariableDeclaration=function(e,n,t){for(var r=0,s=e.declarations;r<s.length;r+=1){var o=s[r];t(o,n)}};k.VariableDeclarator=function(e,n,t){t(e.id,n,"Pattern"),e.init&&t(e.init,n,"Expression")};k.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")};k.Pattern=function(e,n,t){e.type==="Identifier"?t(e,n,"VariablePattern"):e.type==="MemberExpression"?t(e,n,"MemberPattern"):t(e,n)};k.VariablePattern=we;k.MemberPattern=Ft;k.RestElement=function(e,n,t){return t(e.argument,n,"Pattern")};k.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")}};k.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")}};k.Expression=Ft;k.ThisExpression=k.Super=k.MetaProperty=we;k.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")}};k.ObjectExpression=function(e,n,t){for(var r=0,s=e.properties;r<s.length;r+=1){var o=s[r];t(o,n)}};k.FunctionExpression=k.ArrowFunctionExpression=k.FunctionDeclaration;k.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")}};k.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")}};k.TemplateElement=we;k.UnaryExpression=k.UpdateExpression=function(e,n,t){t(e.argument,n,"Expression")};k.BinaryExpression=k.LogicalExpression=function(e,n,t){t(e.left,n,"Expression"),t(e.right,n,"Expression")};k.AssignmentExpression=k.AssignmentPattern=function(e,n,t){t(e.left,n,"Pattern"),t(e.right,n,"Expression")};k.ConditionalExpression=function(e,n,t){t(e.test,n,"Expression"),t(e.consequent,n,"Expression"),t(e.alternate,n,"Expression")};k.NewExpression=k.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")}};k.MemberExpression=function(e,n,t){t(e.object,n,"Expression"),e.computed&&t(e.property,n,"Expression")};k.ExportNamedDeclaration=k.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")};k.ExportAllDeclaration=function(e,n,t){e.exported&&t(e.exported,n),t(e.source,n,"Expression")};k.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")};k.ImportExpression=function(e,n,t){t(e.source,n,"Expression")};k.ImportSpecifier=k.ImportDefaultSpecifier=k.ImportNamespaceSpecifier=k.Identifier=k.PrivateIdentifier=k.Literal=we;k.TaggedTemplateExpression=function(e,n,t){t(e.tag,n,"Expression"),t(e.quasi,n,"Expression")};k.ClassDeclaration=k.ClassExpression=function(e,n,t){return t(e,n,"Class")};k.Class=function(e,n,t){e.id&&t(e.id,n,"Pattern"),e.superClass&&t(e.superClass,n,"Expression"),t(e.body,n)};k.ClassBody=function(e,n,t){for(var r=0,s=e.body;r<s.length;r+=1){var o=s[r];t(o,n)}};k.MethodDefinition=k.PropertyDefinition=k.Property=function(e,n,t){e.computed&&t(e.key,n,"Expression"),e.value&&t(e.value,n,"Expression")};var js=new Set(["parseInt","parseFloat","isNaN","isFinite","encodeURIComponent","decodeURIComponent","String","Number","Boolean","Array","Object","Eq","NotEq","Is","IsNot","TypeOf"]),vs=new Set(["Math","JSON","Object","Array","String","Number"]),As=new Set(["Math.random","Date.now"]);function Ln(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 Ps(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=Ln(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=Ln(e,t);if(o>0){n.length&&(n[n.length-1].hadUnbounded=!0),t+=o;continue}t++}return null}var Rs=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"]),qt=["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 Ms(e){let n=new Set(qt);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(qt),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=Ps(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)||js.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"&&vs.has(m.name)?As.has(`${m.name}.${u}`)&&c(`'${m.name}.${u}' is nondeterministic`,p):Rs.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 Cs(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 Jn(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=Jn(e),i=qt.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]=(...y)=>{c=s;try{return m(...y)}catch(g){throw g instanceof RangeError&&/stack/i.test(g.message)?new Le(s):g}}}return p}function Wt(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'); };${Jn(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 Ns(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 Is(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 Ut(e,n,t,r,s,o){let i=`__pred_${e}`,a=`function ${i}(${t}) { ${r} }`,c=Wt(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 Kn(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 Hn(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 $=_;for(;$<e.length&&c>0;){let T=e[$];T==="{"?c++:T==="}"&&c--,$++}c===0&&(p=e.slice(_,$-1),u=$)}let g=Ds(f).map(_=>{let $=Fs(e,i,_);return $?`${_}: ${$}`:_}),x={id:`__tjs_wasm_${s}`,body:f,fallback:p,captures:g,start:i,end:u};n.push(x);let E=p??f,S=g.map(_=>_.split(":")[0].trim()),b=S.length>0?S.join(", "):"",h=S.length>0?`globalThis.${x.id}(${b})`:`globalThis.${x.id}()`,w=`(globalThis.${x.id} ? ${h} : (() => {${E}})())`;t+=w,r=u,s++}else t+=e[r],r++}return{source:t,blocks:n}}function Yn(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 z(`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 y,g=p,x=e.slice(p).match(/^\s*:\s*(\w+)/);x&&(y=x[1],g=p+x[0].length);let E=e.slice(g).match(/^\s*\{/);if(!E){t+=e[r],r++;continue}let S=g+E[0].length,b=1,h=S;for(;h<e.length&&b>0;)e[h]==="{"?b++:e[h]==="}"&&b--,h++;if(b!==0){t+=e[r],r++;continue}let w=e.slice(S,h-1),_=Os(u),$=`__tjs_wasm_${a}`,T={id:$,name:a,returnType:y,body:w,captures:_,start:c,end:h};n.push(T);let j=_.map(C=>C.split(":")[0].trim()),A=`${i?"export ":""}function ${a}(${j.join(", ")}) { return globalThis.${$}(${j.join(", ")}) }`;t+=A,r=h}return{source:t,blocks:n}}function Xn(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 y=t.load(m,r);if(!y)return l;let g=new Map;for(let w of y.parseResult.wasmBlocks)w.name&&g.set(w.name,w);if(g.size===0)return l;let x=p.split(",").map(w=>w.trim()).filter(w=>w.length>0),E=[],S=[];for(let w of x){let _=w.match(/^(\w+)(?:\s+as\s+(\w+))?$/);if(!_){S.push(w);continue}let $=_[1],T=_[2]??_[1],j=g.get($);if(!j){S.push(w);continue}i(j,g);let P=j.captures.map(A=>A.split(":")[0].trim());E.push(`function ${T}(${P.join(", ")}) { return globalThis.${j.id}(${P.join(", ")}) }`)}let b=E.join(`
|
|
8
|
+
`);if(S.length===0)return b?`${f}${b}`:`${f}`;let h=`${f}import { ${S.join(", ")} } from '${m}'`;return b?`${h}
|
|
9
|
+
${f}${b}`:h}),blocks:s}}function Os(e){let n=e.trim();return n?n.split(",").map(t=>t.trim()).filter(t=>t.length>0):[]}function Bs(e){return e.startsWith("f32x4_")||e.startsWith("v128_")}function Ds(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"),y=new RegExp(`\\.${u}\\b`,"g"),g=n.match(m)?.length||0,x=n.match(y)?.length||0;g<=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)&&!Bs(u)&&p.push(u);return p.sort()}function Fs(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?Vn(a[1],t):void 0}return Vn(o[1],t)}function Vn(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 Qn(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*)/),y=m?m[1]:"",g=c.slice(y.length);o.push(y+";"+g);continue}}o.push(c)}return o.join(`
|
|
11
|
+
`)}function qs(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=qs(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=Ws(o,a),p=Us(o,a+2),u=o.slice(f,a).trim(),m=o.slice(a+2,p).trim();if(u&&m){let y=o.slice(0,f),g=o.slice(p),E=/[a-zA-Z0-9_$]$/.test(y)?" ":"";o=`${y}${E}${l}(${u}, ${m})${g}`}}return o}function Ws(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 Us(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 er(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,y=e[m],g=y===void 0||m>=e.length||y!=="="&&y!=="{";if(y==="="||y==="{")a=l[2],c=!0,i=m;else if(g){let x=l[0].trim(),E=l[0].slice(x.length);t+=`const ${o} = Type('${o}', ${x})${E}`,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 y=e.slice(i).match(/^\s*/);y&&(i+=y[0].length)}}if(e[i]==="{"){let m=i+1,y=1,g=m;for(;g<e.length&&y>0;){let _=e[g];_==="{"?y++:_==="}"&&y--,g++}if(y!==0){t+=e[r],r++;continue}let x=e.slice(m,g-1).trim(),E=g,S=x.match(/description\s*:\s*(['"`])([^]*?)\1/);S&&!c&&(a=S[2]);let b,h=x.match(/example\s*:\s*/);if(h){let _=h.index+h[0].length,$=br(x,_);$&&(b=$.value.trim())}let w=x.match(/predicate\s*\(([^)]*)\)\s*\{([^]*)\}/);if(w&&b){let _=w[1].trim(),$=w[2].trim(),T=f?`, ${f}`:"",j=`globalThis.__tjs?.validate(${_}, globalThis.__tjs?.infer(${b}))`,P=Ut(o,"Type",_,$,void 0,n),A=P?`(__g => (${_}) => (${j} ? __g(${_}) : false))(${P})`:`(${_}) => { if (!${j}) return false; ${$} }`;t+=`const ${o} = Type('${a}', ${A}, ${b}${T})`}else if(w){let _=w[1].trim(),$=w[2].trim(),T=f?`, undefined, ${f}`:"",P=Ut(o,"Type",_,$,void 0,n)??`(${_}) => { ${$} }`;t+=`const ${o} = Type('${a}', ${P}${T})`}else if(b){let _=f?`, ${f}`:"";t+=`const ${o} = Type('${a}', undefined, ${b}${_})`}else f?t+=`const ${o} = Type('${a}', ${f})`:t+=`const ${o} = Type('${a}')`;r=E;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 y=m[0];t+=`const ${o} = Type('${o}', ${y})`,r=i+m[0].length;continue}}}t+=e[r],r++}return t}function tr(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=Is(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/),y=[];f&&y.push(`params: ${f[1]}`),p&&y.push(`returns: ${p[1].trim()}`),u&&y.push(`returnContract: '${u[1]}'`);let g=m?m[2]:s;if(o){let x=o.split(",").map(S=>{let b=S.trim().split("=").map(h=>h.trim());if(b.length===2){let h=b[1]==="any"||b[1]==="undefined"?"null":b[1];return`['${b[0]}', ${h}]`}return`'${b[0]}'`}),E=o.split(",").map(S=>S.trim().split("=")[0].trim());n+=`const ${s} = FunctionPredicate('${g}', [${x.join(", ")}], (${E.join(", ")}) => ({ ${y.join(", ")} }))`}else n+=`const ${s} = FunctionPredicate('${g}', { ${y.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 nr(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 b=e[f];b==="{"?l++:b==="}"&&l--,f++}if(l!==0){t+=e[r],r++;continue}let p=e.slice(c,f-1).trim(),u=f,m=i.split(",").map(b=>{let h=b.trim().split("=").map(w=>w.trim());if(h.length===2){let w=h[1]==="any"||h[1]==="undefined"?"null":h[1];return`['${h[0]}', ${w}]`}return`'${h[0]}'`}),y=p,g=y.search(/\bdeclaration\s*\{/);if(g!==-1){let b=y.indexOf("{",g),h=1,w=b+1;for(;w<y.length&&h>0;)y[w]==="{"?h++:y[w]==="}"&&h--,w++;y=y.slice(0,g)+y.slice(w)}let x=y.match(/description\s*:\s*(['"`])([^]*?)\1/),E=y.match(/predicate\s*\(([^)]*)\)\s*\{([^]*)\}/),S=x?x[2]:o;if(E){let b=E[1].trim().split(",").map(A=>A.trim()),h=E[2].trim(),w=b[0]||"x",_=b.slice(1),$=_.map(A=>`check${A}`);_.forEach((A,C)=>{h=h.replace(new RegExp(`\\b${A}\\s*\\(`,"g"),`${$[C]}(`)});let T=[w,...$].join(", "),P=Ut(o,"Generic",T,h,$,n)??`(${T}) => { ${h} }`;t+=`const ${o} = Generic([${m.join(", ")}], ${P}, '${S}')`}else t+=`const ${o} = Generic([${m.join(", ")}], () => true, '${S}')`;r=u;continue}t+=e[r],r++}return t}function rr(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 sr(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 y=e[l];y==="{"?c++:y==="}"&&c--,l++}if(c!==0){n+=e[t],t++;continue}let f=e.slice(a,l-1).trim(),p=l,m=Ls(f).map(([y,g])=>`${y}: ${g}`).join(", ");n+=`const ${s} = Enum('${o}', { ${m} })`,t=p;continue}n+=e[t],t++}return n}function Ls(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 ir(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 b=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 b=m.slice(u).match(/^(\s*)(async\s+)?(\w+)\s*\(/);if(!b){u++;continue}let h=b[1],w=!!b[2],_=b[3],$=u+b[0].length-1,T=1,j=$+1;for(;j<m.length&&T>0;)m[j]==="("&&T++,m[j]===")"&&T--,j++;let P=m.slice($+1,j-1),A=j;for(;A<m.length&&/\s/.test(m[A]);)A++;if(m[A]==="="&&m[A+1]===">"){let V=pe(e,c+1+u);throw new z(`Arrow functions are not allowed in extend blocks (method '${_}' in extend ${a}). Use regular function syntax instead, as extension methods need 'this' binding.`,V)}if(m[A]!=="{"){u++;continue}let C=Ve(m,A),R=m.slice(u,C).trim(),I=P.split(",").map(V=>V.trim()).filter(V=>V.length>0).map(V=>{let X=V.match(/^(\w+)\s*:\s*(.+)$/);return X?`${X[1]} = ${X[2]}`:V}).join(", "),B=w?"async ":"",J=m.slice(A+1,C-1);p.push({name:_,isAsync:w,fullText:`${_}: ${B}function(${I}) {${J}}`}),u=C}let y=!n.has(a);y&&n.set(a,new Set);let g=n.get(a);for(let S of p)g.add(S.name);let x=p.map(S=>` ${S.fullText}`).join(`,
|
|
12
16
|
`),E;y?E=`${i}const __ext_${a} = {
|
|
13
|
-
${
|
|
17
|
+
${x}
|
|
14
18
|
${i}}
|
|
15
19
|
`:E=`${i}Object.assign(__ext_${a}, {
|
|
16
|
-
${
|
|
20
|
+
${x}
|
|
17
21
|
${i}})
|
|
18
|
-
`;for(let
|
|
19
|
-
`;t+=E,r=l}return r<=e.length&&t.length<e.length,{source:t,extensions:n}}function
|
|
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
|
-
${
|
|
23
|
-
${
|
|
22
|
+
`;for(let S of p)E+=`${i}if (__tjs?.registerExtension) { __tjs.registerExtension('${a}', '${S.name}', __ext_${a}.${S.name}) }
|
|
23
|
+
`;t+=E,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),y=r.slice(c+i.length);y[0]===")"?r=`${m}__ext_Array.${s}.call(${u})${y.slice(1)}`:r=`${m}__ext_Array.${s}.call(${u}, ${y}`}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 or(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 Lt(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=Gn(s.trim(),n);l&&t.push(l),s="";continue}s+=c}let i=s.trim();if(i){let a=Gn(i,n);a&&t.push(a)}return t}function Gn(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 ar(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],y=o.index,g=y,E=o[0].indexOf("function");E>=0&&(g=y+E),i.push({name:m,fullMatchStart:y,funcKeywordStart:g,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,y=u+1;for(;y<e.length&&m>0;)e[y]==="("&&m++,e[y]===")"&&m--,y++;let g=y-1,x=e.slice(u+1,g),E=y;for(;E<e.length&&e[E]!=="{";)E++;if(E>=e.length)continue;let S=Ve(e,E),b=p.fullMatchStart;for(;b>0&&e[b-1]===" ";)b--;let h=s.get(p.name),w=Lt(x,n);if(x.includes("...")){let $=pe(e,p.funcKeywordStart);throw new z(`Rest parameters are not supported in polymorphic function '${p.name}'. Use separate function names instead.`,$)}h.push({index:h.length+1,start:b,end:S,text:e.slice(b,S),exported:p.exported,isAsync:p.isAsync,params:w})}for(let[p,u]of s){if(u.length<2)continue;let m=u.filter(y=>y.isAsync).length;if(m>0&&m<u.length){let y=pe(e,u[0].start);throw new z(`Polymorphic function '${p}': all variants must be either sync or async, not mixed.`,y)}for(let y=0;y<u.length;y++)for(let g=y+1;g<u.length;g++){let x=u[y],E=u[g];if(x.params.length!==E.params.length)continue;let S=!0;for(let b=0;b<x.params.length;b++){let h=x.params[b].defaultValue?pt(x.params[b].defaultValue):"any",w=E.params[b].defaultValue?pt(E.params[b].defaultValue):"any";if(h!==w){S=!1;break}}if(S){let b=pe(e,E.start);throw new z(`Polymorphic function '${p}': variants ${y+1} and ${g+1} have ambiguous signatures (same parameter types at every position). Overloads must differ by arity or parameter types.`,b)}}}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 ":"",y=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)+y+f.slice(u.end)}for(let[p,u]of s){if(u.length<2)continue;t.add(p);let m=u[0].isAsync,y=u.some(h=>h.exported),g=m?"async ":"",x=y?"export ":"",E=[...u].sort((h,w)=>{if(h.params.length!==w.params.length)return 0;let _=0,$=0;for(let T of h.params){let j=T.defaultValue?pt(T.defaultValue):"any";j==="non-negative-integer"?_+=3:j==="integer"?_+=2:j!=="any"&&(_+=1)}for(let T of w.params){let j=T.defaultValue?pt(T.defaultValue):"any";j==="non-negative-integer"?$+=3:j==="integer"?$+=2:j!=="any"&&($+=1)}return $-_}),S=[];for(let h of E){let w=[`__args.length === ${h.params.length}`],_=[];for(let $=0;$<h.params.length;$++){let T=h.params[$];if(_.push(`__args[${$}]`),T.defaultValue){let j=or(`__args[${$}]`,T.defaultValue);j!=="true"&&w.push(j)}}S.push(` if (${w.join(" && ")}) return ${p}$${h.index}(${_.join(", ")})`)}let b=`
|
|
26
|
+
${x}${g}function ${p}(...__args) {
|
|
27
|
+
${S.join(`
|
|
24
28
|
`)}
|
|
25
|
-
return __tjs.typeError('${
|
|
29
|
+
return __tjs.typeError('${p}', 'no matching overload', __args)
|
|
26
30
|
}
|
|
27
|
-
`;
|
|
28
|
-
`,m);m=E===-1?e.length:E+1;continue}if(
|
|
29
|
-
${
|
|
30
|
-
`.repeat(
|
|
31
|
-
`&&$--,E=E.slice(0,$)+E.slice(
|
|
32
|
-
function ${c}$ctor$${
|
|
33
|
-
const __obj = Object.create(${c}.prototype)`,
|
|
34
|
-
;(function() {${
|
|
35
|
-
return __obj`,
|
|
31
|
+
`;f+=b}return{source:f,polymorphicNames:t}}function cr(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 lr(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,y=null,g=!1;for(;m<e.length&&u>0;){let x=e[m];if(g){g=!1,m++;continue}if(x==="\\"&&y){g=!0,m++;continue}if(y){x===y&&(y=null),m++;continue}if(x==="/"&&e[m+1]==="/"){let E=e.indexOf(`
|
|
32
|
+
`,m);m=E===-1?e.length:E+1;continue}if(x==="/"&&e[m+1]==="*"){let E=e.indexOf("*/",m+2);m=E===-1?e.length:E+2;continue}if(x==="'"||x==='"'||x==="`"){y=x,m++;continue}x==="{"?u++:x==="}"&&u--,m++}if(u===0){let x=e.slice(p,m-1).trim(),E=m,S=(e.slice(0,a).match(/\n/g)||[]).length+1;if(t.push({description:l,body:x,start:a,end:E,line:S}),!n)try{new Function(x)()}catch(w){let _=l||`test at line ${S}`;r.push(`Test failed: ${_} (line ${S})
|
|
33
|
+
${w.message||w}`)}let h=(e.slice(a,E).match(/\n/g)||[]).length;s+=`
|
|
34
|
+
`.repeat(h),o=E;continue}}}s+=e[o],o++}return{source:s,tests:t,errors:r}}function ur(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,y,g=[];for(;(y=m.exec(u))!==null;)g.push(y.index);if(g.length<2)continue;t.add(c);let x=[];for(let w=0;w<g.length;w++){let _=g[w],$=u.indexOf("(",_),T=1,j=$+1;for(;j<u.length&&T>0;)u[j]==="("&&T++,u[j]===")"&&T--,j++;let P=u.slice($+1,j-1),A=j;for(;A<u.length&&u[A]!=="{";)A++;let C=Ve(u,A),R=u.slice(A+1,C-1);x.push({index:w+1,paramStr:P,bodyText:R,fullStart:_,fullEnd:C})}let E=u;for(let w=x.length-1;w>=1;w--){let _=x[w],$=_.fullStart;for(;$>0&&E[$-1]===" ";)$--;$>0&&E[$-1]===`
|
|
35
|
+
`&&$--,E=E.slice(0,$)+E.slice(_.fullEnd)}let S="";for(let w=1;w<x.length;w++){let _=x[w],$=Lt(_.paramStr,n);if(_.paramStr.includes("...")){let j=pe(e,f+_.fullStart);throw new z(`Rest parameters are not supported in polymorphic constructors for '${c}'.`,j)}S+=`
|
|
36
|
+
function ${c}$ctor$${_.index}(${_.paramStr}) {`,S+=`
|
|
37
|
+
const __obj = Object.create(${c}.prototype)`,S+=`
|
|
38
|
+
;(function() {${_.bodyText}}).call(__obj)`,S+=`
|
|
39
|
+
return __obj`,S+=`
|
|
36
40
|
}
|
|
37
|
-
`}let
|
|
41
|
+
`}let b=[];for(let w=0;w<x.length;w++){let _=x[w],$=Lt(_.paramStr,n),T=[`a.length === ${$.length}`];for(let j=0;j<$.length;j++){let P=$[j];if(P.defaultValue){let A=or(`a[${j}]`,P.defaultValue);A!=="true"&&T.push(A)}}if(w===0)b.push(` if (${T.join(" && ")}) return Reflect.construct(t, a)`);else{let j=$.map((P,A)=>`a[${A}]`).join(", ");b.push(` if (${T.join(" && ")}) return ${c}$ctor$${_.index}(${j})`)}}S+=`
|
|
38
42
|
function ${c}$dispatch(t, a) {
|
|
39
|
-
`,
|
|
43
|
+
`,S+=b.join(`
|
|
40
44
|
`)+`
|
|
41
|
-
`,
|
|
42
|
-
`,
|
|
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
|
|
48
|
-
`})(),
|
|
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
|
-
`),y=m.filter(
|
|
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
|
|
45
|
+
`,S+=` return __tjs.typeError('${c}', 'no matching constructor', a)
|
|
46
|
+
`,S+=`}
|
|
47
|
+
`,i=i.slice(0,f)+E+i.slice(p);let h=f+E.length;i=i.slice(0,h)+S+i.slice(h)}return{source:i,polyCtorClasses:t}}function fr(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 pr(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 mr(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 dr(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 yr(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 gr(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=Js(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 Js(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=Zn(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=Zn(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 Zn(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 hr(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 g=m+1;for(;g<e.length&&/[ \t]/.test(e[g]);)g++;let x=Vs(e,g);if(x>g){let E=e.slice(g,x).trim();n.set(u,E),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 Vs(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 gt(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 b=t.trimEnd();if(!b[b.length-1]||/[=(!,;:{[&|?+\-*%<>~^]$/.test(b)||/\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)\s*$/.test(b)){t+=u,r++,i="regex";continue}}break}if(u==="{"){l++,t+=u,r++;continue}if(u==="}"){l--;let b=c[c.length-1];b&&l===b.braceDepth&&c.pop(),t+=u,r++;continue}let y=e.slice(r).match(/^class\s+\w+(?:\s+extends\s+\w+)?\s*\{/);if(y){let b=y[0].slice(0,-1);t+=b,r+=b.length,c.push({type:"class-body",braceDepth:l});continue}let g=e.slice(r).match(/^function\s+(\w+)\s*\(/);if(g){let b=g[1],h=g[0].length,w=e[r+h],_,$=r+h;(w==="?"||w==="!")&&(_=w,$++,_==="!"?n.unsafeFunctions.add(b):n.safeFunctions.add(b)),t+=`function ${b}(`,r=$;let T=mt(e,r,"(",")");if(!T){t+=e[r],r++;continue}let{content:j,endPos:P}=T;r=P;let A=Vt(j,n,!0);t+=A+")";let C=r;for(;C<e.length&&/\s/.test(e[C]);)C++;if(e[C]===":"){let I=e.slice(C,C+2),B;for(I===":?"||I===":!"?(C+=2,B=I===":?"?"safe":"unsafe"):C+=1;C<e.length&&/\s/.test(e[C]);)C++;let J=Jt(e,C);J&&(s===void 0&&(s=J.type,B&&(o=B)),r=J.endPos)}let R=r;for(;R<e.length&&/\s/.test(e[R]);)R++;if(e[R]==="="&&e[R+1]===">")throw new z("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*\(/),E=(()=>{for(let b=t.length-1;b>=0;b--)if(!/\s/.test(t[b]))return t[b];return`
|
|
52
|
+
`})(),S=E!=="="&&E!==","&&E!=="("&&E!=="["&&E!==">";if(x&&p()&&!S){let b=x[1].length;t+=e.slice(r,r+b),r+=b;continue}if(x&&p()&&S){let b=x[1],h=x[0].length,w=r+h;t+=b+"(",r=w;let _=mt(e,r,"(",")");if(!_){t+=e[r],r++;continue}let{content:$,endPos:T}=_;r=T;let j=Vt($,n,!0);t+=j+")";let P=r;for(;P<e.length&&/\s/.test(e[P]);)P++;if(e[P]===":"){let C=e.slice(P,P+2);for(C===":?"||C===":!"?P+=2:P++;P<e.length&&/\s/.test(e[P]);)P++;let R=Jt(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 z("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 b=mt(e,r+1,"(",")");if(!b){t+=e[r],r++;continue}let h=b.content,w=b.endPos,_=w;for(;_<e.length&&/\s/.test(e[_]);)_++;let $;if(e[_]===":"){let T=e.slice(_,_+2);for(T===":?"||T===":!"?_+=2:_++;_<e.length&&/\s/.test(e[_]);)_++;let j=Jt(e,_);if(j)for($=j.type,_=j.endPos;_<e.length&&/\s/.test(e[_]);)_++}if(e.slice(_,_+2)==="=>"){let T=null,j=h,P=h.trimStart();P.startsWith("?")&&(P.length===1||/\s/.test(P[1]))?(T="?",j=P.slice(1)):P.startsWith("!")&&(P.length===1||/\s/.test(P[1]))&&(T="!",j=P.slice(1));let A=Vt(j,n,!1);for(t+=`(${T==="?"?"/* safe */ ":T==="!"?"/* unsafe */ ":""}${A})`,r=w;r<_&&/\s/.test(e[r]);)t+=e[r],r++;$&&(r=_)}else{let T=gt(h,n);t+=`(${T.source})`,r=w}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 br(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 Jt(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 Vt(e,n,t){let r=gt(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`{ ${xr(m,n)} }`}if(t&&f.startsWith("[")&&f.endsWith("]")){let m=f.slice(1,-1);return`[ ${xr(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,y]=p;return a(m),o=!0,`${m} = ${y}`}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(),y=f.slice(u+1).trim();return a(m),o&&t&&/^\w+$/.test(m),t&&/^\w+$/.test(m)&&n.requiredParams.add(m),`${m} = ${y}`}return l}).join(",")}function xr(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=yt(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}: ${yt(u)}`}let l=o.match(/^(\w+)\s*=\s*(\[[\s\S]*\])$/);if(l){let[,p,u]=l;return`${p}: ${yt(u)}`}let f=o.match(/^(\w+)\s*=\s*([\s\S]+)$/);if(f){let[,p,u]=f;return`${p}: ${u}`}return s}).join(", ")} }`}function yt(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("]")?yt(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 zt(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}:{tjsEquals:!0,tjsClass:!0,tjsDate:!0,tjsNoeval:!0,tjsStandard:!0,tjsSafeEval:!1,tjsNoVar:!0,tjsSafeAssign:!0};c&&(r="none");let f=e.match(/^(\s*(?:\/\/[^\n]*\n|\/\*[\s\S]*?\*\/\s*)*)\s*safety\s+(none|inputs|all)\b/);f&&(r=f[2],e=e.replace(/^(\s*(?:\/\/[^\n]*\n|\/\*[\s\S]*?\*\/\s*)*)\s*safety\s+(none|inputs|all)\s*/,"$1"));let p=/^(\s*(?:\/\/[^\n]*\n|\/\*[\s\S]*?\*\/\s*)*)\s*(TjsStrict|TjsCompat|TjsEquals|TjsClass|TjsDate|TjsNoeval|TjsNoVar|TjsStandard|TjsSafeEval|TjsSafeAssign)\b/,u;for(;u=e.match(p);){let A=u[2];A==="TjsStrict"?(l.tjsEquals=!0,l.tjsClass=!0,l.tjsDate=!0,l.tjsNoeval=!0,l.tjsNoVar=!0,l.tjsStandard=!0,l.tjsSafeAssign=!0):A==="TjsCompat"?(l.tjsEquals=!1,l.tjsClass=!1,l.tjsDate=!1,l.tjsNoeval=!1,l.tjsNoVar=!1,l.tjsStandard=!1,l.tjsSafeEval=!1,l.tjsSafeAssign=!1):A==="TjsEquals"?l.tjsEquals=!0:A==="TjsClass"?l.tjsClass=!0:A==="TjsDate"?l.tjsDate=!0:A==="TjsNoeval"?l.tjsNoeval=!0:A==="TjsNoVar"?l.tjsNoVar=!0:A==="TjsStandard"?l.tjsStandard=!0:A==="TjsSafeEval"?l.tjsSafeEval=!0:A==="TjsSafeAssign"&&(l.tjsSafeAssign=!0),e=e.replace(new RegExp(`^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*${A}\\s*`),"$1")}e=zt(e),l.tjsStandard&&(e=Qn(e)),e=mr(e),e=gr(e);let m=hr(e);e=m.source;let y=m.annotations,g=Yn(e);e=g.source,e=ze(e),l.tjsEquals&&!n.vmTarget&&(e=Ge(e));let x=[];e=er(e,x),e=nr(e,x),e=tr(e),e=rr(e),e=sr(e),l.tjsSafeAssign&&(e=cr(e));let E=Xn(e,{loader:n.moduleLoader,importerPath:n.filename});e=E.source;let{source:S,returnType:b,returnSafety:h}=gt(e,{originalSource:t,requiredParams:s,unsafeFunctions:o,safeFunctions:i});e=S;let w=ir(e);e=w.source,e=Kn(e);let _=ar(e,s);e=_.source;let $=Hn(e);e=$.source;let T=[...g.blocks,...E.blocks,...$.blocks],j=lr(e,n.dangerouslySkipTests);e=j.source;let P=ur(e,s);e=P.source;for(let A of P.polyCtorClasses)o.add(`${A}$dispatch`);return l.tjsClass&&(e=fr(e,P.polyCtorClasses)),l.tjsDate&&(e=pr(e)),l.tjsNoeval&&(e=yr(e)),l.tjsNoVar&&(e=dr(e)),e=Ze(e,w.extensions),{source:e,returnType:b,returnSafety:h,moduleSafety:r,tjsModes:l,originalSource:t,requiredParams:s,unsafeFunctions:o,safeFunctions:i,wasmBlocks:T,tests:j.tests,testErrors:j.errors,polymorphicNames:_.polymorphicNames,extensions:w.extensions,letAnnotations:y,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:y,tests:g,testErrors:x,letAnnotations:E,tjsModes:S}=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}};try{return{ast:wr.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:y,tests:g,testErrors:x,letAnnotations:E,tjsModes:S}}catch(b){let h=b.loc||{line:1,column:0};throw new z(b.message.replace(/\s*\(\d+:\d+\)$/,""),h,f,t)}}function $r(e,n){for(let o of e.body){if(o.type==="ImportDeclaration")throw new z("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 z("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 z("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 z("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 z("Helper function must have a name",i.loc?.start||{line:1,column:0},void 0,n);if(s.has(a))throw new z(`Duplicate helper function name: ${a}`,i.loc?.start||{line:1,column:0},void 0,n);if(a===r.id?.name)throw new z(`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
|
+
`),y=m.filter(g=>g.trim().length>0).reduce((g,x)=>{let E=x.match(/^(\s*)/)?.[1].length||0;return Math.min(g,E)},1/0);return y>0&&y<1/0&&(u=m.map(g=>g.slice(y)).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 Gs}from"acorn";function Y(e){switch(e.type){case"Literal":{let n=e.value;if(n===null)return{kind:"null"};if(typeof n=="string")return{kind:"string"};if(typeof n=="number"){let t=e.raw;return t&&t.includes(".")?{kind:"number"}:{kind:"integer"}}return typeof n=="boolean"?{kind:"boolean"}:{kind:"any"}}case"ArrayExpression":{let n=e.elements;if(n.length===0)return{kind:"array",items:{kind:"any"}};let t=n.filter(i=>i!=null).map(i=>Y(i));if(t.length===0)return{kind:"array",items:{kind:"any"}};let r=new Map;for(let i of t){let a=JSON.stringify(i);r.has(a)||r.set(a,i)}let s=[...r.values()];return{kind:"array",items:s.length===1?s[0]:{kind:"union",members:s}}}case"ObjectExpression":{let n=e.properties,t={};for(let r of n)if(r.type==="Property"&&r.key.type==="Identifier"){let s=r.key.name;t[s]=Y(r.value)}return{kind:"object",shape:t}}case"LogicalExpression":{let{operator:n,left:t,right:r}=e;return n==="||"?Y(t):n==="&&"||n==="??"?Y(r):{kind:"any"}}case"BinaryExpression":{let{operator:n,left:t,right:r}=e;if(n==="|"){let s=Y(t),o=Y(r);return o.kind==="null"?{...s,nullable:!0}:s.kind==="null"?{...o,nullable:!0}:{kind:"union",members:[s,o]}}return{kind:"any"}}case"Identifier":return e.name==="undefined"?{kind:"undefined"}:{kind:"any"};case"ArrowFunctionExpression":case"FunctionExpression":{let n=e,t=n.params.map(s=>Zs(s)),r={kind:"any"};return n.type==="ArrowFunctionExpression"&&n.body&&n.body.type!=="BlockStatement"&&(r=Y(n.body)),{kind:"function",params:t,returns:r}}case"UnaryExpression":{let n=e.operator,t=e.argument;if(n==="+"&&t.type==="Literal"&&typeof t.value=="number")return{kind:"non-negative-integer"};if(n==="-"&&t.type==="Literal"&&typeof t.value=="number"){let s=t.raw;return s&&s.includes(".")?{kind:"number"}:{kind:"integer"}}return{kind:"any"}}default:return{kind:"any"}}}function Zs(e){return e.type==="Identifier"?{name:e.name,type:{kind:"any"}}:e.type==="AssignmentPattern"&&e.left?.type==="Identifier"?{name:e.left.name,type:Y(e.right)}:e.type==="RestElement"&&e.argument?.type==="Identifier"?{name:`...${e.argument.name}`,type:{kind:"array",items:{kind:"any"}}}:{name:"?",type:{kind:"any"}}}function ge(e,n){if(e.type==="Identifier")return{name:e.name,type:{kind:"any"},required:!0};if(e.type==="AssignmentPattern"){let{left:t,right:r}=e;if(t.type!=="Identifier")throw new W("Only simple parameter names are supported",U(e));let s=t.name,o=n?.has(s)??!1,i=Y(r),a=ce(r);return{name:s,type:i,required:o,default:o?null:a,example:a,loc:{start:e.start,end:e.end}}}if(e.type==="ObjectPattern"){let t=e.properties,r={},s={};for(let o of t)if(o.type==="Property"){let i=o.key.type==="Identifier"?o.key.name:String(o.key.value);if(o.value.type==="Identifier")r[i]={kind:"any"},s[i]={name:i,type:{kind:"any"},required:!0};else if(o.value.type==="AssignmentPattern"){let a=ge(o.value,n),c=n?.has(i)??!1;r[i]=a.type,s[i]={name:i,type:a.type,required:c,default:c?null:a.example,example:a.example}}}return{name:"__destructured__",type:{kind:"object",shape:r,destructuredParams:s},required:!0}}throw new W(`Unsupported parameter pattern: ${e.type}`,U(e))}function ce(e){switch(e.type){case"Literal":return e.value;case"ArrayExpression":return e.elements.map(n=>n?ce(n):null);case"ObjectExpression":{let n={};for(let t of e.properties)t.type==="Property"&&t.key.type==="Identifier"&&(n[t.key.name]=ce(t.value));return n}case"UnaryExpression":if(e.operator==="-"){let n=ce(e.argument);return typeof n=="number"?-n:void 0}if(e.operator==="+"){let n=ce(e.argument);return typeof n=="number"?+n:void 0}return;case"BinaryExpression":{let{operator:n,left:t}=e;return n==="|"?ce(t):void 0}case"LogicalExpression":{let{operator:n,left:t,right:r}=e;return n==="&&"&&t.type==="Literal"&&t.value===null?null:n==="||"||n==="??"?ce(t)??ce(r):void 0}default:return}}function Sr(e){try{let n=Gs(e,0,{ecmaVersion:2022});return Y(n)}catch{return{kind:"any"}}}function Gt(e){switch(e.kind){case"string":return e.nullable?"string | null":"string";case"number":return e.nullable?"number | null":"number";case"integer":return e.nullable?"integer | null":"integer";case"non-negative-integer":return e.nullable?"non-negative integer | null":"non-negative integer";case"boolean":return e.nullable?"boolean | null":"boolean";case"null":return"null";case"any":return"any";case"array":{let n=e.items?Gt(e.items):"any";return e.nullable?`${n}[] | null`:`${n}[]`}case"object":{if(!e.shape||Object.keys(e.shape).length===0)return e.nullable?"object | null":"object";let n=Object.entries(e.shape).map(([t,r])=>`${t}: ${Gt(r)}`).join(", ");return e.nullable?`{ ${n} } | null`:`{ ${n} }`}case"union":return e.members?.map(Gt).join(" | ")||"any";default:return"any"}}function xt(e){switch(e.kind){case"string":return{type:"string"};case"number":return{type:"number"};case"boolean":return{type:"boolean"};case"null":return{};case"undefined":return{};case"any":return{};case"array":return{type:"array",items:e.items?xt(e.items):{}};case"object":if(e.shape){let n={};for(let[t,r]of Object.entries(e.shape))n[t]=xt(r);return{type:"object",properties:n,additionalProperties:!1}}return{type:"object"};case"union":return e.members?{oneOf:e.members.map(xt)}:{};default:return{}}}function Ks(e){let n={},t=[];for(let[r,s]of Object.entries(e))n[r]=xt(s.type),s.required&&t.push(r);return{type:"object",properties:n,required:t.length>0?t:void 0,additionalProperties:!1}}function Zt(e,n,t,r={},s,o){let i=He(n,e),a=new Map;for(let S of e.params){let b=ge(S,s);if(b.name==="__destructured__"&&b.type.kind==="object"&&b.type.destructuredParams)for(let[h,w]of Object.entries(b.type.destructuredParams))a.set(h,{...w,description:i.params[h]});else b.description=i.params[b.name],a.set(b.name,b)}let c;t&&(c=Sr(t));let l={depth:0,locals:new Map,parameters:a,atoms:new Set(Object.keys(r.atoms||{})),warnings:[],source:n,filename:r.filename||"<source>",options:r,helpers:o,helperSteps:o?new Map:void 0,helperTransforming:o?new Set:void 0},f=oe(e.body,l),p=[],u=[],m=[];for(let[S,b]of a.entries())b.required?u.push(S):b.default!==void 0?m.push({name:S,defaultValue:b.default}):u.push(S);u.length>0&&p.push({op:"varsImport",keys:u});for(let{name:S,defaultValue:b}of m)p.push({op:"varsImport",keys:[S]}),p.push({op:"if",condition:{$expr:"binary",op:"==",left:{$expr:"ident",name:S},right:{$expr:"literal",value:null}},then:[{op:"varSet",key:S,value:b}]});p.push(...f);let y=Object.fromEntries(a),g={name:e.id?.name||"anonymous",description:i.description,parameters:y,returns:c},x=Ks(y),E=l.helperSteps&&l.helperSteps.size>0?Object.fromEntries(l.helperSteps):void 0;return{ast:{op:"seq",steps:p,inputSchema:x,...E&&{helpers:E}},signature:g,warnings:l.warnings}}function oe(e,n){let t=[];for(let r of e.body){let s=Ye(r,n);s&&(Array.isArray(s)?t.push(...s):t.push(s))}return t}function Ye(e,n){switch(e.type){case"VariableDeclaration":return Hs(e,n);case"ExpressionStatement":return Ys(e,n);case"IfStatement":return Qs(e,n);case"WhileStatement":return ei(e,n);case"ForOfStatement":return ti(e,n);case"TryStatement":return ni(e,n);case"ReturnStatement":return ri(e,n);case"ThrowStatement":throw new W("'throw' is not supported in AsyncJS. Use Error('message') to trigger error flow",U(e),n.source,n.filename);case"BlockStatement":return{op:"scope",steps:oe(e,re(n))};case"EmptyStatement":return null;default:throw new W(`Unsupported statement type: ${e.type}`,U(e),n.source,n.filename)}}function Hs(e,n){let t=[],r=e.kind==="const",s=r?"constSet":"varSet";for(let o of e.declarations){if(o.id.type!=="Identifier")throw new W("Only simple variable names are supported",U(o),n.source,n.filename);let i=o.id.name;if(o.init){let{step:a,resultVar:c}=Ee(o.init,n,i,r);a?t.push(a):c!==i&&t.push({op:s,key:i,value:c});let l=Y(o.init);n.locals.set(i,l)}else{if(r)throw new W("const declarations must be initialized",U(o),n.source,n.filename);t.push({op:"varSet",key:i,value:null}),n.locals.set(i,{kind:"any",nullable:!0})}}return t}function Ys(e,n){let t=e.expression;if(t.type==="AssignmentExpression")return Xs(t,n);if(t.type==="CallExpression"){let{step:r,resultVar:s}=Ee(t,n);return r||(s?{op:"varSet",key:"_",value:s}:null)}return n.warnings.push({message:"Expression statement has no effect",line:U(e).line,column:U(e).column}),null}function Xs(e,n){if(e.left.type!=="Identifier")throw new W("Only simple variable assignment is supported",U(e),n.source,n.filename);let t=e.left.name,{step:r,resultVar:s}=Ee(e.right,n,t);return r||{op:"varSet",key:t,value:s}}function Qs(e,n){let t=F(e.test,n),r=e.consequent.type==="BlockStatement"?oe(e.consequent,re(n)):[Ye(e.consequent,n)].filter(Boolean),s;return e.alternate&&(s=e.alternate.type==="BlockStatement"?oe(e.alternate,re(n)):[Ye(e.alternate,n)].filter(Boolean)),{op:"if",condition:t,then:r,...s&&{else:s}}}function ei(e,n){let t=F(e.test,n),r=e.body.type==="BlockStatement"?oe(e.body,re(n)):[Ye(e.body,n)].filter(Boolean);return{op:"while",condition:t,body:r}}function ti(e,n){let t;if(e.left.type==="VariableDeclaration"){let i=e.left.declarations[0];if(i.id.type!=="Identifier")throw new W("Only simple variable names are supported in for...of",U(e.left),n.source,n.filename);t=i.id.name}else if(e.left.type==="Identifier")t=e.left.name;else throw new W("Unsupported for...of left-hand side",U(e.left),n.source,n.filename);let r=K(e.right,n),s=re(n);s.locals.set(t,{kind:"any"});let o=e.body.type==="BlockStatement"?oe(e.body,s):[Ye(e.body,s)].filter(Boolean);return{op:"map",items:r,as:t,steps:o}}function ni(e,n){let t=oe(e.block,re(n)),r,s;if(e.handler){let o=re(n);e.handler.param?.type==="Identifier"&&(s=e.handler.param.name,o.locals.set(s,{kind:"any"})),r=oe(e.handler.body,o)}return{op:"try",try:t,...r&&{catch:r},...s&&{catchParam:s}}}function ri(e,n){if(!e.argument)return{op:"return",value:{}};let{step:t,resultVar:r}=Ee(e.argument,n,"__returnVal__");return t?[t,{op:"return",value:r}]:{op:"return",value:K(e.argument,n)}}var Tr=new Set(["Math","JSON","Array","Object","String","Number","console","Date","Schema"]),si=new Set(["parseInt","parseFloat","isNaN","isFinite","encodeURI","decodeURI","encodeURIComponent","decodeURIComponent","Set","Date","filter"]),Xe=new Set(["RegExp","Promise","Map","WeakSet","WeakMap","Symbol","Proxy","Reflect","Function","eval","setTimeout","setInterval","fetch","require","import","process","window","document","global","globalThis"]),ii=new Set(["toUpperCase","toLowerCase","trim","trimStart","trimEnd","charAt","charCodeAt","codePointAt","concat","includes","indexOf","lastIndexOf","startsWith","endsWith","slice","substring","substr","replace","replaceAll","match","search","padStart","padEnd","repeat","normalize","localeCompare","toString","valueOf","at","reverse","sort","fill","copyWithin","flat","flatMap","every","some","forEach","add","remove","has","clear","toArray","union","intersection","diff","format","isBefore","isAfter"]);function oi(e){if(e.callee.type==="Identifier"){let n=e.callee.name;return si.has(n)||Xe.has(n)}if(e.callee.type==="MemberExpression"){let n=e.callee;if(n.object.type==="Identifier"){let t=n.object.name;if(Tr.has(t)||Xe.has(t))return!0}if(n.property.type==="Identifier"){let t=n.property.name;if(ii.has(t))return!0}}return!1}function ai(e){if(e.object.type==="Identifier"){let n=e.object.name;return Tr.has(n)||Xe.has(n)}return!1}var Er={RegExp:"RegExp is not available. Use string methods or the regexMatch atom.",Promise:"Promise is not needed. All operations are implicitly async.",Map:"Map is not available. Use plain objects instead.",WeakSet:"WeakSet is not available.",WeakMap:"WeakMap is not available.",Symbol:"Symbol is not available.",Proxy:"Proxy is not available.",Reflect:"Reflect is not available.",Function:"Function constructor is not available. Define functions normally.",eval:"eval is not available. Code is compiled, not evaluated.",setTimeout:"setTimeout is not available. Use the delay atom.",setInterval:"setInterval is not available. Use while loops with delay.",fetch:"fetch is not available. Use the httpFetch atom.",require:"require is not available. Atoms must be registered with the VM.",import:"import is not available. Atoms must be registered with the VM.",process:"process is not available. AsyncJS runs in a sandboxed environment.",window:"window is not available. AsyncJS runs in a sandboxed environment.",document:"document is not available. AsyncJS runs in a sandboxed environment.",global:"global is not available. AsyncJS runs in a sandboxed environment.",globalThis:"globalThis is not available. Use builtins directly."};function ci(e){if(e.callee.type==="Identifier"){let n=e.callee.name;if(Xe.has(n))return Er[n]||`${n} is not available in AsyncJS.`}if(e.callee.type==="MemberExpression"){let n=e.callee;if(n.object.type==="Identifier"){let t=n.object.name;if(Xe.has(t))return Er[t]||`${t} is not available in AsyncJS.`}}return null}function kr(e){return{Date:" Use Date() or Date('2024-01-15') instead - no 'new' needed.",Set:" Use Set([items]) instead - no 'new' needed.",Map:" Use plain objects instead of Map.",Array:" Use array literals like [1, 2, 3] instead.",Object:" Use object literals like { key: value } instead.",Error:" Return an error object like { error: 'message' } instead.",RegExp:" Use string methods or the regexMatch atom.",Promise:" Not needed - all operations are implicitly async.",WeakSet:" WeakSet is not available.",WeakMap:" WeakMap is not available."}[e]||" Use factory functions or object literals instead."}function Ee(e,n,t,r){let s=r?"constSet":"varSet";if(e.type==="ChainExpression")return Ee(e.expression,n,t,r);if(e.type==="NewExpression"){let i=e,a="constructor";i.callee.type==="Identifier"&&(a=i.callee.name);let c=kr(a);throw new W(`The 'new' keyword is not supported in AsyncJS.${c}`,U(e),n.source,n.filename)}if(e.type==="CallExpression"){let i=ci(e);if(i)throw new W(i,U(e),n.source,n.filename)}if(e.type==="CallExpression"&&oi(e)){let i=F(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}if(e.type==="MemberExpression"&&ai(e)){let i=F(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}if(e.type==="CallExpression")return li(e,n,t,r);if(e.type==="TemplateLiteral")return pi(e,n,t,r);if(e.type==="BinaryExpression"||e.type==="LogicalExpression"||e.type==="UnaryExpression"){let i=F(e,n);return t?{step:{op:s,key:t,value:i},resultVar:t}:{step:null,resultVar:i}}return{step:null,resultVar:K(e,n)}}function li(e,n,t,r){let s,o=!1,i;if(e.callee.type==="Identifier")s=e.callee.name;else if(e.callee.type==="MemberExpression"){let c=e.callee;if(c.property.type==="Identifier")s=c.property.name,o=!0,i=K(c.object,n);else throw new W("Computed method names are not supported",U(e),n.source,n.filename)}else throw new W("Only named function calls are supported",U(e),n.source,n.filename);if(o)return fi(s,i,e.arguments,n,t,r);if(s==="console"&&e.callee.type,n.helpers?.has(s)){let c=ui(s,n,e),l=e.arguments.map(f=>K(f,n));if(l.length!==c.length)throw new W(`Helper '${s}' expects ${c.length} argument(s), got ${l.length}`,U(e),n.source,n.filename);return{step:{op:"callLocal",name:s,args:l,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}let a=mi(e,n);return{step:{op:s,...a,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}function ui(e,n,t){let r=n.helpers.get(e),s=[];for(let o of r.params){let i;if(o.type==="Identifier"?i=o:o.type==="AssignmentPattern"&&o.left?.type==="Identifier"&&(i=o.left),!i)throw new W(`Helper '${e}' parameters must be plain identifiers (optionally with an example value); destructuring is not supported`,o.loc?.start??U(t),n.source,n.filename);s.push(i.name)}if(n.helperSteps.has(e)||n.helperTransforming.has(e))return s;n.helperTransforming.add(e);try{let o={depth:0,locals:new Map,parameters:new Map(s.map(a=>[a,{name:a,type:{kind:"any"},required:!0}])),atoms:n.atoms,warnings:n.warnings,source:n.source,filename:n.filename,options:n.options,helpers:n.helpers,helperSteps:n.helperSteps,helperTransforming:n.helperTransforming},i=oe(r.body,o);n.helperSteps.set(e,{steps:i,paramNames:s})}finally{n.helperTransforming.delete(e)}return s}function fi(e,n,t,r,s,o){switch(e){case"map":if(t.length>0&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=a?.type==="Identifier"?a.name:"item",l=re(r);l.locals.set(c,{kind:"any"});let f;if(i.body.type==="BlockStatement")f=oe(i.body,l);else{let{step:p,resultVar:u}=Ee(i.body,l,"result");f=p?[p]:[{op:"varSet",key:"result",value:u}]}return{step:{op:"map",items:n,as:c,steps:f,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"filter":if(t.length>0&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=a?.type==="Identifier"?a.name:"item",l=re(r);l.locals.set(c,{kind:"any"});let f;if(i.body.type==="BlockStatement")throw new W("filter callback must be an expression, not a block",U(t[0]),r.source,r.filename);return f=F(i.body,l),{step:{op:"filter",items:n,as:c,condition:f,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"find":if(t.length>0&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=a?.type==="Identifier"?a.name:"item",l=re(r);l.locals.set(c,{kind:"any"});let f;if(i.body.type==="BlockStatement")throw new W("find callback must be an expression, not a block",U(t[0]),r.source,r.filename);return f=F(i.body,l),{step:{op:"find",items:n,as:c,condition:f,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"reduce":if(t.length>=2&&(t[0].type==="ArrowFunctionExpression"||t[0].type==="FunctionExpression")){let i=t[0],a=i.params[0],c=i.params[1],l=a?.type==="Identifier"?a.name:"acc",f=c?.type==="Identifier"?c.name:"item",p=re(r);p.locals.set(l,{kind:"any"}),p.locals.set(f,{kind:"any"});let u;if(i.body.type==="BlockStatement")u=oe(i.body,p);else{let{step:y,resultVar:g}=Ee(i.body,p,"result");u=y?[y]:[{op:"varSet",key:"result",value:g}]}let m=K(t[1],r);return{step:{op:"reduce",items:n,as:f,accumulator:l,initial:m,steps:u,...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}break;case"slice":break;case"push":return{step:{op:"push",list:n,item:K(t[0],r),...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s};case"join":return{step:{op:"join",list:n,sep:t.length>0?K(t[0],r):"",...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s};case"split":return{step:{op:"split",str:n,sep:t.length>0?K(t[0],r):"",...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}return r.warnings.push({message:`Unknown method '${e}' - treating as atom call`,line:0,column:0}),{step:{op:e,receiver:n,args:t.map(i=>K(i,r)),...s&&{result:s},...s&&o&&{resultConst:!0}},resultVar:s}}function pi(e,n,t,r){let s="",o={};for(let i=0;i<e.quasis.length;i++)if(s+=e.quasis[i].value.cooked||e.quasis[i].value.raw,i<e.expressions.length){let a=e.expressions[i],c=`_${i}`;o[c]=K(a,n),s+=`{{${c}}}`}return{step:{op:"template",tmpl:s,vars:o,...t&&{result:t},...t&&r&&{resultConst:!0}},resultVar:t}}function F(e,n){switch(e.type){case"Literal":return{$expr:"literal",value:e.value};case"Identifier":return{$expr:"ident",name:e.name};case"MemberExpression":{let t=e,r=F(t.object,n),s=t.optional===!0;if(t.computed){let i=t.property;return i.type==="Literal"?{$expr:"member",object:r,property:String(i.value),computed:!0,...s&&{optional:!0}}:{$expr:"member",object:r,property:F(i,n),computed:!0,...s&&{optional:!0}}}let o=t.property.name;return{$expr:"member",object:r,property:o,...s&&{optional:!0}}}case"ChainExpression":return F(e.expression,n);case"BinaryExpression":{let t=e;return{$expr:"binary",op:t.operator,left:F(t.left,n),right:F(t.right,n)}}case"LogicalExpression":{let t=e;return{$expr:"logical",op:t.operator,left:F(t.left,n),right:F(t.right,n)}}case"UnaryExpression":{let t=e;return{$expr:"unary",op:t.operator,argument:F(t.argument,n)}}case"ConditionalExpression":{let t=e;return{$expr:"conditional",test:F(t.test,n),consequent:F(t.consequent,n),alternate:F(t.alternate,n)}}case"ArrayExpression":return{$expr:"array",elements:e.elements.filter(r=>r!==null).map(r=>F(r,n))};case"ObjectExpression":{let t=e,r=[];for(let s of t.properties)if(s.type==="Property"){let o=s.key.type==="Identifier"?s.key.name:String(s.key.value);r.push({key:o,value:F(s.value,n)})}return{$expr:"object",properties:r}}case"CallExpression":{let t=e;if(t.callee.type==="MemberExpression"){let r=t.callee,s=r.property.type==="Identifier"?r.property.name:String(r.property.value),o=r.optional===!0||t.optional===!0;return{$expr:"methodCall",object:F(r.object,n),method:s,arguments:t.arguments.map(i=>F(i,n)),...o&&{optional:!0}}}if(t.callee.type==="Identifier"){let r=t.callee.name;if(n.helpers?.has(r))throw new W(`Helper '${r}' cannot be called inside an expression. Assign its result to a variable first: const result = ${r}(...); then use result.`,U(e),n.source,n.filename);return{$expr:"call",callee:r,arguments:t.arguments.map(s=>F(s,n))}}throw new W("Complex function calls in expressions should be lifted to statements",U(e),n.source,n.filename)}case"NewExpression":{let t=e,r="constructor";t.callee.type==="Identifier"&&(r=t.callee.name);let s=kr(r);throw new W(`The 'new' keyword is not supported in AsyncJS.${s}`,U(e),n.source,n.filename)}case"TemplateLiteral":throw new W("Template literals inside expressions are not supported. Assign to a variable first: const msg = `hello ${name}`; then use msg",U(e),n.source,n.filename);default:throw new W(`Unsupported expression type in condition: ${e.type}`,U(e),n.source,n.filename)}}function K(e,n){switch(e.type){case"Literal":return e.value;case"Identifier":return e.name;case"MemberExpression":{let t=e;if(t.optional===!0)return F(e,n);let s=K(t.object,n);if(s&&typeof s=="object"&&s.$expr){let i=t.computed?String(t.property.value):t.property.name;return{$expr:"member",object:s,property:i,...t.computed&&{computed:!0}}}if(t.computed)return F(e,n);let o=t.property.name;return typeof s=="string"?`${s}.${o}`:s&&s.$kind==="arg"?{$kind:"arg",path:`${s.path}.${o}`}:`${s}.${o}`}case"ChainExpression":return K(e.expression,n);case"ArrayExpression":return e.elements.map(t=>t?K(t,n):null);case"ObjectExpression":{let t={};for(let r of e.properties)if(r.type==="Property"){let s=r.key.type==="Identifier"?r.key.name:String(r.key.value);t[s]=K(r.value,n)}return t}case"TemplateLiteral":return F(e,n);case"CallExpression":return F(e,n);case"BinaryExpression":case"LogicalExpression":case"UnaryExpression":case"ConditionalExpression":return F(e,n);default:return null}}function mi(e,n){if(e.arguments.length===1&&e.arguments[0].type==="ObjectExpression"){let t=e.arguments[0],r={};for(let s of t.properties)if(s.type==="Property"){let o=s.key.type==="Identifier"?s.key.name:String(s.key.value);r[o]=K(s.value,n)}return r}return{args:e.arguments.map(t=>K(t,n))}}import{parseExpressionAt as as}from"acorn";function di(e,n){let t=n;for(;t>0&&e[t-1]!==`
|
|
57
|
+
`;)t--;if(e.slice(t,n).includes("//"))return!0;let s=0,o=!1;for(;s<n;)!o&&e.slice(s,s+2)==="/*"?(o=!0,s+=2):o&&e.slice(s,s+2)==="*/"?(o=!1,s+=2):s++;return o}function yi(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:Kt(e,r.index)})}return n}function Ht(e){let n=[],t=[],r=yi(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(di(e,u))continue;let m=a[1]||a[2]||a[3]||a[4]||a[5]||a[6]||`test ${n.length+1}`,y=a.index+a[0].length,g=jr(e,y-1);if(g===-1)continue;let x=e.slice(y,g).trim();n.push({description:m,body:x,line:Kt(e,u)}),c.push({start:u,end:g+1,desc:m})}let l=[];for(;(a=o.exec(e))!==null;){let u=a.index,m=a.index+a[0].length,y=jr(e,m-1);if(y===-1)continue;let g=e.slice(m,y).trim();t.push({body:g,line:Kt(e,u)}),l.push({start:u,end:y+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=gi(n,t);return{code:i,tests:n,mocks:t,testRunner:p}}function jr(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 Kt(e,n){return e.slice(0,n).split(`
|
|
60
|
+
`).length}function gi(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 vr=`
|
|
80
84
|
function assert(condition, message) {
|
|
81
85
|
if (!condition) {
|
|
82
86
|
throw new Error(message || 'Assertion failed')
|
|
83
87
|
}
|
|
84
88
|
}
|
|
85
|
-
`,
|
|
89
|
+
`,Ar=`
|
|
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
|
+
`,hi=vr+`
|
|
181
|
+
`+Ar;import{validate as Br,s as St}from"tosijs-schema";function Ne(e){if(e.nullable)return{anyOf:[Ne({...e,nullable:!1}),{type:"null"}]};switch(e.kind){case"string":return{type:"string"};case"number":return{type:"number"};case"integer":return{type:"integer"};case"non-negative-integer":return{type:"integer",minimum:0};case"boolean":return{type:"boolean"};case"null":return{type:"null"};case"undefined":return{};case"any":return{};case"array":return e.items?{type:"array",items:Ne(e.items)}:{type:"array"};case"object":if(e.shape){let n={},t=[];for(let[r,s]of Object.entries(e.shape))n[r]=Ne(s),t.push(r);return{type:"object",properties:n,required:t,additionalProperties:!1}}return{type:"object"};case"union":return e.members?{anyOf:e.members.map(Ne)}:{};default:return{}}}function Ie(e){if(e===null)return{type:"null"};if(e===void 0)return{};switch(typeof e){case"string":return{type:"string"};case"number":return Number.isInteger(e)?{type:"integer"}:{type:"number"};case"boolean":return{type:"boolean"};case"object":{if(Array.isArray(e))return e.length===0?{type:"array"}:{type:"array",items:Ie(e[0])};let n={},t=[];for(let[r,s]of Object.entries(e))n[r]=Ie(s),t.push(r);return{type:"object",properties:n,required:t,additionalProperties:!1}}default:return{}}}function Yt(e){let n={},t=[];for(let[o,i]of Object.entries(e.params))i?.type?.kind?n[o]=Ne(i.type):i?.example!==void 0?n[o]=Ie(i.example):n[o]={},i?.required!==!1&&t.push(o),i?.example!==void 0&&(n[o].examples=[i.example]);let r={type:"object",properties:n,required:t},s;return e.returns&&(e.returns.type?.kind?s=Ne(e.returns.type):e.returns.example!==void 0&&(s=Ie(e.returns.example))),{input:r,output:s}}import{validate as Xt,filter as bi,s as _t}from"tosijs-schema";function Te(e){return e!==null&&typeof e=="object"&&"__runtimeType"in e&&e.__runtimeType===!0}function Pr(e){return e!==null&&typeof e=="object"&&"schema"in e&&typeof e.schema=="object"}function xi(e){return e!==null&&typeof e=="object"&&"type"in e&&typeof e.type=="string"}function Z(e,n,t,r){let s,o,i,a=t,c=r;if(typeof e=="string")if(s=e,typeof n=="function")o=n,a!==void 0&&(i=_t.infer(a));else if(n===void 0&&a!==void 0)i=_t.infer(a);else if(Pr(n))i=n;else if(xi(n))i=n;else if(n!==void 0)a=n,c=a,i=_t.infer(a);else throw new Error("Type(description) requires a predicate, schema, or example");else Pr(e),i=e,s=_i(i);let l;if(i){let p=i?.schema??i;p&&typeof p=="object"&&Array.isArray(p.examples)&&(l=p.examples)}return a===void 0&&l&&l.length>0&&(a=l[0]),{description:s,check:p=>o?o(p):i?Xt(p,i):!1,schema:i,predicate:o,example:a,examples:l,default:c,toJSONSchema(){if(i){let p=i?.schema??i;if(p&&typeof p=="object"&&"type"in p)return p}return a!==void 0?Ie(a):{description:s}},strip(p){return i?bi(p,i):p},__runtimeType:!0}}function _i(e){let n=e?.schema??e;if(n&&typeof n=="object"&&"type"in n){let t=n;switch(t.type){case"string":return t.format?`string (${t.format})`:t.pattern?`string matching ${t.pattern}`:t.minLength!==void 0&&t.maxLength!==void 0?`string (${t.minLength}-${t.maxLength} chars)`:"string";case"number":case"integer":return t.minimum!==void 0&&t.maximum!==void 0?`${t.type} (${t.minimum}-${t.maximum})`:t.minimum!==void 0?`${t.type} >= ${t.minimum}`:t.maximum!==void 0?`${t.type} <= ${t.maximum}`:t.type;case"boolean":return"boolean";case"array":return"array";case"object":return"object";case"null":return"null"}}return"value"}var Qt=Z("string",e=>typeof e=="string"?!0:`expected string, got ${e===null?"null":typeof e}`),en=Z("number",e=>typeof e=="number"?!0:`expected number, got ${e===null?"null":typeof e}`),tn=Z("boolean",e=>typeof e=="boolean"?!0:`expected boolean, got ${e===null?"null":typeof e}`),nn=Z("integer",e=>typeof e!="number"?`expected integer, got ${e===null?"null":typeof e}`:Number.isInteger(e)?!0:`${e} is not an integer`),rn=Z("positive integer",e=>typeof e!="number"?`expected positive integer, got ${e===null?"null":typeof e}`:Number.isInteger(e)?e<=0?`${e} is not positive`:!0:`${e} is not an integer`),sn=Z("non-empty string",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:e.length===0?"string is empty":!0),on=Z("email address",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)?!0:`"${e}" is not a valid email`),Rr=e=>{try{return new URL(e),!0}catch{return!1}},an=Z("URL",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:Rr(e)?!0:`"${e}" is not a valid URL`),cn=Z("UUID",e=>typeof e!="string"?`expected string, got ${e===null?"null":typeof e}`:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)?!0:`"${e}" is not a valid UUID`),Mr=e=>{let n=new Date(e);return!isNaN(n.getTime())&&e.includes("T")},Cr=e=>{if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let n=new Date(e+"T00:00:00Z");return!isNaN(n.getTime())},Nr=Z("ISO 8601 timestamp",e=>typeof e=="string"&&Mr(e)),Ir=Z("date (YYYY-MM-DD)",e=>typeof e=="string"&&Cr(e));function ln(e){return Z(`${e.description} or null`,n=>n===null||e.check(n)===!0)}function un(e){return Z(`${e.description} (optional)`,n=>n==null||e.check(n)===!0)}function fn(e,n,...t){if(typeof e=="string"&&Array.isArray(n)){let o=e,i=n,a=new Set(i);return{description:o,check:l=>a.has(l),toJSONSchema:()=>({enum:i}),strip:l=>l,__runtimeType:!0,values:i}}let r=[];Te(e)&&r.push(e),Te(n)&&r.push(n),r.push(...t);let s=r.map(o=>o.description).join(" | ");return Z(s,o=>r.some(i=>i.check(o)===!0))}function pn(e){return Z(`array of ${e.description}`,n=>Array.isArray(n)&&n.every(t=>e.check(t)===!0))}function wi(e){if(Te(e))return t=>e.check(t)===!0;if(e&&typeof e=="object"&&"schema"in e)return t=>Xt(t,e);let n=_t.infer(e);return t=>Xt(t,n)}function Qe(e,n,t){let r=[],s=[];for(let i of e)typeof i=="string"?(r.push(i),s.push(void 0)):(r.push(i[0]),s.push(i[1]));let o=(...i)=>{let a=r.map((l,f)=>{let p=f<i.length?i[f]:s[f];return p===void 0?()=>!0:wi(p)}),c=t;return r.forEach((l,f)=>{let p=f<i.length?i[f]:s[f],u="any";Te(p)?u=p.description:p!==void 0&&(u=typeof p=="string"?"string":JSON.stringify(p)),c=c.replace(new RegExp(`\\b${l}\\b`,"g"),u)}),Z(c,l=>n(l,...a))};return o.params=r,o.description=t,o}var mn=Qe(["T","U"],(e,n,t)=>Array.isArray(e)&&e.length===2&&n(e[0])&&t(e[1]),"Pair<T, U>"),dn=Qe(["V"],(e,n)=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.values(e).every(n),"Record<string, V>");function yn(e,n){let t=Object.values(n),r=new Set(t),s=Object.keys(n),o={};for(let[a,c]of Object.entries(n))o[c]=a;return{description:e,check:a=>r.has(a),toJSONSchema:()=>({enum:t}),strip:a=>a,__runtimeType:!0,members:n,names:o,values:t,keys:s}}function $i(e){if(e===null)return"null";if(e===void 0)return"undefined";switch(typeof e){case"string":return"string";case"boolean":return"boolean";case"number":return Number.isInteger(e)?"integer":"number";case"object":return Array.isArray(e)?"array":"object";default:return null}}function wt(e,n,t){if(Array.isArray(n)&&t){let r=n,s=[],o=[];for(let a of r)Array.isArray(a)?(s.push(a[0]),o.push(a[1])):(s.push(a),o.push(void 0));let i=((...a)=>{let c=s.map((f,p)=>p<a.length?a[p]:o[p]),l=t(...c);return wt(e,l)});return Object.defineProperties(i,{typeParamNames:{value:s,enumerable:!0},description:{value:e,enumerable:!0},__runtimeType:{value:!0,enumerable:!0}}),i}return Si(e,n)}function Si(e,n){let t={},r,s="assertReturns";if(typeof n=="function"){let i=n.__tjs;if(i){if(i.params)for(let[a,c]of Object.entries(i.params))t[a]=c?.example??null;i.returns&&(r=i.returns?.example??null),i.safeReturn?s="checkedReturns":i.unsafe?s="assertReturns":s="returns"}}else t=n.params??{},r=n.returns,s=n.returnContract??"assertReturns";return{description:e,params:t,returns:r,returnContract:s,toJSONSchema:()=>({description:e,type:"function"}),strip:i=>i,check:i=>{if(typeof i!="function")return`expected function, got ${i===null?"null":typeof i}`;let a=Object.keys(t).length;if(a>0){let l=i.__tjs;if(l?.params){let f=Object.keys(l.params).length;if(f!==a)return`expected ${a} params, got ${f}`;let p=Object.keys(t),u=Object.keys(l.params);for(let m=0;m<p.length;m++){let y=l.params[u[m]],g=t[p[m]];if(y?.type?.kind&&g!==void 0){let x=$i(g);if(x&&y.type.kind!==x&&y.type.kind!=="any")return`param '${p[m]}' expected ${x}, got ${y.type.kind}`}}}}return!0},__runtimeType:!0}}var Ti=Or(),me=Ti.version,et=Symbol.for("tjs.equals");function Et(e){let[n=0,t=0,r=0]=e.split(".").map(Number);return{major:n,minor:t,patch:r}}function hn(e,n){let t=Et(e),r=Et(n);return t.major!==r.major?t.major<r.major?-1:1:t.minor!==r.minor?t.minor<r.minor?-1:1:t.patch!==r.patch?t.patch<r.patch?-1:1:0}function bn(e,n){let t=Et(e),r=Et(n);return t.major===r.major}var he=class e extends Error{path;expected;actual;callStack;reason;constructor(n,t,r,s,o,i){super(n),this.name="MonadicError",this.path=t,this.expected=r,this.actual=s,this.callStack=o,this.reason=i,Error.captureStackTrace&&Error.captureStackTrace(this,e)}};function ki(e,n,t,r){let s=t===null?"null":typeof t,o=q.callStacks||q.debug?_n():void 0,i=r?`Expected ${n} for '${e}': ${r}`:`Expected ${n} for '${e}', got ${s}`,a=new he(i,e,n,s,o,r);if(q.trackErrors!==!1){let c=q.maxErrors??Tt;Fr[Oe]=a,Oe=(Oe+1)%c,ve<c&&ve++,kt++}if(q.logTypeErrors&&console.error(`[TJS TypeError] ${a.message}`),q.throwTypeErrors)throw a;return a}function gn(e){return e instanceof Error&&e.name==="MonadicError"&&"path"in e}var xn={debug:!1,safety:"inputs",requireReturnTypes:!1,callStacks:!1,maxStackSize:64,trackErrors:!0,maxErrors:64},q={...xn},tt=64,Dr=new Array(tt).fill(""),je=0,ye=0,Tt=64,Fr=new Array(Tt).fill(null),Oe=0,ve=0,kt=0,Fe=0;function ji(){Fe++}function vi(){Fe>0&&Fe--}function Ai(){return Fe>0}function Pi(e){q={...q,...e}}function Ri(){return{...q}}function qr(e){if((q.callStacks||q.debug)&&e){let n=q.maxStackSize??tt;Dr[je]=e,je=(je+1)%n,ye<n&&ye++}}function $t(){if((q.callStacks||q.debug)&&ye>0){let e=q.maxStackSize??tt;je=(je-1+e)%e,ye--}}function _n(){if(ye===0)return[];let e=q.maxStackSize??tt,n=[],t=(je-ye+e)%e;for(let r=0;r<ye;r++)n.push(Dr[(t+r)%e]);return n}function Wr(){if(q.trackErrors===!1||ve===0)return[];let e=q.maxErrors??Tt,n=[],t=(Oe-ve+e)%e;for(let r=0;r<ve;r++)n.push(Fr[(t+r)%e]);return n}function Mi(){let e=Wr();return Oe=0,ve=0,kt=0,e}function Ci(){return kt}function Ni(){q={...xn},je=0,ye=0,Oe=0,ve=0,kt=0,Fe=0}function Be(e,n){if(e!==null&&typeof e=="object"&&typeof e[et]=="function")return e[et](n);if(n!==null&&typeof n=="object"&&typeof n[et]=="function")return n[et](e);if(e!==null&&typeof e=="object"&&typeof e.Equals=="function")return e.Equals(n);if(n!==null&&typeof n=="object"&&typeof n.Equals=="function")return n.Equals(e);if((e instanceof String||e instanceof Number||e instanceof Boolean)&&(e=e.valueOf()),(n instanceof String||n instanceof Number||n instanceof Boolean)&&(n=n.valueOf()),e===n||typeof e=="number"&&typeof n=="number"&&isNaN(e)&&isNaN(n)||e==null&&n==null)return!0;if(e==null||n===null||n===void 0||typeof e!=typeof n||typeof e!="object")return!1;if(e instanceof Set&&n instanceof Set){if(e.size!==n.size)return!1;for(let s of e)if(!n.has(s))return!1;return!0}if(e instanceof Map&&n instanceof Map){if(e.size!==n.size)return!1;for(let[s,o]of e)if(!n.has(s)||!Be(o,n.get(s)))return!1;return!0}if(e instanceof Date&&n instanceof Date)return e.getTime()===n.getTime();if(e instanceof RegExp&&n instanceof RegExp)return e.toString()===n.toString();if(Array.isArray(e)&&Array.isArray(n))return e.length!==n.length?!1:e.every((s,o)=>Be(s,n[o]));if(Array.isArray(e)!==Array.isArray(n))return!1;let t=Object.keys(e),r=Object.keys(n);return t.length!==r.length?!1:t.every(s=>Be(e[s],n[s]))}function Ur(e,n){return!Be(e,n)}function Lr(e){return e===null?"null":typeof e}function Jr(e){return e instanceof Boolean||e instanceof Number||e instanceof String?!!e.valueOf():!!e}function wn(e,n){return(e instanceof String||e instanceof Number||e instanceof Boolean)&&(e=e.valueOf()),(n instanceof String||n instanceof Number||n instanceof Boolean)&&(n=n.valueOf()),!!(e===n||typeof e=="number"&&typeof n=="number"&&isNaN(e)&&isNaN(n)||e==null&&n==null)}function Vr(e,n){return!wn(e,n)}function de(e){return e!==null&&typeof e=="object"&&e.$error===!0}function le(e,n){let t={$error:!0,message:e,...n};if((q.callStacks||q.debug)&&ye>0){let r=_n(),s=n?.path?[...r,n.path]:r;t.stack=s}return t}function $n(e,n){if(e.length===0)return le("Unknown error");if(e.length===1)return e[0];let t=e.map(s=>{if(s.path){let o=s.path.split(".");return o[o.length-1]}return"unknown"}).join(", "),r=`Multiple parameter errors in ${n||"function"}: ${t}`;return le(r,{path:n,errors:e})}function De(e){if(e===null)return"null";if(e===void 0)return"undefined";if(Array.isArray(e))return"array";let n=typeof e;if(n!=="object")return n;let t=e.constructor?.name;return t&&t!=="Object"?t:"object"}function zr(e,n){if(e==null||typeof e!="object"&&typeof e!="function")return!1;let t=e;for(;t!==null;){if(t.constructor?.name===n)return!0;t=Object.getPrototypeOf(t)}return!1}function Ae(e,n,t){if(de(e))return e;if(typeof n=="object"&&n!==null&&"check"in n){let s=n.check(e);if(s===!0)return null;let o=typeof s=="string"?s:void 0,i=o?`Expected ${n.description} for '${t}': ${o}`:`Expected ${n.description} but got ${De(e)}`;return le(i,{path:t,expected:n.description,actual:De(e),reason:o})}let r=De(e);return n==="any"||n===r||n==="number"&&r==="number"||n==="integer"&&r==="number"&&Number.isInteger(e)||n==="non-negative-integer"&&r==="number"&&Number.isInteger(e)&&e>=0||n==="object"&&r==="object"?null:le(`Expected ${n} but got ${r}`,{path:t,expected:n,actual:r})}function Gr(e,n,t,r){if(typeof e!="function")return e;let s=e.__tjs;if(!s||!s.params)return e;let o=Object.entries(s.params);for(let i=0;i<n.length;i++){let a=n[i];if(a==="any")continue;let c=o[i];if(!c)continue;let l=c[1]?.type?.kind;if(!(!l||l==="any")&&l!==a)return new he(`Expected (...arg${i}: ${a}, ...) for '${r}', but callback declares arg${i} as ${l}`,`${r}(arg${i})`,a,l)}if(t!=="any"&&s.returns){let i=s.returns.type?.kind??s.returns.kind;if(i&&i!=="any"&&i!==t)return new he(`Expected callback returning ${t} for '${r}', but callback returns ${i}`,`${r}(return)`,t,i)}return e}function Sn(e,n,t){for(let[r,s]of Object.entries(n.params)){let o=e[r];if(de(o))return o;if(s.required&&o===void 0){let a=typeof s.type=="string"?s.type:s.type.description;return le(`Missing required parameter '${r}'`,{path:t?`${t}.${r}`:r,expected:a,actual:"undefined",loc:s.loc})}if(o===void 0)continue;let i=Ae(o,s.type,t?`${t}.${r}`:r);if(i)return s.loc&&(i.loc=s.loc),i}return null}function En(e,n){if(e.__tjs=n,e.__tjs.schema=()=>Yt(n),!(!n.polymorphic&&(n.safe||n.safeReturn||q.safety!=="none"&&!n.unsafe||n.returns&&q.safety==="all"&&!n.unsafeReturn)))return e;let r=!!n.returns,s=!!n.unsafe,o=!!n.safe,i=!!n.unsafeReturn,a=!!n.safeReturn,c=n.returns?.defaults,l=Object.entries(n.params),f=l.length,p=e.name||n.name||"anonymous",u=function(...m){if(Fe>0)return e.apply(this,m);let y=o||!s&&q.safety!=="none",g=r&&(a||!i&&q.safety==="all");if(!y&&!g)return e.apply(this,m);if(m.length>0&&de(m[0]))return m[0];if(y){let E=m.length===1&&typeof m[0]=="object"&&m[0]!==null&&!Array.isArray(m[0]),S=[];if(E){let b=m[0];for(let h=0;h<f;h++){let[w,_]=l[h],$=b[w];if(de($)){S.push($);continue}if(_.required&&$===void 0){S.push(le(`Missing required parameter '${w}'`,{path:`${p}.${w}`,expected:typeof _.type=="string"?_.type:_.type?.description||"value",actual:"undefined",loc:_.loc}));continue}if($!==void 0){let T=Ae($,_.type,`${p}.${w}`);T&&(_.loc&&(T.loc=_.loc),S.push(T))}}}else for(let b=0;b<f;b++){let[h,w]=l[b],_=m[b];if(de(_)){S.push(_);continue}if(w.required&&_===void 0){S.push(le(`Missing required parameter '${h}'`,{path:`${p}.${h}`,expected:typeof w.type=="string"?w.type:w.type?.description||"value",actual:"undefined",loc:w.loc}));continue}if(_!==void 0){let $=Ae(_,w.type,`${p}.${h}`);$&&(w.loc&&($.loc=w.loc),S.push($))}}if(S.length>0)return $n(S,p)}let x=q.callStacks||q.debug;x&&qr(p);try{let E=e.apply(this,m);if(g&&n.returns&&!de(E)){let S=c&&typeof E=="object"&&E!==null?Object.assign({},c,E):E,b=Ae(S,n.returns.type,`${p}()`);if(b)return x&&$t(),b}return x&&$t(),E}catch(E){return x&&$t(),le(E.message||String(E),{path:p,cause:E})}};return Object.defineProperty(u,"name",{value:e.name}),u.__tjs=n,u.__tjs.schema=()=>Yt(n),u}function Zr(e){let n=new Proxy(e,{construct(t,r,s){return Reflect.construct(t,r,s)},apply(t,r,s){return Reflect.construct(t,s)}});Object.defineProperty(n,"name",{value:e.name});for(let t of Object.getOwnPropertyNames(e))t!=="length"&&t!=="name"&&t!=="prototype"&&Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t));return n}function Kr(){let e={...q},n=e.maxStackSize??tt,t=new Array(n).fill(""),r=0,s=0,o=e.maxErrors??Tt,i=new Array(o).fill(null),a=0,c=0,l=0,f=0;function p(R){e={...e,...R}}function u(){return{...e}}function m(R){(e.callStacks||e.debug)&&R&&(t[r]=R,r=(r+1)%n,s<n&&s++)}function y(){(e.callStacks||e.debug)&&s>0&&(r=(r-1+n)%n,s--)}function g(){if(s===0)return[];let R=[],I=(r-s+n)%n;for(let B=0;B<s;B++)R.push(t[(I+B)%n]);return R}function x(){e={...xn},r=0,s=0,a=0,c=0,l=0,f=0}function E(){f++}function S(){f>0&&f--}function b(){return f>0}let h=new Map;function w(R,I,B){h.has(R)||h.set(R,new Map),h.get(R).set(I,B)}function _(R,I){let B=typeof R,J;if(R==null)return;if(B==="string")J="String";else if(B==="number")J="Number";else if(B==="boolean")J="Boolean";else if(Array.isArray(R))J="Array";else if(B==="object")J=R.constructor?.name||"Object";else return;let V=J;for(;V;){let Me=h.get(V);if(Me?.has(I))return Me.get(I);if(B==="object"&&!Array.isArray(R)){if(V=Object.getPrototypeOf(V===J?R:Object.getPrototypeOf(R))?.constructor?.name,V==="Object"||V===J)break}else break}let X=h.get("Object");if(X?.has(I))return X.get(I)}function $(R,I,B){let J=B===null?"null":typeof B,V=e.callStacks||e.debug?g():void 0,X=new he(`Expected ${I} for '${R}', got ${J}`,R,I,J,V);if(e.trackErrors!==!1&&(i[a]=X,a=(a+1)%o,c<o&&c++,l++),e.logTypeErrors&&console.error(`[TJS TypeError] ${X.message}`),e.throwTypeErrors)throw X;return X}function T(){if(e.trackErrors===!1||c===0)return[];let R=[],I=(a-c+o)%o;for(let B=0;B<c;B++)R.push(i[(I+B)%o]);return R}function j(){let R=T();return a=0,c=0,l=0,R}function P(){return l}function A(R,I){let B={$error:!0,message:R,...I};if((e.callStacks||e.debug)&&s>0){let J=I?.path?[...g(),I.path]:g();B.stack=J}return B}function C(R,I){return R==null?$(`bang.${I}`,"non-null",R):gn(R)?R:R[I]}return{version:me,MonadicError:he,typeError:$,isMonadicError:gn,bang:C,isError:de,error:A,composeErrors:$n,typeOf:De,isNativeType:zr,checkType:Ae,validateArgs:Sn,wrap:En,checkFnShape:Gr,wrapClass:Zr,compareVersions:hn,versionsCompatible:bn,createRuntime:Kr,configure:p,getConfig:u,pushStack:m,popStack:y,getStack:g,errors:T,clearErrors:j,getErrorCount:P,resetRuntime:x,enterUnsafe:E,exitUnsafe:S,isUnsafeMode:b,validate:Br,infer:St.infer.bind(St),Type:Z,isRuntimeType:Te,Union:fn,Generic:Qe,Enum:yn,FunctionPredicate:wt,Nullable:ln,Optional:un,TArray:pn,TString:Qt,TNumber:en,TBoolean:tn,TInteger:nn,TPositiveInt:rn,TNonEmptyString:sn,TEmail:on,TUrl:an,TUuid:cn,TPair:mn,TRecord:dn,Is:Be,IsNot:Ur,Eq:wn,NotEq:Vr,TypeOf:Lr,toBool:Jr,tjsEquals:et,registerExtension:w,resolveExtension:_}}var ke={version:me,MonadicError:he,typeError:ki,isMonadicError:gn,isError:de,error:le,composeErrors:$n,typeOf:De,isNativeType:zr,checkType:Ae,validateArgs:Sn,wrap:En,checkFnShape:Gr,wrapClass:Zr,compareVersions:hn,versionsCompatible:bn,configure:Pi,getConfig:Ri,pushStack:qr,popStack:$t,getStack:_n,errors:Wr,clearErrors:Mi,getErrorCount:Ci,resetRuntime:Ni,enterUnsafe:ji,exitUnsafe:vi,isUnsafeMode:Ai,createRuntime:Kr,validate:Br,infer:St.infer.bind(St),Type:Z,isRuntimeType:Te,Union:fn,Generic:Qe,Enum:yn,FunctionPredicate:wt,Nullable:ln,Optional:un,TArray:pn,TString:Qt,TNumber:en,TBoolean:tn,TInteger:nn,TPositiveInt:rn,TNonEmptyString:sn,TEmail:on,TUrl:an,TUuid:cn,Timestamp:Nr,LegalDate:Ir,TPair:mn,TRecord:dn,Is:Be,IsNot:Ur,Eq:wn,NotEq:Vr,TypeOf:Lr,toBool:Jr};function Tn(){let e=globalThis;if(e.__tjs){let n=e.__tjs.version;if(typeof n!="string")return e.__tjs=ke,ke;let t=hn(me,n);return t===0||(bn(me,n)?t>0?(console.info(`TJS runtime: upgrading ${n} \u2192 ${me}`),e.__tjs=ke):console.info(`TJS runtime: keeping ${n} (newer than ${me})`):(console.warn(`TJS runtime version conflict: ${n} vs ${me} (major version mismatch)`),t>0&&(console.warn(`Upgrading to ${me} - check for breaking changes`),e.__tjs=ke))),e.__tjs}return e.__tjs=ke,ke}function Ii(e){return`
|
|
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 Oi(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 jn(e,n){if(e===n||typeof e=="number"&&typeof n=="number"&&Number.isNaN(e)&&Number.isNaN(n)||Oi(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)=>jn(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=>jn(e[s],n[s]))}function vn(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=vn(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=vn(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 Bi(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,j=
|
|
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 Yr(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 Di(e){if(Object.keys(e).length===0)return"";let n=[];for(let[t,r]of Object.entries(e)){let s=Yr(r);n.push(`// Resolved import: ${t}`),n.push(s)}return n.join(`
|
|
193
|
+
`)}function Hr(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 Xr(e){let n=[],t=Bi(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 y=kn(l);if(!(l.trim()&&y.length===0))try{let g=Hr(m);if(!g)continue;let x=y.map(E=>new Function(`return ${E}`)());n.push({funcName:c,args:x,expected:g.pattern,defaults:Object.keys(g.defaults).length>0?g.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 b=c;b<t.length;b++)if(t[b]==="{")l++;else if(t[b]==="}"&&(l--,l===0)){f=b;break}let p=t.slice(c,f),m=/constructor\s*\(([^)]*)\)/.exec(p);if(!m)continue;let y=m[1],g=kn(y);if(y.trim()&&g.length===0)continue;let x;try{x=g.map(b=>new Function(`return ${b}`)())}catch{continue}let E=/(async\s+)?(\w+)\s*\(([^)]*)\)\s*(:[?!]?)\s*/g,S;for(;(S=E.exec(p))!==null;){let b=S[2];if(b==="constructor")continue;let h=!!S[1],w=S[3];if(S[4]===":!")continue;let $=c+S.index,T=t.slice(0,$).split(`
|
|
195
|
+
`).length,j=p.slice(S.index+S[0].length),P=jt(j);if(!P)continue;let A=kn(w);if(!(w.trim()&&A.length===0))try{let C=Hr(P);if(!C)continue;let R=A.map(I=>new Function(`return ${I}`)());n.push({funcName:b,args:R,expected:C.pattern,defaults:Object.keys(C.defaults).length>0?C.defaults:void 0,line:T,isAsync:h,className:a,constructorArgs:x})}catch{}}}return n}function Qr(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(h=>{let w=h.match(/from\s+['"]([^'"]+)['"]/);return w&&!(w[1]in s)}),l=Yr(r),f=Di(s),p=n.map(h=>h.body).join(`
|
|
196
|
+
`),u="const { Is, IsNot, Eq, NotEq, TypeOf } = globalThis.__tjs ?? {};",m=e.map((h,w)=>{let _=o.size>0?Ze(h.body,o):h.body;return`
|
|
197
|
+
// Test ${w}: ${h.description}
|
|
194
198
|
try {
|
|
195
199
|
${u}
|
|
196
|
-
${
|
|
197
|
-
__testResults.push({ idx: ${
|
|
200
|
+
${_}
|
|
201
|
+
__testResults.push({ idx: ${w}, passed: true });
|
|
198
202
|
} catch (e) {
|
|
199
|
-
__testResults.push({ idx: ${
|
|
203
|
+
__testResults.push({ idx: ${w}, passed: false, isRef: e instanceof ReferenceError, error: e.message || String(e) });
|
|
200
204
|
}
|
|
201
205
|
`}).join(`
|
|
202
|
-
`),y=t.filter(
|
|
203
|
-
// Signature test ${
|
|
206
|
+
`),y=t.filter(h=>!h.isAsync),g=t.filter(h=>h.isAsync),x=y.map((h,w)=>{let _=h.className?`${h.className}.${h.funcName}`:h.funcName,$=h.className?`new ${h.className}(${(h.constructorArgs||[]).map(T=>JSON.stringify(T)).join(", ")}).${h.funcName}(${h.args.map(T=>JSON.stringify(T)).join(", ")})`:`${h.funcName}(${h.args.map(T=>JSON.stringify(T)).join(", ")})`;return`
|
|
207
|
+
// Signature test ${w}: ${_}
|
|
204
208
|
try {
|
|
205
209
|
let __actual = ${$};
|
|
206
|
-
const __expected = ${JSON.stringify(
|
|
207
|
-
const __defaults = ${JSON.stringify(
|
|
210
|
+
const __expected = ${JSON.stringify(h.expected)};${h.defaults?`
|
|
211
|
+
const __defaults = ${JSON.stringify(h.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: ${w}, passed: true });
|
|
211
215
|
} else {
|
|
212
|
-
__sigTestResults.push({ idx: ${
|
|
216
|
+
__sigTestResults.push({ idx: ${w}, 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: ${w}, passed: false, threw: true, error: e.message || String(e) });
|
|
219
223
|
}
|
|
220
224
|
`}).join(`
|
|
221
|
-
`);
|
|
225
|
+
`);Tn();let b=`
|
|
222
226
|
|
|
223
227
|
const __saved_tjs = globalThis.__tjs;
|
|
224
228
|
|
|
@@ -286,30 +290,30 @@ ${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 h=new Function("__deepEqual","__format","__typeMatches",b),{testResults:w,sigTestResults:_}=h(jn,nt,vn);for(let $ of w){let T=e[$.idx],j=!$.passed&&($.isRef||c&&$.error&&/is not defined$/.test($.error));i.push({description:T.description,passed:$.passed,inconclusive:j||void 0,error:$.error,line:T.line})}for(let $ of _){let T=y[$.idx],j=!$.passed&&($.threw||c&&$.error&&/is not defined$/.test($.error)),P=T.className?`${T.className}.${T.funcName}`:T.funcName;i.push({description:`${P} signature example`,passed:$.passed,inconclusive:j||void 0,error:$.error,isSignatureTest:!0,line:T.line})}}catch(h){let w=`Module could not be executed for testing: ${h.message}`;for(let _ of e)i.push({description:_.description,passed:!1,inconclusive:!0,error:w});for(let _ of y){let $=_.className?`${_.className}.${_.funcName}`:_.funcName;i.push({description:`${$} signature example`,passed:!1,inconclusive:!0,error:w,isSignatureTest:!0})}}for(let h of g){let w=h.className?`${h.className}.${h.funcName}`:h.funcName;i.push({description:`${w} signature example`,passed:!0,isSignatureTest:!0,line:h.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 kn(e){if(!e.trim())return[];let n=[],t=Fi(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 Fi(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 ts 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},qi=Object.fromEntries(Object.entries(d).map(([e,n])=>[n,e.replace(/_/g,".")])),it=253,H={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},Wi=Object.fromEntries(Object.entries(H).map(([e,n])=>[n,e.replace(/_/g,".")]));function An(e){return[it,...M(e)]}function es(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 Pn(e){let n=new ArrayBuffer(4);return new Float32Array(n)[0]=e,[...new Uint8Array(n)]}function ne(e){let n=new ArrayBuffer(8);return new Float64Array(n)[0]=e,[...new Uint8Array(n)]}function Rn(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 Ui(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 Li(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=qi[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 y=0;y<4;y++)u[y]=e[c+y];let m=new Float32Array(p)[0];c+=4,r.push(`${o()}f32.const ${m}`)}else if(l===d.f64_const){let p=Ui(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,y]=be(e,c);c+=y,r.push(`${o()}${f}${m?` offset=${m}`:""}`)}else if(l===it){let[p,u]=be(e,c);c+=u;let m=Wi[p]||`simd.unknown(0x${p.toString(16)})`;if(p===H.v128_load||p===H.v128_store){let[y,g]=be(e,c);c+=g;let[x,E]=be(e,c);c+=E,r.push(`${o()}${m}${x?` offset=${x}`:""}`)}else if(p===H.v128_const){let y=e.slice(c,c+16);c+=16,r.push(`${o()}v128.const ${y.map(g=>"0x"+g.toString(16).padStart(2,"0")).join(" ")}`)}else if(p===H.f32x4_extract_lane||p===H.f32x4_replace_lane){let y=e[c];c++,r.push(`${o()}${m} ${y}`)}else r.push(`${o()}${m}`)}else r.push(`${o()}${f}`)}return r.push(")"),r.join(`
|
|
310
|
+
`)}var At={Int8Array:{elementType:"i32",bytesPerElement:1,loadOp:d.i32_load8_s,storeOp:d.i32_store8},Uint8Array:{elementType:"i32",bytesPerElement:1,loadOp:d.i32_load8_u,storeOp:d.i32_store8},Uint8ClampedArray:{elementType:"i32",bytesPerElement:1,loadOp:d.i32_load8_u,storeOp:d.i32_store8},Int16Array:{elementType:"i32",bytesPerElement:2,loadOp:d.i32_load16_s,storeOp:d.i32_store16},Uint16Array:{elementType:"i32",bytesPerElement:2,loadOp:d.i32_load16_u,storeOp:d.i32_store16},Int32Array:{elementType:"i32",bytesPerElement:4,loadOp:d.i32_load,storeOp:d.i32_store},Uint32Array:{elementType:"i32",bytesPerElement:4,loadOp:d.i32_load,storeOp:d.i32_store},Float32Array:{elementType:"f32",bytesPerElement:4,loadOp:d.f32_load,storeOp:d.f32_store},Float64Array:{elementType:"f64",bytesPerElement:8,loadOp:d.f64_load,storeOp:d.f64_store}};function Ji(e,n=new Map){let t={params:e,locals:new Map,nextLocalIndex:e.length,localTypes:[],warnings:[],errors:[],loopDepth:0,needsMathImports:new Set,needsMemory:!1,hasReturn:!1,wat:[],watIndent:1,moduleFunctions:n};return e.forEach((r,s)=>{t.locals.set(r.name,{index:s,type:r.type})}),t}function vt(e,n,t){if(e.locals.has(n))return e.errors.push(`Duplicate local declaration: ${n}`),e.locals.get(n).index;let r=e.nextLocalIndex++;return e.locals.set(n,{index:r,type:t}),e.localTypes.push(t),r}function Re(e,n){return e.locals.get(n)}function qe(e,n){switch(e.type){case"ExpressionStatement":{let t=e.expression;return[...D(t,n),d.drop]}case"ReturnStatement":{let t=e;if(n.hasReturn=!0,!t.argument)return[d.return];let r=D(t.argument,n),s=L(t.argument,n);return s==="i32"?r.push(d.f64_convert_i32_s):s==="f32"&&r.push(d.f64_promote_f32),r.push(d.return),r}case"VariableDeclaration":{let t=e,r=[];for(let s of t.declarations){if(s.id.type!=="Identifier"){n.errors.push("Destructuring not supported in WASM blocks");continue}let o=s.id.name,i="f64";s.init&&(i=L(s.init,n));let a=vt(n,o,i);s.init&&(r.push(...D(s.init,n)),r.push(d.local_set,...M(a)))}return r}case"ForStatement":return Vi(e,n);case"IfStatement":return zi(e,n);case"BlockStatement":{let t=e,r=[];for(let s of t.body)r.push(...qe(s,n));return r}default:return n.errors.push(`Unsupported statement type: ${e.type}`),[]}}function Vi(e,n){let t=[];return e.init&&(e.init.type==="VariableDeclaration"?t.push(...qe(e.init,n)):t.push(...D(e.init,n))),t.push(d.block,ae.void),t.push(d.loop,ae.void),e.test&&(t.push(...D(e.test,n)),t.push(d.i32_eqz),t.push(d.br_if,1)),n.loopDepth++,e.body&&t.push(...qe(e.body,n)),n.loopDepth--,e.update&&(t.push(...D(e.update,n)),t.push(d.drop)),t.push(d.br,0),t.push(d.end),t.push(d.end),t}function zi(e,n){let t=[];return t.push(...D(e.test,n)),t.push(d.if,ae.void),t.push(...qe(e.consequent,n)),e.alternate&&(t.push(d.else),t.push(...qe(e.alternate,n))),t.push(d.end),t}function L(e,n){switch(e.type){case"Literal":{let t=e;return typeof t.value=="number"?t.raw&&(t.raw.includes(".")||t.raw.includes("e"))?"f64":Number.isInteger(t.value)&&t.value>=-2147483648&&t.value<=2147483647?"i32":"f64":"f64"}case"Identifier":return Re(n,e.name)?.type??"f64";case"BinaryExpression":case"AssignmentExpression":{let t=e;if(["<",">","<=",">=","==","!=","===","!=="].includes(t.operator)||["|","&","^","<<",">>",">>>"].includes(t.operator))return"i32";let r=L(t.left,n),s=L(t.right,n);return r==="v128"||s==="v128"?"v128":r==="f64"||s==="f64"?"f64":r==="f32"||s==="f32"?"f32":"i32"}case"UnaryExpression":{let t=e;return t.operator==="!"?"i32":L(t.argument,n)}case"MemberExpression":{let t=e;if(t.object.type==="Identifier"&&Re(n,t.object.name)){let s=n.params.find(o=>o.name===t.object.name);if(s?.arrayType){let o=At[s.arrayType];if(o)return o.elementType}}return"f64"}case"CallExpression":{let t=e;if(t.callee.type==="MemberExpression"){let r=t.callee;if(r.object.type==="Identifier"&&r.object.name==="Math")return"f64"}if(t.callee.type==="Identifier"){let r=t.callee.name;if(r==="f32x4_extract_lane")return"f32";if(r.startsWith("f32x4_")||r==="v128_load")return"v128";let s=n.moduleFunctions.get(r);if(s)return s.hasReturn?"f64":"i32"}return"f64"}default:return"f64"}}function D(e,n){switch(e.type){case"Literal":{let t=e;if(typeof t.value=="number"){let r=L(e,n);return r==="i32"?[d.i32_const,...ot(t.value|0)]:r==="f32"?[d.f32_const,...Pn(t.value)]:[d.f64_const,...ne(t.value)]}return n.errors.push(`Unsupported literal type: ${typeof t.value}`),[d.f64_const,...ne(0)]}case"Identifier":{let t=e.name,r=Re(n,t);return r?[d.local_get,...M(r.index)]:(n.errors.push(`Unknown identifier: ${t}`),[d.f64_const,...ne(0)])}case"BinaryExpression":return Gi(e,n);case"UnaryExpression":return Zi(e,n);case"AssignmentExpression":return Ki(e,n);case"UpdateExpression":return Hi(e,n);case"MemberExpression":return Yi(e,n);case"CallExpression":return Qi(e,n);case"SequenceExpression":{let t=e,r=[];for(let s=0;s<t.expressions.length;s++)r.push(...D(t.expressions[s],n)),s<t.expressions.length-1&&r.push(d.drop);return r}default:return n.errors.push(`Unsupported expression type: ${e.type}`),[d.f64_const,...ne(0)]}}function Gi(e,n){let t=D(e.left,n),r=D(e.right,n),s=L(e,n),o=L(e.left,n),i=L(e.right,n),a=["<",">","<=",">=","==","===","!=","!=="].includes(e.operator),c;o==="f64"||i==="f64"?c="f64":o==="f32"||i==="f32"?c="f32":c="i32",!a&&s==="f64"&&(c="f64");let l=t,f=r;c==="f64"?(o==="i32"?l=[...t,d.f64_convert_i32_s]:o==="f32"&&(l=[...t,d.f64_promote_f32]),i==="i32"?f=[...r,d.f64_convert_i32_s]:i==="f32"&&(f=[...r,d.f64_promote_f32])):c==="f32"&&(o==="i32"&&(l=[...t,d.f32_convert_i32_s]),i==="i32"&&(f=[...r,d.f32_convert_i32_s]));let u={"+":{i32:d.i32_add,f32:d.f32_add,f64:d.f64_add},"-":{i32:d.i32_sub,f32:d.f32_sub,f64:d.f64_sub},"*":{i32:d.i32_mul,f32:d.f32_mul,f64:d.f64_mul},"/":{i32:d.i32_div_s,f32:d.f32_div,f64:d.f64_div},"%":{i32:d.i32_rem_s},"<":{i32:d.i32_lt_s,f32:d.f32_lt,f64:d.f64_lt},">":{i32:d.i32_gt_s,f32:d.f32_gt,f64:d.f64_gt},"<=":{i32:d.i32_le_s,f32:d.f32_le,f64:d.f64_le},">=":{i32:d.i32_ge_s,f32:d.f32_ge,f64:d.f64_ge},"==":{i32:d.i32_eq,f32:d.f32_eq,f64:d.f64_eq},"===":{i32:d.i32_eq,f32:d.f32_eq,f64:d.f64_eq},"!=":{i32:d.i32_ne,f32:d.f32_ne,f64:d.f64_ne},"!==":{i32:d.i32_ne,f32:d.f32_ne,f64:d.f64_ne},"|":{i32:d.i32_or},"&":{i32:d.i32_and},"^":{i32:d.i32_xor},"<<":{i32:d.i32_shl},">>":{i32:d.i32_shr_s},">>>":{i32:d.i32_shr_u}}[e.operator];if(!u)return n.errors.push(`Unsupported operator: ${e.operator}`),[d.f64_const,...ne(0)];let m=u[c]??u.f64??u.i32;return m===void 0?(n.errors.push(`Operator ${e.operator} not supported for type ${c}`),[d.f64_const,...ne(0)]):[...l,...f,m]}function Zi(e,n){let t=D(e.argument,n),r=L(e.argument,n);switch(e.operator){case"-":return r==="i32"?[d.i32_const,0,...t,d.i32_sub]:r==="f32"?[...t,d.f32_neg]:[...t,d.f64_neg];case"!":return[...t,d.i32_eqz];case"~":return[...t,d.i32_const,...ot(-1),d.i32_xor];default:return n.errors.push(`Unsupported unary operator: ${e.operator}`),t}}function Ki(e,n){if(e.left.type==="MemberExpression")return Xi(e.left,e.right,e.operator,n);if(e.left.type!=="Identifier")return n.errors.push("Assignment target must be identifier or array element"),[];let t=e.left.name,r=Re(n,t);if(!r)return n.errors.push(`Unknown variable: ${t}`),[];let s=[];if(e.operator==="="){s.push(...D(e.right,n));let o=L(e.right,n);r.type==="f64"&&o==="i32"?s.push(d.f64_convert_i32_s):r.type==="f64"&&o==="f32"?s.push(d.f64_promote_f32):r.type==="i32"&&o==="f64"?s.push(d.i32_trunc_f64_s):r.type==="i32"&&o==="f32"?s.push(d.i32_trunc_f32_s):r.type==="f32"&&o==="i32"?s.push(d.f32_convert_i32_s):r.type==="f32"&&o==="f64"&&s.push(d.f32_demote_f64)}else{let o=L(e.right,n),i=r.type;o==="f64"||r.type==="f64"?i="f64":(o==="f32"||r.type==="f32")&&(i="f32"),s.push(d.local_get,...M(r.index)),i==="f64"&&r.type==="i32"?s.push(d.f64_convert_i32_s):i==="f64"&&r.type==="f32"?s.push(d.f64_promote_f32):i==="f32"&&r.type==="i32"&&s.push(d.f32_convert_i32_s),s.push(...D(e.right,n)),i==="f64"&&o==="i32"?s.push(d.f64_convert_i32_s):i==="f64"&&o==="f32"?s.push(d.f64_promote_f32):i==="f32"&&o==="i32"&&s.push(d.f32_convert_i32_s);let a=e.operator.slice(0,-1),l={"+":{i32:d.i32_add,f32:d.f32_add,f64:d.f64_add},"-":{i32:d.i32_sub,f32:d.f32_sub,f64:d.f64_sub},"*":{i32:d.i32_mul,f32:d.f32_mul,f64:d.f64_mul},"/":{i32:d.i32_div_s,f32:d.f32_div,f64:d.f64_div}}[a]?.[i];if(!l)return n.errors.push(`Unsupported compound assignment: ${e.operator}`),[];s.push(l),r.type==="i32"&&i==="f64"?s.push(d.i32_trunc_f64_s):r.type==="i32"&&i==="f32"?s.push(d.i32_trunc_f32_s):r.type==="f32"&&i==="f64"&&s.push(d.f32_demote_f64)}return s.push(d.local_tee,...M(r.index)),s}function Hi(e,n){if(e.argument.type!=="Identifier")return n.errors.push("Update expression argument must be identifier"),[];let t=e.argument.name,r=Re(n,t);if(!r)return n.errors.push(`Unknown variable: ${t}`),[];let s=[],o=r.type==="i32";return e.prefix?(s.push(d.local_get,...M(r.index)),o?(s.push(d.i32_const,1),s.push(e.operator==="++"?d.i32_add:d.i32_sub)):(s.push(d.f64_const,...ne(1)),s.push(e.operator==="++"?d.f64_add:d.f64_sub)),s.push(d.local_tee,...M(r.index))):(s.push(d.local_get,...M(r.index)),s.push(d.local_get,...M(r.index)),o?(s.push(d.i32_const,1),s.push(e.operator==="++"?d.i32_add:d.i32_sub)):(s.push(d.f64_const,...ne(1)),s.push(e.operator==="++"?d.f64_add:d.f64_sub)),s.push(d.local_set,...M(r.index))),s}function Yi(e,n){if(e.object.type!=="Identifier")return n.errors.push("Array access requires identifier"),[];let t=e.object.name,r=n.params.find(l=>l.name===t);if(!r?.isArray||!r.arrayType)return n.errors.push(`${t} is not a typed array parameter`),[];let s=At[r.arrayType];if(!s)return n.errors.push(`Unknown array type: ${r.arrayType}`),[];n.needsMemory=!0;let o=[],i=Re(n,t);if(!i)return n.errors.push(`Unknown array: ${t}`),[];if(o.push(d.local_get,...M(i.index)),!e.computed||!e.property)return n.errors.push("Array access requires computed index"),[];let a=D(e.property,n),c=L(e.property,n);return o.push(...a),c==="f64"&&o.push(d.i32_trunc_f64_s),s.bytesPerElement>1&&(o.push(d.i32_const,...ot(s.bytesPerElement)),o.push(d.i32_mul)),o.push(d.i32_add),o.push(s.loadOp,0,0),o}function Xi(e,n,t,r){if(e.object.type!=="Identifier")return r.errors.push("Array store requires identifier"),[];let s=e.object.name,o=r.params.find(y=>y.name===s);if(!o?.isArray||!o.arrayType)return r.errors.push(`${s} is not a typed array parameter`),[];let i=At[o.arrayType];if(!i)return r.errors.push(`Unknown array type: ${o.arrayType}`),[];r.needsMemory=!0;let a=[],c=Re(r,s);if(!c)return[];if(!e.computed||!e.property)return r.errors.push("Array store requires computed index"),[];let l=D(e.property,r),f=L(e.property,r),p=()=>{let y=[];return y.push(d.local_get,...M(c.index)),y.push(...l),f==="f64"&&y.push(d.i32_trunc_f64_s),i.bytesPerElement>1&&(y.push(d.i32_const,...ot(i.bytesPerElement)),y.push(d.i32_mul)),y.push(d.i32_add),y};if(t==="=")a.push(...D(n,r));else{let y=vt(r,`__addr_${r.nextLocalIndex}`,"i32");a.push(...p()),a.push(d.local_tee,...M(y)),a.push(i.loadOp,0,0),a.push(...D(n,r));let g=L(n,r);i.elementType==="f32"&&g==="f64"?a.push(d.f32_demote_f64):i.elementType==="f64"&&g==="f32"?a.push(d.f64_promote_f32):i.elementType==="f32"&&g==="i32"?a.push(d.f32_convert_i32_s):i.elementType==="f64"&&g==="i32"?a.push(d.f64_convert_i32_s):i.elementType==="i32"&&g==="f64"?a.push(d.i32_trunc_f64_s):i.elementType==="i32"&&g==="f32"&&a.push(d.i32_trunc_f32_s);let x=t.slice(0,-1),E={"+":i.elementType==="i32"?d.i32_add:i.elementType==="f32"?d.f32_add:d.f64_add,"-":i.elementType==="i32"?d.i32_sub:i.elementType==="f32"?d.f32_sub:d.f64_sub,"*":i.elementType==="i32"?d.i32_mul:i.elementType==="f32"?d.f32_mul:d.f64_mul};a.push(E[x]??d.f64_add);let S=vt(r,`__val_${r.nextLocalIndex}`,i.elementType);return a.push(d.local_set,...M(S)),a.push(d.local_get,...M(y)),a.push(d.local_get,...M(S)),a.push(i.storeOp,0,0),a.push(d.local_get,...M(S)),a}let u=L(n,r);i.elementType==="f32"&&u==="f64"?a.push(d.f32_demote_f64):i.elementType==="f64"&&u==="f32"?a.push(d.f64_promote_f32):i.elementType==="i32"&&u==="f64"&&a.push(d.i32_trunc_f64_s);let m=vt(r,`__tmp_${r.nextLocalIndex}`,i.elementType);return a.push(d.local_set,...M(m)),a.push(d.local_get,...M(c.index)),a.push(...l),f==="f64"&&a.push(d.i32_trunc_f64_s),i.bytesPerElement>1&&(a.push(d.i32_const,...ot(i.bytesPerElement)),a.push(d.i32_mul)),a.push(d.i32_add),a.push(d.local_get,...M(m)),a.push(i.storeOp,0,0),a.push(d.local_get,...M(m)),a}function Qi(e,n){if(e.callee.type==="MemberExpression"){let t=e.callee;if(t.object.type==="Identifier"&&t.object.name==="Math"&&t.property.type==="Identifier"){let r=t.property.name;return ro(r,e.arguments,n)}}if(e.callee.type==="Identifier"){let t=e.callee.name;if(t.startsWith("f32x4_")||t.startsWith("v128_"))return no(t,e.arguments,n);let r=n.moduleFunctions.get(t);if(r)return eo(r,t,e.arguments,n)}return n.errors.push(`Unsupported function call: ${e.callee.type}`),[d.f64_const,...ne(0)]}function eo(e,n,t,r){if(t.length!==e.params.length)return r.errors.push(`wasm function ${n} expects ${e.params.length} arguments, got ${t.length}`),[d.f64_const,...ne(0)];let s=[];for(let o=0;o<t.length;o++){let i=t[o],a=e.params[o].type,c=L(i,r);if(s.push(...D(i,r)),c!==a){let l=to(c,a);l===void 0?r.errors.push(`wasm function ${n} param ${o} expects ${a}, got ${c} (no conversion available)`):l!==null&&s.push(l)}}return s.push(d.call,...M(e.index)),e.hasReturn||s.push(d.i32_const,0),s}function to(e,n){if(e===n)return null;if(!(e==="v128"||n==="v128")&&!(e==="i64"||n==="i64"))switch(`${e}->${n}`){case"f64->i32":return d.i32_trunc_f64_s;case"f32->i32":return d.i32_trunc_f32_s;case"i32->f64":return d.f64_convert_i32_s;case"i32->f32":return d.f32_convert_i32_s;case"f32->f64":return d.f64_promote_f32;case"f64->f32":return d.f32_demote_f64;default:return}}function no(e,n,t){t.needsMemory=!0;let r=[];switch(e){case"v128_load":case"f32x4_load":{r.push(...D(n[0],t)),L(n[0],t)==="f64"&&r.push(d.i32_trunc_f64_s),r.push(...D(n[1],t));let o=L(n[1],t);return o==="f64"?r.push(d.i32_trunc_f64_s):o==="f32"&&r.push(d.i32_trunc_f32_s),r.push(d.i32_add),r.push(...es(H.v128_load,2,0)),r}case"v128_store":case"f32x4_store":{r.push(...D(n[0],t)),L(n[0],t)==="f64"&&r.push(d.i32_trunc_f64_s),r.push(...D(n[1],t));let o=L(n[1],t);return o==="f64"?r.push(d.i32_trunc_f64_s):o==="f32"&&r.push(d.i32_trunc_f32_s),r.push(d.i32_add),r.push(...D(n[2],t)),r.push(...es(H.v128_store,2,0)),r.push(d.i32_const,0),r}case"f32x4_splat":{r.push(...D(n[0],t));let s=L(n[0],t);return s==="i32"?r.push(d.f32_convert_i32_s):s==="f64"&&r.push(d.f32_demote_f64),r.push(...An(H.f32x4_splat)),r}case"f32x4_extract_lane":{r.push(...D(n[0],t));let s=n[1].value;return!Number.isInteger(s)||s<0||s>3?(t.errors.push(`f32x4_extract_lane: lane must be 0-3, got ${s}`),[d.f32_const,...Pn(0)]):(r.push(it,...M(H.f32x4_extract_lane),s),r)}case"f32x4_replace_lane":{r.push(...D(n[0],t));let s=n[1].value;if(!Number.isInteger(s)||s<0||s>3)return t.errors.push(`f32x4_replace_lane: lane must be 0-3, got ${s}`),[d.f32_const,...Pn(0)];r.push(...D(n[2],t));let o=L(n[2],t);return o==="i32"?r.push(d.f32_convert_i32_s):o==="f64"&&r.push(d.f32_demote_f64),r.push(it,...M(H.f32x4_replace_lane),s),r}case"f32x4_add":case"f32x4_sub":case"f32x4_mul":case"f32x4_div":{r.push(...D(n[0],t)),r.push(...D(n[1],t));let s={f32x4_add:H.f32x4_add,f32x4_sub:H.f32x4_sub,f32x4_mul:H.f32x4_mul,f32x4_div:H.f32x4_div};return r.push(...An(s[e])),r}case"f32x4_neg":case"f32x4_sqrt":{r.push(...D(n[0],t));let s={f32x4_neg:H.f32x4_neg,f32x4_sqrt:H.f32x4_sqrt};return r.push(...An(s[e])),r}default:return t.errors.push(`Unknown SIMD intrinsic: ${e}`),[d.f64_const,...ne(0)]}}function ro(e,n,t){let r=[];for(let a of n){r.push(...D(a,t));let c=L(a,t);c==="i32"?r.push(d.f64_convert_i32_s):c==="f32"&&r.push(d.f64_promote_f32)}let o={abs:d.f64_abs,ceil:d.f64_ceil,floor:d.f64_floor,trunc:d.f64_trunc,sqrt:d.f64_sqrt,min:d.f64_min,max:d.f64_max}[e];return o!==void 0?(r.push(o),r):["sin","cos","tan","asin","acos","atan","atan2","exp","log","pow"].includes(e)?(t.needsMathImports.add(e),t.errors.push(`Math.${e} requires JS import (not yet implemented)`),[d.f64_const,...ne(0)]):(t.errors.push(`Unknown Math method: ${e}`),[d.f64_const,...ne(0)])}function ns(e){let n=e.split(":").map(o=>o.trim()),t=n[0];if(n.length===1)return{name:t,type:"f64"};let r=n[1];return At[r]?{name:t,type:"i32",isArray:!0,arrayType:r}:{name:t,type:{i32:"i32",i64:"i64",f32:"f32",f64:"f64",number:"f64",int:"i32"}[r]??"f64"}}function so(e,n){let t=e.map(s=>ae[s.type]),r=n?[1,ae.f64]:[0];return[96,...M(e.length),...t,...r]}function io(e,n){let t=[];if(n.length>0){let o=n[0],i=1;for(let a=1;a<n.length;a++)n[a]===o?i++:(t.push([...M(i),ae[o]]),o=n[a],i=1);t.push([...M(i),ae[o]])}let s=[...[...M(t.length),...t.flat()],...e,d.end];return[...M(s.length),...s]}function oo(){return st(rt.import,[1,...Rn("env"),...Rn("memory"),2,0,1])}function ao(e,n){if(e.length!==n.length)throw new Error("functions and exportNames length mismatch");let t=[0,97,115,109,1,0,0,0],r=e.map(u=>so(u.params,u.hasReturn)),s=st(rt.type,[...M(r.length),...r.flat()]),i=e.some(u=>u.needsMemory)?oo():[],a=st(rt.function,[...M(e.length),...e.map((u,m)=>M(m)).flat()]),c=st(rt.export,[...M(e.length),...n.map((u,m)=>[...Rn(u),0,...M(m)]).flat()]),l=e.map(u=>io(u.bodyCode,u.localTypes)),f=st(rt.code,[...M(l.length),...l.flat()]),p=[...t,...s];return i.length>0&&p.push(...i),p.push(...a,...c,...f),p}function co(e,n=new Map){try{let t=e.captures.map(ns),r;try{let c=`function __wasm__(${t.map(l=>l.name).join(", ")}) { ${e.body} }`;r=ts.parse(c,{ecmaVersion:2022})}catch(c){return{success:!1,warnings:[],error:`Parse error: ${c.message}`}}let o=r.body[0].body.body,i=Ji(t,n),a=[];for(let c of o)a.push(...qe(c,i));return i.errors.length>0?{success:!1,warnings:i.warnings,error:i.errors.join("; ")}:{success:!0,fn:{params:t,bodyCode:a,localTypes:i.localTypes,needsMemory:i.needsMemory,hasReturn:i.hasReturn},wat:Li(a,t,i.localTypes),warnings:i.warnings}}catch(t){return{success:!1,warnings:[],error:t.message}}}function rs(e){let n=new Map,t=[];for(let c=0;c<e.length;c++){let l=e[c],f=l.captures.map(ns),p=l.returnType!==void 0;t.push({params:f,hasReturn:p}),l.name&&n.set(l.name,{index:c,params:f,hasReturn:p})}let r=[],s=[],o=[],i=[];for(let c=0;c<e.length;c++){let l=e[c],f=co(l,n);if(i.push(...f.warnings),!f.success||!f.fn){r.push({id:l.id,success:!1,error:f.error}),s.push(lo(t[c])),o.push({id:l.id,exportName:`compute_${c}`,captures:l.captures,needsMemory:!1,wat:`(failed: ${f.error??"unknown error"})`});continue}s.push(f.fn),o.push({id:l.id,exportName:`compute_${c}`,captures:l.captures,needsMemory:f.fn.needsMemory,wat:f.wat??""}),r.push({id:l.id,success:!0,exportIndex:c})}if(s.length===0)return{bytes:new Uint8Array,results:r,exports:[],needsMemory:!1,warnings:i};let a=ao(s,o.map(c=>c.exportName));return{bytes:new Uint8Array(a),results:r,exports:o,needsMemory:o.some(c=>c.needsMemory),warnings:i}}function lo(e){let n=e.hasReturn?[d.f64_const,...ne(0)]:[];return{params:e.params,bodyCode:n,localTypes:[],needsMemory:!1,hasReturn:e.hasReturn}}function ss(e){let n=rs(e),t=new Map(n.exports.map(f=>[f.id,f])),r=n.results.map(f=>{if(!f.success)return{id:f.id,success:!1,error:f.error};let p=t.get(f.id);return{id:f.id,success:!0,byteLength:n.bytes.length,_exportName:p.exportName}});if(n.exports.length===0)return{code:"",results:r};let s=n.exports.map(f=>{let p=f.wat.split(`
|
|
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(
|
|
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}
|
|
313
317
|
;(async()=>{
|
|
314
318
|
const __wasmExports=[${o}];
|
|
315
319
|
const __wasmModuleB64=${JSON.stringify(i)};
|
|
@@ -338,25 +342,31 @@ for(const{id,n,c,m}of __wasmExports){
|
|
|
338
342
|
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
343
|
return r};
|
|
340
344
|
}})();
|
|
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
|
-
${
|
|
345
|
+
`.trim(),l=r.map(({_exportName:f,...p})=>p);return{code:c,results:l}}import*as is from"acorn";function Cn(e,n){let t=[];function r(o){t.push({start:o.start,end:o.end,newText:`__tjs.toBool(${te(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(${te(i.test,n)})?(${te(i.consequent,n)}):(${te(i.alternate,n)})`});return}case"LogicalExpression":{let i=o;if(i.operator==="&&"||i.operator==="||"){t.push({start:i.start,end:i.end,newText:te(o,n)});return}break}case"UnaryExpression":{let i=o;if(i.operator==="!"){t.push({start:i.start,end:i.end,newText:`!__tjs.toBool(${te(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(${te(i.arguments[0],n)})`});return}break}}uo(o,s)}}return s(e),fo(t)}function te(e,n){if(!e)return"";switch(e.type){case"LogicalExpression":{let t=e,r=te(t.left,n),s=te(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(${te(t.test,n)})?(${te(t.consequent,n)}):(${te(t.alternate,n)})`}case"UnaryExpression":{let t=e;return t.operator==="!"?`!__tjs.toBool(${te(t.argument,n)})`:Mn(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(${te(t.arguments[0],n)})`:Mn(e,n)}}return Mn(e,n)}function Mn(e,n){let t=e.start,r=e.end;if(typeof t!="number"||typeof r!="number")return"";let s=os(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+=te(a,n),i=a.end);return i<r&&(o+=n.slice(i,r)),o}function uo(e,n){for(let t of os(e))n(t)}function os(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 fo(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 Nn(e){let n;try{n=is.parse(`function __wrap__(){${e}}`,{ecmaVersion:2022,sourceType:"module",locations:!1})}catch{return e}let t=`function __wrap__(){${e}}`,r=Cn(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 po(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 mo(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],y=m.type==="ObjectPattern"?m:m.left,g=ge(y,t);if(g.type.kind==="object"&&g.type.destructuredParams){l={},f=new Set;for(let[x,E]of Object.entries(g.type.destructuredParams))a[x]={...E,description:i.params[x]},l[x]=E.type,E.required&&f.add(x)}}else for(let m of e.params)if(m.type==="Identifier"){let y=ge(m,t);a[m.name]={...y,required:t.has(m.name),description:i.params[m.name]}}else if(m.type==="AssignmentPattern"&&m.left.type==="Identifier"){let y=ge(m,t),g=po(s||"",e.id?.name||"",m.left.name);a[m.left.name]={...y,required:g,default:g?null:y.example??y.default,description:i.params[m.left.name]}}else if(m.type==="ObjectPattern"){let y=ge(m,t);if(y.type.kind==="object"&&y.type.destructuredParams)for(let[g,x]of Object.entries(y.type.destructuredParams))a[g]={...x,description:i.params[g]}}else if(m.type==="RestElement"&&m.argument?.type==="Identifier"){let y=m.argument.name,g=n.match(new RegExp(`\\.\\.\\.${y}\\s*:\\s*([^)]+?)\\s*\\)`));if(g)try{let x=as(g[1].trim(),0,{ecmaVersion:2022}),E=Y(x);a[y]={name:y,type:E,required:!1,description:i.params[y]}}catch{a[y]={name:y,type:{kind:"array"},required:!1,description:i.params[y]}}else a[y]={name:y,type:{kind:"array"},required:!1,description:i.params[y]}}let p;if(r)try{let m=r.includes("=")?ls(r):r,y=as(m,0,{ecmaVersion:2022});p=Y(y)}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 yo(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}`,y=Pt(f,p);if(y){let g=p.kind;u?r.push(`if (${y}) return __tjs.typeError('${m}', '${g}', ${f});`):r.push(`if (${f} !== undefined && ${y}) return __tjs.typeError('${m}', '${g}', ${f});`)}}return r.length===0?null:(r.unshift(`__tjs.pushStack('${o}');`),{preamble:r.join(`
|
|
346
|
+
`),suffix:"__tjs.popStack();"})}let i=Object.entries(n.params);if(i.length===0)return null;for(let[a]of i)r.push(`if (${a} instanceof Error) return ${a};`);for(let[a,c]of i){let l=`${s}${e}.${a}`;c.type.kind==="array"&&r.push(`if (Array.isArray(${a})) { for (const __i of ${a}) { if (__i instanceof Error && __i.path !== undefined) return __i } }`);let f=Pt(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=$o(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(`
|
|
347
|
+
`),suffix:"__tjs.popStack();"})}function ls(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 go(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 ho(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 bo(e){let n=e.match(/^\/\*\s*tjs\s*<-\s*([^*]+?)\s*\*\//);return n?n[1].trim():void 0}function xo(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 Rt(e,n={}){let{filename:t="<source>",runTests:r=!0,debug:s=!1,resolvedImports:o={}}=n,i=[];e=zt(e);let c=bo(e)||t,{code:l,tests:f,mocks:p,testRunner:u}=Ht(e),{ast:m,originalSource:y,requiredParams:g,unsafeFunctions:x}=Se(l,{filename:t,colonShorthand:!0,dialect:n.dialect,moduleLoader:n.moduleLoader}),E=_o(m),S=bt(l,{dialect:n.dialect,moduleLoader:n.moduleLoader,filename:t});for(let v of S.predicates)v.verified||i.push(`${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()}`:""}`);let b=S.predicates.length?S.predicates:void 0;for(let v of f)v.body=ze(v.body),S.tjsModes.tjsEquals&&(v.body=Ge(v.body)),S.tjsModes.tjsStandard&&(v.body=Nn(v.body));for(let v of p)v.body=ze(v.body),S.tjsModes.tjsEquals&&(v.body=Ge(v.body)),S.tjsModes.tjsStandard&&(v.body=Nn(v.body));let h={},w=[],_=[];for(let v of E){let O=v.id?.name||"anonymous",N=go(l,O),se;if(N&&N.includes("="))try{let G=N.matchAll(/(\w+)\s*=\s*/g),Q=ls(N),fe=new Function(`return ${Q}`)(),ee={};for(let Dt of G){let Ue=Dt[1];Ue in fe&&(ee[Ue]=fe[Ue])}Object.keys(ee).length>0&&(se=ee)}catch{}let{types:ue,warnings:xs}=mo(v,y,g,N,l);i.push(...xs),h[O]=ue;for(let G of v.params)if(G.type==="AssignmentPattern"&&G.left.type==="Identifier"&&G.right.type==="Identifier"){let Q=G.left.name,fe=G.right.name,ee=h[fe];if(ee&&ue.params[Q]){let Dt=Object.entries(ee.params).map(([Es,Ts])=>({name:Es,type:Ts.type})),Ue=ee.returns??{kind:"any"};ue.params[Q].type={kind:"function",params:Dt,returns:Ue}}}for(let G of v.params)if(G.type==="AssignmentPattern"){let Q=G.left?.name||G.left?.value,fe=Q?ue.params[Q]:null;if(fe?.required&&fe.default===null)_.push({start:G.left.end,end:G.right.end});else{let ee=G.right;ee.type==="BinaryExpression"&&ee.operator==="|"&&_.push({start:ee.left.end,end:ee.end})}}let Fn=S.moduleSafety==="none"||x.has(O),_s=S.safeFunctions.has(O),ws=ho(l,O),$s=xo(e,O),Ce={file:c,line:$s??v.loc?.start.line??0,column:v.loc?.start.column??0},Ss={unsafe:Fn,safe:_s,returnSafety:ws},qn=S.polymorphicNames.has(O),Bt;if(qn){let G=[];for(let fe of E){let ee=fe.id?.name||"";ee.startsWith(O+"$")&&G.push(ee)}let Q={polymorphic:!0,variants:G};Ce&&(Q.source=`${Ce.file}:${Ce.line}`),Bt=`${O}.__tjs = ${JSON.stringify(Q,null,2)}`}else Bt=wo(O,ue,Ss,{debug:s,source:Ce,returnDefaults:se});if(w.push({position:v.end,text:`
|
|
348
|
+
${Bt}`}),!Fn&&!qn){let G=`${Ce.file}:${Ce.line}`,Q=yo(O,ue,G);Q&&v.body&&v.body.start!==void 0&&(w.push({position:v.body.start+1,text:`
|
|
345
349
|
${Q.preamble}
|
|
346
|
-
`}),Q.suffix&&
|
|
350
|
+
`}),Q.suffix&&w.push({position:v.body.end-1,text:`
|
|
347
351
|
${Q.suffix}
|
|
348
|
-
`}))}}if(
|
|
352
|
+
`}))}}if(S.tjsModes.tjsStandard){let v=Cn(m,S.source);for(let O of v)_.push({start:O.start,end:O.end}),w.push({position:O.start,text:O.newText})}_.sort((v,O)=>O.start-v.start);let $=S.source;for(let{start:v,end:O}of _)$=$.slice(0,v)+$.slice(O);for(let v of w){let O=0;for(let N of _)N.start<v.position&&(O+=N.end-N.start);v.position-=O}w.sort((v,O)=>O.position-v.position);for(let{position:v,text:O}of w)$=$.slice(0,v)+O+$.slice(v);let T=$.includes("__tjs.typeError("),j=$.includes("__tjs.pushStack("),P=$.includes("Is("),A=$.includes("IsNot("),C=$.includes("Eq("),R=$.includes("NotEq("),I=$.includes("TypeOf("),B=/\bType\(/.test($),J=/\bGeneric\(/.test($),V=/\bFunctionPredicate\(/.test($),X=/\bEnum\(/.test($),Me=/\bUnion\(/.test($),ct=$.includes("__tjs.bang("),It=$.includes("__tjs.toBool("),Ot=$.includes("__tjs.checkFnShape("),Bn=S.tjsModes.tjsSafeEval;if(T||j||P||A||C||R||I||B||J||V||X||Me||ct||It||Ot||Bn){let v=[];T&&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}"),j&&v.push("const __stack=[];function pushStack(n){__stack.push(n)}function popStack(){__stack.pop()}function getStack(){return[...__stack]}"),C&&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}"),R&&v.push("function NotEq(a,b){return!Eq(a,b)}"),I&&v.push("function TypeOf(v){return v===null?'null':typeof v}"),P&&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]))}"),A&&v.push("function IsNot(a,b){return!Is(a,b)}"),B&&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}"),J&&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}"),V&&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}}"),X&&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}}"),Me&&v.push("function Union(d,...v){const vals=v.flat();return{description:d,check:x=>vals.includes(x),values:vals,__runtimeType:true}}"),It&&v.push("function toBool(v){if(v instanceof Boolean||v instanceof Number||v instanceof String)return Boolean(v.valueOf());return Boolean(v)}"),Ot&&(T||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}`)),ct&&(T||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 O=v.length>0?v.join(`;
|
|
349
353
|
`)+`;
|
|
350
|
-
`:"",N=[]
|
|
351
|
-
|
|
352
|
-
|
|
354
|
+
`:"",N=[];T&&N.push("typeError","isMonadicError"),j&&N.push("pushStack","popStack","getStack"),C&&N.push("Eq"),R&&N.push("NotEq"),I&&N.push("TypeOf"),P&&N.push("Is","tjsEquals"),A&&N.push("IsNot"),B&&N.push("Type"),J&&N.push("Generic"),V&&N.push("FunctionPredicate"),X&&N.push("Enum"),Me&&N.push("Union"),It&&N.push("toBool"),Ot&&(N.push("checkFnShape"),T||N.push("typeError","isMonadicError")),ct&&(N.push("bang"),T||N.push("typeError","isMonadicError"));let se=N.length>0?`{${N.join(",")}}`:"undefined";$=O+`const __tjs = globalThis.__tjs?.createRuntime?.() ?? ${se};
|
|
355
|
+
`+$}Bn&&($=`import { Eval, SafeFunction } from 'tjs-lang';
|
|
356
|
+
`+$);let We;if(r){let v=Xr(e);We=Qr(f,p,v,$,o,S.extensions);let O=We.filter(N=>!N.passed&&!N.inconclusive);if(O.length>0&&r===!0){let N=O.map(se=>{if(se.isSignatureTest)return` Function signature example is inconsistent:
|
|
353
357
|
${se.error}`;let ue=se.line?` (line ${se.line})`:"";return` Test '${se.description}'${ue} failed:
|
|
354
358
|
${se.error}`});throw new Error(`Transpile-time test failures:
|
|
355
359
|
${N.join(`
|
|
356
|
-
`)}`)}}if(r==="only")return{code:"",types:h,metadata:h,testResults:
|
|
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
|
-
|
|
360
|
+
`)}`)}}if(r==="only")return{code:"",types:h,metadata:h,testResults:We,testCount:We?.length,predicates:b};let Dn;if(S.wasmBlocks.length>0){let v=ss(S.wasmBlocks);v.code&&($=v.code+`
|
|
361
|
+
`+$),Dn=v.results}return{code:$,types:h,metadata:h,warnings:i.length>0?i:void 0,predicates:b,testRunner:f.length>0?u:void 0,testCount:f.length>0?f.length:void 0,testResults:We,wasmCompiled:Dn}}function _o(e){let n=[];for(let t of e.body)t.type==="FunctionDeclaration"?n.push(t):(t.type==="ExportNamedDeclaration"&&t.declaration?.type==="FunctionDeclaration"||t.type==="ExportDefaultDeclaration"&&t.declaration?.type==="FunctionDeclaration")&&n.push(t.declaration);return n}function at(e){let n={kind:e.kind};return e.nullable&&(n.nullable=!0),e.items&&(n.items=at(e.items)),e.shape&&(n.shape=Object.fromEntries(Object.entries(e.shape).map(([t,r])=>[t,at(r)]))),e.members&&(n.members=e.members.map(at)),n}function wo(e,n,t={},r={}){let s={};for(let[i,a]of Object.entries(n.params))s[i]={type:at(a.type),required:a.required},a.default!==void 0&&(s[i].default=a.default),a.description&&(s[i].description=a.description);let o={params:s};if(n.returns&&(o.returns={type:at(n.returns)},r.returnDefaults&&(o.returns.defaults=r.returnDefaults),t.returnSafety==="safe"?o.safeReturn=!0:t.returnSafety==="unsafe"&&(o.unsafeReturn=!0)),n.description&&(o.description=n.description),t.unsafe&&(o.unsafe=!0),t.safe&&(o.safe=!0),r.source){let{file:i,line:a}=r.source;o.source=`${i}:${a}`}return`${e}.__tjs = ${JSON.stringify(o,null,2)}`}function Pt(e,n){let t;switch(n.kind){case"string":t=`typeof ${e} !== 'string'`;break;case"number":t=`typeof ${e} !== 'number'`;break;case"integer":t=`(typeof ${e} !== 'number' || !Number.isInteger(${e}))`;break;case"non-negative-integer":t=`(typeof ${e} !== 'number' || !Number.isInteger(${e}) || ${e} < 0)`;break;case"boolean":t=`typeof ${e} !== 'boolean'`;break;case"null":return`${e} !== null`;case"undefined":return`${e} !== undefined`;case"array":{let r=n.items&&n.items.kind!=="any"?Pt("__a",n.items):null;r?t=`(!Array.isArray(${e}) || ${e}.some(__a => ${r}))`:t=`!Array.isArray(${e})`;break}case"object":t=`(typeof ${e} !== 'object' || ${e} === null || Array.isArray(${e}))`;break;case"function":t=`typeof ${e} !== 'function'`;break;case"union":{let r=n.members.map(s=>Pt(e,s)).filter(s=>s!==null);if(r.length===0)return null;t=`(${r.join(" && ")})`;break}case"any":return null;default:return null}return t&&n.nullable&&(t=`(${e} !== null && ${t})`),t}var cs=new Set(["string","number","integer","non-negative-integer","boolean","function","any","undefined","null","object"]);function $o(e,n,t){let r=n.params??[],s=n.returns??{kind:"any"},o=r.map(l=>l.type?.kind),i=o.every(l=>l&&cs.has(l))&&cs.has(s.kind),a=o.some(l=>l!=="any")||s.kind!=="any";if(!i||!a)return null;let c=JSON.stringify(o);return`if (typeof ${e} === 'function') ${e} = __tjs.checkFnShape(${e}, ${c}, '${s.kind}', '${t}');`}function Ct(e,n={}){let{ast:t,returnType:r,originalSource:s,requiredParams:o}=Se(e,{filename:n.filename,colonShorthand:!0,vmTarget:!0}),{entry:i,helpers:a}=$r(t,n.filename),{ast:c,signature:l,warnings:f}=Zt(i,s,r,n,o,a.size>0?a:void 0);return{ast:c,signature:l,warnings:f}}function So(e,...n){if(typeof e=="string")return Ct(e).ast;let t=e.reduce((r,s,o)=>r+s+(n[o]!==void 0?String(n[o]):""),"");return Ct(t).ast}function Eo(e,n,t){let{ast:r,signature:s}=Ct(e),o=async i=>(await n.run(r,i,t)).result;return o.signature=s,o.ast=r,o}function Mt(e){switch(e.kind){case"string":return{type:"string"};case"number":return{type:"number"};case"boolean":return{type:"boolean"};case"null":return{type:"null"};case"array":return{type:"array",items:e.items?Mt(e.items):{}};case"object":return e.shape?{type:"object",properties:Object.fromEntries(Object.entries(e.shape).map(([n,t])=>[n,Mt(t)]))}:{type:"object"};case"union":return e.members?{anyOf:e.members.map(Mt)}:{};default:return{}}}function To(e){return Object.entries(e).map(([n,t])=>{let r=t.signature,s={},o=[];for(let[i,a]of Object.entries(r.parameters))s[i]=Mt(a.type),a.description&&(s[i].description=a.description),a.required&&o.push(i);return{type:"function",function:{name:n,description:r.description,parameters:{type:"object",properties:s,required:o}}}})}function ko(e,n,...t){if(typeof e=="string")return Rt(e,n);let r=n!==void 0?[n,...t]:t,s=e.reduce((o,i,a)=>o+i+(r[a]!==void 0?String(r[a]):""),"");return Rt(s)}var jo=/\.[mc]?js$/i,vo=/\.[mc]?ts$/i,Ao=/\.tjs$/i;function us(e){return Ao.test(e)?"tjs":jo.test(e)?"js":vo.test(e)?"ts":"tjs"}function Po(e){return us(e)==="js"?"js":"tjs"}var fs=e=>e===null?"null":Array.isArray(e)?"array":typeof e;function Ro(e,n){return n==="integer"?typeof e=="number"&&Number.isInteger(e):fs(e)===n}function ps(e,n={}){let{ignorePredicates:t,...r}=n,s=new Map,o=a=>{if(a.$predicate&&!t&&!s.has(a.$predicate)){let c=a.$predicate,l=$e(c,r).predicates,f=l[l.length-1];if(!f)throw new Error("$predicate must declare at least one function");let p=Je(c,[f],r);s.set(c,p[f])}if(a.properties)for(let c of Object.values(a.properties))o(c);a.items&&o(a.items)};o(e);let i=(a,c,l,f)=>{if(a.type&&!Ro(c,a.type)){f.push({path:l||"/",message:`expected ${a.type}, got ${fs(c)}`});return}if(a.type==="object"&&a.properties&&c&&typeof c=="object"){let p=c;for(let u of a.required??[])u in p||f.push({path:`${l}/${u}`,message:`missing required '${u}'`});for(let[u,m]of Object.entries(a.properties))u in p&&i(m,p[u],`${l}/${u}`,f)}a.type==="array"&&a.items&&Array.isArray(c)&&c.forEach((p,u)=>i(a.items,p,`${l}/${u}`,f)),a.$predicate&&!t&&(s.get(a.$predicate)(c)||f.push({path:l||"/",message:`failed predicate at ${l||"/"}`}))};return a=>{let c=[];return i(e,a,"",c),{valid:c.length===0,errors:c}}}function Mo(e,n,t){return ps(e,t)(n)}function xe(e){let n;switch(e.kind){case"string":n="string";break;case"number":case"integer":case"non-negative-integer":n="number";break;case"boolean":n="boolean";break;case"null":return"null";case"undefined":return"undefined";case"any":n="any";break;case"array":if(e.items){let t=xe(e.items);n=t.includes("|")?`(${t})[]`:`${t}[]`}else n="any[]";break;case"object":e.shape&&Object.keys(e.shape).length>0?n=`{ ${Object.entries(e.shape).map(([r,s])=>`${r}: ${xe(s)}`).join("; ")} }`:n="Record<string, any>";break;case"union":if(e.members&&e.members.length>0)return e.members.map(xe).join(" | ");n="any";break;case"function":{let t=e.params??[],r=e.returns?xe(e.returns):"any";n=`(${t.map(o=>`${o.name}: ${xe(o.type)}`).join(", ")}) => ${r}`;break}default:n="any"}return e.nullable?`${n} | null`:n}function Co(e,n,t,r){let s=Object.entries(n.params),o=new Array(s.length),i=!1;for(let f=s.length-1;f>=0;f--){let p=s[f][1],u=!p.required&&p.default!==void 0;o[f]=u&&!i,o[f]||(i=!0)}let a=s.map(([f,p],u)=>{let m=xe(p.type);return o[u]?`${f}?: ${m}`:`${f}: ${m}`}).join(", "),c=n.returns?xe(n.returns):"any";return`${t?r?"export default function":"export declare function":"declare function"} ${e}(${a}): ${c};`}function No(e){let n=new Map,t,r=/^[ \t]*export\s+(default\s+)?function\s+(\w+)/gm;for(;(t=r.exec(e))!==null;)n.set(t[2],{exported:!0,isDefault:!!t[1]});let s=/^[ \t]*export\s+(default\s+)?class\s+(\w+)/gm;for(;(t=s.exec(e))!==null;)n.set(t[2],{exported:!0,isDefault:!!t[1]});let o=/^[ \t]*export\s+(default\s+)?(?:const|let|var)\s+(\w+)/gm;for(;(t=o.exec(e))!==null;)n.set(t[2],{exported:!0,isDefault:!!t[1]});let i=/^[ \t]*export\s+Type\s+(\w+)/gm;for(;(t=i.exec(e))!==null;)n.set(t[1],{exported:!0,isDefault:!1});let a=/^[ \t]*export\s+Generic\s+(\w+)/gm;for(;(t=a.exec(e))!==null;)n.set(t[1],{exported:!0,isDefault:!1});let c=/^[ \t]*export\s+FunctionPredicate\s+(\w+)/gm;for(;(t=c.exec(e))!==null;)n.set(t[1],{exported:!0,isDefault:!1});let l=/^[ \t]*export\s*\{([^}]+)\}/gm;for(;(t=l.exec(e))!==null;){let f=t[1].split(",").map(p=>p.trim().split(/\s+as\s+/));for(let p of f){let u=p.length>1?p[1]:p[0];u&&/^\w+$/.test(u)&&n.set(u,{exported:!0,isDefault:!1})}}return n}function Io(e){let n=new Map,t=/^[ \t]*(?:export\s+)?FunctionPredicate\s+(\w+)\s*(?:<([^>]+)>)?\s*\{/gm,r;for(;(r=t.exec(e))!==null;){let s=r[1],o=r[2],i=r.index+r[0].length-1,a=1,c=i+1;for(;c<e.length&&a>0;)e[c]==="{"?a++:e[c]==="}"&&a--,c++;let l=e.slice(i+1,c-1),f;o&&(f=o.split(",").map(g=>g.trim()));let p=[],u=l.match(/params\s*:\s*\{([^}]*)\}/);if(u){let g=u[1],x=ds(g);for(let E of x){let S=E.match(/^(\w+)\s*:\s*(.+)$/);S&&p.push({name:S[1],example:S[2].trim()})}}let m,y=l.match(/returns\s*:\s*(.+?)(?:\n|$)/);y&&(m=y[1].trim()),n.set(s,{params:p,returns:m,typeParams:f})}return n}function Oo(e){let n=new Map,t=/^[ \t]*(?:export\s+(?:default\s+)?)?class\s+(\w+)(?:\s+extends\s+\w+)?\s*\{/gm,r;for(;(r=t.exec(e))!==null;){let s=r[1],o=r.index+r[0].length-1,i=1,a=o+1;for(;a<e.length&&i>0;)e[a]==="{"?i++:e[a]==="}"&&i--,a++;let c=e.slice(o+1,a-1),l=c.indexOf("constructor"),f="";if(l!==-1){let u=c.indexOf("(",l);if(u!==-1){let m=1,y=u+1;for(;y<c.length&&m>0;)c[y]==="("?m++:c[y]===")"&&m--,y++;f=c.slice(u+1,y-1).trim()}}let p=[];{let u=0,m=0;for(;u<c.length;){let y=c[u];if(y==="{"){m++,u++;continue}if(y==="}"){m--,u++;continue}if(m===0){let g=c.slice(u).match(/^(\w+)\s*\(/);if(g){let x=g[1];if(x==="constructor"||x==="get"||x==="set"){u+=x.length;continue}else{let E=u+g[0].length-1,S=1,b=E+1;for(;b<c.length&&S>0;)c[b]==="("?S++:c[b]===")"&&S--,b++;let h=c.slice(E+1,b-1).trim(),w=c.slice(b).match(/^\s*->\s*(.+?)\s*\{/),_=w?w[1].trim():null;p.push({name:x,params:h,returnType:_}),u=b;continue}}}u++}}n.set(s,{name:s,constructorParams:f,methods:p})}return n}function ds(e){let n=[],t=0,r="";for(let s of e)s==="{"||s==="["||s==="("?t++:(s==="}"||s==="]"||s===")")&&t--,s===","&&t===0?(n.push(r.trim()),r=""):r+=s;return r.trim()&&n.push(r.trim()),n}function ms(e){return e.trim()?ds(e).map(n=>{let t=n.match(/^(\w+)\s*:\s*(.+)$/);if(t){let s=t[1],o=_e(t[2].trim());return`${s}: ${o}`}let r=n.match(/^(\w+)\s*=\s*(.+)$/);if(r){let s=r[1],o=_e(r[2].trim());return`${s}?: ${o}`}return n.startsWith("{")?"options: any":`${n}: any`}).join(", "):""}function Bo(e){let n=new Map,t,r=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*=\s*(.+)$/gm;for(;(t=r.exec(e))!==null;)n.set(t[1],t[2].trim());let s=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s+([^{=].*)$/gm;for(;(t=s.exec(e))!==null;)n.has(t[1])||n.set(t[1],t[2].trim());let o=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*\{[^}]*example\s*:\s*(.+?)(?:\n|\s*[,}])/gm;for(;(t=o.exec(e))!==null;)n.set(t[1],t[2].trim());let i=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*\{[^}]*\/\/\s*TS:\s*(.+?)(?:\n|\s*\})/gm;for(;(t=i.exec(e))!==null;)n.has(t[1])||n.set(t[1],`__ts__:${t[2].trim()}`);let a=/^[ \t]*(?:export\s+)?Type\s+(\w+)\s*\{\s*\}/gm;for(;(t=a.exec(e))!==null;)n.has(t[1])||n.set(t[1],"");return n}function Do(e){let n=new Map,t=/^[ \t]*(?:export\s+)?Generic\s+(\w+)\s*<([^>]+)>\s*\{/gm,r;for(;(r=t.exec(e))!==null;){let s=r[1],o=r[2].split(",").map(u=>u.trim().split(/\s*=/)[0].trim()),i=r.index+r[0].length-1,a=1,c=i+1;for(;c<e.length&&a>0;)e[c]==="{"?a++:e[c]==="}"&&a--,c++;let l=e.slice(i+1,c-1),f,p=l.match(/\bdeclaration\s*\{/);if(p&&p.index!==void 0){let u=p.index+p[0].length-1,m=1,y=u+1;for(;y<l.length&&m>0;)l[y]==="{"?m++:l[y]==="}"&&m--,y++;f=l.slice(u+1,y-1).trim()}n.set(s,{typeParams:o,declaration:f})}return n}function Fo(e){let n=[],t=/^[ \t]*export\s+(?:default\s+)?(const|let|var)\s+(\w+)\s*(?::\s*\w+\s*)?=\s*(.+)/gm,r;for(;(r=t.exec(e))!==null;){let s=r[3].trim();s.endsWith(";")&&(s=s.slice(0,-1).trim()),n.push({name:r[2],value:s,kind:r[1]})}return n}function qo(e){return/^['"]/.test(e)||e.startsWith("`")?"string":e==="true"||e==="false"?"boolean":/^[+-]?\d+(\.\d+)?$/.test(e)?"number":e.startsWith("Symbol(")||e.startsWith("Symbol.")?"symbol":e.startsWith("[")?"any[]":e.startsWith("new WeakMap")?"WeakMap<any, any>":e.startsWith("new Map")?"Map<any, any>":e.startsWith("new Set")?"Set<any>":e.startsWith("new ")?"any":e.startsWith("{")?"Record<string, any>":e==="null"?"null":e==="undefined"?"undefined":"any"}function Wo(e,n,t={}){let r=[],s=No(n),o=Bo(n),i=Oo(n),a=Do(n),c=s.size>0,l=new Set;for(let[u,m]of Object.entries(e.types)){if(u.includes("$"))continue;let y=s.get(u),g=c?!!y?.exported:!0,x=y?.isDefault??!1;g&&(m.description&&r.push(`/** ${m.description} */`),r.push(Co(u,m,!0,x)),l.add(u))}for(let[u,m]of i){if(l.has(u))continue;let y=s.get(u);if(!(c?!!y?.exported:!0))continue;let x=m.constructorParams?ms(m.constructorParams):"";if(r.push(`export declare function ${u}(${x}): any;`),x||m.methods.length>0){r.push(`export declare class ${u} {`),m.constructorParams&&r.push(` constructor(${x});`);for(let E of m.methods){let S=E.params?ms(E.params):"";r.push(` ${E.name}(${S}): any;`)}r.push("}")}l.add(u)}for(let[u,m]of o){if(l.has(u))continue;let y=s.get(u);if(!c||y?.exported){if(m.startsWith("__ts__:")){let x=m.slice(7);r.push(`export type ${u} = ${x};`)}else if(m==="")r.push(`export type ${u} = any;`);else{let x=_e(m);r.push(`export declare const ${u}: { check(value: any): boolean; default: ${x}; (value: any): boolean; };`)}l.add(u)}}for(let[u,m]of a){if(l.has(u))continue;let y=s.get(u);if(!(c?!!y?.exported:!0))continue;let x=m.typeParams.length>0?`<${m.typeParams.join(", ")}>`:"";if(m.declaration){let E=m.declaration.trim(),S=E.match(/^\/\/\s*TS:\s*(.+)$/s);if(S)r.push(`export type ${u}${x} = ${S[1].trim()};`);else{let b=E.split(`
|
|
362
|
+
`).map(h=>h.trim()).filter(h=>h.length>0).map(h=>` ${h}`).join(`
|
|
363
|
+
`);r.push(`export interface ${u}${x} {
|
|
364
|
+
${b}
|
|
365
|
+
}`)}}else r.push(`export declare function ${u}(...args: any[]): { check(value: any): boolean; (value: any): boolean; };`);l.add(u)}let f=Io(n);for(let[u,m]of f){if(l.has(u))continue;let y=s.get(u);if(!(c?!!y?.exported:!0))continue;let x=new Set(m.typeParams?.map(h=>h.split("=")[0].trim())??[]),E=m.typeParams?`<${m.typeParams.join(", ")}>`:"",S=m.params.map((h,w)=>{let _=w===m.params.length-1;if(h.example.startsWith("[")&&h.example.endsWith("]")&&_){let T=h.example.slice(1,-1).trim(),j=!T||T==="null"?"any":x.has(T)?T:_e(T);return`...${h.name}: ${j}[]`}if(h.example.startsWith("[")&&h.example.endsWith("]")){let T=h.example.slice(1,-1).trim(),j=!T||T==="null"?"any":x.has(T)?T:_e(T);return`${h.name}: ${j}[]`}let $=h.example==="null"?"any":x.has(h.example)?h.example:_e(h.example);return`${h.name}: ${$}`}).join(", "),b=m.returns!==void 0?m.returns==="null"?"any":x.has(m.returns)?m.returns:_e(m.returns):"void";r.push(`export type ${u}${E} = (${S}) => ${b};`),l.add(u)}let p=Fo(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 g=qo(u.value);r.push(`export declare const ${u.name}: ${g};`),l.add(u.name)}if(t.moduleName){let u=r.map(m=>` ${m}`).join(`
|
|
366
|
+
`);return`declare module '${t.moduleName}' {
|
|
367
|
+
${u}
|
|
368
|
+
}
|
|
369
|
+
`}return r.join(`
|
|
370
|
+
`)+`
|
|
371
|
+
`}function _e(e){let n=e.trim();if(Uo(n)){let t=Lo(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 Uo(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 Lo(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 ys}from"tosijs-schema";function gs(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?"array":typeof e}function Nt(e){return ys.infer(e)}function In(e){return Nt(e)}In.type=gs;In.infer=Nt;var Jo=new Proxy(In,{get(e,n){return n==="type"?gs:n==="infer"?Nt:ys[n]},apply(e,n,t){return Nt(t[0])}});var Vo={unusedVariables:!0,undefinedVariables:!0,unreachableCode:!0,noExplicitNew:!0};function zo(e,n={}){let t={...Vo,...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=[hs()];if(Wn(s,{FunctionDeclaration(f,p,u){let m=hs();l.push(m);for(let y of f.params)Go(m,y,"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,y=o.has(m),g=u.init;(y||g&&!On(g))&&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?On(u.init)&&r.push({severity:c,message:`'let ${m}' is initialized to ${bs(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)&&On(p.right)&&r.push({severity:c,message:`Cannot assign ${bs(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 hs(){return{declarations:new Map}}function On(e){return e?e.type==="Identifier"&&e.name==="undefined"||e.type==="Literal"&&e.value===null||e.type==="UnaryExpression"&&e.operator==="void":!1}function bs(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 Go(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,Jo as Schema,me as TJS_VERSION,So as ajs,vr as assertFunction,Ae as checkType,Je as compilePredicate,ps as compilePredicateSchema,Eo as createAgent,Ns as createPredicateEvaluator,Po as dialectForFilename,Ms as effectfulFromAtoms,Ii as emitRuntimeWrapper,Wt as emitVerifiedPredicate,le as error,Ar as expectFunction,ce as extractLiteralValue,He as extractTDoc,Ht as extractTests,ft as formatPredicateDiagnostics,Wo as generateDTS,To as getToolDefinitions,Y as inferTypeFromValue,Tn as installRuntime,de as isError,zo as lint,Se as parse,ge as parseParameter,Sr as parseReturnType,bt as preprocess,ke as runtime,us as sourceKindForFilename,Cs as suggest,hi as testUtils,ko as tjs,Zt as transformFunction,Ct as transpile,Rt as transpileToJS,xe as typeDescriptorToTS,De as typeOf,Gt as typeToString,Sn as validateArgs,Mo as validatePredicateSchema,$e as verifyPredicate,En as wrap};
|
|
362
372
|
//# sourceMappingURL=tjs-lang.js.map
|