@morphql/core 0.1.10 → 0.1.12

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/mapping-tracker.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/index.ts"],"names":["WhiteSpace","createToken","Lexer","LineComment","BlockComment","Identifier","QuotedIdentifier","From","To","Transform","Set","Section","Multiple","Clone","Delete","Define","Modify","If","Else","True","False","Null","Return","Unsafe","EqualsEquals","EqualsEqualsEquals","NotEquals","NotEqualsEquals","LessThanOrEqual","GreaterThanOrEqual","LessThan","GreaterThan","And","Or","Not","Equals","Plus","Minus","Times","Divide","LParen","RParen","Comma","StringLiteral","NumericLiteral","allTokens","MorphLexer","MorphParser","CstParser","parser","functionRegistry","args","str","start","length","condition","trueValue","falseValue","search","replacement","value","attributesList","attributes","list","key","attrKey","separator","limit","sep","lim","val","MappingTracker","path","type","isTarget","node","fields","target","f","name","followPath","isMultiple","newTargetNode","newSourceNode","sourceNode","parentSource","followNode","targetPropertiesNode","parts","current","i","part","newNode","defaultType","BaseCstVisitor","MorphCompiler","context","previousReadFrom","result","ctx","sourceType","targetType","isUnsafe","actions","a","sourceTypeName","targetTypeName","sourceOptions","targetOptions","hasReturn","action","id","options","p","image","num","base","isLHS","optionalChain","field","thenActions","elseBlock","identifiers","left","right","expr","scope","rhs","op","lhs","lhsType","hasString","allNumbers","atomic","originalName","handler","sectionId","sectionName","sectionAccess","followPathId","sourceAccess","subSourceType","subTargetType","hasTransform","subSourceOptions","subTargetOptions","regularActions","regularResult","compiler","adapters","registerAdapter","adapter","getAdapter","indexToLetter","index","letter","content","data","xmlBuilder","XMLBuilder","XMLParser","rootTag","delimiter","Papa","row","obj","csvData","k","b","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","analysis","code","beautify","engine","transform","env","format","input","morphQL","strings","values","acc","greet"],"mappings":"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","file":"index.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"]}
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","specs","spec","clean","parts","name","startStr","lengthStr","modifier","extraction","obj","fields","totalWidth","max","f","i","valueExpr","padExpr","MappingTracker","path","type","isTarget","node","target","followPath","isMultiple","newTargetNode","newSourceNode","sourceNode","parentSource","followNode","targetPropertiesNode","current","part","newNode","defaultType","BaseCstVisitor","MorphCompiler","context","previousReadFrom","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","result","rhs","op","lhs","lhsType","hasString","allNumbers","atomic","originalName","handler","sectionId","sectionName","sectionAccess","followPathId","sourceAccess","subSourceType","subTargetType","hasTransform","subSourceOptions","subTargetOptions","regularActions","compiler","adapters","registerAdapter","adapter","getAdapter","indexToLetter","index","letter","content","data","xmlBuilder","XMLBuilder","XMLParser","rootTag","delimiter","Papa","row","csvData","k","b","line","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 unpack: (args: string[]) => {\n if (args.length < 2) {\n throw new Error(\n 'unpack() requires at least 2 arguments (string, fieldSpec1, [fieldSpec2, ...])'\n );\n }\n const [str, ...specs] = args;\n const extractions = specs\n .map((spec) => {\n const clean = spec.replace(/^[\"']|[\"']$/g, '');\n const parts = clean.split(':');\n if (parts.length < 3) {\n throw new Error(\n `Invalid field spec for unpack(): ${clean}. Expected \"name:start:length[:modifier]\"`\n );\n }\n const [name, startStr, lengthStr, modifier] = parts;\n\n // Hardened validation for field name\n if (!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name)) {\n throw new Error(\n `Invalid field name in unpack() spec: \"${name}\". Must be a valid JavaScript identifier.`\n );\n }\n\n const start = parseInt(startStr, 10);\n const length = parseInt(lengthStr, 10);\n if (isNaN(start) || isNaN(length)) {\n throw new Error(`Invalid character positions in unpack() spec: ${clean}`);\n }\n\n let extraction = `String(${str} || \"\").substring(${start}, ${start} + ${length})`;\n if (modifier !== 'raw') {\n extraction = `(${extraction}).trim()`;\n }\n return `\"${name}\": ${extraction}`;\n })\n .join(', ');\n\n return `({ ${extractions} })`;\n },\n pack: (args: string[]) => {\n if (args.length < 2) {\n throw new Error(\n 'pack() requires at least 2 arguments (object, fieldSpec1, [fieldSpec2, ...])'\n );\n }\n const [obj, ...specs] = args;\n\n const fields = specs.map((spec) => {\n const clean = spec.replace(/^[\"']|[\"']$/g, '');\n const parts = clean.split(':');\n if (parts.length < 3) {\n throw new Error(\n `Invalid field spec for pack(): ${clean}. Expected \"name:start:length[:modifier]\"`\n );\n }\n const [name, startStr, lengthStr, modifier] = parts;\n\n // Hardened validation for field name\n if (!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name)) {\n throw new Error(\n `Invalid field name in pack() spec: \"${name}\". Must be a valid JavaScript identifier.`\n );\n }\n\n const start = parseInt(startStr, 10);\n const length = parseInt(lengthStr, 10);\n if (isNaN(start) || isNaN(length)) {\n throw new Error(`Invalid character positions in pack() spec: ${clean}`);\n }\n return { name, start, length, left: modifier === 'left' };\n });\n\n const totalWidth = fields.reduce((max, f) => Math.max(max, f.start + f.length), 0);\n\n return `((val) => {\n if (!val) return ' '.repeat(${totalWidth});\n let line = ' '.repeat(${totalWidth});\n ${fields\n .map((f, i) => {\n const valueExpr = `String(val[\"${f.name}\"] ?? \"\")`;\n const padExpr = f.left\n ? `(${valueExpr}).padStart(${f.length})`\n : `(${valueExpr}).padEnd(${f.length})`;\n return `\n const v${i} = (${padExpr}).substring(0, ${f.length});\n line = line.substring(0, ${f.start}) + v${i} + line.substring(${f.start} + ${f.length});`;\n })\n .join('')}\n return line;\n })(${obj})`;\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 * Resets the compiler state for a new compilation run.\n */\n private reset() {\n this.readFrom = 'source';\n this.scopeStack = [];\n this.tracker = new MappingTracker();\n this.lastInferredType = 'any';\n // safeMode and isAnalyzing are set by the caller or by query parser\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 try {\n return this.visit(node);\n } finally {\n this.readFrom = previousReadFrom;\n }\n }\n\n query(ctx: any) {\n this.reset();\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 try {\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 // 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 } finally {\n this.scopeStack.pop();\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 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 try {\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 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 } finally {\n this.scopeStack.pop();\n }\n }\n\n // Regular section handling\n this.scopeStack.push({\n format: 'object',\n options: {},\n isSerializationScope: false,\n });\n\n try {\n if (this.isAnalyzing) {\n this.tracker.pushSection(sectionName, followPathId.name, isMultiple);\n }\n\n try {\n const regularActions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (isMultiple) {\n return `\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 return `\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 } finally {\n if (this.isAnalyzing) {\n this.tracker.popSection(followPathId.name, isMultiple);\n }\n }\n } finally {\n this.scopeStack.pop();\n }\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\n// Plaintext Adapter\nregisterAdapter('plaintext', {\n parse: (content: string, options?: any) => {\n if (typeof content !== 'string') return content;\n const separator = options?.separator ?? options?.params?.[0] ?? /\\r?\\n/;\n return {\n rows: content.split(separator).filter((line) => line.length > 0),\n };\n },\n serialize: (data: any, options?: any) => {\n if (!data || !Array.isArray(data.rows)) return '';\n const separator = options?.separator ?? options?.params?.[0] ?? '\\n';\n return data.rows.join(separator);\n },\n});\n","import { MorphLexer } from './core/lexer.js';\nimport { parser } from './core/parser.js';\nimport { compiler } from './core/compiler.js';\nimport { getAdapter, registerAdapter, DataAdapter } from './runtime/adapters.js';\nimport { MorphQLCache } from './runtime/cache.js';\n\nimport { AnalyzeResult, SchemaNode, MorphType } from './core/mapping-tracker.js';\n\nexport {\n MorphQLCache,\n AnalyzeResult,\n SchemaNode,\n MorphType,\n registerAdapter,\n getAdapter,\n DataAdapter,\n};\nimport beautify from 'js-beautify';\n\nexport interface MorphEngine<Source = any, Target = any> {\n (source: Source): Promise<Target> | Target;\n code: string;\n analysis?: AnalyzeResult;\n}\n\nexport interface CompileOptions {\n cache?: MorphQLCache;\n analyze?: boolean;\n}\n\nexport async function compile<Source = any, Target = any>(\n queryString: string,\n options?: CompileOptions\n): Promise<MorphEngine<Source, Target>> {\n // 1. Check Cache\n if (options?.cache) {\n const cachedCode = await options.cache.retrieve(queryString);\n if (cachedCode) {\n return createEngine<Source, Target>(cachedCode);\n }\n }\n\n // 2. Compile if miss\n const lexResult = MorphLexer.tokenize(queryString);\n\n if (lexResult.errors.length > 0) {\n throw new Error(`Lexing errors: ${lexResult.errors[0].message}`);\n }\n\n parser.input = lexResult.tokens;\n const cst = parser.query();\n\n if (parser.errors.length > 0) {\n throw new Error(`Parsing errors: ${parser.errors[0].message}`);\n }\n\n compiler.isAnalyzing = !!options?.analyze;\n const { code: rawCode, analysis, sourceType, targetType } = compiler.visit(cst);\n\n const code = beautify.js(rawCode, {\n indent_size: 2,\n space_in_empty_paren: true,\n end_with_newline: true,\n });\n\n // 3. Save to Cache\n if (options?.cache) {\n await options.cache.save(queryString, code);\n }\n\n const engine = createEngine<Source, Target>(code);\n if (analysis) {\n analysis.sourceFormat = sourceType.name;\n analysis.targetFormat = targetType.name;\n engine.analysis = analysis;\n }\n return engine;\n}\n\nfunction createEngine<Source, Target>(code: string): MorphEngine<Source, Target> {\n // Create the base transformation function\n const factory = new Function(code);\n const transform = factory() as (source: any, env: any) => any;\n\n // Environment with adapter lookups\n const env = {\n parse: (format: string, content: string, options?: any) => {\n return getAdapter(format).parse(content, options);\n },\n serialize: (format: string, data: any, options?: any) => {\n return getAdapter(format).serialize(data, options);\n },\n };\n\n // Return the format-aware engine\n const engine = ((input: Source) => {\n return transform(input, env) as Target;\n }) as MorphEngine<Source, Target>;\n\n engine.code = code;\n return engine;\n}\n\n/**\n * Tagged template helper for MorphQL queries.\n * Enables syntax highlighting in VSCode and provides a cleaner API.\n *\n * @example\n * ```typescript\n * const query = morphQL`\n * from json to xml\n * transform\n * set fullName = firstName + \" \" + lastName\n * `;\n * const engine = await compile(query);\n * ```\n */\nexport function morphQL(strings: TemplateStringsArray, ...values: any[]): string {\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? ''), '');\n}\n\n/**\n * Legacy greet function for compatibility during migration.\n */\nexport function greet(name: string): string {\n return `Hello, ${name}! The Morph engine is ready.`;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@morphql/core",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "description": "A high-performance, isomorphic Query-to-Code engine for structural data transformations.",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -57,22 +57,22 @@
57
57
  "devDependencies": {
58
58
  "@eslint/js": "^9.39.2",
59
59
  "@types/js-beautify": "^1.14.3",
60
- "@types/node": "^25.0.9",
60
+ "@types/node": "^25.2.0",
61
61
  "@types/papaparse": "^5.5.2",
62
- "@typescript-eslint/eslint-plugin": "^8.53.0",
63
- "@typescript-eslint/parser": "^8.53.0",
62
+ "@typescript-eslint/eslint-plugin": "^8.54.0",
63
+ "@typescript-eslint/parser": "^8.54.0",
64
64
  "eslint": "^9.39.2",
65
65
  "eslint-config-prettier": "^10.1.8",
66
66
  "eslint-plugin-prettier": "^5.5.5",
67
- "prettier": "^3.8.0",
67
+ "prettier": "^3.8.1",
68
68
  "tsup": "^8.5.1",
69
69
  "typescript": "^5.9.3",
70
- "typescript-eslint": "^8.53.0",
71
- "vitest": "^4.0.17"
70
+ "typescript-eslint": "^8.54.0",
71
+ "vitest": "^4.0.18"
72
72
  },
73
73
  "dependencies": {
74
- "chevrotain": "^11.1.0",
75
- "fast-xml-parser": "^5.3.3",
74
+ "chevrotain": "^11.1.1",
75
+ "fast-xml-parser": "^5.3.4",
76
76
  "js-beautify": "^1.15.4",
77
77
  "papaparse": "^5.5.3"
78
78
  },