@morphql/core 0.1.3 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
- 'use strict';var chevrotain=require('chevrotain'),fastXmlParser=require('fast-xml-parser'),ft=require('js-beautify');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ft__default=/*#__PURE__*/_interopDefault(ft);var at=chevrotain.createToken({name:"WhiteSpace",pattern:/\s+/,group:chevrotain.Lexer.SKIPPED}),ht=chevrotain.createToken({name:"LineComment",pattern:/\/\/[^\n\r]*/,group:chevrotain.Lexer.SKIPPED}),ut=chevrotain.createToken({name:"BlockComment",pattern:/\/\*[\s\S]*?\*\//,group:chevrotain.Lexer.SKIPPED}),u=chevrotain.createToken({name:"Identifier",pattern:/[a-zA-Z_$][a-zA-Z0-9_.\[\]]*/}),O=chevrotain.createToken({name:"QuotedIdentifier",pattern:/`([^`\\]|\\.)*`/}),L=chevrotain.createToken({name:"From",pattern:/from/i,longer_alt:u}),d=chevrotain.createToken({name:"To",pattern:/to/i,longer_alt:u}),A=chevrotain.createToken({name:"Transform",pattern:/transform/i,longer_alt:u}),N=chevrotain.createToken({name:"Set",pattern:/set/i,longer_alt:u}),B=chevrotain.createToken({name:"Section",pattern:/section/i,longer_alt:u}),C=chevrotain.createToken({name:"Multiple",pattern:/multiple/i,longer_alt:u}),v=chevrotain.createToken({name:"Clone",pattern:/clone/i,longer_alt:u}),M=chevrotain.createToken({name:"Delete",pattern:/delete/i,longer_alt:u}),q=chevrotain.createToken({name:"Define",pattern:/define/i,longer_alt:u}),w=chevrotain.createToken({name:"Modify",pattern:/modify/i,longer_alt:u}),y=chevrotain.createToken({name:"If",pattern:/if/i,longer_alt:u}),P=chevrotain.createToken({name:"Else",pattern:/else/i,longer_alt:u}),b=chevrotain.createToken({name:"EqualsEquals",pattern:/==/}),I=chevrotain.createToken({name:"EqualsEqualsEquals",pattern:/===/}),_=chevrotain.createToken({name:"NotEquals",pattern:/!=/}),x=chevrotain.createToken({name:"NotEqualsEquals",pattern:/!==/}),F=chevrotain.createToken({name:"LessThanOrEqual",pattern:/<=/}),D=chevrotain.createToken({name:"GreaterThanOrEqual",pattern:/>=/}),j=chevrotain.createToken({name:"LessThan",pattern:/</}),z=chevrotain.createToken({name:"GreaterThan",pattern:/>/}),W=chevrotain.createToken({name:"And",pattern:/&&/}),G=chevrotain.createToken({name:"Or",pattern:/\|\|/}),Y=chevrotain.createToken({name:"Not",pattern:/!/}),f=chevrotain.createToken({name:"Equals",pattern:/=/}),Q=chevrotain.createToken({name:"Plus",pattern:/\+/}),R=chevrotain.createToken({name:"Minus",pattern:/-/}),k=chevrotain.createToken({name:"Times",pattern:/\*/}),V=chevrotain.createToken({name:"Divide",pattern:/\//}),l=chevrotain.createToken({name:"LParen",pattern:/\(/}),c=chevrotain.createToken({name:"RParen",pattern:/\)/}),$=chevrotain.createToken({name:"Comma",pattern:/,/}),T=chevrotain.createToken({name:"StringLiteral",pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/}),K=chevrotain.createToken({name:"NumericLiteral",pattern:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/}),H=[at,ht,ut,L,d,A,N,B,C,v,M,q,w,y,P,I,b,x,_,F,D,W,G,f,j,z,Y,Q,R,k,V,l,c,$,T,K,O,u],rt=new chevrotain.Lexer(H);var J=class extends chevrotain.CstParser{constructor(){super(H),this.performSelfAnalysis();}query=this.RULE("query",()=>{this.CONSUME(L),this.SUBRULE(this.typeFormat,{LABEL:"sourceType"}),this.CONSUME(d),this.SUBRULE1(this.typeFormat,{LABEL:"targetType"}),this.OPTION(()=>{this.CONSUME(A),this.MANY(()=>{this.SUBRULE(this.action);});});});typeFormat=this.RULE("typeFormat",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"name"}),this.OPTION(()=>{this.CONSUME(l),this.CONSUME(T,{LABEL:"parameter"}),this.CONSUME(c);});});anyIdentifier=this.RULE("anyIdentifier",()=>{this.OR([{ALT:()=>this.CONSUME(u)},{ALT:()=>this.CONSUME(O)}]);});literal=this.RULE("literal",()=>{this.OR([{ALT:()=>this.CONSUME(T)},{ALT:()=>this.CONSUME(K)}]);});action=this.RULE("action",()=>{this.OR([{ALT:()=>this.SUBRULE(this.setRule)},{ALT:()=>this.SUBRULE(this.modifyRule)},{ALT:()=>this.SUBRULE(this.sectionRule)},{ALT:()=>this.SUBRULE(this.cloneRule)},{ALT:()=>this.SUBRULE(this.deleteRule)},{ALT:()=>this.SUBRULE(this.ifAction)},{ALT:()=>this.SUBRULE(this.defineRule)}]);});deleteRule=this.RULE("deleteRule",()=>{this.CONSUME(M),this.SUBRULE(this.anyIdentifier,{LABEL:"field"});});ifAction=this.RULE("ifAction",()=>{this.CONSUME(y),this.CONSUME(l),this.SUBRULE(this.expression,{LABEL:"condition"}),this.CONSUME(c),this.CONSUME2(l),this.MANY(()=>{this.SUBRULE(this.action,{LABEL:"thenActions"});}),this.CONSUME2(c),this.OPTION(()=>{this.CONSUME(P),this.CONSUME3(l),this.MANY2(()=>{this.SUBRULE2(this.action,{LABEL:"elseActions"});}),this.CONSUME3(c);});});cloneRule=this.RULE("cloneRule",()=>{this.CONSUME(v),this.OPTION(()=>{this.CONSUME(l),this.MANY_SEP({SEP:$,DEF:()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"fields"});}}),this.CONSUME(c);});});setRule=this.RULE("setRule",()=>{this.CONSUME(N),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});});modifyRule=this.RULE("modifyRule",()=>{this.CONSUME(w),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});});expression=this.RULE("expression",()=>{this.SUBRULE(this.logicalOr);});logicalOr=this.RULE("logicalOr",()=>{this.SUBRULE(this.logicalAnd,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(G),this.SUBRULE1(this.logicalAnd,{LABEL:"rhs"});});});logicalAnd=this.RULE("logicalAnd",()=>{this.SUBRULE(this.comparison,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(W),this.SUBRULE1(this.comparison,{LABEL:"rhs"});});});comparison=this.RULE("comparison",()=>{this.SUBRULE(this.addition,{LABEL:"lhs"}),this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(b,{LABEL:"ops"})},{ALT:()=>this.CONSUME(I,{LABEL:"ops"})},{ALT:()=>this.CONSUME(_,{LABEL:"ops"})},{ALT:()=>this.CONSUME(x,{LABEL:"ops"})},{ALT:()=>this.CONSUME(F,{LABEL:"ops"})},{ALT:()=>this.CONSUME(D,{LABEL:"ops"})},{ALT:()=>this.CONSUME(j,{LABEL:"ops"})},{ALT:()=>this.CONSUME(z,{LABEL:"ops"})}]),this.SUBRULE1(this.addition,{LABEL:"rhs"});});});addition=this.RULE("addition",()=>{this.SUBRULE(this.multiplication,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(Q,{LABEL:"ops"})},{ALT:()=>this.CONSUME(R,{LABEL:"ops"})}]),this.SUBRULE1(this.multiplication,{LABEL:"rhs"});});});multiplication=this.RULE("multiplication",()=>{this.SUBRULE(this.unaryExpression,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(k,{LABEL:"ops"})},{ALT:()=>this.CONSUME(V,{LABEL:"ops"})}]),this.SUBRULE1(this.unaryExpression,{LABEL:"rhs"});});});unaryExpression=this.RULE("unaryExpression",()=>{this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(R,{LABEL:"sign"})},{ALT:()=>this.CONSUME(Y,{LABEL:"sign"})}]);}),this.SUBRULE(this.atomic);});atomic=this.RULE("atomic",()=>{this.OR([{ALT:()=>this.SUBRULE(this.literal)},{GATE:()=>this.LA(2).tokenType===l,ALT:()=>this.SUBRULE(this.functionCall)},{ALT:()=>this.SUBRULE(this.anyIdentifier)},{ALT:()=>{this.CONSUME(l),this.SUBRULE(this.expression),this.CONSUME(c);}}]);});functionCall=this.RULE("functionCall",()=>{this.OR([{ALT:()=>this.CONSUME(u,{LABEL:"name"})},{ALT:()=>this.CONSUME(y,{LABEL:"name"})}]),this.CONSUME(l),this.MANY_SEP({SEP:$,DEF:()=>{this.SUBRULE(this.expression,{LABEL:"args"});}}),this.CONSUME(c);});sectionRule=this.RULE("sectionRule",()=>{this.CONSUME(B),this.OPTION(()=>{this.CONSUME(C);}),this.SUBRULE(this.anyIdentifier,{LABEL:"sectionName"}),this.CONSUME(l),this.OPTION1(()=>{this.CONSUME(L,{LABEL:"subqueryFrom"}),this.SUBRULE(this.typeFormat,{LABEL:"subquerySourceType"}),this.CONSUME(d,{LABEL:"subqueryTo"}),this.SUBRULE1(this.typeFormat,{LABEL:"subqueryTargetType"}),this.OPTION2(()=>{this.CONSUME(A,{LABEL:"subqueryTransform"});});}),this.MANY(()=>{this.SUBRULE(this.action);}),this.CONSUME(c),this.OPTION3(()=>{this.CONSUME1(L,{LABEL:"followFrom"}),this.SUBRULE2(this.anyIdentifier,{LABEL:"followPath"});});});defineRule=this.RULE("defineRule",()=>{this.CONSUME(q),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});})},E=new J;var it={substring:r=>{if(r.length<2)throw new Error("substring() requires at least 2 arguments (string, start, [length])");let[t,e,i]=r;return i!==void 0?`String(${t}).slice(${e}, (${e}) + (${i}))`:`String(${t}).slice(${e})`},if:r=>{if(r.length!==3)throw new Error("if() requires exactly 3 arguments (condition, trueValue, falseValue)");let[t,e,i]=r;return `((${t}) ? (${e}) : (${i}))`},text:r=>{if(r.length!==1)throw new Error("text() requires exactly 1 argument (string or number)");let[t]=r;return `String(${t})`},replace:r=>{if(r.length!==3)throw new Error("replace() requires exactly 3 arguments (string, search, replacement)");let[t,e,i]=r;return `String(${t}).replace(${e}, ${i})`},number:r=>{if(r.length!==1)throw new Error("number() requires exactly 1 argument (string)");let[t]=r;return `Number(${t})`},extractnumber:r=>{if(r.length!==1)throw new Error("extractNumber() requires exactly 1 argument (string)");let[t]=r;return `Number(String(${t}).match(/\\d+(\\.\\d+)?/)[0])`},uppercase:r=>{if(r.length!==1)throw new Error("uppercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toUpperCase()`},lowercase:r=>{if(r.length!==1)throw new Error("lowercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toLowerCase()`},xmlnode:r=>{if(r.length<1)throw new Error("xmlnode() requires at least 1 argument (string)");let t=r[0],e=[...r.slice(1)],i="";if(e.length>0){let[s,o]=[e,2];s=[...Array(Math.ceil(s.length/o))].map(a=>s.splice(0,o)).map(([a,h])=>{let p=a;return a.startsWith('"')||a.startsWith("'")?p=`"$${a.slice(1,-1)}"`:p=`["$"+${a}]`,`${p}:${h||"null"}`}),i=","+s.join(",");}else return t;return `{_:${t}${i}}`},split:r=>{if(r.length<1)throw new Error("split() requires at least 1 argument (string)");let[t,e,i]=r,s=e!==void 0?e:'""',o=i!==void 0?`, ${i}`:"";return `String(${t}).split(${s}${o})`},to_base64:r=>{if(r.length!==1)throw new Error("to_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${t})))) : Buffer.from(String(${t}), 'utf-8').toString('base64'))`},from_base64:r=>{if(r.length!==1)throw new Error("from_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${t})))) : Buffer.from(String(${t}), 'base64').toString('utf-8'))`},aslist:r=>{if(r.length!==1)throw new Error("aslist() requires exactly 1 argument");let[t]=r;return `(Array.isArray(${t}) ? ${t} : (${t} == null ? [] : [${t}]))`}};var pt=E.getBaseCstVisitorConstructor(),X=class extends pt{readFrom="source";constructor(){super(),this.validateVisitor();}visitWithContext(t,e){let i=this.readFrom;this.readFrom=e.readFrom;let s=this.visit(t);return this.readFrom=i,s}query(t){let e=t.action?t.action.map(m=>this.visit(m)):[];t.Transform||e.push("Object.assign(target, source);");let i=this.visit(t.sourceType),s=this.visit(t.targetType),o=i.name,a=s.name,h=s.parameter?`'${s.parameter}'`:"undefined";return {code:`
1
+ 'use strict';var chevrotain=require('chevrotain'),fastXmlParser=require('fast-xml-parser'),yt=require('js-beautify');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var yt__default=/*#__PURE__*/_interopDefault(yt);var mt=chevrotain.createToken({name:"WhiteSpace",pattern:/\s+/,group:chevrotain.Lexer.SKIPPED}),Et=chevrotain.createToken({name:"LineComment",pattern:/\/\/[^\n\r]*/,group:chevrotain.Lexer.SKIPPED}),Lt=chevrotain.createToken({name:"BlockComment",pattern:/\/\*[\s\S]*?\*\//,group:chevrotain.Lexer.SKIPPED}),l=chevrotain.createToken({name:"Identifier",pattern:/[a-zA-Z_$][a-zA-Z0-9_.\[\]]*/}),O=chevrotain.createToken({name:"QuotedIdentifier",pattern:/`([^`\\]|\\.)*`/}),g=chevrotain.createToken({name:"From",pattern:/from/i,longer_alt:l}),d=chevrotain.createToken({name:"To",pattern:/to/i,longer_alt:l}),y=chevrotain.createToken({name:"Transform",pattern:/transform/i,longer_alt:l}),T=chevrotain.createToken({name:"Set",pattern:/set/i,longer_alt:l}),$=chevrotain.createToken({name:"Section",pattern:/section/i,longer_alt:l}),B=chevrotain.createToken({name:"Multiple",pattern:/multiple/i,longer_alt:l}),v=chevrotain.createToken({name:"Clone",pattern:/clone/i,longer_alt:l}),C=chevrotain.createToken({name:"Delete",pattern:/delete/i,longer_alt:l}),M=chevrotain.createToken({name:"Define",pattern:/define/i,longer_alt:l}),q=chevrotain.createToken({name:"Modify",pattern:/modify/i,longer_alt:l}),A=chevrotain.createToken({name:"If",pattern:/if/i,longer_alt:l}),P=chevrotain.createToken({name:"Else",pattern:/else/i,longer_alt:l}),w=chevrotain.createToken({name:"True",pattern:/true/i,longer_alt:l}),b=chevrotain.createToken({name:"False",pattern:/false/i,longer_alt:l}),I=chevrotain.createToken({name:"Null",pattern:/null/i,longer_alt:l}),_=chevrotain.createToken({name:"EqualsEquals",pattern:/==/}),F=chevrotain.createToken({name:"EqualsEqualsEquals",pattern:/===/}),x=chevrotain.createToken({name:"NotEquals",pattern:/!=/}),D=chevrotain.createToken({name:"NotEqualsEquals",pattern:/!==/}),j=chevrotain.createToken({name:"LessThanOrEqual",pattern:/<=/}),z=chevrotain.createToken({name:"GreaterThanOrEqual",pattern:/>=/}),W=chevrotain.createToken({name:"LessThan",pattern:/</}),k=chevrotain.createToken({name:"GreaterThan",pattern:/>/}),Y=chevrotain.createToken({name:"And",pattern:/&&/}),G=chevrotain.createToken({name:"Or",pattern:/\|\|/}),Q=chevrotain.createToken({name:"Not",pattern:/!/}),m=chevrotain.createToken({name:"Equals",pattern:/=/}),V=chevrotain.createToken({name:"Plus",pattern:/\+/}),R=chevrotain.createToken({name:"Minus",pattern:/-/}),J=chevrotain.createToken({name:"Times",pattern:/\*/}),K=chevrotain.createToken({name:"Divide",pattern:/\//}),h=chevrotain.createToken({name:"LParen",pattern:/\(/}),c=chevrotain.createToken({name:"RParen",pattern:/\)/}),U=chevrotain.createToken({name:"Comma",pattern:/,/}),H=chevrotain.createToken({name:"StringLiteral",pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/}),X=chevrotain.createToken({name:"NumericLiteral",pattern:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/}),Z=[mt,Et,Lt,g,d,y,T,$,B,v,C,M,q,A,P,w,b,I,F,_,D,x,j,z,Y,G,m,W,k,Q,V,R,J,K,h,c,U,H,X,O,l],ot=new chevrotain.Lexer(Z);var tt=class extends chevrotain.CstParser{constructor(){super(Z),this.performSelfAnalysis();}query=this.RULE("query",()=>{this.CONSUME(g),this.SUBRULE(this.typeFormat,{LABEL:"sourceType"}),this.CONSUME(d),this.SUBRULE1(this.typeFormat,{LABEL:"targetType"}),this.OPTION(()=>{this.CONSUME(y),this.MANY(()=>{this.SUBRULE(this.action);});});});typeFormat=this.RULE("typeFormat",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"name"}),this.OPTION(()=>{this.CONSUME(h),this.MANY_SEP({SEP:U,DEF:()=>{this.SUBRULE(this.typeFormatParameter,{LABEL:"params"});}}),this.CONSUME(c);});});typeFormatParameter=this.RULE("typeFormatParameter",()=>{this.OR([{GATE:()=>this.LA(2).tokenType===m,ALT:()=>this.SUBRULE(this.namedParameter)},{ALT:()=>this.SUBRULE(this.literal)}]);});namedParameter=this.RULE("namedParameter",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"key"}),this.CONSUME(m),this.SUBRULE(this.literal,{LABEL:"value"});});anyIdentifier=this.RULE("anyIdentifier",()=>{this.OR([{ALT:()=>this.CONSUME(l)},{ALT:()=>this.CONSUME(O)}]);});literal=this.RULE("literal",()=>{this.OR([{ALT:()=>this.CONSUME(H)},{ALT:()=>this.CONSUME(X)},{ALT:()=>this.CONSUME(w)},{ALT:()=>this.CONSUME(b)},{ALT:()=>this.CONSUME(I)}]);});action=this.RULE("action",()=>{this.OR([{ALT:()=>this.SUBRULE(this.setRule)},{ALT:()=>this.SUBRULE(this.modifyRule)},{ALT:()=>this.SUBRULE(this.sectionRule)},{ALT:()=>this.SUBRULE(this.cloneRule)},{ALT:()=>this.SUBRULE(this.deleteRule)},{ALT:()=>this.SUBRULE(this.ifAction)},{ALT:()=>this.SUBRULE(this.defineRule)}]);});deleteRule=this.RULE("deleteRule",()=>{this.CONSUME(C),this.SUBRULE(this.anyIdentifier,{LABEL:"field"});});ifAction=this.RULE("ifAction",()=>{this.CONSUME(A),this.CONSUME(h),this.SUBRULE(this.expression,{LABEL:"condition"}),this.CONSUME(c),this.CONSUME2(h),this.MANY(()=>{this.SUBRULE(this.action,{LABEL:"thenActions"});}),this.CONSUME2(c),this.OPTION(()=>{this.CONSUME(P),this.CONSUME3(h),this.MANY2(()=>{this.SUBRULE2(this.action,{LABEL:"elseActions"});}),this.CONSUME3(c);});});cloneRule=this.RULE("cloneRule",()=>{this.CONSUME(v),this.OPTION(()=>{this.CONSUME(h),this.MANY_SEP({SEP:U,DEF:()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"fields"});}}),this.CONSUME(c);});});setRule=this.RULE("setRule",()=>{this.CONSUME(T),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(m),this.SUBRULE(this.expression,{LABEL:"right"});});modifyRule=this.RULE("modifyRule",()=>{this.CONSUME(q),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(m),this.SUBRULE(this.expression,{LABEL:"right"});});expression=this.RULE("expression",()=>{this.SUBRULE(this.logicalOr);});logicalOr=this.RULE("logicalOr",()=>{this.SUBRULE(this.logicalAnd,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(G),this.SUBRULE1(this.logicalAnd,{LABEL:"rhs"});});});logicalAnd=this.RULE("logicalAnd",()=>{this.SUBRULE(this.comparison,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(Y),this.SUBRULE1(this.comparison,{LABEL:"rhs"});});});comparison=this.RULE("comparison",()=>{this.SUBRULE(this.addition,{LABEL:"lhs"}),this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(_,{LABEL:"ops"})},{ALT:()=>this.CONSUME(F,{LABEL:"ops"})},{ALT:()=>this.CONSUME(x,{LABEL:"ops"})},{ALT:()=>this.CONSUME(D,{LABEL:"ops"})},{ALT:()=>this.CONSUME(j,{LABEL:"ops"})},{ALT:()=>this.CONSUME(z,{LABEL:"ops"})},{ALT:()=>this.CONSUME(W,{LABEL:"ops"})},{ALT:()=>this.CONSUME(k,{LABEL:"ops"})}]),this.SUBRULE1(this.addition,{LABEL:"rhs"});});});addition=this.RULE("addition",()=>{this.SUBRULE(this.multiplication,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(V,{LABEL:"ops"})},{ALT:()=>this.CONSUME(R,{LABEL:"ops"})}]),this.SUBRULE1(this.multiplication,{LABEL:"rhs"});});});multiplication=this.RULE("multiplication",()=>{this.SUBRULE(this.unaryExpression,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(J,{LABEL:"ops"})},{ALT:()=>this.CONSUME(K,{LABEL:"ops"})}]),this.SUBRULE1(this.unaryExpression,{LABEL:"rhs"});});});unaryExpression=this.RULE("unaryExpression",()=>{this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(R,{LABEL:"sign"})},{ALT:()=>this.CONSUME(Q,{LABEL:"sign"})}]);}),this.SUBRULE(this.atomic);});atomic=this.RULE("atomic",()=>{this.OR([{ALT:()=>this.SUBRULE(this.literal)},{GATE:()=>this.LA(2).tokenType===h,ALT:()=>this.SUBRULE(this.functionCall)},{ALT:()=>this.SUBRULE(this.anyIdentifier)},{ALT:()=>{this.CONSUME(h),this.SUBRULE(this.expression),this.CONSUME(c);}}]);});functionCall=this.RULE("functionCall",()=>{this.OR([{ALT:()=>this.CONSUME(l,{LABEL:"name"})},{ALT:()=>this.CONSUME(A,{LABEL:"name"})}]),this.CONSUME(h),this.MANY_SEP({SEP:U,DEF:()=>{this.SUBRULE(this.expression,{LABEL:"args"});}}),this.CONSUME(c);});sectionRule=this.RULE("sectionRule",()=>{this.CONSUME($),this.OPTION(()=>{this.CONSUME(B);}),this.SUBRULE(this.anyIdentifier,{LABEL:"sectionName"}),this.CONSUME(h),this.OPTION1(()=>{this.CONSUME(g,{LABEL:"subqueryFrom"}),this.SUBRULE(this.typeFormat,{LABEL:"subquerySourceType"}),this.CONSUME(d,{LABEL:"subqueryTo"}),this.SUBRULE1(this.typeFormat,{LABEL:"subqueryTargetType"}),this.OPTION2(()=>{this.CONSUME(y,{LABEL:"subqueryTransform"});});}),this.MANY(()=>{this.SUBRULE(this.action);}),this.CONSUME(c),this.OPTION3(()=>{this.CONSUME1(g,{LABEL:"followFrom"}),this.SUBRULE2(this.anyIdentifier,{LABEL:"followPath"});});});defineRule=this.RULE("defineRule",()=>{this.CONSUME(M),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(m),this.SUBRULE(this.expression,{LABEL:"right"});})},E=new tt;var lt={substring:r=>{if(r.length<2)throw new Error("substring() requires at least 2 arguments (string, start, [length])");let[t,e,i]=r;return i!==void 0?`String(${t}).slice(${e}, (${e}) + (${i}))`:`String(${t}).slice(${e})`},if:r=>{if(r.length!==3)throw new Error("if() requires exactly 3 arguments (condition, trueValue, falseValue)");let[t,e,i]=r;return `((${t}) ? (${e}) : (${i}))`},text:r=>{if(r.length!==1)throw new Error("text() requires exactly 1 argument (string or number)");let[t]=r;return `String(${t})`},replace:r=>{if(r.length!==3)throw new Error("replace() requires exactly 3 arguments (string, search, replacement)");let[t,e,i]=r;return `String(${t}).replace(${e}, ${i})`},number:r=>{if(r.length!==1)throw new Error("number() requires exactly 1 argument (string)");let[t]=r;return `Number(${t})`},extractnumber:r=>{if(r.length!==1)throw new Error("extractNumber() requires exactly 1 argument (string)");let[t]=r;return `Number(String(${t}).match(/\\d+(\\.\\d+)?/)[0])`},uppercase:r=>{if(r.length!==1)throw new Error("uppercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toUpperCase()`},lowercase:r=>{if(r.length!==1)throw new Error("lowercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toLowerCase()`},xmlnode:r=>{if(r.length<1)throw new Error("xmlnode() requires at least 1 argument (string)");let t=r[0],e=[...r.slice(1)],i="";if(e.length>0){let[n,a]=[e,2];n=[...Array(Math.ceil(n.length/a))].map(u=>n.splice(0,a)).map(([u,o])=>{let p=u;return u.startsWith('"')||u.startsWith("'")?p=`"$${u.slice(1,-1)}"`:p=`["$"+${u}]`,`${p}:${o||"null"}`}),i=","+n.join(",");}else return t;return `{_:${t}${i}}`},split:r=>{if(r.length<1)throw new Error("split() requires at least 1 argument (string)");let[t,e,i]=r,n=e!==void 0?e:'""',a=i!==void 0?`, ${i}`:"";return `String(${t}).split(${n}${a})`},to_base64:r=>{if(r.length!==1)throw new Error("to_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${t})))) : Buffer.from(String(${t}), 'utf-8').toString('base64'))`},from_base64:r=>{if(r.length!==1)throw new Error("from_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${t})))) : Buffer.from(String(${t}), 'base64').toString('utf-8'))`},aslist:r=>{if(r.length!==1)throw new Error("aslist() requires exactly 1 argument");let[t]=r;return `(Array.isArray(${t}) ? ${t} : (${t} == null ? [] : [${t}]))`}};var Ut=E.getBaseCstVisitorConstructor(),et=class extends Ut{readFrom="source";constructor(){super(),this.validateVisitor();}visitWithContext(t,e){let i=this.readFrom;this.readFrom=e.readFrom;let n=this.visit(t);return this.readFrom=i,n}query(t){let e=t.action?t.action.map(st=>this.visit(st)):[];t.Transform||e.push("Object.assign(target, source);");let i=this.visit(t.sourceType),n=this.visit(t.targetType),a=i.name,u=n.name,o=JSON.stringify(i.options),p=JSON.stringify(n.options);return {code:`
2
2
  return function(input, env) {
3
3
  // 1. Parse Input
4
- const source = env.parse('${o}', input);
4
+ const source = env.parse('${a}', input, ${o});
5
5
  const _rootSource = source;
6
6
 
7
7
  // 2. Transform
@@ -11,54 +11,54 @@
11
11
  `)}
12
12
 
13
13
  // 3. Serialize Output
14
- return env.serialize('${a}', target ${h!=="undefined"?`, { rootGenerated: ${h} }`:""} );
14
+ return env.serialize('${u}', target, ${p});
15
15
  }
16
- `,sourceType:i,targetType:s}}typeFormat(t){let e=this.visit(t.name),i;return t.parameter&&(i=t.parameter[0].image.slice(1,-1)),{name:e.name,parameter:i}}genAccess(t,e){return e.quoted||e.name.includes("-")&&!e.name.includes(".")&&!e.name.includes("[")?`${t}["${e.name}"]`:`${t}.${e.name}`}anyIdentifier(t){if(t.Identifier)return {name:t.Identifier[0].image,quoted:false};if(t.QuotedIdentifier)return {name:t.QuotedIdentifier[0].image.slice(1,-1).replace(/\\(.)/g,"$1"),quoted:true}}literal(t){if(t.StringLiteral)return t.StringLiteral[0].image;if(t.NumericLiteral)return t.NumericLiteral[0].image}action(t){if(t.setRule)return this.visit(t.setRule);if(t.modifyRule)return this.visit(t.modifyRule);if(t.sectionRule)return this.visit(t.sectionRule);if(t.cloneRule)return this.visit(t.cloneRule);if(t.ifAction)return this.visit(t.ifAction);if(t.deleteRule)return this.visit(t.deleteRule);if(t.defineRule)return this.visit(t.defineRule)}deleteRule(t){let e=this.visit(t.field);return `delete ${this.genAccess("target",e)};`}ifAction(t){let e=this.visit(t.condition),i=t.thenActions?t.thenActions.map(o=>this.visit(o)).join(`
17
- `):"",s=t.elseActions?`else { ${t.elseActions.map(o=>this.visit(o)).join(`
16
+ `,sourceType:i,targetType:n}}typeFormat(t){let e=this.visit(t.name),i={params:[]};return t.params&&t.params.forEach(n=>{let a=this.visit(n);typeof a=="object"&&"key"in a?i[a.key]=this.parseLiteral(a.value):i.params.push(this.parseLiteral(a));}),{name:e.name,options:i}}typeFormatParameter(t){if(t.namedParameter)return this.visit(t.namedParameter);if(t.literal)return this.visit(t.literal)}namedParameter(t){let e=this.visit(t.key).name,i=this.visit(t.value);return {key:e,value:i}}parseLiteral(t){if(t==="true")return true;if(t==="false")return false;if(t==="null")return null;if(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))return t.slice(1,-1);let e=Number(t);return isNaN(e)?t:e}genAccess(t,e){return e.quoted||e.name.includes("-")&&!e.name.includes(".")&&!e.name.includes("[")?`${t}["${e.name}"]`:`${t}.${e.name}`}anyIdentifier(t){if(t.Identifier)return {name:t.Identifier[0].image,quoted:false};if(t.QuotedIdentifier)return {name:t.QuotedIdentifier[0].image.slice(1,-1).replace(/\\(.)/g,"$1"),quoted:true}}literal(t){if(t.StringLiteral)return t.StringLiteral[0].image;if(t.NumericLiteral)return t.NumericLiteral[0].image;if(t.True)return "true";if(t.False)return "false";if(t.Null)return "null"}action(t){if(t.setRule)return this.visit(t.setRule);if(t.modifyRule)return this.visit(t.modifyRule);if(t.sectionRule)return this.visit(t.sectionRule);if(t.cloneRule)return this.visit(t.cloneRule);if(t.ifAction)return this.visit(t.ifAction);if(t.deleteRule)return this.visit(t.deleteRule);if(t.defineRule)return this.visit(t.defineRule)}deleteRule(t){let e=this.visit(t.field);return `delete ${this.genAccess("target",e)};`}ifAction(t){let e=this.visit(t.condition),i=t.thenActions?t.thenActions.map(a=>this.visit(a)).join(`
17
+ `):"",n=t.elseActions?`else { ${t.elseActions.map(a=>this.visit(a)).join(`
18
18
  `)} }`:"";return `if (${e}) {
19
19
  ${i}
20
- } ${s}`}cloneRule(t){return t.fields?t.fields.map(i=>this.visit(i)).map(i=>`${this.genAccess("target",i)} = ${this.genAccess("source",i)};`).join(`
21
- `):"Object.assign(target, source);"}setRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("target",e)} = ${i};`}modifyRule(t){let e=this.visit(t.left),i=this.visitWithContext(t.right,{readFrom:"target"});return `${this.genAccess("target",e)} = ${i};`}defineRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("source",e)} = ${i};`}expression(t){return this.visit(t.logicalOr)}logicalOr(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=this.visit(t.rhs[i]);e=`${e} || ${s}`;}return e}logicalAnd(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=this.visit(t.rhs[i]);e=`${e} && ${s}`;}return e}comparison(t){let e=this.visit(t.lhs);if(t.rhs){let i=t.ops[0].image,s=this.visit(t.rhs[0]);e=`${e} ${i} ${s}`;}return e}addition(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=t.ops[i].image,o=this.visit(t.rhs[i]);e=`${e} ${s} ${o}`;}return e}multiplication(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=t.ops[i].image,o=this.visit(t.rhs[i]);e=`${e} ${s} ${o}`;}return e}unaryExpression(t){let e=this.visit(t.atomic);return t.sign?`${t.sign[0].image}${e}`:e}atomic(t){if(t.literal)return this.visit(t.literal);if(t.functionCall)return this.visit(t.functionCall);if(t.anyIdentifier){let e=this.visit(t.anyIdentifier);if(["true","false","null"].includes(e.name)&&!e.quoted)return e.name;if(!e.quoted){if(e.name==="_source"||e.name.startsWith("_source.")||e.name.startsWith("_source["))return `_rootSource${e.name.substring(7)}`;if(e.name==="_target"||e.name.startsWith("_target.")||e.name.startsWith("_target["))return `_rootTarget${e.name.substring(7)}`}return this.genAccess(this.readFrom,e)}if(t.expression)return `(${this.visit(t.expression)})`}functionCall(t){let e=t.name[0].image,i=(e.startsWith("`")?e.slice(1,-1):e).toLowerCase(),s=t.args?t.args.map(a=>this.visit(a)):[],o=it[i];if(o)return o(s);throw new Error(`Unknown function: ${e}`)}sectionRule(t){let e=this.visit(t.sectionName);e.name;let s=this.genAccess("target",e),o=t.followPath?this.visit(t.followPath):e;o.name==="parent"?"":"."+o.name;let h=o.name==="parent"?"source":this.genAccess("source",o),p=!!t.Multiple,m=t.action?t.action.map(g=>this.visit(g)):[];if(!!t.subqueryFrom){let g=this.visit(t.subquerySourceType),U=this.visit(t.subqueryTargetType);t.subqueryTransform||m.push("Object.assign(target, source);");let et=U.parameter?`, { rootGenerated: "${U.parameter}" }`:"";return p?`
22
- if (${h} && Array.isArray(${h})) {
23
- ${s} = ${h}.map(item => {
24
- const subSource = env.parse('${g.name}', item);
20
+ } ${n}`}cloneRule(t){return t.fields?t.fields.map(i=>this.visit(i)).map(i=>`${this.genAccess("target",i)} = ${this.genAccess("source",i)};`).join(`
21
+ `):"Object.assign(target, source);"}setRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("target",e)} = ${i};`}modifyRule(t){let e=this.visit(t.left),i=this.visitWithContext(t.right,{readFrom:"target"});return `${this.genAccess("target",e)} = ${i};`}defineRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("source",e)} = ${i};`}expression(t){return this.visit(t.logicalOr)}logicalOr(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let n=this.visit(t.rhs[i]);e=`${e} || ${n}`;}return e}logicalAnd(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let n=this.visit(t.rhs[i]);e=`${e} && ${n}`;}return e}comparison(t){let e=this.visit(t.lhs);if(t.rhs){let i=t.ops[0].image,n=this.visit(t.rhs[0]);e=`${e} ${i} ${n}`;}return e}addition(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let n=t.ops[i].image,a=this.visit(t.rhs[i]);e=`${e} ${n} ${a}`;}return e}multiplication(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let n=t.ops[i].image,a=this.visit(t.rhs[i]);e=`${e} ${n} ${a}`;}return e}unaryExpression(t){let e=this.visit(t.atomic);return t.sign?`${t.sign[0].image}${e}`:e}atomic(t){if(t.literal)return this.visit(t.literal);if(t.functionCall)return this.visit(t.functionCall);if(t.anyIdentifier){let e=this.visit(t.anyIdentifier);if(["true","false","null"].includes(e.name)&&!e.quoted)return e.name;if(!e.quoted){if(e.name==="_source"||e.name.startsWith("_source.")||e.name.startsWith("_source["))return `_rootSource${e.name.substring(7)}`;if(e.name==="_target"||e.name.startsWith("_target.")||e.name.startsWith("_target["))return `_rootTarget${e.name.substring(7)}`}return this.genAccess(this.readFrom,e)}if(t.expression)return `(${this.visit(t.expression)})`}functionCall(t){let e=t.name[0].image,i=(e.startsWith("`")?e.slice(1,-1):e).toLowerCase(),n=t.args?t.args.map(u=>this.visit(u)):[],a=lt[i];if(a)return a(n);throw new Error(`Unknown function: ${e}`)}sectionRule(t){let e=this.visit(t.sectionName);e.name;let n=this.genAccess("target",e),a=t.followPath?this.visit(t.followPath):e;a.name==="parent"?"":"."+a.name;let o=a.name==="parent"?"source":this.genAccess("source",a),p=!!t.Multiple,L=t.action?t.action.map(f=>this.visit(f)):[];if(!!t.subqueryFrom){let f=this.visit(t.subquerySourceType),N=this.visit(t.subqueryTargetType);t.subqueryTransform||L.push("Object.assign(target, source);");let nt=JSON.stringify(f.options),at=JSON.stringify(N.options);return p?`
22
+ if (${o} && Array.isArray(${o})) {
23
+ ${n} = ${o}.map(item => {
24
+ const subSource = env.parse('${f.name}', item, ${nt});
25
25
  const source = subSource;
26
26
  const target = {};
27
- ${m.join(`
27
+ ${L.join(`
28
28
  `)}
29
- return env.serialize('${U.name}', target${et});
29
+ return env.serialize('${N.name}', target, ${at});
30
30
  });
31
31
  }
32
32
  `:`
33
- if (${h}) {
34
- ${s} = (function(innerSource) {
35
- const subSource = env.parse('${g.name}', innerSource);
33
+ if (${o}) {
34
+ ${n} = (function(innerSource) {
35
+ const subSource = env.parse('${f.name}', innerSource, ${nt});
36
36
  const source = subSource;
37
37
  const target = {};
38
- ${m.join(`
38
+ ${L.join(`
39
39
  `)}
40
- return env.serialize('${U.name}', target${et});
41
- })(${h});
40
+ return env.serialize('${N.name}', target, ${at});
41
+ })(${o});
42
42
  }
43
43
  `}return p?`
44
- if (${h} && Array.isArray(${h})) {
45
- ${s} = ${h}.map(item => {
44
+ if (${o} && Array.isArray(${o})) {
45
+ ${n} = ${o}.map(item => {
46
46
  const source = item;
47
47
  const target = {};
48
- ${m.join(`
48
+ ${L.join(`
49
49
  `)}
50
50
  return target;
51
51
  });
52
52
  }
53
53
  `:`
54
- if (${h}) {
55
- ${s} = (function(innerSource) {
54
+ if (${o}) {
55
+ ${n} = (function(innerSource) {
56
56
  const source = innerSource;
57
57
  const target = {};
58
- ${m.join(`
58
+ ${L.join(`
59
59
  `)}
60
60
  return target;
61
- })(${h});
61
+ })(${o});
62
62
  }
63
- `}},st=new X;var nt={};function Z(r,t){nt[r.toLowerCase()]=t;}function tt(r){let t=nt[r.toLowerCase()];if(!t)throw new Error(`No adapter found for format: ${r}`);return t}Z("json",{parse:r=>typeof r!="string"?r:JSON.parse(r),serialize:r=>JSON.stringify(r,null,2)});var Lt=new fastXmlParser.XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true});Z("xml",{parse:r=>typeof r!="string"?r:new fastXmlParser.XMLParser({ignoreAttributes:false,removeNSPrefix:true}).parse(r),serialize:(r,t)=>{let e=t?.rootGenerated??"root";return Lt.build({[e]:r})}});Z("object",{parse:r=>r,serialize:r=>r});async function wt(r,t){if(t?.cache){let a=await t.cache.retrieve(r);if(a)return ot(a)}let e=rt.tokenize(r);if(e.errors.length>0)throw new Error(`Lexing errors: ${e.errors[0].message}`);E.input=e.tokens;let i=E.query();if(E.errors.length>0)throw new Error(`Parsing errors: ${E.errors[0].message}`);let{code:s}=st.visit(i),o=ft__default.default.js(s,{indent_size:2,space_in_empty_paren:true,end_with_newline:true});return t?.cache&&await t.cache.save(r,o),ot(o)}function ot(r){let e=new Function(r)(),i={parse:(o,a)=>tt(o).parse(a),serialize:(o,a,h)=>tt(o).serialize(a,h)},s=(o=>e(o,i));return s.code=r,s}function Pt(r,...t){return r.reduce((e,i,s)=>e+i+(t[s]??""),"")}function bt(r){return `Hello, ${r}! The Morph engine is ready.`}exports.compile=wt;exports.greet=bt;exports.morphQL=Pt;//# sourceMappingURL=index.cjs.map
63
+ `}},ut=new et;var ct={};function rt(r,t){ct[r.toLowerCase()]=t;}function it(r){let t=ct[r.toLowerCase()];if(!t)throw new Error(`No adapter found for format: ${r}`);return t}rt("json",{parse:r=>typeof r!="string"?r:JSON.parse(r),serialize:r=>JSON.stringify(r,null,2)});var dt=new fastXmlParser.XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true});rt("xml",{parse:(r,t)=>typeof r!="string"?r:new fastXmlParser.XMLParser({ignoreAttributes:false,removeNSPrefix:true,...t}).parse(r),serialize:(r,t)=>{let e=t?.rootGenerated??t?.params?.[0]??"root";return (t?new fastXmlParser.XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true,...t}):dt).build({[e]:r})}});rt("object",{parse:r=>r,serialize:r=>r});async function _t(r,t){if(t?.cache){let u=await t.cache.retrieve(r);if(u)return pt(u)}let e=ot.tokenize(r);if(e.errors.length>0)throw new Error(`Lexing errors: ${e.errors[0].message}`);E.input=e.tokens;let i=E.query();if(E.errors.length>0)throw new Error(`Parsing errors: ${E.errors[0].message}`);let{code:n}=ut.visit(i),a=yt__default.default.js(n,{indent_size:2,space_in_empty_paren:true,end_with_newline:true});return t?.cache&&await t.cache.save(r,a),pt(a)}function pt(r){let e=new Function(r)(),i={parse:(a,u,o)=>it(a).parse(u,o),serialize:(a,u,o)=>it(a).serialize(u,o)},n=(a=>e(a,i));return n.code=r,n}function Ft(r,...t){return r.reduce((e,i,n)=>e+i+(t[n]??""),"")}function xt(r){return `Hello, ${r}! The Morph engine is ready.`}exports.compile=_t;exports.greet=xt;exports.morphQL=Ft;//# sourceMappingURL=index.cjs.map
64
64
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/index.ts"],"names":["WhiteSpace","createToken","Lexer","LineComment","BlockComment","Identifier","QuotedIdentifier","From","To","Transform","Set","Section","Multiple","Clone","Delete","Define","Modify","If","Else","EqualsEquals","EqualsEqualsEquals","NotEquals","NotEqualsEquals","LessThanOrEqual","GreaterThanOrEqual","LessThan","GreaterThan","And","Or","Not","Equals","Plus","Minus","Times","Divide","LParen","RParen","Comma","StringLiteral","NumericLiteral","allTokens","MorphLexer","MorphParser","CstParser","parser","functionRegistry","args","str","start","length","condition","trueValue","falseValue","search","replacement","value","attributesList","attributes","list","chunkSize","_","key","attrKey","separator","limit","sep","lim","val","BaseCstVisitor","MorphCompiler","node","context","previousReadFrom","result","ctx","actions","a","sourceType","targetType","sourceTypeName","targetTypeName","targetParam","id","parameter","base","field","thenActions","elseBlock","f","left","right","rhs","op","atomic","originalName","name","handler","sectionId","sectionAccess","followPathId","sourceAccess","isMultiple","subSourceType","subTargetType","subTargetParam","compiler","adapters","registerAdapter","adapter","getAdapter","content","data","xmlBuilder","XMLBuilder","XMLParser","options","rootTag","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","code","beautify","transform","env","format","engine","input","morphQL","strings","values","acc","i","greet"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createToken, Lexer } from 'chevrotain';\n\nexport const WhiteSpace = createToken({\n name: 'WhiteSpace',\n pattern: /\\s+/,\n group: Lexer.SKIPPED,\n});\n\n// Comments\nexport const LineComment = createToken({\n name: 'LineComment',\n pattern: /\\/\\/[^\\n\\r]*/,\n group: Lexer.SKIPPED,\n});\n\nexport const BlockComment = createToken({\n name: 'BlockComment',\n pattern: /\\/\\*[\\s\\S]*?\\*\\//,\n group: Lexer.SKIPPED,\n});\n\nexport const Identifier = createToken({\n name: 'Identifier',\n pattern: /[a-zA-Z_$][a-zA-Z0-9_.\\[\\]]*/,\n});\n\nexport const QuotedIdentifier = createToken({\n name: 'QuotedIdentifier',\n pattern: /`([^`\\\\]|\\\\.)*`/,\n});\n\nexport const From = createToken({ name: 'From', pattern: /from/i, longer_alt: Identifier });\nexport const To = createToken({ name: 'To', pattern: /to/i, longer_alt: Identifier });\nexport const Transform = createToken({\n name: 'Transform',\n pattern: /transform/i,\n longer_alt: Identifier,\n});\nexport const Set = createToken({ name: 'Set', pattern: /set/i, longer_alt: Identifier });\nexport const Section = createToken({\n name: 'Section',\n pattern: /section/i,\n longer_alt: Identifier,\n});\nexport const Multiple = createToken({\n name: 'Multiple',\n pattern: /multiple/i,\n longer_alt: Identifier,\n});\nexport const Clone = createToken({ name: 'Clone', pattern: /clone/i, longer_alt: Identifier });\nexport const Delete = createToken({ name: 'Delete', pattern: /delete/i, longer_alt: Identifier });\nexport const Define = createToken({ name: 'Define', pattern: /define/i, longer_alt: Identifier });\nexport const Modify = createToken({ name: 'Modify', pattern: /modify/i, longer_alt: Identifier });\nexport const If = createToken({ name: 'If', pattern: /if/i, longer_alt: Identifier });\nexport const Else = createToken({ name: 'Else', pattern: /else/i, longer_alt: Identifier });\n\n// Comparison operators (must come before single-char operators)\nexport const EqualsEquals = createToken({ name: 'EqualsEquals', pattern: /==/ });\nexport const EqualsEqualsEquals = createToken({ name: 'EqualsEqualsEquals', pattern: /===/ });\nexport const NotEquals = createToken({ name: 'NotEquals', pattern: /!=/ });\nexport const NotEqualsEquals = createToken({ name: 'NotEqualsEquals', pattern: /!==/ });\nexport const LessThanOrEqual = createToken({ name: 'LessThanOrEqual', pattern: /<=/ });\nexport const GreaterThanOrEqual = createToken({ name: 'GreaterThanOrEqual', pattern: />=/ });\nexport const LessThan = createToken({ name: 'LessThan', pattern: /</ });\nexport const GreaterThan = createToken({ name: 'GreaterThan', pattern: />/ });\n\n// Logical operators\nexport const And = createToken({ name: 'And', pattern: /&&/ });\nexport const Or = createToken({ name: 'Or', pattern: /\\|\\|/ });\nexport const Not = createToken({ name: 'Not', pattern: /!/ });\n\nexport const Equals = createToken({ name: 'Equals', pattern: /=/ });\nexport const Plus = createToken({ name: 'Plus', pattern: /\\+/ });\nexport const Minus = createToken({ name: 'Minus', pattern: /-/ });\nexport const Times = createToken({ name: 'Times', pattern: /\\*/ });\nexport const Divide = createToken({ name: 'Divide', pattern: /\\// });\nexport const LParen = createToken({ name: 'LParen', pattern: /\\(/ });\nexport const RParen = createToken({ name: 'RParen', pattern: /\\)/ });\nexport const Comma = createToken({ name: 'Comma', pattern: /,/ });\n\nexport const StringLiteral = createToken({\n name: 'StringLiteral',\n pattern: /\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/,\n});\n\nexport const NumericLiteral = createToken({\n name: 'NumericLiteral',\n pattern: /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/,\n});\n\nexport const allTokens = [\n WhiteSpace,\n LineComment,\n BlockComment,\n From,\n To,\n Transform,\n Set,\n Section,\n Multiple,\n Clone,\n Delete,\n Define,\n Modify,\n If,\n Else,\n // Multi-character operators\n EqualsEqualsEquals,\n EqualsEquals,\n NotEqualsEquals,\n NotEquals,\n LessThanOrEqual,\n GreaterThanOrEqual,\n And,\n Or,\n // Single-character operators\n Equals,\n LessThan,\n GreaterThan,\n Not,\n Plus,\n Minus,\n Times,\n Divide,\n LParen,\n RParen,\n Comma,\n StringLiteral,\n NumericLiteral,\n QuotedIdentifier,\n Identifier,\n];\n\nexport const MorphLexer = new Lexer(allTokens);\n","import { CstParser } from 'chevrotain';\nimport * as t from './lexer.js';\n\nexport class MorphParser extends CstParser {\n constructor() {\n super(t.allTokens);\n this.performSelfAnalysis();\n }\n\n public query = this.RULE('query', () => {\n this.CONSUME(t.From);\n this.SUBRULE(this.typeFormat, { LABEL: 'sourceType' });\n this.CONSUME(t.To);\n this.SUBRULE1(this.typeFormat, { LABEL: 'targetType' });\n this.OPTION(() => {\n this.CONSUME(t.Transform);\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n });\n });\n\n private typeFormat = this.RULE('typeFormat', () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'name' });\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.CONSUME(t.StringLiteral, { LABEL: 'parameter' });\n this.CONSUME(t.RParen);\n });\n });\n\n private anyIdentifier = this.RULE('anyIdentifier', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier) },\n { ALT: () => this.CONSUME(t.QuotedIdentifier) },\n ]);\n });\n\n private literal = this.RULE('literal', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.StringLiteral) },\n { ALT: () => this.CONSUME(t.NumericLiteral) },\n ]);\n });\n\n private action = this.RULE('action', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.setRule) },\n { ALT: () => this.SUBRULE(this.modifyRule) },\n { ALT: () => this.SUBRULE(this.sectionRule) },\n { ALT: () => this.SUBRULE(this.cloneRule) },\n { ALT: () => this.SUBRULE(this.deleteRule) },\n { ALT: () => this.SUBRULE(this.ifAction) },\n { ALT: () => this.SUBRULE(this.defineRule) },\n ]);\n });\n\n private deleteRule = this.RULE('deleteRule', () => {\n this.CONSUME(t.Delete);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'field' });\n });\n\n private ifAction = this.RULE('ifAction', () => {\n this.CONSUME(t.If);\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression, { LABEL: 'condition' });\n this.CONSUME(t.RParen);\n this.CONSUME2(t.LParen); // Start 'then' block\n this.MANY(() => {\n this.SUBRULE(this.action, { LABEL: 'thenActions' });\n });\n this.CONSUME2(t.RParen); // End 'then' block\n this.OPTION(() => {\n this.CONSUME(t.Else);\n this.CONSUME3(t.LParen); // Start 'else' block\n this.MANY2(() => {\n this.SUBRULE2(this.action, { LABEL: 'elseActions' });\n });\n this.CONSUME3(t.RParen); // End 'else' block\n });\n });\n\n private cloneRule = this.RULE('cloneRule', () => {\n this.CONSUME(t.Clone);\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'fields' });\n },\n });\n this.CONSUME(t.RParen);\n });\n });\n\n private setRule = this.RULE('setRule', () => {\n this.CONSUME(t.Set);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private modifyRule = this.RULE('modifyRule', () => {\n this.CONSUME(t.Modify);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private expression = this.RULE('expression', () => {\n this.SUBRULE(this.logicalOr);\n });\n\n private logicalOr = this.RULE('logicalOr', () => {\n this.SUBRULE(this.logicalAnd, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.Or);\n this.SUBRULE1(this.logicalAnd, { LABEL: 'rhs' });\n });\n });\n\n private logicalAnd = this.RULE('logicalAnd', () => {\n this.SUBRULE(this.comparison, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.And);\n this.SUBRULE1(this.comparison, { LABEL: 'rhs' });\n });\n });\n\n private comparison = this.RULE('comparison', () => {\n this.SUBRULE(this.addition, { LABEL: 'lhs' });\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.EqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.EqualsEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThan, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThan, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.addition, { LABEL: 'rhs' });\n });\n });\n\n private addition = this.RULE('addition', () => {\n this.SUBRULE(this.multiplication, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Plus, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.multiplication, { LABEL: 'rhs' });\n });\n });\n\n private multiplication = this.RULE('multiplication', () => {\n this.SUBRULE(this.unaryExpression, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Times, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Divide, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.unaryExpression, { LABEL: 'rhs' });\n });\n });\n\n private unaryExpression = this.RULE('unaryExpression', () => {\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'sign' }) },\n { ALT: () => this.CONSUME(t.Not, { LABEL: 'sign' }) },\n ]);\n });\n this.SUBRULE(this.atomic);\n });\n\n private atomic = this.RULE('atomic', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.literal) },\n {\n GATE: () => this.LA(2).tokenType === t.LParen,\n ALT: () => this.SUBRULE(this.functionCall),\n },\n { ALT: () => this.SUBRULE(this.anyIdentifier) },\n {\n ALT: () => {\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression);\n this.CONSUME(t.RParen);\n },\n },\n ]);\n });\n\n private functionCall = this.RULE('functionCall', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier, { LABEL: 'name' }) },\n { ALT: () => this.CONSUME(t.If, { LABEL: 'name' }) },\n ]);\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.expression, { LABEL: 'args' });\n },\n });\n this.CONSUME(t.RParen);\n });\n\n private sectionRule = this.RULE('sectionRule', () => {\n this.CONSUME(t.Section);\n this.OPTION(() => {\n this.CONSUME(t.Multiple);\n });\n this.SUBRULE(this.anyIdentifier, { LABEL: 'sectionName' });\n this.CONSUME(t.LParen);\n\n // NEW: Check if this is a subquery section (from X to Y ...)\n this.OPTION1(() => {\n this.CONSUME(t.From, { LABEL: 'subqueryFrom' });\n this.SUBRULE(this.typeFormat, { LABEL: 'subquerySourceType' });\n this.CONSUME(t.To, { LABEL: 'subqueryTo' });\n this.SUBRULE1(this.typeFormat, { LABEL: 'subqueryTargetType' });\n this.OPTION2(() => {\n this.CONSUME(t.Transform, { LABEL: 'subqueryTransform' });\n });\n });\n\n // Actions (for both regular sections and subquery transform blocks)\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n\n this.CONSUME(t.RParen);\n this.OPTION3(() => {\n this.CONSUME1(t.From, { LABEL: 'followFrom' });\n this.SUBRULE2(this.anyIdentifier, { LABEL: 'followPath' });\n });\n });\n\n private defineRule = this.RULE('defineRule', () => {\n this.CONSUME(t.Define);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n}\n\nexport const parser = new MorphParser();\n","/**\n * Type for a function handler that generates JavaScript code for a DSL function call.\n * @param args - The compiled JavaScript strings for each argument.\n * @returns The generated JavaScript code for the function call.\n */\nexport type FunctionHandler = (args: string[]) => string;\n\n/**\n * Registry of available transformation functions in the DSL.\n */\nexport const functionRegistry: Record<string, FunctionHandler> = {\n substring: (args: string[]) => {\n if (args.length < 2) {\n throw new Error('substring() requires at least 2 arguments (string, start, [length])');\n }\n const [str, start, length] = args;\n if (length !== undefined) {\n // Third parameter is length, so calculate end as start + length\n return `String(${str}).slice(${start}, (${start}) + (${length}))`;\n }\n // Only 2 arguments: slice from start to end of string\n return `String(${str}).slice(${start})`;\n },\n if: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('if() requires exactly 3 arguments (condition, trueValue, falseValue)');\n }\n const [condition, trueValue, falseValue] = args;\n // Compile to ternary operator\n // Wrap in parentheses to ensure precedence is correct\n return `((${condition}) ? (${trueValue}) : (${falseValue}))`;\n },\n text: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('text() requires exactly 1 argument (string or number)');\n }\n const [str] = args;\n return `String(${str})`;\n },\n replace: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('replace() requires exactly 3 arguments (string, search, replacement)');\n }\n const [str, search, replacement] = args;\n return `String(${str}).replace(${search}, ${replacement})`;\n },\n number: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('number() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(${str})`;\n },\n extractnumber: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('extractNumber() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(String(${str}).match(/\\\\d+(\\\\.\\\\d+)?/)[0])`;\n },\n uppercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('uppercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toUpperCase()`;\n },\n lowercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('lowercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toLowerCase()`;\n },\n xmlnode: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('xmlnode() requires at least 1 argument (string)');\n }\n const value = args[0];\n const attributesList = [...args.slice(1)];\n let attributes = '';\n if (attributesList.length > 0) {\n let [list, chunkSize] = [attributesList, 2];\n list = [...Array(Math.ceil(list.length / chunkSize))]\n .map((_) => list.splice(0, chunkSize))\n .map(([key, value]) => {\n let attrKey = key;\n if (key.startsWith('\"') || key.startsWith(\"'\")) {\n attrKey = `\"$${key.slice(1, -1)}\"`;\n } else {\n attrKey = `[\"$\"+${key}]`;\n }\n return `${attrKey}:${value ? value : 'null'}`;\n });\n attributes = ',' + list.join(',');\n } else {\n return value;\n }\n return `{_:${value}${attributes}}`;\n },\n split: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('split() requires at least 1 argument (string)');\n }\n const [str, separator, limit] = args;\n const sep = separator !== undefined ? separator : '\"\"';\n const lim = limit !== undefined ? `, ${limit}` : '';\n return `String(${str}).split(${sep}${lim})`;\n },\n to_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('to_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${val})))) : Buffer.from(String(${val}), 'utf-8').toString('base64'))`;\n },\n from_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('from_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${val})))) : Buffer.from(String(${val}), 'base64').toString('utf-8'))`;\n },\n aslist: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('aslist() requires exactly 1 argument');\n }\n const [val] = args;\n return `(Array.isArray(${val}) ? ${val} : (${val} == null ? [] : [${val}]))`;\n },\n};\n","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\n\nconst BaseCstVisitor = parser.getBaseCstVisitorConstructor();\n\nexport class MorphCompiler extends (BaseCstVisitor as any) {\n // Context for modify directive - determines whether to read from 'source' or 'target'\n private readFrom: 'source' | 'target' = 'source';\n\n constructor() {\n super();\n this.validateVisitor();\n }\n\n /**\n * Visit with a temporary context change\n */\n private visitWithContext(node: any, context: { readFrom: 'source' | 'target' }) {\n const previousReadFrom = this.readFrom;\n this.readFrom = context.readFrom;\n const result = this.visit(node);\n this.readFrom = previousReadFrom;\n return result;\n }\n\n query(ctx: any) {\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (!ctx.Transform) {\n actions.push('Object.assign(target, source);');\n }\n\n const sourceType = this.visit(ctx.sourceType);\n const targetType = this.visit(ctx.targetType);\n\n // Helper to serialize types for generated code\n const sourceTypeName = sourceType.name;\n const targetTypeName = targetType.name;\n const targetParam = targetType.parameter ? `'${targetType.parameter}'` : 'undefined';\n\n const code = `\n return function(input, env) {\n // 1. Parse Input\n const source = env.parse('${sourceTypeName}', input);\n const _rootSource = source;\n \n // 2. Transform\n const target = {};\n const _rootTarget = target;\n ${actions.join('\\n ')}\n\n // 3. Serialize Output\n return env.serialize('${targetTypeName}', target ${targetParam !== 'undefined' ? `, { rootGenerated: ${targetParam} }` : ''} );\n }\n `;\n\n return {\n code,\n sourceType,\n targetType,\n };\n }\n\n typeFormat(ctx: any) {\n const id = this.visit(ctx.name);\n let parameter = undefined;\n if (ctx.parameter) {\n // Remove quotes from string literal\n parameter = ctx.parameter[0].image.slice(1, -1);\n }\n return { name: id.name, parameter };\n }\n\n private genAccess(base: string, id: { name: string; quoted: boolean }) {\n if (id.quoted || (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))) {\n return `${base}[\"${id.name}\"]`;\n }\n return `${base}.${id.name}`;\n }\n\n anyIdentifier(ctx: any) {\n if (ctx.Identifier) {\n return { name: ctx.Identifier[0].image, quoted: false };\n }\n if (ctx.QuotedIdentifier) {\n // Remove backticks and unescape\n const name = ctx.QuotedIdentifier[0].image.slice(1, -1).replace(/\\\\(.)/g, '$1');\n return { name, quoted: true };\n }\n }\n\n literal(ctx: any) {\n if (ctx.StringLiteral) {\n return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n return ctx.NumericLiteral[0].image;\n }\n }\n\n action(ctx: any) {\n if (ctx.setRule) {\n return this.visit(ctx.setRule);\n }\n if (ctx.modifyRule) {\n return this.visit(ctx.modifyRule);\n }\n if (ctx.sectionRule) {\n return this.visit(ctx.sectionRule);\n }\n if (ctx.cloneRule) {\n return this.visit(ctx.cloneRule);\n }\n if (ctx.ifAction) {\n return this.visit(ctx.ifAction);\n }\n if (ctx.deleteRule) {\n return this.visit(ctx.deleteRule);\n }\n if (ctx.defineRule) {\n return this.visit(ctx.defineRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\n return `delete ${this.genAccess('target', field)};`;\n }\n\n ifAction(ctx: any) {\n const condition = this.visit(ctx.condition);\n const thenActions = ctx.thenActions\n ? ctx.thenActions.map((a: any) => this.visit(a)).join('\\n')\n : '';\n const elseBlock = ctx.elseActions\n ? `else { ${ctx.elseActions.map((a: any) => this.visit(a)).join('\\n')} }`\n : '';\n\n return `if (${condition}) {\n ${thenActions}\n } ${elseBlock}`;\n }\n\n cloneRule(ctx: any) {\n if (ctx.fields) {\n const identifiers = ctx.fields.map((f: any) => this.visit(f));\n return identifiers\n .map((id: any) => `${this.genAccess('target', id)} = ${this.genAccess('source', id)};`)\n .join('\\n ');\n }\n return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('source', left)} = ${right};`;\n }\n\n expression(ctx: any) {\n return this.visit(ctx.logicalOr);\n }\n\n logicalOr(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} || ${rhs}`;\n }\n }\n return result;\n }\n\n logicalAnd(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} && ${rhs}`;\n }\n }\n return result;\n }\n\n comparison(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n const op = ctx.ops[0].image;\n const rhs = this.visit(ctx.rhs[0]);\n result = `${result} ${op} ${rhs}`;\n }\n return result;\n }\n\n addition(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n unaryExpression(ctx: any) {\n const atomic = this.visit(ctx.atomic);\n if (ctx.sign) {\n const op = ctx.sign[0].image;\n return `${op}${atomic}`;\n }\n return atomic;\n }\n\n atomic(ctx: any) {\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n if (ctx.functionCall) {\n return this.visit(ctx.functionCall);\n }\n if (ctx.anyIdentifier) {\n const id = this.visit(ctx.anyIdentifier);\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n if (id.name === '_source' || id.name.startsWith('_source.') || id.name.startsWith('_source[')) {\n return `_rootSource${id.name.substring(7)}`;\n }\n if (id.name === '_target' || id.name.startsWith('_target.') || id.name.startsWith('_target[')) {\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n return this.genAccess(this.readFrom, id);\n }\n if (ctx.expression) {\n return `(${this.visit(ctx.expression)})`;\n }\n }\n\n functionCall(ctx: any) {\n const originalName = ctx.name[0].image;\n const name = (\n originalName.startsWith('`') ? originalName.slice(1, -1) : originalName\n ).toLowerCase();\n const args = ctx.args ? ctx.args.map((a: any) => this.visit(a)) : [];\n\n const handler = functionRegistry[name];\n if (handler) {\n return handler(args);\n }\n\n throw new Error(`Unknown function: ${originalName}`);\n }\n\n sectionRule(ctx: any) {\n const sectionId = this.visit(ctx.sectionName);\n const sectionName = sectionId.name;\n const sectionAccess = this.genAccess('target', sectionId);\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n const followPath = followPathId.name === 'parent' ? '' : '.' + followPathId.name;\n // Note: followPath currently only supports simple paths or 'parent'.\n // If it's a quoted identifier, genAccess would return target[\"name\"].\n // But section handling uses '.' + followPath.\n // I should probably use genAccess here too for consistency, but it needs to be relative to 'source'.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n // Check if this is a subquery section\n const isSubquery = !!ctx.subqueryFrom;\n\n if (isSubquery) {\n const subSourceType = this.visit(ctx.subquerySourceType);\n const subTargetType = this.visit(ctx.subqueryTargetType);\n const hasTransform = !!ctx.subqueryTransform;\n\n if (!hasTransform) {\n // Pure format conversion - copy all fields\n actions.push('Object.assign(target, source);');\n }\n\n const subTargetParam = subTargetType.parameter\n ? `, { rootGenerated: \"${subTargetType.parameter}\" }`\n : '';\n\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const subSource = env.parse('${subSourceType.name}', item);\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target${subTargetParam});\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const subSource = env.parse('${subSourceType.name}', innerSource);\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target${subTargetParam});\n })(${sourceAccess});\n }\n `;\n }\n }\n\n // Regular section handling (unchanged)\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const source = item;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n })(${sourceAccess});\n }\n `;\n }\n }\n}\n\nexport const compiler = new MorphCompiler();\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nexport interface DataAdapter {\n parse(content: string, options?: any): any;\n serialize(data: any, options?: any): string;\n}\n\nconst adapters: Record<string, DataAdapter> = {};\n\nexport function registerAdapter(name: string, adapter: DataAdapter) {\n adapters[name.toLowerCase()] = adapter;\n}\n\nexport function getAdapter(name: string): DataAdapter {\n const adapter = adapters[name.toLowerCase()];\n if (!adapter) {\n throw new Error(`No adapter found for format: ${name}`);\n }\n return adapter;\n}\n\n// Default JSON Adapter\n\nregisterAdapter('json', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n return JSON.parse(content);\n },\n serialize: (data) => JSON.stringify(data, null, 2),\n});\n\n// Default XML Adapter\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n});\n\nregisterAdapter('xml', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n const parser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n });\n return parser.parse(content);\n },\n serialize: (data, options) => {\n const rootTag = options?.rootGenerated ?? 'root';\n return xmlBuilder.build({ [rootTag]: data });\n },\n});\n\n// Object Adapter (Identity)\nregisterAdapter('object', {\n parse: (content) => content, // Assumes input is already an object\n serialize: (data) => data, // Returns object directly\n});\n","import { MorphLexer } from './core/lexer.js';\nimport { parser } from './core/parser.js';\nimport { compiler } from './core/compiler.js';\nimport { getAdapter } from './runtime/adapters.js';\nimport { MorphQLCache } from './runtime/cache.js';\n\nexport { MorphQLCache };\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n}\n\nexport async function compile<Source = any, Target = any>(\n queryString: string,\n options?: CompileOptions\n): Promise<MorphEngine<Source, Target>> {\n // 1. Check Cache\n if (options?.cache) {\n const cachedCode = await options.cache.retrieve(queryString);\n if (cachedCode) {\n return createEngine<Source, Target>(cachedCode);\n }\n }\n\n // 2. Compile if miss\n const lexResult = MorphLexer.tokenize(queryString);\n\n if (lexResult.errors.length > 0) {\n throw new Error(`Lexing errors: ${lexResult.errors[0].message}`);\n }\n\n parser.input = lexResult.tokens;\n const cst = parser.query();\n\n if (parser.errors.length > 0) {\n throw new Error(`Parsing errors: ${parser.errors[0].message}`);\n }\n\n const { code: rawCode } = compiler.visit(cst);\n\n const code = beautify.js(rawCode, {\n indent_size: 2,\n space_in_empty_paren: true,\n end_with_newline: true,\n });\n\n // 3. Save to Cache\n if (options?.cache) {\n await options.cache.save(queryString, code);\n }\n\n return createEngine<Source, Target>(code);\n}\n\nfunction createEngine<Source, Target>(code: string): MorphEngine<Source, Target> {\n // Create the base transformation function\n const factory = new Function(code);\n const transform = factory() as (source: any, env: any) => any;\n\n // Environment with adapter lookups\n const env = {\n parse: (format: string, content: string) => {\n return getAdapter(format).parse(content);\n },\n serialize: (format: string, data: any, options?: any) => {\n return getAdapter(format).serialize(data, options);\n },\n };\n\n // Return the format-aware engine\n const engine = ((input: Source) => {\n return transform(input, env) as Target;\n }) as MorphEngine<Source, Target>;\n\n engine.code = code;\n return engine;\n}\n\n/**\n * Tagged template helper for MorphQL queries.\n * Enables syntax highlighting in VSCode and provides a cleaner API.\n *\n * @example\n * ```typescript\n * const query = morphQL`\n * from json to xml\n * transform\n * set fullName = firstName + \" \" + lastName\n * `;\n * const engine = await compile(query);\n * ```\n */\nexport function morphQL(strings: TemplateStringsArray, ...values: any[]): string {\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n}\n\n/**\n * Legacy greet function for compatibility during migration.\n */\nexport function greet(name: string): string {\n return `Hello, ${name}! The Morph engine is ready.`;\n}\n"]}
1
+ {"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/index.ts"],"names":["WhiteSpace","createToken","Lexer","LineComment","BlockComment","Identifier","QuotedIdentifier","From","To","Transform","Set","Section","Multiple","Clone","Delete","Define","Modify","If","Else","True","False","Null","EqualsEquals","EqualsEqualsEquals","NotEquals","NotEqualsEquals","LessThanOrEqual","GreaterThanOrEqual","LessThan","GreaterThan","And","Or","Not","Equals","Plus","Minus","Times","Divide","LParen","RParen","Comma","StringLiteral","NumericLiteral","allTokens","MorphLexer","MorphParser","CstParser","parser","functionRegistry","args","str","start","length","condition","trueValue","falseValue","search","replacement","value","attributesList","attributes","list","chunkSize","_","key","attrKey","separator","limit","sep","lim","val","BaseCstVisitor","MorphCompiler","node","context","previousReadFrom","result","ctx","actions","a","sourceType","targetType","sourceTypeName","targetTypeName","sourceOptions","targetOptions","id","options","p","image","num","base","field","thenActions","elseBlock","f","left","right","rhs","op","atomic","originalName","name","handler","sectionId","sectionAccess","followPathId","sourceAccess","isMultiple","subSourceType","subTargetType","subSourceOptions","subTargetOptions","compiler","adapters","registerAdapter","adapter","getAdapter","content","data","xmlBuilder","XMLBuilder","XMLParser","rootTag","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","code","beautify","transform","env","format","engine","input","morphQL","strings","values","acc","i","greet"],"mappings":"uOAEO,IAAMA,EAAAA,CAAaC,sBAAAA,CAAY,CACpC,IAAA,CAAM,YAAA,CACN,OAAA,CAAS,MACT,KAAA,CAAOC,gBAAAA,CAAM,OACf,CAAC,CAAA,CAGYC,EAAAA,CAAcF,sBAAAA,CAAY,CACrC,KAAM,aAAA,CACN,OAAA,CAAS,cAAA,CACT,KAAA,CAAOC,gBAAAA,CAAM,OACf,CAAC,CAAA,CAEYE,GAAeH,sBAAAA,CAAY,CACtC,IAAA,CAAM,cAAA,CACN,OAAA,CAAS,kBAAA,CACT,KAAA,CAAOC,gBAAAA,CAAM,OACf,CAAC,CAAA,CAEYG,CAAAA,CAAaJ,sBAAAA,CAAY,CACpC,IAAA,CAAM,YAAA,CACN,QAAS,8BACX,CAAC,CAAA,CAEYK,CAAAA,CAAmBL,sBAAAA,CAAY,CAC1C,IAAA,CAAM,kBAAA,CACN,QAAS,iBACX,CAAC,CAAA,CAEYM,CAAAA,CAAON,sBAAAA,CAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,QAAS,OAAA,CAAS,UAAA,CAAYI,CAAW,CAAC,CAAA,CAC7EG,CAAAA,CAAKP,sBAAAA,CAAY,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,UAAA,CAAYI,CAAW,CAAC,CAAA,CACvEI,EAAYR,sBAAAA,CAAY,CACnC,IAAA,CAAM,WAAA,CACN,OAAA,CAAS,YAAA,CACT,UAAA,CAAYI,CACd,CAAC,CAAA,CACYK,CAAAA,CAAMT,sBAAAA,CAAY,CAAE,IAAA,CAAM,KAAA,CAAO,OAAA,CAAS,MAAA,CAAQ,WAAYI,CAAW,CAAC,CAAA,CAC1EM,CAAAA,CAAUV,sBAAAA,CAAY,CACjC,IAAA,CAAM,SAAA,CACN,QAAS,UAAA,CACT,UAAA,CAAYI,CACd,CAAC,CAAA,CACYO,CAAAA,CAAWX,sBAAAA,CAAY,CAClC,KAAM,UAAA,CACN,OAAA,CAAS,WAAA,CACT,UAAA,CAAYI,CACd,CAAC,CAAA,CACYQ,CAAAA,CAAQZ,uBAAY,CAAE,IAAA,CAAM,OAAA,CAAS,OAAA,CAAS,QAAA,CAAU,UAAA,CAAYI,CAAW,CAAC,EAChFS,CAAAA,CAASb,sBAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,SAAA,CAAW,UAAA,CAAYI,CAAW,CAAC,CAAA,CACnFU,CAAAA,CAASd,sBAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,QAAS,SAAA,CAAW,UAAA,CAAYI,CAAW,CAAC,CAAA,CACnFW,CAAAA,CAASf,sBAAAA,CAAY,CAAE,KAAM,QAAA,CAAU,OAAA,CAAS,SAAA,CAAW,UAAA,CAAYI,CAAW,CAAC,CAAA,CACnFY,CAAAA,CAAKhB,uBAAY,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,UAAA,CAAYI,CAAW,CAAC,CAAA,CACvEa,CAAAA,CAAOjB,sBAAAA,CAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,OAAA,CAAS,OAAA,CAAS,WAAYI,CAAW,CAAC,CAAA,CAC7Ec,CAAAA,CAAOlB,sBAAAA,CAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,QAAS,OAAA,CAAS,UAAA,CAAYI,CAAW,CAAC,CAAA,CAC7Ee,CAAAA,CAAQnB,sBAAAA,CAAY,CAAE,KAAM,OAAA,CAAS,OAAA,CAAS,QAAA,CAAU,UAAA,CAAYI,CAAW,CAAC,CAAA,CAChFgB,CAAAA,CAAOpB,sBAAAA,CAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,OAAA,CAAS,OAAA,CAAS,UAAA,CAAYI,CAAW,CAAC,CAAA,CAG7EiB,CAAAA,CAAerB,sBAAAA,CAAY,CAAE,IAAA,CAAM,cAAA,CAAgB,OAAA,CAAS,IAAK,CAAC,CAAA,CAClEsB,CAAAA,CAAqBtB,sBAAAA,CAAY,CAAE,IAAA,CAAM,oBAAA,CAAsB,OAAA,CAAS,KAAM,CAAC,CAAA,CAC/EuB,CAAAA,CAAYvB,sBAAAA,CAAY,CAAE,IAAA,CAAM,WAAA,CAAa,OAAA,CAAS,IAAK,CAAC,CAAA,CAC5DwB,CAAAA,CAAkBxB,sBAAAA,CAAY,CAAE,IAAA,CAAM,iBAAA,CAAmB,OAAA,CAAS,KAAM,CAAC,CAAA,CACzEyB,CAAAA,CAAkBzB,sBAAAA,CAAY,CAAE,IAAA,CAAM,iBAAA,CAAmB,OAAA,CAAS,IAAK,CAAC,CAAA,CACxE0B,CAAAA,CAAqB1B,sBAAAA,CAAY,CAAE,IAAA,CAAM,oBAAA,CAAsB,OAAA,CAAS,IAAK,CAAC,CAAA,CAC9E2B,CAAAA,CAAW3B,sBAAAA,CAAY,CAAE,IAAA,CAAM,UAAA,CAAY,OAAA,CAAS,GAAI,CAAC,CAAA,CACzD4B,CAAAA,CAAc5B,sBAAAA,CAAY,CAAE,IAAA,CAAM,aAAA,CAAe,OAAA,CAAS,GAAI,CAAC,CAAA,CAG/D6B,CAAAA,CAAM7B,sBAAAA,CAAY,CAAE,IAAA,CAAM,KAAA,CAAO,OAAA,CAAS,IAAK,CAAC,CAAA,CAChD8B,CAAAA,CAAK9B,sBAAAA,CAAY,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,MAAO,CAAC,CAAA,CAChD+B,CAAAA,CAAM/B,sBAAAA,CAAY,CAAE,IAAA,CAAM,KAAA,CAAO,OAAA,CAAS,GAAI,CAAC,CAAA,CAE/CgC,CAAAA,CAAShC,sBAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,QAAS,GAAI,CAAC,CAAA,CACrDiC,CAAAA,CAAOjC,sBAAAA,CAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,QAAS,IAAK,CAAC,CAAA,CAClDkC,CAAAA,CAAQlC,sBAAAA,CAAY,CAAE,IAAA,CAAM,OAAA,CAAS,QAAS,GAAI,CAAC,CAAA,CACnDmC,CAAAA,CAAQnC,sBAAAA,CAAY,CAAE,IAAA,CAAM,OAAA,CAAS,OAAA,CAAS,IAAK,CAAC,CAAA,CACpDoC,CAAAA,CAASpC,sBAAAA,CAAY,CAAE,IAAA,CAAM,SAAU,OAAA,CAAS,IAAK,CAAC,CAAA,CACtDqC,CAAAA,CAASrC,sBAAAA,CAAY,CAAE,IAAA,CAAM,SAAU,OAAA,CAAS,IAAK,CAAC,CAAA,CACtDsC,CAAAA,CAAStC,sBAAAA,CAAY,CAAE,IAAA,CAAM,SAAU,OAAA,CAAS,IAAK,CAAC,CAAA,CACtDuC,CAAAA,CAAQvC,sBAAAA,CAAY,CAAE,IAAA,CAAM,QAAS,OAAA,CAAS,GAAI,CAAC,CAAA,CAEnDwC,CAAAA,CAAgBxC,sBAAAA,CAAY,CACvC,IAAA,CAAM,gBACN,OAAA,CAAS,qCACX,CAAC,CAAA,CAEYyC,CAAAA,CAAiBzC,sBAAAA,CAAY,CACxC,IAAA,CAAM,iBACN,OAAA,CAAS,kCACX,CAAC,CAAA,CAEY0C,CAAAA,CAAY,CACvB3C,EAAAA,CACAG,EAAAA,CACAC,GACAG,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CAGAE,CAAAA,CACAD,EACAG,CAAAA,CACAD,CAAAA,CACAE,CAAAA,CACAC,CAAAA,CACAG,CAAAA,CACAC,CAAAA,CAEAE,CAAAA,CACAL,CAAAA,CACAC,EACAG,CAAAA,CACAE,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,EACAC,CAAAA,CACApC,CAAAA,CACAD,CACF,CAAA,CAEauC,EAAAA,CAAa,IAAI1C,gBAAAA,CAAMyC,CAAS,ECzItC,IAAME,EAAAA,CAAN,cAA0BC,oBAAU,CACzC,WAAA,EAAc,CACZ,KAAA,CAAQH,CAAS,CAAA,CACjB,IAAA,CAAK,mBAAA,GACP,CAEO,KAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,OAAA,CAAS,IAAM,CACtC,IAAA,CAAK,OAAA,CAAUpC,CAAI,CAAA,CACnB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CACrD,IAAA,CAAK,OAAA,CAAUC,CAAE,CAAA,CACjB,IAAA,CAAK,QAAA,CAAS,KAAK,UAAA,CAAY,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CACtD,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUC,CAAS,CAAA,CACxB,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,EAC1B,CAAC,EACH,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,KAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,KAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAU6B,CAAM,CAAA,CACrB,IAAA,CAAK,SAAS,CACZ,GAAA,CAAOE,CAAAA,CACP,GAAA,CAAK,IAAM,CACT,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,mBAAA,CAAqB,CAAE,KAAA,CAAO,QAAS,CAAC,EAC5D,CACF,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAUD,CAAM,EACvB,CAAC,EACH,CAAC,EAEO,mBAAA,CAAsB,IAAA,CAAK,IAAA,CAAK,qBAAA,CAAuB,IAAM,CACnE,IAAA,CAAK,EAAA,CAAG,CACN,CACE,IAAA,CAAM,IAAM,IAAA,CAAK,EAAA,CAAG,CAAC,CAAA,CAAE,SAAA,GAAgBN,CAAAA,CACvC,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,cAAc,CAC7C,EACA,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAE,CAC1C,CAAC,EACH,CAAC,CAAA,CAEO,cAAA,CAAiB,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAkB,IAAM,CACzD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CACjD,IAAA,CAAK,OAAA,CAAUA,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,KAAK,OAAA,CAAS,CAAE,KAAA,CAAO,OAAQ,CAAC,EAC/C,CAAC,CAAA,CAEO,cAAgB,IAAA,CAAK,IAAA,CAAK,eAAA,CAAiB,IAAM,CACvD,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAU5B,CAAU,CAAE,CAAA,CACxC,CAAE,IAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAgB,CAAE,CAChD,CAAC,EACH,CAAC,CAAA,CAEO,OAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAA,CAAW,IAAM,CAC3C,IAAA,CAAK,GAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUmC,CAAa,CAAE,EAC3C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAc,CAAE,CAAA,CAC5C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUvB,CAAI,CAAE,CAAA,CAClC,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAK,CAAE,CAAA,CACnC,CAAE,IAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAI,CAAE,CACpC,CAAC,EACH,CAAC,CAAA,CAEO,MAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAA,CAAU,IAAM,CACzC,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAE,CAAA,CACxC,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAE,CAAA,CAC3C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAE,CAAA,CAC5C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAE,CAAA,CAC1C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,UAAU,CAAE,CAAA,CAC3C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAQ,CAAE,CAAA,CACzC,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,UAAU,CAAE,CAC7C,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,KAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAUP,CAAM,CAAA,CACrB,KAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,OAAQ,CAAC,EACrD,CAAC,CAAA,CAEO,QAAA,CAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAY,IAAM,CAC7C,IAAA,CAAK,QAAUG,CAAE,CAAA,CACjB,IAAA,CAAK,OAAA,CAAUqB,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,WAAY,CAAC,CAAA,CACpD,IAAA,CAAK,QAAUC,CAAM,CAAA,CACrB,IAAA,CAAK,QAAA,CAAWD,CAAM,CAAA,CACtB,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAQ,CAAE,KAAA,CAAO,aAAc,CAAC,EACpD,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAWC,CAAM,CAAA,CACtB,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUrB,CAAI,CAAA,CACnB,IAAA,CAAK,SAAWoB,CAAM,CAAA,CACtB,IAAA,CAAK,KAAA,CAAM,IAAM,CACf,IAAA,CAAK,QAAA,CAAS,KAAK,MAAA,CAAQ,CAAE,KAAA,CAAO,aAAc,CAAC,EACrD,CAAC,CAAA,CACD,KAAK,QAAA,CAAWC,CAAM,EACxB,CAAC,EACH,CAAC,CAAA,CAEO,SAAA,CAAY,IAAA,CAAK,IAAA,CAAK,WAAA,CAAa,IAAM,CAC/C,IAAA,CAAK,OAAA,CAAU1B,CAAK,EACpB,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUyB,CAAM,CAAA,CACrB,KAAK,QAAA,CAAS,CACZ,GAAA,CAAOE,CAAAA,CACP,GAAA,CAAK,IAAM,CACT,IAAA,CAAK,QAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,QAAS,CAAC,EACtD,CACF,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAUD,CAAM,EACvB,CAAC,EACH,CAAC,EAEO,OAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAA,CAAW,IAAM,CAC3C,IAAA,CAAK,OAAA,CAAU7B,CAAG,CAAA,CAClB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,IAAA,CAAK,OAAA,CAAUuB,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,OAAQ,CAAC,EAClD,CAAC,CAAA,CAEO,WAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAUjB,CAAM,EACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,EAClD,IAAA,CAAK,OAAA,CAAUiB,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,OAAQ,CAAC,EAClD,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,KAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,SAAS,EAC7B,CAAC,CAAA,CAEO,SAAA,CAAY,IAAA,CAAK,IAAA,CAAK,WAAA,CAAa,IAAM,CAC/C,IAAA,CAAK,QAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CAC9C,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAUF,CAAE,CAAA,CACjB,IAAA,CAAK,SAAS,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,KAAM,CAAC,EACjD,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,KAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CAC9C,KAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAUD,CAAG,CAAA,CAClB,IAAA,CAAK,SAAS,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,KAAM,CAAC,EACjD,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,KAAK,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAU,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CAC5C,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,IAAK,IAAM,IAAA,CAAK,OAAA,CAAUR,CAAAA,CAAc,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAC5D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAoB,CAAE,MAAO,KAAM,CAAC,CAAE,CAAA,CAClE,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAW,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACzD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAC/D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAC/D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAoB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,EAClE,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAU,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACxD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,EAAa,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAC7D,CAAC,CAAA,CACD,KAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAU,CAAE,KAAA,CAAO,KAAM,CAAC,EAC/C,CAAC,EACH,CAAC,CAAA,CAEO,QAAA,CAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAY,IAAM,CAC7C,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,cAAA,CAAgB,CAAE,KAAA,CAAO,KAAM,CAAC,EAClD,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUK,CAAAA,CAAM,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACpD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAO,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CACvD,CAAC,CAAA,CACD,IAAA,CAAK,SAAS,IAAA,CAAK,cAAA,CAAgB,CAAE,KAAA,CAAO,KAAM,CAAC,EACrD,CAAC,EACH,CAAC,CAAA,CAEO,cAAA,CAAiB,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAkB,IAAM,CACzD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,eAAA,CAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,EACnD,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,IAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAO,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACrD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAQ,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CACxD,CAAC,CAAA,CACD,IAAA,CAAK,SAAS,IAAA,CAAK,eAAA,CAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,EACtD,CAAC,EACH,CAAC,CAAA,CAEO,eAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAmB,IAAM,CAC3D,KAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUF,CAAAA,CAAO,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,EACtD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUH,CAAAA,CAAK,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CACtD,CAAC,EACH,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,EAC1B,CAAC,CAAA,CAEO,MAAA,CAAS,IAAA,CAAK,KAAK,QAAA,CAAU,IAAM,CACzC,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAE,CAAA,CACxC,CACE,IAAA,CAAM,IAAM,IAAA,CAAK,EAAA,CAAG,CAAC,CAAA,CAAE,SAAA,GAAgBM,CAAAA,CACvC,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,YAAY,CAC3C,CAAA,CACA,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAa,CAAE,CAAA,CAC9C,CACE,GAAA,CAAK,IAAM,CACT,IAAA,CAAK,OAAA,CAAUA,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,CAC5B,IAAA,CAAK,OAAA,CAAUC,CAAM,EACvB,CACF,CACF,CAAC,EACH,CAAC,CAAA,CAEO,YAAA,CAAe,IAAA,CAAK,IAAA,CAAK,cAAA,CAAgB,IAAM,CACrD,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUlC,EAAY,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CAAA,CAC3D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUY,CAAAA,CAAI,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CACrD,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAUqB,CAAM,CAAA,CACrB,IAAA,CAAK,QAAA,CAAS,CACZ,GAAA,CAAOE,CAAAA,CACP,GAAA,CAAK,IAAM,CACT,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAY,CAAE,KAAA,CAAO,MAAO,CAAC,EACjD,CACF,CAAC,CAAA,CACD,KAAK,OAAA,CAAUD,CAAM,EACvB,CAAC,CAAA,CAEO,WAAA,CAAc,IAAA,CAAK,IAAA,CAAK,aAAA,CAAe,IAAM,CACnD,IAAA,CAAK,OAAA,CAAU5B,CAAO,CAAA,CACtB,IAAA,CAAK,OAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUC,CAAQ,EACzB,CAAC,CAAA,CACD,KAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,aAAc,CAAC,CAAA,CACzD,KAAK,OAAA,CAAU0B,CAAM,CAAA,CAGrB,IAAA,CAAK,OAAA,CAAQ,IAAM,CACjB,IAAA,CAAK,QAAU/B,CAAAA,CAAM,CAAE,KAAA,CAAO,cAAe,CAAC,CAAA,CAC9C,IAAA,CAAK,OAAA,CAAQ,KAAK,UAAA,CAAY,CAAE,KAAA,CAAO,oBAAqB,CAAC,CAAA,CAC7D,IAAA,CAAK,OAAA,CAAUC,EAAI,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CAC1C,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,WAAY,CAAE,KAAA,CAAO,oBAAqB,CAAC,CAAA,CAC9D,IAAA,CAAK,OAAA,CAAQ,IAAM,CACjB,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAW,CAAE,KAAA,CAAO,mBAAoB,CAAC,EAC1D,CAAC,EACH,CAAC,CAAA,CAGD,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,KAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,EAC1B,CAAC,CAAA,CAED,IAAA,CAAK,OAAA,CAAU8B,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAM,CACjB,IAAA,CAAK,QAAA,CAAWhC,CAAAA,CAAM,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CAC7C,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,YAAa,CAAC,EAC3D,CAAC,EACH,CAAC,CAAA,CAEO,WAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAUQ,CAAM,EACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,IAAA,CAAK,OAAA,CAAUkB,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAY,CAAE,KAAA,CAAO,OAAQ,CAAC,EAClD,CAAC,CACH,CAAA,CAEac,EAAS,IAAIF,EAAAA,CCzQnB,IAAMG,EAAAA,CAAoD,CAC/D,SAAA,CAAYC,CAAAA,EAAmB,CAC7B,GAAIA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAChB,MAAM,IAAI,KAAA,CAAM,qEAAqE,CAAA,CAEvF,GAAM,CAACC,CAAAA,CAAKC,CAAAA,CAAOC,CAAM,CAAA,CAAIH,CAAAA,CAC7B,OAAIG,IAAW,MAAA,CAEN,CAAA,OAAA,EAAUF,CAAG,CAAA,QAAA,EAAWC,CAAK,CAAA,GAAA,EAAMA,CAAK,CAAA,KAAA,EAAQC,CAAM,CAAA,EAAA,CAAA,CAGxD,CAAA,OAAA,EAAUF,CAAG,CAAA,QAAA,EAAWC,CAAK,CAAA,CAAA,CACtC,CAAA,CACA,EAAA,CAAKF,GAAmB,CACtB,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sEAAsE,CAAA,CAExF,GAAM,CAACI,CAAAA,CAAWC,CAAAA,CAAWC,CAAU,CAAA,CAAIN,EAG3C,OAAO,CAAA,EAAA,EAAKI,CAAS,CAAA,KAAA,EAAQC,CAAS,CAAA,KAAA,EAAQC,CAAU,CAAA,EAAA,CAC1D,EACA,IAAA,CAAON,CAAAA,EAAmB,CACxB,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,uDAAuD,CAAA,CAEzE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,CAAA,OAAA,EAAUC,CAAG,CAAA,CAAA,CACtB,CAAA,CACA,OAAA,CAAUD,CAAAA,EAAmB,CAC3B,GAAIA,EAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sEAAsE,CAAA,CAExF,GAAM,CAACC,CAAAA,CAAKM,CAAAA,CAAQC,CAAW,CAAA,CAAIR,CAAAA,CACnC,OAAO,CAAA,OAAA,EAAUC,CAAG,aAAaM,CAAM,CAAA,EAAA,EAAKC,CAAW,CAAA,CAAA,CACzD,CAAA,CACA,MAAA,CAASR,CAAAA,EAAmB,CAC1B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,+CAA+C,EAEjE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,CAAA,OAAA,EAAUC,CAAG,GACtB,CAAA,CACA,aAAA,CAAgBD,CAAAA,EAAmB,CACjC,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sDAAsD,CAAA,CAExE,GAAM,CAACC,CAAG,CAAA,CAAID,EACd,OAAO,CAAA,cAAA,EAAiBC,CAAG,CAAA,6BAAA,CAC7B,CAAA,CACA,SAAA,CAAYD,CAAAA,EAAmB,CAC7B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA,CAEpE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,CAAA,OAAA,EAAUC,CAAG,CAAA,eAAA,CACtB,EACA,SAAA,CAAYD,CAAAA,EAAmB,CAC7B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA,CAEpE,GAAM,CAACC,CAAG,CAAA,CAAID,EACd,OAAO,CAAA,OAAA,EAAUC,CAAG,CAAA,eAAA,CACtB,CAAA,CACA,OAAA,CAAUD,CAAAA,EAAmB,CAC3B,GAAIA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAChB,MAAM,IAAI,KAAA,CAAM,iDAAiD,CAAA,CAEnE,IAAMS,CAAAA,CAAQT,CAAAA,CAAK,CAAC,CAAA,CACdU,CAAAA,CAAiB,CAAC,GAAGV,CAAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CACpCW,CAAAA,CAAa,EAAA,CACjB,GAAID,CAAAA,CAAe,MAAA,CAAS,EAAG,CAC7B,GAAI,CAACE,CAAAA,CAAMC,CAAS,CAAA,CAAI,CAACH,CAAAA,CAAgB,CAAC,CAAA,CAC1CE,CAAAA,CAAO,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAKA,CAAAA,CAAK,OAASC,CAAS,CAAC,CAAC,CAAA,CACjD,GAAA,CAAKC,CAAAA,EAAMF,CAAAA,CAAK,MAAA,CAAO,CAAA,CAAGC,CAAS,CAAC,CAAA,CACpC,GAAA,CAAI,CAAC,CAACE,CAAAA,CAAKN,CAAK,CAAA,GAAM,CACrB,IAAIO,CAAAA,CAAUD,CAAAA,CACd,OAAIA,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAKA,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,CAC3CC,CAAAA,CAAU,CAAA,EAAA,EAAKD,CAAAA,CAAI,MAAM,CAAA,CAAG,EAAE,CAAC,CAAA,CAAA,CAAA,CAE/BC,CAAAA,CAAU,CAAA,KAAA,EAAQD,CAAG,CAAA,CAAA,CAAA,CAEhB,CAAA,EAAGC,CAAO,CAAA,CAAA,EAAIP,CAAAA,EAAgB,MAAM,CAAA,CAC7C,CAAC,CAAA,CACHE,EAAa,GAAA,CAAMC,CAAAA,CAAK,IAAA,CAAK,GAAG,EAClC,CAAA,KACE,OAAOH,CAAAA,CAET,OAAO,CAAA,GAAA,EAAMA,CAAK,CAAA,EAAGE,CAAU,CAAA,CAAA,CACjC,CAAA,CACA,KAAA,CAAQX,CAAAA,EAAmB,CACzB,GAAIA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAChB,MAAM,IAAI,KAAA,CAAM,+CAA+C,CAAA,CAEjE,GAAM,CAACC,CAAAA,CAAKgB,CAAAA,CAAWC,CAAK,CAAA,CAAIlB,CAAAA,CAC1BmB,EAAMF,CAAAA,GAAc,MAAA,CAAYA,CAAAA,CAAY,IAAA,CAC5CG,CAAAA,CAAMF,CAAAA,GAAU,MAAA,CAAY,CAAA,EAAA,EAAKA,CAAK,CAAA,CAAA,CAAK,EAAA,CACjD,OAAO,CAAA,OAAA,EAAUjB,CAAG,CAAA,QAAA,EAAWkB,CAAG,CAAA,EAAGC,CAAG,CAAA,CAAA,CAC1C,CAAA,CACA,SAAA,CAAYpB,CAAAA,EAAmB,CAC7B,GAAIA,CAAAA,CAAK,MAAA,GAAW,EAClB,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA,CAEpE,GAAM,CAACqB,CAAG,EAAIrB,CAAAA,CACd,OAAO,CAAA,sEAAA,EAAyEqB,CAAG,CAAA,0BAAA,EAA6BA,CAAG,CAAA,+BAAA,CACrH,CAAA,CACA,YAAcrB,CAAAA,EAAmB,CAC/B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,MAAM,oDAAoD,CAAA,CAEtE,GAAM,CAACqB,CAAG,CAAA,CAAIrB,CAAAA,CACd,OAAO,CAAA,oEAAA,EAAuEqB,CAAG,CAAA,0BAAA,EAA6BA,CAAG,CAAA,+BAAA,CACnH,CAAA,CACA,MAAA,CAASrB,CAAAA,EAAmB,CAC1B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sCAAsC,EAExD,GAAM,CAACqB,CAAG,CAAA,CAAIrB,CAAAA,CACd,OAAO,CAAA,eAAA,EAAkBqB,CAAG,OAAOA,CAAG,CAAA,IAAA,EAAOA,CAAG,CAAA,iBAAA,EAAoBA,CAAG,CAAA,GAAA,CACzE,CACF,CAAA,CC/HA,IAAMC,EAAAA,CAAiBxB,CAAAA,CAAO,4BAAA,EAA6B,CAE9CyB,EAAAA,CAAN,cAA6BD,EAAuB,CAEjD,SAAgC,QAAA,CAExC,WAAA,EAAc,CACZ,KAAA,EAAM,CACN,IAAA,CAAK,eAAA,GACP,CAKQ,gBAAA,CAAiBE,CAAAA,CAAWC,CAAAA,CAA4C,CAC9E,IAAMC,CAAAA,CAAmB,IAAA,CAAK,QAAA,CAC9B,KAAK,QAAA,CAAWD,CAAAA,CAAQ,QAAA,CACxB,IAAME,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMH,CAAI,CAAA,CAC9B,OAAA,IAAA,CAAK,QAAA,CAAWE,CAAAA,CACTC,CACT,CAEA,KAAA,CAAMC,CAAAA,CAAU,CACd,IAAMC,CAAAA,CAAUD,CAAAA,CAAI,MAAA,CAASA,CAAAA,CAAI,MAAA,CAAO,GAAA,CAAKE,EAAAA,EAAW,KAAK,KAAA,CAAMA,EAAC,CAAC,CAAA,CAAI,EAAC,CAErEF,CAAAA,CAAI,SAAA,EACPC,EAAQ,IAAA,CAAK,gCAAgC,CAAA,CAG/C,IAAME,CAAAA,CAAa,IAAA,CAAK,KAAA,CAAMH,CAAAA,CAAI,UAAU,CAAA,CACtCI,CAAAA,CAAa,IAAA,CAAK,KAAA,CAAMJ,CAAAA,CAAI,UAAU,CAAA,CAGtCK,CAAAA,CAAiBF,EAAW,IAAA,CAC5BG,CAAAA,CAAiBF,CAAAA,CAAW,IAAA,CAE5BG,CAAAA,CAAgB,IAAA,CAAK,SAAA,CAAUJ,CAAAA,CAAW,OAAO,CAAA,CACjDK,CAAAA,CAAgB,IAAA,CAAK,SAAA,CAAUJ,CAAAA,CAAW,OAAO,CAAA,CAkBvD,OAAO,CACL,IAAA,CAjBW;AAAA;AAAA;AAAA,kCAAA,EAGmBC,CAAc,aAAaE,CAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,EAMlEN,EAAQ,IAAA,CAAK;AAAA,QAAA,CAAY,CAAC;;AAAA;AAAA,8BAAA,EAGJK,CAAc,cAAcE,CAAa,CAAA;AAAA;AAAA,IAAA,CAAA,CAMnE,UAAA,CAAAL,EACA,UAAA,CAAAC,CACF,CACF,CAEA,UAAA,CAAWJ,EAAU,CACnB,IAAMS,EAAK,IAAA,CAAK,KAAA,CAAMT,EAAI,IAAI,CAAA,CACxBU,EAAe,CAAE,MAAA,CAAQ,EAAG,CAAA,CAClC,OAAIV,CAAAA,CAAI,MAAA,EACNA,EAAI,MAAA,CAAO,OAAA,CAASW,GAAW,CAC7B,IAAMlB,EAAM,IAAA,CAAK,KAAA,CAAMkB,CAAC,CAAA,CACpB,OAAOlB,GAAQ,QAAA,EAAY,KAAA,GAASA,EACtCiB,CAAAA,CAAQjB,CAAAA,CAAI,GAAG,CAAA,CAAI,IAAA,CAAK,YAAA,CAAaA,EAAI,KAAK,CAAA,CAG9CiB,EAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,YAAA,CAAajB,CAAG,CAAC,EAE9C,CAAC,EAEI,CAAE,IAAA,CAAMgB,EAAG,IAAA,CAAM,OAAA,CAAAC,CAAQ,CAClC,CAEA,oBAAoBV,CAAAA,CAAU,CAC5B,GAAIA,CAAAA,CAAI,cAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,EAAI,cAAc,CAAA,CAEtC,GAAIA,CAAAA,CAAI,OAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,EAAI,OAAO,CAEjC,CAEA,cAAA,CAAeA,CAAAA,CAAU,CACvB,IAAMb,CAAAA,CAAM,IAAA,CAAK,MAAMa,CAAAA,CAAI,GAAG,EAAE,IAAA,CAC1BnB,CAAAA,CAAQ,KAAK,KAAA,CAAMmB,CAAAA,CAAI,KAAK,CAAA,CAClC,OAAO,CAAE,GAAA,CAAAb,CAAAA,CAAK,MAAAN,CAAM,CACtB,CAEQ,YAAA,CAAa+B,CAAAA,CAAe,CAClC,GAAIA,CAAAA,GAAU,OAAQ,OAAO,KAAA,CAC7B,GAAIA,CAAAA,GAAU,OAAA,CAAS,OAAO,MAAA,CAC9B,GAAIA,IAAU,MAAA,CAAQ,OAAO,KAC7B,GACGA,CAAAA,CAAM,WAAW,GAAG,CAAA,EAAKA,EAAM,QAAA,CAAS,GAAG,CAAA,EAC3CA,CAAAA,CAAM,UAAA,CAAW,GAAG,GAAKA,CAAAA,CAAM,QAAA,CAAS,GAAG,CAAA,CAE5C,OAAOA,EAAM,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAE1B,IAAMC,EAAM,MAAA,CAAOD,CAAK,EACxB,OAAK,KAAA,CAAMC,CAAG,CAAA,CAGPD,CAAAA,CAFEC,CAGX,CAEQ,SAAA,CAAUC,CAAAA,CAAcL,EAAuC,CACrE,OAAIA,EAAG,MAAA,EAAWA,CAAAA,CAAG,KAAK,QAAA,CAAS,GAAG,GAAK,CAACA,CAAAA,CAAG,KAAK,QAAA,CAAS,GAAG,GAAK,CAACA,CAAAA,CAAG,KAAK,QAAA,CAAS,GAAG,CAAA,CACjF,CAAA,EAAGK,CAAI,CAAA,EAAA,EAAKL,EAAG,IAAI,CAAA,EAAA,CAAA,CAErB,GAAGK,CAAI,CAAA,CAAA,EAAIL,EAAG,IAAI,CAAA,CAC3B,CAEA,aAAA,CAAcT,CAAAA,CAAU,CACtB,GAAIA,CAAAA,CAAI,WACN,OAAO,CAAE,KAAMA,CAAAA,CAAI,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,CAAO,OAAQ,KAAM,CAAA,CAExD,GAAIA,CAAAA,CAAI,gBAAA,CAGN,OAAO,CAAE,IAAA,CADIA,EAAI,gBAAA,CAAiB,CAAC,EAAE,KAAA,CAAM,KAAA,CAAM,EAAG,EAAE,CAAA,CAAE,QAAQ,QAAA,CAAU,IAAI,CAAA,CAC/D,MAAA,CAAQ,IAAK,CAEhC,CAEA,OAAA,CAAQA,CAAAA,CAAU,CAChB,GAAIA,CAAAA,CAAI,cACN,OAAOA,CAAAA,CAAI,cAAc,CAAC,CAAA,CAAE,MAE9B,GAAIA,CAAAA,CAAI,eACN,OAAOA,CAAAA,CAAI,eAAe,CAAC,CAAA,CAAE,MAE/B,GAAIA,CAAAA,CAAI,KAAM,OAAO,MAAA,CACrB,GAAIA,CAAAA,CAAI,KAAA,CAAO,OAAO,OAAA,CACtB,GAAIA,EAAI,IAAA,CAAM,OAAO,MACvB,CAEA,MAAA,CAAOA,EAAU,CACf,GAAIA,EAAI,OAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,OAAO,EAE/B,GAAIA,CAAAA,CAAI,WACN,OAAO,IAAA,CAAK,MAAMA,CAAAA,CAAI,UAAU,EAElC,GAAIA,CAAAA,CAAI,YACN,OAAO,IAAA,CAAK,MAAMA,CAAAA,CAAI,WAAW,EAEnC,GAAIA,CAAAA,CAAI,UACN,OAAO,IAAA,CAAK,MAAMA,CAAAA,CAAI,SAAS,EAEjC,GAAIA,CAAAA,CAAI,SACN,OAAO,IAAA,CAAK,MAAMA,CAAAA,CAAI,QAAQ,EAEhC,GAAIA,CAAAA,CAAI,WACN,OAAO,IAAA,CAAK,MAAMA,CAAAA,CAAI,UAAU,CAAA,CAElC,GAAIA,CAAAA,CAAI,UAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,EAAI,UAAU,CAEpC,CAEA,UAAA,CAAWA,CAAAA,CAAU,CACnB,IAAMe,CAAAA,CAAQ,KAAK,KAAA,CAAMf,CAAAA,CAAI,KAAK,CAAA,CAClC,OAAO,UAAU,IAAA,CAAK,SAAA,CAAU,QAAA,CAAUe,CAAK,CAAC,CAAA,CAAA,CAClD,CAEA,QAAA,CAASf,CAAAA,CAAU,CACjB,IAAMxB,CAAAA,CAAY,KAAK,KAAA,CAAMwB,CAAAA,CAAI,SAAS,CAAA,CACpCgB,CAAAA,CAAchB,EAAI,WAAA,CACpBA,CAAAA,CAAI,YAAY,GAAA,CAAK,CAAA,EAAW,KAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK;AAAA,CAAI,CAAA,CACxD,EAAA,CACEiB,CAAAA,CAAYjB,CAAAA,CAAI,YAClB,CAAA,OAAA,EAAUA,CAAAA,CAAI,WAAA,CAAY,GAAA,CAAK,GAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,EAAE,IAAA,CAAK;AAAA,CAAI,CAAC,CAAA,EAAA,CAAA,CACnE,EAAA,CAEJ,OAAO,OAAOxB,CAAS,CAAA;AAAA,OAAA,EAClBwC,CAAW;AAAA,OAAA,EACXC,CAAS,CAAA,CAChB,CAEA,SAAA,CAAUjB,EAAU,CAClB,OAAIA,CAAAA,CAAI,MAAA,CACcA,EAAI,MAAA,CAAO,GAAA,CAAKkB,CAAAA,EAAW,IAAA,CAAK,MAAMA,CAAC,CAAC,CAAA,CAEzD,GAAA,CAAKT,CAAAA,EAAY,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,SAAUA,CAAE,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,UAAU,QAAA,CAAUA,CAAE,CAAC,CAAA,CAAA,CAAG,EACrF,IAAA,CAAK;AAAA,QAAA,CAAY,CAAA,CAEf,gCACT,CAEA,OAAA,CAAQT,EAAU,CAChB,IAAMmB,CAAAA,CAAO,IAAA,CAAK,MAAMnB,CAAAA,CAAI,IAAI,CAAA,CAC1BoB,CAAAA,CAAQ,KAAK,KAAA,CAAMpB,CAAAA,CAAI,KAAK,CAAA,CAClC,OAAO,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,QAAA,CAAUmB,CAAI,CAAC,CAAA,GAAA,EAAMC,CAAK,CAAA,CAAA,CACrD,CAEA,UAAA,CAAWpB,CAAAA,CAAU,CACnB,IAAMmB,EAAO,IAAA,CAAK,KAAA,CAAMnB,CAAAA,CAAI,IAAI,CAAA,CAC1BoB,CAAAA,CAAQ,IAAA,CAAK,gBAAA,CAAiBpB,EAAI,KAAA,CAAO,CAAE,QAAA,CAAU,QAAS,CAAC,CAAA,CACrE,OAAO,CAAA,EAAG,IAAA,CAAK,UAAU,QAAA,CAAUmB,CAAI,CAAC,CAAA,GAAA,EAAMC,CAAK,CAAA,CAAA,CACrD,CAEA,UAAA,CAAWpB,CAAAA,CAAU,CACnB,IAAMmB,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAMnB,EAAI,IAAI,CAAA,CAC1BoB,CAAAA,CAAQ,IAAA,CAAK,MAAMpB,CAAAA,CAAI,KAAK,CAAA,CAClC,OAAO,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,QAAA,CAAUmB,CAAI,CAAC,CAAA,GAAA,EAAMC,CAAK,CAAA,CAAA,CACrD,CAEA,UAAA,CAAWpB,CAAAA,CAAU,CACnB,OAAO,KAAK,KAAA,CAAMA,CAAAA,CAAI,SAAS,CACjC,CAEA,SAAA,CAAUA,CAAAA,CAAU,CAClB,IAAID,EAAS,IAAA,CAAK,KAAA,CAAMC,CAAAA,CAAI,GAAG,EAC/B,GAAIA,CAAAA,CAAI,GAAA,CACN,IAAA,IAAS,EAAI,CAAA,CAAG,CAAA,CAAIA,CAAAA,CAAI,GAAA,CAAI,MAAA,CAAQ,CAAA,EAAA,CAAK,CACvC,IAAMqB,EAAM,IAAA,CAAK,KAAA,CAAMrB,CAAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,CAAAA,CAAS,CAAA,EAAGA,CAAM,CAAA,IAAA,EAAOsB,CAAG,CAAA,EAC9B,CAEF,OAAOtB,CACT,CAEA,UAAA,CAAWC,CAAAA,CAAU,CACnB,IAAID,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMC,EAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,IACN,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAIA,CAAAA,CAAI,GAAA,CAAI,MAAA,CAAQ,CAAA,EAAA,CAAK,CACvC,IAAMqB,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMrB,EAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,EAAS,CAAA,EAAGA,CAAM,CAAA,IAAA,EAAOsB,CAAG,GAC9B,CAEF,OAAOtB,CACT,CAEA,WAAWC,CAAAA,CAAU,CACnB,IAAID,CAAAA,CAAS,KAAK,KAAA,CAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,GAAA,CAAK,CACX,IAAMsB,CAAAA,CAAKtB,CAAAA,CAAI,GAAA,CAAI,CAAC,EAAE,KAAA,CAChBqB,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMrB,EAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,EAAS,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIuB,CAAE,IAAID,CAAG,CAAA,EACjC,CACA,OAAOtB,CACT,CAEA,QAAA,CAASC,CAAAA,CAAU,CACjB,IAAID,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,GAAA,CACN,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAIA,EAAI,GAAA,CAAI,MAAA,CAAQ,CAAA,EAAA,CAAK,CACvC,IAAMsB,CAAAA,CAAKtB,CAAAA,CAAI,GAAA,CAAI,CAAC,EAAE,KAAA,CAChBqB,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMrB,EAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,EAAS,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIuB,CAAE,IAAID,CAAG,CAAA,EACjC,CAEF,OAAOtB,CACT,CAEA,cAAA,CAAeC,CAAAA,CAAU,CACvB,IAAID,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMC,EAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,IACN,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAIA,EAAI,GAAA,CAAI,MAAA,CAAQ,CAAA,EAAA,CAAK,CACvC,IAAMsB,CAAAA,CAAKtB,CAAAA,CAAI,GAAA,CAAI,CAAC,EAAE,KAAA,CAChBqB,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMrB,EAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,EAAS,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIuB,CAAE,CAAA,CAAA,EAAID,CAAG,CAAA,EACjC,CAEF,OAAOtB,CACT,CAEA,eAAA,CAAgBC,CAAAA,CAAU,CACxB,IAAMuB,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMvB,EAAI,MAAM,CAAA,CACpC,OAAIA,CAAAA,CAAI,KAEC,CAAA,EADIA,CAAAA,CAAI,IAAA,CAAK,CAAC,EAAE,KACX,CAAA,EAAGuB,CAAM,CAAA,CAAA,CAEhBA,CACT,CAEA,MAAA,CAAOvB,CAAAA,CAAU,CACf,GAAIA,CAAAA,CAAI,OAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,OAAO,CAAA,CAE/B,GAAIA,CAAAA,CAAI,YAAA,CACN,OAAO,IAAA,CAAK,MAAMA,CAAAA,CAAI,YAAY,CAAA,CAEpC,GAAIA,EAAI,aAAA,CAAe,CACrB,IAAMS,CAAAA,CAAK,KAAK,KAAA,CAAMT,CAAAA,CAAI,aAAa,CAAA,CACvC,GAAI,CAAC,MAAA,CAAQ,OAAA,CAAS,MAAM,EAAE,QAAA,CAASS,CAAAA,CAAG,IAAI,CAAA,EAAK,CAACA,CAAAA,CAAG,MAAA,CACrD,OAAOA,CAAAA,CAAG,IAAA,CAEZ,GAAI,CAACA,CAAAA,CAAG,OAAQ,CACd,GACEA,CAAAA,CAAG,IAAA,GAAS,WACZA,CAAAA,CAAG,IAAA,CAAK,UAAA,CAAW,UAAU,GAC7BA,CAAAA,CAAG,IAAA,CAAK,UAAA,CAAW,UAAU,EAE7B,OAAO,CAAA,WAAA,EAAcA,CAAAA,CAAG,IAAA,CAAK,UAAU,CAAC,CAAC,CAAA,CAAA,CAE3C,GACEA,EAAG,IAAA,GAAS,SAAA,EACZA,CAAAA,CAAG,IAAA,CAAK,WAAW,UAAU,CAAA,EAC7BA,CAAAA,CAAG,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,CAE7B,OAAO,cAAcA,CAAAA,CAAG,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAE7C,CACA,OAAO,IAAA,CAAK,UAAU,IAAA,CAAK,QAAA,CAAUA,CAAE,CACzC,CACA,GAAIT,CAAAA,CAAI,UAAA,CACN,OAAO,IAAI,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,UAAU,CAAC,CAAA,CAAA,CAEzC,CAEA,YAAA,CAAaA,CAAAA,CAAU,CACrB,IAAMwB,CAAAA,CAAexB,CAAAA,CAAI,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,CAC3ByB,CAAAA,CAAAA,CACJD,EAAa,UAAA,CAAW,GAAG,CAAA,CAAIA,CAAAA,CAAa,MAAM,CAAA,CAAG,EAAE,CAAA,CAAIA,CAAAA,EAC3D,aAAY,CACRpD,CAAAA,CAAO4B,CAAAA,CAAI,IAAA,CAAOA,EAAI,IAAA,CAAK,GAAA,CAAKE,CAAAA,EAAW,IAAA,CAAK,MAAMA,CAAC,CAAC,CAAA,CAAI,GAE5DwB,CAAAA,CAAUvD,EAAAA,CAAiBsD,CAAI,CAAA,CACrC,GAAIC,CAAAA,CACF,OAAOA,CAAAA,CAAQtD,CAAI,CAAA,CAGrB,MAAM,IAAI,KAAA,CAAM,qBAAqBoD,CAAY,CAAA,CAAE,CACrD,CAEA,YAAYxB,CAAAA,CAAU,CACpB,IAAM2B,CAAAA,CAAY,KAAK,KAAA,CAAM3B,CAAAA,CAAI,WAAW,CAAA,CACxB2B,CAAAA,CAAU,IAAA,KACxBC,CAAAA,CAAgB,IAAA,CAAK,UAAU,QAAA,CAAUD,CAAS,CAAA,CAElDE,CAAAA,CAAe7B,EAAI,UAAA,CAAa,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,UAAU,CAAA,CAAI2B,CAAAA,CAChDE,CAAAA,CAAa,IAAA,GAAS,QAAA,CAAW,EAAA,CAAK,GAAA,CAAMA,EAAa,IAAA,KAKtEC,CAAAA,CACJD,CAAAA,CAAa,IAAA,GAAS,SAAW,QAAA,CAAW,IAAA,CAAK,SAAA,CAAU,QAAA,CAAUA,CAAY,CAAA,CAE7EE,CAAAA,CAAa,CAAC,CAAC/B,EAAI,QAAA,CACnBC,CAAAA,CAAUD,CAAAA,CAAI,MAAA,CAASA,EAAI,MAAA,CAAO,GAAA,CAAKE,CAAAA,EAAW,IAAA,CAAK,MAAMA,CAAC,CAAC,CAAA,CAAI,GAKzE,GAFmB,CAAC,CAACF,CAAAA,CAAI,YAAA,CAET,CACd,IAAMgC,CAAAA,CAAgB,KAAK,KAAA,CAAMhC,CAAAA,CAAI,kBAAkB,CAAA,CACjDiC,EAAgB,IAAA,CAAK,KAAA,CAAMjC,CAAAA,CAAI,kBAAkB,EAChCA,CAAAA,CAAI,iBAAA,EAIzBC,CAAAA,CAAQ,IAAA,CAAK,gCAAgC,CAAA,CAG/C,IAAMiC,EAAAA,CAAmB,IAAA,CAAK,UAAUF,CAAAA,CAAc,OAAO,CAAA,CACvDG,EAAAA,CAAmB,KAAK,SAAA,CAAUF,CAAAA,CAAc,OAAO,CAAA,CAE7D,OAAIF,CAAAA,CACK;AAAA,YAAA,EACDD,CAAY,qBAAqBA,CAAY,CAAA;AAAA,UAAA,EAC/CF,CAAa,MAAME,CAAY,CAAA;AAAA,yCAAA,EACAE,CAAAA,CAAc,IAAI,CAAA,SAAA,EAAYE,EAAgB,CAAA;AAAA;AAAA;AAAA,YAAA,EAG3EjC,EAAQ,IAAA,CAAK;AAAA,YAAA,CAAgB,CAAC;AAAA,kCAAA,EACRgC,CAAAA,CAAc,IAAI,CAAA,WAAA,EAAcE,EAAgB,CAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAKrE;AAAA,YAAA,EACDL,CAAY,CAAA;AAAA,UAAA,EACdF,CAAa,CAAA;AAAA,yCAAA,EACkBI,CAAAA,CAAc,IAAI,CAAA,gBAAA,EAAmBE,EAAgB,CAAA;AAAA;AAAA;AAAA,YAAA,EAGlFjC,EAAQ,IAAA,CAAK;AAAA,YAAA,CAAgB,CAAC;AAAA,kCAAA,EACRgC,CAAAA,CAAc,IAAI,CAAA,WAAA,EAAcE,EAAgB,CAAA;AAAA,aAAA,EACrEL,CAAY,CAAA;AAAA;AAAA,QAAA,CAIvB,CAGA,OAAIC,CAAAA,CACK;AAAA,UAAA,EACDD,CAAY,qBAAqBA,CAAY,CAAA;AAAA,QAAA,EAC/CF,CAAa,MAAME,CAAY,CAAA;AAAA;AAAA;AAAA,UAAA,EAG7B7B,EAAQ,IAAA,CAAK;AAAA,UAAA,CAAc,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAM3B;AAAA,UAAA,EACD6B,CAAY,CAAA;AAAA,QAAA,EACdF,CAAa,CAAA;AAAA;AAAA;AAAA,UAAA,EAGX3B,EAAQ,IAAA,CAAK;AAAA,UAAA,CAAc,CAAC;AAAA;AAAA,WAAA,EAE3B6B,CAAY,CAAA;AAAA;AAAA,MAAA,CAIvB,CACF,CAAA,CAEaM,EAAAA,CAAW,IAAIzC,EAAAA,CC9Z5B,IAAM0C,EAAAA,CAAwC,GAEvC,SAASC,EAAAA,CAAgBb,EAAcc,CAAAA,CAAsB,CAClEF,EAAAA,CAASZ,CAAAA,CAAK,aAAa,CAAA,CAAIc,EACjC,CAEO,SAASC,GAAWf,CAAAA,CAA2B,CACpD,IAAMc,CAAAA,CAAUF,EAAAA,CAASZ,EAAK,WAAA,EAAa,EAC3C,GAAI,CAACc,EACH,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgCd,CAAI,CAAA,CAAE,CAAA,CAExD,OAAOc,CACT,CAIAD,GAAgB,MAAA,CAAQ,CACtB,KAAA,CAAQG,CAAAA,EACF,OAAOA,CAAAA,EAAY,QAAA,CAAiBA,EACjC,IAAA,CAAK,KAAA,CAAMA,CAAO,CAAA,CAE3B,SAAA,CAAYC,CAAAA,EAAS,IAAA,CAAK,UAAUA,CAAAA,CAAM,IAAA,CAAM,CAAC,CACnD,CAAC,EAGD,IAAMC,EAAAA,CAAa,IAAIC,wBAAAA,CAAW,CAChC,iBAAkB,KAAA,CAClB,mBAAA,CAAqB,IACrB,YAAA,CAAc,GAAA,CACd,OAAQ,IACV,CAAC,CAAA,CAEDN,EAAAA,CAAgB,MAAO,CACrB,KAAA,CAAO,CAACG,CAAAA,CAAS/B,CAAAA,GACX,OAAO+B,CAAAA,EAAY,QAAA,CAAiBA,CAAAA,CACzB,IAAII,wBAAU,CAC3B,gBAAA,CAAkB,MAClB,cAAA,CAAgB,IAAA,CAChB,GAAGnC,CACL,CAAC,CAAA,CACa,KAAA,CAAM+B,CAAO,CAAA,CAE7B,SAAA,CAAW,CAACC,CAAAA,CAAMhC,CAAAA,GAAY,CAC5B,IAAMoC,CAAAA,CAAUpC,GAAS,aAAA,EAAiBA,CAAAA,EAAS,SAAS,CAAC,CAAA,EAAK,OAUlE,OAAA,CATgBA,CAAAA,CACZ,IAAIkC,wBAAAA,CAAW,CACb,gBAAA,CAAkB,KAAA,CAClB,oBAAqB,GAAA,CACrB,YAAA,CAAc,IACd,MAAA,CAAQ,IAAA,CACR,GAAGlC,CACL,CAAC,CAAA,CACDiC,EAAAA,EACW,MAAM,CAAE,CAACG,CAAO,EAAGJ,CAAK,CAAC,CAC1C,CACF,CAAC,CAAA,CAGDJ,GAAgB,QAAA,CAAU,CACxB,MAAQG,CAAAA,EAAYA,CAAAA,CACpB,UAAYC,CAAAA,EAASA,CACvB,CAAC,CAAA,CClDD,eAAsBK,GACpBC,CAAAA,CACAtC,CAAAA,CACsC,CAEtC,GAAIA,CAAAA,EAAS,KAAA,CAAO,CAClB,IAAMuC,CAAAA,CAAa,MAAMvC,EAAQ,KAAA,CAAM,QAAA,CAASsC,CAAW,CAAA,CAC3D,GAAIC,CAAAA,CACF,OAAOC,GAA6BD,CAAU,CAElD,CAGA,IAAME,CAAAA,CAAYpF,GAAW,QAAA,CAASiF,CAAW,CAAA,CAEjD,GAAIG,EAAU,MAAA,CAAO,MAAA,CAAS,EAC5B,MAAM,IAAI,MAAM,CAAA,eAAA,EAAkBA,CAAAA,CAAU,OAAO,CAAC,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAGjEjF,EAAO,KAAA,CAAQiF,CAAAA,CAAU,OACzB,IAAMC,CAAAA,CAAMlF,CAAAA,CAAO,KAAA,GAEnB,GAAIA,CAAAA,CAAO,OAAO,MAAA,CAAS,CAAA,CACzB,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmBA,CAAAA,CAAO,OAAO,CAAC,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAG/D,GAAM,CAAE,IAAA,CAAMmF,CAAQ,CAAA,CAAIjB,GAAS,KAAA,CAAMgB,CAAG,EAEtCE,CAAAA,CAAOC,mBAAAA,CAAS,GAAGF,CAAAA,CAAS,CAChC,YAAa,CAAA,CACb,oBAAA,CAAsB,KACtB,gBAAA,CAAkB,IACpB,CAAC,CAAA,CAGD,OAAI3C,GAAS,KAAA,EACX,MAAMA,CAAAA,CAAQ,KAAA,CAAM,KAAKsC,CAAAA,CAAaM,CAAI,EAGrCJ,EAAAA,CAA6BI,CAAI,CAC1C,CAEA,SAASJ,EAAAA,CAA6BI,CAAAA,CAA2C,CAG/E,IAAME,CAAAA,CADU,IAAI,QAAA,CAASF,CAAI,GACP,CAGpBG,CAAAA,CAAM,CACV,KAAA,CAAO,CAACC,CAAAA,CAAgBjB,CAAAA,CAAiB/B,IAChC8B,EAAAA,CAAWkB,CAAM,EAAE,KAAA,CAAMjB,CAAAA,CAAS/B,CAAO,CAAA,CAElD,SAAA,CAAW,CAACgD,CAAAA,CAAgBhB,CAAAA,CAAWhC,IAC9B8B,EAAAA,CAAWkB,CAAM,EAAE,SAAA,CAAUhB,CAAAA,CAAMhC,CAAO,CAErD,EAGMiD,CAAAA,EAAWC,CAAAA,EACRJ,EAAUI,CAAAA,CAAOH,CAAG,GAG7B,OAAAE,CAAAA,CAAO,IAAA,CAAOL,CAAAA,CACPK,CACT,CAgBO,SAASE,GAAQC,CAAAA,CAAAA,GAAkCC,CAAAA,CAAuB,CAC/E,OAAOD,CAAAA,CAAQ,MAAA,CAAO,CAACE,EAAK3F,CAAAA,CAAK4F,CAAAA,GAAMD,EAAM3F,CAAAA,EAAO0F,CAAAA,CAAOE,CAAC,CAAA,EAAK,EAAA,CAAA,CAAK,EAAE,CAC1E,CAKO,SAASC,EAAAA,CAAMzC,CAAAA,CAAsB,CAC1C,OAAO,CAAA,OAAA,EAAUA,CAAI,CAAA,4BAAA,CACvB","file":"index.cjs","sourcesContent":["import { createToken, Lexer } from 'chevrotain';\n\nexport const WhiteSpace = createToken({\n name: 'WhiteSpace',\n pattern: /\\s+/,\n group: Lexer.SKIPPED,\n});\n\n// Comments\nexport const LineComment = createToken({\n name: 'LineComment',\n pattern: /\\/\\/[^\\n\\r]*/,\n group: Lexer.SKIPPED,\n});\n\nexport const BlockComment = createToken({\n name: 'BlockComment',\n pattern: /\\/\\*[\\s\\S]*?\\*\\//,\n group: Lexer.SKIPPED,\n});\n\nexport const Identifier = createToken({\n name: 'Identifier',\n pattern: /[a-zA-Z_$][a-zA-Z0-9_.\\[\\]]*/,\n});\n\nexport const QuotedIdentifier = createToken({\n name: 'QuotedIdentifier',\n pattern: /`([^`\\\\]|\\\\.)*`/,\n});\n\nexport const From = createToken({ name: 'From', pattern: /from/i, longer_alt: Identifier });\nexport const To = createToken({ name: 'To', pattern: /to/i, longer_alt: Identifier });\nexport const Transform = createToken({\n name: 'Transform',\n pattern: /transform/i,\n longer_alt: Identifier,\n});\nexport const Set = createToken({ name: 'Set', pattern: /set/i, longer_alt: Identifier });\nexport const Section = createToken({\n name: 'Section',\n pattern: /section/i,\n longer_alt: Identifier,\n});\nexport const Multiple = createToken({\n name: 'Multiple',\n pattern: /multiple/i,\n longer_alt: Identifier,\n});\nexport const Clone = createToken({ name: 'Clone', pattern: /clone/i, longer_alt: Identifier });\nexport const Delete = createToken({ name: 'Delete', pattern: /delete/i, longer_alt: Identifier });\nexport const Define = createToken({ name: 'Define', pattern: /define/i, longer_alt: Identifier });\nexport const Modify = createToken({ name: 'Modify', pattern: /modify/i, longer_alt: Identifier });\nexport const If = createToken({ name: 'If', pattern: /if/i, longer_alt: Identifier });\nexport const Else = createToken({ name: 'Else', pattern: /else/i, longer_alt: Identifier });\nexport const True = createToken({ name: 'True', pattern: /true/i, longer_alt: Identifier });\nexport const False = createToken({ name: 'False', pattern: /false/i, longer_alt: Identifier });\nexport const Null = createToken({ name: 'Null', pattern: /null/i, longer_alt: Identifier });\n\n// Comparison operators (must come before single-char operators)\nexport const EqualsEquals = createToken({ name: 'EqualsEquals', pattern: /==/ });\nexport const EqualsEqualsEquals = createToken({ name: 'EqualsEqualsEquals', pattern: /===/ });\nexport const NotEquals = createToken({ name: 'NotEquals', pattern: /!=/ });\nexport const NotEqualsEquals = createToken({ name: 'NotEqualsEquals', pattern: /!==/ });\nexport const LessThanOrEqual = createToken({ name: 'LessThanOrEqual', pattern: /<=/ });\nexport const GreaterThanOrEqual = createToken({ name: 'GreaterThanOrEqual', pattern: />=/ });\nexport const LessThan = createToken({ name: 'LessThan', pattern: /</ });\nexport const GreaterThan = createToken({ name: 'GreaterThan', pattern: />/ });\n\n// Logical operators\nexport const And = createToken({ name: 'And', pattern: /&&/ });\nexport const Or = createToken({ name: 'Or', pattern: /\\|\\|/ });\nexport const Not = createToken({ name: 'Not', pattern: /!/ });\n\nexport const Equals = createToken({ name: 'Equals', pattern: /=/ });\nexport const Plus = createToken({ name: 'Plus', pattern: /\\+/ });\nexport const Minus = createToken({ name: 'Minus', pattern: /-/ });\nexport const Times = createToken({ name: 'Times', pattern: /\\*/ });\nexport const Divide = createToken({ name: 'Divide', pattern: /\\// });\nexport const LParen = createToken({ name: 'LParen', pattern: /\\(/ });\nexport const RParen = createToken({ name: 'RParen', pattern: /\\)/ });\nexport const Comma = createToken({ name: 'Comma', pattern: /,/ });\n\nexport const StringLiteral = createToken({\n name: 'StringLiteral',\n pattern: /\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/,\n});\n\nexport const NumericLiteral = createToken({\n name: 'NumericLiteral',\n pattern: /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/,\n});\n\nexport const allTokens = [\n WhiteSpace,\n LineComment,\n BlockComment,\n From,\n To,\n Transform,\n Set,\n Section,\n Multiple,\n Clone,\n Delete,\n Define,\n Modify,\n If,\n Else,\n True,\n False,\n Null,\n\n // Multi-character operators\n EqualsEqualsEquals,\n EqualsEquals,\n NotEqualsEquals,\n NotEquals,\n LessThanOrEqual,\n GreaterThanOrEqual,\n And,\n Or,\n // Single-character operators\n Equals,\n LessThan,\n GreaterThan,\n Not,\n Plus,\n Minus,\n Times,\n Divide,\n LParen,\n RParen,\n Comma,\n StringLiteral,\n NumericLiteral,\n QuotedIdentifier,\n Identifier,\n];\n\nexport const MorphLexer = new Lexer(allTokens);\n","import { CstParser } from 'chevrotain';\nimport * as t from './lexer.js';\n\nexport class MorphParser extends CstParser {\n constructor() {\n super(t.allTokens);\n this.performSelfAnalysis();\n }\n\n public query = this.RULE('query', () => {\n this.CONSUME(t.From);\n this.SUBRULE(this.typeFormat, { LABEL: 'sourceType' });\n this.CONSUME(t.To);\n this.SUBRULE1(this.typeFormat, { LABEL: 'targetType' });\n this.OPTION(() => {\n this.CONSUME(t.Transform);\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n });\n });\n\n private typeFormat = this.RULE('typeFormat', () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'name' });\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.typeFormatParameter, { LABEL: 'params' });\n },\n });\n this.CONSUME(t.RParen);\n });\n });\n\n private typeFormatParameter = this.RULE('typeFormatParameter', () => {\n this.OR([\n {\n GATE: () => this.LA(2).tokenType === t.Equals,\n ALT: () => this.SUBRULE(this.namedParameter),\n },\n { ALT: () => this.SUBRULE(this.literal) },\n ]);\n });\n\n private namedParameter = this.RULE('namedParameter', () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'key' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.literal, { LABEL: 'value' });\n });\n\n private anyIdentifier = this.RULE('anyIdentifier', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier) },\n { ALT: () => this.CONSUME(t.QuotedIdentifier) },\n ]);\n });\n\n private literal = this.RULE('literal', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.StringLiteral) },\n { ALT: () => this.CONSUME(t.NumericLiteral) },\n { ALT: () => this.CONSUME(t.True) },\n { ALT: () => this.CONSUME(t.False) },\n { ALT: () => this.CONSUME(t.Null) },\n ]);\n });\n\n private action = this.RULE('action', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.setRule) },\n { ALT: () => this.SUBRULE(this.modifyRule) },\n { ALT: () => this.SUBRULE(this.sectionRule) },\n { ALT: () => this.SUBRULE(this.cloneRule) },\n { ALT: () => this.SUBRULE(this.deleteRule) },\n { ALT: () => this.SUBRULE(this.ifAction) },\n { ALT: () => this.SUBRULE(this.defineRule) },\n ]);\n });\n\n private deleteRule = this.RULE('deleteRule', () => {\n this.CONSUME(t.Delete);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'field' });\n });\n\n private ifAction = this.RULE('ifAction', () => {\n this.CONSUME(t.If);\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression, { LABEL: 'condition' });\n this.CONSUME(t.RParen);\n this.CONSUME2(t.LParen); // Start 'then' block\n this.MANY(() => {\n this.SUBRULE(this.action, { LABEL: 'thenActions' });\n });\n this.CONSUME2(t.RParen); // End 'then' block\n this.OPTION(() => {\n this.CONSUME(t.Else);\n this.CONSUME3(t.LParen); // Start 'else' block\n this.MANY2(() => {\n this.SUBRULE2(this.action, { LABEL: 'elseActions' });\n });\n this.CONSUME3(t.RParen); // End 'else' block\n });\n });\n\n private cloneRule = this.RULE('cloneRule', () => {\n this.CONSUME(t.Clone);\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'fields' });\n },\n });\n this.CONSUME(t.RParen);\n });\n });\n\n private setRule = this.RULE('setRule', () => {\n this.CONSUME(t.Set);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private modifyRule = this.RULE('modifyRule', () => {\n this.CONSUME(t.Modify);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private expression = this.RULE('expression', () => {\n this.SUBRULE(this.logicalOr);\n });\n\n private logicalOr = this.RULE('logicalOr', () => {\n this.SUBRULE(this.logicalAnd, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.Or);\n this.SUBRULE1(this.logicalAnd, { LABEL: 'rhs' });\n });\n });\n\n private logicalAnd = this.RULE('logicalAnd', () => {\n this.SUBRULE(this.comparison, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.And);\n this.SUBRULE1(this.comparison, { LABEL: 'rhs' });\n });\n });\n\n private comparison = this.RULE('comparison', () => {\n this.SUBRULE(this.addition, { LABEL: 'lhs' });\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.EqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.EqualsEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThan, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThan, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.addition, { LABEL: 'rhs' });\n });\n });\n\n private addition = this.RULE('addition', () => {\n this.SUBRULE(this.multiplication, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Plus, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.multiplication, { LABEL: 'rhs' });\n });\n });\n\n private multiplication = this.RULE('multiplication', () => {\n this.SUBRULE(this.unaryExpression, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Times, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Divide, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.unaryExpression, { LABEL: 'rhs' });\n });\n });\n\n private unaryExpression = this.RULE('unaryExpression', () => {\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'sign' }) },\n { ALT: () => this.CONSUME(t.Not, { LABEL: 'sign' }) },\n ]);\n });\n this.SUBRULE(this.atomic);\n });\n\n private atomic = this.RULE('atomic', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.literal) },\n {\n GATE: () => this.LA(2).tokenType === t.LParen,\n ALT: () => this.SUBRULE(this.functionCall),\n },\n { ALT: () => this.SUBRULE(this.anyIdentifier) },\n {\n ALT: () => {\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression);\n this.CONSUME(t.RParen);\n },\n },\n ]);\n });\n\n private functionCall = this.RULE('functionCall', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier, { LABEL: 'name' }) },\n { ALT: () => this.CONSUME(t.If, { LABEL: 'name' }) },\n ]);\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.expression, { LABEL: 'args' });\n },\n });\n this.CONSUME(t.RParen);\n });\n\n private sectionRule = this.RULE('sectionRule', () => {\n this.CONSUME(t.Section);\n this.OPTION(() => {\n this.CONSUME(t.Multiple);\n });\n this.SUBRULE(this.anyIdentifier, { LABEL: 'sectionName' });\n this.CONSUME(t.LParen);\n\n // NEW: Check if this is a subquery section (from X to Y ...)\n this.OPTION1(() => {\n this.CONSUME(t.From, { LABEL: 'subqueryFrom' });\n this.SUBRULE(this.typeFormat, { LABEL: 'subquerySourceType' });\n this.CONSUME(t.To, { LABEL: 'subqueryTo' });\n this.SUBRULE1(this.typeFormat, { LABEL: 'subqueryTargetType' });\n this.OPTION2(() => {\n this.CONSUME(t.Transform, { LABEL: 'subqueryTransform' });\n });\n });\n\n // Actions (for both regular sections and subquery transform blocks)\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n\n this.CONSUME(t.RParen);\n this.OPTION3(() => {\n this.CONSUME1(t.From, { LABEL: 'followFrom' });\n this.SUBRULE2(this.anyIdentifier, { LABEL: 'followPath' });\n });\n });\n\n private defineRule = this.RULE('defineRule', () => {\n this.CONSUME(t.Define);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n}\n\nexport const parser = new MorphParser();\n","/**\n * Type for a function handler that generates JavaScript code for a DSL function call.\n * @param args - The compiled JavaScript strings for each argument.\n * @returns The generated JavaScript code for the function call.\n */\nexport type FunctionHandler = (args: string[]) => string;\n\n/**\n * Registry of available transformation functions in the DSL.\n */\nexport const functionRegistry: Record<string, FunctionHandler> = {\n substring: (args: string[]) => {\n if (args.length < 2) {\n throw new Error('substring() requires at least 2 arguments (string, start, [length])');\n }\n const [str, start, length] = args;\n if (length !== undefined) {\n // Third parameter is length, so calculate end as start + length\n return `String(${str}).slice(${start}, (${start}) + (${length}))`;\n }\n // Only 2 arguments: slice from start to end of string\n return `String(${str}).slice(${start})`;\n },\n if: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('if() requires exactly 3 arguments (condition, trueValue, falseValue)');\n }\n const [condition, trueValue, falseValue] = args;\n // Compile to ternary operator\n // Wrap in parentheses to ensure precedence is correct\n return `((${condition}) ? (${trueValue}) : (${falseValue}))`;\n },\n text: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('text() requires exactly 1 argument (string or number)');\n }\n const [str] = args;\n return `String(${str})`;\n },\n replace: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('replace() requires exactly 3 arguments (string, search, replacement)');\n }\n const [str, search, replacement] = args;\n return `String(${str}).replace(${search}, ${replacement})`;\n },\n number: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('number() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(${str})`;\n },\n extractnumber: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('extractNumber() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(String(${str}).match(/\\\\d+(\\\\.\\\\d+)?/)[0])`;\n },\n uppercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('uppercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toUpperCase()`;\n },\n lowercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('lowercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toLowerCase()`;\n },\n xmlnode: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('xmlnode() requires at least 1 argument (string)');\n }\n const value = args[0];\n const attributesList = [...args.slice(1)];\n let attributes = '';\n if (attributesList.length > 0) {\n let [list, chunkSize] = [attributesList, 2];\n list = [...Array(Math.ceil(list.length / chunkSize))]\n .map((_) => list.splice(0, chunkSize))\n .map(([key, value]) => {\n let attrKey = key;\n if (key.startsWith('\"') || key.startsWith(\"'\")) {\n attrKey = `\"$${key.slice(1, -1)}\"`;\n } else {\n attrKey = `[\"$\"+${key}]`;\n }\n return `${attrKey}:${value ? value : 'null'}`;\n });\n attributes = ',' + list.join(',');\n } else {\n return value;\n }\n return `{_:${value}${attributes}}`;\n },\n split: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('split() requires at least 1 argument (string)');\n }\n const [str, separator, limit] = args;\n const sep = separator !== undefined ? separator : '\"\"';\n const lim = limit !== undefined ? `, ${limit}` : '';\n return `String(${str}).split(${sep}${lim})`;\n },\n to_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('to_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${val})))) : Buffer.from(String(${val}), 'utf-8').toString('base64'))`;\n },\n from_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('from_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${val})))) : Buffer.from(String(${val}), 'base64').toString('utf-8'))`;\n },\n aslist: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('aslist() requires exactly 1 argument');\n }\n const [val] = args;\n return `(Array.isArray(${val}) ? ${val} : (${val} == null ? [] : [${val}]))`;\n },\n};\n","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\n\nconst BaseCstVisitor = parser.getBaseCstVisitorConstructor();\n\nexport class MorphCompiler extends (BaseCstVisitor as any) {\n // Context for modify directive - determines whether to read from 'source' or 'target'\n private readFrom: 'source' | 'target' = 'source';\n\n constructor() {\n super();\n this.validateVisitor();\n }\n\n /**\n * Visit with a temporary context change\n */\n private visitWithContext(node: any, context: { readFrom: 'source' | 'target' }) {\n const previousReadFrom = this.readFrom;\n this.readFrom = context.readFrom;\n const result = this.visit(node);\n this.readFrom = previousReadFrom;\n return result;\n }\n\n query(ctx: any) {\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (!ctx.Transform) {\n actions.push('Object.assign(target, source);');\n }\n\n const sourceType = this.visit(ctx.sourceType);\n const targetType = this.visit(ctx.targetType);\n\n // Helper to serialize types for generated code\n const sourceTypeName = sourceType.name;\n const targetTypeName = targetType.name;\n\n const sourceOptions = JSON.stringify(sourceType.options);\n const targetOptions = JSON.stringify(targetType.options);\n\n const code = `\n return function(input, env) {\n // 1. Parse Input\n const source = env.parse('${sourceTypeName}', input, ${sourceOptions});\n const _rootSource = source;\n \n // 2. Transform\n const target = {};\n const _rootTarget = target;\n ${actions.join('\\n ')}\n\n // 3. Serialize Output\n return env.serialize('${targetTypeName}', target, ${targetOptions});\n }\n `;\n\n return {\n code,\n sourceType,\n targetType,\n };\n }\n\n typeFormat(ctx: any) {\n const id = this.visit(ctx.name);\n const options: any = { params: [] };\n if (ctx.params) {\n ctx.params.forEach((p: any) => {\n const val = this.visit(p);\n if (typeof val === 'object' && 'key' in val) {\n options[val.key] = this.parseLiteral(val.value);\n } else {\n // Positional parameter - collect into params array\n options.params.push(this.parseLiteral(val));\n }\n });\n }\n return { name: id.name, options };\n }\n\n typeFormatParameter(ctx: any) {\n if (ctx.namedParameter) {\n return this.visit(ctx.namedParameter);\n }\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n }\n\n namedParameter(ctx: any) {\n const key = this.visit(ctx.key).name;\n const value = this.visit(ctx.value);\n return { key, value };\n }\n\n private parseLiteral(image: string) {\n if (image === 'true') return true;\n if (image === 'false') return false;\n if (image === 'null') return null;\n if (\n (image.startsWith('\"') && image.endsWith('\"')) ||\n (image.startsWith(\"'\") && image.endsWith(\"'\"))\n ) {\n return image.slice(1, -1);\n }\n const num = Number(image);\n if (!isNaN(num)) {\n return num;\n }\n return image;\n }\n\n private genAccess(base: string, id: { name: string; quoted: boolean }) {\n if (id.quoted || (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))) {\n return `${base}[\"${id.name}\"]`;\n }\n return `${base}.${id.name}`;\n }\n\n anyIdentifier(ctx: any) {\n if (ctx.Identifier) {\n return { name: ctx.Identifier[0].image, quoted: false };\n }\n if (ctx.QuotedIdentifier) {\n // Remove backticks and unescape\n const name = ctx.QuotedIdentifier[0].image.slice(1, -1).replace(/\\\\(.)/g, '$1');\n return { name, quoted: true };\n }\n }\n\n literal(ctx: any) {\n if (ctx.StringLiteral) {\n return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n return ctx.NumericLiteral[0].image;\n }\n if (ctx.True) return 'true';\n if (ctx.False) return 'false';\n if (ctx.Null) return 'null';\n }\n\n action(ctx: any) {\n if (ctx.setRule) {\n return this.visit(ctx.setRule);\n }\n if (ctx.modifyRule) {\n return this.visit(ctx.modifyRule);\n }\n if (ctx.sectionRule) {\n return this.visit(ctx.sectionRule);\n }\n if (ctx.cloneRule) {\n return this.visit(ctx.cloneRule);\n }\n if (ctx.ifAction) {\n return this.visit(ctx.ifAction);\n }\n if (ctx.deleteRule) {\n return this.visit(ctx.deleteRule);\n }\n if (ctx.defineRule) {\n return this.visit(ctx.defineRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\n return `delete ${this.genAccess('target', field)};`;\n }\n\n ifAction(ctx: any) {\n const condition = this.visit(ctx.condition);\n const thenActions = ctx.thenActions\n ? ctx.thenActions.map((a: any) => this.visit(a)).join('\\n')\n : '';\n const elseBlock = ctx.elseActions\n ? `else { ${ctx.elseActions.map((a: any) => this.visit(a)).join('\\n')} }`\n : '';\n\n return `if (${condition}) {\n ${thenActions}\n } ${elseBlock}`;\n }\n\n cloneRule(ctx: any) {\n if (ctx.fields) {\n const identifiers = ctx.fields.map((f: any) => this.visit(f));\n return identifiers\n .map((id: any) => `${this.genAccess('target', id)} = ${this.genAccess('source', id)};`)\n .join('\\n ');\n }\n return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('source', left)} = ${right};`;\n }\n\n expression(ctx: any) {\n return this.visit(ctx.logicalOr);\n }\n\n logicalOr(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} || ${rhs}`;\n }\n }\n return result;\n }\n\n logicalAnd(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} && ${rhs}`;\n }\n }\n return result;\n }\n\n comparison(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n const op = ctx.ops[0].image;\n const rhs = this.visit(ctx.rhs[0]);\n result = `${result} ${op} ${rhs}`;\n }\n return result;\n }\n\n addition(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n unaryExpression(ctx: any) {\n const atomic = this.visit(ctx.atomic);\n if (ctx.sign) {\n const op = ctx.sign[0].image;\n return `${op}${atomic}`;\n }\n return atomic;\n }\n\n atomic(ctx: any) {\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n if (ctx.functionCall) {\n return this.visit(ctx.functionCall);\n }\n if (ctx.anyIdentifier) {\n const id = this.visit(ctx.anyIdentifier);\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n if (\n id.name === '_source' ||\n id.name.startsWith('_source.') ||\n id.name.startsWith('_source[')\n ) {\n return `_rootSource${id.name.substring(7)}`;\n }\n if (\n id.name === '_target' ||\n id.name.startsWith('_target.') ||\n id.name.startsWith('_target[')\n ) {\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n return this.genAccess(this.readFrom, id);\n }\n if (ctx.expression) {\n return `(${this.visit(ctx.expression)})`;\n }\n }\n\n functionCall(ctx: any) {\n const originalName = ctx.name[0].image;\n const name = (\n originalName.startsWith('`') ? originalName.slice(1, -1) : originalName\n ).toLowerCase();\n const args = ctx.args ? ctx.args.map((a: any) => this.visit(a)) : [];\n\n const handler = functionRegistry[name];\n if (handler) {\n return handler(args);\n }\n\n throw new Error(`Unknown function: ${originalName}`);\n }\n\n sectionRule(ctx: any) {\n const sectionId = this.visit(ctx.sectionName);\n const sectionName = sectionId.name;\n const sectionAccess = this.genAccess('target', sectionId);\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n const followPath = followPathId.name === 'parent' ? '' : '.' + followPathId.name;\n // Note: followPath currently only supports simple paths or 'parent'.\n // If it's a quoted identifier, genAccess would return target[\"name\"].\n // But section handling uses '.' + followPath.\n // I should probably use genAccess here too for consistency, but it needs to be relative to 'source'.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n // Check if this is a subquery section\n const isSubquery = !!ctx.subqueryFrom;\n\n if (isSubquery) {\n const subSourceType = this.visit(ctx.subquerySourceType);\n const subTargetType = this.visit(ctx.subqueryTargetType);\n const hasTransform = !!ctx.subqueryTransform;\n\n if (!hasTransform) {\n // Pure format conversion - copy all fields\n actions.push('Object.assign(target, source);');\n }\n\n const subSourceOptions = JSON.stringify(subSourceType.options);\n const subTargetOptions = JSON.stringify(subTargetType.options);\n\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const subSource = env.parse('${subSourceType.name}', item, ${subSourceOptions});\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target, ${subTargetOptions});\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const subSource = env.parse('${subSourceType.name}', innerSource, ${subSourceOptions});\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target, ${subTargetOptions});\n })(${sourceAccess});\n }\n `;\n }\n }\n\n // Regular section handling (unchanged)\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const source = item;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n })(${sourceAccess});\n }\n `;\n }\n }\n}\n\nexport const compiler = new MorphCompiler();\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nexport interface DataAdapter {\n parse(content: string, options?: any): any;\n serialize(data: any, options?: any): string;\n}\n\nconst adapters: Record<string, DataAdapter> = {};\n\nexport function registerAdapter(name: string, adapter: DataAdapter) {\n adapters[name.toLowerCase()] = adapter;\n}\n\nexport function getAdapter(name: string): DataAdapter {\n const adapter = adapters[name.toLowerCase()];\n if (!adapter) {\n throw new Error(`No adapter found for format: ${name}`);\n }\n return adapter;\n}\n\n// Default JSON Adapter\n\nregisterAdapter('json', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n return JSON.parse(content);\n },\n serialize: (data) => JSON.stringify(data, null, 2),\n});\n\n// Default XML Adapter\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n});\n\nregisterAdapter('xml', {\n parse: (content, options) => {\n if (typeof content !== 'string') return content;\n const parser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n ...options,\n });\n return parser.parse(content);\n },\n serialize: (data, options) => {\n const rootTag = options?.rootGenerated ?? options?.params?.[0] ?? 'root';\n const builder = options\n ? new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n ...options,\n })\n : xmlBuilder;\n return builder.build({ [rootTag]: data });\n },\n});\n\n// Object Adapter (Identity)\nregisterAdapter('object', {\n parse: (content) => content, // Assumes input is already an object\n serialize: (data) => data, // Returns object directly\n});\n","import { MorphLexer } from './core/lexer.js';\nimport { parser } from './core/parser.js';\nimport { compiler } from './core/compiler.js';\nimport { getAdapter } from './runtime/adapters.js';\nimport { MorphQLCache } from './runtime/cache.js';\n\nexport { MorphQLCache };\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n}\n\nexport async function compile<Source = any, Target = any>(\n queryString: string,\n options?: CompileOptions\n): Promise<MorphEngine<Source, Target>> {\n // 1. Check Cache\n if (options?.cache) {\n const cachedCode = await options.cache.retrieve(queryString);\n if (cachedCode) {\n return createEngine<Source, Target>(cachedCode);\n }\n }\n\n // 2. Compile if miss\n const lexResult = MorphLexer.tokenize(queryString);\n\n if (lexResult.errors.length > 0) {\n throw new Error(`Lexing errors: ${lexResult.errors[0].message}`);\n }\n\n parser.input = lexResult.tokens;\n const cst = parser.query();\n\n if (parser.errors.length > 0) {\n throw new Error(`Parsing errors: ${parser.errors[0].message}`);\n }\n\n const { code: rawCode } = compiler.visit(cst);\n\n const code = beautify.js(rawCode, {\n indent_size: 2,\n space_in_empty_paren: true,\n end_with_newline: true,\n });\n\n // 3. Save to Cache\n if (options?.cache) {\n await options.cache.save(queryString, code);\n }\n\n return createEngine<Source, Target>(code);\n}\n\nfunction createEngine<Source, Target>(code: string): MorphEngine<Source, Target> {\n // Create the base transformation function\n const factory = new Function(code);\n const transform = factory() as (source: any, env: any) => any;\n\n // Environment with adapter lookups\n const env = {\n parse: (format: string, content: string, options?: any) => {\n return getAdapter(format).parse(content, options);\n },\n serialize: (format: string, data: any, options?: any) => {\n return getAdapter(format).serialize(data, options);\n },\n };\n\n // Return the format-aware engine\n const engine = ((input: Source) => {\n return transform(input, env) as Target;\n }) as MorphEngine<Source, Target>;\n\n engine.code = code;\n return engine;\n}\n\n/**\n * Tagged template helper for MorphQL queries.\n * Enables syntax highlighting in VSCode and provides a cleaner API.\n *\n * @example\n * ```typescript\n * const query = morphQL`\n * from json to xml\n * transform\n * set fullName = firstName + \" \" + lastName\n * `;\n * const engine = await compile(query);\n * ```\n */\nexport function morphQL(strings: TemplateStringsArray, ...values: any[]): string {\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n}\n\n/**\n * Legacy greet function for compatibility during migration.\n */\nexport function greet(name: string): string {\n return `Hello, ${name}! The Morph engine is ready.`;\n}\n"]}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import {createToken,Lexer,CstParser}from'chevrotain';import {XMLBuilder,XMLParser}from'fast-xml-parser';import ft from'js-beautify';var at=createToken({name:"WhiteSpace",pattern:/\s+/,group:Lexer.SKIPPED}),ht=createToken({name:"LineComment",pattern:/\/\/[^\n\r]*/,group:Lexer.SKIPPED}),ut=createToken({name:"BlockComment",pattern:/\/\*[\s\S]*?\*\//,group:Lexer.SKIPPED}),u=createToken({name:"Identifier",pattern:/[a-zA-Z_$][a-zA-Z0-9_.\[\]]*/}),O=createToken({name:"QuotedIdentifier",pattern:/`([^`\\]|\\.)*`/}),L=createToken({name:"From",pattern:/from/i,longer_alt:u}),d=createToken({name:"To",pattern:/to/i,longer_alt:u}),A=createToken({name:"Transform",pattern:/transform/i,longer_alt:u}),N=createToken({name:"Set",pattern:/set/i,longer_alt:u}),B=createToken({name:"Section",pattern:/section/i,longer_alt:u}),C=createToken({name:"Multiple",pattern:/multiple/i,longer_alt:u}),v=createToken({name:"Clone",pattern:/clone/i,longer_alt:u}),M=createToken({name:"Delete",pattern:/delete/i,longer_alt:u}),q=createToken({name:"Define",pattern:/define/i,longer_alt:u}),w=createToken({name:"Modify",pattern:/modify/i,longer_alt:u}),y=createToken({name:"If",pattern:/if/i,longer_alt:u}),P=createToken({name:"Else",pattern:/else/i,longer_alt:u}),b=createToken({name:"EqualsEquals",pattern:/==/}),I=createToken({name:"EqualsEqualsEquals",pattern:/===/}),_=createToken({name:"NotEquals",pattern:/!=/}),x=createToken({name:"NotEqualsEquals",pattern:/!==/}),F=createToken({name:"LessThanOrEqual",pattern:/<=/}),D=createToken({name:"GreaterThanOrEqual",pattern:/>=/}),j=createToken({name:"LessThan",pattern:/</}),z=createToken({name:"GreaterThan",pattern:/>/}),W=createToken({name:"And",pattern:/&&/}),G=createToken({name:"Or",pattern:/\|\|/}),Y=createToken({name:"Not",pattern:/!/}),f=createToken({name:"Equals",pattern:/=/}),Q=createToken({name:"Plus",pattern:/\+/}),R=createToken({name:"Minus",pattern:/-/}),k=createToken({name:"Times",pattern:/\*/}),V=createToken({name:"Divide",pattern:/\//}),l=createToken({name:"LParen",pattern:/\(/}),c=createToken({name:"RParen",pattern:/\)/}),$=createToken({name:"Comma",pattern:/,/}),T=createToken({name:"StringLiteral",pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/}),K=createToken({name:"NumericLiteral",pattern:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/}),H=[at,ht,ut,L,d,A,N,B,C,v,M,q,w,y,P,I,b,x,_,F,D,W,G,f,j,z,Y,Q,R,k,V,l,c,$,T,K,O,u],rt=new Lexer(H);var J=class extends CstParser{constructor(){super(H),this.performSelfAnalysis();}query=this.RULE("query",()=>{this.CONSUME(L),this.SUBRULE(this.typeFormat,{LABEL:"sourceType"}),this.CONSUME(d),this.SUBRULE1(this.typeFormat,{LABEL:"targetType"}),this.OPTION(()=>{this.CONSUME(A),this.MANY(()=>{this.SUBRULE(this.action);});});});typeFormat=this.RULE("typeFormat",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"name"}),this.OPTION(()=>{this.CONSUME(l),this.CONSUME(T,{LABEL:"parameter"}),this.CONSUME(c);});});anyIdentifier=this.RULE("anyIdentifier",()=>{this.OR([{ALT:()=>this.CONSUME(u)},{ALT:()=>this.CONSUME(O)}]);});literal=this.RULE("literal",()=>{this.OR([{ALT:()=>this.CONSUME(T)},{ALT:()=>this.CONSUME(K)}]);});action=this.RULE("action",()=>{this.OR([{ALT:()=>this.SUBRULE(this.setRule)},{ALT:()=>this.SUBRULE(this.modifyRule)},{ALT:()=>this.SUBRULE(this.sectionRule)},{ALT:()=>this.SUBRULE(this.cloneRule)},{ALT:()=>this.SUBRULE(this.deleteRule)},{ALT:()=>this.SUBRULE(this.ifAction)},{ALT:()=>this.SUBRULE(this.defineRule)}]);});deleteRule=this.RULE("deleteRule",()=>{this.CONSUME(M),this.SUBRULE(this.anyIdentifier,{LABEL:"field"});});ifAction=this.RULE("ifAction",()=>{this.CONSUME(y),this.CONSUME(l),this.SUBRULE(this.expression,{LABEL:"condition"}),this.CONSUME(c),this.CONSUME2(l),this.MANY(()=>{this.SUBRULE(this.action,{LABEL:"thenActions"});}),this.CONSUME2(c),this.OPTION(()=>{this.CONSUME(P),this.CONSUME3(l),this.MANY2(()=>{this.SUBRULE2(this.action,{LABEL:"elseActions"});}),this.CONSUME3(c);});});cloneRule=this.RULE("cloneRule",()=>{this.CONSUME(v),this.OPTION(()=>{this.CONSUME(l),this.MANY_SEP({SEP:$,DEF:()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"fields"});}}),this.CONSUME(c);});});setRule=this.RULE("setRule",()=>{this.CONSUME(N),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});});modifyRule=this.RULE("modifyRule",()=>{this.CONSUME(w),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});});expression=this.RULE("expression",()=>{this.SUBRULE(this.logicalOr);});logicalOr=this.RULE("logicalOr",()=>{this.SUBRULE(this.logicalAnd,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(G),this.SUBRULE1(this.logicalAnd,{LABEL:"rhs"});});});logicalAnd=this.RULE("logicalAnd",()=>{this.SUBRULE(this.comparison,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(W),this.SUBRULE1(this.comparison,{LABEL:"rhs"});});});comparison=this.RULE("comparison",()=>{this.SUBRULE(this.addition,{LABEL:"lhs"}),this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(b,{LABEL:"ops"})},{ALT:()=>this.CONSUME(I,{LABEL:"ops"})},{ALT:()=>this.CONSUME(_,{LABEL:"ops"})},{ALT:()=>this.CONSUME(x,{LABEL:"ops"})},{ALT:()=>this.CONSUME(F,{LABEL:"ops"})},{ALT:()=>this.CONSUME(D,{LABEL:"ops"})},{ALT:()=>this.CONSUME(j,{LABEL:"ops"})},{ALT:()=>this.CONSUME(z,{LABEL:"ops"})}]),this.SUBRULE1(this.addition,{LABEL:"rhs"});});});addition=this.RULE("addition",()=>{this.SUBRULE(this.multiplication,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(Q,{LABEL:"ops"})},{ALT:()=>this.CONSUME(R,{LABEL:"ops"})}]),this.SUBRULE1(this.multiplication,{LABEL:"rhs"});});});multiplication=this.RULE("multiplication",()=>{this.SUBRULE(this.unaryExpression,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(k,{LABEL:"ops"})},{ALT:()=>this.CONSUME(V,{LABEL:"ops"})}]),this.SUBRULE1(this.unaryExpression,{LABEL:"rhs"});});});unaryExpression=this.RULE("unaryExpression",()=>{this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(R,{LABEL:"sign"})},{ALT:()=>this.CONSUME(Y,{LABEL:"sign"})}]);}),this.SUBRULE(this.atomic);});atomic=this.RULE("atomic",()=>{this.OR([{ALT:()=>this.SUBRULE(this.literal)},{GATE:()=>this.LA(2).tokenType===l,ALT:()=>this.SUBRULE(this.functionCall)},{ALT:()=>this.SUBRULE(this.anyIdentifier)},{ALT:()=>{this.CONSUME(l),this.SUBRULE(this.expression),this.CONSUME(c);}}]);});functionCall=this.RULE("functionCall",()=>{this.OR([{ALT:()=>this.CONSUME(u,{LABEL:"name"})},{ALT:()=>this.CONSUME(y,{LABEL:"name"})}]),this.CONSUME(l),this.MANY_SEP({SEP:$,DEF:()=>{this.SUBRULE(this.expression,{LABEL:"args"});}}),this.CONSUME(c);});sectionRule=this.RULE("sectionRule",()=>{this.CONSUME(B),this.OPTION(()=>{this.CONSUME(C);}),this.SUBRULE(this.anyIdentifier,{LABEL:"sectionName"}),this.CONSUME(l),this.OPTION1(()=>{this.CONSUME(L,{LABEL:"subqueryFrom"}),this.SUBRULE(this.typeFormat,{LABEL:"subquerySourceType"}),this.CONSUME(d,{LABEL:"subqueryTo"}),this.SUBRULE1(this.typeFormat,{LABEL:"subqueryTargetType"}),this.OPTION2(()=>{this.CONSUME(A,{LABEL:"subqueryTransform"});});}),this.MANY(()=>{this.SUBRULE(this.action);}),this.CONSUME(c),this.OPTION3(()=>{this.CONSUME1(L,{LABEL:"followFrom"}),this.SUBRULE2(this.anyIdentifier,{LABEL:"followPath"});});});defineRule=this.RULE("defineRule",()=>{this.CONSUME(q),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});})},E=new J;var it={substring:r=>{if(r.length<2)throw new Error("substring() requires at least 2 arguments (string, start, [length])");let[t,e,i]=r;return i!==void 0?`String(${t}).slice(${e}, (${e}) + (${i}))`:`String(${t}).slice(${e})`},if:r=>{if(r.length!==3)throw new Error("if() requires exactly 3 arguments (condition, trueValue, falseValue)");let[t,e,i]=r;return `((${t}) ? (${e}) : (${i}))`},text:r=>{if(r.length!==1)throw new Error("text() requires exactly 1 argument (string or number)");let[t]=r;return `String(${t})`},replace:r=>{if(r.length!==3)throw new Error("replace() requires exactly 3 arguments (string, search, replacement)");let[t,e,i]=r;return `String(${t}).replace(${e}, ${i})`},number:r=>{if(r.length!==1)throw new Error("number() requires exactly 1 argument (string)");let[t]=r;return `Number(${t})`},extractnumber:r=>{if(r.length!==1)throw new Error("extractNumber() requires exactly 1 argument (string)");let[t]=r;return `Number(String(${t}).match(/\\d+(\\.\\d+)?/)[0])`},uppercase:r=>{if(r.length!==1)throw new Error("uppercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toUpperCase()`},lowercase:r=>{if(r.length!==1)throw new Error("lowercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toLowerCase()`},xmlnode:r=>{if(r.length<1)throw new Error("xmlnode() requires at least 1 argument (string)");let t=r[0],e=[...r.slice(1)],i="";if(e.length>0){let[s,o]=[e,2];s=[...Array(Math.ceil(s.length/o))].map(a=>s.splice(0,o)).map(([a,h])=>{let p=a;return a.startsWith('"')||a.startsWith("'")?p=`"$${a.slice(1,-1)}"`:p=`["$"+${a}]`,`${p}:${h||"null"}`}),i=","+s.join(",");}else return t;return `{_:${t}${i}}`},split:r=>{if(r.length<1)throw new Error("split() requires at least 1 argument (string)");let[t,e,i]=r,s=e!==void 0?e:'""',o=i!==void 0?`, ${i}`:"";return `String(${t}).split(${s}${o})`},to_base64:r=>{if(r.length!==1)throw new Error("to_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${t})))) : Buffer.from(String(${t}), 'utf-8').toString('base64'))`},from_base64:r=>{if(r.length!==1)throw new Error("from_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${t})))) : Buffer.from(String(${t}), 'base64').toString('utf-8'))`},aslist:r=>{if(r.length!==1)throw new Error("aslist() requires exactly 1 argument");let[t]=r;return `(Array.isArray(${t}) ? ${t} : (${t} == null ? [] : [${t}]))`}};var pt=E.getBaseCstVisitorConstructor(),X=class extends pt{readFrom="source";constructor(){super(),this.validateVisitor();}visitWithContext(t,e){let i=this.readFrom;this.readFrom=e.readFrom;let s=this.visit(t);return this.readFrom=i,s}query(t){let e=t.action?t.action.map(m=>this.visit(m)):[];t.Transform||e.push("Object.assign(target, source);");let i=this.visit(t.sourceType),s=this.visit(t.targetType),o=i.name,a=s.name,h=s.parameter?`'${s.parameter}'`:"undefined";return {code:`
1
+ import {createToken,Lexer,CstParser}from'chevrotain';import {XMLBuilder,XMLParser}from'fast-xml-parser';import yt from'js-beautify';var mt=createToken({name:"WhiteSpace",pattern:/\s+/,group:Lexer.SKIPPED}),Et=createToken({name:"LineComment",pattern:/\/\/[^\n\r]*/,group:Lexer.SKIPPED}),Lt=createToken({name:"BlockComment",pattern:/\/\*[\s\S]*?\*\//,group:Lexer.SKIPPED}),l=createToken({name:"Identifier",pattern:/[a-zA-Z_$][a-zA-Z0-9_.\[\]]*/}),O=createToken({name:"QuotedIdentifier",pattern:/`([^`\\]|\\.)*`/}),g=createToken({name:"From",pattern:/from/i,longer_alt:l}),d=createToken({name:"To",pattern:/to/i,longer_alt:l}),y=createToken({name:"Transform",pattern:/transform/i,longer_alt:l}),T=createToken({name:"Set",pattern:/set/i,longer_alt:l}),$=createToken({name:"Section",pattern:/section/i,longer_alt:l}),B=createToken({name:"Multiple",pattern:/multiple/i,longer_alt:l}),v=createToken({name:"Clone",pattern:/clone/i,longer_alt:l}),C=createToken({name:"Delete",pattern:/delete/i,longer_alt:l}),M=createToken({name:"Define",pattern:/define/i,longer_alt:l}),q=createToken({name:"Modify",pattern:/modify/i,longer_alt:l}),A=createToken({name:"If",pattern:/if/i,longer_alt:l}),P=createToken({name:"Else",pattern:/else/i,longer_alt:l}),w=createToken({name:"True",pattern:/true/i,longer_alt:l}),b=createToken({name:"False",pattern:/false/i,longer_alt:l}),I=createToken({name:"Null",pattern:/null/i,longer_alt:l}),_=createToken({name:"EqualsEquals",pattern:/==/}),F=createToken({name:"EqualsEqualsEquals",pattern:/===/}),x=createToken({name:"NotEquals",pattern:/!=/}),D=createToken({name:"NotEqualsEquals",pattern:/!==/}),j=createToken({name:"LessThanOrEqual",pattern:/<=/}),z=createToken({name:"GreaterThanOrEqual",pattern:/>=/}),W=createToken({name:"LessThan",pattern:/</}),k=createToken({name:"GreaterThan",pattern:/>/}),Y=createToken({name:"And",pattern:/&&/}),G=createToken({name:"Or",pattern:/\|\|/}),Q=createToken({name:"Not",pattern:/!/}),m=createToken({name:"Equals",pattern:/=/}),V=createToken({name:"Plus",pattern:/\+/}),R=createToken({name:"Minus",pattern:/-/}),J=createToken({name:"Times",pattern:/\*/}),K=createToken({name:"Divide",pattern:/\//}),h=createToken({name:"LParen",pattern:/\(/}),c=createToken({name:"RParen",pattern:/\)/}),U=createToken({name:"Comma",pattern:/,/}),H=createToken({name:"StringLiteral",pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/}),X=createToken({name:"NumericLiteral",pattern:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/}),Z=[mt,Et,Lt,g,d,y,T,$,B,v,C,M,q,A,P,w,b,I,F,_,D,x,j,z,Y,G,m,W,k,Q,V,R,J,K,h,c,U,H,X,O,l],ot=new Lexer(Z);var tt=class extends CstParser{constructor(){super(Z),this.performSelfAnalysis();}query=this.RULE("query",()=>{this.CONSUME(g),this.SUBRULE(this.typeFormat,{LABEL:"sourceType"}),this.CONSUME(d),this.SUBRULE1(this.typeFormat,{LABEL:"targetType"}),this.OPTION(()=>{this.CONSUME(y),this.MANY(()=>{this.SUBRULE(this.action);});});});typeFormat=this.RULE("typeFormat",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"name"}),this.OPTION(()=>{this.CONSUME(h),this.MANY_SEP({SEP:U,DEF:()=>{this.SUBRULE(this.typeFormatParameter,{LABEL:"params"});}}),this.CONSUME(c);});});typeFormatParameter=this.RULE("typeFormatParameter",()=>{this.OR([{GATE:()=>this.LA(2).tokenType===m,ALT:()=>this.SUBRULE(this.namedParameter)},{ALT:()=>this.SUBRULE(this.literal)}]);});namedParameter=this.RULE("namedParameter",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"key"}),this.CONSUME(m),this.SUBRULE(this.literal,{LABEL:"value"});});anyIdentifier=this.RULE("anyIdentifier",()=>{this.OR([{ALT:()=>this.CONSUME(l)},{ALT:()=>this.CONSUME(O)}]);});literal=this.RULE("literal",()=>{this.OR([{ALT:()=>this.CONSUME(H)},{ALT:()=>this.CONSUME(X)},{ALT:()=>this.CONSUME(w)},{ALT:()=>this.CONSUME(b)},{ALT:()=>this.CONSUME(I)}]);});action=this.RULE("action",()=>{this.OR([{ALT:()=>this.SUBRULE(this.setRule)},{ALT:()=>this.SUBRULE(this.modifyRule)},{ALT:()=>this.SUBRULE(this.sectionRule)},{ALT:()=>this.SUBRULE(this.cloneRule)},{ALT:()=>this.SUBRULE(this.deleteRule)},{ALT:()=>this.SUBRULE(this.ifAction)},{ALT:()=>this.SUBRULE(this.defineRule)}]);});deleteRule=this.RULE("deleteRule",()=>{this.CONSUME(C),this.SUBRULE(this.anyIdentifier,{LABEL:"field"});});ifAction=this.RULE("ifAction",()=>{this.CONSUME(A),this.CONSUME(h),this.SUBRULE(this.expression,{LABEL:"condition"}),this.CONSUME(c),this.CONSUME2(h),this.MANY(()=>{this.SUBRULE(this.action,{LABEL:"thenActions"});}),this.CONSUME2(c),this.OPTION(()=>{this.CONSUME(P),this.CONSUME3(h),this.MANY2(()=>{this.SUBRULE2(this.action,{LABEL:"elseActions"});}),this.CONSUME3(c);});});cloneRule=this.RULE("cloneRule",()=>{this.CONSUME(v),this.OPTION(()=>{this.CONSUME(h),this.MANY_SEP({SEP:U,DEF:()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"fields"});}}),this.CONSUME(c);});});setRule=this.RULE("setRule",()=>{this.CONSUME(T),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(m),this.SUBRULE(this.expression,{LABEL:"right"});});modifyRule=this.RULE("modifyRule",()=>{this.CONSUME(q),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(m),this.SUBRULE(this.expression,{LABEL:"right"});});expression=this.RULE("expression",()=>{this.SUBRULE(this.logicalOr);});logicalOr=this.RULE("logicalOr",()=>{this.SUBRULE(this.logicalAnd,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(G),this.SUBRULE1(this.logicalAnd,{LABEL:"rhs"});});});logicalAnd=this.RULE("logicalAnd",()=>{this.SUBRULE(this.comparison,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(Y),this.SUBRULE1(this.comparison,{LABEL:"rhs"});});});comparison=this.RULE("comparison",()=>{this.SUBRULE(this.addition,{LABEL:"lhs"}),this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(_,{LABEL:"ops"})},{ALT:()=>this.CONSUME(F,{LABEL:"ops"})},{ALT:()=>this.CONSUME(x,{LABEL:"ops"})},{ALT:()=>this.CONSUME(D,{LABEL:"ops"})},{ALT:()=>this.CONSUME(j,{LABEL:"ops"})},{ALT:()=>this.CONSUME(z,{LABEL:"ops"})},{ALT:()=>this.CONSUME(W,{LABEL:"ops"})},{ALT:()=>this.CONSUME(k,{LABEL:"ops"})}]),this.SUBRULE1(this.addition,{LABEL:"rhs"});});});addition=this.RULE("addition",()=>{this.SUBRULE(this.multiplication,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(V,{LABEL:"ops"})},{ALT:()=>this.CONSUME(R,{LABEL:"ops"})}]),this.SUBRULE1(this.multiplication,{LABEL:"rhs"});});});multiplication=this.RULE("multiplication",()=>{this.SUBRULE(this.unaryExpression,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(J,{LABEL:"ops"})},{ALT:()=>this.CONSUME(K,{LABEL:"ops"})}]),this.SUBRULE1(this.unaryExpression,{LABEL:"rhs"});});});unaryExpression=this.RULE("unaryExpression",()=>{this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(R,{LABEL:"sign"})},{ALT:()=>this.CONSUME(Q,{LABEL:"sign"})}]);}),this.SUBRULE(this.atomic);});atomic=this.RULE("atomic",()=>{this.OR([{ALT:()=>this.SUBRULE(this.literal)},{GATE:()=>this.LA(2).tokenType===h,ALT:()=>this.SUBRULE(this.functionCall)},{ALT:()=>this.SUBRULE(this.anyIdentifier)},{ALT:()=>{this.CONSUME(h),this.SUBRULE(this.expression),this.CONSUME(c);}}]);});functionCall=this.RULE("functionCall",()=>{this.OR([{ALT:()=>this.CONSUME(l,{LABEL:"name"})},{ALT:()=>this.CONSUME(A,{LABEL:"name"})}]),this.CONSUME(h),this.MANY_SEP({SEP:U,DEF:()=>{this.SUBRULE(this.expression,{LABEL:"args"});}}),this.CONSUME(c);});sectionRule=this.RULE("sectionRule",()=>{this.CONSUME($),this.OPTION(()=>{this.CONSUME(B);}),this.SUBRULE(this.anyIdentifier,{LABEL:"sectionName"}),this.CONSUME(h),this.OPTION1(()=>{this.CONSUME(g,{LABEL:"subqueryFrom"}),this.SUBRULE(this.typeFormat,{LABEL:"subquerySourceType"}),this.CONSUME(d,{LABEL:"subqueryTo"}),this.SUBRULE1(this.typeFormat,{LABEL:"subqueryTargetType"}),this.OPTION2(()=>{this.CONSUME(y,{LABEL:"subqueryTransform"});});}),this.MANY(()=>{this.SUBRULE(this.action);}),this.CONSUME(c),this.OPTION3(()=>{this.CONSUME1(g,{LABEL:"followFrom"}),this.SUBRULE2(this.anyIdentifier,{LABEL:"followPath"});});});defineRule=this.RULE("defineRule",()=>{this.CONSUME(M),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(m),this.SUBRULE(this.expression,{LABEL:"right"});})},E=new tt;var lt={substring:r=>{if(r.length<2)throw new Error("substring() requires at least 2 arguments (string, start, [length])");let[t,e,i]=r;return i!==void 0?`String(${t}).slice(${e}, (${e}) + (${i}))`:`String(${t}).slice(${e})`},if:r=>{if(r.length!==3)throw new Error("if() requires exactly 3 arguments (condition, trueValue, falseValue)");let[t,e,i]=r;return `((${t}) ? (${e}) : (${i}))`},text:r=>{if(r.length!==1)throw new Error("text() requires exactly 1 argument (string or number)");let[t]=r;return `String(${t})`},replace:r=>{if(r.length!==3)throw new Error("replace() requires exactly 3 arguments (string, search, replacement)");let[t,e,i]=r;return `String(${t}).replace(${e}, ${i})`},number:r=>{if(r.length!==1)throw new Error("number() requires exactly 1 argument (string)");let[t]=r;return `Number(${t})`},extractnumber:r=>{if(r.length!==1)throw new Error("extractNumber() requires exactly 1 argument (string)");let[t]=r;return `Number(String(${t}).match(/\\d+(\\.\\d+)?/)[0])`},uppercase:r=>{if(r.length!==1)throw new Error("uppercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toUpperCase()`},lowercase:r=>{if(r.length!==1)throw new Error("lowercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toLowerCase()`},xmlnode:r=>{if(r.length<1)throw new Error("xmlnode() requires at least 1 argument (string)");let t=r[0],e=[...r.slice(1)],i="";if(e.length>0){let[n,a]=[e,2];n=[...Array(Math.ceil(n.length/a))].map(u=>n.splice(0,a)).map(([u,o])=>{let p=u;return u.startsWith('"')||u.startsWith("'")?p=`"$${u.slice(1,-1)}"`:p=`["$"+${u}]`,`${p}:${o||"null"}`}),i=","+n.join(",");}else return t;return `{_:${t}${i}}`},split:r=>{if(r.length<1)throw new Error("split() requires at least 1 argument (string)");let[t,e,i]=r,n=e!==void 0?e:'""',a=i!==void 0?`, ${i}`:"";return `String(${t}).split(${n}${a})`},to_base64:r=>{if(r.length!==1)throw new Error("to_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${t})))) : Buffer.from(String(${t}), 'utf-8').toString('base64'))`},from_base64:r=>{if(r.length!==1)throw new Error("from_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${t})))) : Buffer.from(String(${t}), 'base64').toString('utf-8'))`},aslist:r=>{if(r.length!==1)throw new Error("aslist() requires exactly 1 argument");let[t]=r;return `(Array.isArray(${t}) ? ${t} : (${t} == null ? [] : [${t}]))`}};var Ut=E.getBaseCstVisitorConstructor(),et=class extends Ut{readFrom="source";constructor(){super(),this.validateVisitor();}visitWithContext(t,e){let i=this.readFrom;this.readFrom=e.readFrom;let n=this.visit(t);return this.readFrom=i,n}query(t){let e=t.action?t.action.map(st=>this.visit(st)):[];t.Transform||e.push("Object.assign(target, source);");let i=this.visit(t.sourceType),n=this.visit(t.targetType),a=i.name,u=n.name,o=JSON.stringify(i.options),p=JSON.stringify(n.options);return {code:`
2
2
  return function(input, env) {
3
3
  // 1. Parse Input
4
- const source = env.parse('${o}', input);
4
+ const source = env.parse('${a}', input, ${o});
5
5
  const _rootSource = source;
6
6
 
7
7
  // 2. Transform
@@ -11,54 +11,54 @@ import {createToken,Lexer,CstParser}from'chevrotain';import {XMLBuilder,XMLParse
11
11
  `)}
12
12
 
13
13
  // 3. Serialize Output
14
- return env.serialize('${a}', target ${h!=="undefined"?`, { rootGenerated: ${h} }`:""} );
14
+ return env.serialize('${u}', target, ${p});
15
15
  }
16
- `,sourceType:i,targetType:s}}typeFormat(t){let e=this.visit(t.name),i;return t.parameter&&(i=t.parameter[0].image.slice(1,-1)),{name:e.name,parameter:i}}genAccess(t,e){return e.quoted||e.name.includes("-")&&!e.name.includes(".")&&!e.name.includes("[")?`${t}["${e.name}"]`:`${t}.${e.name}`}anyIdentifier(t){if(t.Identifier)return {name:t.Identifier[0].image,quoted:false};if(t.QuotedIdentifier)return {name:t.QuotedIdentifier[0].image.slice(1,-1).replace(/\\(.)/g,"$1"),quoted:true}}literal(t){if(t.StringLiteral)return t.StringLiteral[0].image;if(t.NumericLiteral)return t.NumericLiteral[0].image}action(t){if(t.setRule)return this.visit(t.setRule);if(t.modifyRule)return this.visit(t.modifyRule);if(t.sectionRule)return this.visit(t.sectionRule);if(t.cloneRule)return this.visit(t.cloneRule);if(t.ifAction)return this.visit(t.ifAction);if(t.deleteRule)return this.visit(t.deleteRule);if(t.defineRule)return this.visit(t.defineRule)}deleteRule(t){let e=this.visit(t.field);return `delete ${this.genAccess("target",e)};`}ifAction(t){let e=this.visit(t.condition),i=t.thenActions?t.thenActions.map(o=>this.visit(o)).join(`
17
- `):"",s=t.elseActions?`else { ${t.elseActions.map(o=>this.visit(o)).join(`
16
+ `,sourceType:i,targetType:n}}typeFormat(t){let e=this.visit(t.name),i={params:[]};return t.params&&t.params.forEach(n=>{let a=this.visit(n);typeof a=="object"&&"key"in a?i[a.key]=this.parseLiteral(a.value):i.params.push(this.parseLiteral(a));}),{name:e.name,options:i}}typeFormatParameter(t){if(t.namedParameter)return this.visit(t.namedParameter);if(t.literal)return this.visit(t.literal)}namedParameter(t){let e=this.visit(t.key).name,i=this.visit(t.value);return {key:e,value:i}}parseLiteral(t){if(t==="true")return true;if(t==="false")return false;if(t==="null")return null;if(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))return t.slice(1,-1);let e=Number(t);return isNaN(e)?t:e}genAccess(t,e){return e.quoted||e.name.includes("-")&&!e.name.includes(".")&&!e.name.includes("[")?`${t}["${e.name}"]`:`${t}.${e.name}`}anyIdentifier(t){if(t.Identifier)return {name:t.Identifier[0].image,quoted:false};if(t.QuotedIdentifier)return {name:t.QuotedIdentifier[0].image.slice(1,-1).replace(/\\(.)/g,"$1"),quoted:true}}literal(t){if(t.StringLiteral)return t.StringLiteral[0].image;if(t.NumericLiteral)return t.NumericLiteral[0].image;if(t.True)return "true";if(t.False)return "false";if(t.Null)return "null"}action(t){if(t.setRule)return this.visit(t.setRule);if(t.modifyRule)return this.visit(t.modifyRule);if(t.sectionRule)return this.visit(t.sectionRule);if(t.cloneRule)return this.visit(t.cloneRule);if(t.ifAction)return this.visit(t.ifAction);if(t.deleteRule)return this.visit(t.deleteRule);if(t.defineRule)return this.visit(t.defineRule)}deleteRule(t){let e=this.visit(t.field);return `delete ${this.genAccess("target",e)};`}ifAction(t){let e=this.visit(t.condition),i=t.thenActions?t.thenActions.map(a=>this.visit(a)).join(`
17
+ `):"",n=t.elseActions?`else { ${t.elseActions.map(a=>this.visit(a)).join(`
18
18
  `)} }`:"";return `if (${e}) {
19
19
  ${i}
20
- } ${s}`}cloneRule(t){return t.fields?t.fields.map(i=>this.visit(i)).map(i=>`${this.genAccess("target",i)} = ${this.genAccess("source",i)};`).join(`
21
- `):"Object.assign(target, source);"}setRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("target",e)} = ${i};`}modifyRule(t){let e=this.visit(t.left),i=this.visitWithContext(t.right,{readFrom:"target"});return `${this.genAccess("target",e)} = ${i};`}defineRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("source",e)} = ${i};`}expression(t){return this.visit(t.logicalOr)}logicalOr(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=this.visit(t.rhs[i]);e=`${e} || ${s}`;}return e}logicalAnd(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=this.visit(t.rhs[i]);e=`${e} && ${s}`;}return e}comparison(t){let e=this.visit(t.lhs);if(t.rhs){let i=t.ops[0].image,s=this.visit(t.rhs[0]);e=`${e} ${i} ${s}`;}return e}addition(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=t.ops[i].image,o=this.visit(t.rhs[i]);e=`${e} ${s} ${o}`;}return e}multiplication(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let s=t.ops[i].image,o=this.visit(t.rhs[i]);e=`${e} ${s} ${o}`;}return e}unaryExpression(t){let e=this.visit(t.atomic);return t.sign?`${t.sign[0].image}${e}`:e}atomic(t){if(t.literal)return this.visit(t.literal);if(t.functionCall)return this.visit(t.functionCall);if(t.anyIdentifier){let e=this.visit(t.anyIdentifier);if(["true","false","null"].includes(e.name)&&!e.quoted)return e.name;if(!e.quoted){if(e.name==="_source"||e.name.startsWith("_source.")||e.name.startsWith("_source["))return `_rootSource${e.name.substring(7)}`;if(e.name==="_target"||e.name.startsWith("_target.")||e.name.startsWith("_target["))return `_rootTarget${e.name.substring(7)}`}return this.genAccess(this.readFrom,e)}if(t.expression)return `(${this.visit(t.expression)})`}functionCall(t){let e=t.name[0].image,i=(e.startsWith("`")?e.slice(1,-1):e).toLowerCase(),s=t.args?t.args.map(a=>this.visit(a)):[],o=it[i];if(o)return o(s);throw new Error(`Unknown function: ${e}`)}sectionRule(t){let e=this.visit(t.sectionName);e.name;let s=this.genAccess("target",e),o=t.followPath?this.visit(t.followPath):e;o.name==="parent"?"":"."+o.name;let h=o.name==="parent"?"source":this.genAccess("source",o),p=!!t.Multiple,m=t.action?t.action.map(g=>this.visit(g)):[];if(!!t.subqueryFrom){let g=this.visit(t.subquerySourceType),U=this.visit(t.subqueryTargetType);t.subqueryTransform||m.push("Object.assign(target, source);");let et=U.parameter?`, { rootGenerated: "${U.parameter}" }`:"";return p?`
22
- if (${h} && Array.isArray(${h})) {
23
- ${s} = ${h}.map(item => {
24
- const subSource = env.parse('${g.name}', item);
20
+ } ${n}`}cloneRule(t){return t.fields?t.fields.map(i=>this.visit(i)).map(i=>`${this.genAccess("target",i)} = ${this.genAccess("source",i)};`).join(`
21
+ `):"Object.assign(target, source);"}setRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("target",e)} = ${i};`}modifyRule(t){let e=this.visit(t.left),i=this.visitWithContext(t.right,{readFrom:"target"});return `${this.genAccess("target",e)} = ${i};`}defineRule(t){let e=this.visit(t.left),i=this.visit(t.right);return `${this.genAccess("source",e)} = ${i};`}expression(t){return this.visit(t.logicalOr)}logicalOr(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let n=this.visit(t.rhs[i]);e=`${e} || ${n}`;}return e}logicalAnd(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let n=this.visit(t.rhs[i]);e=`${e} && ${n}`;}return e}comparison(t){let e=this.visit(t.lhs);if(t.rhs){let i=t.ops[0].image,n=this.visit(t.rhs[0]);e=`${e} ${i} ${n}`;}return e}addition(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let n=t.ops[i].image,a=this.visit(t.rhs[i]);e=`${e} ${n} ${a}`;}return e}multiplication(t){let e=this.visit(t.lhs);if(t.rhs)for(let i=0;i<t.rhs.length;i++){let n=t.ops[i].image,a=this.visit(t.rhs[i]);e=`${e} ${n} ${a}`;}return e}unaryExpression(t){let e=this.visit(t.atomic);return t.sign?`${t.sign[0].image}${e}`:e}atomic(t){if(t.literal)return this.visit(t.literal);if(t.functionCall)return this.visit(t.functionCall);if(t.anyIdentifier){let e=this.visit(t.anyIdentifier);if(["true","false","null"].includes(e.name)&&!e.quoted)return e.name;if(!e.quoted){if(e.name==="_source"||e.name.startsWith("_source.")||e.name.startsWith("_source["))return `_rootSource${e.name.substring(7)}`;if(e.name==="_target"||e.name.startsWith("_target.")||e.name.startsWith("_target["))return `_rootTarget${e.name.substring(7)}`}return this.genAccess(this.readFrom,e)}if(t.expression)return `(${this.visit(t.expression)})`}functionCall(t){let e=t.name[0].image,i=(e.startsWith("`")?e.slice(1,-1):e).toLowerCase(),n=t.args?t.args.map(u=>this.visit(u)):[],a=lt[i];if(a)return a(n);throw new Error(`Unknown function: ${e}`)}sectionRule(t){let e=this.visit(t.sectionName);e.name;let n=this.genAccess("target",e),a=t.followPath?this.visit(t.followPath):e;a.name==="parent"?"":"."+a.name;let o=a.name==="parent"?"source":this.genAccess("source",a),p=!!t.Multiple,L=t.action?t.action.map(f=>this.visit(f)):[];if(!!t.subqueryFrom){let f=this.visit(t.subquerySourceType),N=this.visit(t.subqueryTargetType);t.subqueryTransform||L.push("Object.assign(target, source);");let nt=JSON.stringify(f.options),at=JSON.stringify(N.options);return p?`
22
+ if (${o} && Array.isArray(${o})) {
23
+ ${n} = ${o}.map(item => {
24
+ const subSource = env.parse('${f.name}', item, ${nt});
25
25
  const source = subSource;
26
26
  const target = {};
27
- ${m.join(`
27
+ ${L.join(`
28
28
  `)}
29
- return env.serialize('${U.name}', target${et});
29
+ return env.serialize('${N.name}', target, ${at});
30
30
  });
31
31
  }
