@manifesto-ai/compiler 3.8.0 → 5.0.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/README.md +2 -2
- package/dist/analyzer/expr-type-surface.d.ts +1 -0
- package/dist/analyzer/validator.d.ts +7 -4
- package/dist/api/compile-fragment-edit-result.d.ts +12 -0
- package/dist/api/compile-fragment-in-context.d.ts +3 -0
- package/dist/api/compile-fragment-json-validation.d.ts +13 -0
- package/dist/api/compile-fragment-options-validation.d.ts +15 -0
- package/dist/api/compile-fragment-reference-collector.d.ts +3 -0
- package/dist/api/compile-fragment-reference-types.d.ts +40 -0
- package/dist/api/compile-fragment-reference-utils.d.ts +5 -0
- package/dist/api/compile-fragment-source-utils.d.ts +36 -0
- package/dist/api/compile-fragment-types.d.ts +109 -0
- package/dist/api/compile-fragment-validation.d.ts +52 -0
- package/dist/api/compile-mel-patch-collector.d.ts +5 -6
- package/dist/api/compile-mel.d.ts +4 -4
- package/dist/api/index.d.ts +4 -2
- package/dist/{chunk-MB43CHXV.js → chunk-A356Y7I6.js} +1 -1
- package/dist/{chunk-M3P5RIDR.js → chunk-HOS3TLHW.js} +1 -1
- package/dist/chunk-JYNK3VUK.js +23 -0
- package/dist/esbuild.js +1 -1
- package/dist/evaluation/context.d.ts +32 -6
- package/dist/generator/ir.d.ts +25 -3
- package/dist/generator/lowering.d.ts +7 -6
- package/dist/index.d.ts +4 -2
- package/dist/index.js +18 -18
- package/dist/lowering/context.d.ts +7 -9
- package/dist/lowering/errors.d.ts +2 -2
- package/dist/lowering/lower-runtime-patch.d.ts +1 -1
- package/dist/node-loader.js +1 -1
- package/dist/parser/ast.d.ts +21 -2
- package/dist/parser/parser.d.ts +3 -0
- package/dist/rollup.js +1 -1
- package/dist/rspack.js +1 -1
- package/dist/source-map.d.ts +1 -0
- package/dist/unplugin.d.ts +1 -1
- package/dist/vite.js +1 -1
- package/dist/webpack.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-PEO2YZ2Y.js +0 -12
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var xt={domain:"DOMAIN",state:"STATE",computed:"COMPUTED",action:"ACTION",effect:"EFFECT",when:"WHEN",once:"ONCE",patch:"PATCH",unset:"UNSET",merge:"MERGE",true:"TRUE",false:"FALSE",null:"NULL",as:"AS",available:"AVAILABLE",dispatchable:"DISPATCHABLE",fail:"FAIL",stop:"STOP",with:"WITH",type:"TYPE",import:"IMPORT",from:"FROM",export:"EXPORT"},To=new Set(["function","var","let","const","if","else","for","while","do","switch","case","break","continue","return","throw","try","catch","finally","new","delete","instanceof","void","debugger","this","super","arguments","eval","async","await","yield","class","extends","interface","enum","namespace","module"]);function Us(e){return e in xt}function bn(e){return To.has(e)}function Sn(e){return Object.hasOwn(xt,e)?xt[e]:void 0}function At(e,t,n,r){return{kind:e,lexeme:t,location:n,value:r}}function xn(e,t,n){return{line:e,column:t,offset:n}}function An(e,t,n){return{start:e,end:t,source:n}}function zs(e,t){return{start:e,end:e,source:t}}function T(e,t){return{start:e.start.offset<t.start.offset?e.start:t.start,end:e.end.offset>t.end.offset?e.end:t.end,source:e.source??t.source}}var vt=class{source;sourcePath;tokens=[];diagnostics=[];start=0;current=0;line=1;column=1;lineStart=0;constructor(t,n){this.source=t,this.sourcePath=n}tokenize(){for(;!this.isAtEnd();)this.start=this.current,this.scanToken();return this.tokens.push(At("EOF","",this.currentLocation())),{tokens:this.tokens,diagnostics:this.diagnostics}}scanToken(){let t=this.advance();switch(t){case"(":this.addToken("LPAREN");break;case")":this.addToken("RPAREN");break;case"{":this.addToken("LBRACE");break;case"}":this.addToken("RBRACE");break;case"[":this.addToken("LBRACKET");break;case"]":this.addToken("RBRACKET");break;case",":this.addToken("COMMA");break;case";":this.addToken("SEMICOLON");break;case".":this.peek()==="."&&this.peekNext()==="."?(this.advance(),this.advance(),this.addToken("ELLIPSIS")):this.addToken("DOT");break;case"+":this.addToken("PLUS");break;case"-":this.addToken("MINUS");break;case"*":this.addToken("STAR");break;case"%":this.addToken("PERCENT");break;case":":this.addToken("COLON");break;case"@":this.addToken("AT");break;case"=":this.addToken(this.match("=")?"EQ_EQ":"EQ");break;case"!":this.addToken(this.match("=")?"BANG_EQ":"BANG");break;case"<":this.addToken(this.match("=")?"LT_EQ":"LT");break;case">":this.addToken(this.match("=")?"GT_EQ":"GT");break;case"&":this.match("&")?this.addToken("AMP_AMP"):this.error("Expected '&&' for logical AND");break;case"|":this.match("|")?this.addToken("PIPE_PIPE"):this.addToken("PIPE");break;case"?":this.addToken(this.match("?")?"QUESTION_QUESTION":"QUESTION");break;case"/":this.match("/")?this.lineComment():this.match("*")?this.blockComment():this.addToken("SLASH");break;case" ":case"\r":case" ":break;case`
|
|
2
|
+
`:this.newline();break;case'"':this.string('"');break;case"'":this.string("'");break;case"$":this.systemIdentifier();break;default:this.isDigit(t)?this.number():this.isAlpha(t)?this.identifier():this.error(`Unexpected character '${t}'`)}}lineComment(){for(;this.peek()!==`
|
|
3
|
+
`&&!this.isAtEnd();)this.advance()}blockComment(){let t=this.line,n=this.column-2;for(;!this.isAtEnd();){if(this.peek()==="*"&&this.peekNext()==="/"){this.advance(),this.advance();return}this.peek()===`
|
|
4
|
+
`&&this.newline(),this.advance()}this.error(`Unterminated block comment starting at line ${t}:${n}`)}string(t){let n=this.line,r=this.column-1,o="";for(;this.peek()!==t&&!this.isAtEnd();){if(this.peek()===`
|
|
5
|
+
`){this.error("Unterminated string literal");return}if(this.peek()==="\\"){this.advance();let i=this.advance();switch(i){case"n":o+=`
|
|
6
|
+
`;break;case"r":o+="\r";break;case"t":o+=" ";break;case"\\":o+="\\";break;case"'":o+="'";break;case'"':o+='"';break;case"0":o+="\0";break;default:this.error(`Invalid escape sequence '\\${i}'`),o+=i}}else o+=this.advance()}if(this.isAtEnd()){this.error(`Unterminated string starting at line ${n}:${r}`);return}this.advance(),this.addToken("STRING",o)}number(){if(this.source[this.start]==="0"&&(this.peek()==="x"||this.peek()==="X")){for(this.advance();this.isHexDigit(this.peek());)this.advance();let n=this.source.slice(this.start+2,this.current),r=parseInt(n,16);this.addToken("NUMBER",r);return}for(;this.isDigit(this.peek());)this.advance();if(this.peek()==="."&&this.isDigit(this.peekNext()))for(this.advance();this.isDigit(this.peek());)this.advance();if(this.peek()==="e"||this.peek()==="E"){if(this.advance(),(this.peek()==="+"||this.peek()==="-")&&this.advance(),!this.isDigit(this.peek())){this.error("Invalid number: expected digits after exponent");return}for(;this.isDigit(this.peek());)this.advance()}let t=parseFloat(this.source.slice(this.start,this.current));this.addToken("NUMBER",t)}identifier(){for(;this.isAlphaNumeric(this.peek());){if(this.peek()==="$"){this.advance(),this.error("'$' is forbidden in identifiers (MEL A17)","E004");continue}this.advance()}let t=this.source.slice(this.start,this.current);if(t.startsWith("__sys__")){this.error("'__sys__' prefix is reserved for compiler-generated identifiers (MEL A26)","E004"),this.addToken("ERROR");return}if(bn(t)){this.error(`'${t}' is a reserved keyword and cannot be used`),this.addToken("ERROR");return}let n=Sn(t);n?this.addToken(n):this.addToken("IDENTIFIER")}systemIdentifier(){if(!this.isAlpha(this.peek())){this.error("Expected identifier after '$'"),this.addToken("ERROR");return}for(;this.isAlphaNumeric(this.peek());)this.advance();let t=this.source.slice(this.start,this.current);if(t==="$item"){this.addToken("ITEM");return}if(t==="$runtime"||t==="$context"||t==="$system"||t==="$meta"||t==="$input"){for(;this.peek()==="."&&this.isAlpha(this.peekNext());)for(this.advance();this.isAlphaNumeric(this.peek());)this.advance();this.addToken("SYSTEM_IDENT");return}this.error(`Invalid dollar identifier '${t}'. Expected $runtime.*, $context.*, $input.*, retired $system/$meta, or $item`),this.addToken("ERROR")}isAtEnd(){return this.current>=this.source.length}advance(){let t=this.source[this.current];return this.current++,this.column++,t}peek(){return this.isAtEnd()?"\0":this.source[this.current]}peekNext(){return this.current+1>=this.source.length?"\0":this.source[this.current+1]}match(t){return this.isAtEnd()||this.source[this.current]!==t?!1:(this.current++,this.column++,!0)}newline(){this.line++,this.column=1,this.lineStart=this.current}isDigit(t){return t>="0"&&t<="9"}isHexDigit(t){return this.isDigit(t)||t>="a"&&t<="f"||t>="A"&&t<="F"}isAlpha(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"}isAlphaNumeric(t){return this.isAlpha(t)||this.isDigit(t)}currentLocation(){let t=this.positionAt(this.start),n=this.positionAt(this.current);return An(t,n,this.sourcePath)}positionAt(t){let n=1,r=0;for(let o=0;o<t;o++)this.source[o]===`
|
|
7
|
+
`&&(n++,r=o+1);return xn(n,t-r+1,t)}addToken(t,n){let r=this.source.slice(this.start,this.current);this.tokens.push(At(t,r,this.currentLocation(),n))}error(t,n="MEL_LEXER"){let r=this.currentLocation();this.diagnostics.push({severity:"error",code:n,message:t,location:r,source:this.getSourceLine(r.start.line)})}getSourceLine(t){return this.source.split(`
|
|
8
|
+
`)[t-1]??""}};function L(e,t){return new vt(e,t).tokenize()}function Zs(e){return["literal","identifier","systemIdent","iterationVar","propertyAccess","indexAccess","functionCall","unary","binary","ternary","objectLiteral","arrayLiteral"].includes(e.kind)}function ec(e){return["when","once","onceIntent","patch","effect","fail","stop"].includes(e.kind)}var vn=(m=>(m[m.NONE=0]="NONE",m[m.TERNARY=1]="TERNARY",m[m.NULLISH=2]="NULLISH",m[m.OR=3]="OR",m[m.AND=4]="AND",m[m.EQUALITY=5]="EQUALITY",m[m.COMPARISON=6]="COMPARISON",m[m.ADDITIVE=7]="ADDITIVE",m[m.MULTIPLICATIVE=8]="MULTIPLICATIVE",m[m.UNARY=9]="UNARY",m[m.CALL=10]="CALL",m[m.ACCESS=11]="ACCESS",m))(vn||{});function wt(e){switch(e){case"QUESTION":return 1;case"QUESTION_QUESTION":return 2;case"PIPE_PIPE":return 3;case"AMP_AMP":return 4;case"EQ_EQ":case"BANG_EQ":return 5;case"LT":case"LT_EQ":case"GT":case"GT_EQ":return 6;case"PLUS":case"MINUS":return 7;case"STAR":case"SLASH":case"PERCENT":return 8;default:return 0}}function wn(e){switch(e){case"PLUS":return"+";case"MINUS":return"-";case"STAR":return"*";case"SLASH":return"/";case"PERCENT":return"%";case"EQ_EQ":return"==";case"BANG_EQ":return"!=";case"LT":return"<";case"LT_EQ":return"<=";case"GT":return">";case"GT_EQ":return">=";case"AMP_AMP":return"&&";case"PIPE_PIPE":return"||";case"QUESTION_QUESTION":return"??";default:return null}}function nc(e){return wt(e)!==0}function rc(e){return e==="BANG"||e==="MINUS"}function Cn(e){return e==="QUESTION"||e==="QUESTION_QUESTION"}var Ct=class{tokens;current=0;diagnostics=[];constructor(t){this.tokens=t}parse(){try{return{program:this.parseProgram(),diagnostics:this.diagnostics}}catch{return{program:null,diagnostics:this.diagnostics}}}parseProgram(){let t=this.peek().location,n=[];for(;this.check("IMPORT");)n.push(this.parseImport());let r=this.parseAnnotationList();r.length>0&&!this.check("DOMAIN")&&this.reportUnsupportedAnnotations(r);let o=this.parseDomain(r);return{kind:"program",imports:n,domain:o,location:T(t,o.location)}}parseImport(){let t=this.consume("IMPORT","Expected 'import'").location;this.consume("LBRACE","Expected '{' after 'import'");let n=[];do n.push(this.consume("IDENTIFIER","Expected identifier").lexeme);while(this.match("COMMA"));this.consume("RBRACE","Expected '}' after import names"),this.consume("FROM","Expected 'from' after import names");let r=this.consume("STRING","Expected string after 'from'");return{kind:"import",names:n,from:r.value,location:T(t,r.location)}}parseDomain(t=[]){let n=this.consume("DOMAIN","Expected 'domain'").location,r=this.consume("IDENTIFIER","Expected domain name").lexeme;this.consume("LBRACE","Expected '{' after domain name");let o=[],i=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let s=this.parseAnnotationList();if(s.length>0&&(this.check("RBRACE")||this.isAtEnd())){this.reportUnsupportedAnnotations(s);continue}if(this.check("TYPE"))o.push(this.parseTypeDecl(s));else{let c=this.parseDomainMember(s);c&&i.push(c)}}let a=this.consume("RBRACE","Expected '}' to close domain").location;return{kind:"domain",name:r,annotations:t.length>0?t:void 0,types:o,members:i,location:T(n,a)}}parseTypeDecl(t=[]){let n=this.consume("TYPE","Expected 'type'").location,r=this.consume("IDENTIFIER","Expected type name").lexeme;this.consume("EQ","Expected '=' after type name");let o=this.parseTypeExpr();return{kind:"typeDecl",name:r,annotations:t.length>0?t:void 0,typeExpr:o,location:T(n,o.location)}}parseDomainMember(t=[]){return this.check("STATE")?(this.reportUnsupportedAnnotations(t),this.parseState()):this.isContextDeclContext()?(this.reportUnsupportedAnnotations(t),this.parseContext()):this.check("COMPUTED")?this.parseComputed(t):this.check("ACTION")?this.parseAction(t):this.isFlowDeclContext()?(this.reportUnsupportedAnnotations(t),this.parseFlowDecl()):(this.reportUnsupportedAnnotations(t),this.error(`Unexpected token '${this.peek().lexeme}'. Expected 'state', 'context', 'computed', 'action', or 'flow'.`),this.advance(),null)}parseState(){let t=this.consume("STATE","Expected 'state'").location;this.consume("LBRACE","Expected '{' after 'state'");let n=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let o=this.parseAnnotationList();if(o.length>0&&(this.check("RBRACE")||this.isAtEnd())){this.reportUnsupportedAnnotations(o);continue}n.push(this.parseStateField(o))}let r=this.consume("RBRACE","Expected '}' to close state block").location;return{kind:"state",fields:n,location:T(t,r)}}parseStateField(t=[]){let n=this.consume("IDENTIFIER","Expected field name");this.consume("COLON","Expected ':' after field name");let r=this.parseTypeExpr(),o;return this.match("EQ")&&(o=this.parseExpression()),{kind:"stateField",name:n.lexeme,annotations:t.length>0?t:void 0,typeExpr:r,initializer:o,location:T(n.location,o?.location??r.location)}}parseContext(){let t=this.consume("IDENTIFIER","Expected 'context'").location;this.consume("LBRACE","Expected '{' after 'context'");let n=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let o=this.parseAnnotationList();this.reportUnsupportedAnnotations(o),n.push(this.parseContextField())}let r=this.consume("RBRACE","Expected '}' to close context block").location;return{kind:"context",fields:n,location:T(t,r)}}parseContextField(){let t=this.consume("IDENTIFIER","Expected context field name");this.consume("COLON","Expected ':' after context field name");let n=this.parseTypeExpr();if(this.match("EQ")){let r=this.parseExpression();return this.errorAtToken(t,"Context fields declare external context shape only; initializers are not allowed"),{kind:"contextField",name:t.lexeme,typeExpr:n,location:T(t.location,r.location)}}return{kind:"contextField",name:t.lexeme,typeExpr:n,location:T(t.location,n.location)}}parseComputed(t=[]){let n=this.consume("COMPUTED","Expected 'computed'").location,r=this.consume("IDENTIFIER","Expected computed name").lexeme;this.consume("EQ","Expected '=' after computed name");let o=this.parseExpression();return{kind:"computed",name:r,annotations:t.length>0?t:void 0,expression:o,location:T(n,o.location)}}parseAction(t=[]){let n=this.consume("ACTION","Expected 'action'").location,r=this.consume("IDENTIFIER","Expected action name").lexeme;this.consume("LPAREN","Expected '(' after action name");let o=[];if(!this.check("RPAREN"))do{let l=this.parseAnnotationList();if(l.length>0&&(this.check("RPAREN")||this.isAtEnd())){this.reportUnsupportedAnnotations(l);break}o.push(this.parseParam(l))}while(this.match("COMMA"));this.consume("RPAREN","Expected ')' after parameters");let i;this.match("AVAILABLE")&&(this.consume("WHEN","Expected 'when' after 'available'"),i=this.parseExpression());let a;if(this.match("DISPATCHABLE")&&(this.consume("WHEN","Expected 'when' after 'dispatchable'"),a=this.parseExpression()),this.check("AVAILABLE")){let l=a?"'available when' must appear before 'dispatchable when' in an action":"Action can declare 'available when' at most once";throw this.errorAtCurrent(l)}if(this.check("DISPATCHABLE"))throw this.errorAtCurrent("Action can declare 'dispatchable when' at most once");this.consume("LBRACE","Expected '{' to start action body");let s=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let l=this.parseGuardedStmt();l&&s.push(l)}let c=this.consume("RBRACE","Expected '}' to close action").location;return{kind:"action",name:r,annotations:t.length>0?t:void 0,params:o,available:i,dispatchable:a,body:s,location:T(n,c)}}parseFlowDecl(){let t=this.consume("IDENTIFIER","Expected 'flow'"),n=this.consume("IDENTIFIER","Expected flow name").lexeme;this.consume("LPAREN","Expected '(' after flow name");let r=[];if(!this.check("RPAREN"))do{let a=this.parseAnnotationList();if(this.reportUnsupportedAnnotations(a),a.length>0&&(this.check("RPAREN")||this.isAtEnd()))break;r.push(this.parseParam(a))}while(this.match("COMMA"));this.consume("RPAREN","Expected ')' after parameters"),this.consume("LBRACE","Expected '{' to start flow body");let o=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let a=this.parseFlowStmt();a&&o.push(a)}let i=this.consume("RBRACE","Expected '}' to close flow").location;return{kind:"flow",name:n,params:r,body:o,location:T(t.location,i)}}parseParam(t=[]){let n=this.consume("IDENTIFIER","Expected parameter name");this.consume("COLON","Expected ':' after parameter name");let r=this.parseTypeExpr();return{kind:"param",name:n.lexeme,annotations:t.length>0?t:void 0,typeExpr:r,location:T(n.location,r.location)}}parseGuardedStmt(){let t=this.parseAnnotationList();if(this.reportUnsupportedAnnotations(t),this.check("WHEN"))return this.parseWhenStmt();if(this.check("ONCE"))return this.parseOnceStmt();if(this.isOnceIntentContext())return this.parseOnceIntentStmt();if(this.isIncludeContext())return this.parseIncludeStmt();if(this.check("FAIL"))return this.parseFailStmt();if(this.check("STOP"))return this.parseStopStmt();let n=this.peek();return n.kind==="PATCH"||n.lexeme==="patch"||n.kind==="EFFECT"||n.lexeme==="effect"?(this.error(`'${n.lexeme}' must be inside a guard block (when, once, or onceIntent). Wrap it: when true { ${n.lexeme} ... }`),this.skipToRecoveryPoint(),null):(this.error(`Unexpected token '${n.lexeme}'. Expected 'when', 'once', 'onceIntent', 'include', 'fail', or 'stop'.`),this.advance(),null)}parseFlowStmt(){let t=this.parseAnnotationList();return this.reportUnsupportedAnnotations(t),this.check("WHEN")?this.parseWhenStmt():this.isIncludeContext()?this.parseIncludeStmt():this.check("ONCE")?this.parseOnceStmt():this.isOnceIntentContext()?this.parseOnceIntentStmt():this.check("PATCH")?this.parsePatchStmt():this.check("EFFECT")?this.parseEffectStmt():(this.error(`Unexpected token '${this.peek().lexeme}'. Expected 'when', 'include', 'once', 'onceIntent', 'patch', or 'effect'.`),this.advance(),null)}skipToRecoveryPoint(){let t=0;for(;!this.isAtEnd();){let n=this.peek();if(n.kind==="LBRACE"){t++,this.advance();continue}if(n.kind==="RBRACE"){if(t===0)return;t--,this.advance();continue}if(t===0&&(n.kind==="WHEN"||n.kind==="ONCE"||n.lexeme==="onceIntent"||this.isIncludeContext()||n.kind==="FAIL"||n.kind==="STOP"))return;this.advance()}}parseWhenStmt(){let t=this.consume("WHEN","Expected 'when'").location,n=this.parseExpression();this.consume("LBRACE","Expected '{' after when condition");let r=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let i=this.parseInnerStmt();i&&r.push(i)}let o=this.consume("RBRACE","Expected '}' to close when block").location;return{kind:"when",condition:n,body:r,location:T(t,o)}}parseOnceStmt(){let t=this.consume("ONCE","Expected 'once'").location;this.consume("LPAREN","Expected '(' after 'once'");let n=this.parsePath();this.consume("RPAREN","Expected ')' after marker");let r;this.match("WHEN")&&(r=this.parseExpression()),this.consume("LBRACE","Expected '{' to start once block");let o=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let a=this.parseInnerStmt();a&&o.push(a)}let i=this.consume("RBRACE","Expected '}' to close once block").location;return{kind:"once",marker:n,condition:r,body:o,location:T(t,i)}}parseOnceIntentStmt(){let t=this.consume("IDENTIFIER","Expected 'onceIntent'"),n;this.match("WHEN")&&(n=this.parseExpression()),this.consume("LBRACE","Expected '{' to start onceIntent block");let r=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let i=this.parseInnerStmt();i&&r.push(i)}let o=this.consume("RBRACE","Expected '}' to close onceIntent block").location;return{kind:"onceIntent",condition:n,body:r,location:T(t.location,o)}}parseInnerStmt(){let t=this.parseAnnotationList();return this.reportUnsupportedAnnotations(t),this.check("PATCH")?this.parsePatchStmt():this.check("EFFECT")?this.parseEffectStmt():this.check("WHEN")?this.parseWhenStmt():this.check("ONCE")?this.parseOnceStmt():this.isOnceIntentContext()?this.parseOnceIntentStmt():this.isIncludeContext()?this.parseIncludeStmt():this.check("FAIL")?this.parseFailStmt():this.check("STOP")?this.parseStopStmt():(this.error(`Unexpected token '${this.peek().lexeme}'. Expected 'patch', 'effect', 'when', 'once', 'onceIntent', 'include', 'fail', or 'stop'.`),this.advance(),null)}parseIncludeStmt(){let t=this.consume("IDENTIFIER","Expected 'include'"),n=this.consume("IDENTIFIER","Expected flow name after 'include'");this.consume("LPAREN","Expected '(' after flow name");let r=[];if(!this.check("RPAREN"))do r.push(this.parseExpression());while(this.match("COMMA"));let o=this.consume("RPAREN","Expected ')' after include arguments").location;return{kind:"include",flowName:n.lexeme,args:r,location:T(t.location,o)}}parsePatchStmt(){let t=this.consume("PATCH","Expected 'patch'").location,n=this.parsePath(),r,o,i;return this.match("UNSET")?(r="unset",i=this.previous().location):this.match("MERGE")?(r="merge",o=this.parseExpression(),i=o.location):(this.consume("EQ","Expected '=', 'unset', or 'merge' after path"),r="set",o=this.parseExpression(),i=o.location),{kind:"patch",path:n,op:r,value:o,location:T(t,i)}}parseEffectStmt(){let t=this.consume("EFFECT","Expected 'effect'").location,n=this.consume("IDENTIFIER","Expected effect type").lexeme;for(;this.match("DOT");)n+="."+this.consume("IDENTIFIER","Expected identifier after '.'").lexeme;this.consume("LPAREN","Expected '(' after effect type"),this.consume("LBRACE","Expected '{' for effect arguments");let r=[];for(;!this.check("RBRACE")&&!this.isAtEnd();)r.push(this.parseEffectArg()),this.match("COMMA");this.consume("RBRACE","Expected '}' after effect arguments");let o=this.consume("RPAREN","Expected ')' to close effect").location;return{kind:"effect",effectType:n,args:r,location:T(t,o)}}parseEffectArg(){let t=this.match("IDENTIFIER","FAIL")?this.previous():this.consume("IDENTIFIER","Expected argument name");this.consume("COLON","Expected ':' after argument name");let n=["into","pass","fail"].includes(t.lexeme),r=n?this.parsePath():this.parseExpression();return{kind:"effectArg",name:t.lexeme,value:r,isPath:n,location:T(t.location,r.location)}}parseFailStmt(){let t=this.consume("FAIL","Expected 'fail'").location,n=this.consume("STRING","Expected error code string after 'fail'"),r=n.value,o,i=n.location;return this.match("WITH")&&(o=this.parseExpression(),i=o.location),{kind:"fail",code:r,message:o,location:T(t,i)}}parseStopStmt(){let t=this.consume("STOP","Expected 'stop'").location,n=this.consume("STRING","Expected reason string after 'stop'");return{kind:"stop",reason:n.value,location:T(t,n.location)}}parseTypeExpr(){let t=this.parseBaseType();if(this.check("PIPE")){let n=[t];for(;this.match("PIPE");)n.push(this.parseBaseType());t={kind:"unionType",types:n,location:T(n[0].location,n[n.length-1].location)}}return t}parseBaseType(){if(this.check("LBRACE"))return this.parseObjectType();if(this.check("STRING")){let n=this.advance();return{kind:"literalType",value:n.value,location:n.location}}if(this.check("NUMBER")){let n=this.advance();return{kind:"literalType",value:n.value,location:n.location}}if(this.check("TRUE")||this.check("FALSE")){let n=this.advance();return{kind:"literalType",value:n.kind==="TRUE",location:n.location}}if(this.check("NULL"))return{kind:"literalType",value:null,location:this.advance().location};let t=this.consume("IDENTIFIER","Expected type name");if(this.match("LT"))if(t.lexeme==="Array"){let n=this.parseTypeExpr(),r=this.consume("GT","Expected '>' after array element type").location;return{kind:"arrayType",elementType:n,location:T(t.location,r)}}else if(t.lexeme==="Record"){let n=this.parseTypeExpr();this.consume("COMMA","Expected ',' between Record type parameters");let r=this.parseTypeExpr(),o=this.consume("GT","Expected '>' after Record value type").location;return{kind:"recordType",keyType:n,valueType:r,location:T(t.location,o)}}else{for(this.error(`Unknown generic type '${t.lexeme}'`);!this.check("GT")&&!this.isAtEnd();)this.advance();this.match("GT")}return{kind:"simpleType",name:t.lexeme,location:t.location}}parseObjectType(){let t=this.consume("LBRACE","Expected '{'").location,n=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let o=this.parseAnnotationList();if(o.length>0&&(this.check("RBRACE")||this.isAtEnd())){this.reportUnsupportedAnnotations(o);continue}let i=this.consume("IDENTIFIER","Expected field name"),a=this.match("QUESTION");this.consume("COLON","Expected ':' after field name");let s=this.parseTypeExpr();n.push({kind:"typeField",name:i.lexeme,annotations:o.length>0?o:void 0,typeExpr:s,optional:a,location:T(i.location,s.location)}),this.match("COMMA")}let r=this.consume("RBRACE","Expected '}' to close object type").location;return{kind:"objectType",fields:n,location:T(t,r)}}parseExpression(t=0){let n=this.parsePrimary();for(;;){if(this.check("QUESTION")&&this.peekNext().kind==="DOT")throw this.errorAtCurrent("Object spread is the only bounded JavaScript-like sugar admitted in current MEL. Optional chaining is not supported.");let r=wt(this.peek().kind);if(r<=t)break;if(this.peek().kind==="QUESTION"){n=this.parseTernary(n);continue}let o=wn(this.peek().kind);if(!o)break;this.advance();let i=Cn(this.previous().kind)?r-1:r,a=this.parseExpression(i);n={kind:"binary",operator:o,left:n,right:a,location:T(n.location,a.location)}}return n}parseTernary(t){this.consume("QUESTION","Expected '?'");let n=this.parseExpression();this.consume("COLON","Expected ':' in ternary expression");let r=this.parseExpression(0);return{kind:"ternary",condition:t,consequent:n,alternate:r,location:T(t.location,r.location)}}parsePrimary(){if(this.check("BANG")||this.check("MINUS")&&this.isUnaryContext()){let t=this.advance(),n=this.parsePrimary();return{kind:"unary",operator:t.kind==="BANG"?"!":"-",operand:n,location:T(t.location,n.location)}}if(this.match("LPAREN")){let t=this.parseExpression();return this.consume("RPAREN","Expected ')' after expression"),t}if(this.check("LBRACE"))return this.parseObjectLiteral();if(this.check("LBRACKET"))return this.parseArrayLiteral();if(this.check("NUMBER")){let t=this.advance();return{kind:"literal",value:t.value,literalType:"number",location:t.location}}if(this.check("STRING")){let t=this.advance();return{kind:"literal",value:t.value,literalType:"string",location:t.location}}if(this.check("TRUE")||this.check("FALSE")){let t=this.advance();return{kind:"literal",value:t.kind==="TRUE",literalType:"boolean",location:t.location}}if(this.check("NULL"))return{kind:"literal",value:null,literalType:"null",location:this.advance().location};if(this.check("SYSTEM_IDENT")){let t=this.advance(),n=t.lexeme.slice(1).split(".");return this.parsePostfix({kind:"systemIdent",path:n,location:t.location})}if(this.check("ITEM")){let t=this.advance();return this.parsePostfix({kind:"iterationVar",name:"item",location:t.location})}if(this.check("MERGE")&&this.peekNext()?.kind==="LPAREN"){let t=this.advance();return this.parseFunctionCall(t)}if(this.check("IDENTIFIER")){let t=this.advance();return this.check("LPAREN")?this.parseFunctionCall(t):this.parsePostfix({kind:"identifier",name:t.lexeme,location:t.location})}return this.error(`Unexpected token '${this.peek().lexeme}'`),{kind:"literal",value:null,literalType:"null",location:this.peek().location}}parseFunctionCall(t){this.consume("LPAREN","Expected '(' for function call");let n=[];if(!this.check("RPAREN"))do n.push(this.parseExpression());while(this.match("COMMA"));let r=this.consume("RPAREN","Expected ')' after arguments").location;return this.parsePostfix({kind:"functionCall",name:t.lexeme,args:n,location:T(t.location,r)})}parsePostfix(t){for(;;)if(this.match("DOT")){let n=this.consume("IDENTIFIER","Expected property name after '.'");t={kind:"propertyAccess",object:t,property:n.lexeme,location:T(t.location,n.location)}}else if(this.match("LBRACKET")){let n=this.parseExpression(),r=this.consume("RBRACKET","Expected ']' after index").location;t={kind:"indexAccess",object:t,index:n,location:T(t.location,r)}}else break;return t}parseObjectLiteral(){let t=this.consume("LBRACE","Expected '{'").location,n=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){if(this.check("LBRACKET"))throw this.errorAtCurrent("Object spread is the only bounded JavaScript-like sugar admitted in current MEL. Computed object keys are not supported.");if(this.match("ELLIPSIS")){let o=this.previous().location,i=this.parseExpression();n.push({kind:"objectSpread",expr:i,location:T(o,i.location)})}else{let o=this.consume("IDENTIFIER","Expected property name");this.consume("COLON","Expected ':' after property name");let i=this.parseExpression();n.push({kind:"objectProperty",key:o.lexeme,value:i,location:T(o.location,i.location)})}this.check("RBRACE")||this.consume("COMMA","Expected ',' between properties")}let r=this.consume("RBRACE","Expected '}' to close object").location;return{kind:"objectLiteral",properties:n,location:T(t,r)}}parseArrayLiteral(){let t=this.consume("LBRACKET","Expected '['").location,n=[];for(;!this.check("RBRACKET")&&!this.isAtEnd();){if(this.check("ELLIPSIS"))throw this.errorAtCurrent("Object spread is the only bounded JavaScript-like sugar admitted in current MEL. Array spread is not supported.");n.push(this.parseExpression()),this.check("RBRACKET")||this.consume("COMMA","Expected ',' between elements")}let r=this.consume("RBRACKET","Expected ']' to close array").location;return{kind:"arrayLiteral",elements:n,location:T(t,r)}}parsePath(){let t=[],n=this.peek().location,r=this.consume("IDENTIFIER","Expected identifier");for(t.push({kind:"propertySegment",name:r.lexeme,location:r.location});;)if(this.match("DOT")){let i=this.consume("IDENTIFIER","Expected property name");t.push({kind:"propertySegment",name:i.lexeme,location:i.location})}else if(this.match("LBRACKET")){let i=this.parseExpression(),a=this.consume("RBRACKET","Expected ']'").location;t.push({kind:"indexSegment",index:i,location:T(i.location,a)})}else break;let o=t[t.length-1];return{kind:"path",segments:t,location:T(n,o.location)}}isUnaryContext(){if(this.current===0)return!0;let t=this.previous();return["LPAREN","LBRACKET","LBRACE","COMMA","COLON","EQ","PLUS","MINUS","STAR","SLASH","PERCENT","AT","EQ_EQ","BANG_EQ","LT","LT_EQ","GT","GT_EQ","AMP_AMP","PIPE_PIPE","BANG","QUESTION","QUESTION_QUESTION"].includes(t.kind)}peek(){return this.tokens[this.current]}peekNext(){return this.peekAt(1)}peekAt(t){return this.current+t>=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[this.current+t]}previous(){return this.tokens[this.current-1]}isAtEnd(){return this.peek().kind==="EOF"}advance(){return this.isAtEnd()||this.current++,this.previous()}check(t){return this.isAtEnd()?!1:this.peek().kind===t}isOnceIntentContext(){if(!this.check("IDENTIFIER")||this.peek().lexeme!=="onceIntent")return!1;let n=this.peekNext();return n.kind==="LBRACE"||n.kind==="WHEN"}isFlowDeclContext(){return!this.check("IDENTIFIER")||this.peek().lexeme!=="flow"?!1:this.peekNext().kind==="IDENTIFIER"&&this.peekAt(2).kind==="LPAREN"}isContextDeclContext(){return!this.check("IDENTIFIER")||this.peek().lexeme!=="context"?!1:this.peekNext().kind==="LBRACE"}isIncludeContext(){return!this.check("IDENTIFIER")||this.peek().lexeme!=="include"?!1:this.peekNext().kind==="IDENTIFIER"&&this.peekAt(2).kind==="LPAREN"}match(...t){for(let n of t)if(this.check(n))return this.advance(),!0;return!1}consume(t,n){if(this.check(t))return this.advance();throw this.errorAtCurrent(n)}parseAnnotationList(){let t=[];for(;this.check("AT");)t.push(this.parseAnnotation());return t}parseAnnotation(){let t=this.consume("AT","Expected '@'").location,n=this.consume("IDENTIFIER","Expected annotation name after '@'");if(n.lexeme!=="meta")throw this.errorAtToken(n,"Expected 'meta' after '@'");this.consume("LPAREN","Expected '(' after '@meta'");let r=this.consume("STRING","Expected string tag as first @meta argument"),o;this.match("COMMA")&&(o=this.parseExpression());let i=this.consume("RPAREN","Expected ')' after @meta arguments").location;return{kind:"annotation",tag:r.value,payload:o,location:T(t,i)}}reportUnsupportedAnnotations(t){for(let n of t)this.diagnostics.push({severity:"error",code:"E053",message:"@meta can attach only to domain, type, type field, state field, computed, or action declarations.",location:n.location})}error(t){this.diagnostics.push({severity:"error",code:"MEL_PARSER",message:t,location:this.previous().location})}errorAtCurrent(t){return this.diagnostics.push({severity:"error",code:"MEL_PARSER",message:t,location:this.peek().location}),new Error(t)}errorAtToken(t,n){return this.diagnostics.push({severity:"error",code:"MEL_PARSER",message:n,location:t.location}),new Error(n)}};function ge(e){return new Ct(e).parse()}var Je=class{parent;symbols=new Map;kind;constructor(t,n=null){this.kind=t,this.parent=n}define(t){this.symbols.set(t.name,t)}lookup(t){let n=this.symbols.get(t);return n||this.parent?.lookup(t)}isDefined(t){return this.symbols.has(t)}},Ot=class{diagnostics=[];scopes=new Map;currentScope=null;domainScope=null;analyze(t){return this.diagnostics=[],this.scopes=new Map,this.currentScope=null,this.domainScope=null,this.analyzeDomain(t.domain),{scopes:this.scopes,diagnostics:this.diagnostics}}analyzeDomain(t){let n=new Je("domain");this.domainScope=n,this.currentScope=n,this.scopes.set("domain",n);for(let r of t.members)if(r.kind==="state")for(let o of r.fields)this.defineSymbol({name:o.name,kind:"state",location:o.location});else r.kind==="computed"?this.defineSymbol({name:r.name,kind:"computed",location:r.location}):r.kind==="action"?this.defineSymbol({name:r.name,kind:"action",location:r.location}):r.kind==="context"||r.kind;for(let r of t.members)r.kind==="computed"?this.analyzeComputedExpr(r):r.kind==="action"?this.analyzeAction(r):r.kind}analyzeComputedExpr(t){this.analyzeExpr(t.expression,"computed")}analyzeAction(t){let n=new Je("action",this.domainScope);this.currentScope=n,this.scopes.set(`action.${t.name}`,n);for(let r of t.params)n.define({name:r.name,kind:"param",location:r.location});t.available&&this.analyzeExpr(t.available,"computed"),t.dispatchable&&this.analyzeExpr(t.dispatchable,"action");for(let r of t.body)this.analyzeStmt(r);this.currentScope=this.domainScope}analyzeStmt(t){switch(t.kind){case"when":this.analyzeExpr(t.condition,"action");for(let n of t.body)this.analyzeStmt(n);break;case"onceIntent":t.condition&&this.analyzeExpr(t.condition,"action");for(let n of t.body)this.analyzeStmt(n);break;case"once":this.validatePath(t.marker),t.condition&&this.analyzeExpr(t.condition,"action");for(let n of t.body)this.analyzeStmt(n);break;case"patch":this.validatePath(t.path),t.value&&this.analyzeExpr(t.value,"action");break;case"effect":for(let n of t.args)n.isPath?this.validatePath(n.value):this.analyzeExpr(n.value,"action");break;case"include":case"fail":case"stop":break}}analyzeExpr(t,n){switch(t.kind){case"identifier":this.checkIdentifier(t.name,t.location,n);break;case"systemIdent":this.checkSystemIdent(t.path,t.location,n);break;case"propertyAccess":this.analyzeExpr(t.object,n);break;case"indexAccess":this.analyzeExpr(t.object,n),this.analyzeExpr(t.index,n);break;case"functionCall":for(let r of t.args)this.analyzeExpr(r,n);break;case"binary":this.analyzeExpr(t.left,n),this.analyzeExpr(t.right,n);break;case"unary":this.analyzeExpr(t.operand,n);break;case"ternary":this.analyzeExpr(t.condition,n),this.analyzeExpr(t.consequent,n),this.analyzeExpr(t.alternate,n);break;case"objectLiteral":for(let r of t.properties)this.analyzeExpr(r.kind==="objectProperty"?r.value:r.expr,n);break;case"arrayLiteral":for(let r of t.elements)this.analyzeExpr(r,n);break;case"iterationVar":break;case"literal":break}}checkIdentifier(t,n,r){let o=this.currentScope?.lookup(t);if(!o){this.error(`Undefined identifier '${t}'`,n,"E_UNDEFINED");return}r==="computed"&&o.kind==="param"&&this.error(`Cannot access parameter '${t}' in computed expression`,n,"E_INVALID_ACCESS")}checkSystemIdent(t,n,r){let[o,...i]=t;if(o==="system"||o==="meta"){this.error(`$${o}.* is retired in v5 MEL; use $runtime.* or declared $context.* where action-flow context is available`,n,r==="computed"?"E001":"E003");return}if(o==="runtime"){if(r==="computed"){this.error("$runtime.* cannot be used in computed expressions",n,"E001");return}let a=["intent.id","intent.action","time.timestamp","time.iso","random.seed","random.uuid"],s=i.join(".");s&&!a.includes(s)&&this.error(`Invalid runtime value '$runtime.${s}'. Valid values: ${a.join(", ")}`,n,"E003");return}if(o==="context"){r==="computed"&&this.error("$context.* cannot be used in computed expressions",n,"E001");return}o!=="input"&&this.error(`Invalid dollar identifier namespace '$${o}'. Valid namespaces: $runtime, $context, $input, $item`,n,"E003")}validatePath(t){if(!t||!t.segments)return;let n=t.segments[0];n?.kind==="propertySegment"&&(this.currentScope?.lookup(n.name)||this.error(`Undefined identifier '${n.name}' in path`,t.location,"E_UNDEFINED"))}defineSymbol(t){if(this.currentScope){if(this.currentScope.isDefined(t.name)){this.error(`Duplicate identifier '${t.name}'`,t.location,"E_DUPLICATE");return}this.currentScope.define(t)}}error(t,n,r){this.diagnostics.push({severity:"error",code:r,message:t,location:n})}};function On(e){return new Ot().analyze(e)}function I(e,t,n,r){return{severity:"error",code:e,message:t,location:n,...r}}function In(e,t,n,r){return{severity:"warning",code:e,message:t,location:n,...r}}function fc(e,t,n){return{severity:"info",code:e,message:t,location:n}}function No(e){return e.severity==="error"}function mc(e){return e.some(No)}function hc(e,t){return e.filter(n=>n.severity===t)}function We(e,t,n,r,o){let i=[],a=[],s=()=>{a.length!==0&&(i.push({kind:"objectType",fields:a,location:e.location}),a=[])};for(let c of e.properties){if(c.kind==="objectProperty"){let d=r(c.value,t,n);if(!d)return null;a.push({kind:"typeField",name:c.key,typeExpr:d,optional:!1,location:c.location});continue}s();let l=r(c.expr,t,n);if(!l)return null;i.push(l)}return s(),i.length===0?{kind:"objectType",fields:[],location:e.location}:Ln(i,e.location,n,o)}function Ye(e,t,n,r,o){let i=e.args.map(a=>r(a,t,n));return i.some(a=>a===null)?null:Ln(i,e.location,n,o)}function Pn(e,t,n){let r=n(e,t);if(!r)return"unknown";if(r.kind==="objectType")return"object";if(r.kind!=="unionType")return"invalid";let o=r.types.map(s=>n(s,t)).filter(s=>s!==null),i=o.filter(s=>!oe(s));return o.some(s=>oe(s))&&i.length===1&&i[0].kind==="objectType"?"nullable-object":"invalid"}function Q(e,t){if(!e)return!1;if(Mn(It(e,t),t)||e.kind==="arrayLiteral")return!0;if(e.kind==="ternary")return Q(e.consequent,t)||Q(e.alternate,t);if(e.kind!=="functionCall")return!1;if(e.name==="coalesce"){for(let n of e.args)if(!Ee(n,t)){if(Q(n,t))return!0;if(Te(n,t))return!1}return!1}return(e.name==="cond"||e.name==="if")&&e.args.length>=3?Q(e.args[1],t)||Q(e.args[2],t):!1}function Ee(e,t){let n=It(e,t);return n&&Dn(n,t)?!0:e.kind==="literal"?e.value===null:e.kind==="ternary"?Ee(e.consequent,t)&&Ee(e.alternate,t):e.kind!=="functionCall"?!1:e.name==="coalesce"?e.args.length>0&&e.args.every(r=>Ee(r,t)):(e.name==="cond"||e.name==="if")&&e.args.length>=3?Ee(e.args[1],t)&&Ee(e.args[2],t):!1}function Te(e,t){let n=It(e,t);return n&&Rn(n,t)?!0:e.kind==="literal"?e.value!==null:e.kind==="arrayLiteral"||e.kind==="objectLiteral"?!0:e.kind==="ternary"?Te(e.consequent,t)&&Te(e.alternate,t):e.kind!=="functionCall"?!1:e.name==="coalesce"?e.args.some(r=>Te(r,t)):e.name==="merge"?!0:(e.name==="cond"||e.name==="if")&&e.args.length>=3?Te(e.args[1],t)&&Te(e.args[2],t):!1}function It(e,t){return t?t.resolveType(t.inferExprType(e,t.env,t.symbols),t.symbols):null}function Mn(e,t){if(!e||!t)return!1;let n=t.resolveType(e,t.symbols);return n?n.kind==="arrayType"?!0:n.kind==="unionType"?n.types.some(r=>Mn(r,t)):!1:!1}function Dn(e,t){if(!t)return oe(e);let n=t.resolveType(e,t.symbols);return n?n.kind==="unionType"?n.types.length>0&&n.types.every(r=>Dn(r,t)):oe(n):!1}function Rn(e,t){if(!t)return!oe(e);let n=t.resolveType(e,t.symbols);return n?n.kind==="unionType"?n.types.length>0&&n.types.every(r=>Rn(r,t)):!oe(n):!1}function Ln(e,t,n,r){let o=new Map;for(let i of e){let a=ko(i,n,r);if(!a)return null;for(let s of a){let c=o.get(s.name);if(!c){o.set(s.name,s);continue}if(!s.optional){o.set(s.name,s);continue}let l=bo([c.typeExpr,s.typeExpr],s.location);if(!l)return null;o.set(s.name,{kind:"typeField",name:s.name,typeExpr:l,optional:c.optional,location:s.location})}}return{kind:"objectType",fields:[...o.values()],location:t}}function ko(e,t,n){let r=n(e,t);if(!r)return null;if(r.kind==="objectType")return r.fields.map(c=>({...c,optional:c.optional}));if(r.kind!=="unionType")return null;let o=r.types.map(c=>n(c,t)).filter(c=>c!==null),i=o.filter(c=>!oe(c));if(!o.some(c=>oe(c))||i.length!==1)return null;let s=i[0];return s.kind!=="objectType"?null:s.fields.map(c=>({...c,optional:!0}))}function oe(e){return e.kind==="simpleType"&&e.name==="null"||e.kind==="literalType"&&e.value===null}function bo(e,t){let n=e.filter(i=>i!==null).flatMap(i=>i.kind==="unionType"?i.types:[i]);if(n.length===0)return null;if(n.length===1)return n[0];let r=[],o=new Set;for(let i of n){let a=JSON.stringify(i);o.has(a)||(o.add(a),r.push(i))}return r.length===1?r[0]:{kind:"unionType",types:r,location:t}}var So=new Set(["eq","neq","gt","gte","lt","lte","and","or","not","isNull","isNotNull","hasKey","startsWith","endsWith","strIncludes","includes","every","some","existsById"]),xo=new Set(["add","sub","mul","div","mod","absDiff","abs","clamp","floor","ceil","round","sqrt","pow","len","strlen","indexOf","streak","sum","min","max","toNumber"]),Ao=new Set(["trim","lower","upper","concat","typeof","toString","substring","substr","replace"]);var vo=new Set(["updateById","removeById"]);function Qe(e){let t=new Map,n=new Map,r=new Map,o=new Map;for(let i of e.types)o.set(i.name,i);for(let i of e.members){if(i.kind==="state"){for(let a of i.fields)t.set(a.name,a.typeExpr);continue}if(i.kind==="context"){for(let a of i.fields)n.set(a.name,a.typeExpr);continue}i.kind==="computed"&&r.set(i.name,i)}return{stateTypes:t,contextTypes:n,computedDecls:r,typeDefs:o,computedTypeCache:new Map,computedTypeInFlight:new Set}}function Xe(e){let t=new Map;for(let n of e)t.set(n.name,n.typeExpr);return t}function N(e,t,n){switch(e.kind){case"literal":return Vo(e.value,e.location);case"identifier":return t.get(e.name)??n.stateTypes.get(e.name)??Oo(e.name,n);case"propertyAccess":return X(N(e.object,t,n),e.property,n);case"indexAccess":return $e(N(e.object,t,n),n);case"objectLiteral":return We(e,t,n,N,x);case"arrayLiteral":{let r=O(e.elements.map(o=>N(o,t,n)),e.location);return r?{kind:"arrayType",elementType:r,location:e.location}:null}case"unary":return Io(e);case"binary":return Po(e,t,n);case"ternary":return O([N(e.consequent,t,n),N(e.alternate,t,n)],e.location);case"functionCall":return Mo(e,t,n);case"systemIdent":return wo(e.path,n);case"iterationVar":return t.get("$item")??null}}function wo(e,t){let[n,...r]=e;if(n==="context")return Co(r,t);if(n!=="runtime")return null;switch(r.join(".")){case"intent.id":case"intent.action":case"time.iso":case"random.seed":case"random.uuid":return Fn("string");case"time.timestamp":return Fn("number");default:return null}}function Co(e,t){if(e.length===0)return{kind:"objectType",fields:[...t.contextTypes.entries()].map(([i,a])=>({kind:"typeField",name:i,typeExpr:a,optional:!1,location:a.location})),location:jn()};let[n,...r]=e,o=t.contextTypes.get(n)??null;for(let i of r){if(!o)return null;o=X(o,i,t)}return o}function Fn(e){return{kind:"simpleType",name:e,location:jn()}}function jn(){return{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}function x(e,t,n=new Set){return e?e.kind==="simpleType"&&t.typeDefs.has(e.name)?n.has(e.name)?null:(n.add(e.name),x(t.typeDefs.get(e.name).typeExpr,t,n)):e:null}function X(e,t,n){let r=x(e,n);if(!r)return null;if(r.kind==="objectType"){let o=r.fields.find(i=>i.name===t);return o?o.optional?O([o.typeExpr,P("null",o.location)],o.location):o.typeExpr:null}if(r.kind==="unionType"){let o=r.types.filter(i=>!K(i)).map(i=>X(i,t,n)).filter(i=>i!==null);return O(o,r.location)}return null}function $e(e,t){let n=x(e,t);if(!n)return null;if(n.kind==="arrayType")return n.elementType;if(n.kind==="recordType")return n.valueType;if(n.kind==="unionType"){let r=n.types.filter(o=>!K(o)).map(o=>$e(o,t)).filter(o=>o!==null);return O(r,n.location)}return null}function q(e,t){let n=x(e,t);if(!n)return null;if(n.kind==="arrayType")return n.elementType;if(n.kind==="unionType"){let r=n.types.filter(o=>!K(o)).map(o=>q(o,t)).filter(o=>o!==null);return O(r,n.location)}return null}function Ze(e,t){let n=x(e,t);if(!n)return!1;switch(n.kind){case"simpleType":return n.name==="string"||n.name==="number";case"literalType":return typeof n.value=="string"||typeof n.value=="number";case"unionType":return n.types.length>0&&n.types.every(r=>Ze(r,t));default:return!1}}function K(e){return e.kind==="simpleType"&&e.name==="null"||e.kind==="literalType"&&e.value===null}function Dt(e,t){return Pn(e,t,x)}function Oo(e,t){if(t.computedTypeCache.has(e))return t.computedTypeCache.get(e)??null;let n=t.computedDecls.get(e);if(!n||t.computedTypeInFlight.has(e))return null;t.computedTypeInFlight.add(e);let r=N(n.expression,new Map,t);return t.computedTypeInFlight.delete(e),t.computedTypeCache.set(e,r),r}function Io(e){return e.operator==="!"?P("boolean",e.location):P("number",e.location)}function Po(e,t,n){switch(e.operator){case"==":case"!=":case"<":case"<=":case">":case">=":case"&&":case"||":return P("boolean",e.location);case"+":case"-":case"*":case"/":case"%":return P("number",e.location);case"??":return O([N(e.left,t,n),N(e.right,t,n)],e.location)}}function Mo(e,t,n){if(So.has(e.name))return P("boolean",e.location);if(xo.has(e.name))return P("number",e.location);if(e.name==="idiv")return O([P("number",e.location),P("null",e.location)],e.location);if(Ao.has(e.name))return P("string",e.location);if(e.name==="toBoolean")return P("boolean",e.location);if(e.name==="findById"&&e.args.length>=1){let r=q(N(e.args[0],t,n),n);return r?O([r,P("null",e.location)],e.location):null}if(e.name==="find"&&e.args.length>=1){let r=q(N(e.args[0],t,n),n);return r?O([r,P("null",e.location)],e.location):null}if(e.name==="filter"&&e.args.length>=1)return N(e.args[0],t,n);if(e.name==="map"&&e.args.length>=2){let r=N(e.args[0],t,n),o=q(r,n);if(!o)return null;let i=N(e.args[1],qo(t,o),n);return i?{kind:"arrayType",elementType:i,location:e.location}:null}if((e.name==="first"||e.name==="last")&&e.args.length>=1)return q(N(e.args[0],t,n),n);if(e.name==="at"&&e.args.length>=1)return $e(N(e.args[0],t,n),n);if(e.name==="field"&&e.args.length>=2){let r=zo(e.args[1]);return r?X(N(e.args[0],t,n),r,n):null}return vo.has(e.name)&&e.args.length>=1?N(e.args[0],t,n):(e.name==="cond"||e.name==="if")&&e.args.length>=3?O([N(e.args[1],t,n),N(e.args[2],t,n)],e.location):e.name==="coalesce"?Bo(e,t,n):e.name==="match"?Do(e,t,n):e.name==="argmax"||e.name==="argmin"?Ro(e,t,n):e.name==="slice"&&e.args.length>=1?N(e.args[0],t,n):e.name==="split"?{kind:"arrayType",elementType:P("string",e.location),location:e.location}:e.name==="keys"?{kind:"arrayType",elementType:P("string",e.location),location:e.location}:e.name==="values"&&e.args.length>=1?Uo(e,t,n):e.name==="merge"?Ye(e,t,n,N,x):null}function O(e,t){let n=e.filter(i=>i!==null).flatMap(i=>i.kind==="unionType"?i.types:[i]);if(n.length===0)return null;if(n.length===1)return n[0];let r=[],o=new Set;for(let i of n){let a=JSON.stringify(i);o.has(a)||(o.add(a),r.push(i))}return r.length===1?r[0]:{kind:"unionType",types:r,location:t}}function Do(e,t,n){if(e.args.length<3)return null;let r=[];for(let o=1;o<e.args.length-1;o+=1){let i=e.args[o];if(i.kind!=="arrayLiteral"||i.elements.length!==2)return null;r.push(N(i.elements[1],t,n))}return r.push(N(e.args[e.args.length-1],t,n)),O(r,e.location)}function Ro(e,t,n){if(e.args.length<2)return null;let r=[];for(let i=0;i<e.args.length-1;i+=1){let a=e.args[i];if(a.kind!=="arrayLiteral"||a.elements.length!==3)return null;r.push(N(a.elements[0],t,n))}let o=O(r,e.location);return o?_o(e,t,n)?o:O([o,P("null",e.location)],e.location):null}var Lo=Symbol("arg-selection:other-string"),Fo=Symbol("arg-selection:other-number");function _o(e,t,n){let r=[];for(let c=0;c<e.args.length-1;c+=1){let l=e.args[c];if(l.kind!=="arrayLiteral"||l.elements.length!==3)return!1;r.push(l.elements[1])}let o=new Map;for(let c of r)if(!Ne(c,t,n,o))return!1;let i=[...o.values()].map(c=>({key:c.key,values:$o(c,n)}));if(i.some(c=>c.values===null||c.values.length===0))return!1;let a=1;for(let c of i)if(a*=c.values.length,a>256)return!1;let s=new Map;return $n(i,0,s,()=>r.some(c=>$(c,s)===!0))}function $n(e,t,n,r){if(t>=e.length)return r();let o=e[t];for(let i of o.values)if(n.set(o.key,i),!$n(e,t+1,n,r))return n.delete(o.key),!1;return n.delete(o.key),!0}function Ne(e,t,n,r){switch(e.kind){case"literal":return e.literalType==="boolean";case"identifier":case"iterationVar":case"propertyAccess":case"indexAccess":return jo(e,t,n,r);case"unary":return e.operator==="!"&&Ne(e.operand,t,n,r);case"binary":return e.operator==="&&"||e.operator==="||"?Ne(e.left,t,n,r)&&Ne(e.right,t,n,r):e.operator==="=="||e.operator==="!="?_n(e.left,e.right,t,n,r):!1;case"functionCall":switch(e.name){case"and":case"or":return e.args.every(o=>Ne(o,t,n,r));case"not":return e.args.length===1&&Ne(e.args[0],t,n,r);case"eq":case"neq":return e.args.length===2&&_n(e.args[0],e.args[1],t,n,r);case"isNull":case"isNotNull":return e.args.length===1&&Pt(e.args[0],t,n,r,null);default:return!1}default:return!1}}function jo(e,t,n,r){let o=je(e),i=N(e,t,n);return!o||!i||!Bn(i,n)||Rt(e,t,n)?!1:(r.get(o)||r.set(o,{key:o,typeExpr:i,comparedLiterals:[]}),!0)}function _n(e,t,n,r,o){let i=Mt(e),a=Mt(t);return i!==void 0&&a!==void 0?!0:a!==void 0?Pt(e,n,r,o,a):i!==void 0?Pt(t,n,r,o,i):!1}function Pt(e,t,n,r,o){let i=je(e),a=N(e,t,n);if(!i||!a||!Un(a,n)||Rt(e,t,n))return!1;let s=r.get(i);return s?(s.comparedLiterals.some(c=>Object.is(c,o))||s.comparedLiterals.push(o),!0):(r.set(i,{key:i,typeExpr:a,comparedLiterals:[o]}),!0)}function $o(e,t){let n=[],r=!1,o=a=>{n.some(s=>Object.is(s,a))||n.push(a)},i=a=>{let s=x(a,t);if(!s||r){r=!0;return}switch(s.kind){case"literalType":o(s.value);return;case"simpleType":switch(s.name){case"boolean":o(!0),o(!1);return;case"string":for(let c of e.comparedLiterals)typeof c=="string"&&o(c);o(Lo);return;case"number":for(let c of e.comparedLiterals)typeof c=="number"&&o(c);o(Fo);return;case"null":o(null);return;default:r=!0;return}case"unionType":for(let c of s.types)i(c);return;default:r=!0}};return i(e.typeExpr),r||n.length===0?null:n}function $(e,t){switch(e.kind){case"literal":return e.literalType==="null"?null:typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"?e.value:void 0;case"identifier":case"iterationVar":case"propertyAccess":case"indexAccess":{let n=je(e);return n?t.get(n):void 0}case"unary":{let n=$(e.operand,t);return e.operator==="!"&&typeof n=="boolean"?!n:void 0}case"binary":{let n=$(e.left,t),r=$(e.right,t);switch(e.operator){case"&&":return typeof n=="boolean"&&typeof r=="boolean"?n&&r:void 0;case"||":return typeof n=="boolean"&&typeof r=="boolean"?n||r:void 0;case"==":return n!==void 0&&r!==void 0?Object.is(n,r):void 0;case"!=":return n!==void 0&&r!==void 0?!Object.is(n,r):void 0;default:return}}case"functionCall":switch(e.name){case"and":{let n=e.args.map(r=>$(r,t));return n.every(r=>typeof r=="boolean")?n.every(Boolean):void 0}case"or":{let n=e.args.map(r=>$(r,t));return n.every(r=>typeof r=="boolean")?n.some(Boolean):void 0}case"not":{let n=e.args.length===1?$(e.args[0],t):void 0;return typeof n=="boolean"?!n:void 0}case"eq":case"neq":{if(e.args.length!==2)return;let n=$(e.args[0],t),r=$(e.args[1],t);return n===void 0||r===void 0?void 0:e.name==="eq"?Object.is(n,r):!Object.is(n,r)}case"isNull":{if(e.args.length!==1)return;let n=$(e.args[0],t);return n===void 0?void 0:n===null}case"isNotNull":{if(e.args.length!==1)return;let n=$(e.args[0],t);return n===void 0?void 0:n!==null}case"cond":case"if":{if(e.args.length!==3)return;let n=$(e.args[0],t);return typeof n!="boolean"?void 0:$(n?e.args[1]:e.args[2],t)}default:return}default:return}}function je(e){switch(e.kind){case"identifier":return`id:${e.name}`;case"iterationVar":return"$item";case"propertyAccess":{let t=je(e.object);return t?`${t}.${e.property}`:null}case"indexAccess":{let t=je(e.object),n=Mt(e.index);return t&&n!==void 0?`${t}[${JSON.stringify(n)}]`:null}default:return null}}function Rt(e,t,n){switch(e.kind){case"propertyAccess":return Lt(N(e.object,t,n),n)||Go(e.object,e.property,t,n)||Rt(e.object,t,n);case"indexAccess":return!0;default:return!1}}function Go(e,t,n,r){return Gn(N(e,n,r),t,r)}function Gn(e,t,n){let r=x(e,n);if(!r)return!0;if(r.kind==="objectType"){let o=r.fields.find(i=>i.name===t);return!o||o.optional}if(r.kind==="unionType"){let o=r.types.filter(i=>!K(i));return o.length===0||o.some(i=>Gn(i,t,n))}return!0}function Bn(e,t){let n=x(e,t);if(!n)return!1;switch(n.kind){case"simpleType":return n.name==="boolean";case"literalType":return typeof n.value=="boolean";case"unionType":return n.types.length>0&&n.types.every(r=>Bn(r,t));default:return!1}}function Un(e,t){let n=x(e,t);if(!n)return!1;switch(n.kind){case"simpleType":return n.name==="string"||n.name==="number"||n.name==="boolean"||n.name==="null";case"literalType":return typeof n.value=="string"||typeof n.value=="number"||typeof n.value=="boolean"||n.value===null;case"unionType":return n.types.length>0&&n.types.every(r=>Un(r,t));default:return!1}}function Mt(e){if(e.kind==="literal")return e.literalType==="null"?null:typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"?e.value:void 0}function Bo(e,t,n){let r=e.args.map(a=>N(a,t,n));if(r.some(a=>a===null))return O(r,e.location);let o=r.map(a=>zn(a,n)).filter(a=>a!==null);if(o.length===0)return O(r,e.location);let i=[...o];return r.every(a=>a!==null&&Lt(a,n))&&i.push(P("null",e.location)),O(i,e.location)}function Uo(e,t,n){if(e.args.length<1)return null;let r=Vn(N(e.args[0],t,n),n);return r?{kind:"arrayType",elementType:r,location:e.location}:null}function Vn(e,t){let n=x(e,t);return n?n.kind==="recordType"?n.valueType:n.kind==="objectType"?O(n.fields.map(r=>r.typeExpr),n.location):n.kind==="unionType"?O(n.types.filter(r=>!K(r)).map(r=>Vn(r,t)),n.location):null:null}function zn(e,t){let n=x(e,t);if(!n||K(n))return null;if(n.kind!=="unionType")return n;let r=n.types.map(o=>zn(o,t)).filter(o=>o!==null);return r.length===0?null:O(r,n.location)}function Lt(e,t){let n=x(e,t);return!n||K(n)?!0:n.kind!=="unionType"?!1:n.types.some(r=>Lt(r,t))}function Vo(e,t){return{kind:"literalType",value:e,location:t}}function P(e,t){return{kind:"simpleType",name:e,location:t}}function zo(e){return e.kind==="literal"&&typeof e.value=="string"?e.value:null}function qo(e,t){let n=new Map(e);return n.set("$item",t),n}var Ko=new Set(["findById","existsById"]),_t=new Set(["updateById","removeById"]),Ho=new Set([...Ko,..._t]);function Z(e,t,n,r,o){let i=`${n}:${o.start.offset}:${o.end.offset}:${r}`;t.has(i)||(t.add(i),e.push(I(n,r,o)))}function qn(e){let t=[],n=new Set,r=Qe(e.domain);Qo(e.domain,r,t,n);for(let o of e.domain.members)switch(o.kind){case"computed":v(o.expression,"computed",new Map,r,t,n,0);break;case"action":{let i=Xe(o.params);Jo(o,i,r,t,n);break}case"state":case"context":case"flow":break}return t}function Jo(e,t,n,r,o){e.available&&v(e.available,"available",t,n,r,o,0),e.dispatchable&&v(e.dispatchable,"dispatchable",t,n,r,o,0);for(let i of e.body)Wo(i,t,n,r,o)}function Wo(e,t,n,r,o){switch(e.kind){case"when":v(e.condition,"guard",t,n,r,o,0);for(let i of e.body)ke(i,t,n,r,o);break;case"once":e.condition&&v(e.condition,"guard",t,n,r,o,0);for(let i of e.body)ke(i,t,n,r,o);break;case"onceIntent":e.condition&&v(e.condition,"guard",t,n,r,o,0);for(let i of e.body)ke(i,t,n,r,o);break;case"include":break}}function ke(e,t,n,r,o){switch(e.kind){case"when":v(e.condition,"guard",t,n,r,o,0);for(let i of e.body)ke(i,t,n,r,o);break;case"once":e.condition&&v(e.condition,"guard",t,n,r,o,0);for(let i of e.body)ke(i,t,n,r,o);break;case"onceIntent":e.condition&&v(e.condition,"guard",t,n,r,o,0);for(let i of e.body)ke(i,t,n,r,o);break;case"patch":e.value&&v(e.value,"patch",t,n,r,o,0);break;case"effect":for(let i of e.args)i.isPath||v(i.value,"action",t,n,r,o,0);break;case"fail":e.message&&v(e.message,"action",t,n,r,o,0);break;case"include":case"stop":break}}function v(e,t,n,r,o,i,a){switch(e.kind){case"functionCall":{Yo(e,t,n,r,o,i,a);let s=a+(_t.has(e.name)?1:0);for(let c of e.args)v(c,t,n,r,o,i,s);break}case"binary":v(e.left,t,n,r,o,i,a),v(e.right,t,n,r,o,i,a);break;case"unary":v(e.operand,t,n,r,o,i,a);break;case"ternary":v(e.condition,t,n,r,o,i,a),v(e.consequent,t,n,r,o,i,a),v(e.alternate,t,n,r,o,i,a);break;case"propertyAccess":v(e.object,t,n,r,o,i,a);break;case"indexAccess":v(e.object,t,n,r,o,i,a),v(e.index,t,n,r,o,i,a);break;case"objectLiteral":for(let s of e.properties)v(s.kind==="objectProperty"?s.value:s.expr,t,n,r,o,i,a);break;case"arrayLiteral":for(let s of e.elements)v(s,t,n,r,o,i,a);break;case"literal":case"identifier":case"systemIdent":case"iterationVar":break}}function Yo(e,t,n,r,o,i,a){if(!Ho.has(e.name)||e.args.length===0)return;_t.has(e.name)&&(t==="available"?Z(o,i,"E035","updateById/removeById are not allowed in available conditions.",e.location):t==="dispatchable"?Z(o,i,"E048","updateById/removeById are not allowed in dispatchable conditions.",e.location):t==="guard"?Z(o,i,"E034","updateById/removeById are not allowed in guard conditions.",e.location):t!=="patch"&&Z(o,i,"E031","updateById/removeById are only allowed in patch RHS.",e.location),a>0&&Z(o,i,"E032","Nested transform primitives are not allowed.",e.location),t==="patch"&&!Ft(e.args[0],r)&&Z(o,i,"E033","Transform primitive collection argument must resolve to a state path.",e.args[0].location));let s=Zo(e.args[0],n,r);if(!s)return;let c=Hn(s,r);if(!c){Z(o,i,"E030","Collection element type must declare an 'id' field for entity primitives.",e.args[0].location);return}Ze(c,r)||Z(o,i,"E030a","Entity 'id' field must be string or number.",e.args[0].location)}function Qo(e,t,n,r){for(let o of e.members)if(o.kind==="state")for(let i of o.fields)Xo(i,t,n,r)}function Xo(e,t,n,r){if(!e.initializer||e.initializer.kind!=="arrayLiteral")return;let o=q(e.typeExpr,t);if(!o)return;let i=Hn(o,t);if(!i||!Ze(i,t))return;let a=new Map;for(let s of e.initializer.elements){if(s.kind!=="objectLiteral")continue;let c=Kn(s);if(c.kind!=="literal")continue;let l=`${typeof c.value}:${String(c.value)}`;if(a.get(l)){Z(n,r,"E030b","Duplicate '.id' values detected in state initializer.",c.location);continue}a.set(l,c.location)}}function Kn(e){if(e.kind!=="objectLiteral")return{kind:"unknown"};let t={kind:"absent"};for(let n of e.properties){if(n.kind==="objectProperty"){if(n.key!=="id")continue;if(n.value.kind==="literal"&&(typeof n.value.value=="string"||typeof n.value.value=="number")){t={kind:"literal",value:n.value.value,location:n.value.location};continue}t={kind:"unknown"};continue}let r=Kn(n.expr);r.kind!=="absent"&&(t=r)}return t}function Zo(e,t,n){return q(N(e,t,n),n)}function Hn(e,t){return X(e,"id",t)}function Ft(e,t){switch(e.kind){case"identifier":return t.stateTypes.has(e.name);case"propertyAccess":return Ft(e.object,t);case"indexAccess":return Ft(e.object,t);default:return!1}}function Jn(){return{inAction:!1,inGuard:!1,guardDepth:0,hasMarkerPatch:!1,currentActionParamTypes:new Map,diagnostics:[]}}var ei=/\b(await(?:ing)?|wait(?:ing)?|pending)\b/i,Wn=new Set(["intent.id","intent.action","time.timestamp","time.iso","random.seed","random.uuid"]);function b(e,t){return{kind:"simpleType",name:e,location:t}}function H(e,t,n){let r=x(e,n),o=x(t,n);if(!r||!o)return null;if(o.kind==="unionType"){let i=r.kind==="unionType"?r.types:[r],a=!1;for(let s of i){let c=o.types.map(l=>H(s,l,n));if(!c.includes(!0)){if(c.every(l=>l===!1))return!1;a=!0}}return a?null:!0}if(r.kind==="unionType"){let i=!1;for(let a of r.types){let s=H(a,o,n);if(s===!1)return!1;s===null&&(i=!0)}return i?null:!0}if(o.kind==="simpleType"){if(r.kind==="simpleType")return r.name===o.name;if(r.kind==="literalType")return o.name==="null"?r.value===null:typeof r.value===o.name}if(o.kind==="literalType")return r.kind!=="literalType"?!1:r.value===o.value;if(o.kind==="arrayType")return r.kind!=="arrayType"?!1:H(r.elementType,o.elementType,n);if(o.kind==="objectType"){if(r.kind!=="objectType")return!1;for(let i of o.fields){let a=r.fields.find(c=>c.name===i.name);if(!a){if(i.optional)continue;return!1}if(a.optional&&!i.optional)return!1;let s=H(a.typeExpr,i.typeExpr,n);if(s!==!0)return s}return!0}return o.kind==="recordType"?r.kind!=="recordType"?null:H(r.valueType,o.valueType,n):null}function w(e,t){let n=x(e,t);if(!n)return"unknown";switch(n.kind){case"simpleType":return n.name;case"literalType":return JSON.stringify(n.value);case"arrayType":return`Array<${w(n.elementType,t)}>`;case"recordType":return`Record<${w(n.keyType,t)}, ${w(n.valueType,t)}>`;case"objectType":return`{ ${n.fields.map(r=>`${r.name}${r.optional?"?":""}: ${w(r.typeExpr,t)}`).join("; ")} }`;case"unionType":return n.types.map(r=>w(r,t)).join(" | ")}}function et(e,t){let n=x(e,t);if(!n)return null;switch(n.kind){case"simpleType":return n.name==="string"||n.name==="number"||n.name==="boolean"||n.name==="null"?new Set([n.name]):n.name==="object"?"nonprimitive":null;case"literalType":return new Set([n.value===null?"null":typeof n.value]);case"arrayType":case"recordType":case"objectType":return"nonprimitive";case"unionType":{let r=new Set;for(let o of n.types){let i=et(o,t);if(i===null)return null;if(i==="nonprimitive")return"nonprimitive";for(let a of i)r.add(a)}return r}}}function jt(e,t){let n=et(e,t);if(n===null)return null;if(n==="nonprimitive")return"invalid";let r=[...n].filter(o=>o!=="null");return r.length!==1||n.has("null")?"invalid":r[0]}function Qn(e,t,n){let r=et(e,n),o=et(t,n);if(r===null||o===null)return null;if(r==="nonprimitive"||o==="nonprimitive")return!1;if(!(r instanceof Set)||!(o instanceof Set))return null;let i=[...r].filter(s=>s!=="null"),a=[...o].filter(s=>s!=="null");return i.length===0||a.length===0?!0:i.some(s=>a.includes(s))}function Xn(e,t){let n=x(e,t);if(!n||K(n))return null;if(n.kind!=="unionType")return n;let r=n.types.map(a=>Xn(a,t)).filter(a=>a!==null);if(r.length===0)return null;let o=[],i=new Set;for(let a of r){let s=JSON.stringify(a);i.has(s)||(i.add(s),o.push(a))}return o.length===1?o[0]:{kind:"unionType",types:o,location:n.location}}function $t(e,t,n){if(!e||!t)return null;let r=H(e,t,n);if(r===!0)return!0;let o=H(t,e,n);if(o===!0)return!0;let i=Qn(e,t,n);return i!==null?i:r===!1&&o===!1?!1:null}function Gt(e,t,n){let r=x(e,n),o=x(t,n);if(!r||!o)return null;if(o.kind==="unionType"){let i=!1;for(let a of o.types){if(K(a))continue;let s=Gt(r,a,n);if(s===!0)return!0;s===null&&(i=!0)}return i?null:!1}if(r.kind==="unionType"){let i=!1;for(let a of r.types){let s=Gt(a,o,n);if(s===!1)return!1;s===null&&(i=!0)}return i?null:!0}if(o.kind!=="objectType"||r.kind!=="objectType")return!1;for(let i of r.fields){let a=o.fields.find(c=>c.name===i.name);if(!a)return!1;let s=H(i.typeExpr,a.typeExpr,n);if(s!==!0)return s}return!0}function Zn(e,t){let n=x(e,t);if(!n)return null;if(n.kind==="unionType"){let r=n.types.map(o=>Zn(o,t));return r.every(o=>o===!0)?!0:r.some(o=>o===!1)?!1:null}return n.kind==="arrayType"}function er(e,t){let n=x(e,t);if(!n)return null;if(n.kind==="unionType"){let r=n.types.map(o=>er(o,t));return r.every(o=>o===!0)?!0:r.some(o=>o===!1)?!1:null}return n.kind==="arrayType"||n.kind==="recordType"||n.kind==="objectType"?!0:n.kind==="literalType"?typeof n.value=="string":n.kind==="simpleType"?n.name==="string"||n.name==="object":!1}function ti(e,t){let n=new Map(e);return n.set("$item",t),n}function Yn(e){let t=tt(e);if(typeof t=="number")return t;if(e.kind==="literal")return e.literalType==="null"?null:typeof e.value=="string"||typeof e.value=="number"||typeof e.value=="boolean"?e.value:void 0}function tt(e){if(e.kind==="literal"&&e.literalType==="number"&&typeof e.value=="number")return e.value;if(e.kind==="unary"&&e.operator==="-"){let t=tt(e.operand);return typeof t=="number"?-t:void 0}}function ni(e,t){let[n,...r]=e.segments;if(!n||n.kind!=="propertySegment")return null;let o=t.stateTypes.get(n.name)??null;for(let i of r){if(!o)return null;o=i.kind==="propertySegment"?X(o,i.name,t):$e(o,t)}return o}function ri(e){let t="";for(let[n,r]of e.segments.entries()){if(r.kind==="propertySegment"){t+=n===0?r.name:`.${r.name}`;continue}r.index.kind==="literal"?t+=`[${JSON.stringify(r.index.value)}]`:t+="[*]"}return t}var Bt=class{ctx=Jn();symbols=null;validate(t){return this.ctx=Jn(),this.symbols=Qe(t.domain),this.validateDomain(t.domain),this.symbols=null,{valid:!this.ctx.diagnostics.some(n=>n.severity==="error"),diagnostics:this.ctx.diagnostics}}validateDomain(t){t.name.startsWith("__")&&this.error("Domain name cannot start with '__' (reserved prefix)",t.location,"E_RESERVED_NAME");let n=t.members.filter(r=>r.kind==="context");for(let r of n.slice(1))this.error("Domain can declare context at most once",r.location,"E_DUPLICATE_FIELD");for(let r of t.members)switch(r.kind){case"state":this.validateState(r);break;case"context":this.validateContext(r);break;case"computed":this.validateExpr(r.expression,"computed");break;case"action":this.validateAction(r);break;case"flow":break}}validateState(t){let n=new Map;for(let r of t.fields){let o=n.get(r.name);o?this.error(`Duplicate state field '${r.name}'. First declared at line ${o.start.line}`,r.location,"E_DUPLICATE_FIELD"):n.set(r.name,r.location),this.validateStateField(r)}}validateStateField(t){this.checkAnonymousObjectType(t.typeExpr,t.location),t.initializer&&this.validateStateInitializer(t.initializer)}validateContext(t){let n=new Map;for(let r of t.fields){let o=n.get(r.name);o?this.error(`Duplicate context field '${r.name}'. First declared at line ${o.start.line}`,r.location,"E_DUPLICATE_FIELD"):n.set(r.name,r.location)}}validateStateInitializer(t){switch(t.kind){case"literal":return;case"identifier":case"iterationVar":this.error("State initializers must be compile-time constants",t.location,"E042");return;case"systemIdent":this.error(`$${t.path[0]}.* cannot be used in state initializers`,t.location,"E002");return;case"objectLiteral":for(let n of t.properties){if(n.kind==="objectProperty"){this.validateStateInitializer(n.value);continue}let r=this.ctx.diagnostics.length;this.validateStateInitializer(n.expr),r===this.ctx.diagnostics.length&&this.requireSpreadOperand(this.inferType(n.expr,new Map),n.location,n.expr,new Map)}return;case"arrayLiteral":for(let n of t.elements)this.validateStateInitializer(n);return;case"functionCall":{let n=this.ctx.diagnostics.length;for(let r of t.args)this.validateStateInitializer(r);this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",t.location,"E042");return}case"binary":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(t.left),this.validateStateInitializer(t.right),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",t.location,"E042");return}case"unary":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(t.operand),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",t.location,"E042");return}case"ternary":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(t.condition),this.validateStateInitializer(t.consequent),this.validateStateInitializer(t.alternate),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",t.location,"E042");return}case"propertyAccess":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(t.object),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",t.location,"E042");return}case"indexAccess":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(t.object),this.validateStateInitializer(t.index),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",t.location,"E042");return}}}checkAnonymousObjectType(t,n){switch(t.kind){case"objectType":this.ctx.diagnostics.push(In("W012","Anonymous object type in state field. Use a named type declaration instead: type MyType = { ... }",t.location,{suggestion:"Define this type using 'type TypeName = { ... }' and reference it by name"}));for(let r of t.fields)this.checkAnonymousObjectType(r.typeExpr,n);break;case"arrayType":this.checkAnonymousObjectType(t.elementType,n);break;case"recordType":this.checkAnonymousObjectType(t.keyType,n),this.checkAnonymousObjectType(t.valueType,n);break;case"unionType":for(let r of t.types)this.checkAnonymousObjectType(r,n);break}}validateAction(t){this.ctx.inAction=!0,this.ctx.currentActionParamTypes=Xe(t.params),t.available&&this.validateAvailableExpr(t.available),t.dispatchable&&this.validateDispatchableExpr(t.dispatchable);for(let n of t.body)this.validateGuardedStmt(n);this.ctx.inAction=!1,this.ctx.currentActionParamTypes=new Map}validateAvailableExpr(t){switch(t.kind){case"identifier":this.ctx.currentActionParamTypes.has(t.name)&&this.error("Action parameters cannot be used in available condition",t.location,"E005");break;case"systemIdent":this.error(`$${t.path[0]}.* cannot be used in available condition`,t.location,"E005");break;case"functionCall":for(let n of t.args)this.validateAvailableExpr(n);break;case"binary":this.validateAvailableExpr(t.left),this.validateAvailableExpr(t.right);break;case"unary":this.validateAvailableExpr(t.operand);break;case"ternary":this.validateAvailableExpr(t.condition),this.validateAvailableExpr(t.consequent),this.validateAvailableExpr(t.alternate);break;case"propertyAccess":this.validateAvailableExpr(t.object);break;case"indexAccess":this.validateAvailableExpr(t.object),this.validateAvailableExpr(t.index);break;case"objectLiteral":for(let n of t.properties)this.validateAvailableExpr(n.kind==="objectProperty"?n.value:n.expr);break;case"arrayLiteral":for(let n of t.elements)this.validateAvailableExpr(n);break}}validateDispatchableExpr(t){switch(t.kind){case"systemIdent":this.error(t.path[0]==="input"?"$input.* cannot be used in dispatchable condition (use bare action parameter names)":`$${t.path[0]}.* cannot be used in dispatchable condition`,t.location,"E047");break;case"functionCall":for(let n of t.args)this.validateDispatchableExpr(n);break;case"binary":this.validateDispatchableExpr(t.left),this.validateDispatchableExpr(t.right);break;case"unary":this.validateDispatchableExpr(t.operand);break;case"ternary":this.validateDispatchableExpr(t.condition),this.validateDispatchableExpr(t.consequent),this.validateDispatchableExpr(t.alternate);break;case"propertyAccess":this.validateDispatchableExpr(t.object);break;case"indexAccess":this.validateDispatchableExpr(t.object),this.validateDispatchableExpr(t.index);break;case"objectLiteral":for(let n of t.properties)this.validateDispatchableExpr(n.kind==="objectProperty"?n.value:n.expr);break;case"arrayLiteral":for(let n of t.elements)this.validateDispatchableExpr(n);break}}validateGuardedStmt(t){switch(t.kind){case"when":this.validateWhen(t);break;case"once":this.validateOnce(t);break;case"onceIntent":this.validateOnceIntent(t);break;case"patch":this.validatePatch(t);break;case"effect":this.validateEffect(t);break;case"include":break;case"fail":this.validateFail(t);break;case"stop":this.validateStop(t);break}}validateWhen(t){this.ctx.inGuard=!0,this.ctx.guardDepth++,this.validateCondition(t.condition,"when");for(let n of t.body)this.validateGuardedStmt(n);this.ctx.guardDepth--,this.ctx.guardDepth===0&&(this.ctx.inGuard=!1)}validateOnce(t){this.ctx.inGuard=!0,this.ctx.guardDepth++,this.ctx.hasMarkerPatch=!1,t.condition&&this.validateCondition(t.condition,"once");for(let n of t.body)this.validateGuardedStmt(n);this.ctx.guardDepth--,this.ctx.guardDepth===0&&(this.ctx.inGuard=!1)}validateOnceIntent(t){this.ctx.inGuard=!0,this.ctx.guardDepth++,t.condition&&this.validateCondition(t.condition,"onceIntent");for(let n of t.body)this.validateGuardedStmt(n);this.ctx.guardDepth--,this.ctx.guardDepth===0&&(this.ctx.inGuard=!1)}validatePatch(t){if(this.ctx.inGuard||this.error("Patch must be inside a guard (when, once, or onceIntent)",t.location,"E_UNGUARDED_PATCH"),t.value){let n=this.ctx.diagnostics.length,r=this.validateExpr(t.value,"action");if(!this.symbols||n!==this.ctx.diagnostics.length)return;let o=ni(t.path,this.symbols);if(!o||!r)return;(t.op==="merge"?Gt(r,o,this.symbols):H(r,o,this.symbols))===!1&&this.error(`Patch value for '${ri(t.path)}' must be assignable to ${w(o,this.symbols)}, got ${w(r,this.symbols)}`,t.value.location,"E_TYPE_MISMATCH")}}validateEffect(t){this.ctx.inGuard||this.error("Effect must be inside a guard (when, once, or onceIntent)",t.location,"E_UNGUARDED_EFFECT");for(let n of t.args)n.isPath||this.validateExpr(n.value,"action")}validateFail(t){this.ctx.inGuard||this.error("fail must be inside a guard (when, once, or onceIntent)",t.location,"E006"),t.message&&this.validateExpr(t.message,"action")}validateStop(t){this.ctx.inGuard||this.error("stop must be inside a guard (when, once, or onceIntent)",t.location,"E007"),ei.test(t.reason)&&this.error("stop message suggests waiting/pending - use 'Already processed' style instead",t.location,"E008")}validateCondition(t,n){let r=this.ctx.diagnostics.length,o=this.validateExpr(t,"action");r===this.ctx.diagnostics.length&&this.requireAssignable(o,b("boolean",t.location),t.location,`Condition in ${n} must evaluate to boolean`)}validateExpr(t,n,r=this.ctx.currentActionParamTypes){switch(t.kind){case"functionCall":return this.validateFunctionCall(t,n,r),this.inferType(t,r);case"binary":{let o=this.ctx.diagnostics.length,i=this.validateExpr(t.left,n,r),a=this.validateExpr(t.right,n,r);if(!(o!==this.ctx.diagnostics.length))switch(t.operator){case"==":case"!=":this.validatePrimitiveEquality(t.left,t.right,i,a,t.location);break;case"<":case"<=":case">":case">=":this.requireAssignable(i,b("number",t.left.location),t.left.location,`Operator '${t.operator}' requires a numeric left operand`),this.requireAssignable(a,b("number",t.right.location),t.right.location,`Operator '${t.operator}' requires a numeric right operand`);break;case"&&":case"||":this.requireAssignable(i,b("boolean",t.left.location),t.left.location,`Operator '${t.operator}' requires a boolean left operand`),this.requireAssignable(a,b("boolean",t.right.location),t.right.location,`Operator '${t.operator}' requires a boolean right operand`);break;case"+":case"-":case"*":case"/":case"%":this.requireAssignable(i,b("number",t.left.location),t.left.location,`Operator '${t.operator}' requires a numeric left operand`),this.requireAssignable(a,b("number",t.right.location),t.right.location,`Operator '${t.operator}' requires a numeric right operand`);break;case"??":this.validateCoalesceTypes([i,a],t.location);break}return this.inferType(t,r)}case"unary":{let o=this.ctx.diagnostics.length,i=this.validateExpr(t.operand,n,r);return o===this.ctx.diagnostics.length&&this.requireAssignable(i,b(t.operator==="!"?"boolean":"number",t.operand.location),t.operand.location,t.operator==="!"?"Unary '!' requires a boolean operand":"Unary '-' requires a numeric operand"),this.inferType(t,r)}case"ternary":{let o=this.ctx.diagnostics.length,i=this.validateExpr(t.condition,n,r);return this.validateExpr(t.consequent,n,r),this.validateExpr(t.alternate,n,r),o===this.ctx.diagnostics.length&&this.requireAssignable(i,b("boolean",t.condition.location),t.condition.location,"Ternary condition must evaluate to boolean"),this.inferType(t,r)}case"propertyAccess":return this.validateExpr(t.object,n,r),this.inferType(t,r);case"indexAccess":return this.validateExpr(t.object,n,r),this.validateExpr(t.index,n,r),this.inferType(t,r);case"objectLiteral":for(let o of t.properties){if(o.kind==="objectProperty"){this.validateExpr(o.value,n,r);continue}let i=this.validateExpr(o.expr,n,r);this.symbols&&this.requireSpreadOperand(i,o.location,o.expr,r)}return this.inferType(t,r);case"arrayLiteral":for(let o of t.elements)this.validateExpr(o,n,r);return this.inferType(t,r);case"systemIdent":return this.validateDollarIdent(t.path,n,t.location),this.inferType(t,r);case"literal":case"identifier":case"iterationVar":return this.inferType(t,r)}}validateDollarIdent(t,n,r){let[o,...i]=t;if(o==="system"||o==="meta"){this.error(`$${o}.* is retired in v5 MEL; use $runtime.* or declared $context.* where action-flow context is available`,r,n==="computed"?"E001":"E003");return}if(o==="input"){n==="computed"&&this.error("$input.* cannot be used in computed expressions",r,"E001");return}if(o==="runtime"){if(n!=="action"){this.error("$runtime.* can be used only in bound action flow expressions",r,"E001");return}let a=i.join(".");Wn.has(a)||this.error(`Invalid runtime value '$runtime.${a}'. Valid values: ${[...Wn].join(", ")}`,r,"E003");return}if(o==="context"){if(n!=="action"){this.error("$context.* can be used only in bound action flow expressions",r,"E001");return}this.validateContextPath(i,r);return}this.error(`Invalid dollar identifier namespace '$${o}'. Valid namespaces: $runtime, $context, $input, $item`,r,"E003")}validateContextPath(t,n){if(!this.symbols)return;if(this.symbols.contextTypes.size===0){this.error("Cannot use $context.* without a domain context declaration",n,"E003");return}if(t.length===0)return;let[r,...o]=t,i=this.symbols.contextTypes.get(r)??null;if(!i){this.error(`Unknown context field '$context.${r}'`,n,"E_UNDEFINED");return}for(let a of o)if(i=X(i,a,this.symbols),!i){this.error(`Unknown context path '$context.${t.join(".")}'`,n,"E_UNDEFINED");return}}validateFunctionCall(t,n,r){let{name:o,args:i,location:a}=t;if(["reduce","fold","foldl","foldr","scan"].includes(o)&&this.error(`Function '${o}' is forbidden. Use sum(), min(), max() for aggregation instead`,a,"E011"),["sum","min","max"].includes(o)&&i.length===1){n==="action"&&this.error(`Primitive aggregation '${o}()' can only be used in computed expressions, not in actions`,a,"E009");let c=i[0];c.kind==="functionCall"&&this.error(`Primitive aggregation '${o}()' does not allow composition. Use a direct reference, not '${c.name}()'`,a,"E010")}switch(o){case"eq":case"neq":break;case"len":case"sum":i.length!==1&&this.error(`Function '${o}' expects 1 argument, got ${i.length}`,a,"E_ARG_COUNT");break;case"add":case"sub":case"mul":case"div":case"mod":case"absDiff":case"idiv":case"gt":case"gte":case"lt":case"lte":i.length!==2&&this.error(`Function '${o}' expects 2 arguments, got ${i.length}`,a,"E_ARG_COUNT");break;case"not":case"neg":case"abs":case"floor":case"ceil":case"round":case"sqrt":case"isNull":case"isNotNull":case"trim":case"lower":case"upper":case"strlen":case"keys":case"values":case"entries":case"first":case"last":case"typeof":case"toString":case"toNumber":case"toBoolean":case"reverse":case"unique":case"flat":case"fromEntries":i.length!==1&&this.error(`Function '${o}' expects 1 argument, got ${i.length}`,a,"E_ARG_COUNT");break;case"pow":case"findById":case"existsById":case"filter":case"map":case"find":case"every":case"some":case"at":case"includes":case"field":case"hasKey":case"pick":case"omit":case"startsWith":case"endsWith":case"strIncludes":case"indexOf":i.length!==2&&this.error(`Function '${o}' expects 2 arguments, got ${i.length}`,a,"E_ARG_COUNT");break;case"updateById":case"clamp":i.length!==3&&this.error(`Function '${o}' expects 3 arguments, got ${i.length}`,a,"E_ARG_COUNT");break;case"removeById":case"streak":i.length!==2&&this.error(`Function '${o}' expects 2 arguments, got ${i.length}`,a,"E_ARG_COUNT");break;case"slice":case"substring":case"substr":case"replace":(i.length<2||i.length>3)&&this.error(`Function '${o}' expects 2-3 arguments, got ${i.length}`,a,"E_ARG_COUNT");break;case"split":i.length!==2&&this.error(`Function '${o}' expects 2 arguments, got ${i.length}`,a,"E_ARG_COUNT");break;case"and":case"or":case"concat":case"min":case"max":case"merge":case"coalesce":case"append":i.length<1&&this.error(`Function '${o}' expects at least 1 argument`,a,"E_ARG_COUNT");break;case"match":i.length<3&&this.error("Function 'match' expects a selector, at least one [key, value] arm, and a default value",a,"E050");break;case"argmax":case"argmin":i.length<2&&this.error(`Function '${o}' expects at least one [label, eligible, score] candidate and a tie-break literal`,a,"E052");break;case"if":case"cond":i.length!==3&&this.error(`Function '${o}' expects 3 arguments, got ${i.length}`,a,"E_ARG_COUNT");break;default:this.error(`Unknown function '${o}'. Check spelling or see MEL builtin function reference`,a,"E_UNKNOWN_FN");break}let s=[];if(["filter","map","find","every","some"].includes(o)&&i.length>0){let c=this.validateExpr(i[0],n,r);s.push(c);let l=r;if(this.symbols){let d=q(c,this.symbols);d&&(l=ti(r,d))}for(let d=1;d<i.length;d+=1)s.push(this.validateExpr(i[d],n,d===1?l:r))}else for(let c of i)s.push(this.validateExpr(c,n,r));if(this.symbols)switch(o){case"eq":case"neq":i.length===2&&this.validatePrimitiveEquality(i[0],i[1],s[0],s[1],a);break;case"add":case"sub":case"mul":case"div":case"mod":case"absDiff":case"idiv":case"pow":i.length===2&&(this.requireAssignable(s[0],b("number",i[0].location),i[0].location,`Function '${o}' expects a numeric first argument`),this.requireAssignable(s[1],b("number",i[1].location),i[1].location,`Function '${o}' expects a numeric second argument`));break;case"gt":case"gte":case"lt":case"lte":i.length===2&&(this.requireAssignable(s[0],b("number",i[0].location),i[0].location,`Function '${o}' expects a numeric first argument`),this.requireAssignable(s[1],b("number",i[1].location),i[1].location,`Function '${o}' expects a numeric second argument`));break;case"and":case"or":for(let[c,l]of i.entries())this.requireAssignable(s[c],b("boolean",l.location),l.location,`Function '${o}' expects boolean arguments`);break;case"not":i.length===1&&this.requireAssignable(s[0],b("boolean",i[0].location),i[0].location,"Function 'not' expects a boolean argument");break;case"neg":case"abs":case"floor":case"ceil":case"round":case"sqrt":i.length===1&&this.requireAssignable(s[0],b("number",i[0].location),i[0].location,`Function '${o}' expects a numeric argument`);break;case"clamp":if(i.length===3){this.requireAssignable(s[0],b("number",i[0].location),i[0].location,"Function 'clamp' expects a numeric first argument"),this.requireAssignable(s[1],b("number",i[1].location),i[1].location,"Function 'clamp' expects a numeric second argument"),this.requireAssignable(s[2],b("number",i[2].location),i[2].location,"Function 'clamp' expects a numeric third argument");let c=tt(i[1]),l=tt(i[2]);typeof c=="number"&&typeof l=="number"&&c>l&&this.error("Function 'clamp' requires literal bounds in lo, hi order",a,"E049")}break;case"streak":i.length===2&&(this.requireAssignable(s[0],b("number",i[0].location),i[0].location,"Function 'streak' expects a numeric first argument"),this.requireAssignable(s[1],b("boolean",i[1].location),i[1].location,"Function 'streak' expects a boolean second argument"));break;case"trim":case"lower":case"upper":case"strlen":i.length===1&&this.requireAssignable(s[0],b("string",i[0].location),i[0].location,`Function '${o}' expects a string argument`);break;case"startsWith":case"endsWith":case"strIncludes":case"indexOf":case"split":i.length===2&&(this.requireAssignable(s[0],b("string",i[0].location),i[0].location,`Function '${o}' expects a string first argument`),this.requireAssignable(s[1],b("string",i[1].location),i[1].location,`Function '${o}' expects a string second argument`));break;case"replace":i.length>=2&&(this.requireAssignable(s[0],b("string",i[0].location),i[0].location,"Function 'replace' expects a string first argument"),this.requireAssignable(s[1],b("string",i[1].location),i[1].location,"Function 'replace' expects a string second argument")),i.length===3&&this.requireAssignable(s[2],b("string",i[2].location),i[2].location,"Function 'replace' expects a string replacement argument");break;case"substring":case"substr":i.length>=2&&(this.requireAssignable(s[0],b("string",i[0].location),i[0].location,`Function '${o}' expects a string first argument`),this.requireAssignable(s[1],b("number",i[1].location),i[1].location,`Function '${o}' expects a numeric second argument`)),i.length===3&&this.requireAssignable(s[2],b("number",i[2].location),i[2].location,`Function '${o}' expects a numeric third argument`);break;case"len":i.length===1&&this.requireLenCompatible(s[0],i[0].location);break;case"filter":case"find":case"every":case"some":i.length===2&&(this.requireArrayCompatible(s[0],i[0].location,o),this.requireAssignable(s[1],b("boolean",i[1].location),i[1].location,`Function '${o}' requires a boolean-valued callback`));break;case"map":i.length===2&&this.requireArrayCompatible(s[0],i[0].location,o);break;case"merge":for(let[c,l]of i.entries())this.requireSpreadOperand(s[c],l.location,l,r);break;case"coalesce":this.validateCoalesceTypes(s,a);break;case"match":this.validateMatchCall(i,s,a,r);break;case"argmax":case"argmin":this.validateArgSelectionCall(o,i,a,r);break;case"if":case"cond":i.length===3&&this.requireAssignable(s[0],b("boolean",i[0].location),i[0].location,`Function '${o}' expects a boolean condition`);break}}validatePrimitiveEquality(t,n,r,o,i){if(!this.symbols)return;if(t.kind==="objectLiteral"||t.kind==="arrayLiteral"||n.kind==="objectLiteral"||n.kind==="arrayLiteral"){this.error("eq/neq operands must be compatible primitive types, not object or array literals",i,"E_TYPE_MISMATCH");return}Qn(r,o,this.symbols)===!1&&this.error(`eq/neq operands must be compatible primitive types, got ${w(r,this.symbols)} and ${w(o,this.symbols)}`,i,"E_TYPE_MISMATCH")}inferType(t,n){return this.symbols?N(t,n,this.symbols):null}requireAssignable(t,n,r,o){if(!this.symbols||!t)return;H(t,n,this.symbols)===!1&&this.error(`${o}, got ${w(t,this.symbols)}`,r,"E_TYPE_MISMATCH")}requireArrayCompatible(t,n,r){if(!this.symbols||!t)return;Zn(t,this.symbols)===!1&&this.error(`Function '${r}' expects an array first argument, got ${w(t,this.symbols)}`,n,"E_TYPE_MISMATCH")}requireLenCompatible(t,n){if(!this.symbols||!t)return;er(t,this.symbols)===!1&&this.error(`Function 'len' expects a string, array, object, or record argument, got ${w(t,this.symbols)}`,n,"E_TYPE_MISMATCH")}requireSpreadOperand(t,n,r,o=new Map){if(!this.symbols)return;let i=t===null?"unknown":Dt(t,this.symbols);(Q(r,{env:o,symbols:this.symbols,inferExprType:N,resolveType:x})?"invalid":i)==="invalid"&&this.error(`Object spread operands must be object-shaped or T | null where T is object-shaped, got ${w(t,this.symbols)}`,n,"E_TYPE_MISMATCH")}validateCoalesceTypes(t,n){if(!this.symbols)return;let r=t.map(o=>Xn(o,this.symbols)).filter(o=>o!==null);for(let o=0;o<r.length;o+=1)for(let i=o+1;i<r.length;i+=1)if($t(r[o],r[i],this.symbols)===!1){this.error(`coalesce arguments must have compatible non-null types, got ${w(r[o],this.symbols)} and ${w(r[i],this.symbols)}`,n,"E_TYPE_MISMATCH");return}}validateMatchCall(t,n,r,o){if(!this.symbols||t.length<3)return;let i=n[0],a=jt(i,this.symbols);a==="invalid"&&this.error(`Function 'match' requires a selector of type string, number, or boolean, got ${w(i,this.symbols)}`,t[0].location,"E_TYPE_MISMATCH");let s=new Set,c=[];for(let l=1;l<t.length-1;l+=1){let d=t[l];if(d.kind!=="arrayLiteral"||d.elements.length!==2){this.error("Function 'match' requires each arm to be an inline [key, value] array literal",d.location,"E050");continue}let[h,m]=d.elements,E=Yn(h);if(E==null)this.error("Function 'match' requires literal string, number, or boolean arm keys",h.location,"E050");else{let he=`${typeof E}:${String(E)}`;s.has(he)?this.error(`Function 'match' has duplicate arm key ${JSON.stringify(E)}`,h.location,"E051"):s.add(he)}let C=this.inferType(h,o),_=jt(C,this.symbols);(_==="invalid"||a!==null&&_!==null&&a!==_)&&this.error(`Function 'match' selector and arm keys must use the same primitive type, got ${w(i,this.symbols)} and ${w(C,this.symbols)}`,h.location,"E_TYPE_MISMATCH"),c.push(this.inferType(m,o))}c.push(n[n.length-1]);for(let l=0;l<c.length;l+=1)for(let d=l+1;d<c.length;d+=1)if($t(c[l],c[d],this.symbols)===!1){this.error(`Function 'match' arm values and default must have compatible types, got ${w(c[l],this.symbols)} and ${w(c[d],this.symbols)}`,r,"E_TYPE_MISMATCH");return}}validateArgSelectionCall(t,n,r,o){if(!this.symbols||n.length<2)return;let i=n[n.length-1],a=Yn(i);a!=="first"&&a!=="last"&&this.error(`Function '${t}' requires a final tie-break literal of "first" or "last"`,i.location,"E052");let s=[],c=null;for(let l=0;l<n.length-1;l+=1){let d=n[l];if(d.kind!=="arrayLiteral"||d.elements.length!==3){this.error(`Function '${t}' requires inline [label, eligible, score] array literal candidates`,d.location,"E052");continue}let[h,m,E]=d.elements,C=this.inferType(h,o),_=jt(C,this.symbols);_==="invalid"?this.error(`Function '${t}' requires labels with exactly one primitive scalar type, got ${w(C,this.symbols)}`,h.location,"E_TYPE_MISMATCH"):c===null?c=_:_!==null&&_!==c&&this.error(`Function '${t}' candidate labels must share one primitive scalar type, got ${c} and ${_}`,h.location,"E_TYPE_MISMATCH"),this.requireAssignable(this.inferType(m,o),b("boolean",m.location),m.location,`Function '${t}' expects a boolean eligible value`),this.requireAssignable(this.inferType(E,o),b("number",E.location),E.location,`Function '${t}' expects a numeric score value`),s.push(C)}for(let l=0;l<s.length;l+=1)for(let d=l+1;d<s.length;d+=1)if($t(s[l],s[d],this.symbols)===!1){this.error(`Function '${t}' candidate labels must have compatible scalar types, got ${w(s[l],this.symbols)} and ${w(s[d],this.symbols)}`,r,"E_TYPE_MISMATCH");return}}error(t,n,r){this.ctx.diagnostics.push({severity:"error",code:r,message:t,location:n})}warn(t,n,r){this.ctx.diagnostics.push({severity:"warning",code:r,message:t,location:n})}};function tr(e){let n=new Bt().validate(e),r=qn(e),o=[...n.diagnostics,...r];return{valid:!o.some(i=>i.severity==="error"),diagnostics:o}}var Ut={mode:"schema",allowSysPaths:{prefixes:[]},fnTableVersion:"1.0",allowItem:!1},Vt={mode:"action",allowSysPaths:{prefixes:["input","runtime","context"]},fnTableVersion:"1.0",allowItem:!1},zt={mode:"action",allowSysPaths:{prefixes:[]},fnTableVersion:"1.0",allowItem:!1},qt={mode:"action",allowSysPaths:{prefixes:["input","runtime","context"]},fnTableVersion:"1.0",allowItem:!0},oi={allowSysPaths:{prefixes:["input","runtime","context"]},fnTableVersion:"1.0"};var J=class extends Error{code;path;details;constructor(t,n,r){super(n),this.name="LoweringError",this.code=t,this.path=r?.path,this.details=r?.details}};function nt(e,t,n){return new J("INVALID_KIND_FOR_CONTEXT",`Node kind '${e}' is not allowed in ${t} context`,{path:n,details:{kind:e,context:t}})}function k(e,t){return new J("UNKNOWN_CALL_FN",`Unknown function '${e}' in call expression`,{path:t,details:{fn:e}})}function rt(e,t){return new J("INVALID_SYS_PATH",`Dollar namespace path '${e.join(".")}' is not allowed in this lowering context`,{path:t,details:{sysPath:e}})}function Kt(e,t){return new J("UNSUPPORTED_BASE",`Unsupported base expression kind '${e}'. Only var(item) is supported.`,{path:t,details:{baseKind:e}})}function ii(e,t){return new J("INVALID_SHAPE",`Invalid node shape: ${e}`,{path:t,details:{description:e}})}function Ht(e,t){return new J("UNKNOWN_NODE_KIND",`Unknown expression node kind '${e}'`,{path:t,details:{kind:e}})}function de(e,t){let n=Array.from(e),r=Array.from(t),o=Math.min(n.length,r.length);for(let i=0;i<o;i+=1){let a=n[i].codePointAt(0)??0,s=r[i].codePointAt(0)??0;if(a!==s)return a-s}return n.length-r.length}function nr(e){return e.map((t,n)=>({item:t,index:n})).sort((t,n)=>{let r=de(t.item.key,n.item.key);return r!==0?r:t.index-n.index}).map(({item:t})=>t)}function f(e,t){switch(e.kind){case"lit":return ai(e);case"var":return si(e,t);case"sys":return ci(e,t);case"get":return li(e,t);case"field":return rr(e,t);case"call":return di(e,t);case"obj":return ui(e,t);case"arr":return pi(e,t);default:throw Ht(e.kind)}}function ai(e){return{kind:"lit",value:e.value}}function si(e,t){if(!t.allowItem)throw nt("var",t.mode);return{kind:"get",path:"$item"}}function ci(e,t){if(e.path.length===0)throw rt(e.path);let n=e.path[0];if(!(t.allowSysPaths?.prefixes??["input","runtime","context"]).includes(n))throw rt(e.path);return n==="runtime"||n==="context"?{kind:"get",path:`$${e.path.join(".")}`}:{kind:"get",path:e.path.join(".")}}function li(e,t){let n=e.path.map(r=>r.name).join(".");if(e.base===void 0)return{kind:"get",path:n};if(e.base.kind==="var"&&e.base.name==="item"){if(!t.allowItem)throw nt("var",t.mode);return{kind:"get",path:`$item.${n}`}}throw Kt(e.base.kind)}function rr(e,t){if(e.object.kind==="get"&&e.object.base===void 0){let n=e.object.path.map(r=>r.name).join(".");return{kind:"get",path:n?`${n}.${e.property}`:e.property}}return{kind:"field",object:f(e.object,t),property:e.property}}function di(e,t){let{fn:n,args:r}=e;if(n==="absDiff"){if(r.length!==2)throw k(n);return{kind:"abs",arg:{kind:"sub",left:f(r[0],t),right:f(r[1],t)}}}if(n==="clamp"){if(r.length!==3)throw k(n);return{kind:"min",args:[{kind:"max",args:[f(r[0],t),f(r[1],t)]},f(r[2],t)]}}if(n==="idiv"){if(r.length!==2)throw k(n);return{kind:"floor",arg:{kind:"div",left:f(r[0],t),right:f(r[1],t)}}}if(n==="streak"){if(r.length!==2)throw k(n);return{kind:"if",cond:f(r[1],t),then:{kind:"add",left:f(r[0],t),right:{kind:"lit",value:1}},else:{kind:"lit",value:0}}}if(n==="match")return fi(r,t);if(n==="argmax"||n==="argmin")return mi(n,r,t);if(Ti(n)){if(r.length!==2)throw k(n);let[o,i]=r;return{kind:n,left:f(o,t),right:f(i,t)}}if(n==="isNotNull"){if(r.length!==1)throw k(n);return{kind:"not",arg:{kind:"isNull",arg:f(r[0],t)}}}if(or(n)){if(r.length!==1)throw k(n);return{kind:Ni(n),arg:f(r[0],t)}}if(n==="trim"){if(r.length!==1)throw k(n);return{kind:"trim",str:f(r[0],t)}}if(n==="lower"||n==="toLowerCase"){if(r.length!==1)throw k(n);return{kind:"toLowerCase",str:f(r[0],t)}}if(n==="upper"||n==="toUpperCase"){if(r.length!==1)throw k(n);return{kind:"toUpperCase",str:f(r[0],t)}}if(n==="strlen"||n==="strLen"){if(r.length!==1)throw k(n);return{kind:"strLen",str:f(r[0],t)}}if(ki(n))return r.length===1?{kind:n==="min"?"minArray":"maxArray",array:f(r[0],t)}:{kind:n,args:r.map(o=>f(o,t))};if(n==="sum"){if(r.length!==1)throw k(n);return{kind:"sumArray",array:f(r[0],t)}}if(n==="pow"){if(r.length!==2)throw k(n);return{kind:"pow",base:f(r[0],t),exponent:f(r[1],t)}}if(bi(n))return{kind:n,args:r.map(o=>f(o,t))};if(n==="if"||n==="cond"){if(r.length!==3)throw k(n);return{kind:"if",cond:f(r[0],t),then:f(r[1],t),else:f(r[2],t)}}if(n==="field"){if(r.length!==2)throw k(n);let o=f(r[0],t),i=r[1];if(i.kind!=="lit"||typeof i.value!="string")throw k(n);return rr({kind:"field",object:r[0],property:i.value},t)}if(Si(n)){if(r.length!==1)throw k(n);return{kind:n,array:f(r[0],t)}}if(xi(n)){if(r.length!==1)throw k(n);return{kind:n,obj:f(r[0],t)}}if(n==="at"){if(r.length!==2)throw k(n);return{kind:"at",array:f(r[0],t),index:f(r[1],t)}}if(n==="includes"){if(r.length!==2)throw k(n);return{kind:"includes",array:f(r[0],t),item:f(r[1],t)}}if(Ai(n)){if(r.length!==2)throw k(n);let o={...t,allowItem:!0};return n==="map"?{kind:"map",array:f(r[0],t),mapper:f(r[1],o)}:{kind:n,array:f(r[0],t),predicate:f(r[1],o)}}if(n==="slice"){if(r.length<2||r.length>3)throw k(n);let o={kind:"slice",array:f(r[0],t),start:f(r[1],t)};return r.length===3&&(o.end=f(r[2],t)),o}if(n==="substring"||n==="substr"){if(r.length<2||r.length>3)throw k(n);let o={kind:"substring",str:f(r[0],t),start:f(r[1],t)};return r.length===3&&(o.end=f(r[2],t)),o}if(n==="append"){if(r.length<1)throw k(n);return{kind:"append",array:f(r[0],t),items:r.slice(1).map(o=>f(o,t))}}if(n==="merge")return{kind:"merge",objects:r.map(o=>f(o,t))};throw k(n)}function ui(e,t){let n={};for(let r of nr(e.fields))n[r.key]=f(r.value,t);return{kind:"object",fields:n}}function pi(e,t){if(e.elements.every(o=>o.kind==="lit"))return{kind:"lit",value:e.elements.map(i=>i.value)};let r=e.elements.map(o=>f(o,t));return r.length===0?{kind:"lit",value:[]}:{kind:"append",array:{kind:"lit",value:[]},items:r}}function fi(e,t){if(e.length<3)throw k("match");let n=f(e[0],t),r=f(e[e.length-1],t);for(let o=e.length-2;o>=1;o-=1){let i=e[o];if(i.kind!=="arr"||i.elements.length!==2)throw k("match");r={kind:"if",cond:{kind:"eq",left:n,right:f(i.elements[0],t)},then:f(i.elements[1],t),else:r}}return r}function mi(e,t,n){if(t.length<2)throw k(e);let r=t[t.length-1];if(r.kind!=="lit"||r.value!=="first"&&r.value!=="last")throw k(e);let o=t.slice(0,-1).map(i=>hi(i,n,e));if(o.length===0)throw k(e);return yi(e,o,r.value)}function hi(e,t,n){if(e.kind!=="arr"||e.elements.length!==3)throw k(n);return{label:f(e.elements[0],t),eligible:f(e.elements[1],t),score:f(e.elements[2],t)}}function yi(e,t,n){let r={kind:"lit",value:null};for(let o=t.length-1;o>=0;o-=1)r={kind:"if",cond:gi(e,t,n,o),then:t[o].label,else:r};return r}function gi(e,t,n,r){let o=t[r],i=[];for(let a=0;a<t.length;a+=1){if(a===r)continue;let s=t[a];i.push({kind:"or",args:[{kind:"not",arg:s.eligible},{kind:Ei(e,n,r,a),left:o.score,right:s.score}]})}return i.length===0?o.eligible:{kind:"and",args:[o.eligible,...i]}}function Ei(e,t,n,r){let o=t==="first"?n<r:n>r;return e==="argmax"?o?"gte":"gt":o?"lte":"lt"}function Ti(e){return["eq","neq","gt","gte","lt","lte","add","sub","mul","div","mod"].includes(e)}function or(e){return["not","neg","abs","floor","ceil","round","sqrt","len","typeof","isNull","toString"].includes(e)}function Ni(e){if(e==="isNotNull")throw k(e);if(!or(e))throw k(e);return e}function ki(e){return e==="min"||e==="max"}function bi(e){return["and","or","concat","coalesce"].includes(e)}function Si(e){return["first","last"].includes(e)}function xi(e){return["keys","values","entries"].includes(e)}function Ai(e){return["filter","find","every","some","map"].includes(e)}function vi(e,t){return e.map(n=>wi(n,t))}function wi(e,t){let n=e.condition?f(e.condition,ot(t,"action")):void 0,r=Ci(e.op,t);return{fragmentId:e.fragmentId,condition:n,op:r,confidence:e.confidence}}function Ci(e,t){switch(e.kind){case"addType":return{kind:"addType",typeName:e.typeName,typeExpr:be(e.typeExpr)};case"addField":return{kind:"addField",typeName:e.typeName,field:{name:e.field.name,type:be(e.field.type),optional:e.field.optional,defaultValue:e.field.defaultValue}};case"setFieldType":return{kind:"setFieldType",path:e.path,typeExpr:be(e.typeExpr)};case"setDefaultValue":return{kind:"setDefaultValue",path:e.path,value:e.value};case"addConstraint":return{kind:"addConstraint",targetPath:e.targetPath,rule:f(e.rule,ot(t,"schema")),message:e.message};case"addComputed":return{kind:"addComputed",name:e.name,expr:f(e.expr,ot(t,"schema")),deps:e.deps};case"addActionAvailable":return{kind:"addActionAvailable",actionName:e.actionName,expr:f(e.expr,ot(t,"schema"))}}}function be(e){switch(e.kind){case"primitive":return{kind:"primitive",name:e.name};case"array":return{kind:"array",element:be(e.element)};case"object":return{kind:"object",fields:e.fields.map(t=>({name:t.name,type:be(t.type),optional:t.optional}))};case"union":return{kind:"union",members:e.members.map(be)};case"literal":return{kind:"literal",value:e.value};case"ref":return{kind:"ref",name:e.name}}}function ot(e,t){return{mode:t,allowSysPaths:e.allowSysPaths,fnTableVersion:e.fnTableVersion,actionName:e.actionName,allowItem:!1}}function M(e,t={}){switch(e.kind){case"literal":return{kind:"lit",value:Di(e.value,e.literalType)};case"identifier":return t.resolveIdentifier?.(e.name)??ue(e.name);case"systemIdent":return Pi(e,t);case"iterationVar":return{kind:"var",name:e.name};case"propertyAccess":return Mi(e.object,e.property,t);case"indexAccess":return{kind:"call",fn:"at",args:[M(e.object,t),M(e.index,t)]};case"functionCall":return{kind:"call",fn:e.name,args:e.args.map(n=>M(n,t))};case"unary":return{kind:"call",fn:e.operator==="!"?"not":"neg",args:[M(e.operand,t)]};case"binary":return{kind:"call",fn:Ri(e.operator),args:[M(e.left,t),M(e.right,t)]};case"ternary":return{kind:"call",fn:"cond",args:[M(e.condition,t),M(e.consequent,t),M(e.alternate,t)]};case"objectLiteral":return Ii(e,t);case"arrayLiteral":return{kind:"arr",elements:e.elements.map(n=>M(n,t))}}}function Ii(e,t){if(!e.properties.some(a=>a.kind==="objectSpread"))return{kind:"obj",fields:e.properties.map(a=>{if(a.kind!=="objectProperty")throw new Error("Unexpected non-property in non-spread object literal");return{key:a.key,value:M(a.value,t)}})};let r=[],o=[],i=()=>{o.length!==0&&(r.push({kind:"obj",fields:o}),o=[])};for(let a of e.properties){if(a.kind==="objectProperty"){o.push({key:a.key,value:M(a.value,t)});continue}i(),r.push(M(a.expr,t))}return i(),{kind:"call",fn:"merge",args:r}}function ue(...e){return{kind:"get",path:ar(...e)}}function Jt(e,...t){return{kind:"get",base:e,path:ar(...t)}}function Wt(...e){return{kind:"sys",path:e}}function ir(e){return{kind:"obj",fields:Object.entries(e).map(([t,n])=>({key:t,value:n}))}}function ar(...e){return e.map(t=>({kind:"prop",name:t}))}function Pi(e,t){return t.resolveSystemIdent?.(e.path)??Wt(...e.path)}function Mi(e,t,n){let r=M(e,n);return r.kind==="get"?{kind:"get",...r.base?{base:r.base}:void 0,path:[...r.path,{kind:"prop",name:t}]}:r.kind==="var"&&r.name==="item"?Jt(r,t):{kind:"field",object:r,property:t}}function Di(e,t){if(t==="null")return null;if(t==="number"){if(typeof e=="number")return e;if(typeof e=="bigint")return Number(e);if(typeof e=="string"&&e.length>0){let n=Number(e);if(!Number.isNaN(n))return n}throw new Error("Invalid number literal")}if(t==="string"){if(typeof e=="string")return e;throw new Error("Invalid string literal")}if(t==="boolean"){if(typeof e=="boolean")return e;throw new Error("Invalid boolean literal")}throw new Error("Unsupported literal type")}function Ri(e){switch(e){case"+":return"add";case"-":return"sub";case"*":return"mul";case"/":return"div";case"%":return"mod";case"==":return"eq";case"!=":return"neq";case"<":return"lt";case"<=":return"lte";case">":return"gt";case">=":return"gte";case"&&":return"and";case"||":return"or";case"??":return"coalesce"}}import{hashSchemaSync as ur,sha256Sync as Bi}from"@manifesto-ai/core";var Li=new Set(["findById","existsById","updateById","removeById"]);function sr(e){return{...e,computed:{fields:Object.fromEntries(Object.entries(e.computed.fields).map(([t,n])=>[t,Fi(n)]))},actions:Object.fromEntries(Object.entries(e.actions).map(([t,n])=>[t,_i(n)]))}}function Fi(e){return{...e,expr:cr(e.expr)}}function _i(e){return{...e,flow:Ge(e.flow),available:e.available?cr(e.available):void 0,dispatchable:e.dispatchable?$i(e.dispatchable):void 0}}function Ge(e){switch(e.kind){case"seq":return{kind:"seq",steps:e.steps.map(t=>Ge(t))};case"if":return{kind:"if",cond:it(e.cond),then:Ge(e.then),else:e.else?Ge(e.else):void 0};case"patch":return{kind:"patch",op:e.op,path:ji(e.path),value:e.value?it(e.value):void 0};case"causalGuard":return{kind:"causalGuard",guardId:e.guardId,body:Ge(e.body)};case"effect":return{kind:"effect",type:e.type,params:Object.fromEntries(Object.entries(e.params).map(([t,n])=>[t,Gi(n)]))};case"fail":return{kind:"fail",code:e.code,message:e.message?it(e.message):void 0};case"call":case"halt":return e}}function ji(e){return e.map(t=>t.kind==="prop"||t.kind==="index"?t:{kind:"expr",expr:it(t.expr)})}function cr(e){return f(j(e),Ut)}function it(e){return f(j(e),Vt)}function $i(e){return f(j(e),zt)}function Gi(e){return f(j(e),qt)}function j(e){switch(e.kind){case"lit":case"var":return e;case"sys":return e;case"get":return{kind:"get",...e.base?{base:j(e.base)}:void 0,path:e.path};case"field":return{kind:"field",object:j(e.object),property:e.property};case"obj":return{kind:"obj",fields:e.fields.map(t=>({key:t.key,value:j(t.value)}))};case"arr":return{kind:"arr",elements:e.elements.map(t=>j(t))};case"call":return Li.has(e.fn)?j(lr(e.fn,e.args)):{kind:"call",fn:e.fn,args:e.args.map(t=>j(t))}}}function lr(e,t){let[n,r,o]=t,i=j(n),a=r?j(r):{kind:"lit",value:null},s={kind:"var",name:"item"},c=Jt(s,"id");switch(e){case"findById":return{kind:"call",fn:"find",args:[i,{kind:"call",fn:"eq",args:[c,a]}]};case"existsById":return{kind:"call",fn:"not",args:[{kind:"call",fn:"isNull",args:[lr("findById",t)]}]};case"updateById":{let l=o?j(o):ir({});return{kind:"call",fn:"map",args:[i,{kind:"call",fn:"cond",args:[{kind:"call",fn:"eq",args:[c,a]},{kind:"call",fn:"merge",args:[s,l]},s]}]}}case"removeById":return{kind:"call",fn:"filter",args:[i,{kind:"call",fn:"not",args:[{kind:"call",fn:"eq",args:[c,a]}]}]};default:return{kind:"call",fn:e,args:t.map(l=>j(l))}}}function Ui(e){return{domainName:e,stateFields:new Set,computedFields:new Set,actionParams:new Map,onceIntentCounters:new Map,currentAction:null,diagnostics:[],typeDefs:new Map,typeDefinitions:new Map,stateFieldSpecs:new Map,stateFieldTypes:new Map}}function Vi(e){let t=Ui(e.domain.name);zi(e.domain,t);let n=qi(e.domain,t),r=Ki(e.domain,t),o=Hi(e.domain,t),i=Zi(e.domain,t),a=oa(e.domain,t);if(t.diagnostics.some(d=>d.severity==="error"))return{schema:null,diagnostics:t.diagnostics};let s={id:`mel:${e.domain.name.toLowerCase()}`,version:"1.0.0",types:n,state:r,...o?{context:o}:{},computed:i,actions:a,meta:{name:e.domain.name}},c=ga(s);return{schema:{...s,hash:c},diagnostics:t.diagnostics}}function pr(e){let t=Vi(e);if(!t.schema)return{schema:null,diagnostics:t.diagnostics};let n=sr(t.schema);return{schema:Ta(n),diagnostics:t.diagnostics}}function zi(e,t){for(let n of e.types)t.typeDefs.set(n.name,n);for(let n of e.members)if(n.kind==="state")for(let r of n.fields)t.stateFields.add(r.name);else n.kind==="computed"?t.computedFields.add(n.name):n.kind}function qi(e,t){let n={};for(let r of e.types){let o=W(r.typeExpr);t.typeDefinitions.set(r.name,o),n[r.name]={name:r.name,definition:o}}return n}function W(e){switch(e.kind){case"simpleType":return["string","number","boolean","null","object","array"].includes(e.name)?{kind:"primitive",type:e.name}:{kind:"ref",name:e.name};case"arrayType":return{kind:"array",element:W(e.elementType)};case"recordType":return{kind:"record",key:W(e.keyType),value:W(e.valueType)};case"objectType":let t={};for(let r of e.fields)t[r.name]={type:W(r.typeExpr),optional:r.optional};return{kind:"object",fields:t};case"unionType":return{kind:"union",types:e.types.map(W)};case"literalType":return{kind:"literal",value:e.value};default:let n=e;throw new Error(`Unknown type expression kind: ${e.kind}`)}}function Ki(e,t){let n={},r={};for(let o of e.members)if(o.kind==="state")for(let i of o.fields){let a=W(i.typeExpr);r[i.name]=a,t.stateFieldTypes.set(i.name,a);let s=ie(i.typeExpr,t);s&&t.stateFieldSpecs.set(i.name,s);let c=Wi(i,t);c&&(n[i.name]=c)}return{fields:n,fieldTypes:r}}function Hi(e,t){let n={},r={},o=!1;for(let i of e.members)if(i.kind==="context"){o=!0;for(let a of i.fields){let s=W(a.typeExpr);r[a.name]=s;let c=Ji(a,t);c&&(n[a.name]=c)}}return o?{fields:n,fieldTypes:r}:void 0}function Ji(e,t){let n=ie(e.typeExpr,t);return n?{...n,required:!0}:null}function Wi(e,t){let n=ie(e.typeExpr,t);if(!n)return null;let r=e.initializer?Ve(e.initializer,t):void 0;return r!==void 0&&Ue(r,W(e.typeExpr),e.name,e.location,t),{...n,required:!0,default:r}}function ie(e,t,n=[]){switch(e.kind){case"simpleType":switch(e.name){case"string":return{type:"string",required:!0};case"number":return{type:"number",required:!0};case"boolean":return{type:"boolean",required:!0};case"null":return{type:"null",required:!0};default:{let r=t.typeDefs.get(e.name);return r?n.includes(e.name)?(Yt(t,"E044",`Recursive type '${e.name}' cannot be lowered to FieldSpec in a schema position`,e.location),null):ie(r.typeExpr,t,[...n,e.name]):{type:"object",required:!0}}}case"unionType":{let r=e.types.filter(s=>!Yi(s,t,n)),o=r.length!==e.types.length,i=[],a=!o;for(let s of r){if(s.kind!=="literalType"){a=!1;break}i.push(s.value)}return a&&i.length>0?{type:{enum:i},required:!0}:o&&r.length===1?ie(r[0],t,n):(Yt(t,"E043",`Union type '${Se(e)}' cannot be soundly lowered to FieldSpec`,e.location),null)}case"arrayType":{let r=ie(e.elementType,t,n);return r?{type:"array",required:!0,items:r}:null}case"recordType":return{type:"object",required:!0};case"literalType":return typeof e.value=="string"?{type:"string",required:!0}:typeof e.value=="number"?{type:"number",required:!0}:typeof e.value=="boolean"?{type:"boolean",required:!0}:{type:"null",required:!0};case"objectType":{let r={};for(let o of e.fields){let i=ie(o.typeExpr,t,n);if(!i)return null;r[o.name]={...i,required:!o.optional}}return{type:"object",required:!0,fields:r}}}}function fr(e,t,n=[]){if(e.kind!=="simpleType")return e;let r=t.typeDefs.get(e.name);return r?n.includes(e.name)?null:fr(r.typeExpr,t,[...n,e.name]):e}function Yi(e,t,n=[]){let r=fr(e,t,n);return r?.kind==="simpleType"&&r.name==="null"||r?.kind==="literalType"&&r.value===null}function Yt(e,t,n,r){e.diagnostics.push({severity:"error",code:t,message:n,location:r})}function Se(e){switch(e.kind){case"simpleType":return e.name;case"unionType":return e.types.map(t=>Se(t)).join(" | ");case"arrayType":return`Array<${Se(e.elementType)}>`;case"recordType":return`Record<${Se(e.keyType)}, ${Se(e.valueType)}>`;case"literalType":return JSON.stringify(e.value);case"objectType":return`{ ${e.fields.map(t=>`${t.name}${t.optional?"?":""}: ${Se(t.typeExpr)}`).join("; ")} }`}}function fe(e,t,n=[]){if(e.kind!=="ref")return e;if(n.includes(e.name))return null;let r=t.typeDefinitions.get(e.name);return r?fe(r,t,[...n,e.name]):null}function Qi(e){return e?.kind==="primitive"&&e.type==="null"||e?.kind==="literal"&&e.value===null}function mr(e,t){let n=fe(e,t);if(!n||n.kind!=="union")return null;let r=n.types.filter(o=>{let i=fe(o,t);return!Qi(i)});return r.length===1?r[0]:null}function Xi(e,t,n){if(t===null||Array.isArray(t)||typeof t!="object")return e;let r=mr(e,n);return r&&fe(r,n)?.kind==="object"?r:e}function ee(e){switch(e.kind){case"primitive":return e.type;case"array":return`Array<${ee(e.element)}>`;case"record":return`Record<${ee(e.key)}, ${ee(e.value)}>`;case"object":return`{ ${Object.entries(e.fields).map(([t,n])=>`${t}${n.optional?"?":""}: ${ee(n.type)}`).join("; ")} }`;case"union":return e.types.map(t=>ee(t)).join(" | ");case"literal":return JSON.stringify(e.value);case"ref":return e.name}}function Be(e,t,n){let r=fe(t,n);if(!r)return!1;switch(r.kind){case"primitive":switch(r.type){case"null":return e===null;case"string":return typeof e=="string";case"number":return typeof e=="number";case"boolean":return typeof e=="boolean";case"object":return e!==null&&!Array.isArray(e)&&typeof e=="object";case"array":return Array.isArray(e);default:return!1}case"literal":return Object.is(e,r.value);case"array":return Array.isArray(e)&&e.every(o=>Be(o,r.element,n));case"record":return e!==null&&!Array.isArray(e)&&typeof e=="object"&&Object.values(e).every(o=>Be(o,r.value,n));case"object":if(e===null||Array.isArray(e)||typeof e!="object")return!1;for(let o of Object.keys(e))if(!(o in r.fields))return!1;for(let[o,i]of Object.entries(r.fields)){if(!(o in e)){if(!i.optional)return!1;continue}if(!Be(e[o],i.type,n))return!1}return!0;case"union":return r.types.some(o=>Be(e,o,n));case"ref":return!1}}function Ue(e,t,n,r,o){if(e===void 0)return;let i=fe(t,o);if(!i){o.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects ${ee(t)}, got ${JSON.stringify(e)}`,location:r});return}if(i.kind==="union"){if(Be(e,i,o))return;o.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects ${ee(i)}, got ${JSON.stringify(e)}`,location:r});return}switch(i.kind){case"primitive":{let a=Array.isArray(e)?"array":e===null?"null":typeof e;switch(i.type){case"null":e!==null&&pe(o,n,"null",a,r);return;case"string":case"number":case"boolean":typeof e!==i.type&&pe(o,n,i.type,a,r);return;case"object":(e===null||Array.isArray(e)||typeof e!="object")&&pe(o,n,"object",a,r);return;case"array":Array.isArray(e)||pe(o,n,"array",a,r);return}return}case"literal":Object.is(e,i.value)||o.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects literal ${JSON.stringify(i.value)}, got ${JSON.stringify(e)}`,location:r});return;case"array":if(!Array.isArray(e)){pe(o,n,"array",e===null?"null":typeof e=="object"?"object":typeof e,r);return}for(let a=0;a<e.length;a+=1)Ue(e[a],i.element,`${n}[${a}]`,r,o);return;case"record":if(e===null||Array.isArray(e)||typeof e!="object"){let a=Array.isArray(e)?"array":e===null?"null":typeof e;pe(o,n,"object",a,r);return}for(let[a,s]of Object.entries(e))Ue(s,i.value,`${n}.${a}`,r,o);return;case"object":if(e===null||Array.isArray(e)||typeof e!="object"){let a=Array.isArray(e)?"array":e===null?"null":typeof e;pe(o,n,"object",a,r);return}for(let a of Object.keys(e))a in i.fields||o.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}.${a}' is not declared in ${ee(i)}`,location:r});for(let[a,s]of Object.entries(i.fields)){if(!(a in e)){s.optional||o.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}.${a}' is required`,location:r});continue}Ue(e[a],s.type,`${n}.${a}`,r,o)}return;case"ref":o.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects ${ee(t)}, got ${JSON.stringify(e)}`,location:r});return}}function pe(e,t,n,r,o){e.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${t}' expects ${n}, got ${r}`,location:o})}function Ve(e,t){switch(e.kind){case"literal":return e.value;case"arrayLiteral":return e.elements.map(n=>Ve(n,t));case"objectLiteral":{let n={};for(let r of e.properties){if(r.kind==="objectProperty"){n[r.key]=Ve(r.value,t);continue}let o=Ve(r.expr,t);o!==null&&!Array.isArray(o)&&typeof o=="object"&&Object.assign(n,o)}return n}default:return}}function Zi(e,t){let n=[],r=0;for(let i of e.members)if(i.kind==="computed"){let a=U(i.expression,t),s=ra(a);n.push({name:i.name,deps:s,expr:a,location:i.location,order:r}),r+=1}let o={};for(let i of ea(n,t))o[i.name]={deps:i.deps,expr:i.expr};return{fields:o}}function ea(e,t){if(e.length<=1)return[...e];let n=new Map(e.map(c=>[c.name,c])),r=new Map,o=new Map,i=new Map;for(let c of e)o.set(c.name,[]),i.set(c.name,0);for(let c of e){let l=Array.from(new Set(c.deps.filter(d=>n.has(d))));r.set(c.name,l),i.set(c.name,l.length);for(let d of l)o.get(d).push(c.name)}let a=e.filter(c=>(i.get(c.name)??0)===0).map(c=>c.name),s=[];for(;a.length>0;){let c=a.shift();s.push(n.get(c));for(let l of o.get(c)??[]){let d=(i.get(l)??0)-1;i.set(l,d),d===0&&ta(a,l,n)}}if(s.length!==e.length){let c=new Set(s.map(m=>m.name)),l=e.filter(m=>!c.has(m.name)),d=na(l[0].name,r),h=d?d.join(" -> "):l.map(m=>m.name).join(", ");return Yt(t,"E040",`Circular computed dependency: ${h}`,(d?n.get(d[0]):l[0]).location),[...e]}return s}function ta(e,t,n){let r=n.get(t)?.order??Number.MAX_SAFE_INTEGER,o=e.length;for(let i=0;i<e.length;i+=1){let a=n.get(e[i])?.order??Number.MAX_SAFE_INTEGER;if(r<a){o=i;break}}e.splice(o,0,t)}function na(e,t){let n=new Set,r=[],o=new Set;function i(a){n.add(a),r.push(a),o.add(a);for(let s of t.get(a)??[])if(n.has(s)){if(o.has(s)){let c=r.indexOf(s);return[...r.slice(c),s]}}else{let c=i(s);if(c)return c}return r.pop(),o.delete(a),null}return i(e)}function ra(e){let t=new Set;function n(r){switch(r.kind){case"lit":case"sys":case"var":return;case"get":r.base===void 0?t.add(r.path.map(o=>o.name).join(".")):n(r.base);return;case"field":n(r.object);return;case"call":for(let o of r.args)n(o);return;case"obj":for(let o of r.fields)n(o.value);return;case"arr":for(let o of r.elements)n(o);return}}return n(e),Array.from(t)}function oa(e,t){let n={};for(let r of e.members)if(r.kind==="action"){t.currentAction=r.name,t.onceIntentCounters.set(r.name,0);let o=new Set;for(let h of r.params)o.add(h.name);t.actionParams.set(r.name,o);let i=r.params.map(h=>h.name),a=hr(r.body,t),s,c;if(r.params.length>0){let h={},m={};for(let E of r.params){let C=ie(E.typeExpr,t);C&&(h[E.name]=structuredClone(C),m[E.name]={type:W(E.typeExpr),optional:!1})}s={type:"object",required:!0,fields:h},c={kind:"object",fields:m}}let l;r.available&&(l=U(r.available,t));let d;r.dispatchable&&(d=U(r.dispatchable,t,{preferActionParams:!0})),n[r.name]={flow:a,input:s,inputType:c,params:i,available:l,dispatchable:d},t.currentAction=null}return n}function hr(e,t){return e.length===0?{kind:"seq",steps:[]}:e.length===1?st(e[0],t):{kind:"seq",steps:e.map(n=>st(n,t))}}function st(e,t){switch(e.kind){case"when":return ia(e,t);case"once":return aa(e,t);case"onceIntent":return sa(e,t);case"patch":return ca(e,t);case"effect":return la(e,t);case"fail":return ua(e,t);case"stop":return pa(e,t);case"include":return{kind:"seq",steps:[]}}}function ia(e,t){let n=U(e.condition,t),r=hr(e.body,t);return{kind:"if",cond:n,then:r}}function aa(e,t){let n=yr(e.marker,t),r=ue("$runtime","intent","id"),o=Qt("neq",[ha(e.marker,t),r]);if(e.condition){let s=U(e.condition,t);o=Qt("and",[o,s])}let i={kind:"patch",op:"set",path:n,value:r},a=e.body.map(s=>st(s,t));return{kind:"if",cond:o,then:{kind:"seq",steps:[i,...a]}}}function sa(e,t){let n=t.currentAction??"unknown",r=t.onceIntentCounters.get(n)??0;t.onceIntentCounters.set(n,r+1);let o=Bi(`${n}:${r}:intent`),i=e.body.map(s=>st(s,t)),a={kind:"causalGuard",guardId:o,body:{kind:"seq",steps:i}};return e.condition?{kind:"if",cond:U(e.condition,t),then:a}:a}function ca(e,t){let n={kind:"patch",op:e.op,path:yr(e.path,t)};if(e.value){let r=U(e.value,t);if(n.value=r,e.op==="set"){let o=e.path.segments[0];if(o.kind==="propertySegment"){let i=t.stateFieldTypes.get(o.name);if(i){let a=i,s=e.path.segments;for(let c=1;c<s.length;c++){let l=s[c],d=a?fe(a,t):null;if(!d){a=null;break}if(d.kind==="union"){let h=mr(a,t);if(!h){a=null;break}a=h,c-=1;continue}if(l.kind==="propertySegment"&&d.kind==="object"&&d.fields[l.name])a=d.fields[l.name].type;else if(l.kind==="propertySegment"&&d.kind==="record")a=d.value;else if(l.kind==="indexSegment"&&d.kind==="array")a=d.element;else{a=null;break}}if(a){let c=da(e.value,t);if(c!==void 0){let l=e.path.segments.map(h=>h.kind==="propertySegment"?h.name:"[*]").join("."),d=Xi(a,c,t);Ue(c,d,l,e.location,t)}}}}}}return n}function la(e,t){let n={};for(let r of e.args)r.isPath?n[r.name]={kind:"lit",value:ma(r.value,t)}:n[r.name]=U(r.value,t);return{kind:"effect",type:e.effectType,params:n}}function da(e,t){return Ve(e,t)}function ua(e,t){let n={kind:"fail",code:e.code};return e.message&&(n.message=U(e.message,t)),n}function pa(e,t){return{kind:"halt",reason:e.reason}}function fa(e){return e.replaceAll("\\","\\\\").replaceAll(".","\\.")}function at(...e){return e.map(fa).join(".")}function ma(e,t){let n=[];for(let o of e.segments)if(o.kind==="propertySegment")n.push(o.name);else{let i=U(o.index,t);i.kind==="lit"?n.push(String(i.value)):n.push("*")}let r=n[0];return t.stateFields.has(r)?at(...n):t.computedFields.has(r)?at(...n):t.currentAction&&t.actionParams.get(t.currentAction)?.has(r)?`input.${at(...n)}`:at(...n)}function yr(e,t){return e.segments.map(n=>{if(n.kind==="propertySegment")return{kind:"prop",name:n.name};let r=U(n.index,t,{preferActionParams:!0});if(r.kind==="lit"){if(typeof r.value=="number"&&Number.isInteger(r.value)&&r.value>=0)return{kind:"index",index:r.value};if(typeof r.value=="string")return{kind:"prop",name:r.value}}return{kind:"expr",expr:r}})}function Qt(e,t){return{kind:"call",fn:e,args:t}}function ha(e,t){let[n,...r]=e.segments;if(!n||n.kind!=="propertySegment")return{kind:"lit",value:null};let o=gr(n.name,t,{});for(let i of r){if(i.kind==="propertySegment"){o=dr(o,i.name);continue}let a=U(i.index,t,{preferActionParams:!0});if(a.kind==="lit"&&(typeof a.value=="number"||typeof a.value=="string")){o=dr(o,String(a.value));continue}o=Qt("at",[o,a])}return o}function dr(e,t){return e.kind==="get"&&!e.base?{kind:"get",path:[...e.path,{kind:"prop",name:t}]}:{kind:"field",object:e,property:t}}function U(e,t,n={}){return M(e,{resolveIdentifier:r=>gr(r,t,n),resolveSystemIdent:r=>ya(r,t)})}function gr(e,t,n={}){return n.preferActionParams&&t.currentAction&&t.actionParams.get(t.currentAction)?.has(e)?ue("input",e):t.stateFields.has(e)||t.computedFields.has(e)?ue(e):t.currentAction&&t.actionParams.get(t.currentAction)?.has(e)?ue("input",e):(t.diagnostics.push({severity:"error",code:"E_UNKNOWN_IDENT",message:`Unknown identifier '${e}'`,location:{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}),ue(e))}function ya(e,t){let[n,...r]=e;switch(n){case"input":case"runtime":case"context":return Wt(n,...r);case"system":case"meta":return t.diagnostics.push({severity:"error",code:"E_INVALID_SYSTEM",message:`$${n}.* is retired in v5 MEL; use $runtime.* or declared $context.* where action-flow context is available`,location:{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}),{kind:"lit",value:null};default:return t.diagnostics.push({severity:"error",code:"E_INVALID_SYSTEM",message:`Invalid dollar identifier namespace '$${n}'`,location:{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}),{kind:"lit",value:null}}}function ga(e){return ur(e)}function Ea(e){return ur(e)}function Ta(e){let{hash:t,...n}=e;return{...n,hash:Ea(n)}}var Na="@meta can attach only to domain, type, type field, state field, computed, or action declarations.",ka="Action-parameter annotations are not part of the current MEL syntax.",Xt="Annotation payloads must be JSON-like literals. MEL expressions are not allowed in @meta payloads.",Er="Annotation payload nesting exceeds the current MEL limit of 2 levels.",ba="Annotation target does not map to the emitted DomainSchema.",Tr=2;function Nr(e,t){let n=[],r=new Map,o=e.domain;xe(o.annotations,`domain:${o.name}`,n,r);for(let a of o.types)xe(a.annotations,`type:${a.name}`,n,r),Ae(a.typeExpr,a.name,0,n,r);for(let a of o.members)switch(a.kind){case"state":for(let s of a.fields)xe(s.annotations,`state_field:${s.name}`,n,r),ae(s.typeExpr,n);break;case"context":for(let s of a.fields)ae(s.typeExpr,n);break;case"computed":xe(a.annotations,`computed:${a.name}`,n,r);break;case"action":xe(a.annotations,`action:${a.name}`,n,r),Sa(a,n);for(let s of a.params)ae(s.typeExpr,n);break;case"flow":break}let i={};for(let a of[...r.keys()].sort()){if(!va(t,a)){n.push(I("E057",ba,wa(e,a)??o.location));continue}let s=r.get(a);s&&s.length>0&&(i[a]=Object.freeze(s.map(c=>Aa(c))))}return{annotations:Object.freeze({schemaHash:t.hash,entries:Object.freeze(i)}),diagnostics:n}}function xe(e,t,n,r){if(!e||e.length===0)return;let o=[];for(let a of e){let s=a.payload===void 0?{ok:!0,value:void 0}:Zt(a.payload,0,n);s.ok&&o.push({tag:a.tag,...s.value===void 0?{}:{payload:s.value}})}if(o.length===0)return;let i=r.get(t);if(i){i.push(...o);return}r.set(t,o)}function Ae(e,t,n,r,o){switch(e.kind){case"objectType":for(let i of e.fields)i.annotations?.length&&(n===0?xe(i.annotations,`type_field:${t}.${i.name}`,r,o):kr(i.annotations,r)),Ae(i.typeExpr,t,n+1,r,o);return;case"arrayType":Ae(e.elementType,t,n,r,o);return;case"recordType":Ae(e.keyType,t,n,r,o),Ae(e.valueType,t,n,r,o);return;case"unionType":for(let i of e.types)Ae(i,t,n,r,o);return;case"simpleType":case"literalType":return}}function ae(e,t){switch(e.kind){case"objectType":for(let n of e.fields)kr(n.annotations,t),ae(n.typeExpr,t);return;case"arrayType":ae(e.elementType,t);return;case"recordType":ae(e.keyType,t),ae(e.valueType,t);return;case"unionType":for(let n of e.types)ae(n,t);return;case"simpleType":case"literalType":return}}function Sa(e,t){for(let n of e.params)xa(n,t)}function xa(e,t){if(e.annotations)for(let n of e.annotations)t.push(I("E054",ka,n.location))}function kr(e,t){if(e)for(let n of e)t.push(I("E053",Na,n.location))}function Zt(e,t,n){switch(e.kind){case"literal":return e.literalType==="string"||e.literalType==="number"||e.literalType==="boolean"||e.literalType==="null"?{ok:!0,value:e.value}:(n.push(I("E055",Xt,e.location)),{ok:!1});case"arrayLiteral":{if(t+1>Tr)return n.push(I("E056",Er,e.location)),{ok:!1};let r=[];for(let o of e.elements){let i=Zt(o,t+1,n);if(!i.ok)return{ok:!1};r.push(i.value)}return{ok:!0,value:r}}case"objectLiteral":{if(t+1>Tr)return n.push(I("E056",Er,e.location)),{ok:!1};let r={};for(let o of e.properties){if(o.kind!=="objectProperty")return n.push(I("E055",Xt,o.location)),{ok:!1};let i=Zt(o.value,t+1,n);if(!i.ok)return{ok:!1};r[o.key]=i.value}return{ok:!0,value:r}}default:return n.push(I("E055",Xt,e.location)),{ok:!1}}}function Aa(e){return e.payload===void 0?Object.freeze({tag:e.tag}):Object.freeze({tag:e.tag,payload:en(e.payload)})}function en(e){if(Array.isArray(e))return Object.freeze(e.map(t=>en(t)));if(e!==null&&typeof e=="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=en(r);return Object.freeze(t)}return e}function va(e,t){let n=t.indexOf(":");if(n<0)return!1;let r=t.slice(0,n),o=t.slice(n+1);switch(r){case"domain":return e.meta?.name===o||e.id===`mel:${o.toLowerCase()}`;case"type":return Object.hasOwn(e.types,o);case"type_field":{let i=o.indexOf(".");if(i<=0||i!==o.lastIndexOf("."))return!1;let a=o.slice(0,i),s=o.slice(i+1),c=e.types[a];return!c||c.definition.kind!=="object"?!1:Object.hasOwn(c.definition.fields,s)}case"state_field":return Object.hasOwn(e.state.fields,o);case"computed":return Object.hasOwn(e.computed.fields,o);case"action":return Object.hasOwn(e.actions,o);default:return!1}}function wa(e,t){let n=t.indexOf(":");if(n<0)return null;let r=t.slice(0,n),o=t.slice(n+1),i=e.domain;if(r==="domain"&&i.name===o)return i.location;if(r==="type")return i.types.find(a=>a.name===o)?.location??null;if(r==="type_field"){let a=o.indexOf(".");if(a<=0)return null;let s=o.slice(0,a),c=o.slice(a+1),l=i.types.find(d=>d.name===s);return!l||l.typeExpr.kind!=="objectType"?l?.location??null:l.typeExpr.fields.find(d=>d.name===c)?.location??l.location}if(r==="state_field"){for(let a of i.members){if(a.kind!=="state")continue;let s=a.fields.find(c=>c.name===o);if(s)return s.location}return null}return r==="computed"?i.members.find(a=>a.kind==="computed"&&a.name===o)?.location??null:r==="action"?i.members.find(a=>a.kind==="action"&&a.name===o)?.location??null:null}var tn=16;function S(e){return structuredClone(e)}function D(e,t,n,r,o){let i=`${n}:${o.start.offset}:${o.end.offset}:${r}`;t.has(i)||(t.add(i),e.push(I(n,r,o)))}function Ca(e){let t=new Map,n=new Set,r=new Map,o=new Set,i=new Map;for(let a of e.types)r.set(a.name,a);for(let a of e.members)switch(a.kind){case"state":for(let s of a.fields)t.set(s.name,s.typeExpr);break;case"context":break;case"computed":n.add(a.name);break;case"action":o.add(a.name);break;case"flow":i.has(a.name)||i.set(a.name,a);break}return{stateTypes:t,computedNames:n,typeDefs:r,actionNames:o,flows:i}}function Oa(e){let t=new Map;for(let n of e.params)t.set(n.name,n.typeExpr);return t}function Ia(e){let t=new Map;for(let n of e.params)t.set(n.name,n.typeExpr);return t}function Pa(e,t,n,r){let o=new Map;for(let i of t.flows.values()){o.set(i.name,[]),t.actionNames.has(i.name)&&D(n,r,"E022",`Flow '${i.name}' conflicts with action '${i.name}'.`,i.location);for(let s of i.params)(t.stateTypes.has(s.name)||t.computedNames.has(s.name)||t.typeDefs.has(s.name))&&D(n,r,"E021",`Flow parameter '${s.name}' conflicts with a top-level identifier.`,s.location);let a=Oa(i);for(let s of i.body)Da(s,i.name,a,t,n,r,o.get(i.name))}for(let i of e.members)if(i.kind==="action"){let a=Ia(i);for(let s of i.body)Ma(s,a,t,n,r)}return o}function Ma(e,t,n,r,o){switch(e.kind){case"include":lt(e,t,n,r,o);break;case"when":for(let i of e.body)Ce(i,t,n,r,o);break;case"once":for(let i of e.body)Ce(i,t,n,r,o);break;case"onceIntent":for(let i of e.body)Ce(i,t,n,r,o);break;case"fail":case"stop":break}}function Ce(e,t,n,r,o){switch(e.kind){case"include":D(r,o,"E016","include is only allowed at action or flow body top-level.",e.location),lt(e,t,n,r,o);break;case"when":for(let i of e.body)Ce(i,t,n,r,o);break;case"once":for(let i of e.body)Ce(i,t,n,r,o);break;case"onceIntent":for(let i of e.body)Ce(i,t,n,r,o);break;case"patch":case"effect":case"fail":case"stop":break}}function Da(e,t,n,r,o,i,a){switch(e.kind){case"include":lt(e,n,r,o,i)&&a.push({target:e.flowName,location:e.location});break;case"when":for(let s of e.body)ct(s,t,n,r,o,i);break;case"once":D(o,i,"E017","once() is not allowed in flow bodies.",e.location);break;case"onceIntent":D(o,i,"E018","onceIntent is not allowed in flow bodies.",e.location);break;case"patch":D(o,i,"E019","patch is not allowed in flow bodies.",e.location);break;case"effect":D(o,i,"E020","effect is not allowed in flow bodies.",e.location);break}}function ct(e,t,n,r,o,i){switch(e.kind){case"include":D(o,i,"E016","include is only allowed at action or flow body top-level.",e.location),lt(e,n,r,o,i);break;case"when":for(let a of e.body)ct(a,t,n,r,o,i);break;case"once":D(o,i,"E017","once() is not allowed in flow bodies.",e.location);for(let a of e.body)ct(a,t,n,r,o,i);break;case"onceIntent":D(o,i,"E018","onceIntent is not allowed in flow bodies.",e.location);for(let a of e.body)ct(a,t,n,r,o,i);break;case"patch":D(o,i,"E019","patch is not allowed in flow bodies.",e.location);break;case"effect":D(o,i,"E020","effect is not allowed in flow bodies.",e.location);break;case"fail":case"stop":break}}function lt(e,t,n,r,o){let i=n.flows.get(e.flowName);if(!i)return D(r,o,"E015",`'${e.flowName}' is not a declared flow.`,e.location),!1;if(e.args.length!==i.params.length)return D(r,o,"E023",`include '${e.flowName}' expected ${i.params.length} argument(s), got ${e.args.length}.`,e.location),!0;for(let a=0;a<e.args.length;a+=1){let s=e.args[a],c=i.params[a],l=ve(s,t,n);if(!l)continue;we(l,c.typeExpr,n)===!1&&D(r,o,"E024",`include '${e.flowName}' argument ${a+1} is not assignable to parameter '${c.name}'.`,s.location)}return!0}function Ra(e,t,n,r){function o(i,a,s){s.add(i);for(let c of e.get(i)??[]){if(a+1>tn){D(n,r,"E014",`Include expansion depth exceeds limit (${tn}).`,c.location);continue}if(s.has(c.target)){D(n,r,"E013","Circular include detected.",c.location);continue}o(c.target,a+1,new Set(s))}}for(let i of t.flows.keys())o(i,1,new Set)}function R(e,t){switch(e.kind){case"identifier":return t.has(e.name)?S(t.get(e.name)):S(e);case"systemIdent":case"literal":case"iterationVar":return S(e);case"functionCall":return{...S(e),args:e.args.map(n=>R(n,t))};case"binary":return{...S(e),left:R(e.left,t),right:R(e.right,t)};case"unary":return{...S(e),operand:R(e.operand,t)};case"ternary":return{...S(e),condition:R(e.condition,t),consequent:R(e.consequent,t),alternate:R(e.alternate,t)};case"propertyAccess":return{...S(e),object:R(e.object,t)};case"indexAccess":return{...S(e),object:R(e.object,t),index:R(e.index,t)};case"objectLiteral":return{...S(e),properties:e.properties.map(n=>({...S(n),...n.kind==="objectProperty"?{value:R(n.value,t)}:{expr:R(n.expr,t)}}))};case"arrayLiteral":return{...S(e),elements:e.elements.map(n=>R(n,t))}}}function La(e,t){switch(e.kind){case"when":return[br(e,t)];case"fail":return[{...S(e),message:e.message?R(e.message,t):void 0}];case"stop":return[S(e)];case"patch":case"effect":case"once":case"onceIntent":case"include":return[]}}function br(e,t){return{...S(e),condition:R(e.condition,t),body:e.body.flatMap(n=>La(n,t))}}function Fa(e,t,n){let r=new Map;for(let o=0;o<e.params.length;o+=1)r.set(e.params[o].name,R(t.args[o],n));return r}function _a(e,t,n,r,o){switch(e.kind){case"when":return[br(e,n)];case"include":return Sr(e,t,n,r,o);case"once":case"onceIntent":case"patch":case"effect":return[]}}function Sr(e,t,n,r,o){let i=t.flows.get(e.flowName);if(!i||e.args.length!==i.params.length||r>tn||o.includes(e.flowName))return[];let a=Fa(i,e,n),s=[...o,e.flowName];return i.body.flatMap(c=>_a(c,t,a,r+1,s))}function Oe(e){switch(e.kind){case"when":return[{...S(e),body:e.body.flatMap(t=>Oe(t))}];case"once":return[{...S(e),body:e.body.flatMap(t=>Oe(t))}];case"onceIntent":return[{...S(e),body:e.body.flatMap(t=>Oe(t))}];case"include":return[];case"patch":case"effect":case"fail":case"stop":return[S(e)]}}function ja(e,t,n){switch(e.kind){case"include":return Sr(e,t,new Map,n,[]);case"when":return[{...S(e),body:e.body.flatMap(r=>Oe(r))}];case"once":return[{...S(e),body:e.body.flatMap(r=>Oe(r))}];case"onceIntent":return[{...S(e),body:e.body.flatMap(r=>Oe(r))}];case"fail":case"stop":return[S(e)]}}function $a(e,t){let n=[];for(let r of e.domain.members)switch(r.kind){case"state":case"context":case"computed":n.push(S(r));break;case"action":n.push({...S(r),body:r.body.flatMap(o=>ja(o,t,1))});break;case"flow":break}return{...S(e),domain:{...S(e.domain),types:e.domain.types.map(r=>S(r)),members:n}}}function ve(e,t,n){switch(e.kind){case"literal":return{kind:"literalType",value:e.value,location:e.location};case"identifier":return t.get(e.name)??n.stateTypes.get(e.name)??null;case"propertyAccess":{let r=ve(e.object,t,n);return xr(r,e.property,n)}case"indexAccess":{let r=ve(e.object,t,n);return Ar(r,n)}case"objectLiteral":return We(e,t,n,ve,me);case"arrayLiteral":{if(e.elements.length===0)return null;let r=ve(e.elements[0],t,n);return r?{kind:"arrayType",elementType:r,location:e.location}:null}case"functionCall":return e.name==="merge"?Ye(e,t,n,ve,me):null;case"systemIdent":case"binary":case"unary":case"ternary":case"iterationVar":return null}}function me(e,t,n=new Set){return e?e.kind==="simpleType"&&t.typeDefs.has(e.name)?n.has(e.name)?null:(n.add(e.name),me(t.typeDefs.get(e.name).typeExpr,t,n)):e:null}function xr(e,t,n){let r=me(e,n);if(!r)return null;if(r.kind==="objectType"){let o=r.fields.find(i=>i.name===t);return o?o.optional?nn([o.typeExpr,{kind:"simpleType",name:"null",location:o.location}],o.location):o.typeExpr:null}if(r.kind==="unionType"){let o=r.types.filter(i=>!vr(i)).map(i=>xr(i,t,n)).filter(i=>i!==null);return nn(o,r.location)}return null}function Ar(e,t){let n=me(e,t);if(!n)return null;if(n.kind==="arrayType")return n.elementType;if(n.kind==="recordType")return n.valueType;if(n.kind==="unionType"){let r=n.types.filter(o=>!vr(o)).map(o=>Ar(o,t)).filter(o=>o!==null);return nn(r,n.location)}return null}function we(e,t,n){let r=me(e,n),o=me(t,n);if(!r||!o)return null;if(o.kind==="unionType"){let i=o.types.map(a=>we(r,a,n));return i.includes(!0)?!0:i.every(a=>a===!1)?!1:null}if(r.kind==="unionType"){let i=r.types.map(a=>we(a,o,n));return i.every(a=>a===!0)?!0:i.some(a=>a===!1)?!1:null}if(o.kind==="simpleType"){if(r.kind==="simpleType")return r.name===o.name;if(r.kind==="literalType")return o.name==="null"?r.value===null:typeof r.value===o.name}if(o.kind==="literalType")return r.kind!=="literalType"?!1:r.value===o.value;if(o.kind==="arrayType")return r.kind!=="arrayType"?!1:we(r.elementType,o.elementType,n);if(o.kind==="objectType"){if(r.kind!=="objectType")return!1;for(let i of o.fields){let a=r.fields.find(c=>c.name===i.name);if(!a){if(i.optional)continue;return!1}if(a.optional&&!i.optional)return!1;let s=we(a.typeExpr,i.typeExpr,n);if(s!==!0)return s}return!0}return o.kind==="recordType"?r.kind!=="recordType"?null:we(r.valueType,o.valueType,n):null}function vr(e){return e.kind==="simpleType"&&e.name==="null"||e.kind==="literalType"&&e.value===null}function nn(e,t){let n=e.filter(i=>i!==null).flatMap(i=>i.kind==="unionType"?i.types:[i]);if(n.length===0)return null;if(n.length===1)return n[0];let r=[],o=new Set;for(let i of n){let a=JSON.stringify(i);o.has(a)||(o.add(a),r.push(i))}return r.length===1?r[0]:{kind:"unionType",types:r,location:t}}function wr(e){let t=Ca(e.domain),n=[],r=new Set,o=Pa(e.domain,t,n,r);return Ra(o,t,n,r),{program:$a(e,t),diagnostics:n}}var Ga=new Set(["$item","$index","$array"]);function Ir(e){let t=Object.keys(e.state.fields).filter(d=>!d.startsWith("$")),n=Ba(e),r=new Set(n),o=new Set(t),i=Object.keys(e.actions),a=[...t.map(d=>({id:rn(d),kind:"state",name:d})),...n.map(d=>({id:on(d),kind:"computed",name:d})),...i.map(d=>({id:Or(d),kind:"action",name:d}))],s=new Set,c=[],l=(d,h,m)=>{if(!d||!h)return;let E=`${d}|${m}|${h}`;s.has(E)||(s.add(E),c.push({from:d,to:h,relation:m}))};for(let d of n){let h=e.computed.fields[d];if(h)for(let m of h.deps)l(Cr(m,e,r,o),on(d),"feeds")}for(let d of i){let h=e.actions[d],m=Or(d);for(let E of Ua(h.flow,e))o.has(E)&&l(m,rn(E),"mutates");if(h.available)for(let E of Lr(h.available))l(Cr(E,e,r,o),m,"unlocks")}return qa({nodes:a,edges:c})}function Ba(e){let t=e.computed.fields,n=new Map,r=(o,i)=>{let a=n.get(o);if(a!==void 0)return a;if(i.has(o))return!1;i.add(o);let s=t[o];if(!s)return i.delete(o),n.set(o,!0),!0;for(let c of Lr(s.expr)){if(Rr(c))return i.delete(o),n.set(o,!1),!1;let l=Pr(c,t);if(l!==null&&!r(l,i))return i.delete(o),n.set(o,!1),!1}return i.delete(o),n.set(o,!0),!0};return Object.keys(t).filter(o=>r(o,new Set))}function Ua(e,t){let n=new Set,r=(o,i)=>{if(o)switch(o.kind){case"seq":o.steps.forEach(a=>r(a,i));return;case"if":r(o.then,i),r(o.else,i);return;case"patch":{let a=Va(o.path);a&&n.add(a);return}case"causalGuard":r(o.body,i);return;case"effect":{let a=za(o.params.into);a&&n.add(a);return}case"call":{if(i.has(o.flow))return;let a=t.actions[o.flow];if(!a)return;let s=new Set(i);s.add(o.flow),r(a.flow,s);return}case"halt":case"fail":return}};return r(e,new Set),[...n]}function Va(e){let[t]=e;return!t||t.kind!=="prop"||t.name.startsWith("$")?null:t.name}function za(e){return typeof e!="object"||e===null||e.kind!=="lit"||typeof e.value!="string"?null:Mr(e.value)}function Cr(e,t,n,r){let o=Pr(e,t.computed.fields);if(o!==null&&n.has(o))return on(o);if(Rr(e))return null;let i=Mr(e);return!i||!r.has(i)?null:rn(i)}function Pr(e,t){if(Object.prototype.hasOwnProperty.call(t,e))return e;if(!e.startsWith("computed."))return null;let n=e.slice(9);return Object.prototype.hasOwnProperty.call(t,n)?n:null}function Mr(e){let t=Dr(e),n=t.startsWith("data.")?t.slice(5):t,r=/^([^.[\]]+)/.exec(n);if(!r)return null;let[o]=r.slice(1);return!o||o.startsWith("$")?null:o}function Dr(e){return e.startsWith("/")?e.slice(1).replace(/\//g,"."):e}function Rr(e){let t=Dr(e),n=t.startsWith("data.")?t.slice(5):t,o=/^([^.[\]]+)/.exec(n)?.[1]??"";return o.startsWith("$")?!Ga.has(o):!1}function Lr(e){let t=[],n=new WeakSet,r=o=>{if(o==null)return;if(Array.isArray(o)){o.forEach(r);return}if(typeof o!="object")return;let i=o;if(!n.has(i)&&(n.add(i),i.kind!=="lit")){if(i.kind==="get"&&typeof i.path=="string"){t.push(i.path);return}for(let a of Object.values(i))r(a)}};return r(e),t}function rn(e){return`state:${e}`}function on(e){return`computed:${e}`}function Or(e){return`action:${e}`}function qa(e){return Object.freeze({nodes:Object.freeze(e.nodes.map(t=>Object.freeze(t))),edges:Object.freeze([...e.edges].sort(Ka).map(t=>Object.freeze(t)))})}function Ka(e,t){return e.from.localeCompare(t.from)||e.to.localeCompare(t.to)||e.relation.localeCompare(t.relation)}var Ha="Source-map target does not map to the emitted DomainSchema.",Ja="Source-map entry missing for emitted DomainSchema target.",Wa=new TextEncoder;function $r(e){return Object.freeze({coordinateUnit:"utf16",compilerVersion:e,emissionOptionsFingerprint:"default"})}function Gr(e,t,n,r){let o=[],i=new Map,a=e.domain,s=Xa(t,r.coordinateUnit);i.set(`domain:${a.name}`,Me({target:{kind:"domain",domain:{name:a.name}},span:s(a.location)}));for(let l of a.types)i.set(`type:${l.name}`,Me({target:{kind:"type",type:{name:l.name}},span:s(l.location)})),Ie(l.typeExpr,l.name,0,i,s);for(let l of a.members)switch(l.kind){case"state":for(let d of l.fields)i.set(`state_field:${d.name}`,Me({target:{kind:"state_field",field:{name:d.name}},span:s(d.location)}));break;case"context":break;case"computed":i.set(`computed:${l.name}`,Me({target:{kind:"computed",computed:{name:l.name}},span:s(l.location)}));break;case"action":i.set(`action:${l.name}`,Me({target:{kind:"action",action:{name:l.name}},span:s(l.location)}));break;case"flow":break}let c={};for(let l of[...i.keys()].sort()){if(!Qa(n,l)){o.push(I("E058",Ha,Fr(e,l)??a.location));continue}let d=i.get(l);d&&(c[l]=d)}for(let l of Ya(e,n))Object.hasOwn(c,l)||o.push(I("E058",Ja,Fr(e,l)??a.location));return{sourceMap:Object.freeze({schemaHash:n.hash,sourceHash:De(t),format:"manifesto/source-map-v1",coordinateUnit:r.coordinateUnit,emissionFingerprint:De(`${r.coordinateUnit}\0${r.compilerVersion}\0${r.emissionOptionsFingerprint}`),entries:Object.freeze(c)}),diagnostics:o}}function Ie(e,t,n,r,o){switch(e.kind){case"objectType":for(let i of e.fields)n===0&&r.set(`type_field:${t}.${i.name}`,Me({target:{kind:"type_field",type:{name:t},field:{name:i.name}},span:o(i.location)})),Ie(i.typeExpr,t,n+1,r,o);return;case"arrayType":Ie(e.elementType,t,n+1,r,o);return;case"recordType":Ie(e.keyType,t,n+1,r,o),Ie(e.valueType,t,n+1,r,o);return;case"unionType":for(let i of e.types)Ie(i,t,n+1,r,o);return;case"simpleType":case"literalType":return}}function Ya(e,t){let n=new Set;n.add(`domain:${e.domain.name}`);for(let[r,o]of Object.entries(t.types))if(n.add(`type:${r}`),o.definition.kind==="object")for(let i of Object.keys(o.definition.fields))n.add(`type_field:${r}.${i}`);for(let r of Object.keys(t.state.fields))n.add(`state_field:${r}`);for(let r of Object.keys(t.computed.fields))n.add(`computed:${r}`);for(let r of Object.keys(t.actions))n.add(`action:${r}`);return[...n].sort()}function Qa(e,t){let n=t.indexOf(":");if(n<0)return!1;let r=t.slice(0,n),o=t.slice(n+1);switch(r){case"domain":return e.meta?.name===o||e.id===`mel:${o.toLowerCase()}`;case"type":return Object.hasOwn(e.types,o);case"type_field":{let i=o.indexOf(".");if(i<=0||i!==o.lastIndexOf("."))return!1;let a=o.slice(0,i),s=o.slice(i+1),c=e.types[a];return!c||c.definition.kind!=="object"?!1:Object.hasOwn(c.definition.fields,s)}case"state_field":return Object.hasOwn(e.state.fields,o);case"computed":return Object.hasOwn(e.computed.fields,o);case"action":return Object.hasOwn(e.actions,o);default:return!1}}function Fr(e,t){let n=t.indexOf(":");if(n<0)return null;let r=t.slice(0,n),o=t.slice(n+1);switch(r){case"domain":return e.domain.name===o?e.domain.location:null;case"type":return e.domain.types.find(i=>i.name===o)?.location??null;case"type_field":{let i=o.indexOf(".");if(i<=0||i!==o.lastIndexOf("."))return null;let a=o.slice(0,i),s=o.slice(i+1),c=e.domain.types.find(l=>l.name===a);return c?Pe(c.typeExpr,s,0):null}case"state_field":for(let i of e.domain.members){if(i.kind!=="state")continue;let a=i.fields.find(s=>s.name===o);if(a)return a.location}return null;case"computed":return e.domain.members.find(i=>i.kind==="computed"&&i.name===o)?.location??null;case"action":return e.domain.members.find(i=>i.kind==="action"&&i.name===o)?.location??null;default:return null}}function Pe(e,t,n){switch(e.kind){case"objectType":for(let r of e.fields){if(n===0&&r.name===t)return r.location;let o=Pe(r.typeExpr,t,n+1);if(o)return o}return null;case"arrayType":return Pe(e.elementType,t,n+1);case"recordType":return Pe(e.keyType,t,n+1)??Pe(e.valueType,t,n+1);case"unionType":for(let r of e.types){let o=Pe(r,t,n+1);if(o)return o}return null;case"simpleType":case"literalType":return null}}function Xa(e,t){return t==="utf16"?n=>Za(n):n=>es(n,e)}function Za(e){return Object.freeze({start:Object.freeze({line:e.start.line,column:e.start.column}),end:Object.freeze({line:e.end.line,column:e.end.column})})}function es(e,t){return Object.freeze({start:_r(e.start,t),end:_r(e.end,t)})}function _r(e,t){let n=jr(t.slice(0,e.offset)),r=e.offset-(e.column-1),o=jr(t.slice(0,r));return Object.freeze({line:e.line,column:n-o+1})}function Me(e){return Object.freeze({target:ts(e.target),span:Object.freeze({start:Object.freeze({...e.span.start}),end:Object.freeze({...e.span.end})})})}function ts(e){switch(e.kind){case"domain":return Object.freeze({kind:e.kind,domain:Object.freeze({...e.domain})});case"type":return Object.freeze({kind:e.kind,type:Object.freeze({...e.type})});case"type_field":return Object.freeze({kind:e.kind,type:Object.freeze({...e.type}),field:Object.freeze({...e.field})});case"state_field":return Object.freeze({kind:e.kind,field:Object.freeze({...e.field})});case"computed":return Object.freeze({kind:e.kind,computed:Object.freeze({...e.computed})});case"action":return Object.freeze({kind:e.kind,action:Object.freeze({...e.action})})}}function De(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return`fnv1a32:${t.toString(16).padStart(8,"0")}`}function jr(e){return Wa.encode(e).length}var rs="3.5.0";function os(e,t){let n=Br(e,t);return{schema:n.schema,trace:n.trace,warnings:n.warnings,errors:n.errors}}function dt(e,t){let n=Br(e,t);return n.errors.length>0||!n.schema||!n.annotations||!n.sourceMap?{module:null,trace:n.trace,warnings:n.warnings,errors:n.errors}:{module:is(n.schema,n.annotations,n.sourceMap),trace:n.trace,warnings:n.warnings,errors:n.errors}}function Br(e,t){let n=[],r=[],o=[],i=performance.now(),a;try{let u=L(e);a=u.tokens;let y=u.diagnostics.filter(B=>B.severity==="error");if(y.length>0)return o.push(...y),n.push({phase:"lex",durationMs:performance.now()-i,details:{tokenCount:a.length}}),{program:null,schema:null,annotations:null,sourceMap:null,trace:n,warnings:r,errors:o};let g=u.diagnostics.filter(B=>B.severity==="warning");r.push(...g)}catch(u){let y=u;return o.push({severity:"error",code:"E_LEX",message:y.message,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"lex",durationMs:performance.now()-i}),{program:null,schema:null,annotations:null,sourceMap:null,trace:n,warnings:r,errors:o}}n.push({phase:"lex",durationMs:performance.now()-i,details:{tokenCount:a.length}});let s=performance.now(),c;try{let u=ge(a),y=u.diagnostics.filter(g=>g.severity==="error");if(y.length>0)return o.push(...y),n.push({phase:"parse",durationMs:performance.now()-s}),{program:null,schema:null,annotations:null,sourceMap:null,trace:n,warnings:r,errors:Re(o)};c=u.program}catch(u){let y=u;return o.push({severity:"error",code:"E_PARSE",message:y.message,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"parse",durationMs:performance.now()-s}),{program:null,schema:null,annotations:null,sourceMap:null,trace:n,warnings:r,errors:o}}n.push({phase:"parse",durationMs:performance.now()-s});let l=performance.now(),d=wr(c),h=d.diagnostics.filter(u=>u.severity==="error"),m=d.diagnostics.filter(u=>u.severity==="warning"),E=On(d.program),C=tr(d.program),_=[...h,...E.diagnostics.filter(u=>u.severity==="error"),...C.diagnostics.filter(u=>u.severity==="error")],he=[...m,...E.diagnostics.filter(u=>u.severity==="warning"),...C.diagnostics.filter(u=>u.severity==="warning")];if(r.push(...he),n.push({phase:"analyze",durationMs:performance.now()-l}),_.length>0)return o.push(..._),{program:d.program,schema:null,annotations:null,sourceMap:null,trace:n,warnings:r,errors:Re(o)};let St=performance.now(),ce=pr(d.program);n.push({phase:"generate",durationMs:performance.now()-St});for(let u of ce.diagnostics)u.severity==="warning"?r.push(u):o.push(u);if(ce.schema){let u=Nr(d.program,ce.schema),y=u.diagnostics.filter(le=>le.severity==="warning"),g=u.diagnostics.filter(le=>le.severity==="error");if(r.push(...y),o.push(...g),g.length>0)return{program:d.program,schema:null,annotations:null,sourceMap:null,trace:n,warnings:r,errors:Re(o)};let B=$r(rs),_e=Gr(d.program,e,ce.schema,B),ye=_e.diagnostics.filter(le=>le.severity==="warning"),kn=_e.diagnostics.filter(le=>le.severity==="error");return r.push(...ye),o.push(...kn),kn.length>0?{program:d.program,schema:null,annotations:null,sourceMap:null,trace:n,warnings:r,errors:Re(o)}:{program:d.program,schema:ce.schema,annotations:u.annotations,sourceMap:_e.sourceMap,trace:n,warnings:r,errors:Re(o)}}return{program:d.program,schema:null,annotations:null,sourceMap:null,trace:n,warnings:r,errors:Re(o)}}function is(e,t,n){return Object.freeze({schema:e,graph:sn(Ir(e)),annotations:t,sourceMap:n})}function sn(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e)){for(let t of e)sn(t);return Object.freeze(e)}for(let t of Object.values(e))sn(t);return Object.freeze(e)}var an=10;function Re(e){if(e.length<=an)return e;let t=e.slice(0,an);return t.push({severity:"error",code:"E_TOO_MANY",message:`... and ${e.length-an} more error(s). Fix the errors above first.`,location:{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}),t}var Ur=1e4,zr={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function p(e,t,n=zr){return I(e,t,n)}function cn(e){return[...e.warnings,...e.errors]}function qr(e){let t=L(e),n=t.diagnostics.filter(i=>i.severity==="error");if(n.length>0)return{program:null,diagnostics:n};let r=ge(t.tokens),o=r.diagnostics.filter(i=>i.severity==="error");return{program:r.program,diagnostics:o}}function Le(e){return typeof e!="string"?[p("E_FRAGMENT_SCOPE_VIOLATION","expression fragment must be source text.")]:mt(ft(`domain __Fragment { computed __fragment = ${e} }`),"expression")}function ut(e){return typeof e!="string"?[p("E_FRAGMENT_SCOPE_VIOLATION","type fragment must be source text.")]:mt(ft(`domain __Fragment { type __FragmentType = ${e} }`),"type")}function Kr(e,t){return typeof e!="string"?[p("E_FRAGMENT_SCOPE_VIOLATION","state field type fragment must be source text.")]:mt(ft(`domain __Fragment { state { __field: ${e} = ${t} } }`),"state field")}function ln(e){if(typeof e!="string")return[p("E_FRAGMENT_SCOPE_VIOLATION","action body fragment must be source text.")];let n=L(e).tokens.find(r=>["DOMAIN","STATE","COMPUTED","ACTION","TYPE","IMPORT","EXPORT"].includes(r.kind));return n?[p("E_FRAGMENT_SCOPE_VIOLATION","Action body fragments cannot contain top-level declarations.",n.location)]:mt(ft(`domain __Fragment { action __fragment() { ${e} } }`),"action body")}function te(e,t){if(typeof e!="string")return[p("E_FRAGMENT_SCOPE_VIOLATION",`${t} must be source text.`)];let n=L(e),r=n.diagnostics.filter(i=>i.severity==="error"),o=n.tokens.filter(i=>i.kind!=="EOF");return r.length>0||o.length!==1||o[0]?.kind!=="IDENTIFIER"||o[0].lexeme!==e?[p("E_FRAGMENT_SCOPE_VIOLATION",`${t} must be one MEL identifier and cannot contain raw source syntax.`,o[0]?.location??zr)]:[]}function Hr(e){let t=Wr(e,"action params must be inspectable JSON data.");if(!t.ok)return{ok:!1,diagnostics:[t.diagnostic]};if(t.value===null)return{ok:!1,diagnostics:[p("E_FRAGMENT_SCOPE_VIOLATION","action params must be an array.")]};let n=as(t.value,"action params");if(!n.ok)return{ok:!1,diagnostics:[n.diagnostic]};let r=ss(t.value,n.value,"action params");if(r)return{ok:!1,diagnostics:[r]};let o=[],i=[];for(let a=0;a<n.value;a+=1){let s=ls(t.value,a,"action params");if(!s.ok){o.push(s.diagnostic);continue}let c=s.value;if(c===null||typeof c!="object"){o.push(p("E_FRAGMENT_SCOPE_VIOLATION",`action parameter ${a} must be an object.`));continue}let l=Vr(c,"name",`action parameter ${a}.name`),d=Vr(c,"type",`action parameter ${a}.type`),h=null,m=null,E=!0;if(!l.ok)o.push(l.diagnostic),E=!1;else{let C=te(l.value,"action parameter name");o.push(...C),E=E&&C.length===0,typeof l.value=="string"&&(h=l.value)}if(!d.ok)o.push(d.diagnostic),E=!1;else{let C=ut(d.value);o.push(...C),E=E&&C.length===0,typeof d.value=="string"&&(m=d.value)}E&&h!==null&&m!==null&&i.push({name:h,type:m})}return o.length===0?{ok:!0,value:i,diagnostics:o}:{ok:!1,diagnostics:o}}function Jr(e){if(e===null||typeof e!="object")return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION","compileFragmentInContext() requires one object edit operation.")};let t=Wr(e,"Source edit operation must be inspectable.");if(!t.ok)return{ok:!1,diagnostic:t.diagnostic};if(t.value!==null)return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION","compileFragmentInContext() accepts exactly one edit operation.")};let n;try{n=e.kind}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION","Source edit operation kind must be inspectable.")}}return typeof n!="string"?{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION","Source edit operation kind must be source text.")}:{ok:!0,value:n}}function Wr(e,t){try{return{ok:!0,value:Array.isArray(e)?e:null}}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",t)}}}function as(e,t){try{return{ok:!0,value:e.length}}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${t} must be inspectable JSON data.`)}}}function ss(e,t,n){if(t>Ur)return p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must contain at most ${Ur} items.`);let r;try{r=Object.getOwnPropertyDescriptors(e)}catch{return p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}let o=0;for(let i of Reflect.ownKeys(r)){if(typeof i=="symbol"||i!=="length"&&!cs(i,t))return p("E_FRAGMENT_SCOPE_VIOLATION",`${n} keys must be JSON array indexes.`);if(i==="length")continue;let a;try{a=Object.getOwnPropertyDescriptor(e,i)}catch{return p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}if(!a||!("value"in a))return p("E_FRAGMENT_SCOPE_VIOLATION",`${n}[${i}] must be a JSON data property.`);if(!a.enumerable)return p("E_FRAGMENT_SCOPE_VIOLATION",`${n}[${i}] must be enumerable JSON data.`);o+=1}return o!==t?p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be dense JSON array data.`):null}function cs(e,t){let n=Number(e);return Number.isInteger(n)&&n>=0&&n<t&&String(n)===e}function ls(e,t,n){try{if(!Object.hasOwn(e,t))return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n}[${t}] must be present JSON data.`)}}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}}return ds(e,String(t),`${n}[${t}]`)}function Vr(e,t,n){let r;try{r=Object.getOwnPropertyDescriptor(e,t)}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}}if(!r)return{ok:!0,value:void 0};if(!("value"in r))return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be a JSON data property.`)};try{return{ok:!0,value:e[t]}}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}}}function ds(e,t,n){let r;try{r=Object.getOwnPropertyDescriptor(e,t)}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}}if(!r)return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be present JSON data.`)};if(!("value"in r))return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be a JSON data property.`)};try{return{ok:!0,value:e[t]}}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}}}function ne(e,t,n){if(typeof t!="string")return p("E_FRAGMENT_SCOPE_VIOLATION","Target must be a source-map target key.");if(!Object.hasOwn(e.sourceMap.entries,t))return Y(t);let r=pt(t);return!r||!n.includes(r)?p("E_TARGET_KIND_MISMATCH",`Target ${t} is not valid for this operation.`):null}function Y(e){return p("E_TARGET_NOT_FOUND",`Target ${e} does not exist.`)}function pt(e){let t=e.indexOf(":");return t>0?e.slice(0,t):null}function ft(e){let t=L(e),n=t.diagnostics.filter(o=>o.severity==="error");return n.length>0?n:ge(t.tokens).diagnostics.filter(o=>o.severity==="error")}function mt(e,t){return e.map(n=>p("E_FRAGMENT_PARSE_FAILED",`Invalid ${t} fragment: ${n.message}`,n.location))}function Fe(e,t){let n=e.domain.members.find(r=>r.kind==="action"&&r.name===t);return n?.kind==="action"?n:null}function ht(e,t){let n=e.domain.members.find(r=>r.kind==="computed"&&r.name===t);return n?.kind==="computed"?n:null}function yt(e,t){for(let n of e.domain.members)if(n.kind==="state"){let r=n.fields.find(o=>o.name===t);if(r)return r}return null}function qe(e,t){return e.domain.types.find(n=>n.name===t)??null}function gt(e,t,n){let r=qe(e,t);return!r||r.typeExpr.kind!=="objectType"?null:r.typeExpr.fields.find(o=>o.name===n)??null}function Et(e){let t=e.slice(11),n=t.indexOf(".");return n<=0||n!==t.lastIndexOf(".")?null:{typeName:t.slice(0,n),fieldName:t.slice(n+1)}}function un(e,t){let n=L(e).tokens.filter(o=>o.location.start.offset>=t.location.start.offset&&o.location.end.offset<=t.location.end.offset&&o.kind!=="EOF"),r=[];for(let o of n)if(o.kind==="LBRACE")r.push(o);else if(o.kind==="RBRACE"){let i=r.pop();if(i&&o.location.end.offset===t.location.end.offset)return{open:i,close:o}}return null}function pn(e,t,n){return L(e).tokens.find(r=>r.kind===n&&r.location.start.offset>=t.location.start.offset&&r.location.end.offset<=t.location.end.offset)??null}function fn(e,t,n){let r=oo(e,t),o=e.slice(r,t);if(/^[ \t]*$/.test(o)&&r>0)return G(e,r,r,`${n}
|
|
9
|
+
`);let i=o.match(/^[ \t]*/)?.[0]??"";return G(e,t,t,`
|
|
10
|
+
${n}
|
|
11
|
+
${i}`)}function G(e,t,n,r){return Object.freeze({range:us(e,t,n),replacement:r})}function Zr(e,t){let n=[...t].sort((o,i)=>F(o.range.start)-F(i.range.start)),r=e;for(let o of n.reverse())r=`${r.slice(0,F(o.range.start))}${o.replacement}${r.slice(F(o.range.end))}`;return r}function F(e){if(e.offset===void 0)throw new Error("MelTextEdit range is missing offset.");return e.offset}function Tt(e,t){let n=oo(e,t);return e.slice(n,t).match(/^[ \t]*/)?.[0]??""}function Nt(e,t){return e.split(/\r?\n/).map(n=>n.length>0?`${t}${n}`:n).join(`
|
|
12
|
+
`)}function eo(e){let t=e.params.map(r=>`${r.name}: ${r.type}`).join(", "),n=Nt(e.body.trim()," ");return n.length===0?`action ${e.name}(${t}) {
|
|
13
|
+
}`:`action ${e.name}(${t}) {
|
|
14
|
+
${n}
|
|
15
|
+
}`}function to(e,t,n){let r=e.trim();return r.length===0?"":`
|
|
16
|
+
${Nt(r,t)}
|
|
17
|
+
${n}`}function ze(e){if(e===null)return"null";if(typeof e=="string")return JSON.stringify(e);if(typeof e=="number"||typeof e=="boolean")return String(e);if(Array.isArray(e))return`[${e.map(n=>ze(n)).join(", ")}]`;let t=e;return`{ ${Object.keys(t).sort(de).map(n=>`${n}: ${ze(t[n])}`).join(", ")} }`}function no(e,t){let n=Qr(e),r=Qr(t),o=re([...new Set([...Object.keys(n),...Object.keys(r)])]),i=[],a=[],s=[];for(let c of o){let l=n[c],d=r[c];if(l===void 0&&d!==void 0)i.push(c);else if(l!==void 0&&d===void 0)a.push(c);else if(l!==void 0&&d!==void 0){let h=Xr(l),m=Xr(d);h!==m&&s.push({target:c,beforeHash:h,afterHash:m,before:l,after:d})}}return{addedTargets:i,removedTargets:a,modifiedTargets:s}}function re(e){return[...new Set(e)].sort(de)}function ro(e){try{return JSON.stringify(e)}catch{return String(e)}}function us(e,t,n){return Object.freeze({start:Object.freeze(Yr(e,t)),end:Object.freeze(Yr(e,n))})}function Yr(e,t){let n=1,r=0;for(let o=0;o<t;o+=1)e[o]===`
|
|
18
|
+
`&&(n+=1,r=o+1);return{line:n,column:t-r+1,offset:t}}function oo(e,t){return e.lastIndexOf(`
|
|
19
|
+
`,Math.max(0,t-1))+1}function Qr(e){let t={};for(let[n,r]of Object.entries(e.types))if(t[`type:${n}`]=r,r.definition.kind==="object")for(let[o,i]of Object.entries(r.definition.fields))t[`type_field:${n}.${o}`]=i;for(let[n,r]of Object.entries(e.state.fields))t[`state_field:${n}`]=r;for(let[n,r]of Object.entries(e.computed.fields))t[`computed:${n}`]=r;for(let[n,r]of Object.entries(e.actions))t[`action:${n}`]=r;return t}function Xr(e){return De(dn(e))}function dn(e){return e===void 0?"undefined":e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(n=>dn(n)).join(",")}]`:`{${Object.entries(e).sort(([n],[r])=>de(n,r)).map(([n,r])=>`${JSON.stringify(n)}:${dn(r)}`).join(",")}}`}var io=1e4;function Ke(e,t){if(e===null||typeof e=="string"||typeof e=="boolean")return{ok:!0,value:e,diagnostics:[]};if(typeof e=="number")return Number.isFinite(e)?{ok:!0,value:e,diagnostics:[]}:{ok:!1,diagnostics:[p("E_FRAGMENT_SCOPE_VIOLATION",`${t} must be a finite JSON number.`)]};if(typeof e!="object")return{ok:!1,diagnostics:[p("E_FRAGMENT_SCOPE_VIOLATION",`${t} must be a JSON literal.`)]};let n=ms(e,`${t} must be inspectable JSON data.`);return n.ok?n.value!==null?ps(n.value,t):fs(e,t):{ok:!1,diagnostics:[n.diagnostic]}}function ps(e,t){let n=hs(e,`${t} array`);if(!n.ok)return{ok:!1,diagnostics:[n.diagnostic]};let r=ys(e,n.value,`${t} array`);if(r)return{ok:!1,diagnostics:[r]};let o=[],i=[];for(let a=0;a<n.value;a+=1){let s=Es(e,a,`${t} array`);if(!s.ok){o.push(s.diagnostic);continue}let c=Ke(s.value,`${t}[${a}]`);o.push(...c.diagnostics),c.ok&&i.push(c.value)}return o.length===0?{ok:!0,value:i,diagnostics:o}:{ok:!1,diagnostics:o}}function fs(e,t){let n;try{n=Object.getPrototypeOf(e)}catch{return{ok:!1,diagnostics:[p("E_FRAGMENT_SCOPE_VIOLATION",`${t} object must be inspectable JSON data.`)]}}if(n!==Object.prototype&&n!==null)return{ok:!1,diagnostics:[p("E_FRAGMENT_SCOPE_VIOLATION",`${t} object must be a plain JSON object.`)]};let r;try{r=Object.getOwnPropertyDescriptors(e)}catch{return{ok:!1,diagnostics:[p("E_FRAGMENT_SCOPE_VIOLATION",`${t} object must be inspectable JSON data.`)]}}let o=[];for(let s of Reflect.ownKeys(r)){if(typeof s=="symbol")return{ok:!1,diagnostics:[p("E_FRAGMENT_SCOPE_VIOLATION",`${t} object keys must be JSON object keys.`)]};o.push(s)}let i=[],a=Object.create(null);for(let s of o.sort(de)){let c=r[s];if(!("value"in c)){i.push(p("E_FRAGMENT_SCOPE_VIOLATION",`${t}.${s} must be a JSON data property.`));continue}if(!c.enumerable){i.push(p("E_FRAGMENT_SCOPE_VIOLATION",`${t}.${s} must be enumerable JSON data.`));continue}let l=te(s,`${t} object key`);i.push(...l);let d=ao(e,s,`${t}.${s}`);if(!d.ok){i.push(d.diagnostic);continue}let h=Ke(d.value,`${t}.${s}`);i.push(...h.diagnostics),l.length===0&&h.ok&&(a[s]=h.value)}return i.length===0?{ok:!0,value:a,diagnostics:i}:{ok:!1,diagnostics:i}}function ms(e,t){try{return{ok:!0,value:Array.isArray(e)?e:null}}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",t)}}}function hs(e,t){try{return{ok:!0,value:e.length}}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${t} must be inspectable JSON data.`)}}}function ys(e,t,n){if(t>io)return p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must contain at most ${io} items.`);let r;try{r=Object.getOwnPropertyDescriptors(e)}catch{return p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}let o=0;for(let i of Reflect.ownKeys(r)){if(typeof i=="symbol"||i!=="length"&&!gs(i,t))return p("E_FRAGMENT_SCOPE_VIOLATION",`${n} keys must be JSON array indexes.`);if(i==="length")continue;let a;try{a=Object.getOwnPropertyDescriptor(e,i)}catch{return p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}if(!a||!("value"in a))return p("E_FRAGMENT_SCOPE_VIOLATION",`${n}[${i}] must be a JSON data property.`);if(!a.enumerable)return p("E_FRAGMENT_SCOPE_VIOLATION",`${n}[${i}] must be enumerable JSON data.`);o+=1}return o!==t?p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be dense JSON array data.`):null}function gs(e,t){let n=Number(e);return Number.isInteger(n)&&n>=0&&n<t&&String(n)===e}function Es(e,t,n){try{if(!Object.hasOwn(e,t))return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n}[${t}] must be present JSON data.`)}}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}}return ao(e,String(t),`${n}[${t}]`)}function ao(e,t,n){let r;try{r=Object.getOwnPropertyDescriptor(e,t)}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}}if(!r)return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be present JSON data.`)};if(!("value"in r))return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be a JSON data property.`)};try{return{ok:!0,value:e[t]}}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}}}function mn(e,t,n,r){let o=[],i=null,a=(u,y)=>{let g=kt(u);r&&co(r,g)||o.push({range:g,location:u,rewrite:y})},s=(u,y,g)=>{let B=Ns(c(),u,y)??kt(u);r&&co(r,B)||o.push({range:B,location:u,rewrite:g})},c=()=>(i??=L(e).tokens.filter(u=>u.kind==="IDENTIFIER"),i),l=u=>{switch(u.kind){case"simpleType":n.kind==="type"&&u.name===n.name&&a(u.location,!0);return;case"unionType":u.types.forEach(l);return;case"arrayType":l(u.elementType);return;case"recordType":l(u.keyType),l(u.valueType);return;case"objectType":for(let y of u.fields)l(y.typeExpr);return;case"literalType":return}},d=(u,y={})=>{switch(u.kind){case"identifier":(n.kind==="state_field"&&u.name===n.name&&!so(u.name,y)||n.kind==="computed"&&u.name===n.name&&!so(u.name,y))&&a(u.location,!0);return;case"propertyAccess":d(u.object,y),n.kind==="type_field"&&u.property===n.fieldName&&s(u.location,u.property,!1);return;case"indexAccess":d(u.object,y),d(u.index,y);return;case"functionCall":u.args.forEach(g=>d(g,y));return;case"unary":d(u.operand,y);return;case"binary":d(u.left,y),d(u.right,y);return;case"ternary":d(u.condition,y),d(u.consequent,y),d(u.alternate,y);return;case"objectLiteral":for(let g of u.properties)g.kind==="objectProperty"?(n.kind==="type_field"&&g.key===n.fieldName&&s(g.location,g.key,!1),d(g.value,y)):d(g.expr,y);return;case"arrayLiteral":u.elements.forEach(g=>d(g,y));return;case"literal":case"systemIdent":case"iterationVar":return}},h=(u,y,g={})=>{let[B,..._e]=u.segments;B?.kind==="propertySegment"&&n.kind==="state_field"&&B.name===n.name&&a(B.location,y);for(let ye of _e)ye.kind==="propertySegment"?n.kind==="type_field"&&ye.name===n.fieldName&&a(ye.location,!1):d(ye.index,g)},m=(u,y)=>{u.isPath?h(u.value,!0,y):d(u.value,y)},E=(u,y)=>{switch(u.kind){case"when":d(u.condition,y),u.body.forEach(g=>E(g,y));return;case"once":h(u.marker,!0,y),u.condition&&d(u.condition,y),u.body.forEach(g=>E(g,y));return;case"onceIntent":u.condition&&d(u.condition,y),u.body.forEach(g=>E(g,y));return;case"include":u.args.forEach(g=>d(g,y));return;case"patch":h(u.path,!0,y),u.value&&d(u.value,y);return;case"effect":u.args.forEach(g=>m(g,y));return;case"fail":u.message&&d(u.message,y);return;case"stop":return}},C=(u,y)=>{E(u,y)},_=(u,y)=>{E(u,y)},he=u=>{let y=new Set(u.params.map(g=>g.name));u.params.forEach(g=>St(g)),u.available&&d(u.available,{localParams:y}),u.dispatchable&&d(u.dispatchable,{localParams:y,preferLocalParams:!0}),u.body.forEach(g=>C(g,{localParams:y,preferLocalParams:!0}))},St=u=>{l(u.typeExpr)},ce=u=>{let y=new Set(u.params.map(g=>g.name));u.params.forEach(g=>l(g.typeExpr)),u.body.forEach(g=>_(g,{localParams:y,preferLocalParams:!0}))};for(let u of t.imports);for(let u of t.domain.types)l(u.typeExpr);for(let u of t.domain.members)Ts(u,l,d,he,ce);return ks(o)}function Ts(e,t,n,r,o){switch(e.kind){case"state":for(let i of e.fields)t(i.typeExpr),i.initializer&&n(i.initializer);return;case"context":for(let i of e.fields)t(i.typeExpr);return;case"computed":n(e.expression);return;case"action":r(e);return;case"flow":o(e);return}}function so(e,t){return t.preferLocalParams===!0&&t.localParams?.has(e)===!0}function Ns(e,t,n){let r=kt(t),o=e.filter(a=>a.location.start.offset>=r.start&&a.location.end.offset<=r.end&&a.lexeme===n),i=o[o.length-1];return i?kt(i.location):null}function kt(e){return{start:F(e.start),end:F(e.end)}}function co(e,t){return t.start>=e.start&&t.end<=e.end}function ks(e){let t=new Map;for(let n of e){let r=`${n.range.start}:${n.range.end}`,o=t.get(r);(!o||o.rewrite&&!n.rewrite)&&t.set(r,n)}return[...t.values()].sort((n,r)=>n.range.start-r.range.start||n.range.end-r.range.end)}function uo(e,t,n){let r=fo(e,t,n);if(!r)return mo(t,"E_TARGET_NOT_FOUND",`Target ${n} does not exist.`);let o=ws(e,r.range,r.info.kind==="type_field"),i=mn(e,t,r.info,o);return i.length>0?En(i[0].location,"E_REMOVE_BLOCKED_BY_REFERENCES","removeDeclaration is blocked because references to the target remain."):{ok:!0,edits:[G(e,o.start,o.end,"")],changedTargets:r.affectedTargets}}function po(e,t,n,r){let o=fo(e,t,n);if(!o)return mo(t,"E_TARGET_NOT_FOUND",`Target ${n} does not exist.`);if(As(o.info)===r)return En(o.node.location,"E_FRAGMENT_SCOPE_VIOLATION","renameDeclaration newName must differ from the current declaration name.");let a=mn(e,t,o.info),s=a.filter(l=>!l.rewrite);return s.length>0?En(s[0].location,"E_UNSAFE_RENAME_AMBIGUOUS","renameDeclaration is blocked because at least one reference cannot be rewritten safely."):{ok:!0,edits:Cs([o.nameRange,...a.map(l=>l.range)]).map(l=>G(e,l.start,l.end,r)),changedTargets:Ss(t,o,r)}}function fo(e,t,n){let r=pt(n);if(r==="type"){let o=n.slice(5),i=qe(t,o);return i?He(e,t,{kind:r,name:o},i,i.annotations,hn(e,i.location,"TYPE",o)):null}if(r==="state_field"){let o=n.slice(12),i=yt(t,o);return i?He(e,t,{kind:r,name:o},i,i.annotations,lo(i.location,o)):null}if(r==="computed"){let o=n.slice(9),i=ht(t,o);return i?He(e,t,{kind:r,name:o},i,i.annotations,hn(e,i.location,"COMPUTED",o)):null}if(r==="action"){let o=n.slice(7),i=Fe(t,o);return i?He(e,t,{kind:r,name:o},i,i.annotations,hn(e,i.location,"ACTION",o)):null}if(r==="type_field"){let o=Et(n);if(!o)return null;let i=gt(t,o.typeName,o.fieldName);return i?He(e,t,{kind:r,typeName:o.typeName,fieldName:o.fieldName},i,i.annotations,lo(i.location,o.fieldName)):null}return null}function He(e,t,n,r,o,i){if(!i)return null;let a=vs(gn(r.location),o);return{info:n,node:r,range:a,nameRange:i,affectedTargets:bs(t,n)}}function bs(e,t){if(t.kind==="type_field")return re([`type:${t.typeName}`,yn(t)]);if(t.kind!=="type")return[yn(t)];let n=[`type:${t.name}`],r=qe(e,t.name);if(r?.typeExpr.kind==="objectType")for(let o of r.typeExpr.fields)n.push(`type_field:${t.name}.${o.name}`);return re(n)}function Ss(e,t,n){if(t.info.kind==="type"){let r=[`type:${t.info.name}`,`type:${n}`],o=qe(e,t.info.name);if(o?.typeExpr.kind==="objectType")for(let i of o.typeExpr.fields)r.push(`type_field:${t.info.name}.${i.name}`),r.push(`type_field:${n}.${i.name}`);return re(r)}return t.info.kind==="type_field"?re([`type:${t.info.typeName}`,`type_field:${t.info.typeName}.${t.info.fieldName}`,`type_field:${t.info.typeName}.${n}`]):re([yn(t.info),xs(t.info,n)])}function yn(e){switch(e.kind){case"type":return`type:${e.name}`;case"state_field":return`state_field:${e.name}`;case"computed":return`computed:${e.name}`;case"action":return`action:${e.name}`;case"type_field":return`type_field:${e.typeName}.${e.fieldName}`}}function xs(e,t){switch(e.kind){case"type":return`type:${t}`;case"state_field":return`state_field:${t}`;case"computed":return`computed:${t}`;case"action":return`action:${t}`}}function As(e){return e.kind==="type_field"?e.fieldName:e.name}function hn(e,t,n,r){let o=gn(t),i=L(e).tokens.filter(c=>c.location.start.offset>=o.start&&c.location.end.offset<=o.end&&c.kind!=="EOF"),a=i.findIndex(c=>c.kind===n);if(a<0)return null;let s=i.slice(a+1).find(c=>c.kind==="IDENTIFIER"&&c.lexeme===r);return s?gn(s.location):null}function lo(e,t){let n=F(e.start);return{start:n,end:n+t.length}}function vs(e,t){if(!t||t.length===0)return e;let n=Math.min(...t.map(r=>F(r.location.start)));return{start:Math.min(e.start,n),end:e.end}}function ws(e,t,n){let r=t.start,o=t.end;for(;o<e.length&&/[ \t]/.test(e[o]);)o+=1;if(n&&e[o]===",")for(o+=1;o<e.length&&/[ \t]/.test(e[o]);)o+=1;else if(n){let l=r-1;for(;l>=0&&/[ \t]/.test(e[l]);)l-=1;if(e[l]===",")for(r=l;r>0&&/[ \t]/.test(e[r-1]);)r-=1}let i=Os(e,r),a=Is(e,o),s=e.slice(i,r),c=e.slice(o,a);return/^[ \t]*$/.test(s)&&/^[ \t,]*$/.test(c)?{start:i,end:a<e.length?a+1:a}:{start:r,end:o}}function gn(e){return{start:F(e.start),end:F(e.end)}}function Cs(e){let t=new Set;return[...e].sort((n,r)=>n.start-r.start||n.end-r.end).filter(n=>{let r=`${n.start}:${n.end}`;return t.has(r)?!1:(t.add(r),!0)})}function Os(e,t){return e.lastIndexOf(`
|
|
20
|
+
`,Math.max(0,t-1))+1}function Is(e,t){let n=e.indexOf(`
|
|
21
|
+
`,t);return n===-1?e.length:n}function mo(e,t,n){return{ok:!1,code:t,message:n,location:e.domain.location}}function En(e,t,n){return{ok:!1,code:t,message:n,location:e}}function go(e){if(e===void 0)return{ok:!0,value:Ps()};if(e===null||typeof e!="object")return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION","compileFragmentInContext() options must be an object.")};let t=ho(e,"includeModule");if(!t.ok)return{ok:!1,diagnostic:t.diagnostic};let n=ho(e,"includeSchemaDiff");if(!n.ok)return{ok:!1,diagnostic:n.diagnostic};let r=Tn(e,"baseModule","options.baseModule");if(!r.ok)return{ok:!1,diagnostic:r.diagnostic};if(r.value===void 0)return{ok:!0,value:{baseModuleSourceHash:null,includeModule:t.value,includeSchemaDiff:n.value}};let o=Ms(r.value);return o.ok?{ok:!0,value:{baseModuleSourceHash:o.value,includeModule:t.value,includeSchemaDiff:n.value}}:{ok:!1,diagnostic:o.diagnostic}}function Ps(){return{baseModuleSourceHash:null,includeModule:!1,includeSchemaDiff:!1}}function ho(e,t){let n=Tn(e,t,`options.${t}`);return n.ok?n.value===void 0?{ok:!0,value:!1}:typeof n.value!="boolean"?{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`options.${t} must be a boolean.`)}:{ok:!0,value:n.value}:{ok:!1,diagnostic:n.diagnostic}}function Ms(e){if(e===null||typeof e!="object")return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION","options.baseModule must be an object.")};let t=yo(e,"sourceMap","options.baseModule.sourceMap");if(!t.ok)return{ok:!1,diagnostic:t.diagnostic};if(t.value===null||typeof t.value!="object")return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION","options.baseModule.sourceMap must be an object.")};let n=yo(t.value,"sourceHash","options.baseModule.sourceMap.sourceHash");return n.ok?typeof n.value!="string"?{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION","options.baseModule.sourceMap.sourceHash must be source text.")}:{ok:!0,value:n.value}:{ok:!1,diagnostic:n.diagnostic}}function Tn(e,t,n){let r;try{r=Object.getOwnPropertyDescriptor(e,t)}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}}if(!r)return{ok:!0,value:void 0};if(!("value"in r))return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be a JSON data property.`)};try{return{ok:!0,value:e[t]}}catch{return{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be inspectable JSON data.`)}}}function yo(e,t,n){let r=Tn(e,t,n);return r.ok&&r.value===void 0?{ok:!1,diagnostic:p("E_FRAGMENT_SCOPE_VIOLATION",`${n} must be present JSON data.`)}:r}function V(e,t){return e.length>0?{edits:[],changedTargets:[],diagnostics:e}:t()}function se(e,t){return{ok:!1,newSource:e,diagnostics:t,changedTargets:[],edits:[]}}function z(e,t){return{edits:[...e].sort((n,r)=>F(n.range.start)-F(r.range.start)),changedTargets:t,diagnostics:[]}}function A(...e){return{edits:[],changedTargets:[],diagnostics:e}}function Ds(e,t,n={}){let r=go(n);if(!r.ok)return se(e,[r.diagnostic]);let o=Jr(t);if(!o.ok)return se(e,[o.diagnostic]);if(r.value.baseModuleSourceHash!==null&&r.value.baseModuleSourceHash!==De(e))return se(e,[p("E_STALE_MODULE","baseModule.sourceMap.sourceHash does not match baseSource.")]);let i=dt(e,{mode:"module"}),a=cn(i);if(i.errors.length>0||!i.module)return se(e,a);let s=qr(e);if(!s.program)return se(e,s.diagnostics);let c;try{c=Rs(e,s.program,i.module,t,o.value)}catch{return se(e,[p("E_FRAGMENT_SCOPE_VIOLATION","Source edit operation must be inspectable.")])}if(c.diagnostics.length>0||c.edits.length===0)return se(e,c.diagnostics);let l=Zr(e,c.edits),d=dt(l,{mode:"module"}),h=cn(d),m=d.errors.length===0,E={ok:m,newSource:l,diagnostics:h,changedTargets:re(c.changedTargets),edits:c.edits};return m&&r.value.includeModule&&d.module&&(E.module=d.module),m&&r.value.includeSchemaDiff&&d.module&&(E.schemaDiff=no(i.module.schema,d.module.schema)),E}function Rs(e,t,n,r,o){switch(o){case"addType":{let i=r,{name:a,expr:s}=i;return V([...te(a,"type name"),...ut(s)],()=>bt(e,t,`type ${a} = ${s}`,[`type:${a}`]))}case"addStateField":{let i=r,{name:a,type:s,defaultValue:c}=i,l=Ke(c,"state default"),d=[...te(a,"state field name"),...l.diagnostics];if(d.length>0||!l.ok)return A(...d);let h=ze(l.value);return V(Kr(s,h),()=>Bs(e,t,`${a}: ${s} = ${h}`,`state_field:${a}`))}case"addComputed":{let i=r,{name:a,expr:s}=i;return V([...te(a,"computed name"),...Le(s)],()=>bt(e,t,`computed ${a} = ${s}`,[`computed:${a}`]))}case"addAction":{let i=r,{name:a,params:s,body:c}=i,l=Hr(s);return V([...te(a,"action name"),...l.diagnostics,...ln(c)],()=>typeof a!="string"||typeof c!="string"||!l.ok?A(p("E_FRAGMENT_SCOPE_VIOLATION","Source edit operation must be inspectable.")):bt(e,t,eo({kind:"addAction",name:a,params:l.value,body:c}),[`action:${a}`]))}case"addAvailable":{let i=r;return Nn(e,t,n,i.target,"available",i.expr)}case"addDispatchable":{let i=r;return Nn(e,t,n,i.target,"dispatchable",i.expr)}case"replaceActionBody":return Ls(e,t,n,r);case"replaceComputedExpr":return Fs(e,t,n,r);case"replaceAvailable":{let i=r;return Eo(e,t,n,i.target,"available",i.expr)}case"replaceDispatchable":{let i=r;return Eo(e,t,n,i.target,"dispatchable",i.expr)}case"replaceStateDefault":return _s(e,t,n,r);case"replaceTypeField":return js(e,t,n,r);case"removeDeclaration":return $s(e,t,n,r.target);case"renameDeclaration":{let i=r,{target:a,newName:s}=i;return V(te(s,"rename target name"),()=>Gs(e,t,n,a,s))}default:return A(p("E_FRAGMENT_SCOPE_VIOLATION",`Unknown source edit operation: ${ro(r)}`))}}function Nn(e,t,n,r,o,i){let a=ne(n,r,["action"]);if(a)return A(a);let s=Fe(t,r.slice(7));return s?o==="available"&&s.available||o==="dispatchable"&&s.dispatchable?A(p("E_FRAGMENT_SCOPE_VIOLATION",`Action already has ${o} guard.`,s.location)):V(Le(i),()=>{let c=un(e,s);if(!c)return A(p("E_TARGET_NOT_FOUND","Action body range was not found.",s.location));let l=o==="available"&&s.dispatchable?pn(e,s,"DISPATCHABLE")?.location.start.offset??c.open.location.start.offset:c.open.location.start.offset,d=G(e,l,l,` ${o} when ${i} `);return z([d],[r])}):A(Y(r))}function Eo(e,t,n,r,o,i){let a=ne(n,r,["action"]);if(a)return A(a);let s=Fe(t,r.slice(7));if(!s)return A(Y(r));let c=o==="available"?s.available:s.dispatchable;if(!c)return i===null?A(p("E_TARGET_NOT_FOUND",`Action does not have ${o} guard.`,s.location)):Nn(e,t,n,r,o,i);if(i===null){let l=pn(e,s,o==="available"?"AVAILABLE":"DISPATCHABLE");return l?z([G(e,l.location.start.offset,c.location.end.offset,"")],[r]):A(Y(r))}return V(Le(i),()=>z([G(e,c.location.start.offset,c.location.end.offset,i)],[r]))}function Ls(e,t,n,r){let{target:o,body:i}=r,a=ne(n,o,["action"]);if(a)return A(a);let s=Fe(t,o.slice(7));return s?V(ln(i),()=>{let c=un(e,s);if(!c)return A(Y(o));let l=Tt(e,s.location.start.offset),d=to(i,`${l} `,l);return z([G(e,c.open.location.end.offset,c.close.location.start.offset,d)],[o])}):A(Y(o))}function Fs(e,t,n,r){let{target:o,expr:i}=r,a=ne(n,o,["computed"]);if(a)return A(a);let s=ht(t,o.slice(9));return s?V(Le(i),()=>z([G(e,s.expression.location.start.offset,s.expression.location.end.offset,i)],[o])):A(Y(o))}function _s(e,t,n,r){let{target:o,value:i}=r,a=ne(n,o,["state_field"]);if(a)return A(a);let s=yt(t,o.slice(12));if(!s)return A(Y(o));let c=Ke(i,"state default");if(c.diagnostics.length>0||!c.ok)return A(...c.diagnostics);let l=ze(c.value);return V(Le(l),()=>{let d=s.initializer?.location.start.offset??s.typeExpr.location.end.offset,h=s.initializer?.location.end.offset??s.typeExpr.location.end.offset,m=s.initializer?l:` = ${l}`;return z([G(e,d,h,m)],[o])})}function js(e,t,n,r){let{target:o,type:i}=r,a=ne(n,o,["type_field"]);if(a)return A(a);let s=Et(o),c=s?gt(t,s.typeName,s.fieldName):null;return!s||!c?A(Y(o)):V(ut(i),()=>z([G(e,c.typeExpr.location.start.offset,c.typeExpr.location.end.offset,i)],[`type:${s.typeName}`,o]))}function $s(e,t,n,r){let o=ne(n,r,["type","type_field","state_field","computed","action"]);if(o)return A(o);let i=uo(e,t,r);return i.ok?z(i.edits,i.changedTargets):A(p(i.code,i.message,i.location))}function Gs(e,t,n,r,o){let i=ne(n,r,["type","type_field","state_field","computed","action"]);if(i)return A(i);let a=po(e,t,r,o);return a.ok?z(a.edits,a.changedTargets):A(p(a.code,a.message,a.location))}function bt(e,t,n,r){let o=t.domain.location.end.offset-1,a=`${Tt(e,o)} `,s=Nt(n,a);return z([fn(e,o,s)],r)}function Bs(e,t,n,r){let o=t.domain.members.find(c=>c.kind==="state");if(!o||o.kind!=="state")return bt(e,t,`state {
|
|
22
|
+
${n}
|
|
23
|
+
}`,[r]);let i=o.location.end.offset-1,s=`${Tt(e,i)} `;return z([fn(e,i,`${s}${n}`)],[r])}export{xt as a,To as b,Us as c,bn as d,Sn as e,At as f,xn as g,An as h,zs as i,T as j,vt as k,L as l,Zs as m,ec as n,vn as o,wt as p,wn as q,nc as r,rc as s,Cn as t,Ct as u,ge as v,Je as w,Ot as x,On as y,I as z,In as A,fc as B,No as C,mc as D,hc as E,Bt as F,tr as G,Ut as H,Vt as I,zt as J,qt as K,oi as L,J as M,nt as N,k as O,rt as P,Kt as Q,ii as R,Ht as S,f as T,vi as U,Vi as V,pr as W,Nr as X,wr as Y,Ir as Z,$r as _,Gr as $,os as aa,dt as ba,Ds as ca};
|
package/dist/esbuild.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./chunk-
|
|
1
|
+
import{a as e}from"./chunk-A356Y7I6.js";import"./chunk-HOS3TLHW.js";import"./chunk-JYNK3VUK.js";var t=e.esbuild,n=t;export{n as default,t as melPlugin};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
type RuntimeAllocationState = {
|
|
2
|
+
ordinal: number;
|
|
3
|
+
};
|
|
1
4
|
/**
|
|
2
5
|
* Evaluation Context Types
|
|
3
6
|
*
|
|
@@ -12,10 +15,10 @@
|
|
|
12
15
|
*/
|
|
13
16
|
export interface EvaluationSnapshot {
|
|
14
17
|
/**
|
|
15
|
-
* Domain
|
|
18
|
+
* Domain state (matches StateSpec).
|
|
16
19
|
* Path resolution default target.
|
|
17
20
|
*/
|
|
18
|
-
|
|
21
|
+
state: unknown;
|
|
19
22
|
/**
|
|
20
23
|
* Computed values (matches ComputedSpec).
|
|
21
24
|
* Accessed via bare key paths (e.g., "total", not "computed.total").
|
|
@@ -23,7 +26,7 @@ export interface EvaluationSnapshot {
|
|
|
23
26
|
computed: Record<string, unknown>;
|
|
24
27
|
}
|
|
25
28
|
/**
|
|
26
|
-
*
|
|
29
|
+
* Legacy evaluator metadata.
|
|
27
30
|
*
|
|
28
31
|
* @see SPEC v0.4.0 §18.3
|
|
29
32
|
*/
|
|
@@ -52,12 +55,12 @@ export interface EvaluationMeta {
|
|
|
52
55
|
export interface EvaluationContext {
|
|
53
56
|
/**
|
|
54
57
|
* Current snapshot for state lookups.
|
|
55
|
-
* Paths resolve to snapshot.
|
|
58
|
+
* Paths resolve to snapshot.state.* by default.
|
|
56
59
|
*/
|
|
57
60
|
snapshot: EvaluationSnapshot;
|
|
58
61
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
62
|
+
* Legacy metadata retained for older call sites. MEL v5 runtime reads must
|
|
63
|
+
* enter through explicit `$runtime.*` and `$context.*` inputs.
|
|
61
64
|
*/
|
|
62
65
|
meta: EvaluationMeta;
|
|
63
66
|
/**
|
|
@@ -70,6 +73,26 @@ export interface EvaluationContext {
|
|
|
70
73
|
* Paths starting with "$item.*" resolve here.
|
|
71
74
|
*/
|
|
72
75
|
item?: unknown;
|
|
76
|
+
/**
|
|
77
|
+
* Bound transition runtime facts for `$runtime.*` reads.
|
|
78
|
+
*/
|
|
79
|
+
runtime?: {
|
|
80
|
+
intent?: {
|
|
81
|
+
id?: string;
|
|
82
|
+
action?: string;
|
|
83
|
+
};
|
|
84
|
+
time?: {
|
|
85
|
+
timestamp?: number;
|
|
86
|
+
iso?: string;
|
|
87
|
+
};
|
|
88
|
+
random?: {
|
|
89
|
+
seed?: string;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Direct-injected external context for `$context.*` reads.
|
|
94
|
+
*/
|
|
95
|
+
context?: Record<string, unknown>;
|
|
73
96
|
}
|
|
74
97
|
/**
|
|
75
98
|
* Create a minimal evaluation context.
|
|
@@ -80,6 +103,8 @@ export interface EvaluationContext {
|
|
|
80
103
|
export declare function createEvaluationContext(options: Partial<EvaluationContext> & {
|
|
81
104
|
meta: EvaluationMeta;
|
|
82
105
|
}): EvaluationContext;
|
|
106
|
+
export declare function getRuntimeAllocationState(ctx: EvaluationContext): RuntimeAllocationState;
|
|
107
|
+
export declare function inheritRuntimeAllocationState(parent: EvaluationContext, child: EvaluationContext): EvaluationContext;
|
|
83
108
|
/**
|
|
84
109
|
* Create a working snapshot by cloning and applying a patch.
|
|
85
110
|
*
|
|
@@ -88,3 +113,4 @@ export declare function createEvaluationContext(options: Partial<EvaluationConte
|
|
|
88
113
|
* @see FDR-MEL-070
|
|
89
114
|
*/
|
|
90
115
|
export declare function applyPatchToWorkingSnapshot(snapshot: EvaluationSnapshot, path: string, value: unknown): EvaluationSnapshot;
|
|
116
|
+
export {};
|