@morphql/core 0.1.10 → 0.1.11

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,4 +1,4 @@
1
- 'use strict';var chevrotain=require('chevrotain'),fastXmlParser=require('fast-xml-parser'),gt=require('papaparse'),Ct=require('js-beautify');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var gt__default=/*#__PURE__*/_interopDefault(gt);var Ct__default=/*#__PURE__*/_interopDefault(Ct);var At=chevrotain.createToken({name:"WhiteSpace",pattern:/\s+/,group:chevrotain.Lexer.SKIPPED}),Ut=chevrotain.createToken({name:"LineComment",pattern:/\/\/[^\n\r]*/,group:chevrotain.Lexer.SKIPPED}),Tt=chevrotain.createToken({name:"BlockComment",pattern:/\/\*[\s\S]*?\*\//,group:chevrotain.Lexer.SKIPPED}),h=chevrotain.createToken({name:"Identifier",pattern:/[a-zA-Z_$][a-zA-Z0-9_.[\]]*/}),C=chevrotain.createToken({name:"QuotedIdentifier",pattern:/`([^`\\]|\\.)*`/}),L=chevrotain.createToken({name:"From",pattern:/from/i,longer_alt:h}),T=chevrotain.createToken({name:"To",pattern:/to/i,longer_alt:h}),N=chevrotain.createToken({name:"Transform",pattern:/transform/i,longer_alt:h}),B=chevrotain.createToken({name:"Set",pattern:/set/i,longer_alt:h}),M=chevrotain.createToken({name:"Section",pattern:/section/i,longer_alt:h}),I=chevrotain.createToken({name:"Multiple",pattern:/multiple/i,longer_alt:h}),q=chevrotain.createToken({name:"Clone",pattern:/clone/i,longer_alt:h}),P=chevrotain.createToken({name:"Delete",pattern:/delete/i,longer_alt:h}),w=chevrotain.createToken({name:"Define",pattern:/define/i,longer_alt:h}),k=chevrotain.createToken({name:"Modify",pattern:/modify/i,longer_alt:h}),R=chevrotain.createToken({name:"If",pattern:/if/i,longer_alt:h}),z=chevrotain.createToken({name:"Else",pattern:/else/i,longer_alt:h}),_=chevrotain.createToken({name:"True",pattern:/true/i,longer_alt:h}),j=chevrotain.createToken({name:"False",pattern:/false/i,longer_alt:h}),F=chevrotain.createToken({name:"Null",pattern:/null/i,longer_alt:h}),x=chevrotain.createToken({name:"Return",pattern:/return/i,longer_alt:h}),D=chevrotain.createToken({name:"Unsafe",pattern:/unsafe/i,longer_alt:h}),W=chevrotain.createToken({name:"EqualsEquals",pattern:/==/}),Y=chevrotain.createToken({name:"EqualsEqualsEquals",pattern:/===/}),G=chevrotain.createToken({name:"NotEquals",pattern:/!=/}),Q=chevrotain.createToken({name:"NotEqualsEquals",pattern:/!==/}),J=chevrotain.createToken({name:"LessThanOrEqual",pattern:/<=/}),V=chevrotain.createToken({name:"GreaterThanOrEqual",pattern:/>=/}),K=chevrotain.createToken({name:"LessThan",pattern:/</}),Z=chevrotain.createToken({name:"GreaterThan",pattern:/>/}),H=chevrotain.createToken({name:"And",pattern:/&&/}),X=chevrotain.createToken({name:"Or",pattern:/\|\|/}),tt=chevrotain.createToken({name:"Not",pattern:/!/}),y=chevrotain.createToken({name:"Equals",pattern:/=/}),et=chevrotain.createToken({name:"Plus",pattern:/\+/}),O=chevrotain.createToken({name:"Minus",pattern:/-/}),rt=chevrotain.createToken({name:"Times",pattern:/\*/}),st=chevrotain.createToken({name:"Divide",pattern:/\//}),c=chevrotain.createToken({name:"LParen",pattern:/\(/}),f=chevrotain.createToken({name:"RParen",pattern:/\)/}),S=chevrotain.createToken({name:"Comma",pattern:/,/}),it=chevrotain.createToken({name:"StringLiteral",pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/}),nt=chevrotain.createToken({name:"NumericLiteral",pattern:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/}),at=[At,Ut,Tt,L,T,N,B,M,I,q,P,w,k,R,z,_,j,F,x,D,Y,W,Q,G,J,V,H,X,y,K,Z,tt,et,O,rt,st,c,f,S,it,nt,C,h],mt=new chevrotain.Lexer(at);var ot=class extends chevrotain.CstParser{constructor(){super(at),this.performSelfAnalysis();}query=this.RULE("query",()=>{this.CONSUME(L),this.SUBRULE(this.typeFormat,{LABEL:"sourceType"}),this.CONSUME(T),this.SUBRULE1(this.typeFormat,{LABEL:"targetType"}),this.OPTION(()=>{this.CONSUME(N),this.OPTION1(()=>{this.CONSUME(D);}),this.MANY(()=>{this.SUBRULE(this.action);});});});typeFormat=this.RULE("typeFormat",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"name"}),this.OPTION(()=>{this.CONSUME(c),this.MANY_SEP({SEP:S,DEF:()=>{this.SUBRULE(this.typeFormatParameter,{LABEL:"params"});}}),this.CONSUME(f);});});typeFormatParameter=this.RULE("typeFormatParameter",()=>{this.OR([{GATE:()=>this.LA(2).tokenType===y,ALT:()=>this.SUBRULE(this.namedParameter)},{ALT:()=>this.SUBRULE(this.literal)}]);});namedParameter=this.RULE("namedParameter",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"key"}),this.CONSUME(y),this.SUBRULE(this.literal,{LABEL:"value"});});anyIdentifier=this.RULE("anyIdentifier",()=>{this.OR([{ALT:()=>this.CONSUME(h)},{ALT:()=>this.CONSUME(C)}]);});literal=this.RULE("literal",()=>{this.OR([{ALT:()=>this.CONSUME(it)},{ALT:()=>this.CONSUME(nt)},{ALT:()=>this.CONSUME(_)},{ALT:()=>this.CONSUME(j)},{ALT:()=>this.CONSUME(F)}]);});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)},{ALT:()=>this.SUBRULE(this.returnRule)}]);});returnRule=this.RULE("returnRule",()=>{this.CONSUME(x),this.SUBRULE(this.expression,{LABEL:"expr"});});deleteRule=this.RULE("deleteRule",()=>{this.CONSUME(P),this.SUBRULE(this.anyIdentifier,{LABEL:"field"});});ifAction=this.RULE("ifAction",()=>{this.CONSUME(R),this.CONSUME(c),this.SUBRULE(this.expression,{LABEL:"condition"}),this.CONSUME(f),this.CONSUME2(c),this.MANY(()=>{this.SUBRULE(this.action,{LABEL:"thenActions"});}),this.CONSUME2(f),this.OPTION(()=>{this.CONSUME(z),this.CONSUME3(c),this.MANY2(()=>{this.SUBRULE2(this.action,{LABEL:"elseActions"});}),this.CONSUME3(f);});});cloneRule=this.RULE("cloneRule",()=>{this.CONSUME(q),this.OPTION(()=>{this.CONSUME(c),this.MANY_SEP({SEP:S,DEF:()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"fields"});}}),this.CONSUME(f);});});setRule=this.RULE("setRule",()=>{this.CONSUME(B),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(y),this.SUBRULE(this.expression,{LABEL:"right"});});modifyRule=this.RULE("modifyRule",()=>{this.CONSUME(k),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(y),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(X),this.SUBRULE1(this.logicalAnd,{LABEL:"rhs"});});});logicalAnd=this.RULE("logicalAnd",()=>{this.SUBRULE(this.comparison,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(H),this.SUBRULE1(this.comparison,{LABEL:"rhs"});});});comparison=this.RULE("comparison",()=>{this.SUBRULE(this.addition,{LABEL:"lhs"}),this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(W,{LABEL:"ops"})},{ALT:()=>this.CONSUME(Y,{LABEL:"ops"})},{ALT:()=>this.CONSUME(G,{LABEL:"ops"})},{ALT:()=>this.CONSUME(Q,{LABEL:"ops"})},{ALT:()=>this.CONSUME(J,{LABEL:"ops"})},{ALT:()=>this.CONSUME(V,{LABEL:"ops"})},{ALT:()=>this.CONSUME(K,{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(et,{LABEL:"ops"})},{ALT:()=>this.CONSUME(O,{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(rt,{LABEL:"ops"})},{ALT:()=>this.CONSUME(st,{LABEL:"ops"})}]),this.SUBRULE1(this.unaryExpression,{LABEL:"rhs"});});});unaryExpression=this.RULE("unaryExpression",()=>{this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(O,{LABEL:"sign"})},{ALT:()=>this.CONSUME(tt,{LABEL:"sign"})}]);}),this.SUBRULE(this.atomic);});atomic=this.RULE("atomic",()=>{this.OR([{ALT:()=>this.SUBRULE(this.literal)},{GATE:()=>this.LA(2).tokenType===c,ALT:()=>this.SUBRULE(this.functionCall)},{ALT:()=>this.SUBRULE(this.anyIdentifier)},{ALT:()=>{this.CONSUME(c),this.SUBRULE(this.expression),this.CONSUME(f);}}]);});functionCall=this.RULE("functionCall",()=>{this.OR([{ALT:()=>this.CONSUME(h,{LABEL:"name"})},{ALT:()=>this.CONSUME(R,{LABEL:"name"})}]),this.CONSUME(c),this.MANY_SEP({SEP:S,DEF:()=>{this.SUBRULE(this.expression,{LABEL:"args"});}}),this.CONSUME(f);});sectionRule=this.RULE("sectionRule",()=>{this.CONSUME(M),this.OPTION(()=>{this.CONSUME(I);}),this.SUBRULE(this.anyIdentifier,{LABEL:"sectionName"}),this.CONSUME(c),this.OPTION1(()=>{this.CONSUME(L,{LABEL:"subqueryFrom"}),this.SUBRULE(this.typeFormat,{LABEL:"subquerySourceType"}),this.CONSUME(T,{LABEL:"subqueryTo"}),this.SUBRULE1(this.typeFormat,{LABEL:"subqueryTargetType"}),this.OPTION2(()=>{this.CONSUME(N,{LABEL:"subqueryTransform"});});}),this.MANY(()=>{this.SUBRULE(this.action);}),this.CONSUME(f),this.OPTION3(()=>{this.CONSUME1(L,{LABEL:"followFrom"}),this.SUBRULE2(this.anyIdentifier,{LABEL:"followPath"});});});defineRule=this.RULE("defineRule",()=>{this.CONSUME(w),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(y),this.SUBRULE(this.expression,{LABEL:"right"});})},d=new ot;var ft={substring:s=>{if(s.length<2)throw new Error("substring() requires at least 2 arguments (string, start, [length])");let[t,e,r]=s;return r!==void 0?`String(${t}).slice(${e}, (${e}) + (${r}))`:`String(${t}).slice(${e})`},if:s=>{if(s.length!==3)throw new Error("if() requires exactly 3 arguments (condition, trueValue, falseValue)");let[t,e,r]=s;return `((${t}) ? (${e}) : (${r}))`},text:s=>{if(s.length!==1)throw new Error("text() requires exactly 1 argument (string or number)");let[t]=s;return `String(${t})`},replace:s=>{if(s.length!==3)throw new Error("replace() requires exactly 3 arguments (string, search, replacement)");let[t,e,r]=s;return `String(${t}).replace(${e}, ${r})`},number:s=>{if(s.length!==1)throw new Error("number() requires exactly 1 argument (string)");let[t]=s;return `Number(${t})`},extractnumber:s=>{if(s.length!==1)throw new Error("extractNumber() requires exactly 1 argument (string)");let[t]=s;return `(() => { const match = String(${t}).match(/\\d+(\\.\\d+)?/); return match ? Number(match[0]) : null; })()`},uppercase:s=>{if(s.length!==1)throw new Error("uppercase() requires exactly 1 argument (string)");let[t]=s;return `String(${t}).toUpperCase()`},lowercase:s=>{if(s.length!==1)throw new Error("lowercase() requires exactly 1 argument (string)");let[t]=s;return `String(${t}).toLowerCase()`},xmlnode:s=>{if(s.length<1)throw new Error("xmlnode() requires at least 1 argument (string)");let t=s[0],e=[...s.slice(1)],r="";if(e.length>0){let i=[...e];i=[...Array(Math.ceil(i.length/2))].map(()=>i.splice(0,2)).map(([a,o])=>{let p=a;return a.startsWith('"')||a.startsWith("'")?p=`"$${a.slice(1,-1)}"`:p=`["$"+${a}]`,`${p}:${o||"null"}`}),r=","+i.join(",");}else return t;return `{_:${t}${r}}`},split:s=>{if(s.length<1)throw new Error("split() requires at least 1 argument (string)");let[t,e,r]=s,n=e!==void 0?e:'""',i=r!==void 0?`, ${r}`:"";return `String(${t}).split(${n}${i})`},to_base64:s=>{if(s.length!==1)throw new Error("to_base64() requires exactly 1 argument (string)");let[t]=s;return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${t})))) : Buffer.from(String(${t}), 'utf-8').toString('base64'))`},from_base64:s=>{if(s.length!==1)throw new Error("from_base64() requires exactly 1 argument (string)");let[t]=s;return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${t})))) : Buffer.from(String(${t}), 'base64').toString('utf-8'))`},aslist:s=>{if(s.length!==1)throw new Error("aslist() requires exactly 1 argument");let[t]=s;return `(Array.isArray(${t}) ? ${t} : (${t} == null ? [] : [${t}]))`},spreadsheet:s=>{if(s.length!==1)throw new Error("spreadsheet() requires exactly 1 argument");let[t]=s;return `((data)=>{
1
+ 'use strict';var chevrotain=require('chevrotain'),fastXmlParser=require('fast-xml-parser'),gt=require('papaparse'),Ct=require('js-beautify');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var gt__default=/*#__PURE__*/_interopDefault(gt);var Ct__default=/*#__PURE__*/_interopDefault(Ct);var At=chevrotain.createToken({name:"WhiteSpace",pattern:/\s+/,group:chevrotain.Lexer.SKIPPED}),Ut=chevrotain.createToken({name:"LineComment",pattern:/\/\/[^\n\r]*/,group:chevrotain.Lexer.SKIPPED}),Tt=chevrotain.createToken({name:"BlockComment",pattern:/\/\*[\s\S]*?\*\//,group:chevrotain.Lexer.SKIPPED}),h=chevrotain.createToken({name:"Identifier",pattern:/[a-zA-Z_$][a-zA-Z0-9_.[\]]*/}),C=chevrotain.createToken({name:"QuotedIdentifier",pattern:/`([^`\\]|\\.)*`/}),L=chevrotain.createToken({name:"From",pattern:/from/i,longer_alt:h}),N=chevrotain.createToken({name:"To",pattern:/to/i,longer_alt:h}),R=chevrotain.createToken({name:"Transform",pattern:/transform/i,longer_alt:h}),B=chevrotain.createToken({name:"Set",pattern:/set/i,longer_alt:h}),M=chevrotain.createToken({name:"Section",pattern:/section/i,longer_alt:h}),I=chevrotain.createToken({name:"Multiple",pattern:/multiple/i,longer_alt:h}),q=chevrotain.createToken({name:"Clone",pattern:/clone/i,longer_alt:h}),P=chevrotain.createToken({name:"Delete",pattern:/delete/i,longer_alt:h}),w=chevrotain.createToken({name:"Define",pattern:/define/i,longer_alt:h}),k=chevrotain.createToken({name:"Modify",pattern:/modify/i,longer_alt:h}),O=chevrotain.createToken({name:"If",pattern:/if/i,longer_alt:h}),z=chevrotain.createToken({name:"Else",pattern:/else/i,longer_alt:h}),_=chevrotain.createToken({name:"True",pattern:/true/i,longer_alt:h}),j=chevrotain.createToken({name:"False",pattern:/false/i,longer_alt:h}),F=chevrotain.createToken({name:"Null",pattern:/null/i,longer_alt:h}),x=chevrotain.createToken({name:"Return",pattern:/return/i,longer_alt:h}),D=chevrotain.createToken({name:"Unsafe",pattern:/unsafe/i,longer_alt:h}),W=chevrotain.createToken({name:"EqualsEquals",pattern:/==/}),Y=chevrotain.createToken({name:"EqualsEqualsEquals",pattern:/===/}),G=chevrotain.createToken({name:"NotEquals",pattern:/!=/}),Q=chevrotain.createToken({name:"NotEqualsEquals",pattern:/!==/}),J=chevrotain.createToken({name:"LessThanOrEqual",pattern:/<=/}),V=chevrotain.createToken({name:"GreaterThanOrEqual",pattern:/>=/}),K=chevrotain.createToken({name:"LessThan",pattern:/</}),Z=chevrotain.createToken({name:"GreaterThan",pattern:/>/}),H=chevrotain.createToken({name:"And",pattern:/&&/}),X=chevrotain.createToken({name:"Or",pattern:/\|\|/}),tt=chevrotain.createToken({name:"Not",pattern:/!/}),y=chevrotain.createToken({name:"Equals",pattern:/=/}),et=chevrotain.createToken({name:"Plus",pattern:/\+/}),b=chevrotain.createToken({name:"Minus",pattern:/-/}),rt=chevrotain.createToken({name:"Times",pattern:/\*/}),st=chevrotain.createToken({name:"Divide",pattern:/\//}),c=chevrotain.createToken({name:"LParen",pattern:/\(/}),f=chevrotain.createToken({name:"RParen",pattern:/\)/}),S=chevrotain.createToken({name:"Comma",pattern:/,/}),it=chevrotain.createToken({name:"StringLiteral",pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/}),nt=chevrotain.createToken({name:"NumericLiteral",pattern:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/}),at=[At,Ut,Tt,L,N,R,B,M,I,q,P,w,k,O,z,_,j,F,x,D,Y,W,Q,G,J,V,H,X,y,K,Z,tt,et,b,rt,st,c,f,S,it,nt,C,h],mt=new chevrotain.Lexer(at);var ot=class extends chevrotain.CstParser{constructor(){super(at),this.performSelfAnalysis();}query=this.RULE("query",()=>{this.CONSUME(L),this.SUBRULE(this.typeFormat,{LABEL:"sourceType"}),this.CONSUME(N),this.SUBRULE1(this.typeFormat,{LABEL:"targetType"}),this.OPTION(()=>{this.CONSUME(R),this.OPTION1(()=>{this.CONSUME(D);}),this.MANY(()=>{this.SUBRULE(this.action);});});});typeFormat=this.RULE("typeFormat",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"name"}),this.OPTION(()=>{this.CONSUME(c),this.MANY_SEP({SEP:S,DEF:()=>{this.SUBRULE(this.typeFormatParameter,{LABEL:"params"});}}),this.CONSUME(f);});});typeFormatParameter=this.RULE("typeFormatParameter",()=>{this.OR([{GATE:()=>this.LA(2).tokenType===y,ALT:()=>this.SUBRULE(this.namedParameter)},{ALT:()=>this.SUBRULE(this.literal)}]);});namedParameter=this.RULE("namedParameter",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"key"}),this.CONSUME(y),this.SUBRULE(this.literal,{LABEL:"value"});});anyIdentifier=this.RULE("anyIdentifier",()=>{this.OR([{ALT:()=>this.CONSUME(h)},{ALT:()=>this.CONSUME(C)}]);});literal=this.RULE("literal",()=>{this.OR([{ALT:()=>this.CONSUME(it)},{ALT:()=>this.CONSUME(nt)},{ALT:()=>this.CONSUME(_)},{ALT:()=>this.CONSUME(j)},{ALT:()=>this.CONSUME(F)}]);});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)},{ALT:()=>this.SUBRULE(this.returnRule)}]);});returnRule=this.RULE("returnRule",()=>{this.CONSUME(x),this.SUBRULE(this.expression,{LABEL:"expr"});});deleteRule=this.RULE("deleteRule",()=>{this.CONSUME(P),this.SUBRULE(this.anyIdentifier,{LABEL:"field"});});ifAction=this.RULE("ifAction",()=>{this.CONSUME(O),this.CONSUME(c),this.SUBRULE(this.expression,{LABEL:"condition"}),this.CONSUME(f),this.CONSUME2(c),this.MANY(()=>{this.SUBRULE(this.action,{LABEL:"thenActions"});}),this.CONSUME2(f),this.OPTION(()=>{this.CONSUME(z),this.CONSUME3(c),this.MANY2(()=>{this.SUBRULE2(this.action,{LABEL:"elseActions"});}),this.CONSUME3(f);});});cloneRule=this.RULE("cloneRule",()=>{this.CONSUME(q),this.OPTION(()=>{this.CONSUME(c),this.MANY_SEP({SEP:S,DEF:()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"fields"});}}),this.CONSUME(f);});});setRule=this.RULE("setRule",()=>{this.CONSUME(B),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(y),this.SUBRULE(this.expression,{LABEL:"right"});});modifyRule=this.RULE("modifyRule",()=>{this.CONSUME(k),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(y),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(X),this.SUBRULE1(this.logicalAnd,{LABEL:"rhs"});});});logicalAnd=this.RULE("logicalAnd",()=>{this.SUBRULE(this.comparison,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(H),this.SUBRULE1(this.comparison,{LABEL:"rhs"});});});comparison=this.RULE("comparison",()=>{this.SUBRULE(this.addition,{LABEL:"lhs"}),this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(W,{LABEL:"ops"})},{ALT:()=>this.CONSUME(Y,{LABEL:"ops"})},{ALT:()=>this.CONSUME(G,{LABEL:"ops"})},{ALT:()=>this.CONSUME(Q,{LABEL:"ops"})},{ALT:()=>this.CONSUME(J,{LABEL:"ops"})},{ALT:()=>this.CONSUME(V,{LABEL:"ops"})},{ALT:()=>this.CONSUME(K,{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(et,{LABEL:"ops"})},{ALT:()=>this.CONSUME(b,{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(rt,{LABEL:"ops"})},{ALT:()=>this.CONSUME(st,{LABEL:"ops"})}]),this.SUBRULE1(this.unaryExpression,{LABEL:"rhs"});});});unaryExpression=this.RULE("unaryExpression",()=>{this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(b,{LABEL:"sign"})},{ALT:()=>this.CONSUME(tt,{LABEL:"sign"})}]);}),this.SUBRULE(this.atomic);});atomic=this.RULE("atomic",()=>{this.OR([{ALT:()=>this.SUBRULE(this.literal)},{GATE:()=>this.LA(2).tokenType===c,ALT:()=>this.SUBRULE(this.functionCall)},{ALT:()=>this.SUBRULE(this.anyIdentifier)},{ALT:()=>{this.CONSUME(c),this.SUBRULE(this.expression),this.CONSUME(f);}}]);});functionCall=this.RULE("functionCall",()=>{this.OR([{ALT:()=>this.CONSUME(h,{LABEL:"name"})},{ALT:()=>this.CONSUME(O,{LABEL:"name"})}]),this.CONSUME(c),this.MANY_SEP({SEP:S,DEF:()=>{this.SUBRULE(this.expression,{LABEL:"args"});}}),this.CONSUME(f);});sectionRule=this.RULE("sectionRule",()=>{this.CONSUME(M),this.OPTION(()=>{this.CONSUME(I);}),this.SUBRULE(this.anyIdentifier,{LABEL:"sectionName"}),this.CONSUME(c),this.OPTION1(()=>{this.CONSUME(L,{LABEL:"subqueryFrom"}),this.SUBRULE(this.typeFormat,{LABEL:"subquerySourceType"}),this.CONSUME(N,{LABEL:"subqueryTo"}),this.SUBRULE1(this.typeFormat,{LABEL:"subqueryTargetType"}),this.OPTION2(()=>{this.CONSUME(R,{LABEL:"subqueryTransform"});});}),this.MANY(()=>{this.SUBRULE(this.action);}),this.CONSUME(f),this.OPTION3(()=>{this.CONSUME1(L,{LABEL:"followFrom"}),this.SUBRULE2(this.anyIdentifier,{LABEL:"followPath"});});});defineRule=this.RULE("defineRule",()=>{this.CONSUME(w),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(y),this.SUBRULE(this.expression,{LABEL:"right"});})},d=new ot;var ft={substring:s=>{if(s.length<2)throw new Error("substring() requires at least 2 arguments (string, start, [length])");let[t,e,r]=s;return r!==void 0?`String(${t}).slice(${e}, (${e}) + (${r}))`:`String(${t}).slice(${e})`},if:s=>{if(s.length!==3)throw new Error("if() requires exactly 3 arguments (condition, trueValue, falseValue)");let[t,e,r]=s;return `((${t}) ? (${e}) : (${r}))`},text:s=>{if(s.length!==1)throw new Error("text() requires exactly 1 argument (string or number)");let[t]=s;return `String(${t})`},replace:s=>{if(s.length!==3)throw new Error("replace() requires exactly 3 arguments (string, search, replacement)");let[t,e,r]=s;return `String(${t}).replace(${e}, ${r})`},number:s=>{if(s.length!==1)throw new Error("number() requires exactly 1 argument (string)");let[t]=s;return `Number(${t})`},extractnumber:s=>{if(s.length!==1)throw new Error("extractNumber() requires exactly 1 argument (string)");let[t]=s;return `(() => { const match = String(${t}).match(/\\d+(\\.\\d+)?/); return match ? Number(match[0]) : null; })()`},uppercase:s=>{if(s.length!==1)throw new Error("uppercase() requires exactly 1 argument (string)");let[t]=s;return `String(${t}).toUpperCase()`},lowercase:s=>{if(s.length!==1)throw new Error("lowercase() requires exactly 1 argument (string)");let[t]=s;return `String(${t}).toLowerCase()`},xmlnode:s=>{if(s.length<1)throw new Error("xmlnode() requires at least 1 argument (string)");let t=s[0],e=[...s.slice(1)],r="";if(e.length>0){let i=[...e];i=[...Array(Math.ceil(i.length/2))].map(()=>i.splice(0,2)).map(([a,o])=>{let p=a;return a.startsWith('"')||a.startsWith("'")?p=`"$${a.slice(1,-1)}"`:p=`["$"+${a}]`,`${p}:${o||"null"}`}),r=","+i.join(",");}else return t;return `{_:${t}${r}}`},split:s=>{if(s.length<1)throw new Error("split() requires at least 1 argument (string)");let[t,e,r]=s,n=e!==void 0?e:'""',i=r!==void 0?`, ${r}`:"";return `String(${t}).split(${n}${i})`},to_base64:s=>{if(s.length!==1)throw new Error("to_base64() requires exactly 1 argument (string)");let[t]=s;return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${t})))) : Buffer.from(String(${t}), 'utf-8').toString('base64'))`},from_base64:s=>{if(s.length!==1)throw new Error("from_base64() requires exactly 1 argument (string)");let[t]=s;return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${t})))) : Buffer.from(String(${t}), 'base64').toString('utf-8'))`},aslist:s=>{if(s.length!==1)throw new Error("aslist() requires exactly 1 argument");let[t]=s;return `(Array.isArray(${t}) ? ${t} : (${t} == null ? [] : [${t}]))`},spreadsheet:s=>{if(s.length!==1)throw new Error("spreadsheet() requires exactly 1 argument");let[t]=s;return `((data)=>{
2
2
  const spreadsheet = Array.isArray(data) ? data : (data == null ? [] : [data]);
3
3
  const out = [];
4
4
  const titles = [];
@@ -80,5 +80,5 @@
80
80
  return target;
81
81
  })(${a});
82
82
  }
83
- `,this.scopeStack.pop(),g}},ht=new lt;var dt={};function b(s,t){dt[s.toLowerCase()]=t;}function pt(s){let t=dt[s.toLowerCase()];if(!t)throw new Error(`No adapter found for format: ${s}`);return t}function $t(s){let t="";for(;s>=0;)t=String.fromCharCode(s%26+65)+t,s=Math.floor(s/26)-1;return t}b("json",{parse:s=>typeof s!="string"?s:JSON.parse(s),serialize:s=>JSON.stringify(s,null,2)});var vt=new fastXmlParser.XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true});b("xml",{parse:(s,t)=>typeof s!="string"?s:new fastXmlParser.XMLParser({ignoreAttributes:false,removeNSPrefix:true,...t}).parse(s),serialize:(s,t)=>{let e=t?.rootGenerated??t?.params?.[0]??"root";return (t?new fastXmlParser.XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true,...t}):vt).build({[e]:s})}});b("csv",{parse:(s,t)=>{if(typeof s!="string")return s;let e=t?.delimiter??t?.params?.[0]??",";return {rows:gt__default.default.parse(s,{delimiter:e,skipEmptyLines:true,...t}).data.map(i=>{let a={};return Array.isArray(i)&&i.forEach((o,p)=>{a[$t(p)]=o;}),a})}},serialize:(s,t)=>{if(!s||!Array.isArray(s.rows))return "";let e=t?.delimiter??t?.params?.[0]??",",r=s.rows.map(n=>Object.keys(n).filter(a=>/^[A-Z]+$/.test(a)).sort((a,o)=>a.length!==o.length?a.length-o.length:a.localeCompare(o)).map(a=>n[a]));return gt__default.default.unparse(r,{delimiter:e,...t})}});b("object",{parse:s=>s,serialize:s=>s});async function Xt(s,t){if(t?.cache){let g=await t.cache.retrieve(s);if(g)return Et(g)}let e=mt.tokenize(s);if(e.errors.length>0)throw new Error(`Lexing errors: ${e.errors[0].message}`);d.input=e.tokens;let r=d.query();if(d.errors.length>0)throw new Error(`Parsing errors: ${d.errors[0].message}`);ht.isAnalyzing=!!t?.analyze;let{code:n,analysis:i,sourceType:a,targetType:o}=ht.visit(r),p=Ct__default.default.js(n,{indent_size:2,space_in_empty_paren:true,end_with_newline:true});t?.cache&&await t.cache.save(s,p);let u=Et(p);return i&&(i.sourceFormat=a.name,i.targetFormat=o.name,u.analysis=i),u}function Et(s){let e=new Function(s)(),r={parse:(i,a,o)=>pt(i).parse(a,o),serialize:(i,a,o)=>pt(i).serialize(a,o)},n=(i=>e(i,r));return n.code=s,n}function te(s,...t){return s.reduce((e,r,n)=>e+r+(t[n]??""),"")}function ee(s){return `Hello, ${s}! The Morph engine is ready.`}exports.compile=Xt;exports.greet=ee;exports.morphQL=te;//# sourceMappingURL=index.cjs.map
83
+ `,this.scopeStack.pop(),g}},ht=new lt;var dt={};function U(s,t){dt[s.toLowerCase()]=t;}function pt(s){let t=dt[s.toLowerCase()];if(!t)throw new Error(`No adapter found for format: ${s}`);return t}function $t(s){let t="";for(;s>=0;)t=String.fromCharCode(s%26+65)+t,s=Math.floor(s/26)-1;return t}U("json",{parse:s=>typeof s!="string"?s:JSON.parse(s),serialize:s=>JSON.stringify(s,null,2)});var vt=new fastXmlParser.XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true});U("xml",{parse:(s,t)=>typeof s!="string"?s:new fastXmlParser.XMLParser({ignoreAttributes:false,removeNSPrefix:true,...t}).parse(s),serialize:(s,t)=>{let e=t?.rootGenerated??t?.params?.[0]??"root";return (t?new fastXmlParser.XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true,...t}):vt).build({[e]:s})}});U("csv",{parse:(s,t)=>{if(typeof s!="string")return s;let e=t?.delimiter??t?.params?.[0]??",";return {rows:gt__default.default.parse(s,{delimiter:e,skipEmptyLines:true,...t}).data.map(i=>{let a={};return Array.isArray(i)&&i.forEach((o,p)=>{a[$t(p)]=o;}),a})}},serialize:(s,t)=>{if(!s||!Array.isArray(s.rows))return "";let e=t?.delimiter??t?.params?.[0]??",",r=s.rows.map(n=>Object.keys(n).filter(a=>/^[A-Z]+$/.test(a)).sort((a,o)=>a.length!==o.length?a.length-o.length:a.localeCompare(o)).map(a=>n[a]));return gt__default.default.unparse(r,{delimiter:e,...t})}});U("object",{parse:s=>s,serialize:s=>s});async function te(s,t){if(t?.cache){let g=await t.cache.retrieve(s);if(g)return Et(g)}let e=mt.tokenize(s);if(e.errors.length>0)throw new Error(`Lexing errors: ${e.errors[0].message}`);d.input=e.tokens;let r=d.query();if(d.errors.length>0)throw new Error(`Parsing errors: ${d.errors[0].message}`);ht.isAnalyzing=!!t?.analyze;let{code:n,analysis:i,sourceType:a,targetType:o}=ht.visit(r),p=Ct__default.default.js(n,{indent_size:2,space_in_empty_paren:true,end_with_newline:true});t?.cache&&await t.cache.save(s,p);let u=Et(p);return i&&(i.sourceFormat=a.name,i.targetFormat=o.name,u.analysis=i),u}function Et(s){let e=new Function(s)(),r={parse:(i,a,o)=>pt(i).parse(a,o),serialize:(i,a,o)=>pt(i).serialize(a,o)},n=(i=>e(i,r));return n.code=s,n}function ee(s,...t){return s.reduce((e,r,n)=>e+r+(t[n]??""),"")}function re(s){return `Hello, ${s}! The Morph engine is ready.`}exports.compile=te;exports.getAdapter=pt;exports.greet=re;exports.morphQL=ee;exports.registerAdapter=U;//# sourceMappingURL=index.cjs.map
84
84
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/mapping-tracker.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","Return","Unsafe","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","key","attrKey","separator","limit","sep","lim","val","MappingTracker","path","type","isTarget","node","fields","target","f","name","followPath","isMultiple","newTargetNode","newSourceNode","sourceNode","parentSource","followNode","targetPropertiesNode","parts","current","i","part","newNode","defaultType","BaseCstVisitor","MorphCompiler","context","previousReadFrom","result","ctx","sourceType","targetType","isUnsafe","actions","a","sourceTypeName","targetTypeName","sourceOptions","targetOptions","hasReturn","action","id","options","p","image","num","base","isLHS","optionalChain","field","thenActions","elseBlock","identifiers","left","right","expr","scope","rhs","op","lhs","lhsType","hasString","allNumbers","atomic","originalName","handler","sectionId","sectionName","sectionAccess","followPathId","sourceAccess","subSourceType","subTargetType","hasTransform","subSourceOptions","subTargetOptions","regularActions","regularResult","compiler","adapters","registerAdapter","adapter","getAdapter","indexToLetter","index","letter","content","data","xmlBuilder","XMLBuilder","XMLParser","rootTag","delimiter","Papa","row","obj","csvData","k","b","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","analysis","code","beautify","engine","transform","env","format","input","morphQL","strings","values","acc","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 });\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 });\nexport const Return = createToken({ name: 'Return', pattern: /return/i, longer_alt: Identifier });\nexport const Unsafe = createToken({ name: 'Unsafe', pattern: /unsafe/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 Return,\n Unsafe,\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.OPTION1(() => {\n this.CONSUME(t.Unsafe);\n });\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 { ALT: () => this.SUBRULE(this.returnRule) },\n ]);\n });\n\n private returnRule = this.RULE('returnRule', () => {\n this.CONSUME(t.Return);\n this.SUBRULE(this.expression, { LABEL: 'expr' });\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 `(() => { const match = String(${str}).match(/\\\\d+(\\\\.\\\\d+)?/); return match ? Number(match[0]) : null; })()`;\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 const chunkSize = 2;\n let list = [...attributesList];\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 spreadsheet: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('spreadsheet() requires exactly 1 argument');\n }\n const [val] = args;\n return `((data)=>{\n const spreadsheet = Array.isArray(data) ? data : (data == null ? [] : [data]);\n const out = [];\n const titles = [];\n let keys = [];\n for (let i = 0; i < spreadsheet.length; i++) {\n const line = spreadsheet[i];\n if (!line || typeof line !== 'object') continue;\n if (i === 0) {\n keys = Object.keys(line);\n for (const k of keys) titles.push(line[k]);\n } else {\n const tempLine = {};\n for (let j = 0; j < keys.length; j++) {\n tempLine[titles[j]] = line[keys[j]];\n }\n out.push(tempLine);\n }\n }\n return out;\n })(${val})`;\n },\n};\n","export type MorphType = 'string' | 'number' | 'boolean' | 'null' | 'object' | 'array' | 'any';\n\nexport interface SchemaNode {\n type: MorphType;\n properties?: Record<string, SchemaNode>;\n items?: SchemaNode;\n isOpen?: boolean;\n}\n\nexport interface AnalyzeResult {\n source: SchemaNode;\n target: SchemaNode;\n sourceFormat?: string;\n targetFormat?: string;\n}\n\nexport class MappingTracker {\n public sourceRoot: SchemaNode = { type: 'object', properties: {} };\n public targetRoot: SchemaNode = { type: 'object', properties: {} };\n\n private sourceStack: SchemaNode[] = [this.sourceRoot];\n private targetStack: SchemaNode[] = [this.targetRoot];\n\n private getCurrentSource() {\n return this.sourceStack[this.sourceStack.length - 1];\n }\n private getCurrentTarget() {\n return this.targetStack[this.targetStack.length - 1];\n }\n\n public recordAccess(path: string, type: MorphType = 'any', isTarget: boolean = false) {\n const node = isTarget ? this.getCurrentTarget() : this.getCurrentSource();\n this.setInNode(node, path, type);\n }\n\n public recordAssignment(path: string, type: MorphType = 'any') {\n this.setInNode(this.getCurrentTarget(), path, type);\n }\n\n public recordClone(fields?: string[]) {\n const target = this.getCurrentTarget();\n if (fields) {\n fields.forEach((f) => {\n this.setInNode(this.getCurrentSource(), f, 'any');\n this.setInNode(target, f, 'any');\n });\n } else {\n target.isOpen = true;\n }\n }\n\n public recordDelete(path: string) {\n const target = this.getCurrentTarget();\n this.deleteInNode(target, path);\n }\n\n public pushSection(name: string, followPath: string | 'parent', isMultiple: boolean) {\n // 1. Mark followPath in current source\n if (followPath !== 'parent') {\n this.setInNode(this.getCurrentSource(), followPath, isMultiple ? 'array' : 'object');\n }\n\n // 2. Prepare sub-nodes\n const newTargetNode: SchemaNode = { type: isMultiple ? 'array' : 'object' };\n if (isMultiple) {\n newTargetNode.items = { type: 'object', properties: {} };\n } else {\n newTargetNode.properties = {};\n }\n\n const newSourceNode: SchemaNode = { type: 'object', properties: {} };\n\n // 3. Attach to current target\n this.setInNodeExplicit(this.getCurrentTarget(), name, newTargetNode);\n\n // 4. Update stacks\n this.targetStack.push(isMultiple ? newTargetNode.items! : newTargetNode);\n this.sourceStack.push(newSourceNode);\n }\n\n public popSection(followPath: string | 'parent', isMultiple: boolean) {\n const sourceNode = this.sourceStack.pop()!;\n this.targetStack.pop();\n const parentSource = this.getCurrentSource();\n\n if (followPath !== 'parent') {\n const followNode = this.getOrSetNode(\n parentSource,\n followPath,\n isMultiple ? 'array' : 'object'\n );\n const targetPropertiesNode = isMultiple ? followNode.items : followNode;\n if (targetPropertiesNode) {\n if (!targetPropertiesNode.properties) targetPropertiesNode.properties = {};\n Object.assign(targetPropertiesNode.properties, sourceNode.properties || {});\n }\n } else {\n if (!parentSource.properties) parentSource.properties = {};\n Object.assign(parentSource.properties, sourceNode.properties || {});\n }\n }\n\n private setInNode(node: SchemaNode, path: string, type: MorphType) {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!current.properties) current.properties = {};\n if (i === parts.length - 1) {\n if (!current.properties[part]) {\n current.properties[part] = { type };\n if (type === 'object') {\n current.properties[part].properties = {};\n } else if (type === 'array') {\n current.properties[part].items = { type: 'object', properties: {} };\n }\n }\n } else {\n if (!current.properties[part])\n current.properties[part] = { type: 'object', properties: {} };\n current = current.properties[part];\n }\n }\n }\n\n private setInNodeExplicit(node: SchemaNode, path: string, newNode: SchemaNode) {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!current.properties) current.properties = {};\n if (i === parts.length - 1) {\n current.properties[part] = newNode;\n } else {\n if (!current.properties[part])\n current.properties[part] = { type: 'object', properties: {} };\n current = current.properties[part];\n }\n }\n }\n\n private deleteInNode(node: SchemaNode, path: string) {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n if (!current.properties) return;\n if (i === parts.length - 1) {\n delete current.properties[parts[i]];\n } else {\n current = current.properties[parts[i]];\n if (!current) return;\n }\n }\n }\n\n private getOrSetNode(node: SchemaNode, path: string, defaultType: MorphType): SchemaNode {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const isLast = i === parts.length - 1;\n const type = isLast ? defaultType : 'object';\n\n if (!current.properties) current.properties = {};\n if (!current.properties[part]) {\n current.properties[part] = { type };\n if (type === 'object') {\n current.properties[part].properties = {};\n } else if (type === 'array') {\n current.properties[part].items = { type: 'object', properties: {} };\n }\n }\n current = current.properties[part];\n }\n return current;\n }\n\n public getResult(): AnalyzeResult {\n return {\n source: this.sourceRoot,\n target: this.targetRoot,\n };\n }\n}\n","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\nimport { MappingTracker, MorphType } from './mapping-tracker.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 // Scope stack to track serialization context\n private scopeStack: Array<{ format: string; options: any; isSerializationScope: boolean }> = [];\n\n // Safe mode - use optional chaining for property access\n public safeMode: boolean = true;\n\n // Analysis mode\n public isAnalyzing: boolean = false;\n public tracker: MappingTracker = new MappingTracker();\n public lastInferredType: MorphType = 'any';\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 if (this.isAnalyzing) {\n this.tracker = new MappingTracker();\n }\n const sourceType = this.visit(ctx.sourceType);\n const targetType = this.visit(ctx.targetType);\n\n // Check if unsafe mode is enabled in the query\n const isUnsafe = !!ctx.Unsafe;\n this.safeMode = !isUnsafe;\n\n this.scopeStack.push({\n format: targetType.name,\n options: targetType.options,\n isSerializationScope: true,\n });\n\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n this.scopeStack.pop();\n\n if (!ctx.Transform) {\n actions.push('Object.assign(target, source);');\n }\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 // Check if any action contains a return statement\n const hasReturn = actions.some(\n (action: any) => typeof action === 'string' && action.trim().startsWith('return ')\n );\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 ${hasReturn ? '' : `return env.serialize('${targetTypeName}', target, ${targetOptions});`}\n }\n `;\n\n return {\n code,\n sourceType,\n targetType,\n analysis: this.isAnalyzing ? this.tracker.getResult() : undefined,\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 }, isLHS: boolean = false) {\n // Don't use optional chaining on left-hand side of assignments\n const optionalChain = this.safeMode && !isLHS ? '?.' : '.';\n if (id.quoted || (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))) {\n return `${base}${this.safeMode && !isLHS ? '?.' : ''}[\"${id.name}\"]`;\n }\n return `${base}${optionalChain}${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 this.lastInferredType = 'string';\n return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n this.lastInferredType = 'number';\n return ctx.NumericLiteral[0].image;\n }\n if (ctx.True) {\n this.lastInferredType = 'boolean';\n return 'true';\n }\n if (ctx.False) {\n this.lastInferredType = 'boolean';\n return 'false';\n }\n if (ctx.Null) {\n this.lastInferredType = 'null';\n return 'null';\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 if (ctx.returnRule) {\n return this.visit(ctx.returnRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\n if (this.isAnalyzing) {\n this.tracker.recordDelete(field.name);\n }\n return `delete ${this.genAccess('target', field, true)};`; // LHS = true\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 if (this.isAnalyzing) {\n this.tracker.recordClone(identifiers.map((id: any) => id.name));\n }\n return identifiers\n .map(\n (id: any) => `${this.genAccess('target', id, true)} = ${this.genAccess('source', id)};`\n ) // LHS = true for target\n .join('\\n ');\n }\n if (this.isAnalyzing) {\n this.tracker.recordClone();\n }\n return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n this.lastInferredType = 'any';\n const right = this.visit(ctx.right);\n if (this.isAnalyzing) {\n this.tracker.recordAssignment(left.name, this.lastInferredType);\n }\n return `${this.genAccess('target', left, true)} = ${right};`;\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n this.lastInferredType = 'any';\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n if (this.isAnalyzing) {\n this.tracker.recordAssignment(left.name, this.lastInferredType);\n }\n return `${this.genAccess('target', left, true)} = ${right};`; // LHS = true\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n this.lastInferredType = 'any';\n const right = this.visit(ctx.right);\n if (this.isAnalyzing) {\n this.tracker.recordAssignment(left.name, this.lastInferredType); // This tracks internal assignments? Actually define is for source.\n }\n return `${this.genAccess('source', left, true)} = ${right};`; // LHS = true\n }\n\n returnRule(ctx: any) {\n const expr = this.visitWithContext(ctx.expr, { readFrom: 'target' });\n const scope = this.scopeStack[this.scopeStack.length - 1];\n\n if (scope && scope.isSerializationScope) {\n const options = JSON.stringify(scope.options);\n return `return env.serialize('${scope.format}', ${expr}, ${options});`;\n }\n\n return `return ${expr};`;\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 && ctx.rhs.length > 0) {\n this.lastInferredType = 'boolean';\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 && ctx.rhs.length > 0) {\n this.lastInferredType = 'boolean';\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 this.lastInferredType = 'boolean';\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 const lhs = this.visit(ctx.lhs);\n const lhsType = this.lastInferredType;\n let result = lhs;\n if (ctx.rhs && ctx.rhs.length > 0) {\n // If any operand is a string, the result is likely a string (concatenation)\n let hasString = lhsType === 'string';\n let allNumbers = lhsType === 'number';\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 if (this.lastInferredType === 'string') hasString = true;\n if (this.lastInferredType !== 'number') allNumbers = false;\n result = `${result} ${op} ${rhs}`;\n }\n if (hasString) this.lastInferredType = 'string';\n else if (allNumbers) this.lastInferredType = 'number';\n else this.lastInferredType = 'any';\n } else {\n this.lastInferredType = lhsType;\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs && ctx.rhs.length > 0) {\n this.lastInferredType = 'number';\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 if (op === '!') this.lastInferredType = 'boolean';\n if (op === '-') this.lastInferredType = 'number';\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 this.lastInferredType = 'any';\n const id = this.visit(ctx.anyIdentifier);\n\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n // Check for explicit context prefixes (source.field or target.field)\n if (id.name.startsWith('source.') || id.name.startsWith('source[')) {\n // User explicitly specified source context - don't prepend\n if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7), 'any', false);\n return id.name;\n }\n if (id.name.startsWith('target.') || id.name.startsWith('target[')) {\n // User explicitly specified target context - don't prepend\n if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7), 'any', true);\n return id.name;\n }\n\n // Bare 'source' or 'target' keywords\n if (id.name === 'target') {\n return 'target';\n }\n if (id.name === 'source') {\n return 'source';\n }\n\n // Root source/target access\n if (\n id.name === '_source' ||\n id.name.startsWith('_source.') ||\n id.name.startsWith('_source[')\n ) {\n if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7) || '', 'any', false); // Simplified root tracking\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 if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7) || '', 'any', true);\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n // No explicit context - use current readFrom context\n if (this.isAnalyzing) {\n this.tracker.recordAccess(id.name, 'any', this.readFrom === 'target');\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 // Inferred types for built-in functions\n if (\n [\n 'substring',\n 'text',\n 'replace',\n 'uppercase',\n 'lowercase',\n 'to_base64',\n 'from_base64',\n ].includes(name)\n ) {\n this.lastInferredType = 'string';\n } else if (['number', 'extractnumber'].includes(name)) {\n this.lastInferredType = 'number';\n } else if (['aslist'].includes(name)) {\n this.lastInferredType = 'array';\n } else if (name === 'asobject') {\n this.lastInferredType = 'object';\n }\n\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, true); // LHS = true (being assigned to)\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n // Note: followPathId is used below in sourceAccess and tracker calls.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\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\n this.scopeStack.push({\n format: subTargetType.name,\n options: subTargetType.options,\n isSerializationScope: true,\n });\n\n const hasTransform = !!ctx.subqueryTransform;\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\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 let result = '';\n if (isMultiple) {\n result = `\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 result = `\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 this.scopeStack.pop();\n return result;\n }\n\n // Regular section handling\n this.scopeStack.push({\n format: 'object',\n options: {},\n isSerializationScope: false,\n });\n\n if (this.isAnalyzing) {\n this.tracker.pushSection(sectionName, followPathId.name, isMultiple);\n }\n\n const regularActions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (this.isAnalyzing) {\n this.tracker.popSection(followPathId.name, isMultiple);\n }\n\n let regularResult = '';\n if (isMultiple) {\n regularResult = `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const source = item;\n const target = {};\n ${regularActions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n regularResult = `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${regularActions.join('\\n ')}\n return target;\n })(${sourceAccess});\n }\n `;\n }\n\n this.scopeStack.pop();\n return regularResult;\n }\n}\n\nexport const compiler = new MorphCompiler();\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\nimport Papa from 'papaparse';\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// Helpers\nfunction indexToLetter(index: number): string {\n let letter = '';\n while (index >= 0) {\n letter = String.fromCharCode((index % 26) + 65) + letter;\n index = Math.floor(index / 26) - 1;\n }\n return letter;\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// CSV Adapter\nregisterAdapter('csv', {\n parse: (content, options) => {\n if (typeof content !== 'string') return content;\n const delimiter = options?.delimiter ?? options?.params?.[0] ?? ',';\n const parsed = Papa.parse<any[]>(content, {\n delimiter,\n skipEmptyLines: true,\n ...options,\n }) as any;\n\n const rows = parsed.data.map((row: any) => {\n const obj: any = {};\n if (Array.isArray(row)) {\n row.forEach((val, i) => {\n obj[indexToLetter(i)] = val;\n });\n }\n return obj;\n });\n\n return { rows };\n },\n serialize: (data, options) => {\n if (!data || !Array.isArray(data.rows)) return '';\n const delimiter = options?.delimiter ?? options?.params?.[0] ?? ',';\n\n const csvData = data.rows.map((row: any) => {\n // Sort keys to ensure correct column order (A, B, C... Z, AA, AB...)\n const sortedKeys = Object.keys(row)\n .filter((k) => /^[A-Z]+$/.test(k))\n .sort((a, b) => {\n if (a.length !== b.length) return a.length - b.length;\n return a.localeCompare(b);\n });\n return sortedKeys.map((k) => row[k]);\n });\n\n return Papa.unparse(csvData, {\n delimiter,\n ...options,\n });\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\nimport { AnalyzeResult, SchemaNode, MorphType } from './core/mapping-tracker.js';\n\nexport { MorphQLCache, AnalyzeResult, SchemaNode, MorphType };\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n analysis?: AnalyzeResult;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n analyze?: boolean;\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 compiler.isAnalyzing = !!options?.analyze;\n const { code: rawCode, analysis, sourceType, targetType } = 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 const engine = createEngine<Source, Target>(code);\n if (analysis) {\n analysis.sourceFormat = sourceType.name;\n analysis.targetFormat = targetType.name;\n engine.analysis = analysis;\n }\n return engine;\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"]}
1
+ {"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/mapping-tracker.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","Return","Unsafe","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","key","attrKey","separator","limit","sep","lim","val","MappingTracker","path","type","isTarget","node","fields","target","f","name","followPath","isMultiple","newTargetNode","newSourceNode","sourceNode","parentSource","followNode","targetPropertiesNode","parts","current","i","part","newNode","defaultType","BaseCstVisitor","MorphCompiler","context","previousReadFrom","result","ctx","sourceType","targetType","isUnsafe","actions","a","sourceTypeName","targetTypeName","sourceOptions","targetOptions","hasReturn","action","id","options","p","image","num","base","isLHS","optionalChain","field","thenActions","elseBlock","identifiers","left","right","expr","scope","rhs","op","lhs","lhsType","hasString","allNumbers","atomic","originalName","handler","sectionId","sectionName","sectionAccess","followPathId","sourceAccess","subSourceType","subTargetType","hasTransform","subSourceOptions","subTargetOptions","regularActions","regularResult","compiler","adapters","registerAdapter","adapter","getAdapter","indexToLetter","index","letter","content","data","xmlBuilder","XMLBuilder","XMLParser","rootTag","delimiter","Papa","row","obj","csvData","k","b","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","analysis","code","beautify","engine","transform","env","format","input","morphQL","strings","values","acc","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 });\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 });\nexport const Return = createToken({ name: 'Return', pattern: /return/i, longer_alt: Identifier });\nexport const Unsafe = createToken({ name: 'Unsafe', pattern: /unsafe/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 Return,\n Unsafe,\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.OPTION1(() => {\n this.CONSUME(t.Unsafe);\n });\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 { ALT: () => this.SUBRULE(this.returnRule) },\n ]);\n });\n\n private returnRule = this.RULE('returnRule', () => {\n this.CONSUME(t.Return);\n this.SUBRULE(this.expression, { LABEL: 'expr' });\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 `(() => { const match = String(${str}).match(/\\\\d+(\\\\.\\\\d+)?/); return match ? Number(match[0]) : null; })()`;\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 const chunkSize = 2;\n let list = [...attributesList];\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 spreadsheet: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('spreadsheet() requires exactly 1 argument');\n }\n const [val] = args;\n return `((data)=>{\n const spreadsheet = Array.isArray(data) ? data : (data == null ? [] : [data]);\n const out = [];\n const titles = [];\n let keys = [];\n for (let i = 0; i < spreadsheet.length; i++) {\n const line = spreadsheet[i];\n if (!line || typeof line !== 'object') continue;\n if (i === 0) {\n keys = Object.keys(line);\n for (const k of keys) titles.push(line[k]);\n } else {\n const tempLine = {};\n for (let j = 0; j < keys.length; j++) {\n tempLine[titles[j]] = line[keys[j]];\n }\n out.push(tempLine);\n }\n }\n return out;\n })(${val})`;\n },\n};\n","export type MorphType = 'string' | 'number' | 'boolean' | 'null' | 'object' | 'array' | 'any';\n\nexport interface SchemaNode {\n type: MorphType;\n properties?: Record<string, SchemaNode>;\n items?: SchemaNode;\n isOpen?: boolean;\n}\n\nexport interface AnalyzeResult {\n source: SchemaNode;\n target: SchemaNode;\n sourceFormat?: string;\n targetFormat?: string;\n}\n\nexport class MappingTracker {\n public sourceRoot: SchemaNode = { type: 'object', properties: {} };\n public targetRoot: SchemaNode = { type: 'object', properties: {} };\n\n private sourceStack: SchemaNode[] = [this.sourceRoot];\n private targetStack: SchemaNode[] = [this.targetRoot];\n\n private getCurrentSource() {\n return this.sourceStack[this.sourceStack.length - 1];\n }\n private getCurrentTarget() {\n return this.targetStack[this.targetStack.length - 1];\n }\n\n public recordAccess(path: string, type: MorphType = 'any', isTarget: boolean = false) {\n const node = isTarget ? this.getCurrentTarget() : this.getCurrentSource();\n this.setInNode(node, path, type);\n }\n\n public recordAssignment(path: string, type: MorphType = 'any') {\n this.setInNode(this.getCurrentTarget(), path, type);\n }\n\n public recordClone(fields?: string[]) {\n const target = this.getCurrentTarget();\n if (fields) {\n fields.forEach((f) => {\n this.setInNode(this.getCurrentSource(), f, 'any');\n this.setInNode(target, f, 'any');\n });\n } else {\n target.isOpen = true;\n }\n }\n\n public recordDelete(path: string) {\n const target = this.getCurrentTarget();\n this.deleteInNode(target, path);\n }\n\n public pushSection(name: string, followPath: string | 'parent', isMultiple: boolean) {\n // 1. Mark followPath in current source\n if (followPath !== 'parent') {\n this.setInNode(this.getCurrentSource(), followPath, isMultiple ? 'array' : 'object');\n }\n\n // 2. Prepare sub-nodes\n const newTargetNode: SchemaNode = { type: isMultiple ? 'array' : 'object' };\n if (isMultiple) {\n newTargetNode.items = { type: 'object', properties: {} };\n } else {\n newTargetNode.properties = {};\n }\n\n const newSourceNode: SchemaNode = { type: 'object', properties: {} };\n\n // 3. Attach to current target\n this.setInNodeExplicit(this.getCurrentTarget(), name, newTargetNode);\n\n // 4. Update stacks\n this.targetStack.push(isMultiple ? newTargetNode.items! : newTargetNode);\n this.sourceStack.push(newSourceNode);\n }\n\n public popSection(followPath: string | 'parent', isMultiple: boolean) {\n const sourceNode = this.sourceStack.pop()!;\n this.targetStack.pop();\n const parentSource = this.getCurrentSource();\n\n if (followPath !== 'parent') {\n const followNode = this.getOrSetNode(\n parentSource,\n followPath,\n isMultiple ? 'array' : 'object'\n );\n const targetPropertiesNode = isMultiple ? followNode.items : followNode;\n if (targetPropertiesNode) {\n if (!targetPropertiesNode.properties) targetPropertiesNode.properties = {};\n Object.assign(targetPropertiesNode.properties, sourceNode.properties || {});\n }\n } else {\n if (!parentSource.properties) parentSource.properties = {};\n Object.assign(parentSource.properties, sourceNode.properties || {});\n }\n }\n\n private setInNode(node: SchemaNode, path: string, type: MorphType) {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!current.properties) current.properties = {};\n if (i === parts.length - 1) {\n if (!current.properties[part]) {\n current.properties[part] = { type };\n if (type === 'object') {\n current.properties[part].properties = {};\n } else if (type === 'array') {\n current.properties[part].items = { type: 'object', properties: {} };\n }\n }\n } else {\n if (!current.properties[part])\n current.properties[part] = { type: 'object', properties: {} };\n current = current.properties[part];\n }\n }\n }\n\n private setInNodeExplicit(node: SchemaNode, path: string, newNode: SchemaNode) {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!current.properties) current.properties = {};\n if (i === parts.length - 1) {\n current.properties[part] = newNode;\n } else {\n if (!current.properties[part])\n current.properties[part] = { type: 'object', properties: {} };\n current = current.properties[part];\n }\n }\n }\n\n private deleteInNode(node: SchemaNode, path: string) {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n if (!current.properties) return;\n if (i === parts.length - 1) {\n delete current.properties[parts[i]];\n } else {\n current = current.properties[parts[i]];\n if (!current) return;\n }\n }\n }\n\n private getOrSetNode(node: SchemaNode, path: string, defaultType: MorphType): SchemaNode {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const isLast = i === parts.length - 1;\n const type = isLast ? defaultType : 'object';\n\n if (!current.properties) current.properties = {};\n if (!current.properties[part]) {\n current.properties[part] = { type };\n if (type === 'object') {\n current.properties[part].properties = {};\n } else if (type === 'array') {\n current.properties[part].items = { type: 'object', properties: {} };\n }\n }\n current = current.properties[part];\n }\n return current;\n }\n\n public getResult(): AnalyzeResult {\n return {\n source: this.sourceRoot,\n target: this.targetRoot,\n };\n }\n}\n","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\nimport { MappingTracker, MorphType } from './mapping-tracker.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 // Scope stack to track serialization context\n private scopeStack: Array<{ format: string; options: any; isSerializationScope: boolean }> = [];\n\n // Safe mode - use optional chaining for property access\n public safeMode: boolean = true;\n\n // Analysis mode\n public isAnalyzing: boolean = false;\n public tracker: MappingTracker = new MappingTracker();\n public lastInferredType: MorphType = 'any';\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 if (this.isAnalyzing) {\n this.tracker = new MappingTracker();\n }\n const sourceType = this.visit(ctx.sourceType);\n const targetType = this.visit(ctx.targetType);\n\n // Check if unsafe mode is enabled in the query\n const isUnsafe = !!ctx.Unsafe;\n this.safeMode = !isUnsafe;\n\n this.scopeStack.push({\n format: targetType.name,\n options: targetType.options,\n isSerializationScope: true,\n });\n\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n this.scopeStack.pop();\n\n if (!ctx.Transform) {\n actions.push('Object.assign(target, source);');\n }\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 // Check if any action contains a return statement\n const hasReturn = actions.some(\n (action: any) => typeof action === 'string' && action.trim().startsWith('return ')\n );\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 ${hasReturn ? '' : `return env.serialize('${targetTypeName}', target, ${targetOptions});`}\n }\n `;\n\n return {\n code,\n sourceType,\n targetType,\n analysis: this.isAnalyzing ? this.tracker.getResult() : undefined,\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 }, isLHS: boolean = false) {\n // Don't use optional chaining on left-hand side of assignments\n const optionalChain = this.safeMode && !isLHS ? '?.' : '.';\n if (id.quoted || (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))) {\n return `${base}${this.safeMode && !isLHS ? '?.' : ''}[\"${id.name}\"]`;\n }\n return `${base}${optionalChain}${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 this.lastInferredType = 'string';\n return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n this.lastInferredType = 'number';\n return ctx.NumericLiteral[0].image;\n }\n if (ctx.True) {\n this.lastInferredType = 'boolean';\n return 'true';\n }\n if (ctx.False) {\n this.lastInferredType = 'boolean';\n return 'false';\n }\n if (ctx.Null) {\n this.lastInferredType = 'null';\n return 'null';\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 if (ctx.returnRule) {\n return this.visit(ctx.returnRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\n if (this.isAnalyzing) {\n this.tracker.recordDelete(field.name);\n }\n return `delete ${this.genAccess('target', field, true)};`; // LHS = true\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 if (this.isAnalyzing) {\n this.tracker.recordClone(identifiers.map((id: any) => id.name));\n }\n return identifiers\n .map(\n (id: any) => `${this.genAccess('target', id, true)} = ${this.genAccess('source', id)};`\n ) // LHS = true for target\n .join('\\n ');\n }\n if (this.isAnalyzing) {\n this.tracker.recordClone();\n }\n return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n this.lastInferredType = 'any';\n const right = this.visit(ctx.right);\n if (this.isAnalyzing) {\n this.tracker.recordAssignment(left.name, this.lastInferredType);\n }\n return `${this.genAccess('target', left, true)} = ${right};`;\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n this.lastInferredType = 'any';\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n if (this.isAnalyzing) {\n this.tracker.recordAssignment(left.name, this.lastInferredType);\n }\n return `${this.genAccess('target', left, true)} = ${right};`; // LHS = true\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n this.lastInferredType = 'any';\n const right = this.visit(ctx.right);\n if (this.isAnalyzing) {\n this.tracker.recordAssignment(left.name, this.lastInferredType); // This tracks internal assignments? Actually define is for source.\n }\n return `${this.genAccess('source', left, true)} = ${right};`; // LHS = true\n }\n\n returnRule(ctx: any) {\n const expr = this.visitWithContext(ctx.expr, { readFrom: 'target' });\n const scope = this.scopeStack[this.scopeStack.length - 1];\n\n if (scope && scope.isSerializationScope) {\n const options = JSON.stringify(scope.options);\n return `return env.serialize('${scope.format}', ${expr}, ${options});`;\n }\n\n return `return ${expr};`;\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 && ctx.rhs.length > 0) {\n this.lastInferredType = 'boolean';\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 && ctx.rhs.length > 0) {\n this.lastInferredType = 'boolean';\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 this.lastInferredType = 'boolean';\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 const lhs = this.visit(ctx.lhs);\n const lhsType = this.lastInferredType;\n let result = lhs;\n if (ctx.rhs && ctx.rhs.length > 0) {\n // If any operand is a string, the result is likely a string (concatenation)\n let hasString = lhsType === 'string';\n let allNumbers = lhsType === 'number';\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 if (this.lastInferredType === 'string') hasString = true;\n if (this.lastInferredType !== 'number') allNumbers = false;\n result = `${result} ${op} ${rhs}`;\n }\n if (hasString) this.lastInferredType = 'string';\n else if (allNumbers) this.lastInferredType = 'number';\n else this.lastInferredType = 'any';\n } else {\n this.lastInferredType = lhsType;\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs && ctx.rhs.length > 0) {\n this.lastInferredType = 'number';\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 if (op === '!') this.lastInferredType = 'boolean';\n if (op === '-') this.lastInferredType = 'number';\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 this.lastInferredType = 'any';\n const id = this.visit(ctx.anyIdentifier);\n\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n // Check for explicit context prefixes (source.field or target.field)\n if (id.name.startsWith('source.') || id.name.startsWith('source[')) {\n // User explicitly specified source context - don't prepend\n if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7), 'any', false);\n return id.name;\n }\n if (id.name.startsWith('target.') || id.name.startsWith('target[')) {\n // User explicitly specified target context - don't prepend\n if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7), 'any', true);\n return id.name;\n }\n\n // Bare 'source' or 'target' keywords\n if (id.name === 'target') {\n return 'target';\n }\n if (id.name === 'source') {\n return 'source';\n }\n\n // Root source/target access\n if (\n id.name === '_source' ||\n id.name.startsWith('_source.') ||\n id.name.startsWith('_source[')\n ) {\n if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7) || '', 'any', false); // Simplified root tracking\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 if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7) || '', 'any', true);\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n // No explicit context - use current readFrom context\n if (this.isAnalyzing) {\n this.tracker.recordAccess(id.name, 'any', this.readFrom === 'target');\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 // Inferred types for built-in functions\n if (\n [\n 'substring',\n 'text',\n 'replace',\n 'uppercase',\n 'lowercase',\n 'to_base64',\n 'from_base64',\n ].includes(name)\n ) {\n this.lastInferredType = 'string';\n } else if (['number', 'extractnumber'].includes(name)) {\n this.lastInferredType = 'number';\n } else if (['aslist'].includes(name)) {\n this.lastInferredType = 'array';\n } else if (name === 'asobject') {\n this.lastInferredType = 'object';\n }\n\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, true); // LHS = true (being assigned to)\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n // Note: followPathId is used below in sourceAccess and tracker calls.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\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\n this.scopeStack.push({\n format: subTargetType.name,\n options: subTargetType.options,\n isSerializationScope: true,\n });\n\n const hasTransform = !!ctx.subqueryTransform;\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\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 let result = '';\n if (isMultiple) {\n result = `\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 result = `\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 this.scopeStack.pop();\n return result;\n }\n\n // Regular section handling\n this.scopeStack.push({\n format: 'object',\n options: {},\n isSerializationScope: false,\n });\n\n if (this.isAnalyzing) {\n this.tracker.pushSection(sectionName, followPathId.name, isMultiple);\n }\n\n const regularActions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (this.isAnalyzing) {\n this.tracker.popSection(followPathId.name, isMultiple);\n }\n\n let regularResult = '';\n if (isMultiple) {\n regularResult = `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const source = item;\n const target = {};\n ${regularActions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n regularResult = `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${regularActions.join('\\n ')}\n return target;\n })(${sourceAccess});\n }\n `;\n }\n\n this.scopeStack.pop();\n return regularResult;\n }\n}\n\nexport const compiler = new MorphCompiler();\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\nimport Papa from 'papaparse';\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// Helpers\nfunction indexToLetter(index: number): string {\n let letter = '';\n while (index >= 0) {\n letter = String.fromCharCode((index % 26) + 65) + letter;\n index = Math.floor(index / 26) - 1;\n }\n return letter;\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// CSV Adapter\nregisterAdapter('csv', {\n parse: (content, options) => {\n if (typeof content !== 'string') return content;\n const delimiter = options?.delimiter ?? options?.params?.[0] ?? ',';\n const parsed = Papa.parse<any[]>(content, {\n delimiter,\n skipEmptyLines: true,\n ...options,\n }) as any;\n\n const rows = parsed.data.map((row: any) => {\n const obj: any = {};\n if (Array.isArray(row)) {\n row.forEach((val, i) => {\n obj[indexToLetter(i)] = val;\n });\n }\n return obj;\n });\n\n return { rows };\n },\n serialize: (data, options) => {\n if (!data || !Array.isArray(data.rows)) return '';\n const delimiter = options?.delimiter ?? options?.params?.[0] ?? ',';\n\n const csvData = data.rows.map((row: any) => {\n // Sort keys to ensure correct column order (A, B, C... Z, AA, AB...)\n const sortedKeys = Object.keys(row)\n .filter((k) => /^[A-Z]+$/.test(k))\n .sort((a, b) => {\n if (a.length !== b.length) return a.length - b.length;\n return a.localeCompare(b);\n });\n return sortedKeys.map((k) => row[k]);\n });\n\n return Papa.unparse(csvData, {\n delimiter,\n ...options,\n });\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, registerAdapter, DataAdapter } from './runtime/adapters.js';\nimport { MorphQLCache } from './runtime/cache.js';\n\nimport { AnalyzeResult, SchemaNode, MorphType } from './core/mapping-tracker.js';\n\nexport {\n MorphQLCache,\n AnalyzeResult,\n SchemaNode,\n MorphType,\n registerAdapter,\n getAdapter,\n DataAdapter,\n};\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n analysis?: AnalyzeResult;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n analyze?: boolean;\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 compiler.isAnalyzing = !!options?.analyze;\n const { code: rawCode, analysis, sourceType, targetType } = 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 const engine = createEngine<Source, Target>(code);\n if (analysis) {\n analysis.sourceFormat = sourceType.name;\n analysis.targetFormat = targetType.name;\n engine.analysis = analysis;\n }\n return engine;\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"]}