@morphql/core 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +57 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +57 -30
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/lexer.ts","../src/core/parser.ts","../src/core/functions.ts","../src/core/mapping-tracker.ts","../src/core/compiler.ts","../src/runtime/adapters.ts","../src/runtime/functions.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","attributes","attrArgs","separator","limit","sep","lim","val","specs","spec","clean","parts","name","startStr","lengthStr","specArgs","obj","MappingTracker","path","type","isTarget","node","fields","target","f","followPath","isMultiple","newTargetNode","newSourceNode","sourceNode","parentSource","followNode","targetPropertiesNode","current","i","part","newNode","defaultType","BaseCstVisitor","MorphCompiler","context","previousReadFrom","ctx","sourceType","targetType","isUnsafe","actions","a","sourceTypeName","targetTypeName","sourceOptions","targetOptions","hasReturn","action","id","options","p","key","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","sourceAccess","followName","exprResult","normalized","subSourceType","subTargetType","hasTransform","subSourceOptions","subTargetOptions","followPathForTracker","regularActions","compiler","adapters","registerAdapter","adapter","getAdapter","indexToLetter","index","letter","content","data","xmlBuilder","XMLBuilder","XMLParser","rootTag","delimiter","Papa","row","csvData","k","b","line","runtimeFunctions","sheet","titles","propertyKeys","rowObject","j","title","attributesList","pairs","builtAttrs","attrsObj","input","modifier","extraction","targetObj","totalWidth","max","truncated","acc","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","analysis","code","beautify","engine","transform","env","format","morphQL","strings","values","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.SUBRULE(this.expression, { LABEL: 'followExpr' });\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, ...attributes] = args;\n const attrArgs = attributes.join(', ');\n return `env.functions.xmlnode(${value}${attrArgs ? ', ' + attrArgs : ''})`;\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 `env.functions.to_base64(${val})`;\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 `env.functions.from_base64(${val})`;\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 `env.functions.aslist(${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 `env.functions.spreadsheet(${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\n // Validate specs at compile time\n specs.forEach((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] = 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\n // We pass specs as individual arguments to the helper\n const specArgs = specs.join(', ');\n return `env.functions.unpack(${str}, ${specArgs})`;\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 // Validate specs at compile time\n specs.forEach((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] = 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 });\n\n const specArgs = specs.join(', ');\n return `env.functions.pack(${obj}, ${specArgs})`;\n },\n concat: (args: string[]) => {\n return `env.functions.concat(${args.join(', ')})`;\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] || current.properties[part].type === 'any') {\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 let sourceAccess: string;\n let followName: string;\n\n if (ctx.followExpr) {\n const exprResult = this.visit(ctx.followExpr);\n const normalized = exprResult.replace(/\\?\\./g, '.');\n const isParent =\n normalized === 'source.parent' ||\n normalized === 'this.source.parent' ||\n normalized === `${this.readFrom.replace(/\\?\\./g, '.')}.parent`;\n\n if (isParent) {\n sourceAccess = 'source';\n followName = 'parent';\n } else {\n sourceAccess = exprResult;\n followName = sourceAccess;\n }\n } else {\n sourceAccess = this.genAccess('source', sectionId);\n followName = sectionId.name;\n }\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 let followPathForTracker = followName;\n if (followPathForTracker !== 'parent') {\n followPathForTracker = followPathForTracker\n .replace(/^source\\??\\./, '')\n .replace(/^this\\.source\\??\\./, '')\n .replace(/\\?\\./g, '.');\n }\n\n if (this.isAnalyzing) {\n this.tracker.pushSection(sectionName, followPathForTracker, 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(followPathForTracker, 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","export const runtimeFunctions = {\n /**\n * Transforms tabular data (array of objects with A, B, C... keys) into\n * an array of objects where keys are taken from the first row.\n */\n spreadsheet: (data: any) => {\n // console.log('SPREADSHEET INPUT:', JSON.stringify(data));\n let sheet = Array.isArray(data) ? data : data == null ? [] : [data];\n if (!Array.isArray(data) && data && typeof data === 'object' && Array.isArray(data.rows)) {\n sheet = data.rows;\n }\n if (sheet.length === 0) return [];\n\n const result: any[] = [];\n const titles: string[] = [];\n let propertyKeys: string[] = [];\n\n for (let i = 0; i < sheet.length; i++) {\n const line = sheet[i];\n if (!line || typeof line !== 'object') continue;\n\n if (i === 0) {\n // First row contains the headers (titles)\n propertyKeys = Object.keys(line);\n for (const k of propertyKeys) {\n titles.push(String(line[k]));\n }\n } else {\n // Subsequent rows contain data mapped from property keys to titles\n const rowObject: any = {};\n for (let j = 0; j < propertyKeys.length; j++) {\n const key = propertyKeys[j];\n const title = titles[j];\n rowObject[title] = line[key];\n }\n result.push(rowObject);\n }\n }\n // console.log('SPREADSHEET RESULT:', JSON.stringify(result));\n return result;\n },\n\n /**\n * Ensures the value is an array.\n */\n aslist: (val: any) => {\n return Array.isArray(val) ? val : val == null ? [] : [val];\n },\n\n /**\n * Encodes a string to Base64 (isomorphic).\n */\n to_base64: (val: any) => {\n const str = String(val);\n if (typeof btoa === 'function') {\n return btoa(unescape(encodeURIComponent(str)));\n }\n return Buffer.from(str, 'utf-8').toString('base64');\n },\n\n /**\n * Decodes a Base64 string (isomorphic).\n */\n from_base64: (val: any) => {\n const str = String(val);\n if (typeof atob === 'function') {\n return decodeURIComponent(escape(atob(str)));\n }\n return Buffer.from(str, 'base64').toString('utf-8');\n },\n\n /**\n * Builds an object compatible with the XML adapter's expected structure.\n */\n xmlnode: (value: any, ...attributesList: any[]) => {\n if (attributesList.length > 0) {\n const pairs: [string, any][] = [];\n for (let i = 0; i < attributesList.length; i += 2) {\n pairs.push([attributesList[i], attributesList[i + 1]]);\n }\n\n const builtAttrs = pairs.map(([key, val]) => [`$${key}`, val]);\n const attrsObj = Object.fromEntries(builtAttrs);\n return { _: value, ...attrsObj };\n }\n return value;\n },\n\n /**\n * Unpacks a fixed-width string into an object based on field specifications.\n * Specs: \"name:start:length[:modifier]\"\n */\n unpack: (str: any, ...specs: string[]) => {\n const input = String(str || '');\n const result: any = {};\n\n for (const spec of specs) {\n const parts = spec.split(':');\n if (parts.length < 3) continue;\n\n const [name, startStr, lengthStr, modifier] = parts;\n const start = parseInt(startStr, 10);\n const length = parseInt(lengthStr, 10);\n\n if (isNaN(start) || isNaN(length)) continue;\n\n let extraction = input.substring(start, start + length);\n if (modifier !== 'raw') {\n extraction = extraction.trim();\n }\n result[name] = extraction;\n }\n return result;\n },\n\n /**\n * Packs an object into a fixed-width string based on field specifications.\n * Specs: \"name:start:length[:modifier]\"\n */\n pack: (obj: any, ...specs: string[]) => {\n const targetObj = obj || {};\n\n const fields = specs\n .map((spec) => {\n const parts = spec.split(':');\n if (parts.length < 3) return null;\n const [name, startStr, lengthStr, modifier] = parts;\n return {\n name,\n start: parseInt(startStr, 10),\n length: parseInt(lengthStr, 10),\n left: modifier === 'left',\n };\n })\n .filter((f): f is NonNullable<typeof f> => f !== null);\n\n const totalWidth = fields.reduce((max, f) => Math.max(max, f.start + f.length), 0);\n let line = ' '.repeat(totalWidth);\n\n for (const f of fields) {\n const val = String(targetObj[f.name] ?? '');\n const padded = f.left ? val.padStart(f.length) : val.padEnd(f.length);\n const truncated = padded.substring(0, f.length);\n\n line = line.substring(0, f.start) + truncated + line.substring(f.start + f.length);\n }\n\n return line;\n },\n\n /**\n * Concatenates two or more arrays.\n */\n concat: (...args: any[]) => {\n return args.reduce(\n (acc, val) => acc.concat(Array.isArray(val) ? val : val == null ? [] : [val]),\n []\n );\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';\nimport { runtimeFunctions } from './runtime/functions.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 functions: runtimeFunctions,\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/runtime/functions.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","Where","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","attributes","attrArgs","separator","limit","sep","lim","val","specs","spec","clean","parts","name","startStr","lengthStr","specArgs","obj","MappingTracker","path","type","isTarget","node","fields","target","f","followPath","isMultiple","newTargetNode","newSourceNode","sourceNode","parentSource","followNode","targetPropertiesNode","current","i","part","newNode","defaultType","BaseCstVisitor","MorphCompiler","context","previousReadFrom","ctx","sourceType","targetType","isUnsafe","actions","a","sourceTypeName","targetTypeName","sourceOptions","targetOptions","hasReturn","action","id","options","p","key","image","num","base","isLHS","field","thenActions","elseBlock","identifiers","left","right","expr","scope","result","rhs","op","lhs","lhsType","hasString","allNumbers","atomic","originalName","handler","sectionId","sectionName","sectionAccess","sourceAccess","followName","exprResult","normalized","hasWhere","whereCondition","subSourceType","subTargetType","hasTransform","subSourceOptions","subTargetOptions","filterPart","followPathForTracker","regularActions","compiler","adapters","registerAdapter","adapter","getAdapter","indexToLetter","index","letter","content","data","xmlBuilder","XMLBuilder","XMLParser","rootTag","delimiter","Papa","row","csvData","k","b","segmentTerminator","elementSeparator","componentSeparator","releaseChar","una","splitEscaped","release","char","unescape","segmentsRaw","s","seg","elementsRaw","tag","elements","el","components","c","escape","escaped","segments","line","runtimeFunctions","sheet","titles","propertyKeys","rowObject","j","title","attributesList","pairs","builtAttrs","attrsObj","input","modifier","extraction","targetObj","totalWidth","max","truncated","acc","source","keys","maxLen","compile","queryString","cachedCode","createEngine","lexResult","cst","rawCode","analysis","code","beautify","engine","transform","env","format","morphQL","strings","values","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 });\nexport const Where = createToken({ name: 'Where', pattern: /where/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 Where,\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.SUBRULE(this.expression, { LABEL: 'followExpr' });\n });\n this.OPTION4(() => {\n this.CONSUME(t.Where, { LABEL: 'whereClause' });\n this.SUBRULE1(this.expression, { LABEL: 'whereExpr' });\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, ...attributes] = args;\n const attrArgs = attributes.join(', ');\n return `env.functions.xmlnode(${value}${attrArgs ? ', ' + attrArgs : ''})`;\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 `env.functions.to_base64(${val})`;\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 `env.functions.from_base64(${val})`;\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 `env.functions.aslist(${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 `env.functions.spreadsheet(${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\n // Validate specs at compile time\n specs.forEach((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] = 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\n // We pass specs as individual arguments to the helper\n const specArgs = specs.join(', ');\n return `env.functions.unpack(${str}, ${specArgs})`;\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 // Validate specs at compile time\n specs.forEach((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] = 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 });\n\n const specArgs = specs.join(', ');\n return `env.functions.pack(${obj}, ${specArgs})`;\n },\n concat: (args: string[]) => {\n return `env.functions.concat(${args.join(', ')})`;\n },\n transpose: (args: string[]) => {\n if (args.length < 2) {\n throw new Error('transpose() requires at least 2 arguments (source, key1, [key2, ...])');\n }\n return `env.functions.transpose(${args.join(', ')})`;\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] || current.properties[part].type === 'any') {\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 safify(path: string): string {\n if (!this.safeMode) return path;\n // Replace . with ?. and [ with ?.[, but avoid double ?? or ?.[ if they were somehow already there\n return path.replace(/\\.(?!\\?)/g, '?.').replace(/\\[/g, '?.[');\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 if (!this.safeMode || isLHS) {\n if (\n id.quoted ||\n (id.name.includes('-') && !id.name.includes('.') && !id.name.includes('['))\n ) {\n return `${base}[\"${id.name}\"]`;\n }\n return `${base}.${id.name}`;\n }\n\n // Safe Mode + RHS\n if (id.quoted) {\n return `${base}?.[${JSON.stringify(id.name)}]`;\n }\n\n const path = this.safify(id.name);\n return `${base}?.${path}`;\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 this.safeMode ? this.safify(id.name) : 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 this.safeMode ? this.safify(id.name) : 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 const path = id.name.substring(7);\n const safified = this.safeMode ? this.safify(path) : path;\n return `_rootSource${safified}`;\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 const path = id.name.substring(7);\n const safified = this.safeMode ? this.safify(path) : path;\n return `_rootTarget${safified}`;\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', 'transpose'].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 let sourceAccess: string;\n let followName: string;\n\n if (ctx.followExpr) {\n const exprResult = this.visit(ctx.followExpr);\n const normalized = exprResult.replace(/\\?\\./g, '.');\n const isParent =\n normalized === 'source.parent' ||\n normalized === 'this.source.parent' ||\n normalized === `${this.readFrom.replace(/\\?\\./g, '.')}.parent`;\n\n if (isParent) {\n sourceAccess = 'source';\n followName = 'parent';\n } else {\n sourceAccess = exprResult;\n followName = sourceAccess;\n }\n } else {\n sourceAccess = this.genAccess('source', sectionId);\n followName = sectionId.name;\n }\n\n const isMultiple = !!ctx.Multiple;\n\n // Handle where clause\n const hasWhere = !!ctx.whereExpr;\n let whereCondition = '';\n if (hasWhere) {\n whereCondition = this.visit(ctx.whereExpr);\n }\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 const filterPart = hasWhere\n ? `.filter(item => { const source = item; return ${whereCondition}; })`\n : '';\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}${filterPart}.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 // Single subquery section with where = find first match\n if (hasWhere) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n const _filtered = ${sourceAccess}.find(item => { const source = item; return ${whereCondition}; });\n if (_filtered) {\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 })(_filtered);\n }\n }\n `;\n } else {\n return `\n if (${sourceAccess}) {\n ${sectionAccess} = (function(innerSource) {\n const subSource = env.parse('${subSourceType.name}', innerSource, ${subSourceOptions});\n const source = subSource;\n const target = {};\n ${actions.join('\\n ')}\n return env.serialize('${subTargetType.name}', target, ${subTargetOptions});\n })(${sourceAccess});\n }\n `;\n }\n }\n } 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 let followPathForTracker = followName;\n if (followPathForTracker !== 'parent') {\n followPathForTracker = followPathForTracker\n .replace(/^source\\??\\./, '')\n .replace(/^this\\.source\\??\\./, '')\n .replace(/\\?\\./g, '.');\n }\n\n if (this.isAnalyzing) {\n this.tracker.pushSection(sectionName, followPathForTracker, isMultiple);\n }\n\n try {\n const regularActions = ctx.action ? ctx.action.map((a: any) => this.visit(a)) : [];\n\n if (isMultiple) {\n const filterPart = hasWhere\n ? `.filter(item => { const source = item; return ${whereCondition}; })`\n : '';\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n ${sectionAccess} = ${sourceAccess}${filterPart}.map(item => {\n const source = item;\n const target = {};\n ${regularActions.join('\\n ')}\n return target;\n });\n }\n `;\n } else {\n // Single section with where = find first match\n if (hasWhere) {\n return `\n if (${sourceAccess} && Array.isArray(${sourceAccess})) {\n const _filtered = ${sourceAccess}.find(item => { const source = item; return ${whereCondition}; });\n if (_filtered) {\n ${sectionAccess} = (function(innerSource) {\n const source = innerSource;\n const target = {};\n ${regularActions.join('\\n ')}\n return target;\n })(_filtered);\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 }\n } finally {\n if (this.isAnalyzing) {\n this.tracker.popSection(followPathForTracker, 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// EDIFACT Adapter\nregisterAdapter('edifact', {\n parse: (content: string, options?: any) => {\n if (typeof content !== 'string') return content;\n\n let segmentTerminator = \"'\";\n let elementSeparator = '+';\n let componentSeparator = ':';\n let releaseChar = '?';\n\n let data = content.trim();\n if (data.startsWith('UNA')) {\n const una = data.substring(3, 9);\n componentSeparator = una[0];\n elementSeparator = una[1];\n // una[2] is decimal mark\n releaseChar = una[3];\n // una[4] is reserved\n segmentTerminator = una[5];\n data = data.substring(9).trim();\n }\n\n // Manual override via options\n if (options) {\n if (options.segmentTerminator) segmentTerminator = options.segmentTerminator;\n if (options.elementSeparator) elementSeparator = options.elementSeparator;\n if (options.componentSeparator) componentSeparator = options.componentSeparator;\n if (options.releaseChar) releaseChar = options.releaseChar;\n }\n\n const result: Record<string, any[]> = {};\n\n const splitEscaped = (str: string, separator: string, release: string) => {\n const parts: string[] = [];\n let current = '';\n for (let i = 0; i < str.length; i++) {\n const char = str[i];\n if (char === release && i + 1 < str.length) {\n current += release + str[++i];\n } else if (char === separator) {\n parts.push(current);\n current = '';\n } else {\n current += char;\n }\n }\n parts.push(current);\n return parts;\n };\n\n const unescape = (str: string, release: string) => {\n let result = '';\n for (let i = 0; i < str.length; i++) {\n if (str[i] === release && i + 1 < str.length) {\n result += str[++i];\n } else {\n result += str[i];\n }\n }\n return result;\n };\n\n const segmentsRaw = splitEscaped(data, segmentTerminator, releaseChar)\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n\n for (const seg of segmentsRaw) {\n const elementsRaw = splitEscaped(seg, elementSeparator, releaseChar);\n const tag = unescape(elementsRaw[0], releaseChar);\n const elements = elementsRaw.slice(1).map((el) => {\n const componentsRaw = splitEscaped(el, componentSeparator, releaseChar);\n const components = componentsRaw.map((c) => unescape(c, releaseChar));\n return components.length > 1 ? components : components[0];\n });\n\n if (!result[tag]) {\n result[tag] = [];\n }\n result[tag].push(elements);\n }\n\n return result;\n },\n serialize: (data: any, options?: any) => {\n if (!data || typeof data !== 'object') return '';\n\n const segmentTerminator = options?.segmentTerminator ?? \"'\";\n const elementSeparator = options?.elementSeparator ?? '+';\n const componentSeparator = options?.componentSeparator ?? ':';\n const releaseChar = options?.releaseChar ?? '?';\n\n const escape = (val: any) => {\n if (val === null || val === undefined) return '';\n const str = String(val);\n let escaped = '';\n for (const char of str) {\n if (\n char === segmentTerminator ||\n char === elementSeparator ||\n char === componentSeparator ||\n char === releaseChar\n ) {\n escaped += releaseChar;\n }\n escaped += char;\n }\n return escaped;\n };\n\n let result = '';\n\n // If UNA is explicitly requested or delimiters are custom\n if (options?.includeUNA) {\n result += `UNA${componentSeparator}${elementSeparator}.${releaseChar} ${segmentTerminator}`;\n }\n\n for (const tag in data) {\n const segments = Array.isArray(data[tag]) ? data[tag] : [data[tag]];\n for (const seg of segments) {\n result += tag;\n if (Array.isArray(seg)) {\n for (const el of seg) {\n result += elementSeparator;\n if (Array.isArray(el)) {\n result += el.map(escape).join(componentSeparator);\n } else {\n result += escape(el);\n }\n }\n }\n result += segmentTerminator;\n }\n }\n\n return result;\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","export const runtimeFunctions = {\n /**\n * Transforms tabular data (array of objects with A, B, C... keys) into\n * an array of objects where keys are taken from the first row.\n */\n spreadsheet: (data: any) => {\n // console.log('SPREADSHEET INPUT:', JSON.stringify(data));\n let sheet = Array.isArray(data) ? data : data == null ? [] : [data];\n if (!Array.isArray(data) && data && typeof data === 'object' && Array.isArray(data.rows)) {\n sheet = data.rows;\n }\n if (sheet.length === 0) return [];\n\n const result: any[] = [];\n const titles: string[] = [];\n let propertyKeys: string[] = [];\n\n for (let i = 0; i < sheet.length; i++) {\n const line = sheet[i];\n if (!line || typeof line !== 'object') continue;\n\n if (i === 0) {\n // First row contains the headers (titles)\n propertyKeys = Object.keys(line);\n for (const k of propertyKeys) {\n titles.push(String(line[k]));\n }\n } else {\n // Subsequent rows contain data mapped from property keys to titles\n const rowObject: any = {};\n for (let j = 0; j < propertyKeys.length; j++) {\n const key = propertyKeys[j];\n const title = titles[j];\n rowObject[title] = line[key];\n }\n result.push(rowObject);\n }\n }\n // console.log('SPREADSHEET RESULT:', JSON.stringify(result));\n return result;\n },\n\n /**\n * Ensures the value is an array.\n */\n aslist: (val: any) => {\n return Array.isArray(val) ? val : val == null ? [] : [val];\n },\n\n /**\n * Encodes a string to Base64 (isomorphic).\n */\n to_base64: (val: any) => {\n const str = String(val);\n if (typeof btoa === 'function') {\n return btoa(unescape(encodeURIComponent(str)));\n }\n return Buffer.from(str, 'utf-8').toString('base64');\n },\n\n /**\n * Decodes a Base64 string (isomorphic).\n */\n from_base64: (val: any) => {\n const str = String(val);\n if (typeof atob === 'function') {\n return decodeURIComponent(escape(atob(str)));\n }\n return Buffer.from(str, 'base64').toString('utf-8');\n },\n\n /**\n * Builds an object compatible with the XML adapter's expected structure.\n */\n xmlnode: (value: any, ...attributesList: any[]) => {\n if (attributesList.length > 0) {\n const pairs: [string, any][] = [];\n for (let i = 0; i < attributesList.length; i += 2) {\n pairs.push([attributesList[i], attributesList[i + 1]]);\n }\n\n const builtAttrs = pairs.map(([key, val]) => [`$${key}`, val]);\n const attrsObj = Object.fromEntries(builtAttrs);\n return { _: value, ...attrsObj };\n }\n return value;\n },\n\n /**\n * Unpacks a fixed-width string into an object based on field specifications.\n * Specs: \"name:start:length[:modifier]\"\n */\n unpack: (str: any, ...specs: string[]) => {\n const input = String(str || '');\n const result: any = {};\n\n for (const spec of specs) {\n const parts = spec.split(':');\n if (parts.length < 3) continue;\n\n const [name, startStr, lengthStr, modifier] = parts;\n const start = parseInt(startStr, 10);\n const length = parseInt(lengthStr, 10);\n\n if (isNaN(start) || isNaN(length)) continue;\n\n let extraction = input.substring(start, start + length);\n if (modifier !== 'raw') {\n extraction = extraction.trim();\n }\n result[name] = extraction;\n }\n return result;\n },\n\n /**\n * Packs an object into a fixed-width string based on field specifications.\n * Specs: \"name:start:length[:modifier]\"\n */\n pack: (obj: any, ...specs: string[]) => {\n const targetObj = obj || {};\n\n const fields = specs\n .map((spec) => {\n const parts = spec.split(':');\n if (parts.length < 3) return null;\n const [name, startStr, lengthStr, modifier] = parts;\n return {\n name,\n start: parseInt(startStr, 10),\n length: parseInt(lengthStr, 10),\n left: modifier === 'left',\n };\n })\n .filter((f): f is NonNullable<typeof f> => f !== null);\n\n const totalWidth = fields.reduce((max, f) => Math.max(max, f.start + f.length), 0);\n let line = ' '.repeat(totalWidth);\n\n for (const f of fields) {\n const val = String(targetObj[f.name] ?? '');\n const padded = f.left ? val.padStart(f.length) : val.padEnd(f.length);\n const truncated = padded.substring(0, f.length);\n\n line = line.substring(0, f.start) + truncated + line.substring(f.start + f.length);\n }\n\n return line;\n },\n\n /**\n * Concatenates two or more arrays.\n */\n concat: (...args: any[]) => {\n return args.reduce(\n (acc, val) => acc.concat(Array.isArray(val) ? val : val == null ? [] : [val]),\n []\n );\n },\n\n /**\n * Transposes parallel arrays from a source object into an array of objects.\n * Signature: transpose(source, ...keys)\n * Example: transpose(src, \"A\", \"B\") -> [{ A: src.A[0], B: src.B[0] }, ...]\n */\n transpose: (source: any, ...keys: string[]) => {\n if (!source || typeof source !== 'object' || keys.length === 0) return [];\n\n let maxLen = 0;\n for (const key of keys) {\n const val = source[key];\n if (Array.isArray(val)) {\n maxLen = Math.max(maxLen, val.length);\n } else if (val != null) {\n maxLen = Math.max(maxLen, 1);\n }\n }\n\n const result = [];\n for (let i = 0; i < maxLen; i++) {\n const row: any = {};\n for (const key of keys) {\n const val = source[key];\n if (Array.isArray(val)) {\n row[key] = val[i];\n } else {\n row[key] = i === 0 ? val : undefined;\n }\n }\n result.push(row);\n }\n return result;\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';\nimport { runtimeFunctions } from './runtime/functions.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 functions: runtimeFunctions,\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"]}
|