@morphql/core 0.1.6 → 0.1.8
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 +51 -31
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +51 -31
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
package/dist/index.js
CHANGED
|
@@ -1,64 +1,84 @@
|
|
|
1
|
-
import {createToken,Lexer,CstParser}from'chevrotain';import {XMLBuilder,XMLParser}from'fast-xml-parser';import yt from'js-beautify';var mt=createToken({name:"WhiteSpace",pattern:/\s+/,group:Lexer.SKIPPED}),Et=createToken({name:"LineComment",pattern:/\/\/[^\n\r]*/,group:Lexer.SKIPPED}),Lt=createToken({name:"BlockComment",pattern:/\/\*[\s\S]*?\*\//,group:Lexer.SKIPPED}),l=createToken({name:"Identifier",pattern:/[a-zA-Z_$][a-zA-Z0-9_.\[\]]*/}),O=createToken({name:"QuotedIdentifier",pattern:/`([^`\\]|\\.)*`/}),g=createToken({name:"From",pattern:/from/i,longer_alt:l}),d=createToken({name:"To",pattern:/to/i,longer_alt:l}),y=createToken({name:"Transform",pattern:/transform/i,longer_alt:l}),T=createToken({name:"Set",pattern:/set/i,longer_alt:l}),$=createToken({name:"Section",pattern:/section/i,longer_alt:l}),B=createToken({name:"Multiple",pattern:/multiple/i,longer_alt:l}),v=createToken({name:"Clone",pattern:/clone/i,longer_alt:l}),C=createToken({name:"Delete",pattern:/delete/i,longer_alt:l}),M=createToken({name:"Define",pattern:/define/i,longer_alt:l}),q=createToken({name:"Modify",pattern:/modify/i,longer_alt:l}),A=createToken({name:"If",pattern:/if/i,longer_alt:l}),P=createToken({name:"Else",pattern:/else/i,longer_alt:l}),w=createToken({name:"True",pattern:/true/i,longer_alt:l}),b=createToken({name:"False",pattern:/false/i,longer_alt:l}),I=createToken({name:"Null",pattern:/null/i,longer_alt:l}),_=createToken({name:"EqualsEquals",pattern:/==/}),F=createToken({name:"EqualsEqualsEquals",pattern:/===/}),x=createToken({name:"NotEquals",pattern:/!=/}),D=createToken({name:"NotEqualsEquals",pattern:/!==/}),j=createToken({name:"LessThanOrEqual",pattern:/<=/}),z=createToken({name:"GreaterThanOrEqual",pattern:/>=/}),W=createToken({name:"LessThan",pattern:/</}),k=createToken({name:"GreaterThan",pattern:/>/}),Y=createToken({name:"And",pattern:/&&/}),G=createToken({name:"Or",pattern:/\|\|/}),Q=createToken({name:"Not",pattern:/!/}),m=createToken({name:"Equals",pattern:/=/}),V=createToken({name:"Plus",pattern:/\+/}),R=createToken({name:"Minus",pattern:/-/}),J=createToken({name:"Times",pattern:/\*/}),K=createToken({name:"Divide",pattern:/\//}),h=createToken({name:"LParen",pattern:/\(/}),c=createToken({name:"RParen",pattern:/\)/}),U=createToken({name:"Comma",pattern:/,/}),H=createToken({name:"StringLiteral",pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/}),X=createToken({name:"NumericLiteral",pattern:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/}),Z=[mt,Et,Lt,g,d,y,T,$,B,v,C,M,q,A,P,w,b,I,F,_,D,x,j,z,Y,G,m,W,k,Q,V,R,J,K,h,c,U,H,X,O,l],ot=new Lexer(Z);var tt=class extends CstParser{constructor(){super(Z),this.performSelfAnalysis();}query=this.RULE("query",()=>{this.CONSUME(g),this.SUBRULE(this.typeFormat,{LABEL:"sourceType"}),this.CONSUME(d),this.SUBRULE1(this.typeFormat,{LABEL:"targetType"}),this.OPTION(()=>{this.CONSUME(y),this.MANY(()=>{this.SUBRULE(this.action);});});});typeFormat=this.RULE("typeFormat",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"name"}),this.OPTION(()=>{this.CONSUME(h),this.MANY_SEP({SEP:U,DEF:()=>{this.SUBRULE(this.typeFormatParameter,{LABEL:"params"});}}),this.CONSUME(c);});});typeFormatParameter=this.RULE("typeFormatParameter",()=>{this.OR([{GATE:()=>this.LA(2).tokenType===m,ALT:()=>this.SUBRULE(this.namedParameter)},{ALT:()=>this.SUBRULE(this.literal)}]);});namedParameter=this.RULE("namedParameter",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"key"}),this.CONSUME(m),this.SUBRULE(this.literal,{LABEL:"value"});});anyIdentifier=this.RULE("anyIdentifier",()=>{this.OR([{ALT:()=>this.CONSUME(l)},{ALT:()=>this.CONSUME(O)}]);});literal=this.RULE("literal",()=>{this.OR([{ALT:()=>this.CONSUME(H)},{ALT:()=>this.CONSUME(X)},{ALT:()=>this.CONSUME(w)},{ALT:()=>this.CONSUME(b)},{ALT:()=>this.CONSUME(I)}]);});action=this.RULE("action",()=>{this.OR([{ALT:()=>this.SUBRULE(this.setRule)},{ALT:()=>this.SUBRULE(this.modifyRule)},{ALT:()=>this.SUBRULE(this.sectionRule)},{ALT:()=>this.SUBRULE(this.cloneRule)},{ALT:()=>this.SUBRULE(this.deleteRule)},{ALT:()=>this.SUBRULE(this.ifAction)},{ALT:()=>this.SUBRULE(this.defineRule)}]);});deleteRule=this.RULE("deleteRule",()=>{this.CONSUME(C),this.SUBRULE(this.anyIdentifier,{LABEL:"field"});});ifAction=this.RULE("ifAction",()=>{this.CONSUME(A),this.CONSUME(h),this.SUBRULE(this.expression,{LABEL:"condition"}),this.CONSUME(c),this.CONSUME2(h),this.MANY(()=>{this.SUBRULE(this.action,{LABEL:"thenActions"});}),this.CONSUME2(c),this.OPTION(()=>{this.CONSUME(P),this.CONSUME3(h),this.MANY2(()=>{this.SUBRULE2(this.action,{LABEL:"elseActions"});}),this.CONSUME3(c);});});cloneRule=this.RULE("cloneRule",()=>{this.CONSUME(v),this.OPTION(()=>{this.CONSUME(h),this.MANY_SEP({SEP:U,DEF:()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"fields"});}}),this.CONSUME(c);});});setRule=this.RULE("setRule",()=>{this.CONSUME(T),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(m),this.SUBRULE(this.expression,{LABEL:"right"});});modifyRule=this.RULE("modifyRule",()=>{this.CONSUME(q),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(m),this.SUBRULE(this.expression,{LABEL:"right"});});expression=this.RULE("expression",()=>{this.SUBRULE(this.logicalOr);});logicalOr=this.RULE("logicalOr",()=>{this.SUBRULE(this.logicalAnd,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(G),this.SUBRULE1(this.logicalAnd,{LABEL:"rhs"});});});logicalAnd=this.RULE("logicalAnd",()=>{this.SUBRULE(this.comparison,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(Y),this.SUBRULE1(this.comparison,{LABEL:"rhs"});});});comparison=this.RULE("comparison",()=>{this.SUBRULE(this.addition,{LABEL:"lhs"}),this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(_,{LABEL:"ops"})},{ALT:()=>this.CONSUME(F,{LABEL:"ops"})},{ALT:()=>this.CONSUME(x,{LABEL:"ops"})},{ALT:()=>this.CONSUME(D,{LABEL:"ops"})},{ALT:()=>this.CONSUME(j,{LABEL:"ops"})},{ALT:()=>this.CONSUME(z,{LABEL:"ops"})},{ALT:()=>this.CONSUME(W,{LABEL:"ops"})},{ALT:()=>this.CONSUME(k,{LABEL:"ops"})}]),this.SUBRULE1(this.addition,{LABEL:"rhs"});});});addition=this.RULE("addition",()=>{this.SUBRULE(this.multiplication,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(V,{LABEL:"ops"})},{ALT:()=>this.CONSUME(R,{LABEL:"ops"})}]),this.SUBRULE1(this.multiplication,{LABEL:"rhs"});});});multiplication=this.RULE("multiplication",()=>{this.SUBRULE(this.unaryExpression,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(J,{LABEL:"ops"})},{ALT:()=>this.CONSUME(K,{LABEL:"ops"})}]),this.SUBRULE1(this.unaryExpression,{LABEL:"rhs"});});});unaryExpression=this.RULE("unaryExpression",()=>{this.OPTION(()=>{this.OR([{ALT:()=>this.CONSUME(R,{LABEL:"sign"})},{ALT:()=>this.CONSUME(Q,{LABEL:"sign"})}]);}),this.SUBRULE(this.atomic);});atomic=this.RULE("atomic",()=>{this.OR([{ALT:()=>this.SUBRULE(this.literal)},{GATE:()=>this.LA(2).tokenType===h,ALT:()=>this.SUBRULE(this.functionCall)},{ALT:()=>this.SUBRULE(this.anyIdentifier)},{ALT:()=>{this.CONSUME(h),this.SUBRULE(this.expression),this.CONSUME(c);}}]);});functionCall=this.RULE("functionCall",()=>{this.OR([{ALT:()=>this.CONSUME(l,{LABEL:"name"})},{ALT:()=>this.CONSUME(A,{LABEL:"name"})}]),this.CONSUME(h),this.MANY_SEP({SEP:U,DEF:()=>{this.SUBRULE(this.expression,{LABEL:"args"});}}),this.CONSUME(c);});sectionRule=this.RULE("sectionRule",()=>{this.CONSUME($),this.OPTION(()=>{this.CONSUME(B);}),this.SUBRULE(this.anyIdentifier,{LABEL:"sectionName"}),this.CONSUME(h),this.OPTION1(()=>{this.CONSUME(g,{LABEL:"subqueryFrom"}),this.SUBRULE(this.typeFormat,{LABEL:"subquerySourceType"}),this.CONSUME(d,{LABEL:"subqueryTo"}),this.SUBRULE1(this.typeFormat,{LABEL:"subqueryTargetType"}),this.OPTION2(()=>{this.CONSUME(y,{LABEL:"subqueryTransform"});});}),this.MANY(()=>{this.SUBRULE(this.action);}),this.CONSUME(c),this.OPTION3(()=>{this.CONSUME1(g,{LABEL:"followFrom"}),this.SUBRULE2(this.anyIdentifier,{LABEL:"followPath"});});});defineRule=this.RULE("defineRule",()=>{this.CONSUME(M),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(m),this.SUBRULE(this.expression,{LABEL:"right"});})},E=new tt;var lt={substring:r=>{if(r.length<2)throw new Error("substring() requires at least 2 arguments (string, start, [length])");let[t,e,i]=r;return i!==void 0?`String(${t}).slice(${e}, (${e}) + (${i}))`:`String(${t}).slice(${e})`},if:r=>{if(r.length!==3)throw new Error("if() requires exactly 3 arguments (condition, trueValue, falseValue)");let[t,e,i]=r;return `((${t}) ? (${e}) : (${i}))`},text:r=>{if(r.length!==1)throw new Error("text() requires exactly 1 argument (string or number)");let[t]=r;return `String(${t})`},replace:r=>{if(r.length!==3)throw new Error("replace() requires exactly 3 arguments (string, search, replacement)");let[t,e,i]=r;return `String(${t}).replace(${e}, ${i})`},number:r=>{if(r.length!==1)throw new Error("number() requires exactly 1 argument (string)");let[t]=r;return `Number(${t})`},extractnumber:r=>{if(r.length!==1)throw new Error("extractNumber() requires exactly 1 argument (string)");let[t]=r;return `Number(String(${t}).match(/\\d+(\\.\\d+)?/)[0])`},uppercase:r=>{if(r.length!==1)throw new Error("uppercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toUpperCase()`},lowercase:r=>{if(r.length!==1)throw new Error("lowercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toLowerCase()`},xmlnode:r=>{if(r.length<1)throw new Error("xmlnode() requires at least 1 argument (string)");let t=r[0],e=[...r.slice(1)],i="";if(e.length>0){let[n,a]=[e,2];n=[...Array(Math.ceil(n.length/a))].map(u=>n.splice(0,a)).map(([u,o])=>{let p=u;return u.startsWith('"')||u.startsWith("'")?p=`"$${u.slice(1,-1)}"`:p=`["$"+${u}]`,`${p}:${o||"null"}`}),i=","+n.join(",");}else return t;return `{_:${t}${i}}`},split:r=>{if(r.length<1)throw new Error("split() requires at least 1 argument (string)");let[t,e,i]=r,n=e!==void 0?e:'""',a=i!==void 0?`, ${i}`:"";return `String(${t}).split(${n}${a})`},to_base64:r=>{if(r.length!==1)throw new Error("to_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${t})))) : Buffer.from(String(${t}), 'utf-8').toString('base64'))`},from_base64:r=>{if(r.length!==1)throw new Error("from_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${t})))) : Buffer.from(String(${t}), 'base64').toString('utf-8'))`},aslist:r=>{if(r.length!==1)throw new Error("aslist() requires exactly 1 argument");let[t]=r;return `(Array.isArray(${t}) ? ${t} : (${t} == null ? [] : [${t}]))`}};var Ut=E.getBaseCstVisitorConstructor(),et=class extends Ut{readFrom="source";constructor(){super(),this.validateVisitor();}visitWithContext(t,e){let i=this.readFrom;this.readFrom=e.readFrom;let n=this.visit(t);return this.readFrom=i,n}query(t){let e=t.action?t.action.map(st=>this.visit(st)):[];t.Transform||e.push("Object.assign(target, source);");let i=this.visit(t.sourceType),n=this.visit(t.targetType),a=i.name,u=n.name,o=JSON.stringify(i.options),p=JSON.stringify(n.options);return {code:`
|
|
1
|
+
import {createToken,Lexer,CstParser}from'chevrotain';import {XMLBuilder,XMLParser}from'fast-xml-parser';import Et from'papaparse';import Ct from'js-beautify';var yt=createToken({name:"WhiteSpace",pattern:/\s+/,group:Lexer.SKIPPED}),At=createToken({name:"LineComment",pattern:/\/\/[^\n\r]*/,group:Lexer.SKIPPED}),Rt=createToken({name:"BlockComment",pattern:/\/\*[\s\S]*?\*\//,group:Lexer.SKIPPED}),u=createToken({name:"Identifier",pattern:/[a-zA-Z_$][a-zA-Z0-9_.\[\]]*/}),v=createToken({name:"QuotedIdentifier",pattern:/`([^`\\]|\\.)*`/}),g=createToken({name:"From",pattern:/from/i,longer_alt:u}),A=createToken({name:"To",pattern:/to/i,longer_alt:u}),R=createToken({name:"Transform",pattern:/transform/i,longer_alt:u}),C=createToken({name:"Set",pattern:/set/i,longer_alt:u}),M=createToken({name:"Section",pattern:/section/i,longer_alt:u}),P=createToken({name:"Multiple",pattern:/multiple/i,longer_alt:u}),q=createToken({name:"Clone",pattern:/clone/i,longer_alt:u}),b=createToken({name:"Delete",pattern:/delete/i,longer_alt:u}),w=createToken({name:"Define",pattern:/define/i,longer_alt:u}),I=createToken({name:"Modify",pattern:/modify/i,longer_alt:u}),N=createToken({name:"If",pattern:/if/i,longer_alt:u}),_=createToken({name:"Else",pattern:/else/i,longer_alt:u}),F=createToken({name:"True",pattern:/true/i,longer_alt:u}),k=createToken({name:"False",pattern:/false/i,longer_alt:u}),x=createToken({name:"Null",pattern:/null/i,longer_alt:u}),j=createToken({name:"Return",pattern:/return/i,longer_alt:u}),z=createToken({name:"Unsafe",pattern:/unsafe/i,longer_alt:u}),W=createToken({name:"EqualsEquals",pattern:/==/}),D=createToken({name:"EqualsEqualsEquals",pattern:/===/}),Y=createToken({name:"NotEquals",pattern:/!=/}),G=createToken({name:"NotEqualsEquals",pattern:/!==/}),Q=createToken({name:"LessThanOrEqual",pattern:/<=/}),J=createToken({name:"GreaterThanOrEqual",pattern:/>=/}),V=createToken({name:"LessThan",pattern:/</}),K=createToken({name:"GreaterThan",pattern:/>/}),Z=createToken({name:"And",pattern:/&&/}),H=createToken({name:"Or",pattern:/\|\|/}),X=createToken({name:"Not",pattern:/!/}),f=createToken({name:"Equals",pattern:/=/}),tt=createToken({name:"Plus",pattern:/\+/}),O=createToken({name:"Minus",pattern:/-/}),et=createToken({name:"Times",pattern:/\*/}),rt=createToken({name:"Divide",pattern:/\//}),h=createToken({name:"LParen",pattern:/\(/}),m=createToken({name:"RParen",pattern:/\)/}),S=createToken({name:"Comma",pattern:/,/}),st=createToken({name:"StringLiteral",pattern:/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/}),it=createToken({name:"NumericLiteral",pattern:/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/}),nt=[yt,At,Rt,g,A,R,C,M,P,q,b,w,I,N,_,F,k,x,j,z,D,W,G,Y,Q,J,Z,H,f,V,K,X,tt,O,et,rt,h,m,S,st,it,v,u],pt=new Lexer(nt);var at=class extends CstParser{constructor(){super(nt),this.performSelfAnalysis();}query=this.RULE("query",()=>{this.CONSUME(g),this.SUBRULE(this.typeFormat,{LABEL:"sourceType"}),this.CONSUME(A),this.SUBRULE1(this.typeFormat,{LABEL:"targetType"}),this.OPTION(()=>{this.CONSUME(R),this.OPTION1(()=>{this.CONSUME(z);}),this.MANY(()=>{this.SUBRULE(this.action);});});});typeFormat=this.RULE("typeFormat",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"name"}),this.OPTION(()=>{this.CONSUME(h),this.MANY_SEP({SEP:S,DEF:()=>{this.SUBRULE(this.typeFormatParameter,{LABEL:"params"});}}),this.CONSUME(m);});});typeFormatParameter=this.RULE("typeFormatParameter",()=>{this.OR([{GATE:()=>this.LA(2).tokenType===f,ALT:()=>this.SUBRULE(this.namedParameter)},{ALT:()=>this.SUBRULE(this.literal)}]);});namedParameter=this.RULE("namedParameter",()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"key"}),this.CONSUME(f),this.SUBRULE(this.literal,{LABEL:"value"});});anyIdentifier=this.RULE("anyIdentifier",()=>{this.OR([{ALT:()=>this.CONSUME(u)},{ALT:()=>this.CONSUME(v)}]);});literal=this.RULE("literal",()=>{this.OR([{ALT:()=>this.CONSUME(st)},{ALT:()=>this.CONSUME(it)},{ALT:()=>this.CONSUME(F)},{ALT:()=>this.CONSUME(k)},{ALT:()=>this.CONSUME(x)}]);});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(j),this.SUBRULE(this.expression,{LABEL:"expr"});});deleteRule=this.RULE("deleteRule",()=>{this.CONSUME(b),this.SUBRULE(this.anyIdentifier,{LABEL:"field"});});ifAction=this.RULE("ifAction",()=>{this.CONSUME(N),this.CONSUME(h),this.SUBRULE(this.expression,{LABEL:"condition"}),this.CONSUME(m),this.CONSUME2(h),this.MANY(()=>{this.SUBRULE(this.action,{LABEL:"thenActions"});}),this.CONSUME2(m),this.OPTION(()=>{this.CONSUME(_),this.CONSUME3(h),this.MANY2(()=>{this.SUBRULE2(this.action,{LABEL:"elseActions"});}),this.CONSUME3(m);});});cloneRule=this.RULE("cloneRule",()=>{this.CONSUME(q),this.OPTION(()=>{this.CONSUME(h),this.MANY_SEP({SEP:S,DEF:()=>{this.SUBRULE(this.anyIdentifier,{LABEL:"fields"});}}),this.CONSUME(m);});});setRule=this.RULE("setRule",()=>{this.CONSUME(C),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});});modifyRule=this.RULE("modifyRule",()=>{this.CONSUME(I),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});});expression=this.RULE("expression",()=>{this.SUBRULE(this.logicalOr);});logicalOr=this.RULE("logicalOr",()=>{this.SUBRULE(this.logicalAnd,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(H),this.SUBRULE1(this.logicalAnd,{LABEL:"rhs"});});});logicalAnd=this.RULE("logicalAnd",()=>{this.SUBRULE(this.comparison,{LABEL:"lhs"}),this.MANY(()=>{this.CONSUME(Z),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(D,{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"})}]),this.SUBRULE1(this.addition,{LABEL:"rhs"});});});addition=this.RULE("addition",()=>{this.SUBRULE(this.multiplication,{LABEL:"lhs"}),this.MANY(()=>{this.OR([{ALT:()=>this.CONSUME(tt,{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(et,{LABEL:"ops"})},{ALT:()=>this.CONSUME(rt,{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(X,{LABEL:"sign"})}]);}),this.SUBRULE(this.atomic);});atomic=this.RULE("atomic",()=>{this.OR([{ALT:()=>this.SUBRULE(this.literal)},{GATE:()=>this.LA(2).tokenType===h,ALT:()=>this.SUBRULE(this.functionCall)},{ALT:()=>this.SUBRULE(this.anyIdentifier)},{ALT:()=>{this.CONSUME(h),this.SUBRULE(this.expression),this.CONSUME(m);}}]);});functionCall=this.RULE("functionCall",()=>{this.OR([{ALT:()=>this.CONSUME(u,{LABEL:"name"})},{ALT:()=>this.CONSUME(N,{LABEL:"name"})}]),this.CONSUME(h),this.MANY_SEP({SEP:S,DEF:()=>{this.SUBRULE(this.expression,{LABEL:"args"});}}),this.CONSUME(m);});sectionRule=this.RULE("sectionRule",()=>{this.CONSUME(M),this.OPTION(()=>{this.CONSUME(P);}),this.SUBRULE(this.anyIdentifier,{LABEL:"sectionName"}),this.CONSUME(h),this.OPTION1(()=>{this.CONSUME(g,{LABEL:"subqueryFrom"}),this.SUBRULE(this.typeFormat,{LABEL:"subquerySourceType"}),this.CONSUME(A,{LABEL:"subqueryTo"}),this.SUBRULE1(this.typeFormat,{LABEL:"subqueryTargetType"}),this.OPTION2(()=>{this.CONSUME(R,{LABEL:"subqueryTransform"});});}),this.MANY(()=>{this.SUBRULE(this.action);}),this.CONSUME(m),this.OPTION3(()=>{this.CONSUME1(g,{LABEL:"followFrom"}),this.SUBRULE2(this.anyIdentifier,{LABEL:"followPath"});});});defineRule=this.RULE("defineRule",()=>{this.CONSUME(w),this.SUBRULE(this.anyIdentifier,{LABEL:"left"}),this.CONSUME(f),this.SUBRULE(this.expression,{LABEL:"right"});})},E=new at;var mt={substring:r=>{if(r.length<2)throw new Error("substring() requires at least 2 arguments (string, start, [length])");let[t,e,s]=r;return s!==void 0?`String(${t}).slice(${e}, (${e}) + (${s}))`:`String(${t}).slice(${e})`},if:r=>{if(r.length!==3)throw new Error("if() requires exactly 3 arguments (condition, trueValue, falseValue)");let[t,e,s]=r;return `((${t}) ? (${e}) : (${s}))`},text:r=>{if(r.length!==1)throw new Error("text() requires exactly 1 argument (string or number)");let[t]=r;return `String(${t})`},replace:r=>{if(r.length!==3)throw new Error("replace() requires exactly 3 arguments (string, search, replacement)");let[t,e,s]=r;return `String(${t}).replace(${e}, ${s})`},number:r=>{if(r.length!==1)throw new Error("number() requires exactly 1 argument (string)");let[t]=r;return `Number(${t})`},extractnumber:r=>{if(r.length!==1)throw new Error("extractNumber() requires exactly 1 argument (string)");let[t]=r;return `(() => { const match = String(${t}).match(/\\d+(\\.\\d+)?/); return match ? Number(match[0]) : null; })()`},uppercase:r=>{if(r.length!==1)throw new Error("uppercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toUpperCase()`},lowercase:r=>{if(r.length!==1)throw new Error("lowercase() requires exactly 1 argument (string)");let[t]=r;return `String(${t}).toLowerCase()`},xmlnode:r=>{if(r.length<1)throw new Error("xmlnode() requires at least 1 argument (string)");let t=r[0],e=[...r.slice(1)],s="";if(e.length>0){let[i,n]=[e,2];i=[...Array(Math.ceil(i.length/n))].map(o=>i.splice(0,n)).map(([o,l])=>{let c=o;return o.startsWith('"')||o.startsWith("'")?c=`"$${o.slice(1,-1)}"`:c=`["$"+${o}]`,`${c}:${l||"null"}`}),s=","+i.join(",");}else return t;return `{_:${t}${s}}`},split:r=>{if(r.length<1)throw new Error("split() requires at least 1 argument (string)");let[t,e,s]=r,i=e!==void 0?e:'""',n=s!==void 0?`, ${s}`:"";return `String(${t}).split(${i}${n})`},to_base64:r=>{if(r.length!==1)throw new Error("to_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${t})))) : Buffer.from(String(${t}), 'utf-8').toString('base64'))`},from_base64:r=>{if(r.length!==1)throw new Error("from_base64() requires exactly 1 argument (string)");let[t]=r;return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${t})))) : Buffer.from(String(${t}), 'base64').toString('utf-8'))`},aslist:r=>{if(r.length!==1)throw new Error("aslist() requires exactly 1 argument");let[t]=r;return `(Array.isArray(${t}) ? ${t} : (${t} == null ? [] : [${t}]))`},spreadsheet:r=>{if(r.length!==1)throw new Error("spreadsheet() requires exactly 1 argument");let[t]=r;return `((data)=>{
|
|
2
|
+
const spreadsheet = Array.isArray(data) ? data : (data == null ? [] : [data]);
|
|
3
|
+
const out = [];
|
|
4
|
+
const titles = [];
|
|
5
|
+
let keys = [];
|
|
6
|
+
for (let i = 0; i < spreadsheet.length; i++) {
|
|
7
|
+
const line = spreadsheet[i];
|
|
8
|
+
if (!line || typeof line !== 'object') continue;
|
|
9
|
+
if (i === 0) {
|
|
10
|
+
keys = Object.keys(line);
|
|
11
|
+
for (const k of keys) titles.push(line[k]);
|
|
12
|
+
} else {
|
|
13
|
+
const tempLine = {};
|
|
14
|
+
for (let j = 0; j < keys.length; j++) {
|
|
15
|
+
tempLine[titles[j]] = line[keys[j]];
|
|
16
|
+
}
|
|
17
|
+
out.push(tempLine);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
})(${t})`}};var Tt=E.getBaseCstVisitorConstructor(),ot=class extends Tt{readFrom="source";scopeStack=[];safeMode=true;constructor(){super(),this.validateVisitor();}visitWithContext(t,e){let s=this.readFrom;this.readFrom=e.readFrom;let i=this.visit(t);return this.readFrom=s,i}query(t){let e=this.visit(t.sourceType),s=this.visit(t.targetType),i=!!t.Unsafe;this.safeMode=!i,this.scopeStack.push({format:s.name,options:s.options,isSerializationScope:true});let n=t.action?t.action.map(p=>this.visit(p)):[];this.scopeStack.pop(),t.Transform||n.push("Object.assign(target, source);");let o=e.name,l=s.name,c=JSON.stringify(e.options),ut=JSON.stringify(s.options),U=n.some(p=>typeof p=="string"&&p.trim().startsWith("return "));return {code:`
|
|
2
22
|
return function(input, env) {
|
|
3
23
|
// 1. Parse Input
|
|
4
|
-
const source = env.parse('${
|
|
24
|
+
const source = env.parse('${o}', input, ${c});
|
|
5
25
|
const _rootSource = source;
|
|
6
26
|
|
|
7
27
|
// 2. Transform
|
|
8
28
|
const target = {};
|
|
9
29
|
const _rootTarget = target;
|
|
10
|
-
${
|
|
30
|
+
${n.join(`
|
|
11
31
|
`)}
|
|
12
32
|
|
|
13
33
|
// 3. Serialize Output
|
|
14
|
-
return env.serialize('${
|
|
34
|
+
${U?"":`return env.serialize('${l}', target, ${ut});`}
|
|
15
35
|
}
|
|
16
|
-
`,sourceType:
|
|
17
|
-
`):"",
|
|
36
|
+
`,sourceType:e,targetType:s}}typeFormat(t){let e=this.visit(t.name),s={params:[]};return t.params&&t.params.forEach(i=>{let n=this.visit(i);typeof n=="object"&&"key"in n?s[n.key]=this.parseLiteral(n.value):s.params.push(this.parseLiteral(n));}),{name:e.name,options:s}}typeFormatParameter(t){if(t.namedParameter)return this.visit(t.namedParameter);if(t.literal)return this.visit(t.literal)}namedParameter(t){let e=this.visit(t.key).name,s=this.visit(t.value);return {key:e,value:s}}parseLiteral(t){if(t==="true")return true;if(t==="false")return false;if(t==="null")return null;if(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))return t.slice(1,-1);let e=Number(t);return isNaN(e)?t:e}genAccess(t,e,s=false){let i=this.safeMode&&!s?"?.":".";return e.quoted||e.name.includes("-")&&!e.name.includes(".")&&!e.name.includes("[")?`${t}${this.safeMode&&!s?"?.":""}["${e.name}"]`:`${t}${i}${e.name}`}anyIdentifier(t){if(t.Identifier)return {name:t.Identifier[0].image,quoted:false};if(t.QuotedIdentifier)return {name:t.QuotedIdentifier[0].image.slice(1,-1).replace(/\\(.)/g,"$1"),quoted:true}}literal(t){if(t.StringLiteral)return t.StringLiteral[0].image;if(t.NumericLiteral)return t.NumericLiteral[0].image;if(t.True)return "true";if(t.False)return "false";if(t.Null)return "null"}action(t){if(t.setRule)return this.visit(t.setRule);if(t.modifyRule)return this.visit(t.modifyRule);if(t.sectionRule)return this.visit(t.sectionRule);if(t.cloneRule)return this.visit(t.cloneRule);if(t.ifAction)return this.visit(t.ifAction);if(t.deleteRule)return this.visit(t.deleteRule);if(t.defineRule)return this.visit(t.defineRule);if(t.returnRule)return this.visit(t.returnRule)}deleteRule(t){let e=this.visit(t.field);return `delete ${this.genAccess("target",e,true)};`}ifAction(t){let e=this.visit(t.condition),s=t.thenActions?t.thenActions.map(n=>this.visit(n)).join(`
|
|
37
|
+
`):"",i=t.elseActions?`else { ${t.elseActions.map(n=>this.visit(n)).join(`
|
|
18
38
|
`)} }`:"";return `if (${e}) {
|
|
19
|
-
${
|
|
20
|
-
} ${
|
|
21
|
-
`):"Object.assign(target, source);"}setRule(t){let e=this.visit(t.left),
|
|
22
|
-
if (${
|
|
23
|
-
${
|
|
24
|
-
const subSource = env.parse('${
|
|
39
|
+
${s}
|
|
40
|
+
} ${i}`}cloneRule(t){return t.fields?t.fields.map(s=>this.visit(s)).map(s=>`${this.genAccess("target",s,true)} = ${this.genAccess("source",s)};`).join(`
|
|
41
|
+
`):"Object.assign(target, source);"}setRule(t){let e=this.visit(t.left),s=this.visit(t.right);return `${this.genAccess("target",e,true)} = ${s};`}modifyRule(t){let e=this.visit(t.left),s=this.visitWithContext(t.right,{readFrom:"target"});return `${this.genAccess("target",e,true)} = ${s};`}defineRule(t){let e=this.visit(t.left),s=this.visit(t.right);return `${this.genAccess("source",e,true)} = ${s};`}returnRule(t){let e=this.visitWithContext(t.expr,{readFrom:"target"}),s=this.scopeStack[this.scopeStack.length-1];if(s&&s.isSerializationScope){let i=JSON.stringify(s.options);return `return env.serialize('${s.format}', ${e}, ${i});`}return `return ${e};`}expression(t){return this.visit(t.logicalOr)}logicalOr(t){let e=this.visit(t.lhs);if(t.rhs)for(let s=0;s<t.rhs.length;s++){let i=this.visit(t.rhs[s]);e=`${e} || ${i}`;}return e}logicalAnd(t){let e=this.visit(t.lhs);if(t.rhs)for(let s=0;s<t.rhs.length;s++){let i=this.visit(t.rhs[s]);e=`${e} && ${i}`;}return e}comparison(t){let e=this.visit(t.lhs);if(t.rhs){let s=t.ops[0].image,i=this.visit(t.rhs[0]);e=`${e} ${s} ${i}`;}return e}addition(t){let e=this.visit(t.lhs);if(t.rhs)for(let s=0;s<t.rhs.length;s++){let i=t.ops[s].image,n=this.visit(t.rhs[s]);e=`${e} ${i} ${n}`;}return e}multiplication(t){let e=this.visit(t.lhs);if(t.rhs)for(let s=0;s<t.rhs.length;s++){let i=t.ops[s].image,n=this.visit(t.rhs[s]);e=`${e} ${i} ${n}`;}return e}unaryExpression(t){let e=this.visit(t.atomic);return t.sign?`${t.sign[0].image}${e}`:e}atomic(t){if(t.literal)return this.visit(t.literal);if(t.functionCall)return this.visit(t.functionCall);if(t.anyIdentifier){let e=this.visit(t.anyIdentifier);if(["true","false","null"].includes(e.name)&&!e.quoted)return e.name;if(!e.quoted){if(e.name.startsWith("source.")||e.name.startsWith("source[")||e.name.startsWith("target.")||e.name.startsWith("target["))return e.name;if(e.name==="target")return "target";if(e.name==="source")return "source";if(e.name==="_source"||e.name.startsWith("_source.")||e.name.startsWith("_source["))return `_rootSource${e.name.substring(7)}`;if(e.name==="_target"||e.name.startsWith("_target.")||e.name.startsWith("_target["))return `_rootTarget${e.name.substring(7)}`}return this.genAccess(this.readFrom,e)}if(t.expression)return `(${this.visit(t.expression)})`}functionCall(t){let e=t.name[0].image,s=(e.startsWith("`")?e.slice(1,-1):e).toLowerCase(),i=t.args?t.args.map(o=>this.visit(o)):[],n=mt[s];if(n)return n(i);throw new Error(`Unknown function: ${e}`)}sectionRule(t){let e=this.visit(t.sectionName);e.name;let i=this.genAccess("target",e,true),n=t.followPath?this.visit(t.followPath):e;n.name==="parent"?"":"."+n.name;let l=n.name==="parent"?"source":this.genAccess("source",n),c=!!t.Multiple;if(!!t.subqueryFrom){let p=this.visit(t.subquerySourceType),L=this.visit(t.subqueryTargetType);this.scopeStack.push({format:L.name,options:L.options,isSerializationScope:true});let Ut=!!t.subqueryTransform,$=t.action?t.action.map(dt=>this.visit(dt)):[];Ut||$.push("Object.assign(target, source);");let ht=JSON.stringify(p.options),ct=JSON.stringify(L.options),B="";return c?B=`
|
|
42
|
+
if (${l} && Array.isArray(${l})) {
|
|
43
|
+
${i} = ${l}.map(item => {
|
|
44
|
+
const subSource = env.parse('${p.name}', item, ${ht});
|
|
25
45
|
const source = subSource;
|
|
26
46
|
const target = {};
|
|
27
|
-
${
|
|
47
|
+
${$.join(`
|
|
28
48
|
`)}
|
|
29
|
-
return env.serialize('${
|
|
49
|
+
return env.serialize('${L.name}', target, ${ct});
|
|
30
50
|
});
|
|
31
51
|
}
|
|
32
|
-
|
|
33
|
-
if (${
|
|
34
|
-
${
|
|
35
|
-
const subSource = env.parse('${
|
|
52
|
+
`:B=`
|
|
53
|
+
if (${l}) {
|
|
54
|
+
${i} = (function(innerSource) {
|
|
55
|
+
const subSource = env.parse('${p.name}', innerSource, ${ht});
|
|
36
56
|
const source = subSource;
|
|
37
57
|
const target = {};
|
|
38
|
-
${
|
|
58
|
+
${$.join(`
|
|
39
59
|
`)}
|
|
40
|
-
return env.serialize('${
|
|
41
|
-
})(${
|
|
60
|
+
return env.serialize('${L.name}', target, ${ct});
|
|
61
|
+
})(${l});
|
|
42
62
|
}
|
|
43
|
-
|
|
44
|
-
if (${
|
|
45
|
-
${
|
|
63
|
+
`,this.scopeStack.pop(),B}this.scopeStack.push({format:"object",options:{},isSerializationScope:false});let U=t.action?t.action.map(p=>this.visit(p)):[],d="";return c?d=`
|
|
64
|
+
if (${l} && Array.isArray(${l})) {
|
|
65
|
+
${i} = ${l}.map(item => {
|
|
46
66
|
const source = item;
|
|
47
67
|
const target = {};
|
|
48
|
-
${
|
|
68
|
+
${U.join(`
|
|
49
69
|
`)}
|
|
50
70
|
return target;
|
|
51
71
|
});
|
|
52
72
|
}
|
|
53
|
-
|
|
54
|
-
if (${
|
|
55
|
-
${
|
|
73
|
+
`:d=`
|
|
74
|
+
if (${l}) {
|
|
75
|
+
${i} = (function(innerSource) {
|
|
56
76
|
const source = innerSource;
|
|
57
77
|
const target = {};
|
|
58
|
-
${
|
|
78
|
+
${U.join(`
|
|
59
79
|
`)}
|
|
60
80
|
return target;
|
|
61
|
-
})(${
|
|
81
|
+
})(${l});
|
|
62
82
|
}
|
|
63
|
-
|
|
83
|
+
`,this.scopeStack.pop(),d}},ft=new ot;var gt={};function T(r,t){gt[r.toLowerCase()]=t;}function lt(r){let t=gt[r.toLowerCase()];if(!t)throw new Error(`No adapter found for format: ${r}`);return t}function Bt(r){let t="";for(;r>=0;)t=String.fromCharCode(r%26+65)+t,r=Math.floor(r/26)-1;return t}T("json",{parse:r=>typeof r!="string"?r:JSON.parse(r),serialize:r=>JSON.stringify(r,null,2)});var vt=new XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true});T("xml",{parse:(r,t)=>typeof r!="string"?r:new XMLParser({ignoreAttributes:false,removeNSPrefix:true,...t}).parse(r),serialize:(r,t)=>{let e=t?.rootGenerated??t?.params?.[0]??"root";return (t?new XMLBuilder({ignoreAttributes:false,attributeNamePrefix:"$",textNodeName:"_",format:true,...t}):vt).build({[e]:r})}});T("csv",{parse:(r,t)=>{if(typeof r!="string")return r;let e=t?.delimiter??t?.params?.[0]??",";return {rows:Et.parse(r,{delimiter:e,skipEmptyLines:true,...t}).data.map(n=>{let o={};return Array.isArray(n)&&n.forEach((l,c)=>{o[Bt(c)]=l;}),o})}},serialize:(r,t)=>{if(!r||!Array.isArray(r.rows))return "";let e=t?.delimiter??t?.params?.[0]??",",s=r.rows.map(i=>Object.keys(i).filter(o=>/^[A-Z]+$/.test(o)).sort((o,l)=>o.length!==l.length?o.length-l.length:o.localeCompare(l)).map(o=>i[o]));return Et.unparse(s,{delimiter:e,...t})}});T("object",{parse:r=>r,serialize:r=>r});async function Gt(r,t){if(t?.cache){let o=await t.cache.retrieve(r);if(o)return St(o)}let e=pt.tokenize(r);if(e.errors.length>0)throw new Error(`Lexing errors: ${e.errors[0].message}`);E.input=e.tokens;let s=E.query();if(E.errors.length>0)throw new Error(`Parsing errors: ${E.errors[0].message}`);let{code:i}=ft.visit(s),n=Ct.js(i,{indent_size:2,space_in_empty_paren:true,end_with_newline:true});return t?.cache&&await t.cache.save(r,n),St(n)}function St(r){let e=new Function(r)(),s={parse:(n,o,l)=>lt(n).parse(o,l),serialize:(n,o,l)=>lt(n).serialize(o,l)},i=(n=>e(n,s));return i.code=r,i}function Qt(r,...t){return r.reduce((e,s,i)=>e+s+(t[i]??""),"")}function Jt(r){return `Hello, ${r}! The Morph engine is ready.`}export{Gt as compile,Jt as greet,Qt as morphQL};//# sourceMappingURL=index.js.map
|
|
64
84
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/index.ts"],"names":["WhiteSpace","createToken","Lexer","LineComment","BlockComment","Identifier","QuotedIdentifier","From","To","Transform","Set","Section","Multiple","Clone","Delete","Define","Modify","If","Else","True","False","Null","EqualsEquals","EqualsEqualsEquals","NotEquals","NotEqualsEquals","LessThanOrEqual","GreaterThanOrEqual","LessThan","GreaterThan","And","Or","Not","Equals","Plus","Minus","Times","Divide","LParen","RParen","Comma","StringLiteral","NumericLiteral","allTokens","MorphLexer","MorphParser","CstParser","parser","functionRegistry","args","str","start","length","condition","trueValue","falseValue","search","replacement","value","attributesList","attributes","list","chunkSize","_","key","attrKey","separator","limit","sep","lim","val","BaseCstVisitor","MorphCompiler","node","context","previousReadFrom","result","ctx","actions","a","sourceType","targetType","sourceTypeName","targetTypeName","sourceOptions","targetOptions","id","options","p","image","num","base","field","thenActions","elseBlock","f","left","right","rhs","op","atomic","originalName","name","handler","sectionId","sectionAccess","followPathId","sourceAccess","isMultiple","subSourceType","subTargetType","subSourceOptions","subTargetOptions","compiler","adapters","registerAdapter","adapter","getAdapter","content","data","xmlBuilder","XMLBuilder","XMLParser","rootTag","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","code","beautify","transform","env","format","engine","input","morphQL","strings","values","acc","i","greet"],"mappings":"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","file":"index.js","sourcesContent":["import { createToken, Lexer } from 'chevrotain';\n\nexport const WhiteSpace = createToken({\n name: 'WhiteSpace',\n pattern: /\\s+/,\n group: Lexer.SKIPPED,\n});\n\n// Comments\nexport const LineComment = createToken({\n name: 'LineComment',\n pattern: /\\/\\/[^\\n\\r]*/,\n group: Lexer.SKIPPED,\n});\n\nexport const BlockComment = createToken({\n name: 'BlockComment',\n pattern: /\\/\\*[\\s\\S]*?\\*\\//,\n group: Lexer.SKIPPED,\n});\n\nexport const Identifier = createToken({\n name: 'Identifier',\n pattern: /[a-zA-Z_$][a-zA-Z0-9_.\\[\\]]*/,\n});\n\nexport const QuotedIdentifier = createToken({\n name: 'QuotedIdentifier',\n pattern: /`([^`\\\\]|\\\\.)*`/,\n});\n\nexport const From = createToken({ name: 'From', pattern: /from/i, longer_alt: Identifier });\nexport const To = createToken({ name: 'To', pattern: /to/i, longer_alt: Identifier });\nexport const Transform = createToken({\n name: 'Transform',\n pattern: /transform/i,\n longer_alt: Identifier,\n});\nexport const Set = createToken({ name: 'Set', pattern: /set/i, longer_alt: Identifier });\nexport const Section = createToken({\n name: 'Section',\n pattern: /section/i,\n longer_alt: Identifier,\n});\nexport const Multiple = createToken({\n name: 'Multiple',\n pattern: /multiple/i,\n longer_alt: Identifier,\n});\nexport const Clone = createToken({ name: 'Clone', pattern: /clone/i, longer_alt: Identifier });\nexport const Delete = createToken({ name: 'Delete', pattern: /delete/i, longer_alt: Identifier });\nexport const Define = createToken({ name: 'Define', pattern: /define/i, longer_alt: Identifier });\nexport const Modify = createToken({ name: 'Modify', pattern: /modify/i, longer_alt: Identifier });\nexport const If = createToken({ name: 'If', pattern: /if/i, longer_alt: Identifier });\nexport const Else = createToken({ name: 'Else', pattern: /else/i, longer_alt: Identifier });\nexport const True = createToken({ name: 'True', pattern: /true/i, longer_alt: Identifier });\nexport const False = createToken({ name: 'False', pattern: /false/i, longer_alt: Identifier });\nexport const Null = createToken({ name: 'Null', pattern: /null/i, longer_alt: Identifier });\n\n// Comparison operators (must come before single-char operators)\nexport const EqualsEquals = createToken({ name: 'EqualsEquals', pattern: /==/ });\nexport const EqualsEqualsEquals = createToken({ name: 'EqualsEqualsEquals', pattern: /===/ });\nexport const NotEquals = createToken({ name: 'NotEquals', pattern: /!=/ });\nexport const NotEqualsEquals = createToken({ name: 'NotEqualsEquals', pattern: /!==/ });\nexport const LessThanOrEqual = createToken({ name: 'LessThanOrEqual', pattern: /<=/ });\nexport const GreaterThanOrEqual = createToken({ name: 'GreaterThanOrEqual', pattern: />=/ });\nexport const LessThan = createToken({ name: 'LessThan', pattern: /</ });\nexport const GreaterThan = createToken({ name: 'GreaterThan', pattern: />/ });\n\n// Logical operators\nexport const And = createToken({ name: 'And', pattern: /&&/ });\nexport const Or = createToken({ name: 'Or', pattern: /\\|\\|/ });\nexport const Not = createToken({ name: 'Not', pattern: /!/ });\n\nexport const Equals = createToken({ name: 'Equals', pattern: /=/ });\nexport const Plus = createToken({ name: 'Plus', pattern: /\\+/ });\nexport const Minus = createToken({ name: 'Minus', pattern: /-/ });\nexport const Times = createToken({ name: 'Times', pattern: /\\*/ });\nexport const Divide = createToken({ name: 'Divide', pattern: /\\// });\nexport const LParen = createToken({ name: 'LParen', pattern: /\\(/ });\nexport const RParen = createToken({ name: 'RParen', pattern: /\\)/ });\nexport const Comma = createToken({ name: 'Comma', pattern: /,/ });\n\nexport const StringLiteral = createToken({\n name: 'StringLiteral',\n pattern: /\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/,\n});\n\nexport const NumericLiteral = createToken({\n name: 'NumericLiteral',\n pattern: /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/,\n});\n\nexport const allTokens = [\n WhiteSpace,\n LineComment,\n BlockComment,\n From,\n To,\n Transform,\n Set,\n Section,\n Multiple,\n Clone,\n Delete,\n Define,\n Modify,\n If,\n Else,\n True,\n False,\n Null,\n\n // Multi-character operators\n EqualsEqualsEquals,\n EqualsEquals,\n NotEqualsEquals,\n NotEquals,\n LessThanOrEqual,\n GreaterThanOrEqual,\n And,\n Or,\n // Single-character operators\n Equals,\n LessThan,\n GreaterThan,\n Not,\n Plus,\n Minus,\n Times,\n Divide,\n LParen,\n RParen,\n Comma,\n StringLiteral,\n NumericLiteral,\n QuotedIdentifier,\n Identifier,\n];\n\nexport const MorphLexer = new Lexer(allTokens);\n","import { CstParser } from 'chevrotain';\nimport * as t from './lexer.js';\n\nexport class MorphParser extends CstParser {\n constructor() {\n super(t.allTokens);\n this.performSelfAnalysis();\n }\n\n public query = this.RULE('query', () => {\n this.CONSUME(t.From);\n this.SUBRULE(this.typeFormat, { LABEL: 'sourceType' });\n this.CONSUME(t.To);\n this.SUBRULE1(this.typeFormat, { LABEL: 'targetType' });\n this.OPTION(() => {\n this.CONSUME(t.Transform);\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n });\n });\n\n private typeFormat = this.RULE('typeFormat', () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'name' });\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.typeFormatParameter, { LABEL: 'params' });\n },\n });\n this.CONSUME(t.RParen);\n });\n });\n\n private typeFormatParameter = this.RULE('typeFormatParameter', () => {\n this.OR([\n {\n GATE: () => this.LA(2).tokenType === t.Equals,\n ALT: () => this.SUBRULE(this.namedParameter),\n },\n { ALT: () => this.SUBRULE(this.literal) },\n ]);\n });\n\n private namedParameter = this.RULE('namedParameter', () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'key' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.literal, { LABEL: 'value' });\n });\n\n private anyIdentifier = this.RULE('anyIdentifier', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier) },\n { ALT: () => this.CONSUME(t.QuotedIdentifier) },\n ]);\n });\n\n private literal = this.RULE('literal', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.StringLiteral) },\n { ALT: () => this.CONSUME(t.NumericLiteral) },\n { ALT: () => this.CONSUME(t.True) },\n { ALT: () => this.CONSUME(t.False) },\n { ALT: () => this.CONSUME(t.Null) },\n ]);\n });\n\n private action = this.RULE('action', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.setRule) },\n { ALT: () => this.SUBRULE(this.modifyRule) },\n { ALT: () => this.SUBRULE(this.sectionRule) },\n { ALT: () => this.SUBRULE(this.cloneRule) },\n { ALT: () => this.SUBRULE(this.deleteRule) },\n { ALT: () => this.SUBRULE(this.ifAction) },\n { ALT: () => this.SUBRULE(this.defineRule) },\n ]);\n });\n\n private deleteRule = this.RULE('deleteRule', () => {\n this.CONSUME(t.Delete);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'field' });\n });\n\n private ifAction = this.RULE('ifAction', () => {\n this.CONSUME(t.If);\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression, { LABEL: 'condition' });\n this.CONSUME(t.RParen);\n this.CONSUME2(t.LParen); // Start 'then' block\n this.MANY(() => {\n this.SUBRULE(this.action, { LABEL: 'thenActions' });\n });\n this.CONSUME2(t.RParen); // End 'then' block\n this.OPTION(() => {\n this.CONSUME(t.Else);\n this.CONSUME3(t.LParen); // Start 'else' block\n this.MANY2(() => {\n this.SUBRULE2(this.action, { LABEL: 'elseActions' });\n });\n this.CONSUME3(t.RParen); // End 'else' block\n });\n });\n\n private cloneRule = this.RULE('cloneRule', () => {\n this.CONSUME(t.Clone);\n this.OPTION(() => {\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.anyIdentifier, { LABEL: 'fields' });\n },\n });\n this.CONSUME(t.RParen);\n });\n });\n\n private setRule = this.RULE('setRule', () => {\n this.CONSUME(t.Set);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private modifyRule = this.RULE('modifyRule', () => {\n this.CONSUME(t.Modify);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n\n private expression = this.RULE('expression', () => {\n this.SUBRULE(this.logicalOr);\n });\n\n private logicalOr = this.RULE('logicalOr', () => {\n this.SUBRULE(this.logicalAnd, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.Or);\n this.SUBRULE1(this.logicalAnd, { LABEL: 'rhs' });\n });\n });\n\n private logicalAnd = this.RULE('logicalAnd', () => {\n this.SUBRULE(this.comparison, { LABEL: 'lhs' });\n this.MANY(() => {\n this.CONSUME(t.And);\n this.SUBRULE1(this.comparison, { LABEL: 'rhs' });\n });\n });\n\n private comparison = this.RULE('comparison', () => {\n this.SUBRULE(this.addition, { LABEL: 'lhs' });\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.EqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.EqualsEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.NotEqualsEquals, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThanOrEqual, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.LessThan, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.GreaterThan, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.addition, { LABEL: 'rhs' });\n });\n });\n\n private addition = this.RULE('addition', () => {\n this.SUBRULE(this.multiplication, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Plus, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.multiplication, { LABEL: 'rhs' });\n });\n });\n\n private multiplication = this.RULE('multiplication', () => {\n this.SUBRULE(this.unaryExpression, { LABEL: 'lhs' });\n this.MANY(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Times, { LABEL: 'ops' }) },\n { ALT: () => this.CONSUME(t.Divide, { LABEL: 'ops' }) },\n ]);\n this.SUBRULE1(this.unaryExpression, { LABEL: 'rhs' });\n });\n });\n\n private unaryExpression = this.RULE('unaryExpression', () => {\n this.OPTION(() => {\n this.OR([\n { ALT: () => this.CONSUME(t.Minus, { LABEL: 'sign' }) },\n { ALT: () => this.CONSUME(t.Not, { LABEL: 'sign' }) },\n ]);\n });\n this.SUBRULE(this.atomic);\n });\n\n private atomic = this.RULE('atomic', () => {\n this.OR([\n { ALT: () => this.SUBRULE(this.literal) },\n {\n GATE: () => this.LA(2).tokenType === t.LParen,\n ALT: () => this.SUBRULE(this.functionCall),\n },\n { ALT: () => this.SUBRULE(this.anyIdentifier) },\n {\n ALT: () => {\n this.CONSUME(t.LParen);\n this.SUBRULE(this.expression);\n this.CONSUME(t.RParen);\n },\n },\n ]);\n });\n\n private functionCall = this.RULE('functionCall', () => {\n this.OR([\n { ALT: () => this.CONSUME(t.Identifier, { LABEL: 'name' }) },\n { ALT: () => this.CONSUME(t.If, { LABEL: 'name' }) },\n ]);\n this.CONSUME(t.LParen);\n this.MANY_SEP({\n SEP: t.Comma,\n DEF: () => {\n this.SUBRULE(this.expression, { LABEL: 'args' });\n },\n });\n this.CONSUME(t.RParen);\n });\n\n private sectionRule = this.RULE('sectionRule', () => {\n this.CONSUME(t.Section);\n this.OPTION(() => {\n this.CONSUME(t.Multiple);\n });\n this.SUBRULE(this.anyIdentifier, { LABEL: 'sectionName' });\n this.CONSUME(t.LParen);\n\n // NEW: Check if this is a subquery section (from X to Y ...)\n this.OPTION1(() => {\n this.CONSUME(t.From, { LABEL: 'subqueryFrom' });\n this.SUBRULE(this.typeFormat, { LABEL: 'subquerySourceType' });\n this.CONSUME(t.To, { LABEL: 'subqueryTo' });\n this.SUBRULE1(this.typeFormat, { LABEL: 'subqueryTargetType' });\n this.OPTION2(() => {\n this.CONSUME(t.Transform, { LABEL: 'subqueryTransform' });\n });\n });\n\n // Actions (for both regular sections and subquery transform blocks)\n this.MANY(() => {\n this.SUBRULE(this.action);\n });\n\n this.CONSUME(t.RParen);\n this.OPTION3(() => {\n this.CONSUME1(t.From, { LABEL: 'followFrom' });\n this.SUBRULE2(this.anyIdentifier, { LABEL: 'followPath' });\n });\n });\n\n private defineRule = this.RULE('defineRule', () => {\n this.CONSUME(t.Define);\n this.SUBRULE(this.anyIdentifier, { LABEL: 'left' });\n this.CONSUME(t.Equals);\n this.SUBRULE(this.expression, { LABEL: 'right' });\n });\n}\n\nexport const parser = new MorphParser();\n","/**\n * Type for a function handler that generates JavaScript code for a DSL function call.\n * @param args - The compiled JavaScript strings for each argument.\n * @returns The generated JavaScript code for the function call.\n */\nexport type FunctionHandler = (args: string[]) => string;\n\n/**\n * Registry of available transformation functions in the DSL.\n */\nexport const functionRegistry: Record<string, FunctionHandler> = {\n substring: (args: string[]) => {\n if (args.length < 2) {\n throw new Error('substring() requires at least 2 arguments (string, start, [length])');\n }\n const [str, start, length] = args;\n if (length !== undefined) {\n // Third parameter is length, so calculate end as start + length\n return `String(${str}).slice(${start}, (${start}) + (${length}))`;\n }\n // Only 2 arguments: slice from start to end of string\n return `String(${str}).slice(${start})`;\n },\n if: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('if() requires exactly 3 arguments (condition, trueValue, falseValue)');\n }\n const [condition, trueValue, falseValue] = args;\n // Compile to ternary operator\n // Wrap in parentheses to ensure precedence is correct\n return `((${condition}) ? (${trueValue}) : (${falseValue}))`;\n },\n text: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('text() requires exactly 1 argument (string or number)');\n }\n const [str] = args;\n return `String(${str})`;\n },\n replace: (args: string[]) => {\n if (args.length !== 3) {\n throw new Error('replace() requires exactly 3 arguments (string, search, replacement)');\n }\n const [str, search, replacement] = args;\n return `String(${str}).replace(${search}, ${replacement})`;\n },\n number: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('number() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(${str})`;\n },\n extractnumber: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('extractNumber() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `Number(String(${str}).match(/\\\\d+(\\\\.\\\\d+)?/)[0])`;\n },\n uppercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('uppercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toUpperCase()`;\n },\n lowercase: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('lowercase() requires exactly 1 argument (string)');\n }\n const [str] = args;\n return `String(${str}).toLowerCase()`;\n },\n xmlnode: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('xmlnode() requires at least 1 argument (string)');\n }\n const value = args[0];\n const attributesList = [...args.slice(1)];\n let attributes = '';\n if (attributesList.length > 0) {\n let [list, chunkSize] = [attributesList, 2];\n list = [...Array(Math.ceil(list.length / chunkSize))]\n .map((_) => list.splice(0, chunkSize))\n .map(([key, value]) => {\n let attrKey = key;\n if (key.startsWith('\"') || key.startsWith(\"'\")) {\n attrKey = `\"$${key.slice(1, -1)}\"`;\n } else {\n attrKey = `[\"$\"+${key}]`;\n }\n return `${attrKey}:${value ? value : 'null'}`;\n });\n attributes = ',' + list.join(',');\n } else {\n return value;\n }\n return `{_:${value}${attributes}}`;\n },\n split: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('split() requires at least 1 argument (string)');\n }\n const [str, separator, limit] = args;\n const sep = separator !== undefined ? separator : '\"\"';\n const lim = limit !== undefined ? `, ${limit}` : '';\n return `String(${str}).split(${sep}${lim})`;\n },\n to_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('to_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${val})))) : Buffer.from(String(${val}), 'utf-8').toString('base64'))`;\n },\n from_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('from_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${val})))) : Buffer.from(String(${val}), 'base64').toString('utf-8'))`;\n },\n aslist: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('aslist() requires exactly 1 argument');\n }\n const [val] = args;\n return `(Array.isArray(${val}) ? ${val} : (${val} == null ? [] : [${val}]))`;\n },\n};\n","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\n\nconst BaseCstVisitor = parser.getBaseCstVisitorConstructor();\n\nexport class MorphCompiler extends (BaseCstVisitor as any) {\n // Context for modify directive - determines whether to read from 'source' or 'target'\n private readFrom: 'source' | 'target' = 'source';\n\n constructor() {\n super();\n this.validateVisitor();\n }\n\n /**\n * Visit with a temporary context change\n */\n private visitWithContext(node: any, context: { readFrom: 'source' | 'target' }) {\n const previousReadFrom = this.readFrom;\n this.readFrom = context.readFrom;\n const result = this.visit(node);\n this.readFrom = previousReadFrom;\n return result;\n }\n\n query(ctx: any) {\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (!ctx.Transform) {\n actions.push('Object.assign(target, source);');\n }\n\n const sourceType = this.visit(ctx.sourceType);\n const targetType = this.visit(ctx.targetType);\n\n // Helper to serialize types for generated code\n const sourceTypeName = sourceType.name;\n const targetTypeName = targetType.name;\n\n const sourceOptions = JSON.stringify(sourceType.options);\n const targetOptions = JSON.stringify(targetType.options);\n\n const code = `\n return function(input, env) {\n // 1. Parse Input\n const source = env.parse('${sourceTypeName}', input, ${sourceOptions});\n const _rootSource = source;\n \n // 2. Transform\n const target = {};\n const _rootTarget = target;\n ${actions.join('\\n ')}\n\n // 3. Serialize Output\n return env.serialize('${targetTypeName}', target, ${targetOptions});\n }\n `;\n\n return {\n code,\n sourceType,\n targetType,\n };\n }\n\n typeFormat(ctx: any) {\n const id = this.visit(ctx.name);\n const options: any = { params: [] };\n if (ctx.params) {\n ctx.params.forEach((p: any) => {\n const val = this.visit(p);\n if (typeof val === 'object' && 'key' in val) {\n options[val.key] = this.parseLiteral(val.value);\n } else {\n // Positional parameter - collect into params array\n options.params.push(this.parseLiteral(val));\n }\n });\n }\n return { name: id.name, options };\n }\n\n typeFormatParameter(ctx: any) {\n if (ctx.namedParameter) {\n return this.visit(ctx.namedParameter);\n }\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n }\n\n namedParameter(ctx: any) {\n const key = this.visit(ctx.key).name;\n const value = this.visit(ctx.value);\n return { key, value };\n }\n\n private parseLiteral(image: string) {\n if (image === 'true') return true;\n if (image === 'false') return false;\n if (image === 'null') return null;\n if (\n (image.startsWith('\"') && image.endsWith('\"')) ||\n (image.startsWith(\"'\") && image.endsWith(\"'\"))\n ) {\n return image.slice(1, -1);\n }\n const num = Number(image);\n if (!isNaN(num)) {\n return num;\n }\n return image;\n }\n\n private genAccess(base: string, id: { name: string; quoted: boolean }) {\n if (id.quoted || (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))) {\n return `${base}[\"${id.name}\"]`;\n }\n return `${base}.${id.name}`;\n }\n\n anyIdentifier(ctx: any) {\n if (ctx.Identifier) {\n return { name: ctx.Identifier[0].image, quoted: false };\n }\n if (ctx.QuotedIdentifier) {\n // Remove backticks and unescape\n const name = ctx.QuotedIdentifier[0].image.slice(1, -1).replace(/\\\\(.)/g, '$1');\n return { name, quoted: true };\n }\n }\n\n literal(ctx: any) {\n if (ctx.StringLiteral) {\n return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n return ctx.NumericLiteral[0].image;\n }\n if (ctx.True) return 'true';\n if (ctx.False) return 'false';\n if (ctx.Null) return 'null';\n }\n\n action(ctx: any) {\n if (ctx.setRule) {\n return this.visit(ctx.setRule);\n }\n if (ctx.modifyRule) {\n return this.visit(ctx.modifyRule);\n }\n if (ctx.sectionRule) {\n return this.visit(ctx.sectionRule);\n }\n if (ctx.cloneRule) {\n return this.visit(ctx.cloneRule);\n }\n if (ctx.ifAction) {\n return this.visit(ctx.ifAction);\n }\n if (ctx.deleteRule) {\n return this.visit(ctx.deleteRule);\n }\n if (ctx.defineRule) {\n return this.visit(ctx.defineRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\n return `delete ${this.genAccess('target', field)};`;\n }\n\n ifAction(ctx: any) {\n const condition = this.visit(ctx.condition);\n const thenActions = ctx.thenActions\n ? ctx.thenActions.map((a: any) => this.visit(a)).join('\\n')\n : '';\n const elseBlock = ctx.elseActions\n ? `else { ${ctx.elseActions.map((a: any) => this.visit(a)).join('\\n')} }`\n : '';\n\n return `if (${condition}) {\n ${thenActions}\n } ${elseBlock}`;\n }\n\n cloneRule(ctx: any) {\n if (ctx.fields) {\n const identifiers = ctx.fields.map((f: any) => this.visit(f));\n return identifiers\n .map((id: any) => `${this.genAccess('target', id)} = ${this.genAccess('source', id)};`)\n .join('\\n ');\n }\n return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n return `${this.genAccess('target', left)} = ${right};`;\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('source', left)} = ${right};`;\n }\n\n expression(ctx: any) {\n return this.visit(ctx.logicalOr);\n }\n\n logicalOr(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} || ${rhs}`;\n }\n }\n return result;\n }\n\n logicalAnd(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} && ${rhs}`;\n }\n }\n return result;\n }\n\n comparison(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n const op = ctx.ops[0].image;\n const rhs = this.visit(ctx.rhs[0]);\n result = `${result} ${op} ${rhs}`;\n }\n return result;\n }\n\n addition(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n unaryExpression(ctx: any) {\n const atomic = this.visit(ctx.atomic);\n if (ctx.sign) {\n const op = ctx.sign[0].image;\n return `${op}${atomic}`;\n }\n return atomic;\n }\n\n atomic(ctx: any) {\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n if (ctx.functionCall) {\n return this.visit(ctx.functionCall);\n }\n if (ctx.anyIdentifier) {\n const id = this.visit(ctx.anyIdentifier);\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n if (\n id.name === '_source' ||\n id.name.startsWith('_source.') ||\n id.name.startsWith('_source[')\n ) {\n return `_rootSource${id.name.substring(7)}`;\n }\n if (\n id.name === '_target' ||\n id.name.startsWith('_target.') ||\n id.name.startsWith('_target[')\n ) {\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n return this.genAccess(this.readFrom, id);\n }\n if (ctx.expression) {\n return `(${this.visit(ctx.expression)})`;\n }\n }\n\n functionCall(ctx: any) {\n const originalName = ctx.name[0].image;\n const name = (\n originalName.startsWith('`') ? originalName.slice(1, -1) : originalName\n ).toLowerCase();\n const args = ctx.args ? ctx.args.map((a: any) => this.visit(a)) : [];\n\n const handler = functionRegistry[name];\n if (handler) {\n return handler(args);\n }\n\n throw new Error(`Unknown function: ${originalName}`);\n }\n\n sectionRule(ctx: any) {\n const sectionId = this.visit(ctx.sectionName);\n const sectionName = sectionId.name;\n const sectionAccess = this.genAccess('target', sectionId);\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n const followPath = followPathId.name === 'parent' ? '' : '.' + followPathId.name;\n // Note: followPath currently only supports simple paths or 'parent'.\n // If it's a quoted identifier, genAccess would return target[\"name\"].\n // But section handling uses '.' + followPath.\n // I should probably use genAccess here too for consistency, but it needs to be relative to 'source'.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n // Check if this is a subquery section\n const isSubquery = !!ctx.subqueryFrom;\n\n if (isSubquery) {\n const subSourceType = this.visit(ctx.subquerySourceType);\n const subTargetType = this.visit(ctx.subqueryTargetType);\n const hasTransform = !!ctx.subqueryTransform;\n\n if (!hasTransform) {\n // Pure format conversion - copy all fields\n actions.push('Object.assign(target, source);');\n }\n\n const subSourceOptions = JSON.stringify(subSourceType.options);\n const subTargetOptions = JSON.stringify(subTargetType.options);\n\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const subSource = env.parse('${subSourceType.name}', item, ${subSourceOptions});\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target, ${subTargetOptions});\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const subSource = env.parse('${subSourceType.name}', innerSource, ${subSourceOptions});\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target, ${subTargetOptions});\n })(${sourceAccess});\n }\n `;\n }\n }\n\n // Regular section handling (unchanged)\n if (isMultiple) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const source = item;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${actions.join('\\n ')}\n return target;\n })(${sourceAccess});\n }\n `;\n }\n }\n}\n\nexport const compiler = new MorphCompiler();\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nexport interface DataAdapter {\n parse(content: string, options?: any): any;\n serialize(data: any, options?: any): string;\n}\n\nconst adapters: Record<string, DataAdapter> = {};\n\nexport function registerAdapter(name: string, adapter: DataAdapter) {\n adapters[name.toLowerCase()] = adapter;\n}\n\nexport function getAdapter(name: string): DataAdapter {\n const adapter = adapters[name.toLowerCase()];\n if (!adapter) {\n throw new Error(`No adapter found for format: ${name}`);\n }\n return adapter;\n}\n\n// Default JSON Adapter\n\nregisterAdapter('json', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n return JSON.parse(content);\n },\n serialize: (data) => JSON.stringify(data, null, 2),\n});\n\n// Default XML Adapter\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n});\n\nregisterAdapter('xml', {\n parse: (content, options) => {\n if (typeof content !== 'string') return content;\n const parser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n ...options,\n });\n return parser.parse(content);\n },\n serialize: (data, options) => {\n const rootTag = options?.rootGenerated ?? options?.params?.[0] ?? 'root';\n const builder = options\n ? new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n ...options,\n })\n : xmlBuilder;\n return builder.build({ [rootTag]: data });\n },\n});\n\n// Object Adapter (Identity)\nregisterAdapter('object', {\n parse: (content) => content, // Assumes input is already an object\n serialize: (data) => data, // Returns object directly\n});\n","import { MorphLexer } from './core/lexer.js';\nimport { parser } from './core/parser.js';\nimport { compiler } from './core/compiler.js';\nimport { getAdapter } from './runtime/adapters.js';\nimport { MorphQLCache } from './runtime/cache.js';\n\nexport { MorphQLCache };\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n}\n\nexport async function compile<Source = any, Target = any>(\n queryString: string,\n options?: CompileOptions\n): Promise<MorphEngine<Source, Target>> {\n // 1. Check Cache\n if (options?.cache) {\n const cachedCode = await options.cache.retrieve(queryString);\n if (cachedCode) {\n return createEngine<Source, Target>(cachedCode);\n }\n }\n\n // 2. Compile if miss\n const lexResult = MorphLexer.tokenize(queryString);\n\n if (lexResult.errors.length > 0) {\n throw new Error(`Lexing errors: ${lexResult.errors[0].message}`);\n }\n\n parser.input = lexResult.tokens;\n const cst = parser.query();\n\n if (parser.errors.length > 0) {\n throw new Error(`Parsing errors: ${parser.errors[0].message}`);\n }\n\n const { code: rawCode } = compiler.visit(cst);\n\n const code = beautify.js(rawCode, {\n indent_size: 2,\n space_in_empty_paren: true,\n end_with_newline: true,\n });\n\n // 3. Save to Cache\n if (options?.cache) {\n await options.cache.save(queryString, code);\n }\n\n return createEngine<Source, Target>(code);\n}\n\nfunction createEngine<Source, Target>(code: string): MorphEngine<Source, Target> {\n // Create the base transformation function\n const factory = new Function(code);\n const transform = factory() as (source: any, env: any) => any;\n\n // Environment with adapter lookups\n const env = {\n parse: (format: string, content: string, options?: any) => {\n return getAdapter(format).parse(content, options);\n },\n serialize: (format: string, data: any, options?: any) => {\n return getAdapter(format).serialize(data, options);\n },\n };\n\n // Return the format-aware engine\n const engine = ((input: Source) => {\n return transform(input, env) as Target;\n }) as MorphEngine<Source, Target>;\n\n engine.code = code;\n return engine;\n}\n\n/**\n * Tagged template helper for MorphQL queries.\n * Enables syntax highlighting in VSCode and provides a cleaner API.\n *\n * @example\n * ```typescript\n * const query = morphQL`\n * from json to xml\n * transform\n * set fullName = firstName + \" \" + lastName\n * `;\n * const engine = await compile(query);\n * ```\n */\nexport function morphQL(strings: TemplateStringsArray, ...values: any[]): string {\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n}\n\n/**\n * Legacy greet function for compatibility during migration.\n */\nexport function greet(name: string): string {\n return `Hello, ${name}! The Morph engine is ready.`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/index.ts"],"names":["WhiteSpace","createToken","Lexer","LineComment","BlockComment","Identifier","QuotedIdentifier","From","To","Transform","Set","Section","Multiple","Clone","Delete","Define","Modify","If","Else","True","False","Null","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","chunkSize","_","key","attrKey","separator","limit","sep","lim","val","BaseCstVisitor","MorphCompiler","node","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","f","left","right","expr","scope","i","rhs","op","atomic","originalName","name","handler","sectionId","sectionAccess","followPathId","sourceAccess","isMultiple","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","code","beautify","transform","env","format","engine","input","morphQL","strings","values","acc","greet"],"mappings":"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","file":"index.js","sourcesContent":["import { createToken, Lexer } from 'chevrotain';\n\nexport const WhiteSpace = createToken({\n name: 'WhiteSpace',\n pattern: /\\s+/,\n group: Lexer.SKIPPED,\n});\n\n// Comments\nexport const LineComment = createToken({\n name: 'LineComment',\n pattern: /\\/\\/[^\\n\\r]*/,\n group: Lexer.SKIPPED,\n});\n\nexport const BlockComment = createToken({\n name: 'BlockComment',\n pattern: /\\/\\*[\\s\\S]*?\\*\\//,\n group: Lexer.SKIPPED,\n});\n\nexport const Identifier = createToken({\n name: 'Identifier',\n pattern: /[a-zA-Z_$][a-zA-Z0-9_.\\[\\]]*/,\n});\n\nexport const QuotedIdentifier = createToken({\n name: 'QuotedIdentifier',\n pattern: /`([^`\\\\]|\\\\.)*`/,\n});\n\nexport const From = createToken({ name: 'From', pattern: /from/i, longer_alt: Identifier });\nexport const To = createToken({ name: 'To', pattern: /to/i, longer_alt: Identifier });\nexport const Transform = createToken({\n name: 'Transform',\n pattern: /transform/i,\n longer_alt: Identifier,\n});\nexport const Set = createToken({ name: 'Set', pattern: /set/i, longer_alt: Identifier });\nexport const Section = createToken({\n name: 'Section',\n pattern: /section/i,\n longer_alt: Identifier,\n});\nexport const Multiple = createToken({\n name: 'Multiple',\n pattern: /multiple/i,\n longer_alt: Identifier,\n});\nexport const Clone = createToken({ name: 'Clone', pattern: /clone/i, longer_alt: Identifier });\nexport const Delete = createToken({ name: 'Delete', pattern: /delete/i, longer_alt: Identifier });\nexport const Define = createToken({ name: 'Define', pattern: /define/i, longer_alt: Identifier });\nexport const Modify = createToken({ name: 'Modify', pattern: /modify/i, longer_alt: Identifier });\nexport const If = createToken({ name: 'If', pattern: /if/i, longer_alt: Identifier });\nexport const Else = createToken({ name: 'Else', pattern: /else/i, longer_alt: Identifier });\nexport const True = createToken({ name: 'True', pattern: /true/i, longer_alt: Identifier });\nexport const False = createToken({ name: 'False', pattern: /false/i, longer_alt: Identifier });\nexport const Null = createToken({ name: 'Null', pattern: /null/i, longer_alt: Identifier });\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 let [list, chunkSize] = [attributesList, 2];\n list = [...Array(Math.ceil(list.length / chunkSize))]\n .map((_) => list.splice(0, chunkSize))\n .map(([key, value]) => {\n let attrKey = key;\n if (key.startsWith('\"') || key.startsWith(\"'\")) {\n attrKey = `\"$${key.slice(1, -1)}\"`;\n } else {\n attrKey = `[\"$\"+${key}]`;\n }\n return `${attrKey}:${value ? value : 'null'}`;\n });\n attributes = ',' + list.join(',');\n } else {\n return value;\n }\n return `{_:${value}${attributes}}`;\n },\n split: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('split() requires at least 1 argument (string)');\n }\n const [str, separator, limit] = args;\n const sep = separator !== undefined ? separator : '\"\"';\n const lim = limit !== undefined ? `, ${limit}` : '';\n return `String(${str}).split(${sep}${lim})`;\n },\n to_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('to_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${val})))) : Buffer.from(String(${val}), 'utf-8').toString('base64'))`;\n },\n from_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('from_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${val})))) : Buffer.from(String(${val}), 'base64').toString('utf-8'))`;\n },\n aslist: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('aslist() requires exactly 1 argument');\n }\n const [val] = args;\n return `(Array.isArray(${val}) ? ${val} : (${val} == null ? [] : [${val}]))`;\n },\n 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","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\n\nconst BaseCstVisitor = parser.getBaseCstVisitorConstructor();\n\nexport class MorphCompiler extends (BaseCstVisitor as any) {\n // Context for modify directive - determines whether to read from 'source' or 'target'\n private readFrom: 'source' | 'target' = 'source';\n\n // 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 constructor() {\n super();\n this.validateVisitor();\n }\n\n /**\n * Visit with a temporary context change\n */\n private visitWithContext(node: any, context: { readFrom: 'source' | 'target' }) {\n const previousReadFrom = this.readFrom;\n this.readFrom = context.readFrom;\n const result = this.visit(node);\n this.readFrom = previousReadFrom;\n return result;\n }\n\n query(ctx: any) {\n const 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 };\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 return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n return ctx.NumericLiteral[0].image;\n }\n if (ctx.True) return 'true';\n if (ctx.False) return 'false';\n if (ctx.Null) return 'null';\n }\n\n action(ctx: any) {\n if (ctx.setRule) {\n return this.visit(ctx.setRule);\n }\n if (ctx.modifyRule) {\n return this.visit(ctx.modifyRule);\n }\n if (ctx.sectionRule) {\n return this.visit(ctx.sectionRule);\n }\n if (ctx.cloneRule) {\n return this.visit(ctx.cloneRule);\n }\n if (ctx.ifAction) {\n return this.visit(ctx.ifAction);\n }\n if (ctx.deleteRule) {\n return this.visit(ctx.deleteRule);\n }\n if (ctx.defineRule) {\n return this.visit(ctx.defineRule);\n }\n if (ctx.returnRule) {\n return this.visit(ctx.returnRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\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 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 return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('target', left, true)} = ${right};`; // LHS = true\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n return `${this.genAccess('target', left, true)} = ${right};`; // LHS = true\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n const right = this.visit(ctx.right);\n return `${this.genAccess('source', left, 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) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} || ${rhs}`;\n }\n }\n return result;\n }\n\n logicalAnd(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} && ${rhs}`;\n }\n }\n return result;\n }\n\n comparison(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n const op = ctx.ops[0].image;\n const rhs = this.visit(ctx.rhs[0]);\n result = `${result} ${op} ${rhs}`;\n }\n return result;\n }\n\n addition(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n unaryExpression(ctx: any) {\n const atomic = this.visit(ctx.atomic);\n if (ctx.sign) {\n const op = ctx.sign[0].image;\n return `${op}${atomic}`;\n }\n return atomic;\n }\n\n atomic(ctx: any) {\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n if (ctx.functionCall) {\n return this.visit(ctx.functionCall);\n }\n if (ctx.anyIdentifier) {\n const id = this.visit(ctx.anyIdentifier);\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n // 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 return id.name;\n }\n if (id.name.startsWith('target.') || id.name.startsWith('target[')) {\n // User explicitly specified target context - don't prepend\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 return `_rootSource${id.name.substring(7)}`;\n }\n if (\n id.name === '_target' ||\n id.name.startsWith('_target.') ||\n id.name.startsWith('_target[')\n ) {\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n // No explicit context - use current readFrom context\n return this.genAccess(this.readFrom, id);\n }\n if (ctx.expression) {\n return `(${this.visit(ctx.expression)})`;\n }\n }\n\n functionCall(ctx: any) {\n const originalName = ctx.name[0].image;\n const name = (\n originalName.startsWith('`') ? originalName.slice(1, -1) : originalName\n ).toLowerCase();\n const args = ctx.args ? ctx.args.map((a: any) => this.visit(a)) : [];\n\n const handler = functionRegistry[name];\n if (handler) {\n return handler(args);\n }\n\n throw new Error(`Unknown function: ${originalName}`);\n }\n\n sectionRule(ctx: any) {\n const sectionId = this.visit(ctx.sectionName);\n const sectionName = sectionId.name;\n const sectionAccess = this.genAccess('target', sectionId, true); // LHS = true (being assigned to)\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n const followPath = followPathId.name === 'parent' ? '' : '.' + followPathId.name;\n // Note: followPath currently only supports simple paths or 'parent'.\n // If it's a quoted identifier, genAccess would return target[\"name\"].\n // But section handling uses '.' + followPath.\n // I should probably use genAccess here too for consistency, but it needs to be relative to 'source'.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\n\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 const regularActions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\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\nexport { MorphQLCache };\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n}\n\nexport async function compile<Source = any, Target = any>(\n queryString: string,\n options?: CompileOptions\n): Promise<MorphEngine<Source, Target>> {\n // 1. Check Cache\n if (options?.cache) {\n const cachedCode = await options.cache.retrieve(queryString);\n if (cachedCode) {\n return createEngine<Source, Target>(cachedCode);\n }\n }\n\n // 2. Compile if miss\n const lexResult = MorphLexer.tokenize(queryString);\n\n if (lexResult.errors.length > 0) {\n throw new Error(`Lexing errors: ${lexResult.errors[0].message}`);\n }\n\n parser.input = lexResult.tokens;\n const cst = parser.query();\n\n if (parser.errors.length > 0) {\n throw new Error(`Parsing errors: ${parser.errors[0].message}`);\n }\n\n const { code: rawCode } = compiler.visit(cst);\n\n const code = beautify.js(rawCode, {\n indent_size: 2,\n space_in_empty_paren: true,\n end_with_newline: true,\n });\n\n // 3. Save to Cache\n if (options?.cache) {\n await options.cache.save(queryString, code);\n }\n\n return createEngine<Source, Target>(code);\n}\n\nfunction createEngine<Source, Target>(code: string): MorphEngine<Source, Target> {\n // Create the base transformation function\n const factory = new Function(code);\n const transform = factory() as (source: any, env: any) => any;\n\n // Environment with adapter lookups\n const env = {\n parse: (format: string, content: string, options?: any) => {\n return getAdapter(format).parse(content, options);\n },\n serialize: (format: string, data: any, options?: any) => {\n return getAdapter(format).serialize(data, options);\n },\n };\n\n // Return the format-aware engine\n const engine = ((input: Source) => {\n return transform(input, env) as Target;\n }) as MorphEngine<Source, Target>;\n\n engine.code = code;\n return engine;\n}\n\n/**\n * Tagged template helper for MorphQL queries.\n * Enables syntax highlighting in VSCode and provides a cleaner API.\n *\n * @example\n * ```typescript\n * const query = morphQL`\n * from json to xml\n * transform\n * set fullName = firstName + \" \" + lastName\n * `;\n * const engine = await compile(query);\n * ```\n */\nexport function morphQL(strings: TemplateStringsArray, ...values: any[]): string {\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n}\n\n/**\n * Legacy greet function for compatibility during migration.\n */\nexport function greet(name: string): string {\n return `Hello, ${name}! The Morph engine is ready.`;\n}\n"]}
|