@morphql/core 0.1.7 → 0.1.9
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 +30 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +30 -30
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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","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"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/mapping-tracker.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/index.ts"],"names":["WhiteSpace","createToken","Lexer","LineComment","BlockComment","Identifier","QuotedIdentifier","From","To","Transform","Set","Section","Multiple","Clone","Delete","Define","Modify","If","Else","True","False","Null","Return","Unsafe","EqualsEquals","EqualsEqualsEquals","NotEquals","NotEqualsEquals","LessThanOrEqual","GreaterThanOrEqual","LessThan","GreaterThan","And","Or","Not","Equals","Plus","Minus","Times","Divide","LParen","RParen","Comma","StringLiteral","NumericLiteral","allTokens","MorphLexer","MorphParser","CstParser","parser","functionRegistry","args","str","start","length","condition","trueValue","falseValue","search","replacement","value","attributesList","attributes","list","key","attrKey","separator","limit","sep","lim","val","MappingTracker","path","type","isTarget","node","fields","target","f","name","followPath","isMultiple","newTargetNode","newSourceNode","sourceNode","parentSource","followNode","targetPropertiesNode","parts","current","i","part","newNode","defaultType","BaseCstVisitor","MorphCompiler","context","previousReadFrom","result","ctx","sourceType","targetType","isUnsafe","actions","a","sourceTypeName","targetTypeName","sourceOptions","targetOptions","hasReturn","action","id","options","p","image","num","base","isLHS","optionalChain","field","thenActions","elseBlock","identifiers","left","right","expr","scope","rhs","op","lhs","lhsType","hasString","allNumbers","atomic","originalName","handler","sectionId","sectionName","sectionAccess","followPathId","sourceAccess","subSourceType","subTargetType","hasTransform","subSourceOptions","subTargetOptions","regularActions","regularResult","compiler","adapters","registerAdapter","adapter","getAdapter","indexToLetter","index","letter","content","data","xmlBuilder","XMLBuilder","XMLParser","rootTag","delimiter","Papa","row","obj","csvData","k","b","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","analysis","code","beautify","engine","transform","env","format","input","morphQL","strings","values","acc","greet"],"mappings":"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","file":"index.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 const chunkSize = 2;\n let list = [...attributesList];\n list = [...Array(Math.ceil(list.length / chunkSize))]\n .map(() => list.splice(0, chunkSize))\n .map(([key, value]) => {\n let attrKey = key;\n if (key.startsWith('\"') || key.startsWith(\"'\")) {\n attrKey = `\"$${key.slice(1, -1)}\"`;\n } else {\n attrKey = `[\"$\"+${key}]`;\n }\n return `${attrKey}:${value ? value : 'null'}`;\n });\n attributes = ',' + list.join(',');\n } else {\n return value;\n }\n return `{_:${value}${attributes}}`;\n },\n split: (args: string[]) => {\n if (args.length < 1) {\n throw new Error('split() requires at least 1 argument (string)');\n }\n const [str, separator, limit] = args;\n const sep = separator !== undefined ? separator : '\"\"';\n const lim = limit !== undefined ? `, ${limit}` : '';\n return `String(${str}).split(${sep}${lim})`;\n },\n to_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('to_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof btoa === 'function' ? btoa(unescape(encodeURIComponent(String(${val})))) : Buffer.from(String(${val}), 'utf-8').toString('base64'))`;\n },\n from_base64: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('from_base64() requires exactly 1 argument (string)');\n }\n const [val] = args;\n return `(typeof atob === 'function' ? decodeURIComponent(escape(atob(String(${val})))) : Buffer.from(String(${val}), 'base64').toString('utf-8'))`;\n },\n aslist: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('aslist() requires exactly 1 argument');\n }\n const [val] = args;\n return `(Array.isArray(${val}) ? ${val} : (${val} == null ? [] : [${val}]))`;\n },\n spreadsheet: (args: string[]) => {\n if (args.length !== 1) {\n throw new Error('spreadsheet() requires exactly 1 argument');\n }\n const [val] = args;\n return `((data)=>{\n const spreadsheet = Array.isArray(data) ? data : (data == null ? [] : [data]);\n const out = [];\n const titles = [];\n let keys = [];\n for (let i = 0; i < spreadsheet.length; i++) {\n const line = spreadsheet[i];\n if (!line || typeof line !== 'object') continue;\n if (i === 0) {\n keys = Object.keys(line);\n for (const k of keys) titles.push(line[k]);\n } else {\n const tempLine = {};\n for (let j = 0; j < keys.length; j++) {\n tempLine[titles[j]] = line[keys[j]];\n }\n out.push(tempLine);\n }\n }\n return out;\n })(${val})`;\n },\n};\n","export type MorphType = 'string' | 'number' | 'boolean' | 'null' | 'object' | 'array' | 'any';\n\nexport interface SchemaNode {\n type: MorphType;\n properties?: Record<string, SchemaNode>;\n items?: SchemaNode;\n isOpen?: boolean;\n}\n\nexport interface AnalyzeResult {\n source: SchemaNode;\n target: SchemaNode;\n sourceFormat?: string;\n targetFormat?: string;\n}\n\nexport class MappingTracker {\n public sourceRoot: SchemaNode = { type: 'object', properties: {} };\n public targetRoot: SchemaNode = { type: 'object', properties: {} };\n\n private sourceStack: SchemaNode[] = [this.sourceRoot];\n private targetStack: SchemaNode[] = [this.targetRoot];\n\n private getCurrentSource() {\n return this.sourceStack[this.sourceStack.length - 1];\n }\n private getCurrentTarget() {\n return this.targetStack[this.targetStack.length - 1];\n }\n\n public recordAccess(path: string, type: MorphType = 'any', isTarget: boolean = false) {\n const node = isTarget ? this.getCurrentTarget() : this.getCurrentSource();\n this.setInNode(node, path, type);\n }\n\n public recordAssignment(path: string, type: MorphType = 'any') {\n this.setInNode(this.getCurrentTarget(), path, type);\n }\n\n public recordClone(fields?: string[]) {\n const target = this.getCurrentTarget();\n if (fields) {\n fields.forEach((f) => {\n this.setInNode(this.getCurrentSource(), f, 'any');\n this.setInNode(target, f, 'any');\n });\n } else {\n target.isOpen = true;\n }\n }\n\n public recordDelete(path: string) {\n const target = this.getCurrentTarget();\n this.deleteInNode(target, path);\n }\n\n public pushSection(name: string, followPath: string | 'parent', isMultiple: boolean) {\n // 1. Mark followPath in current source\n if (followPath !== 'parent') {\n this.setInNode(this.getCurrentSource(), followPath, isMultiple ? 'array' : 'object');\n }\n\n // 2. Prepare sub-nodes\n const newTargetNode: SchemaNode = { type: isMultiple ? 'array' : 'object' };\n if (isMultiple) {\n newTargetNode.items = { type: 'object', properties: {} };\n } else {\n newTargetNode.properties = {};\n }\n\n const newSourceNode: SchemaNode = { type: 'object', properties: {} };\n\n // 3. Attach to current target\n this.setInNodeExplicit(this.getCurrentTarget(), name, newTargetNode);\n\n // 4. Update stacks\n this.targetStack.push(isMultiple ? newTargetNode.items! : newTargetNode);\n this.sourceStack.push(newSourceNode);\n }\n\n public popSection(followPath: string | 'parent', isMultiple: boolean) {\n const sourceNode = this.sourceStack.pop()!;\n this.targetStack.pop();\n const parentSource = this.getCurrentSource();\n\n if (followPath !== 'parent') {\n const followNode = this.getOrSetNode(\n parentSource,\n followPath,\n isMultiple ? 'array' : 'object'\n );\n const targetPropertiesNode = isMultiple ? followNode.items : followNode;\n if (targetPropertiesNode) {\n if (!targetPropertiesNode.properties) targetPropertiesNode.properties = {};\n Object.assign(targetPropertiesNode.properties, sourceNode.properties || {});\n }\n } else {\n if (!parentSource.properties) parentSource.properties = {};\n Object.assign(parentSource.properties, sourceNode.properties || {});\n }\n }\n\n private setInNode(node: SchemaNode, path: string, type: MorphType) {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!current.properties) current.properties = {};\n if (i === parts.length - 1) {\n if (!current.properties[part]) {\n current.properties[part] = { type };\n if (type === 'object') {\n current.properties[part].properties = {};\n } else if (type === 'array') {\n current.properties[part].items = { type: 'object', properties: {} };\n }\n }\n } else {\n if (!current.properties[part])\n current.properties[part] = { type: 'object', properties: {} };\n current = current.properties[part];\n }\n }\n }\n\n private setInNodeExplicit(node: SchemaNode, path: string, newNode: SchemaNode) {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!current.properties) current.properties = {};\n if (i === parts.length - 1) {\n current.properties[part] = newNode;\n } else {\n if (!current.properties[part])\n current.properties[part] = { type: 'object', properties: {} };\n current = current.properties[part];\n }\n }\n }\n\n private deleteInNode(node: SchemaNode, path: string) {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n if (!current.properties) return;\n if (i === parts.length - 1) {\n delete current.properties[parts[i]];\n } else {\n current = current.properties[parts[i]];\n if (!current) return;\n }\n }\n }\n\n private getOrSetNode(node: SchemaNode, path: string, defaultType: MorphType): SchemaNode {\n const parts = path.split('.');\n let current = node;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n const isLast = i === parts.length - 1;\n const type = isLast ? defaultType : 'object';\n\n if (!current.properties) current.properties = {};\n if (!current.properties[part]) {\n current.properties[part] = { type };\n if (type === 'object') {\n current.properties[part].properties = {};\n } else if (type === 'array') {\n current.properties[part].items = { type: 'object', properties: {} };\n }\n }\n current = current.properties[part];\n }\n return current;\n }\n\n public getResult(): AnalyzeResult {\n return {\n source: this.sourceRoot,\n target: this.targetRoot,\n };\n }\n}\n","import { parser } from './parser.js';\nimport { functionRegistry } from './functions.js';\nimport { MappingTracker, MorphType } from './mapping-tracker.js';\n\nconst BaseCstVisitor = parser.getBaseCstVisitorConstructor();\n\nexport class MorphCompiler extends (BaseCstVisitor as any) {\n // Context for modify directive - determines whether to read from 'source' or 'target'\n private readFrom: 'source' | 'target' = 'source';\n\n // Scope stack to track serialization context\n private scopeStack: Array<{ format: string; options: any; isSerializationScope: boolean }> = [];\n\n // Safe mode - use optional chaining for property access\n public safeMode: boolean = true;\n\n // Analysis mode\n public isAnalyzing: boolean = false;\n public tracker: MappingTracker = new MappingTracker();\n public lastInferredType: MorphType = 'any';\n\n constructor() {\n super();\n this.validateVisitor();\n }\n\n /**\n * Visit with a temporary context change\n */\n private visitWithContext(node: any, context: { readFrom: 'source' | 'target' }) {\n const previousReadFrom = this.readFrom;\n this.readFrom = context.readFrom;\n const result = this.visit(node);\n this.readFrom = previousReadFrom;\n return result;\n }\n\n query(ctx: any) {\n if (this.isAnalyzing) {\n this.tracker = new MappingTracker();\n }\n const sourceType = this.visit(ctx.sourceType);\n const targetType = this.visit(ctx.targetType);\n\n // Check if unsafe mode is enabled in the query\n const isUnsafe = !!ctx.Unsafe;\n this.safeMode = !isUnsafe;\n\n this.scopeStack.push({\n format: targetType.name,\n options: targetType.options,\n isSerializationScope: true,\n });\n\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n this.scopeStack.pop();\n\n if (!ctx.Transform) {\n actions.push('Object.assign(target, source);');\n }\n\n // Helper to serialize types for generated code\n const sourceTypeName = sourceType.name;\n const targetTypeName = targetType.name;\n\n const sourceOptions = JSON.stringify(sourceType.options);\n const targetOptions = JSON.stringify(targetType.options);\n\n // Check if any action contains a return statement\n const hasReturn = actions.some(\n (action: any) => typeof action === 'string' && action.trim().startsWith('return ')\n );\n\n const code = `\n return function(input, env) {\n // 1. Parse Input\n const source = env.parse('${sourceTypeName}', input, ${sourceOptions});\n const _rootSource = source;\n \n // 2. Transform\n const target = {};\n const _rootTarget = target;\n ${actions.join('\\n ')}\n\n // 3. Serialize Output\n ${hasReturn ? '' : `return env.serialize('${targetTypeName}', target, ${targetOptions});`}\n }\n `;\n\n return {\n code,\n sourceType,\n targetType,\n analysis: this.isAnalyzing ? this.tracker.getResult() : undefined,\n };\n }\n\n typeFormat(ctx: any) {\n const id = this.visit(ctx.name);\n const options: any = { params: [] };\n if (ctx.params) {\n ctx.params.forEach((p: any) => {\n const val = this.visit(p);\n if (typeof val === 'object' && 'key' in val) {\n options[val.key] = this.parseLiteral(val.value);\n } else {\n // Positional parameter - collect into params array\n options.params.push(this.parseLiteral(val));\n }\n });\n }\n return { name: id.name, options };\n }\n\n typeFormatParameter(ctx: any) {\n if (ctx.namedParameter) {\n return this.visit(ctx.namedParameter);\n }\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n }\n\n namedParameter(ctx: any) {\n const key = this.visit(ctx.key).name;\n const value = this.visit(ctx.value);\n return { key, value };\n }\n\n private parseLiteral(image: string) {\n if (image === 'true') return true;\n if (image === 'false') return false;\n if (image === 'null') return null;\n if (\n (image.startsWith('\"') && image.endsWith('\"')) ||\n (image.startsWith(\"'\") && image.endsWith(\"'\"))\n ) {\n return image.slice(1, -1);\n }\n const num = Number(image);\n if (!isNaN(num)) {\n return num;\n }\n return image;\n }\n\n private genAccess(base: string, id: { name: string; quoted: boolean }, isLHS: boolean = false) {\n // Don't use optional chaining on left-hand side of assignments\n const optionalChain = this.safeMode && !isLHS ? '?.' : '.';\n if (id.quoted || (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))) {\n return `${base}${this.safeMode && !isLHS ? '?.' : ''}[\"${id.name}\"]`;\n }\n return `${base}${optionalChain}${id.name}`;\n }\n\n anyIdentifier(ctx: any) {\n if (ctx.Identifier) {\n return { name: ctx.Identifier[0].image, quoted: false };\n }\n if (ctx.QuotedIdentifier) {\n // Remove backticks and unescape\n const name = ctx.QuotedIdentifier[0].image.slice(1, -1).replace(/\\\\(.)/g, '$1');\n return { name, quoted: true };\n }\n }\n\n literal(ctx: any) {\n if (ctx.StringLiteral) {\n this.lastInferredType = 'string';\n return ctx.StringLiteral[0].image;\n }\n if (ctx.NumericLiteral) {\n this.lastInferredType = 'number';\n return ctx.NumericLiteral[0].image;\n }\n if (ctx.True) {\n this.lastInferredType = 'boolean';\n return 'true';\n }\n if (ctx.False) {\n this.lastInferredType = 'boolean';\n return 'false';\n }\n if (ctx.Null) {\n this.lastInferredType = 'null';\n return 'null';\n }\n }\n\n action(ctx: any) {\n if (ctx.setRule) {\n return this.visit(ctx.setRule);\n }\n if (ctx.modifyRule) {\n return this.visit(ctx.modifyRule);\n }\n if (ctx.sectionRule) {\n return this.visit(ctx.sectionRule);\n }\n if (ctx.cloneRule) {\n return this.visit(ctx.cloneRule);\n }\n if (ctx.ifAction) {\n return this.visit(ctx.ifAction);\n }\n if (ctx.deleteRule) {\n return this.visit(ctx.deleteRule);\n }\n if (ctx.defineRule) {\n return this.visit(ctx.defineRule);\n }\n if (ctx.returnRule) {\n return this.visit(ctx.returnRule);\n }\n }\n\n deleteRule(ctx: any) {\n const field = this.visit(ctx.field);\n if (this.isAnalyzing) {\n this.tracker.recordDelete(field.name);\n }\n return `delete ${this.genAccess('target', field, true)};`; // LHS = true\n }\n\n ifAction(ctx: any) {\n const condition = this.visit(ctx.condition);\n const thenActions = ctx.thenActions\n ? ctx.thenActions.map((a: any) => this.visit(a)).join('\\n')\n : '';\n const elseBlock = ctx.elseActions\n ? `else { ${ctx.elseActions.map((a: any) => this.visit(a)).join('\\n')} }`\n : '';\n\n return `if (${condition}) {\n ${thenActions}\n } ${elseBlock}`;\n }\n\n cloneRule(ctx: any) {\n if (ctx.fields) {\n const identifiers = ctx.fields.map((f: any) => this.visit(f));\n if (this.isAnalyzing) {\n this.tracker.recordClone(identifiers.map((id: any) => id.name));\n }\n return identifiers\n .map(\n (id: any) => `${this.genAccess('target', id, true)} = ${this.genAccess('source', id)};`\n ) // LHS = true for target\n .join('\\n ');\n }\n if (this.isAnalyzing) {\n this.tracker.recordClone();\n }\n return `Object.assign(target, source);`;\n }\n\n setRule(ctx: any) {\n const left = this.visit(ctx.left);\n this.lastInferredType = 'any';\n const right = this.visit(ctx.right);\n if (this.isAnalyzing) {\n this.tracker.recordAssignment(left.name, this.lastInferredType);\n }\n return `${this.genAccess('target', left, true)} = ${right};`;\n }\n\n modifyRule(ctx: any) {\n const left = this.visit(ctx.left);\n this.lastInferredType = 'any';\n const right = this.visitWithContext(ctx.right, { readFrom: 'target' });\n if (this.isAnalyzing) {\n this.tracker.recordAssignment(left.name, this.lastInferredType);\n }\n return `${this.genAccess('target', left, true)} = ${right};`; // LHS = true\n }\n\n defineRule(ctx: any) {\n const left = this.visit(ctx.left);\n this.lastInferredType = 'any';\n const right = this.visit(ctx.right);\n if (this.isAnalyzing) {\n this.tracker.recordAssignment(left.name, this.lastInferredType); // This tracks internal assignments? Actually define is for source.\n }\n return `${this.genAccess('source', left, true)} = ${right};`; // LHS = true\n }\n\n returnRule(ctx: any) {\n const expr = this.visitWithContext(ctx.expr, { readFrom: 'target' });\n const scope = this.scopeStack[this.scopeStack.length - 1];\n\n if (scope && scope.isSerializationScope) {\n const options = JSON.stringify(scope.options);\n return `return env.serialize('${scope.format}', ${expr}, ${options});`;\n }\n\n return `return ${expr};`;\n }\n\n expression(ctx: any) {\n return this.visit(ctx.logicalOr);\n }\n\n logicalOr(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs && ctx.rhs.length > 0) {\n this.lastInferredType = 'boolean';\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} || ${rhs}`;\n }\n }\n return result;\n }\n\n logicalAnd(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs && ctx.rhs.length > 0) {\n this.lastInferredType = 'boolean';\n for (let i = 0; i < ctx.rhs.length; i++) {\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} && ${rhs}`;\n }\n }\n return result;\n }\n\n comparison(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs) {\n this.lastInferredType = 'boolean';\n const op = ctx.ops[0].image;\n const rhs = this.visit(ctx.rhs[0]);\n result = `${result} ${op} ${rhs}`;\n }\n return result;\n }\n\n addition(ctx: any) {\n const lhs = this.visit(ctx.lhs);\n const lhsType = this.lastInferredType;\n let result = lhs;\n if (ctx.rhs && ctx.rhs.length > 0) {\n // If any operand is a string, the result is likely a string (concatenation)\n let hasString = lhsType === 'string';\n let allNumbers = lhsType === 'number';\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n if (this.lastInferredType === 'string') hasString = true;\n if (this.lastInferredType !== 'number') allNumbers = false;\n result = `${result} ${op} ${rhs}`;\n }\n if (hasString) this.lastInferredType = 'string';\n else if (allNumbers) this.lastInferredType = 'number';\n else this.lastInferredType = 'any';\n } else {\n this.lastInferredType = lhsType;\n }\n return result;\n }\n\n multiplication(ctx: any) {\n let result = this.visit(ctx.lhs);\n if (ctx.rhs && ctx.rhs.length > 0) {\n this.lastInferredType = 'number';\n for (let i = 0; i < ctx.rhs.length; i++) {\n const op = ctx.ops[i].image;\n const rhs = this.visit(ctx.rhs[i]);\n result = `${result} ${op} ${rhs}`;\n }\n }\n return result;\n }\n\n unaryExpression(ctx: any) {\n const atomic = this.visit(ctx.atomic);\n if (ctx.sign) {\n const op = ctx.sign[0].image;\n if (op === '!') this.lastInferredType = 'boolean';\n if (op === '-') this.lastInferredType = 'number';\n return `${op}${atomic}`;\n }\n return atomic;\n }\n\n atomic(ctx: any) {\n if (ctx.literal) {\n return this.visit(ctx.literal);\n }\n if (ctx.functionCall) {\n return this.visit(ctx.functionCall);\n }\n if (ctx.anyIdentifier) {\n this.lastInferredType = 'any';\n const id = this.visit(ctx.anyIdentifier);\n\n if (['true', 'false', 'null'].includes(id.name) && !id.quoted) {\n return id.name;\n }\n if (!id.quoted) {\n // Check for explicit context prefixes (source.field or target.field)\n if (id.name.startsWith('source.') || id.name.startsWith('source[')) {\n // User explicitly specified source context - don't prepend\n if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7), 'any', false);\n return id.name;\n }\n if (id.name.startsWith('target.') || id.name.startsWith('target[')) {\n // User explicitly specified target context - don't prepend\n if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7), 'any', true);\n return id.name;\n }\n\n // Bare 'source' or 'target' keywords\n if (id.name === 'target') {\n return 'target';\n }\n if (id.name === 'source') {\n return 'source';\n }\n\n // Root source/target access\n if (\n id.name === '_source' ||\n id.name.startsWith('_source.') ||\n id.name.startsWith('_source[')\n ) {\n if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7) || '', 'any', false); // Simplified root tracking\n return `_rootSource${id.name.substring(7)}`;\n }\n if (\n id.name === '_target' ||\n id.name.startsWith('_target.') ||\n id.name.startsWith('_target[')\n ) {\n if (this.isAnalyzing) this.tracker.recordAccess(id.name.substring(7) || '', 'any', true);\n return `_rootTarget${id.name.substring(7)}`;\n }\n }\n // No explicit context - use current readFrom context\n if (this.isAnalyzing) {\n this.tracker.recordAccess(id.name, 'any', this.readFrom === 'target');\n }\n return this.genAccess(this.readFrom, id);\n }\n if (ctx.expression) {\n return `(${this.visit(ctx.expression)})`;\n }\n }\n\n functionCall(ctx: any) {\n const originalName = ctx.name[0].image;\n const name = (\n originalName.startsWith('`') ? originalName.slice(1, -1) : originalName\n ).toLowerCase();\n const args = ctx.args ? ctx.args.map((a: any) => this.visit(a)) : [];\n\n const handler = functionRegistry[name];\n if (handler) {\n // Inferred types for built-in functions\n if (\n [\n 'substring',\n 'text',\n 'replace',\n 'uppercase',\n 'lowercase',\n 'to_base64',\n 'from_base64',\n ].includes(name)\n ) {\n this.lastInferredType = 'string';\n } else if (['number', 'extractnumber'].includes(name)) {\n this.lastInferredType = 'number';\n } else if (['aslist'].includes(name)) {\n this.lastInferredType = 'array';\n } else if (name === 'asobject') {\n this.lastInferredType = 'object';\n }\n\n return handler(args);\n }\n\n throw new Error(`Unknown function: ${originalName}`);\n }\n\n sectionRule(ctx: any) {\n const sectionId = this.visit(ctx.sectionName);\n const sectionName = sectionId.name;\n const sectionAccess = this.genAccess('target', sectionId, true); // LHS = true (being assigned to)\n\n const followPathId = ctx.followPath ? this.visit(ctx.followPath) : sectionId;\n // Note: followPathId is used below in sourceAccess and tracker calls.\n const sourceAccess =\n followPathId.name === 'parent' ? 'source' : this.genAccess('source', followPathId);\n\n const isMultiple = !!ctx.Multiple;\n\n // Check if this is a subquery section\n const isSubquery = !!ctx.subqueryFrom;\n\n if (isSubquery) {\n const subSourceType = this.visit(ctx.subquerySourceType);\n const subTargetType = this.visit(ctx.subqueryTargetType);\n\n this.scopeStack.push({\n format: subTargetType.name,\n options: subTargetType.options,\n isSerializationScope: true,\n });\n\n const hasTransform = !!ctx.subqueryTransform;\n const actions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (!hasTransform) {\n // Pure format conversion - copy all fields\n actions.push('Object.assign(target, source);');\n }\n\n const subSourceOptions = JSON.stringify(subSourceType.options);\n const subTargetOptions = JSON.stringify(subTargetType.options);\n\n let result = '';\n if (isMultiple) {\n result = `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const subSource = env.parse('${subSourceType.name}', item, ${subSourceOptions});\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target, ${subTargetOptions});\n });\n }\n `;\n } else {\n result = `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const subSource = env.parse('${subSourceType.name}', innerSource, ${subSourceOptions});\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target, ${subTargetOptions});\n })(${sourceAccess});\n }\n `;\n }\n\n this.scopeStack.pop();\n return result;\n }\n\n // Regular section handling\n this.scopeStack.push({\n format: 'object',\n options: {},\n isSerializationScope: false,\n });\n\n if (this.isAnalyzing) {\n this.tracker.pushSection(sectionName, followPathId.name, isMultiple);\n }\n\n const regularActions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (this.isAnalyzing) {\n this.tracker.popSection(followPathId.name, isMultiple);\n }\n\n let regularResult = '';\n if (isMultiple) {\n regularResult = `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}.map(item => {\n const source = item;\n const target = {};\n ${regularActions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n regularResult = `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${regularActions.join('\\n ')}\n return target;\n })(${sourceAccess});\n }\n `;\n }\n\n this.scopeStack.pop();\n return regularResult;\n }\n}\n\nexport const compiler = new MorphCompiler();\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\nimport Papa from 'papaparse';\n\nexport interface DataAdapter {\n parse(content: string, options?: any): any;\n serialize(data: any, options?: any): string;\n}\n\nconst adapters: Record<string, DataAdapter> = {};\n\nexport function registerAdapter(name: string, adapter: DataAdapter) {\n adapters[name.toLowerCase()] = adapter;\n}\n\nexport function getAdapter(name: string): DataAdapter {\n const adapter = adapters[name.toLowerCase()];\n if (!adapter) {\n throw new Error(`No adapter found for format: ${name}`);\n }\n return adapter;\n}\n\n// Helpers\nfunction indexToLetter(index: number): string {\n let letter = '';\n while (index >= 0) {\n letter = String.fromCharCode((index % 26) + 65) + letter;\n index = Math.floor(index / 26) - 1;\n }\n return letter;\n}\n\n// Default JSON Adapter\n\nregisterAdapter('json', {\n parse: (content) => {\n if (typeof content !== 'string') return content;\n return JSON.parse(content);\n },\n serialize: (data) => JSON.stringify(data, null, 2),\n});\n\n// Default XML Adapter\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n});\n\nregisterAdapter('xml', {\n parse: (content, options) => {\n if (typeof content !== 'string') return content;\n const parser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n ...options,\n });\n return parser.parse(content);\n },\n serialize: (data, options) => {\n const rootTag = options?.rootGenerated ?? options?.params?.[0] ?? 'root';\n const builder = options\n ? new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: '$',\n textNodeName: '_',\n format: true,\n ...options,\n })\n : xmlBuilder;\n return builder.build({ [rootTag]: data });\n },\n});\n\n// CSV Adapter\nregisterAdapter('csv', {\n parse: (content, options) => {\n if (typeof content !== 'string') return content;\n const delimiter = options?.delimiter ?? options?.params?.[0] ?? ',';\n const parsed = Papa.parse<any[]>(content, {\n delimiter,\n skipEmptyLines: true,\n ...options,\n }) as any;\n\n const rows = parsed.data.map((row: any) => {\n const obj: any = {};\n if (Array.isArray(row)) {\n row.forEach((val, i) => {\n obj[indexToLetter(i)] = val;\n });\n }\n return obj;\n });\n\n return { rows };\n },\n serialize: (data, options) => {\n if (!data || !Array.isArray(data.rows)) return '';\n const delimiter = options?.delimiter ?? options?.params?.[0] ?? ',';\n\n const csvData = data.rows.map((row: any) => {\n // Sort keys to ensure correct column order (A, B, C... Z, AA, AB...)\n const sortedKeys = Object.keys(row)\n .filter((k) => /^[A-Z]+$/.test(k))\n .sort((a, b) => {\n if (a.length !== b.length) return a.length - b.length;\n return a.localeCompare(b);\n });\n return sortedKeys.map((k) => row[k]);\n });\n\n return Papa.unparse(csvData, {\n delimiter,\n ...options,\n });\n },\n});\n\n// Object Adapter (Identity)\nregisterAdapter('object', {\n parse: (content) => content, // Assumes input is already an object\n serialize: (data) => data, // Returns object directly\n});\n","import { MorphLexer } from './core/lexer.js';\nimport { parser } from './core/parser.js';\nimport { compiler } from './core/compiler.js';\nimport { getAdapter } from './runtime/adapters.js';\nimport { MorphQLCache } from './runtime/cache.js';\n\nimport { AnalyzeResult, SchemaNode, MorphType } from './core/mapping-tracker.js';\n\nexport { MorphQLCache, AnalyzeResult, SchemaNode, MorphType };\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n analysis?: AnalyzeResult;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n analyze?: boolean;\n}\n\nexport async function compile<Source = any, Target = any>(\n queryString: string,\n options?: CompileOptions\n): Promise<MorphEngine<Source, Target>> {\n // 1. Check Cache\n if (options?.cache) {\n const cachedCode = await options.cache.retrieve(queryString);\n if (cachedCode) {\n return createEngine<Source, Target>(cachedCode);\n }\n }\n\n // 2. Compile if miss\n const lexResult = MorphLexer.tokenize(queryString);\n\n if (lexResult.errors.length > 0) {\n throw new Error(`Lexing errors: ${lexResult.errors[0].message}`);\n }\n\n parser.input = lexResult.tokens;\n const cst = parser.query();\n\n if (parser.errors.length > 0) {\n throw new Error(`Parsing errors: ${parser.errors[0].message}`);\n }\n\n compiler.isAnalyzing = !!options?.analyze;\n const { code: rawCode, analysis, sourceType, targetType } = compiler.visit(cst);\n\n const code = beautify.js(rawCode, {\n indent_size: 2,\n space_in_empty_paren: true,\n end_with_newline: true,\n });\n\n // 3. Save to Cache\n if (options?.cache) {\n await options.cache.save(queryString, code);\n }\n\n const engine = createEngine<Source, Target>(code);\n if (analysis) {\n analysis.sourceFormat = sourceType.name;\n analysis.targetFormat = targetType.name;\n engine.analysis = analysis;\n }\n return engine;\n}\n\nfunction createEngine<Source, Target>(code: string): MorphEngine<Source, Target> {\n // Create the base transformation function\n const factory = new Function(code);\n const transform = factory() as (source: any, env: any) => any;\n\n // Environment with adapter lookups\n const env = {\n parse: (format: string, content: string, options?: any) => {\n return getAdapter(format).parse(content, options);\n },\n serialize: (format: string, data: any, options?: any) => {\n return getAdapter(format).serialize(data, options);\n },\n };\n\n // Return the format-aware engine\n const engine = ((input: Source) => {\n return transform(input, env) as Target;\n }) as MorphEngine<Source, Target>;\n\n engine.code = code;\n return engine;\n}\n\n/**\n * Tagged template helper for MorphQL queries.\n * Enables syntax highlighting in VSCode and provides a cleaner API.\n *\n * @example\n * ```typescript\n * const query = morphQL`\n * from json to xml\n * transform\n * set fullName = firstName + \" \" + lastName\n * `;\n * const engine = await compile(query);\n * ```\n */\nexport function morphQL(strings: TemplateStringsArray, ...values: any[]): string {\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n}\n\n/**\n * Legacy greet function for compatibility during migration.\n */\nexport function greet(name: string): string {\n return `Hello, ${name}! The Morph engine is ready.`;\n}\n"]}
|