32
32
  `:`
33
- if (${h}) {
34
- ${s} = (function(innerSource) {
35
- const subSource = env.parse('${g.name}', innerSource);
33
+ if (${o}) {
34
+ ${n} = (function(innerSource) {
35
+ const subSource = env.parse('${f.name}', innerSource, ${nt});
36
36
  const source = subSource;
37
37
  const target = {};
38
- ${m.join(`
38
+ ${L.join(`
39
39
  `)}
40
- return env.serialize('${U.name}', target${et});
41
- })(${h});
40
+ return env.serialize('${N.name}', target, ${at});
41
+ })(${o});
42
42
  }
43
43
  `}return p?`
44
- if (${h} && Array.isArray(${h})) {
45
- ${s} = ${h}.map(item => {
44
+ if (${o} && Array.isArray(${o})) {
45
+ ${n} = ${o}.map(item => {
46
46
  const source = item;
47
47
  const target = {};
48
- ${m.join(`
48
+ ${L.join(`
49
49
  `)}
50
50
  return target;
51
51
  });
52
52
  }
53
53
  `:`
54
- if (${h}) {
55
- ${s} = (function(innerSource) {
54
+ if (${o}) {
55
+ ${n} = (function(innerSource) {
56
56
  const source = innerSource;
57
57
  const target = {};
58
- ${m.join(`
58
+ ${L.join(`
59
59
  `)}
60
60
  return target;
61
- })(${h});
61
+ })(${o});
62
62
  }
63
- `}},st=new X;var nt={};function Z(r,t){nt[r.toLowerCase()]=t;}function tt(r){let t=nt[r.toLowerCase()];if(!t)throw new Error(`No adapter found for format: ${r}`);return t}Z("json",{parse:r=>typeof r!="string"?r:JSON.parse(r),serialize:r=>JSON.stringify(r,null,2)});var Lt=new XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true});Z("xml",{parse:r=>typeof r!="string"?r:new XMLParser({ignoreAttributes:false,removeNSPrefix:true}).parse(r),serialize:(r,t)=>{let e=t?.rootGenerated??"root";return Lt.build({[e]:r})}});Z("object",{parse:r=>r,serialize:r=>r});async function wt(r,t){if(t?.cache){let a=await t.cache.retrieve(r);if(a)return ot(a)}let e=rt.tokenize(r);if(e.errors.length>0)throw new Error(`Lexing errors: ${e.errors[0].message}`);E.input=e.tokens;let i=E.query();if(E.errors.length>0)throw new Error(`Parsing errors: ${E.errors[0].message}`);let{code:s}=st.visit(i),o=ft.js(s,{indent_size:2,space_in_empty_paren:true,end_with_newline:true});return t?.cache&&await t.cache.save(r,o),ot(o)}function ot(r){let e=new Function(r)(),i={parse:(o,a)=>tt(o).parse(a),serialize:(o,a,h)=>tt(o).serialize(a,h)},s=(o=>e(o,i));return s.code=r,s}function Pt(r,...t){return r.reduce((e,i,s)=>e+i+(t[s]??""),"")}function bt(r){return `Hello, ${r}! The Morph engine is ready.`}export{wt as compile,bt as greet,Pt as morphQL};//# sourceMappingURL=index.js.map
63
+ `}},ut=new et;var ct={};function rt(r,t){ct[r.toLowerCase()]=t;}function it(r){let t=ct[r.toLowerCase()];if(!t)throw new Error(`No adapter found for format: ${r}`);return t}rt("json",{parse:r=>typeof r!="string"?r:JSON.parse(r),serialize:r=>JSON.stringify(r,null,2)});var dt=new XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true});rt("xml",{parse:(r,t)=>typeof r!="string"?r:new XMLParser({ignoreAttributes:false,removeNSPrefix:true,...t}).parse(r),serialize:(r,t)=>{let e=t?.rootGenerated??t?.params?.[0]??"root";return (t?new XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true,...t}):dt).build({[e]:r})}});rt("object",{parse:r=>r,serialize:r=>r});async function _t(r,t){if(t?.cache){let u=await t.cache.retrieve(r);if(u)return pt(u)}let e=ot.tokenize(r);if(e.errors.length>0)throw new Error(`Lexing errors: ${e.errors[0].message}`);E.input=e.tokens;let i=E.query();if(E.errors.length>0)throw new Error(`Parsing errors: ${E.errors[0].message}`);let{code:n}=ut.visit(i),a=yt.js(n,{indent_size:2,space_in_empty_paren:true,end_with_newline:true});return t?.cache&&await t.cache.save(r,a),pt(a)}function pt(r){let e=new Function(r)(),i={parse:(a,u,o)=>it(a).parse(u,o),serialize:(a,u,o)=>it(a).serialize(u,o)},n=(a=>e(a,i));return n.code=r,n}function Ft(r,...t){return r.reduce((e,i,n)=>e+i+(t[n]??""),"")}function xt(r){return `Hello, ${r}! The Morph engine is ready.`}export{_t as compile,xt as greet,Ft as morphQL};//# sourceMappingURL=index.js.map
64
64
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/index.ts"],"names":["WhiteSpace","createToken","Lexer","LineComment","BlockComment","Identifier","QuotedIdentifier","From","To","Transform","Set","Section","Multiple","Clone","Delete","Define","Modify","If","Else","EqualsEquals","EqualsEqualsEquals","NotEquals","NotEqualsEquals","LessThanOrEqual","GreaterThanOrEqual","LessThan","GreaterThan","And","Or","Not","Equals","Plus","Minus","Times","Divide","LParen","RParen","Comma","StringLiteral","NumericLiteral","allTokens","MorphLexer","MorphParser","CstParser","parser","functionRegistry","args","str","start","length","condition","trueValue","falseValue","search","replacement","value","attributesList","attributes","list","chunkSize","_","key","attrKey","separator","limit","sep","lim","val","BaseCstVisitor","MorphCompiler","node","context","previousReadFrom","result","ctx","actions","a","sourceType","targetType","sourceTypeName","targetTypeName","targetParam","id","parameter","base","field","thenActions","elseBlock","f","left","right","rhs","op","atomic","originalName","name","handler","sectionId","sectionAccess","followPathId","sourceAccess","isMultiple","subSourceType","subTargetType","subTargetParam","compiler","adapters","registerAdapter","adapter","getAdapter","content","data","xmlBuilder","XMLBuilder","XMLParser","options","rootTag","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","code","beautify","transform","env","format","engine","input","morphQL","strings","values","acc","i","greet"],"mappings":"oIAEO,IAAMA,EAAAA,CAAaC,WAAAA,CAAY,CACpC,IAAA,CAAM,YAAA,CACN,OAAA,CAAS,KAAA,CACT,KAAA,CAAOC,KAAAA,CAAM,OACf,CAAC,CAAA,CAGYC,EAAAA,CAAcF,WAAAA,CAAY,CACrC,IAAA,CAAM,aAAA,CACN,OAAA,CAAS,cAAA,CACT,KAAA,CAAOC,KAAAA,CAAM,OACf,CAAC,CAAA,CAEYE,EAAAA,CAAeH,WAAAA,CAAY,CACtC,IAAA,CAAM,cAAA,CACN,OAAA,CAAS,kBAAA,CACT,KAAA,CAAOC,KAAAA,CAAM,OACf,CAAC,CAAA,CAEYG,CAAAA,CAAaJ,WAAAA,CAAY,CACpC,IAAA,CAAM,YAAA,CACN,OAAA,CAAS,8BACX,CAAC,CAAA,CAEYK,CAAAA,CAAmBL,WAAAA,CAAY,CAC1C,IAAA,CAAM,kBAAA,CACN,OAAA,CAAS,iBACX,CAAC,CAAA,CAEYM,CAAAA,CAAON,YAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,OAAA,CAAS,OAAA,CAAS,UAAA,CAAYI,CAAW,CAAC,CAAA,CAC7EG,CAAAA,CAAKP,WAAAA,CAAY,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,UAAA,CAAYI,CAAW,CAAC,CAAA,CACvEI,CAAAA,CAAYR,WAAAA,CAAY,CACnC,IAAA,CAAM,WAAA,CACN,OAAA,CAAS,YAAA,CACT,UAAA,CAAYI,CACd,CAAC,CAAA,CACYK,CAAAA,CAAMT,YAAY,CAAE,IAAA,CAAM,KAAA,CAAO,OAAA,CAAS,MAAA,CAAQ,UAAA,CAAYI,CAAW,CAAC,CAAA,CAC1EM,CAAAA,CAAUV,WAAAA,CAAY,CACjC,IAAA,CAAM,SAAA,CACN,OAAA,CAAS,UAAA,CACT,UAAA,CAAYI,CACd,CAAC,CAAA,CACYO,CAAAA,CAAWX,WAAAA,CAAY,CAClC,IAAA,CAAM,UAAA,CACN,OAAA,CAAS,WAAA,CACT,UAAA,CAAYI,CACd,CAAC,CAAA,CACYQ,CAAAA,CAAQZ,YAAY,CAAE,IAAA,CAAM,OAAA,CAAS,OAAA,CAAS,QAAA,CAAU,UAAA,CAAYI,CAAW,CAAC,CAAA,CAChFS,CAAAA,CAASb,WAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,SAAA,CAAW,UAAA,CAAYI,CAAW,CAAC,CAAA,CACnFU,CAAAA,CAASd,WAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,SAAA,CAAW,UAAA,CAAYI,CAAW,CAAC,CAAA,CACnFW,CAAAA,CAASf,YAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,SAAA,CAAW,UAAA,CAAYI,CAAW,CAAC,CAAA,CACnFY,CAAAA,CAAKhB,WAAAA,CAAY,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,KAAA,CAAO,UAAA,CAAYI,CAAW,CAAC,CAAA,CACvEa,CAAAA,CAAOjB,WAAAA,CAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,OAAA,CAAS,OAAA,CAAS,UAAA,CAAYI,CAAW,CAAC,CAAA,CAG7Ec,CAAAA,CAAelB,YAAY,CAAE,IAAA,CAAM,cAAA,CAAgB,OAAA,CAAS,IAAK,CAAC,CAAA,CAClEmB,CAAAA,CAAqBnB,WAAAA,CAAY,CAAE,IAAA,CAAM,oBAAA,CAAsB,OAAA,CAAS,KAAM,CAAC,CAAA,CAC/EoB,CAAAA,CAAYpB,WAAAA,CAAY,CAAE,IAAA,CAAM,WAAA,CAAa,OAAA,CAAS,IAAK,CAAC,CAAA,CAC5DqB,CAAAA,CAAkBrB,WAAAA,CAAY,CAAE,IAAA,CAAM,iBAAA,CAAmB,OAAA,CAAS,KAAM,CAAC,CAAA,CACzEsB,CAAAA,CAAkBtB,WAAAA,CAAY,CAAE,IAAA,CAAM,iBAAA,CAAmB,OAAA,CAAS,IAAK,CAAC,CAAA,CACxEuB,CAAAA,CAAqBvB,WAAAA,CAAY,CAAE,IAAA,CAAM,oBAAA,CAAsB,OAAA,CAAS,IAAK,CAAC,CAAA,CAC9EwB,CAAAA,CAAWxB,WAAAA,CAAY,CAAE,IAAA,CAAM,UAAA,CAAY,OAAA,CAAS,GAAI,CAAC,CAAA,CACzDyB,CAAAA,CAAczB,WAAAA,CAAY,CAAE,IAAA,CAAM,cAAe,OAAA,CAAS,GAAI,CAAC,CAAA,CAG/D0B,CAAAA,CAAM1B,WAAAA,CAAY,CAAE,IAAA,CAAM,KAAA,CAAO,OAAA,CAAS,IAAK,CAAC,CAAA,CAChD2B,CAAAA,CAAK3B,WAAAA,CAAY,CAAE,IAAA,CAAM,IAAA,CAAM,OAAA,CAAS,MAAO,CAAC,CAAA,CAChD4B,CAAAA,CAAM5B,WAAAA,CAAY,CAAE,IAAA,CAAM,KAAA,CAAO,OAAA,CAAS,GAAI,CAAC,CAAA,CAE/C6B,CAAAA,CAAS7B,YAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,GAAI,CAAC,CAAA,CACrD8B,CAAAA,CAAO9B,WAAAA,CAAY,CAAE,IAAA,CAAM,MAAA,CAAQ,OAAA,CAAS,IAAK,CAAC,CAAA,CAClD+B,CAAAA,CAAQ/B,WAAAA,CAAY,CAAE,IAAA,CAAM,OAAA,CAAS,OAAA,CAAS,GAAI,CAAC,CAAA,CACnDgC,CAAAA,CAAQhC,WAAAA,CAAY,CAAE,IAAA,CAAM,OAAA,CAAS,OAAA,CAAS,IAAK,CAAC,CAAA,CACpDiC,CAAAA,CAASjC,WAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,IAAK,CAAC,CAAA,CACtDkC,CAAAA,CAASlC,WAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,IAAK,CAAC,CAAA,CACtDmC,CAAAA,CAASnC,WAAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,IAAK,CAAC,CAAA,CACtDoC,CAAAA,CAAQpC,WAAAA,CAAY,CAAE,IAAA,CAAM,QAAS,OAAA,CAAS,GAAI,CAAC,CAAA,CAEnDqC,CAAAA,CAAgBrC,WAAAA,CAAY,CACvC,IAAA,CAAM,eAAA,CACN,OAAA,CAAS,qCACX,CAAC,CAAA,CAEYsC,CAAAA,CAAiBtC,WAAAA,CAAY,CACxC,IAAA,CAAM,gBAAA,CACN,OAAA,CAAS,kCACX,CAAC,CAAA,CAEYuC,CAAAA,CAAY,CACvBxC,EAAAA,CACAG,EAAAA,CACAC,EAAAA,CACAG,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,EACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CAEAE,CAAAA,CACAD,CAAAA,CACAG,CAAAA,CACAD,CAAAA,CACAE,CAAAA,CACAC,CAAAA,CACAG,CAAAA,CACAC,CAAAA,CAEAE,CAAAA,CACAL,CAAAA,CACAC,CAAAA,CACAG,CAAAA,CACAE,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAjC,CAAAA,CACAD,CACF,CAAA,CAEaoC,EAAAA,CAAa,IAAIvC,MAAMsC,CAAS,CAAA,CClItC,IAAME,CAAAA,CAAN,cAA0BC,SAAU,CACzC,WAAA,EAAc,CACZ,KAAA,CAAQH,CAAS,CAAA,CACjB,IAAA,CAAK,mBAAA,GACP,CAEO,KAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,OAAA,CAAS,IAAM,CACtC,IAAA,CAAK,OAAA,CAAUjC,CAAI,CAAA,CACnB,IAAA,CAAK,OAAA,CAAQ,KAAK,UAAA,CAAY,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CACrD,IAAA,CAAK,OAAA,CAAUC,CAAE,CAAA,CACjB,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CACtD,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUC,CAAS,CAAA,CACxB,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,QAAQ,IAAA,CAAK,MAAM,EAC1B,CAAC,EACH,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,QAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAU0B,CAAM,CAAA,CACrB,IAAA,CAAK,QAAUG,CAAAA,CAAe,CAAE,KAAA,CAAO,WAAY,CAAC,CAAA,CACpD,IAAA,CAAK,OAAA,CAAUF,CAAM,EACvB,CAAC,EACH,CAAC,CAAA,CAEO,aAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,eAAA,CAAiB,IAAM,CACvD,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAU/B,CAAU,CAAE,CAAA,CACxC,CAAE,IAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAgB,CAAE,CAChD,CAAC,EACH,CAAC,CAAA,CAEO,OAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAA,CAAW,IAAM,CAC3C,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUgC,CAAa,CAAE,CAAA,CAC3C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAc,CAAE,CAC9C,CAAC,EACH,CAAC,CAAA,CAEO,MAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAA,CAAU,IAAM,CACzC,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAE,CAAA,CACxC,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAE,EAC3C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAE,CAAA,CAC5C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAE,CAAA,CAC1C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAE,CAAA,CAC3C,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAQ,CAAE,CAAA,CACzC,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAE,CAC7C,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAUzB,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,OAAQ,CAAC,EACrD,CAAC,CAAA,CAEO,QAAA,CAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAY,IAAM,CAC7C,IAAA,CAAK,OAAA,CAAUG,CAAE,CAAA,CACjB,IAAA,CAAK,OAAA,CAAUkB,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,WAAY,CAAC,CAAA,CACpD,IAAA,CAAK,OAAA,CAAUC,CAAM,CAAA,CACrB,IAAA,CAAK,SAAWD,CAAM,CAAA,CACtB,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAQ,CAAE,KAAA,CAAO,aAAc,CAAC,EACpD,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAWC,CAAM,CAAA,CACtB,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUlB,CAAI,CAAA,CACnB,IAAA,CAAK,QAAA,CAAWiB,CAAM,EACtB,IAAA,CAAK,KAAA,CAAM,IAAM,CACf,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,MAAA,CAAQ,CAAE,KAAA,CAAO,aAAc,CAAC,EACrD,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAWC,CAAM,EACxB,CAAC,EACH,CAAC,CAAA,CAEO,SAAA,CAAY,IAAA,CAAK,IAAA,CAAK,WAAA,CAAa,IAAM,CAC/C,IAAA,CAAK,OAAA,CAAUvB,CAAK,EACpB,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUsB,CAAM,CAAA,CACrB,IAAA,CAAK,QAAA,CAAS,CACZ,GAAA,CAAOE,CAAAA,CACP,GAAA,CAAK,IAAM,CACT,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,QAAS,CAAC,EACtD,CACF,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAUD,CAAM,EACvB,CAAC,EACH,CAAC,CAAA,CAEO,OAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAA,CAAW,IAAM,CAC3C,IAAA,CAAK,OAAA,CAAU1B,CAAG,CAAA,CAClB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,IAAA,CAAK,OAAA,CAAUoB,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,OAAQ,CAAC,EAClD,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAUd,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,IAAA,CAAK,OAAA,CAAUc,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,MAAO,OAAQ,CAAC,EAClD,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,SAAS,EAC7B,CAAC,CAAA,CAEO,SAAA,CAAY,IAAA,CAAK,IAAA,CAAK,WAAA,CAAa,IAAM,CAC/C,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,KAAM,CAAC,EAC9C,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAUF,CAAE,CAAA,CACjB,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,KAAM,CAAC,EACjD,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,MAAO,KAAM,CAAC,CAAA,CAC9C,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAUD,CAAG,CAAA,CAClB,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,KAAM,CAAC,EACjD,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,CAAU,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CAC5C,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUR,CAAAA,CAAc,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAC5D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAoB,CAAE,MAAO,KAAM,CAAC,CAAE,CAAA,CAClE,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAW,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACzD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAC/D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,EAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAC/D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAoB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CAClE,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAU,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACxD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAa,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAC7D,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAU,CAAE,KAAA,CAAO,KAAM,CAAC,EAC/C,CAAC,EACH,CAAC,CAAA,CAEO,QAAA,CAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAY,IAAM,CAC7C,IAAA,CAAK,OAAA,CAAQ,KAAK,cAAA,CAAgB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CAClD,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUK,CAAAA,CAAM,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACpD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAO,CAAE,MAAO,KAAM,CAAC,CAAE,CACvD,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,cAAA,CAAgB,CAAE,KAAA,CAAO,KAAM,CAAC,EACrD,CAAC,EACH,CAAC,CAAA,CAEO,cAAA,CAAiB,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAkB,IAAM,CACzD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,eAAA,CAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,CAAA,CACnD,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAO,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CAAA,CACrD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAQ,CAAE,KAAA,CAAO,KAAM,CAAC,CAAE,CACxD,CAAC,CAAA,CACD,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,eAAA,CAAiB,CAAE,KAAA,CAAO,KAAM,CAAC,EACtD,CAAC,EACH,CAAC,CAAA,CAEO,eAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAmB,IAAM,CAC3D,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUF,EAAO,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CAAA,CACtD,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUH,CAAAA,CAAK,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CACtD,CAAC,EACH,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,EAC1B,CAAC,CAAA,CAEO,MAAA,CAAS,IAAA,CAAK,IAAA,CAAK,SAAU,IAAM,CACzC,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAE,CAAA,CACxC,CACE,IAAA,CAAM,IAAM,IAAA,CAAK,EAAA,CAAG,CAAC,CAAA,CAAE,SAAA,GAAgBM,CAAAA,CACvC,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,YAAY,CAC3C,CAAA,CACA,CAAE,IAAK,IAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAa,CAAE,CAAA,CAC9C,CACE,GAAA,CAAK,IAAM,CACT,IAAA,CAAK,OAAA,CAAUA,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,CAC5B,IAAA,CAAK,OAAA,CAAUC,CAAM,EACvB,CACF,CACF,CAAC,EACH,CAAC,CAAA,CAEO,YAAA,CAAe,IAAA,CAAK,KAAK,cAAA,CAAgB,IAAM,CACrD,IAAA,CAAK,EAAA,CAAG,CACN,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAU/B,CAAAA,CAAY,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CAAA,CAC3D,CAAE,GAAA,CAAK,IAAM,IAAA,CAAK,OAAA,CAAUY,CAAAA,CAAI,CAAE,KAAA,CAAO,MAAO,CAAC,CAAE,CACrD,CAAC,CAAA,CACD,KAAK,OAAA,CAAUkB,CAAM,CAAA,CACrB,IAAA,CAAK,QAAA,CAAS,CACZ,GAAA,CAAOE,CAAAA,CACP,GAAA,CAAK,IAAM,CACT,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,MAAO,CAAC,EACjD,CACF,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAUD,CAAM,EACvB,CAAC,CAAA,CAEO,WAAA,CAAc,IAAA,CAAK,IAAA,CAAK,cAAe,IAAM,CACnD,IAAA,CAAK,OAAA,CAAUzB,CAAO,CAAA,CACtB,IAAA,CAAK,MAAA,CAAO,IAAM,CAChB,IAAA,CAAK,OAAA,CAAUC,CAAQ,EACzB,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,aAAc,CAAC,CAAA,CACzD,IAAA,CAAK,OAAA,CAAUuB,CAAM,CAAA,CAGrB,IAAA,CAAK,OAAA,CAAQ,IAAM,CACjB,IAAA,CAAK,OAAA,CAAU5B,CAAAA,CAAM,CAAE,KAAA,CAAO,cAAe,CAAC,CAAA,CAC9C,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,oBAAqB,CAAC,CAAA,CAC7D,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAI,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CAC1C,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,UAAA,CAAY,CAAE,KAAA,CAAO,oBAAqB,CAAC,CAAA,CAC9D,IAAA,CAAK,OAAA,CAAQ,IAAM,CACjB,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAAW,CAAE,KAAA,CAAO,mBAAoB,CAAC,EAC1D,CAAC,EACH,CAAC,CAAA,CAGD,IAAA,CAAK,IAAA,CAAK,IAAM,CACd,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,EAC1B,CAAC,CAAA,CAED,IAAA,CAAK,OAAA,CAAU2B,CAAM,CAAA,CACrB,KAAK,OAAA,CAAQ,IAAM,CACjB,IAAA,CAAK,QAAA,CAAW7B,CAAAA,CAAM,CAAE,KAAA,CAAO,YAAa,CAAC,CAAA,CAC7C,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,YAAa,CAAC,EAC3D,CAAC,EACH,CAAC,CAAA,CAEO,UAAA,CAAa,IAAA,CAAK,IAAA,CAAK,YAAA,CAAc,IAAM,CACjD,IAAA,CAAK,OAAA,CAAUQ,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAe,CAAE,KAAA,CAAO,MAAO,CAAC,CAAA,CAClD,IAAA,CAAK,OAAA,CAAUe,CAAM,CAAA,CACrB,IAAA,CAAK,OAAA,CAAQ,KAAK,UAAA,CAAY,CAAE,KAAA,CAAO,OAAQ,CAAC,EAClD,CAAC,CACH,CAAA,CAEac,CAAAA,CAAS,IAAIF,CAAAA,CCjPnB,IAAMG,EAAAA,CAAoD,CAC/D,SAAA,CAAYC,GAAmB,CAC7B,GAAIA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAChB,MAAM,IAAI,KAAA,CAAM,qEAAqE,CAAA,CAEvF,GAAM,CAACC,CAAAA,CAAKC,CAAAA,CAAOC,CAAM,CAAA,CAAIH,CAAAA,CAC7B,OAAIG,CAAAA,GAAW,MAAA,CAEN,CAAA,OAAA,EAAUF,CAAG,CAAA,QAAA,EAAWC,CAAK,CAAA,GAAA,EAAMA,CAAK,CAAA,KAAA,EAAQC,CAAM,CAAA,EAAA,CAAA,CAGxD,CAAA,OAAA,EAAUF,CAAG,CAAA,QAAA,EAAWC,CAAK,CAAA,CAAA,CACtC,CAAA,CACA,EAAA,CAAKF,CAAAA,EAAmB,CACtB,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sEAAsE,CAAA,CAExF,GAAM,CAACI,CAAAA,CAAWC,CAAAA,CAAWC,CAAU,CAAA,CAAIN,CAAAA,CAG3C,OAAO,CAAA,EAAA,EAAKI,CAAS,CAAA,KAAA,EAAQC,CAAS,CAAA,KAAA,EAAQC,CAAU,CAAA,EAAA,CAC1D,CAAA,CACA,IAAA,CAAON,CAAAA,EAAmB,CACxB,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,uDAAuD,CAAA,CAEzE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,CAAA,OAAA,EAAUC,CAAG,CAAA,CAAA,CACtB,CAAA,CACA,OAAA,CAAUD,CAAAA,EAAmB,CAC3B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sEAAsE,CAAA,CAExF,GAAM,CAACC,CAAAA,CAAKM,CAAAA,CAAQC,CAAW,CAAA,CAAIR,CAAAA,CACnC,OAAO,CAAA,OAAA,EAAUC,CAAG,CAAA,UAAA,EAAaM,CAAM,CAAA,EAAA,EAAKC,CAAW,CAAA,CAAA,CACzD,CAAA,CACA,MAAA,CAASR,CAAAA,EAAmB,CAC1B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,+CAA+C,CAAA,CAEjE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,UAAUC,CAAG,CAAA,CAAA,CACtB,CAAA,CACA,aAAA,CAAgBD,CAAAA,EAAmB,CACjC,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sDAAsD,CAAA,CAExE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,CAAA,cAAA,EAAiBC,CAAG,CAAA,6BAAA,CAC7B,CAAA,CACA,SAAA,CAAYD,CAAAA,EAAmB,CAC7B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA,CAEpE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,CAAA,OAAA,EAAUC,CAAG,CAAA,eAAA,CACtB,CAAA,CACA,SAAA,CAAYD,CAAAA,EAAmB,CAC7B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA,CAEpE,GAAM,CAACC,CAAG,CAAA,CAAID,CAAAA,CACd,OAAO,UAAUC,CAAG,CAAA,eAAA,CACtB,CAAA,CACA,OAAA,CAAUD,CAAAA,EAAmB,CAC3B,GAAIA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAChB,MAAM,IAAI,KAAA,CAAM,iDAAiD,CAAA,CAEnE,IAAMS,CAAAA,CAAQT,CAAAA,CAAK,CAAC,CAAA,CACdU,CAAAA,CAAiB,CAAC,GAAGV,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CACpCW,CAAAA,CAAa,EAAA,CACjB,GAAID,CAAAA,CAAe,OAAS,CAAA,CAAG,CAC7B,GAAI,CAACE,CAAAA,CAAMC,CAAS,CAAA,CAAI,CAACH,CAAAA,CAAgB,CAAC,CAAA,CAC1CE,CAAAA,CAAO,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAKA,CAAAA,CAAK,MAAA,CAASC,CAAS,CAAC,CAAC,CAAA,CACjD,GAAA,CAAKC,CAAAA,EAAMF,CAAAA,CAAK,MAAA,CAAO,CAAA,CAAGC,CAAS,CAAC,CAAA,CACpC,GAAA,CAAI,CAAC,CAACE,CAAAA,CAAKN,CAAK,CAAA,GAAM,CACrB,IAAIO,CAAAA,CAAUD,CAAAA,CACd,OAAIA,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAKA,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,CAC3CC,CAAAA,CAAU,CAAA,EAAA,EAAKD,CAAAA,CAAI,KAAA,CAAM,CAAA,CAAG,EAAE,CAAC,CAAA,CAAA,CAAA,CAE/BC,CAAAA,CAAU,CAAA,KAAA,EAAQD,CAAG,CAAA,CAAA,CAAA,CAEhB,CAAA,EAAGC,CAAO,CAAA,CAAA,EAAIP,GAAgB,MAAM,CAAA,CAC7C,CAAC,CAAA,CACHE,CAAAA,CAAa,GAAA,CAAMC,CAAAA,CAAK,IAAA,CAAK,GAAG,EAClC,CAAA,KACE,OAAOH,CAAAA,CAET,OAAO,CAAA,GAAA,EAAMA,CAAK,CAAA,EAAGE,CAAU,CAAA,CAAA,CACjC,CAAA,CACA,KAAA,CAAQX,CAAAA,EAAmB,CACzB,GAAIA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAChB,MAAM,IAAI,KAAA,CAAM,+CAA+C,CAAA,CAEjE,GAAM,CAACC,CAAAA,CAAKgB,CAAAA,CAAWC,CAAK,CAAA,CAAIlB,CAAAA,CAC1BmB,CAAAA,CAAMF,CAAAA,GAAc,MAAA,CAAYA,CAAAA,CAAY,IAAA,CAC5CG,CAAAA,CAAMF,CAAAA,GAAU,MAAA,CAAY,CAAA,EAAA,EAAKA,CAAK,CAAA,CAAA,CAAK,EAAA,CACjD,OAAO,CAAA,OAAA,EAAUjB,CAAG,CAAA,QAAA,EAAWkB,CAAG,CAAA,EAAGC,CAAG,CAAA,CAAA,CAC1C,CAAA,CACA,SAAA,CAAYpB,CAAAA,EAAmB,CAC7B,GAAIA,CAAAA,CAAK,SAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA,CAEpE,GAAM,CAACqB,CAAG,CAAA,CAAIrB,CAAAA,CACd,OAAO,CAAA,sEAAA,EAAyEqB,CAAG,CAAA,0BAAA,EAA6BA,CAAG,CAAA,+BAAA,CACrH,CAAA,CACA,WAAA,CAAcrB,CAAAA,EAAmB,CAC/B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,oDAAoD,CAAA,CAEtE,GAAM,CAACqB,CAAG,CAAA,CAAIrB,CAAAA,CACd,OAAO,CAAA,oEAAA,EAAuEqB,CAAG,CAAA,0BAAA,EAA6BA,CAAG,CAAA,+BAAA,CACnH,CAAA,CACA,MAAA,CAASrB,CAAAA,EAAmB,CAC1B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,sCAAsC,CAAA,CAExD,GAAM,CAACqB,CAAG,CAAA,CAAIrB,CAAAA,CACd,OAAO,CAAA,eAAA,EAAkBqB,CAAG,CAAA,IAAA,EAAOA,CAAG,CAAA,IAAA,EAAOA,CAAG,CAAA,iBAAA,EAAoBA,CAAG,CAAA,GAAA,CACzE,CACF,CAAA,CC/HA,IAAMC,EAAAA,CAAiBxB,CAAAA,CAAO,4BAAA,EAA6B,CAE9CyB,CAAAA,CAAN,cAA6BD,EAAuB,CAEjD,QAAA,CAAgC,QAAA,CAExC,WAAA,EAAc,CACZ,KAAA,EAAM,CACN,IAAA,CAAK,eAAA,GACP,CAKQ,gBAAA,CAAiBE,CAAAA,CAAWC,CAAAA,CAA4C,CAC9E,IAAMC,CAAAA,CAAmB,IAAA,CAAK,QAAA,CAC9B,KAAK,QAAA,CAAWD,CAAAA,CAAQ,QAAA,CACxB,IAAME,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMH,CAAI,CAAA,CAC9B,OAAA,IAAA,CAAK,QAAA,CAAWE,CAAAA,CACTC,CACT,CAEA,KAAA,CAAMC,CAAAA,CAAU,CACd,IAAMC,CAAAA,CAAUD,CAAAA,CAAI,MAAA,CAASA,CAAAA,CAAI,MAAA,CAAO,GAAA,CAAKE,CAAAA,EAAW,IAAA,CAAK,KAAA,CAAMA,CAAC,CAAC,CAAA,CAAI,EAAC,CAErEF,EAAI,SAAA,EACPC,CAAAA,CAAQ,IAAA,CAAK,gCAAgC,CAAA,CAG/C,IAAME,CAAAA,CAAa,IAAA,CAAK,KAAA,CAAMH,CAAAA,CAAI,UAAU,CAAA,CACtCI,CAAAA,CAAa,IAAA,CAAK,KAAA,CAAMJ,CAAAA,CAAI,UAAU,CAAA,CAGtCK,CAAAA,CAAiBF,CAAAA,CAAW,IAAA,CAC5BG,CAAAA,CAAiBF,CAAAA,CAAW,IAAA,CAC5BG,CAAAA,CAAcH,CAAAA,CAAW,SAAA,CAAY,CAAA,CAAA,EAAIA,CAAAA,CAAW,SAAS,CAAA,CAAA,CAAA,CAAM,WAAA,CAkBzE,OAAO,CACL,IAAA,CAjBW;AAAA;AAAA;AAAA,kCAAA,EAGmBC,CAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,EAMxCJ,EAAQ,IAAA,CAAK;AAAA,QAAA,CAAY,CAAC;;AAAA;AAAA,8BAAA,EAGJK,CAAc,CAAA,UAAA,EAAaC,CAAAA,GAAgB,YAAc,CAAA,mBAAA,EAAsBA,CAAW,KAAO,EAAE,CAAA;AAAA;AAAA,IAAA,CAAA,CAM7H,UAAA,CAAAJ,CAAAA,CACA,UAAA,CAAAC,CACF,CACF,CAEA,UAAA,CAAWJ,CAAAA,CAAU,CACnB,IAAMQ,CAAAA,CAAK,IAAA,CAAK,KAAA,CAAMR,CAAAA,CAAI,IAAI,CAAA,CAC1BS,CAAAA,CACJ,OAAIT,CAAAA,CAAI,SAAA,GAENS,CAAAA,CAAYT,CAAAA,CAAI,SAAA,CAAU,CAAC,CAAA,CAAE,KAAA,CAAM,KAAA,CAAM,CAAA,CAAG,EAAE,GAEzC,CAAE,IAAA,CAAMQ,CAAAA,CAAG,IAAA,CAAM,SAAA,CAAAC,CAAU,CACpC,CAEQ,SAAA,CAAUC,CAAAA,CAAcF,CAAAA,CAAuC,CACrE,OAAIA,CAAAA,CAAG,MAAA,EAAWA,CAAAA,CAAG,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAG,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAG,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,CACjF,CAAA,EAAGE,CAAI,CAAA,EAAA,EAAKF,CAAAA,CAAG,IAAI,CAAA,EAAA,CAAA,CAErB,CAAA,EAAGE,CAAI,CAAA,CAAA,EAAIF,CAAAA,CAAG,IAAI,CAAA,CAC3B,CAEA,aAAA,CAAcR,CAAAA,CAAU,CACtB,GAAIA,CAAAA,CAAI,UAAA,CACN,OAAO,CAAE,IAAA,CAAMA,CAAAA,CAAI,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,CAAO,MAAA,CAAQ,KAAM,EAExD,GAAIA,CAAAA,CAAI,gBAAA,CAGN,OAAO,CAAE,IAAA,CADIA,CAAAA,CAAI,gBAAA,CAAiB,CAAC,CAAA,CAAE,KAAA,CAAM,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAAE,OAAA,CAAQ,QAAA,CAAU,IAAI,CAAA,CAC/D,MAAA,CAAQ,IAAK,CAEhC,CAEA,OAAA,CAAQA,CAAAA,CAAU,CAChB,GAAIA,CAAAA,CAAI,aAAA,CACN,OAAOA,EAAI,aAAA,CAAc,CAAC,CAAA,CAAE,KAAA,CAE9B,GAAIA,CAAAA,CAAI,cAAA,CACN,OAAOA,CAAAA,CAAI,cAAA,CAAe,CAAC,CAAA,CAAE,KAEjC,CAEA,MAAA,CAAOA,CAAAA,CAAU,CACf,GAAIA,CAAAA,CAAI,OAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,OAAO,CAAA,CAE/B,GAAIA,CAAAA,CAAI,UAAA,CACN,OAAO,KAAK,KAAA,CAAMA,CAAAA,CAAI,UAAU,CAAA,CAElC,GAAIA,CAAAA,CAAI,WAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,WAAW,CAAA,CAEnC,GAAIA,CAAAA,CAAI,SAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,SAAS,CAAA,CAEjC,GAAIA,CAAAA,CAAI,QAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,QAAQ,EAEhC,GAAIA,CAAAA,CAAI,UAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,UAAU,CAAA,CAElC,GAAIA,CAAAA,CAAI,UAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,UAAU,CAEpC,CAEA,UAAA,CAAWA,CAAAA,CAAU,CACnB,IAAMW,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAMX,CAAAA,CAAI,KAAK,CAAA,CAClC,OAAO,CAAA,OAAA,EAAU,IAAA,CAAK,SAAA,CAAU,QAAA,CAAUW,CAAK,CAAC,CAAA,CAAA,CAClD,CAEA,QAAA,CAASX,CAAAA,CAAU,CACjB,IAAMxB,CAAAA,CAAY,IAAA,CAAK,KAAA,CAAMwB,CAAAA,CAAI,SAAS,CAAA,CACpCY,CAAAA,CAAcZ,CAAAA,CAAI,WAAA,CACpBA,CAAAA,CAAI,WAAA,CAAY,GAAA,CAAKE,CAAAA,EAAW,IAAA,CAAK,KAAA,CAAMA,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK;AAAA,CAAI,CAAA,CACxD,EAAA,CACEW,CAAAA,CAAYb,CAAAA,CAAI,YAClB,CAAA,OAAA,EAAUA,CAAAA,CAAI,WAAA,CAAY,GAAA,CAAKE,GAAW,IAAA,CAAK,KAAA,CAAMA,CAAC,CAAC,EAAE,IAAA,CAAK;AAAA,CAAI,CAAC,CAAA,EAAA,CAAA,CACnE,EAAA,CAEJ,OAAO,OAAO1B,CAAS,CAAA;AAAA,OAAA,EAClBoC,CAAW;AAAA,OAAA,EACXC,CAAS,CAAA,CAChB,CAEA,SAAA,CAAUb,EAAU,CAClB,OAAIA,CAAAA,CAAI,MAAA,CACcA,EAAI,MAAA,CAAO,GAAA,CAAKc,CAAAA,EAAW,IAAA,CAAK,MAAMA,CAAC,CAAC,CAAA,CAEzD,GAAA,CAAKN,CAAAA,EAAY,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,SAAUA,CAAE,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,UAAU,QAAA,CAAUA,CAAE,CAAC,CAAA,CAAA,CAAG,EACrF,IAAA,CAAK;AAAA,QAAA,CAAY,CAAA,CAEf,gCACT,CAEA,OAAA,CAAQR,EAAU,CAChB,IAAMe,CAAAA,CAAO,IAAA,CAAK,MAAMf,CAAAA,CAAI,IAAI,CAAA,CAC1BgB,CAAAA,CAAQ,KAAK,KAAA,CAAMhB,CAAAA,CAAI,KAAK,CAAA,CAClC,OAAO,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,SAAUe,CAAI,CAAC,CAAA,GAAA,EAAMC,CAAK,GACrD,CAEA,UAAA,CAAWhB,CAAAA,CAAU,CACnB,IAAMe,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAMf,CAAAA,CAAI,IAAI,CAAA,CAC1BgB,CAAAA,CAAQ,IAAA,CAAK,iBAAiBhB,CAAAA,CAAI,KAAA,CAAO,CAAE,QAAA,CAAU,QAAS,CAAC,CAAA,CACrE,OAAO,CAAA,EAAG,KAAK,SAAA,CAAU,QAAA,CAAUe,CAAI,CAAC,MAAMC,CAAK,CAAA,CAAA,CACrD,CAEA,UAAA,CAAWhB,EAAU,CACnB,IAAMe,CAAAA,CAAO,IAAA,CAAK,MAAMf,CAAAA,CAAI,IAAI,CAAA,CAC1BgB,CAAAA,CAAQ,KAAK,KAAA,CAAMhB,CAAAA,CAAI,KAAK,CAAA,CAClC,OAAO,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,SAAUe,CAAI,CAAC,CAAA,GAAA,EAAMC,CAAK,GACrD,CAEA,UAAA,CAAWhB,CAAAA,CAAU,CACnB,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,SAAS,CACjC,CAEA,SAAA,CAAUA,CAAAA,CAAU,CAClB,IAAID,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,GAAA,CACN,QAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAIA,CAAAA,CAAI,GAAA,CAAI,MAAA,CAAQ,CAAA,EAAA,CAAK,CACvC,IAAMiB,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMjB,CAAAA,CAAI,IAAI,CAAC,CAAC,CAAA,CACjCD,CAAAA,CAAS,GAAGA,CAAM,CAAA,IAAA,EAAOkB,CAAG,CAAA,EAC9B,CAEF,OAAOlB,CACT,CAEA,UAAA,CAAWC,EAAU,CACnB,IAAID,CAAAA,CAAS,IAAA,CAAK,MAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,EAAI,GAAA,CACN,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAIA,CAAAA,CAAI,GAAA,CAAI,MAAA,CAAQ,IAAK,CACvC,IAAMiB,CAAAA,CAAM,IAAA,CAAK,MAAMjB,CAAAA,CAAI,GAAA,CAAI,CAAC,CAAC,EACjCD,CAAAA,CAAS,CAAA,EAAGA,CAAM,CAAA,IAAA,EAAOkB,CAAG,CAAA,EAC9B,CAEF,OAAOlB,CACT,CAEA,UAAA,CAAWC,CAAAA,CAAU,CACnB,IAAID,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,GAAA,CAAK,CACX,IAAMkB,CAAAA,CAAKlB,CAAAA,CAAI,IAAI,CAAC,CAAA,CAAE,KAAA,CAChBiB,CAAAA,CAAM,KAAK,KAAA,CAAMjB,CAAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,CAAAA,CAAS,CAAA,EAAGA,CAAM,IAAImB,CAAE,CAAA,CAAA,EAAID,CAAG,CAAA,EACjC,CACA,OAAOlB,CACT,CAEA,QAAA,CAASC,EAAU,CACjB,IAAID,CAAAA,CAAS,IAAA,CAAK,MAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,GAAA,CACN,IAAA,IAAS,CAAA,CAAI,EAAG,CAAA,CAAIA,CAAAA,CAAI,GAAA,CAAI,MAAA,CAAQ,IAAK,CACvC,IAAMkB,CAAAA,CAAKlB,CAAAA,CAAI,IAAI,CAAC,CAAA,CAAE,KAAA,CAChBiB,CAAAA,CAAM,KAAK,KAAA,CAAMjB,CAAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,CAAAA,CAAS,CAAA,EAAGA,CAAM,IAAImB,CAAE,CAAA,CAAA,EAAID,CAAG,CAAA,EACjC,CAEF,OAAOlB,CACT,CAEA,cAAA,CAAeC,CAAAA,CAAU,CACvB,IAAID,CAAAA,CAAS,KAAK,KAAA,CAAMC,CAAAA,CAAI,GAAG,CAAA,CAC/B,GAAIA,CAAAA,CAAI,GAAA,CACN,IAAA,IAAS,CAAA,CAAI,EAAG,CAAA,CAAIA,CAAAA,CAAI,GAAA,CAAI,MAAA,CAAQ,IAAK,CACvC,IAAMkB,CAAAA,CAAKlB,CAAAA,CAAI,IAAI,CAAC,CAAA,CAAE,KAAA,CAChBiB,CAAAA,CAAM,KAAK,KAAA,CAAMjB,CAAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,CACjCD,CAAAA,CAAS,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAImB,CAAE,CAAA,CAAA,EAAID,CAAG,GACjC,CAEF,OAAOlB,CACT,CAEA,gBAAgBC,CAAAA,CAAU,CACxB,IAAMmB,CAAAA,CAAS,KAAK,KAAA,CAAMnB,CAAAA,CAAI,MAAM,CAAA,CACpC,OAAIA,CAAAA,CAAI,IAAA,CAEC,CAAA,EADIA,EAAI,IAAA,CAAK,CAAC,CAAA,CAAE,KACX,GAAGmB,CAAM,CAAA,CAAA,CAEhBA,CACT,CAEA,OAAOnB,CAAAA,CAAU,CACf,GAAIA,CAAAA,CAAI,OAAA,CACN,OAAO,IAAA,CAAK,KAAA,CAAMA,EAAI,OAAO,CAAA,CAE/B,GAAIA,CAAAA,CAAI,aACN,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,YAAY,CAAA,CAEpC,GAAIA,CAAAA,CAAI,aAAA,CAAe,CACrB,IAAMQ,CAAAA,CAAK,IAAA,CAAK,KAAA,CAAMR,EAAI,aAAa,CAAA,CACvC,GAAI,CAAC,OAAQ,OAAA,CAAS,MAAM,CAAA,CAAE,QAAA,CAASQ,EAAG,IAAI,CAAA,EAAK,CAACA,CAAAA,CAAG,MAAA,CACrD,OAAOA,CAAAA,CAAG,IAAA,CAEZ,GAAI,CAACA,CAAAA,CAAG,MAAA,CAAQ,CACd,GAAIA,CAAAA,CAAG,IAAA,GAAS,SAAA,EAAaA,CAAAA,CAAG,KAAK,UAAA,CAAW,UAAU,CAAA,EAAKA,CAAAA,CAAG,KAAK,UAAA,CAAW,UAAU,CAAA,CAC1F,OAAO,cAAcA,CAAAA,CAAG,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA,CAE3C,GAAIA,CAAAA,CAAG,IAAA,GAAS,WAAaA,CAAAA,CAAG,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAKA,CAAAA,CAAG,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,CAC1F,OAAO,CAAA,WAAA,EAAcA,CAAAA,CAAG,KAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAE7C,CACA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,SAAUA,CAAE,CACzC,CACA,GAAIR,EAAI,UAAA,CACN,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,MAAMA,CAAAA,CAAI,UAAU,CAAC,CAAA,CAAA,CAEzC,CAEA,YAAA,CAAaA,CAAAA,CAAU,CACrB,IAAMoB,CAAAA,CAAepB,CAAAA,CAAI,IAAA,CAAK,CAAC,EAAE,KAAA,CAC3BqB,CAAAA,CAAAA,CACJD,CAAAA,CAAa,UAAA,CAAW,GAAG,CAAA,CAAIA,CAAAA,CAAa,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAAIA,CAAAA,EAC3D,WAAA,EAAY,CACRhD,CAAAA,CAAO4B,CAAAA,CAAI,IAAA,CAAOA,CAAAA,CAAI,KAAK,GAAA,CAAK,CAAA,EAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAI,EAAC,CAE7DsB,EAAUnD,EAAAA,CAAiBkD,CAAI,CAAA,CACrC,GAAIC,CAAAA,CACF,OAAOA,CAAAA,CAAQlD,CAAI,EAGrB,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqBgD,CAAY,CAAA,CAAE,CACrD,CAEA,WAAA,CAAYpB,EAAU,CACpB,IAAMuB,CAAAA,CAAY,IAAA,CAAK,MAAMvB,CAAAA,CAAI,WAAW,CAAA,CACxBuB,EAAU,IAAA,KACxBC,CAAAA,CAAgB,IAAA,CAAK,SAAA,CAAU,SAAUD,CAAS,CAAA,CAElDE,CAAAA,CAAezB,CAAAA,CAAI,WAAa,IAAA,CAAK,KAAA,CAAMA,CAAAA,CAAI,UAAU,CAAA,CAAIuB,CAAAA,CAChDE,CAAAA,CAAa,OAAS,QAAA,CAAW,EAAA,CAAK,GAAA,CAAMA,CAAAA,CAAa,SAKtEC,CAAAA,CACJD,CAAAA,CAAa,IAAA,GAAS,QAAA,CAAW,SAAW,IAAA,CAAK,SAAA,CAAU,QAAA,CAAUA,CAAY,EAE7EE,CAAAA,CAAa,CAAC,CAAC3B,CAAAA,CAAI,SACnBC,CAAAA,CAAUD,CAAAA,CAAI,MAAA,CAASA,CAAAA,CAAI,OAAO,GAAA,CAAKE,CAAAA,EAAW,IAAA,CAAK,KAAA,CAAMA,CAAC,CAAC,CAAA,CAAI,GAKzE,GAFmB,CAAC,CAACF,CAAAA,CAAI,aAET,CACd,IAAM4B,CAAAA,CAAgB,IAAA,CAAK,MAAM5B,CAAAA,CAAI,kBAAkB,CAAA,CACjD6B,CAAAA,CAAgB,KAAK,KAAA,CAAM7B,CAAAA,CAAI,kBAAkB,CAAA,CAChCA,EAAI,iBAAA,EAIzBC,CAAAA,CAAQ,IAAA,CAAK,gCAAgC,EAG/C,IAAM6B,EAAAA,CAAiBD,CAAAA,CAAc,SAAA,CACjC,uBAAuBA,CAAAA,CAAc,SAAS,CAAA,GAAA,CAAA,CAC9C,EAAA,CAEJ,OAAIF,CAAAA,CACK;AAAA,YAAA,EACDD,CAAY,qBAAqBA,CAAY,CAAA;AAAA,UAAA,EAC/CF,CAAa,MAAME,CAAY,CAAA;AAAA,yCAAA,EACAE,EAAc,IAAI,CAAA;AAAA;AAAA;AAAA,YAAA,EAG/C3B,EAAQ,IAAA,CAAK;AAAA,YAAA,CAAgB,CAAC;AAAA,kCAAA,EACR4B,CAAAA,CAAc,IAAI,CAAA,SAAA,EAAYC,EAAc,CAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAKjE;AAAA,YAAA,EACDJ,CAAY,CAAA;AAAA,UAAA,EACdF,CAAa,CAAA;AAAA,yCAAA,EACkBI,EAAc,IAAI,CAAA;AAAA;AAAA;AAAA,YAAA,EAG/C3B,EAAQ,IAAA,CAAK;AAAA,YAAA,CAAgB,CAAC;AAAA,kCAAA,EACR4B,CAAAA,CAAc,IAAI,CAAA,SAAA,EAAYC,EAAc,CAAA;AAAA,aAAA,EACjEJ,CAAY,CAAA;AAAA;AAAA,QAAA,CAIvB,CAGA,OAAIC,CAAAA,CACK;AAAA,UAAA,EACDD,CAAY,qBAAqBA,CAAY,CAAA;AAAA,QAAA,EAC/CF,CAAa,MAAME,CAAY,CAAA;AAAA;AAAA;AAAA,UAAA,EAG7BzB,EAAQ,IAAA,CAAK;AAAA,UAAA,CAAc,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAM3B;AAAA,UAAA,EACDyB,CAAY,CAAA;AAAA,QAAA,EACdF,CAAa,CAAA;AAAA;AAAA;AAAA,UAAA,EAGXvB,EAAQ,IAAA,CAAK;AAAA,UAAA,CAAc,CAAC;AAAA;AAAA,WAAA,EAE3ByB,CAAY,CAAA;AAAA;AAAA,MAAA,CAIvB,CACF,CAAA,CAEaK,EAAAA,CAAW,IAAIpC,CAAAA,CC3W5B,IAAMqC,EAAAA,CAAwC,EAAC,CAExC,SAASC,CAAAA,CAAgBZ,CAAAA,CAAca,CAAAA,CAAsB,CAClEF,GAASX,CAAAA,CAAK,WAAA,EAAa,CAAA,CAAIa,EACjC,CAEO,SAASC,EAAAA,CAAWd,CAAAA,CAA2B,CACpD,IAAMa,CAAAA,CAAUF,GAASX,CAAAA,CAAK,WAAA,EAAa,CAAA,CAC3C,GAAI,CAACa,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgCb,CAAI,EAAE,CAAA,CAExD,OAAOa,CACT,CAIAD,EAAgB,MAAA,CAAQ,CACtB,MAAQG,CAAAA,EACF,OAAOA,GAAY,QAAA,CAAiBA,CAAAA,CACjC,IAAA,CAAK,KAAA,CAAMA,CAAO,CAAA,CAE3B,SAAA,CAAYC,CAAAA,EAAS,IAAA,CAAK,UAAUA,CAAAA,CAAM,IAAA,CAAM,CAAC,CACnD,CAAC,CAAA,CAGD,IAAMC,GAAa,IAAIC,UAAAA,CAAW,CAChC,gBAAA,CAAkB,KAAA,CAClB,mBAAA,CAAqB,GAAA,CACrB,aAAc,GAAA,CACd,MAAA,CAAQ,IACV,CAAC,EAEDN,CAAAA,CAAgB,KAAA,CAAO,CACrB,KAAA,CAAQG,GACF,OAAOA,CAAAA,EAAY,SAAiBA,CAAAA,CACzB,IAAII,UAAU,CAC3B,gBAAA,CAAkB,KAAA,CAClB,cAAA,CAAgB,IAClB,CAAC,CAAA,CACa,KAAA,CAAMJ,CAAO,EAE7B,SAAA,CAAW,CAACC,CAAAA,CAAMI,CAAAA,GAAY,CAC5B,IAAMC,CAAAA,CAAUD,GAAS,aAAA,EAAiB,MAAA,CAC1C,OAAOH,EAAAA,CAAW,KAAA,CAAM,CAAE,CAACI,CAAO,EAAGL,CAAK,CAAC,CAC7C,CACF,CAAC,CAAA,CAGDJ,CAAAA,CAAgB,QAAA,CAAU,CACxB,KAAA,CAAQG,CAAAA,EAAYA,EACpB,SAAA,CAAYC,CAAAA,EAASA,CACvB,CAAC,CAAA,CCxCD,eAAsBM,EAAAA,CACpBC,CAAAA,CACAH,CAAAA,CACsC,CAEtC,GAAIA,CAAAA,EAAS,KAAA,CAAO,CAClB,IAAMI,CAAAA,CAAa,MAAMJ,EAAQ,KAAA,CAAM,QAAA,CAASG,CAAW,CAAA,CAC3D,GAAIC,CAAAA,CACF,OAAOC,GAA6BD,CAAU,CAElD,CAGA,IAAME,EAAYhF,EAAAA,CAAW,QAAA,CAAS6E,CAAW,CAAA,CAEjD,GAAIG,CAAAA,CAAU,MAAA,CAAO,MAAA,CAAS,CAAA,CAC5B,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkBA,CAAAA,CAAU,OAAO,CAAC,CAAA,CAAE,OAAO,CAAA,CAAE,EAGjE7E,CAAAA,CAAO,KAAA,CAAQ6E,CAAAA,CAAU,MAAA,CACzB,IAAMC,CAAAA,CAAM9E,CAAAA,CAAO,OAAM,CAEzB,GAAIA,EAAO,MAAA,CAAO,MAAA,CAAS,CAAA,CACzB,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmBA,CAAAA,CAAO,MAAA,CAAO,CAAC,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAG/D,GAAM,CAAE,IAAA,CAAM+E,CAAQ,CAAA,CAAIlB,EAAAA,CAAS,MAAMiB,CAAG,CAAA,CAEtCE,CAAAA,CAAOC,EAAAA,CAAS,GAAGF,CAAAA,CAAS,CAChC,WAAA,CAAa,CAAA,CACb,qBAAsB,IAAA,CACtB,gBAAA,CAAkB,IACpB,CAAC,EAGD,OAAIR,CAAAA,EAAS,OACX,MAAMA,CAAAA,CAAQ,MAAM,IAAA,CAAKG,CAAAA,CAAaM,CAAI,CAAA,CAGrCJ,GAA6BI,CAAI,CAC1C,CAEA,SAASJ,GAA6BI,CAAAA,CAA2C,CAG/E,IAAME,CAAAA,CADU,IAAI,QAAA,CAASF,CAAI,GACP,CAGpBG,CAAAA,CAAM,CACV,KAAA,CAAO,CAACC,CAAAA,CAAgBlB,CAAAA,GACfD,GAAWmB,CAAM,CAAA,CAAE,KAAA,CAAMlB,CAAO,EAEzC,SAAA,CAAW,CAACkB,CAAAA,CAAgBjB,CAAAA,CAAWI,IAC9BN,EAAAA,CAAWmB,CAAM,EAAE,SAAA,CAAUjB,CAAAA,CAAMI,CAAO,CAErD,CAAA,CAGMc,CAAAA,EAAWC,CAAAA,EACRJ,EAAUI,CAAAA,CAAOH,CAAG,CAAA,CAAA,CAG7B,OAAAE,EAAO,IAAA,CAAOL,CAAAA,CACPK,CACT,CAgBO,SAASE,EAAAA,CAAQC,CAAAA,CAAAA,GAAkCC,EAAuB,CAC/E,OAAOD,EAAQ,MAAA,CAAO,CAACE,CAAAA,CAAKvF,CAAAA,CAAKwF,IAAMD,CAAAA,CAAMvF,CAAAA,EAAOsF,CAAAA,CAAOE,CAAC,GAAK,EAAA,CAAA,CAAK,EAAE,CAC1E,CAKO,SAASC,EAAAA,CAAMzC,CAAAA,CAAsB,CAC1C,OAAO,CAAA,OAAA,EAAUA,CAAI,CAAA,4BAAA,CACvB","file":"index.js","sourcesContent":["import { createToken, Lexer } from 'chevrotain';\n\nexport const WhiteSpace = createToken({\n name: 'WhiteSpace',\n pattern: /\\s+/,\n group: Lexer.SKIPPED,\n});\n\n// Comments\nexport const LineComment = createToken({\n name: 'LineComment',\n pattern: /\\/\\/[^\\n\\r]*/,\n group: Lexer.SKIPPED,\n});\n\nexport const BlockComment = createToken({\n name: 'BlockComment',\n pattern: /\\/\\*[\\s\\S]*?\\*\\//,\n group: Lexer.SKIPPED,\n});\n\nexport const Identifier = createToken({\n name: 'Identifier',\n pattern: /[a-zA-Z_$][a-zA-Z0-9_.\\[\\]]*/,\n});\n\nexport const QuotedIdentifier = createToken({\n name: 'QuotedIdentifier',\n pattern: /`([^`\\\\]|\\\\.)*`/,\n});\n\nexport const From = createToken({ name: 'From', pattern: /from/i, longer_alt: Identifier });\nexport const To = createToken({ name: 'To', pattern: /to/i, longer_alt: Identifier });\nexport const Transform = createToken({\n name: 'Transform',\n pattern: /transform/i,\n longer_alt: Identifier,\n});\nexport const Set = createToken({ name: 'Set', pattern: /set/i, longer_alt: Identifier });\nexport const Section = createToken({\n name: 'Section',\n pattern: /section/i,\n longer_alt: Identifier,\n});\nexport const Multiple = createToken({\n name: 'Multiple',\n pattern: /multiple/i,\n longer_alt: Identifier,\n});\nexport const Clone = createToken({ name: 'Clone', pattern: /clone/i, longer_alt: Identifier });\nexport const Delete = createToken({ name: 'Delete', pattern: /delete/i, longer_alt: Identifier });\nexport const Define = createToken({ name: 'Define', pattern: /define/i, longer_alt: Identifier });\nexport const Modify = createToken({ name: 'Modify', pattern: /modify/i, longer_alt: Identifier });\nexport const If = createToken({ name: 'If', pattern: /if/i, longer_alt: Identifier });\nexport const Else = createToken({ name: 'Else', pattern: /else/i, longer_alt: Identifier });\n\n// Comparison operators (must come before single-char operators)\nexport const EqualsEquals = createToken({ name: 'EqualsEquals', pattern: /==/ });\nexport const EqualsEqualsEquals = createToken({ name: 'EqualsEqualsEquals', pattern: /===/ });\nexport const NotEquals = createToken({ name: 'NotEquals', pattern: /!=/ });\nexport const NotEqualsEquals = createToken({ name: 'NotEqualsEquals', pattern: /!==/ });\nexport const LessThanOrEqual = createToken({ name: 'LessThanOrEqual', pattern: /<=/ });\nexport const GreaterThanOrEqual = createToken({ name: 'GreaterThanOrEqual', pattern: />=/ });\nexport const LessThan = createToken({ name: 'LessThan', pattern: /</ });\nexport const GreaterThan = createToken({ name: 'GreaterThan', pattern: />/ });\n\n// Logical operators\nexport const And = createToken({ name: 'And', pattern: /&&/ });\nexport const Or = createToken({ name: 'Or', pattern: /\\|\\|/ });\nexport const Not = createToken({ name: 'Not', pattern: /!/ });\n\nexport const Equals = createToken({ name: 'Equals', pattern: /=/ });\nexport const Plus = createToken({ name: 'Plus', pattern: /\\+/ });\nexport const Minus = createToken({ name: 'Minus', pattern: /-/ });\nexport const Times = createToken({ name: 'Times', pattern: /\\*/ });\nexport const Divide = createToken({ name: 'Divide', pattern: /\\// });\nexport const LParen = createToken({ name: 'LParen', pattern: /\\(/ });\nexport const RParen = createToken({ name: 'RParen', pattern: /\\)/ });\nexport const Comma = createToken({ name: 'Comma', pattern: /,/ });\n\nexport const StringLiteral = createToken({\n name: 'StringLiteral',\n pattern: /\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/,\n});\n\nexport const NumericLiteral = createToken({\n name: 'NumericLiteral',\n pattern: /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/,\n});\n\nexport const allTokens = [\n WhiteSpace,\n LineComment,\n BlockComment,\n From,\n To,\n Transform,\n Set,\n Section,\n Multiple,\n Clone,\n Delete,\n Define,\n Modify,\n If,\n Else,\n // Multi-character operators\n EqualsEqualsEquals,\n EqualsEquals,\n NotEqualsEquals,\n NotEquals,\n LessThanOrEqual,\n GreaterThanOrEqual,\n And,\n Or,\n // Single-character operators\n Equals,\n LessThan,\n GreaterThan,\n Not,\n Plus,\n Minus,\n Times,\n Divide,\n LParen,\n RParen,\n Comma,\n StringLiteral,\n NumericLiteral,\n QuotedIdentifier,\n Identifier,\n];\n\nexport const MorphLexer = new Lexer(allTokens);\n","import { CstParser } from 'chevrotain';\nimport * as t from './lexer.js';\n\nexport class MorphParser extends CstParser {\n constructor() {\n super(t.allTokens);\n this.performSelfAnalysis();\n }\n\n public query = this.RULE('query', () => {\n this.CONSUME(t.From);\n this.SUBRULE(this.typeFormat, { LABEL: 'sourceType' });\n this.CONSUME(t.To);\n this.SUBRULE1(this.typeFormat, { LABEL: 'targetType' });\n this.OPTION(() => {\n this.CONSUME(t.Transform);\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n });\n });\n\n private typeFormat = this.RULE('typeFormat', () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'name' });\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.CONSUME(t.StringLiteral, { LABEL: 'parameter' });\n this.CONSUME(t.RParen);\n });\n });\n\n private anyIdentifier = this.RULE('anyIdentifier', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier) },\n { ALT: () => this.CONSUME(t.QuotedIdentifier) },\n ]);\n });\n\n private literal = this.RULE('literal', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.StringLiteral) },\n { ALT: () => this.CONSUME(t.NumericLiteral) },\n ]);\n });\n\n private action = this.RULE('action', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.setRule) },\n { ALT: () => this.SUBRULE(this.modifyRule) },\n { ALT: () => this.SUBRULE(this.sectionRule) },\n { ALT: () => this.SUBRULE(this.cloneRule) },\n { ALT: () => this.SUBRULE(this.deleteRule) },\n { ALT: () => this.SUBRULE(this.ifAction) },\n { ALT: () => this.SUBRULE(this.defineRule) },\n ]);\n });\n\n private deleteRule = this.RULE('deleteRule', () => {\n this.CONSUME(t.Delete);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'field' });\n });\n\n private ifAction = this.RULE('ifAction', () => {\n this.CONSUME(t.If);\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression, { LABEL: 'condition' });\n this.CONSUME(t.RParen);\n this.CONSUME2(t.LParen); // Start 'then' block\n this.MANY(() => {\n this.SUBRULE(this.action, { LABEL: 'thenActions' });\n });\n this.CONSUME2(t.RParen); // End 'then' block\n this.OPTION(() => {\n this.CONSUME(t.Else);\n this.CONSUME3(t.LParen); // Start 'else' block\n this.MANY2(() => {\n this.SUBRULE2(this.action, { LABEL: 'elseActions' });\n });\n this.CONSUME3(t.RParen); // End 'else' block\n });\n });\n\n private cloneRule = this.RULE('cloneRule', () => {\n this.CONSUME(t.Clone);\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'fields' });\n },\n });\n this.CONSUME(t.RParen);\n });\n });\n\n private setRule = this.RULE('setRule', () => {\n this.CONSUME(t.Set);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private modifyRule = this.RULE('modifyRule', () => {\n this.CONSUME(t.Modify);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private expression = this.RULE('expression', () => {\n this.SUBRULE(this.logicalOr);\n });\n\n private logicalOr = this.RULE('logicalOr', () => {\n this.SUBRULE(this.logicalAnd, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.Or);\n this.SUBRULE1(this.logicalAnd, { LABEL: 'rhs' });\n });\n });\n\n private logicalAnd = this.RULE('logicalAnd', () => {\n this.SUBRULE(this.comparison, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.And);\n this.SUBRULE1(this.comparison, { LABEL: 'rhs' });\n });\n });\n\n private comparison = this.RULE('comparison', () => {\n this.SUBRULE(this.addition, { LABEL: 'lhs' });\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.EqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.EqualsEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThan, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThan, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.addition, { LABEL: 'rhs' });\n });\n });\n\n private addition = this.RULE('addition', () => {\n this.SUBRULE(this.multiplication, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Plus, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.multiplication, { LABEL: 'rhs' });\n });\n });\n\n private multiplication = this.RULE('multiplication', () => {\n this.SUBRULE(this.unaryExpression, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Times, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Divide, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.unaryExpression, { LABEL: 'rhs' });\n });\n });\n\n private unaryExpression = this.RULE('unaryExpression', () => {\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'sign' }) },\n { ALT: () => this.CONSUME(t.Not, { LABEL: 'sign' }) },\n ]);\n });\n this.SUBRULE(this.atomic);\n });\n\n private atomic = this.RULE('atomic', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.literal) },\n {\n GATE: () => this.LA(2).tokenType === t.LParen,\n ALT: () => this.SUBRULE(this.functionCall),\n },\n { ALT: () => this.SUBRULE(this.anyIdentifier) },\n {\n ALT: () => {\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression);\n this.CONSUME(t.RParen);\n },\n },\n ]);\n });\n\n private functionCall = this.RULE('functionCall', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier, { LABEL: 'name' }) },\n { ALT: () => this.CONSUME(t.If, { LABEL: 'name' }) },\n ]);\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.expression, { LABEL: 'args' });\n },\n });\n this.CONSUME(t.RParen);\n });\n\n private sectionRule = this.RULE('sectionRule', () => {\n this.CONSUME(t.Section);\n this.OPTION(() => {\n this.CONSUME(t.Multiple);\n });\n this.SUBRULE(this.anyIdentifier, { LABEL: 'sectionName' });\n this.CONSUME(t.LParen);\n\n // NEW: Check if this is a subquery section (from X to Y ...)\n this.OPTION1(() => {\n this.CONSUME(t.From, { LABEL: 'subqueryFrom' });\n this.SUBRULE(this.typeFormat, { LABEL: 'subquerySourceType' });\n this.CONSUME(t.To, { LABEL: 'subqueryTo' });\n this.SUBRULE1(this.typeFormat, { LABEL: 'subqueryTargetType' });\n this.OPTION2(() => {\n this.CONSUME(t.Transform, { LABEL: 'subqueryTransform' });\n });\n });\n\n // Actions (for both regular sections and subquery transform blocks)\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n\n this.CONSUME(t.RParen);\n this.OPTION3(() => {\n this.CONSUME1(t.From, { LABEL: 'followFrom' });\n this.SUBRULE2(this.anyIdentifier, { LABEL: 'followPath' });\n });\n });\n\n private defineRule = this.RULE('defineRule', () => {\n this.CONSUME(t.Define);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n}\n\nexport const parser = new MorphParser();\n","/**\n * Type for a function handler that generates JavaScript code for a DSL function call.\n * @param args - The compiled JavaScript strings for each argument.\n * @returns The generated JavaScript code for the function call.\n */\nexport type FunctionHandler = (args: string[]) => string;\n\n/**\n * Registry of available transformation functions in the DSL.\n */\nexport const functionRegistry: Record<string, FunctionHandler> = {\n substring: (args: string[]) => {\n if (args.length < 2) {\n throw new Error('substring() requires at least 2 arguments (string, start, [length])');\n }\n const [str, start, length] = args;\n if (length !== undefined) {\n // Third parameter is length, so calculate end as start + length\n return `String(${str}).slice(${start}, (${start}) + (${length}))`;\n }\n // Only 2 arguments: slice from start to end of string\n return `String(${str}).slice(${start})`;\n },\n if: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('if() requires exactly 3 arguments (condition, trueValue, falseValue)');\n }\n const [condition, trueValue, falseValue] = args;\n // Compile to ternary operator\n // Wrap in parentheses to ensure precedence is correct\n return `((${condition}) ? (${trueValue}) : (${falseValue}))`;\n },\n text: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('text() requires exactly 1 argument (string or number)');\n }\n const [str] = args;\n return `String(${str})`;\n },\n replace: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('replace() requires exactly 3 arguments (string, search, replacement)');\n }\n const [str, search, replacement] = args;\n return `String(${str}).replace(${search}, ${replacement})`;\n },\n number: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('number() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(${str})`;\n },\n extractnumber: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('extractNumber() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(String(${str}).match(/\\\\d+(\\\\.\\\\d+)?/)[0])`;\n },\n uppercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('uppercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toUpperCase()`;\n },\n lowercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('lowercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toLowerCase()`;\n },\n xmlnode: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('xmlnode() requires at least 1 argument (string)');\n }\n const value = args[0];\n const attributesList = [...args.slice(1)];\n let attributes = '';\n if (attributesList.length > 0) {\n let [list, chunkSize] = [attributesList, 2];\n list = [...Array(Math.ceil(list.length / chunkSize))]\n .map((_) => list.splice(0, chunkSize))\n .map(([key, value]) => {\n let attrKey = key;\n if (key.startsWith('\"') || key.startsWith(\"'\")) {\n attrKey = `\"$${key.slice(1, -1)}\"`;\n } else {\n attrKey = `[\"$\"+${key}]`;\n }\n return `${attrKey}:${value ? value : 'null'}`;\n });\n attributes = ',' + list.join(',');\n } else {\n return value;\n }\n return `{_:${value}${attributes}}`;\n },\n split: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('split() requires at least 1 argument (string)');\n }\n const [str, separator, limit] = args;\n const sep = separator !== undefined ? separator : '\"\"';\n const lim = limit !== undefined ? `, ${limit}` : '';\n return `String(${str}).split(${sep}${lim})`;\n },\n to_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('to_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${val})))) : Buffer.from(String(${val}), 'utf-8').toString('base64'))`;\n },\n from_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('from_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${val})))) : Buffer.from(String(${val}), 'base64').toString('utf-8'))`;\n },\n aslist: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('aslist() requires exactly 1 argument');\n }\n const [val] = args;\n return `(Array.isArray(${val}) ? ${val} : (${val} == null ? [] : [${val}]))`;\n },\n};\n","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\n\nconst BaseCstVisitor = parser.getBaseCstVisitorConstructor();\n\nexport class MorphCompiler extends (BaseCstVisitor as any) {\n // Context for modify directive - determines whether to read from 'source' or 'target'\n private readFrom: 'source' | 'target' = 'source';\n\n constructor() {\n super();\n this.validateVisitor();\n }\n\n /**\n * Visit with a temporary context change\n */\n private visitWithContext(node: any, context: { readFrom: 'source' | 'target' }) {\n const previousReadFrom = this.readFrom;\n this.readFrom = context.readFrom;\n const result = this.visit(node);\n this.readFrom = previousReadFrom;\n return result;\n }\n\n query(ctx: any) {\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (!ctx.Transform) {\n actions.push('Object.assign(target, source);');\n }\n\n const sourceType = this.visit(ctx.sourceType);\n const targetType = this.visit(ctx.targetType);\n\n // Helper to serialize types for generated code\n const sourceTypeName = sourceType.name;\n const targetTypeName = targetType.name;\n const targetParam = targetType.parameter ? `'${targetType.parameter}'` : 'undefined';\n\n const code = `\n return function(input, env) {\n // 1. Parse Input\n const source = env.parse('${sourceTypeName}', input);\n const _rootSource = source;\n \n // 2. Transform\n const target = {};\n const _rootTarget = target;\n ${actions.join('\\n ')}\n\n // 3. Serialize Output\n return env.serialize('${targetTypeName}', target ${targetParam !== 'undefined' ? `, { rootGenerated: ${targetParam} }` : ''} );\n }\n `;\n\n return {\n code,\n sourceType,\n targetType,\n };\n }\n\n typeFormat(ctx: any) {\n const id = this.visit(ctx.name);\n let parameter = undefined;\n if (ctx.parameter) {\n // Remove quotes from string literal\n parameter = ctx.parameter[0].image.slice(1, -1);\n }\n return { name: id.name, parameter };\n }\n\n private genAccess(base: string, id: { name: string; quoted: boolean }) {\n if (id.quoted || (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))) {\n return `${base}[\"${id.name}\"]`;\n }\n return `${base}.${id.name}`;\n }\n\n anyIdentifier(ctx: any) {\n if (ctx.Identifier) {\n return { name: ctx.Identifier[0].image, quoted: false };\n }\n if (ctx.QuotedIdentifier) {\n // Remove backticks and unescape\n const name = ctx.QuotedIdentifier[0].image.slice(1, -1).replace(/\\\\(.)/g, '$1');\n return { name, quoted: true };\n }\n }\n\n literal(ctx: any) {\n if (ctx.StringLiteral) {\n return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n return ctx.NumericLiteral[0].image;\n }\n }\n\n action(ctx: any) {\n if (ctx.setRule) {\n return this.visit(ctx.setRule);\n }\n if (ctx.modifyRule) {\n return this.visit(ctx.modifyRule);\n }\n if (ctx.sectionRule) {\n return this.visit(ctx.sectionRule);\n }\n if (ctx.cloneRule) {\n return this.visit(ctx.cloneRule);\n }\n if (ctx.ifAction) {\n return this.visit(ctx.ifAction);\n }\n if (ctx.deleteRule) {\n return this.visit(ctx.deleteRule);\n }\n if (ctx.defineRule) {\n return this.visit(ctx.defineRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\n return `delete ${this.genAccess('target', field)};`;\n }\n\n ifAction(ctx: any) {\n const condition = this.visit(ctx.condition);\n const thenActions = ctx.thenActions\n ? ctx.thenActions.map((a: any) => this.visit(a)).join('\\n')\n : '';\n const elseBlock = ctx.elseActions\n ? `else { ${ctx.elseActions.map((a: any) => this.visit(a)).join('\\n')} }`\n : '';\n\n return `if (${condition}) {\n ${thenActions}\n } ${elseBlock}`;\n }\n\n cloneRule(ctx: any) {\n if (ctx.fields) {\n const identifiers = ctx.fields.map((f: any) => this.visit(f));\n return identifiers\n .map((id: any) => `${this.genAccess('target', id)} = ${this.genAccess('source', id)};`)\n .join('\\n ');\n }\n return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('source', left)} = ${right};`;\n }\n\n expression(ctx: any) {\n return this.visit(ctx.logicalOr);\n }\n\n logicalOr(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} || ${rhs}`;\n }\n }\n return result;\n }\n\n logicalAnd(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} && ${rhs}`;\n }\n }\n return result;\n }\n\n comparison(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n const op = ctx.ops[0].image;\n const rhs = this.visit(ctx.rhs[0]);\n result = `${result} ${op} ${rhs}`;\n }\n return result;\n }\n\n addition(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n unaryExpression(ctx: any) {\n const atomic = this.visit(ctx.atomic);\n if (ctx.sign) {\n const op = ctx.sign[0].image;\n return `${op}${atomic}`;\n }\n return atomic;\n }\n\n atomic(ctx: any) {\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n if (ctx.functionCall) {\n return this.visit(ctx.functionCall);\n }\n if (ctx.anyIdentifier) {\n const id = this.visit(ctx.anyIdentifier);\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n if (id.name === '_source' || id.name.startsWith('_source.') || id.name.startsWith('_source[')) {\n return `_rootSource${id.name.substring(7)}`;\n }\n if (id.name === '_target' || id.name.startsWith('_target.') || id.name.startsWith('_target[')) {\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n return this.genAccess(this.readFrom, id);\n }\n if (ctx.expression) {\n return `(${this.visit(ctx.expression)})`;\n }\n }\n\n functionCall(ctx: any) {\n const originalName = ctx.name[0].image;\n const name = (\n originalName.startsWith('`') ? originalName.slice(1, -1) : originalName\n ).toLowerCase();\n const args = ctx.args ? ctx.args.map((a: any) => this.visit(a)) : [];\n\n const handler = functionRegistry[name];\n if (handler) {\n return handler(args);\n }\n\n throw new Error(`Unknown function: ${originalName}`);\n }\n\n sectionRule(ctx: any) {\n const sectionId = this.visit(ctx.sectionName);\n const sectionName = sectionId.name;\n const sectionAccess = this.genAccess('target', sectionId);\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n const followPath = followPathId.name === 'parent' ? '' : '.' + followPathId.name;\n // Note: followPath currently only supports simple paths or 'parent'.\n // If it's a quoted identifier, genAccess would return target[\"name\"].\n // But section handling uses '.' + followPath.\n // I should probably use genAccess here too for consistency, but it needs to be relative to 'source'.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n // Check if this is a subquery section\n const isSubquery = !!ctx.subqueryFrom;\n\n if (isSubquery) {\n const subSourceType = this.visit(ctx.subquerySourceType);\n const subTargetType = this.visit(ctx.subqueryTargetType);\n const hasTransform = !!ctx.subqueryTransform;\n\n if (!hasTransform) {\n // Pure format conversion - copy all fields\n actions.push('Object.assign(target, source);');\n }\n\n const subTargetParam = subTargetType.parameter\n ? `, { rootGenerated: \"${subTargetType.parameter}\" }`\n : '';\n\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const subSource = env.parse('${subSourceType.name}', item);\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target${subTargetParam});\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const subSource = env.parse('${subSourceType.name}', innerSource);\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target${subTargetParam});\n })(${sourceAccess});\n }\n `;\n }\n }\n\n // Regular section handling (unchanged)\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const source = item;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n })(${sourceAccess});\n }\n `;\n }\n }\n}\n\nexport const compiler = new MorphCompiler();\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nexport interface DataAdapter {\n parse(content: string, options?: any): any;\n serialize(data: any, options?: any): string;\n}\n\nconst adapters: Record<string, DataAdapter> = {};\n\nexport function registerAdapter(name: string, adapter: DataAdapter) {\n adapters[name.toLowerCase()] = adapter;\n}\n\nexport function getAdapter(name: string): DataAdapter {\n const adapter = adapters[name.toLowerCase()];\n if (!adapter) {\n throw new Error(`No adapter found for format: ${name}`);\n }\n return adapter;\n}\n\n// Default JSON Adapter\n\nregisterAdapter('json', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n return JSON.parse(content);\n },\n serialize: (data) => JSON.stringify(data, null, 2),\n});\n\n// Default XML Adapter\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n});\n\nregisterAdapter('xml', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n const parser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n });\n return parser.parse(content);\n },\n serialize: (data, options) => {\n const rootTag = options?.rootGenerated ?? 'root';\n return xmlBuilder.build({ [rootTag]: data });\n },\n});\n\n// Object Adapter (Identity)\nregisterAdapter('object', {\n parse: (content) => content, // Assumes input is already an object\n serialize: (data) => data, // Returns object directly\n});\n","import { MorphLexer } from './core/lexer.js';\nimport { parser } from './core/parser.js';\nimport { compiler } from './core/compiler.js';\nimport { getAdapter } from './runtime/adapters.js';\nimport { MorphQLCache } from './runtime/cache.js';\n\nexport { MorphQLCache };\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n}\n\nexport async function compile<Source = any, Target = any>(\n queryString: string,\n options?: CompileOptions\n): Promise<MorphEngine<Source, Target>> {\n // 1. Check Cache\n if (options?.cache) {\n const cachedCode = await options.cache.retrieve(queryString);\n if (cachedCode) {\n return createEngine<Source, Target>(cachedCode);\n }\n }\n\n // 2. Compile if miss\n const lexResult = MorphLexer.tokenize(queryString);\n\n if (lexResult.errors.length > 0) {\n throw new Error(`Lexing errors: ${lexResult.errors[0].message}`);\n }\n\n parser.input = lexResult.tokens;\n const cst = parser.query();\n\n if (parser.errors.length > 0) {\n throw new Error(`Parsing errors: ${parser.errors[0].message}`);\n }\n\n const { code: rawCode } = compiler.visit(cst);\n\n const code = beautify.js(rawCode, {\n indent_size: 2,\n space_in_empty_paren: true,\n end_with_newline: true,\n });\n\n // 3. Save to Cache\n if (options?.cache) {\n await options.cache.save(queryString, code);\n }\n\n return createEngine<Source, Target>(code);\n}\n\nfunction createEngine<Source, Target>(code: string): MorphEngine<Source, Target> {\n // Create the base transformation function\n const factory = new Function(code);\n const transform = factory() as (source: any, env: any) => any;\n\n // Environment with adapter lookups\n const env = {\n parse: (format: string, content: string) => {\n return getAdapter(format).parse(content);\n },\n serialize: (format: string, data: any, options?: any) => {\n return getAdapter(format).serialize(data, options);\n },\n };\n\n // Return the format-aware engine\n const engine = ((input: Source) => {\n return transform(input, env) as Target;\n }) as MorphEngine<Source, Target>;\n\n engine.code = code;\n return engine;\n}\n\n/**\n * Tagged template helper for MorphQL queries.\n * Enables syntax highlighting in VSCode and provides a cleaner API.\n *\n * @example\n * ```typescript\n * const query = morphQL`\n * from json to xml\n * transform\n * set fullName = firstName + \" \" + lastName\n * `;\n * const engine = await compile(query);\n * ```\n */\nexport function morphQL(strings: TemplateStringsArray, ...values: any[]): string {\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n}\n\n/**\n * Legacy greet function for compatibility during migration.\n */\nexport function greet(name: string): string {\n return `Hello, ${name}! The Morph engine is ready.`;\n}\n"]}
1
+ {"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/index.ts"],"names":["WhiteSpace","createToken","Lexer","LineComment","BlockComment","Identifier","QuotedIdentifier","From","To","Transform","Set","Section","Multiple","Clone","Delete","Define","Modify","If","Else","True","False","Null","EqualsEquals","EqualsEqualsEquals","NotEquals","NotEqualsEquals","LessThanOrEqual","GreaterThanOrEqual","LessThan","GreaterThan","And","Or","Not","Equals","Plus","Minus","Times","Divide","LParen","RParen","Comma","StringLiteral","NumericLiteral","allTokens","MorphLexer","MorphParser","CstParser","parser","functionRegistry","args","str","start","length","condition","trueValue","falseValue","search","replacement","value","attributesList","attributes","list","chunkSize","_","key","attrKey","separator","limit","sep","lim","val","BaseCstVisitor","MorphCompiler","node","context","previousReadFrom","result","ctx","actions","a","sourceType","targetType","sourceTypeName","targetTypeName","sourceOptions","targetOptions","id","options","p","image","num","base","field","thenActions","elseBlock","f","left","right","rhs","op","atomic","originalName","name","handler","sectionId","sectionAccess","followPathId","sourceAccess","isMultiple","subSourceType","subTargetType","subSourceOptions","subTargetOptions","compiler","adapters","registerAdapter","adapter","getAdapter","content","data","xmlBuilder","XMLBuilder","XMLParser","rootTag","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","code","beautify","transform","env","format","engine","input","morphQL","strings","values","acc","i","greet"],"mappings":"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","file":"index.js","sourcesContent":["import { createToken, Lexer } from 'chevrotain';\n\nexport const WhiteSpace = createToken({\n name: 'WhiteSpace',\n pattern: /\\s+/,\n group: Lexer.SKIPPED,\n});\n\n// Comments\nexport const LineComment = createToken({\n name: 'LineComment',\n pattern: /\\/\\/[^\\n\\r]*/,\n group: Lexer.SKIPPED,\n});\n\nexport const BlockComment = createToken({\n name: 'BlockComment',\n pattern: /\\/\\*[\\s\\S]*?\\*\\//,\n group: Lexer.SKIPPED,\n});\n\nexport const Identifier = createToken({\n name: 'Identifier',\n pattern: /[a-zA-Z_$][a-zA-Z0-9_.\\[\\]]*/,\n});\n\nexport const QuotedIdentifier = createToken({\n name: 'QuotedIdentifier',\n pattern: /`([^`\\\\]|\\\\.)*`/,\n});\n\nexport const From = createToken({ name: 'From', pattern: /from/i, longer_alt: Identifier });\nexport const To = createToken({ name: 'To', pattern: /to/i, longer_alt: Identifier });\nexport const Transform = createToken({\n name: 'Transform',\n pattern: /transform/i,\n longer_alt: Identifier,\n});\nexport const Set = createToken({ name: 'Set', pattern: /set/i, longer_alt: Identifier });\nexport const Section = createToken({\n name: 'Section',\n pattern: /section/i,\n longer_alt: Identifier,\n});\nexport const Multiple = createToken({\n name: 'Multiple',\n pattern: /multiple/i,\n longer_alt: Identifier,\n});\nexport const Clone = createToken({ name: 'Clone', pattern: /clone/i, longer_alt: Identifier });\nexport const Delete = createToken({ name: 'Delete', pattern: /delete/i, longer_alt: Identifier });\nexport const Define = createToken({ name: 'Define', pattern: /define/i, longer_alt: Identifier });\nexport const Modify = createToken({ name: 'Modify', pattern: /modify/i, longer_alt: Identifier });\nexport const If = createToken({ name: 'If', pattern: /if/i, longer_alt: Identifier });\nexport const Else = createToken({ name: 'Else', pattern: /else/i, longer_alt: Identifier });\nexport const True = createToken({ name: 'True', pattern: /true/i, longer_alt: Identifier });\nexport const False = createToken({ name: 'False', pattern: /false/i, longer_alt: Identifier });\nexport const Null = createToken({ name: 'Null', pattern: /null/i, longer_alt: Identifier });\n\n// Comparison operators (must come before single-char operators)\nexport const EqualsEquals = createToken({ name: 'EqualsEquals', pattern: /==/ });\nexport const EqualsEqualsEquals = createToken({ name: 'EqualsEqualsEquals', pattern: /===/ });\nexport const NotEquals = createToken({ name: 'NotEquals', pattern: /!=/ });\nexport const NotEqualsEquals = createToken({ name: 'NotEqualsEquals', pattern: /!==/ });\nexport const LessThanOrEqual = createToken({ name: 'LessThanOrEqual', pattern: /<=/ });\nexport const GreaterThanOrEqual = createToken({ name: 'GreaterThanOrEqual', pattern: />=/ });\nexport const LessThan = createToken({ name: 'LessThan', pattern: /</ });\nexport const GreaterThan = createToken({ name: 'GreaterThan', pattern: />/ });\n\n// Logical operators\nexport const And = createToken({ name: 'And', pattern: /&&/ });\nexport const Or = createToken({ name: 'Or', pattern: /\\|\\|/ });\nexport const Not = createToken({ name: 'Not', pattern: /!/ });\n\nexport const Equals = createToken({ name: 'Equals', pattern: /=/ });\nexport const Plus = createToken({ name: 'Plus', pattern: /\\+/ });\nexport const Minus = createToken({ name: 'Minus', pattern: /-/ });\nexport const Times = createToken({ name: 'Times', pattern: /\\*/ });\nexport const Divide = createToken({ name: 'Divide', pattern: /\\// });\nexport const LParen = createToken({ name: 'LParen', pattern: /\\(/ });\nexport const RParen = createToken({ name: 'RParen', pattern: /\\)/ });\nexport const Comma = createToken({ name: 'Comma', pattern: /,/ });\n\nexport const StringLiteral = createToken({\n name: 'StringLiteral',\n pattern: /\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/,\n});\n\nexport const NumericLiteral = createToken({\n name: 'NumericLiteral',\n pattern: /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/,\n});\n\nexport const allTokens = [\n WhiteSpace,\n LineComment,\n BlockComment,\n From,\n To,\n Transform,\n Set,\n Section,\n Multiple,\n Clone,\n Delete,\n Define,\n Modify,\n If,\n Else,\n True,\n False,\n Null,\n\n // Multi-character operators\n EqualsEqualsEquals,\n EqualsEquals,\n NotEqualsEquals,\n NotEquals,\n LessThanOrEqual,\n GreaterThanOrEqual,\n And,\n Or,\n // Single-character operators\n Equals,\n LessThan,\n GreaterThan,\n Not,\n Plus,\n Minus,\n Times,\n Divide,\n LParen,\n RParen,\n Comma,\n StringLiteral,\n NumericLiteral,\n QuotedIdentifier,\n Identifier,\n];\n\nexport const MorphLexer = new Lexer(allTokens);\n","import { CstParser } from 'chevrotain';\nimport * as t from './lexer.js';\n\nexport class MorphParser extends CstParser {\n constructor() {\n super(t.allTokens);\n this.performSelfAnalysis();\n }\n\n public query = this.RULE('query', () => {\n this.CONSUME(t.From);\n this.SUBRULE(this.typeFormat, { LABEL: 'sourceType' });\n this.CONSUME(t.To);\n this.SUBRULE1(this.typeFormat, { LABEL: 'targetType' });\n this.OPTION(() => {\n this.CONSUME(t.Transform);\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n });\n });\n\n private typeFormat = this.RULE('typeFormat', () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'name' });\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.typeFormatParameter, { LABEL: 'params' });\n },\n });\n this.CONSUME(t.RParen);\n });\n });\n\n private typeFormatParameter = this.RULE('typeFormatParameter', () => {\n this.OR([\n {\n GATE: () => this.LA(2).tokenType === t.Equals,\n ALT: () => this.SUBRULE(this.namedParameter),\n },\n { ALT: () => this.SUBRULE(this.literal) },\n ]);\n });\n\n private namedParameter = this.RULE('namedParameter', () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'key' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.literal, { LABEL: 'value' });\n });\n\n private anyIdentifier = this.RULE('anyIdentifier', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier) },\n { ALT: () => this.CONSUME(t.QuotedIdentifier) },\n ]);\n });\n\n private literal = this.RULE('literal', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.StringLiteral) },\n { ALT: () => this.CONSUME(t.NumericLiteral) },\n { ALT: () => this.CONSUME(t.True) },\n { ALT: () => this.CONSUME(t.False) },\n { ALT: () => this.CONSUME(t.Null) },\n ]);\n });\n\n private action = this.RULE('action', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.setRule) },\n { ALT: () => this.SUBRULE(this.modifyRule) },\n { ALT: () => this.SUBRULE(this.sectionRule) },\n { ALT: () => this.SUBRULE(this.cloneRule) },\n { ALT: () => this.SUBRULE(this.deleteRule) },\n { ALT: () => this.SUBRULE(this.ifAction) },\n { ALT: () => this.SUBRULE(this.defineRule) },\n ]);\n });\n\n private deleteRule = this.RULE('deleteRule', () => {\n this.CONSUME(t.Delete);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'field' });\n });\n\n private ifAction = this.RULE('ifAction', () => {\n this.CONSUME(t.If);\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression, { LABEL: 'condition' });\n this.CONSUME(t.RParen);\n this.CONSUME2(t.LParen); // Start 'then' block\n this.MANY(() => {\n this.SUBRULE(this.action, { LABEL: 'thenActions' });\n });\n this.CONSUME2(t.RParen); // End 'then' block\n this.OPTION(() => {\n this.CONSUME(t.Else);\n this.CONSUME3(t.LParen); // Start 'else' block\n this.MANY2(() => {\n this.SUBRULE2(this.action, { LABEL: 'elseActions' });\n });\n this.CONSUME3(t.RParen); // End 'else' block\n });\n });\n\n private cloneRule = this.RULE('cloneRule', () => {\n this.CONSUME(t.Clone);\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'fields' });\n },\n });\n this.CONSUME(t.RParen);\n });\n });\n\n private setRule = this.RULE('setRule', () => {\n this.CONSUME(t.Set);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private modifyRule = this.RULE('modifyRule', () => {\n this.CONSUME(t.Modify);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private expression = this.RULE('expression', () => {\n this.SUBRULE(this.logicalOr);\n });\n\n private logicalOr = this.RULE('logicalOr', () => {\n this.SUBRULE(this.logicalAnd, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.Or);\n this.SUBRULE1(this.logicalAnd, { LABEL: 'rhs' });\n });\n });\n\n private logicalAnd = this.RULE('logicalAnd', () => {\n this.SUBRULE(this.comparison, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.And);\n this.SUBRULE1(this.comparison, { LABEL: 'rhs' });\n });\n });\n\n private comparison = this.RULE('comparison', () => {\n this.SUBRULE(this.addition, { LABEL: 'lhs' });\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.EqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.EqualsEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThan, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThan, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.addition, { LABEL: 'rhs' });\n });\n });\n\n private addition = this.RULE('addition', () => {\n this.SUBRULE(this.multiplication, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Plus, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.multiplication, { LABEL: 'rhs' });\n });\n });\n\n private multiplication = this.RULE('multiplication', () => {\n this.SUBRULE(this.unaryExpression, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Times, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Divide, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.unaryExpression, { LABEL: 'rhs' });\n });\n });\n\n private unaryExpression = this.RULE('unaryExpression', () => {\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'sign' }) },\n { ALT: () => this.CONSUME(t.Not, { LABEL: 'sign' }) },\n ]);\n });\n this.SUBRULE(this.atomic);\n });\n\n private atomic = this.RULE('atomic', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.literal) },\n {\n GATE: () => this.LA(2).tokenType === t.LParen,\n ALT: () => this.SUBRULE(this.functionCall),\n },\n { ALT: () => this.SUBRULE(this.anyIdentifier) },\n {\n ALT: () => {\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression);\n this.CONSUME(t.RParen);\n },\n },\n ]);\n });\n\n private functionCall = this.RULE('functionCall', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier, { LABEL: 'name' }) },\n { ALT: () => this.CONSUME(t.If, { LABEL: 'name' }) },\n ]);\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.expression, { LABEL: 'args' });\n },\n });\n this.CONSUME(t.RParen);\n });\n\n private sectionRule = this.RULE('sectionRule', () => {\n this.CONSUME(t.Section);\n this.OPTION(() => {\n this.CONSUME(t.Multiple);\n });\n this.SUBRULE(this.anyIdentifier, { LABEL: 'sectionName' });\n this.CONSUME(t.LParen);\n\n // NEW: Check if this is a subquery section (from X to Y ...)\n this.OPTION1(() => {\n this.CONSUME(t.From, { LABEL: 'subqueryFrom' });\n this.SUBRULE(this.typeFormat, { LABEL: 'subquerySourceType' });\n this.CONSUME(t.To, { LABEL: 'subqueryTo' });\n this.SUBRULE1(this.typeFormat, { LABEL: 'subqueryTargetType' });\n this.OPTION2(() => {\n this.CONSUME(t.Transform, { LABEL: 'subqueryTransform' });\n });\n });\n\n // Actions (for both regular sections and subquery transform blocks)\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n\n this.CONSUME(t.RParen);\n this.OPTION3(() => {\n this.CONSUME1(t.From, { LABEL: 'followFrom' });\n this.SUBRULE2(this.anyIdentifier, { LABEL: 'followPath' });\n });\n });\n\n private defineRule = this.RULE('defineRule', () => {\n this.CONSUME(t.Define);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n}\n\nexport const parser = new MorphParser();\n","/**\n * Type for a function handler that generates JavaScript code for a DSL function call.\n * @param args - The compiled JavaScript strings for each argument.\n * @returns The generated JavaScript code for the function call.\n */\nexport type FunctionHandler = (args: string[]) => string;\n\n/**\n * Registry of available transformation functions in the DSL.\n */\nexport const functionRegistry: Record<string, FunctionHandler> = {\n substring: (args: string[]) => {\n if (args.length < 2) {\n throw new Error('substring() requires at least 2 arguments (string, start, [length])');\n }\n const [str, start, length] = args;\n if (length !== undefined) {\n // Third parameter is length, so calculate end as start + length\n return `String(${str}).slice(${start}, (${start}) + (${length}))`;\n }\n // Only 2 arguments: slice from start to end of string\n return `String(${str}).slice(${start})`;\n },\n if: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('if() requires exactly 3 arguments (condition, trueValue, falseValue)');\n }\n const [condition, trueValue, falseValue] = args;\n // Compile to ternary operator\n // Wrap in parentheses to ensure precedence is correct\n return `((${condition}) ? (${trueValue}) : (${falseValue}))`;\n },\n text: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('text() requires exactly 1 argument (string or number)');\n }\n const [str] = args;\n return `String(${str})`;\n },\n replace: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('replace() requires exactly 3 arguments (string, search, replacement)');\n }\n const [str, search, replacement] = args;\n return `String(${str}).replace(${search}, ${replacement})`;\n },\n number: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('number() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(${str})`;\n },\n extractnumber: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('extractNumber() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(String(${str}).match(/\\\\d+(\\\\.\\\\d+)?/)[0])`;\n },\n uppercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('uppercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toUpperCase()`;\n },\n lowercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('lowercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toLowerCase()`;\n },\n xmlnode: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('xmlnode() requires at least 1 argument (string)');\n }\n const value = args[0];\n const attributesList = [...args.slice(1)];\n let attributes = '';\n if (attributesList.length > 0) {\n let [list, chunkSize] = [attributesList, 2];\n list = [...Array(Math.ceil(list.length / chunkSize))]\n .map((_) => list.splice(0, chunkSize))\n .map(([key, value]) => {\n let attrKey = key;\n if (key.startsWith('\"') || key.startsWith(\"'\")) {\n attrKey = `\"$${key.slice(1, -1)}\"`;\n } else {\n attrKey = `[\"$\"+${key}]`;\n }\n return `${attrKey}:${value ? value : 'null'}`;\n });\n attributes = ',' + list.join(',');\n } else {\n return value;\n }\n return `{_:${value}${attributes}}`;\n },\n split: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('split() requires at least 1 argument (string)');\n }\n const [str, separator, limit] = args;\n const sep = separator !== undefined ? separator : '\"\"';\n const lim = limit !== undefined ? `, ${limit}` : '';\n return `String(${str}).split(${sep}${lim})`;\n },\n to_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('to_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${val})))) : Buffer.from(String(${val}), 'utf-8').toString('base64'))`;\n },\n from_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('from_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${val})))) : Buffer.from(String(${val}), 'base64').toString('utf-8'))`;\n },\n aslist: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('aslist() requires exactly 1 argument');\n }\n const [val] = args;\n return `(Array.isArray(${val}) ? ${val} : (${val} == null ? [] : [${val}]))`;\n },\n};\n","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\n\nconst BaseCstVisitor = parser.getBaseCstVisitorConstructor();\n\nexport class MorphCompiler extends (BaseCstVisitor as any) {\n // Context for modify directive - determines whether to read from 'source' or 'target'\n private readFrom: 'source' | 'target' = 'source';\n\n constructor() {\n super();\n this.validateVisitor();\n }\n\n /**\n * Visit with a temporary context change\n */\n private visitWithContext(node: any, context: { readFrom: 'source' | 'target' }) {\n const previousReadFrom = this.readFrom;\n this.readFrom = context.readFrom;\n const result = this.visit(node);\n this.readFrom = previousReadFrom;\n return result;\n }\n\n query(ctx: any) {\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (!ctx.Transform) {\n actions.push('Object.assign(target, source);');\n }\n\n const sourceType = this.visit(ctx.sourceType);\n const targetType = this.visit(ctx.targetType);\n\n // Helper to serialize types for generated code\n const sourceTypeName = sourceType.name;\n const targetTypeName = targetType.name;\n\n const sourceOptions = JSON.stringify(sourceType.options);\n const targetOptions = JSON.stringify(targetType.options);\n\n const code = `\n return function(input, env) {\n // 1. Parse Input\n const source = env.parse('${sourceTypeName}', input, ${sourceOptions});\n const _rootSource = source;\n \n // 2. Transform\n const target = {};\n const _rootTarget = target;\n ${actions.join('\\n ')}\n\n // 3. Serialize Output\n return env.serialize('${targetTypeName}', target, ${targetOptions});\n }\n `;\n\n return {\n code,\n sourceType,\n targetType,\n };\n }\n\n typeFormat(ctx: any) {\n const id = this.visit(ctx.name);\n const options: any = { params: [] };\n if (ctx.params) {\n ctx.params.forEach((p: any) => {\n const val = this.visit(p);\n if (typeof val === 'object' && 'key' in val) {\n options[val.key] = this.parseLiteral(val.value);\n } else {\n // Positional parameter - collect into params array\n options.params.push(this.parseLiteral(val));\n }\n });\n }\n return { name: id.name, options };\n }\n\n typeFormatParameter(ctx: any) {\n if (ctx.namedParameter) {\n return this.visit(ctx.namedParameter);\n }\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n }\n\n namedParameter(ctx: any) {\n const key = this.visit(ctx.key).name;\n const value = this.visit(ctx.value);\n return { key, value };\n }\n\n private parseLiteral(image: string) {\n if (image === 'true') return true;\n if (image === 'false') return false;\n if (image === 'null') return null;\n if (\n (image.startsWith('\"') && image.endsWith('\"')) ||\n (image.startsWith(\"'\") && image.endsWith(\"'\"))\n ) {\n return image.slice(1, -1);\n }\n const num = Number(image);\n if (!isNaN(num)) {\n return num;\n }\n return image;\n }\n\n private genAccess(base: string, id: { name: string; quoted: boolean }) {\n if (id.quoted || (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))) {\n return `${base}[\"${id.name}\"]`;\n }\n return `${base}.${id.name}`;\n }\n\n anyIdentifier(ctx: any) {\n if (ctx.Identifier) {\n return { name: ctx.Identifier[0].image, quoted: false };\n }\n if (ctx.QuotedIdentifier) {\n // Remove backticks and unescape\n const name = ctx.QuotedIdentifier[0].image.slice(1, -1).replace(/\\\\(.)/g, '$1');\n return { name, quoted: true };\n }\n }\n\n literal(ctx: any) {\n if (ctx.StringLiteral) {\n return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n return ctx.NumericLiteral[0].image;\n }\n if (ctx.True) return 'true';\n if (ctx.False) return 'false';\n if (ctx.Null) return 'null';\n }\n\n action(ctx: any) {\n if (ctx.setRule) {\n return this.visit(ctx.setRule);\n }\n if (ctx.modifyRule) {\n return this.visit(ctx.modifyRule);\n }\n if (ctx.sectionRule) {\n return this.visit(ctx.sectionRule);\n }\n if (ctx.cloneRule) {\n return this.visit(ctx.cloneRule);\n }\n if (ctx.ifAction) {\n return this.visit(ctx.ifAction);\n }\n if (ctx.deleteRule) {\n return this.visit(ctx.deleteRule);\n }\n if (ctx.defineRule) {\n return this.visit(ctx.defineRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\n return `delete ${this.genAccess('target', field)};`;\n }\n\n ifAction(ctx: any) {\n const condition = this.visit(ctx.condition);\n const thenActions = ctx.thenActions\n ? ctx.thenActions.map((a: any) => this.visit(a)).join('\\n')\n : '';\n const elseBlock = ctx.elseActions\n ? `else { ${ctx.elseActions.map((a: any) => this.visit(a)).join('\\n')} }`\n : '';\n\n return `if (${condition}) {\n ${thenActions}\n } ${elseBlock}`;\n }\n\n cloneRule(ctx: any) {\n if (ctx.fields) {\n const identifiers = ctx.fields.map((f: any) => this.visit(f));\n return identifiers\n .map((id: any) => `${this.genAccess('target', id)} = ${this.genAccess('source', id)};`)\n .join('\\n ');\n }\n return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('source', left)} = ${right};`;\n }\n\n expression(ctx: any) {\n return this.visit(ctx.logicalOr);\n }\n\n logicalOr(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} || ${rhs}`;\n }\n }\n return result;\n }\n\n logicalAnd(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} && ${rhs}`;\n }\n }\n return result;\n }\n\n comparison(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n const op = ctx.ops[0].image;\n const rhs = this.visit(ctx.rhs[0]);\n result = `${result} ${op} ${rhs}`;\n }\n return result;\n }\n\n addition(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n unaryExpression(ctx: any) {\n const atomic = this.visit(ctx.atomic);\n if (ctx.sign) {\n const op = ctx.sign[0].image;\n return `${op}${atomic}`;\n }\n return atomic;\n }\n\n atomic(ctx: any) {\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n if (ctx.functionCall) {\n return this.visit(ctx.functionCall);\n }\n if (ctx.anyIdentifier) {\n const id = this.visit(ctx.anyIdentifier);\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n if (\n id.name === '_source' ||\n id.name.startsWith('_source.') ||\n id.name.startsWith('_source[')\n ) {\n return `_rootSource${id.name.substring(7)}`;\n }\n if (\n id.name === '_target' ||\n id.name.startsWith('_target.') ||\n id.name.startsWith('_target[')\n ) {\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n return this.genAccess(this.readFrom, id);\n }\n if (ctx.expression) {\n return `(${this.visit(ctx.expression)})`;\n }\n }\n\n functionCall(ctx: any) {\n const originalName = ctx.name[0].image;\n const name = (\n originalName.startsWith('`') ? originalName.slice(1, -1) : originalName\n ).toLowerCase();\n const args = ctx.args ? ctx.args.map((a: any) => this.visit(a)) : [];\n\n const handler = functionRegistry[name];\n if (handler) {\n return handler(args);\n }\n\n throw new Error(`Unknown function: ${originalName}`);\n }\n\n sectionRule(ctx: any) {\n const sectionId = this.visit(ctx.sectionName);\n const sectionName = sectionId.name;\n const sectionAccess = this.genAccess('target', sectionId);\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n const followPath = followPathId.name === 'parent' ? '' : '.' + followPathId.name;\n // Note: followPath currently only supports simple paths or 'parent'.\n // If it's a quoted identifier, genAccess would return target[\"name\"].\n // But section handling uses '.' + followPath.\n // I should probably use genAccess here too for consistency, but it needs to be relative to 'source'.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n // Check if this is a subquery section\n const isSubquery = !!ctx.subqueryFrom;\n\n if (isSubquery) {\n const subSourceType = this.visit(ctx.subquerySourceType);\n const subTargetType = this.visit(ctx.subqueryTargetType);\n const hasTransform = !!ctx.subqueryTransform;\n\n if (!hasTransform) {\n // Pure format conversion - copy all fields\n actions.push('Object.assign(target, source);');\n }\n\n const subSourceOptions = JSON.stringify(subSourceType.options);\n const subTargetOptions = JSON.stringify(subTargetType.options);\n\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const subSource = env.parse('${subSourceType.name}', item, ${subSourceOptions});\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target, ${subTargetOptions});\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const subSource = env.parse('${subSourceType.name}', innerSource, ${subSourceOptions});\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target, ${subTargetOptions});\n })(${sourceAccess});\n }\n `;\n }\n }\n\n // Regular section handling (unchanged)\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const source = item;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n })(${sourceAccess});\n }\n `;\n }\n }\n}\n\nexport const compiler = new MorphCompiler();\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nexport interface DataAdapter {\n parse(content: string, options?: any): any;\n serialize(data: any, options?: any): string;\n}\n\nconst adapters: Record<string, DataAdapter> = {};\n\nexport function registerAdapter(name: string, adapter: DataAdapter) {\n adapters[name.toLowerCase()] = adapter;\n}\n\nexport function getAdapter(name: string): DataAdapter {\n const adapter = adapters[name.toLowerCase()];\n if (!adapter) {\n throw new Error(`No adapter found for format: ${name}`);\n }\n return adapter;\n}\n\n// Default JSON Adapter\n\nregisterAdapter('json', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n return JSON.parse(content);\n },\n serialize: (data) => JSON.stringify(data, null, 2),\n});\n\n// Default XML Adapter\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n});\n\nregisterAdapter('xml', {\n parse: (content, options) => {\n if (typeof content !== 'string') return content;\n const parser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n ...options,\n });\n return parser.parse(content);\n },\n serialize: (data, options) => {\n const rootTag = options?.rootGenerated ?? options?.params?.[0] ?? 'root';\n const builder = options\n ? new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n ...options,\n })\n : xmlBuilder;\n return builder.build({ [rootTag]: data });\n },\n});\n\n// Object Adapter (Identity)\nregisterAdapter('object', {\n parse: (content) => content, // Assumes input is already an object\n serialize: (data) => data, // Returns object directly\n});\n","import { MorphLexer } from './core/lexer.js';\nimport { parser } from './core/parser.js';\nimport { compiler } from './core/compiler.js';\nimport { getAdapter } from './runtime/adapters.js';\nimport { MorphQLCache } from './runtime/cache.js';\n\nexport { MorphQLCache };\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n}\n\nexport async function compile<Source = any, Target = any>(\n queryString: string,\n options?: CompileOptions\n): Promise<MorphEngine<Source, Target>> {\n // 1. Check Cache\n if (options?.cache) {\n const cachedCode = await options.cache.retrieve(queryString);\n if (cachedCode) {\n return createEngine<Source, Target>(cachedCode);\n }\n }\n\n // 2. Compile if miss\n const lexResult = MorphLexer.tokenize(queryString);\n\n if (lexResult.errors.length > 0) {\n throw new Error(`Lexing errors: ${lexResult.errors[0].message}`);\n }\n\n parser.input = lexResult.tokens;\n const cst = parser.query();\n\n if (parser.errors.length > 0) {\n throw new Error(`Parsing errors: ${parser.errors[0].message}`);\n }\n\n const { code: rawCode } = compiler.visit(cst);\n\n const code = beautify.js(rawCode, {\n indent_size: 2,\n space_in_empty_paren: true,\n end_with_newline: true,\n });\n\n // 3. Save to Cache\n if (options?.cache) {\n await options.cache.save(queryString, code);\n }\n\n return createEngine<Source, Target>(code);\n}\n\nfunction createEngine<Source, Target>(code: string): MorphEngine<Source, Target> {\n // Create the base transformation function\n const factory = new Function(code);\n const transform = factory() as (source: any, env: any) => any;\n\n // Environment with adapter lookups\n const env = {\n parse: (format: string, content: string, options?: any) => {\n return getAdapter(format).parse(content, options);\n },\n serialize: (format: string, data: any, options?: any) => {\n return getAdapter(format).serialize(data, options);\n },\n };\n\n // Return the format-aware engine\n const engine = ((input: Source) => {\n return transform(input, env) as Target;\n }) as MorphEngine<Source, Target>;\n\n engine.code = code;\n return engine;\n}\n\n/**\n * Tagged template helper for MorphQL queries.\n * Enables syntax highlighting in VSCode and provides a cleaner API.\n *\n * @example\n * ```typescript\n * const query = morphQL`\n * from json to xml\n * transform\n * set fullName = firstName + \" \" + lastName\n * `;\n * const engine = await compile(query);\n * ```\n */\nexport function morphQL(strings: TemplateStringsArray, ...values: any[]): string {\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n}\n\n/**\n * Legacy greet function for compatibility during migration.\n */\nexport function greet(name: string): string {\n return `Hello, ${name}! The Morph engine is ready.`;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@morphql/core",
3
- "version": "0.1.3",
3
+ "version": "0.1.6",
4
4
  "description": "A high-performance, isomorphic Query-to-Code engine for structural data transformations.",
5
5
  "type": "module",
6
6
  "publishConfig": {