lombok-typescript 0.6.0 → 0.8.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/clean.ts","../../src/codegen/analyzer.ts","../../src/decorators/shared/composition.ts","../../src/codegen/emitters/helpers.ts","../../src/codegen/emitters/accessors-emit.ts","../../src/codegen/emitters/builder.ts","../../src/codegen/emitters/declaration.ts","../../src/codegen/emitters/delegate-emit.ts","../../src/codegen/emitters/equals-emit.ts","../../src/codegen/emitters/with-emit.ts","../../src/codegen/emitters/index.ts","../../src/codegen/generator.ts","../../src/cli/config-loader.ts","../../src/cli/commands/generate.ts","../../src/cli/commands/init.ts","../../src/cli/commands/watch.ts","../../src/cli/index.ts"],"names":["resolve","existsSync","rmSync","SyntaxKind","relative","dirname","Project","mkdirSync","writeFileSync","bundleRequire","cac","fileURLToPath"],"mappings":"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","file":"index.cjs","sourcesContent":["import { existsSync, rmSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nexport interface CleanCommandOptions {\n cwd?: string;\n /** Directories (relative to cwd) to remove. Default `['.lombok', 'dist', 'coverage']`. */\n paths?: string[];\n log?: (message: string) => void;\n}\n\n/** `lombok-ts clean`: remove generated and build artifacts. */\nexport async function runClean(opts: CleanCommandOptions = {}): Promise<{\n removed: string[];\n skipped: string[];\n}> {\n const cwd = opts.cwd ?? process.cwd();\n const paths = opts.paths ?? ['.lombok', 'dist', 'coverage'];\n const log = opts.log ?? ((msg) => console.info(msg));\n\n const removed: string[] = [];\n const skipped: string[] = [];\n\n for (const rel of paths) {\n const abs = resolve(cwd, rel);\n if (existsSync(abs)) {\n rmSync(abs, { recursive: true, force: true });\n removed.push(rel);\n log(`Removed ${rel}/`);\n } else {\n skipped.push(rel);\n }\n }\n\n if (removed.length === 0) {\n log('Nothing to clean.');\n }\n\n return { removed, skipped };\n}\n","import {\n type ClassDeclaration,\n type Decorator,\n type MethodDeclaration,\n type ParameterDeclaration,\n Project,\n type PropertyDeclaration,\n type SourceFile,\n SyntaxKind,\n} from 'ts-morph';\nimport type { ClassInfo, DecoratorInfo, FieldInfo, MethodInfo, ParameterInfo } from './types.js';\n\n/**\n * Walk every class in `sourceFile` and return their decorator/field/method\n * shapes as plain data. No ts-morph references leak out.\n */\nexport function analyzeFile(sourceFile: SourceFile): ClassInfo[] {\n return sourceFile.getClasses().map((cls) => analyzeClassDeclaration(cls));\n}\n\n/** Find one class by name in the source file. Returns `undefined` if missing. */\nexport function analyzeClassByName(\n sourceFile: SourceFile,\n className: string,\n): ClassInfo | undefined {\n const cls = sourceFile.getClass(className);\n return cls ? analyzeClassDeclaration(cls) : undefined;\n}\n\n/** Parse a source string in an in-memory project and analyze every class in it. */\nexport function analyzeSourceString(sourceCode: string, fileName = 'analyze.ts'): ClassInfo[] {\n const project = new Project({ useInMemoryFileSystem: true });\n const sourceFile = project.createSourceFile(fileName, sourceCode);\n return analyzeFile(sourceFile);\n}\n\n/** Analyze a single named class in a source string. Throws if not found. */\nexport function analyzeClass(sourceCode: string, className: string): ClassInfo {\n const project = new Project({ useInMemoryFileSystem: true });\n const sourceFile = project.createSourceFile('analyze.ts', sourceCode);\n const result = analyzeClassByName(sourceFile, className);\n if (!result) {\n throw new Error(`No class named \"${className}\" found in source`);\n }\n return result;\n}\n\n// Internal walkers\n\nfunction analyzeClassDeclaration(cls: ClassDeclaration): ClassInfo {\n const name = cls.getName() ?? '<anonymous>';\n return {\n name,\n decorators: cls.getDecorators().map(toDecoratorInfo),\n fields: cls.getProperties().map(toFieldInfo),\n methods: cls.getMethods().map(toMethodInfo),\n };\n}\n\nfunction toDecoratorInfo(decorator: Decorator): DecoratorInfo {\n return {\n name: decorator.getName(),\n arguments: decorator.getArguments().map((arg) => arg.getText()),\n };\n}\n\nfunction toFieldInfo(prop: PropertyDeclaration): FieldInfo {\n const initializer = prop.getInitializer();\n return {\n name: prop.getName(),\n type: prop.getType().getText(prop),\n isOptional: prop.hasQuestionToken(),\n isReadonly: prop.isReadonly(),\n hasDefault: initializer !== undefined,\n defaultValue: initializer?.getText(),\n decorators: prop.getDecorators().map(toDecoratorInfo),\n };\n}\n\nfunction toMethodInfo(method: MethodDeclaration): MethodInfo {\n return {\n name: method.getName(),\n returnType: method.getReturnType().getText(method),\n parameters: method.getParameters().map(toParameterInfo),\n decorators: method.getDecorators().map(toDecoratorInfo),\n isAsync: method.isAsync(),\n isStatic: method.isStatic(),\n };\n}\n\nfunction toParameterInfo(param: ParameterDeclaration): ParameterInfo {\n return {\n name: param.getName(),\n type: param.getType().getText(param),\n isOptional:\n param.hasQuestionToken() ||\n param.hasInitializer() ||\n param.getDotDotDotToken()?.getKind() === SyntaxKind.DotDotDotToken,\n decorators: param.getDecorators().map(toDecoratorInfo),\n };\n}\n","import type { ClassInfo } from '../../codegen/types.js';\n\n/** Pairs of class decorators that must not appear on the same class. */\nexport const CONFLICTING_CLASS_DECORATOR_PAIRS: readonly (readonly [string, string])[] = [\n ['Data', 'Value'],\n];\n\nexport function classHasDecorator(info: Pick<ClassInfo, 'decorators'>, name: string): boolean {\n return info.decorators.some((d) => d.name === name);\n}\n\n/**\n * Enforce composition rules before codegen runs.\n * `@Data` and `@Value` are mutually exclusive (mutable vs immutable).\n */\nexport function validateClassComposition(info: ClassInfo): void {\n for (const [a, b] of CONFLICTING_CLASS_DECORATOR_PAIRS) {\n if (classHasDecorator(info, a) && classHasDecorator(info, b)) {\n throw new Error(`Class \"${info.name}\": @${a} and @${b} cannot be used together.`);\n }\n }\n}\n\nexport function validateAllClassCompositions(classes: readonly ClassInfo[]): void {\n for (const info of classes) {\n validateClassComposition(info);\n }\n}\n","import { relative } from 'node:path';\nimport type { ClassInfo, DecoratorInfo, FieldInfo } from '../types.js';\n\n/** ESM import path from `fromDir` to `sourcePath` (NodeNext requires a `.js` extension). */\nexport function toImportPath(sourcePath: string, fromDir: string): string {\n let rel = relative(fromDir, sourcePath).replace(/\\\\/g, '/');\n if (!rel.startsWith('.')) rel = './' + rel;\n return rel.replace(/\\.tsx?$/u, '.js');\n}\n\nconst CODEGEN_CLASS_DECORATORS = [\n 'Builder',\n 'Data',\n 'ToString',\n 'Value',\n 'Equals',\n 'With',\n] as const;\n\nexport function hasCodegenClassDecorator(info: ClassInfo): boolean {\n return (\n CODEGEN_CLASS_DECORATORS.some((name) => hasClassDecorator(info, name)) ||\n info.fields.some(\n (f) =>\n fieldHasDecorator(f, 'Getter') ||\n fieldHasDecorator(f, 'Setter') ||\n fieldHasDecorator(f, 'With') ||\n fieldHasDecorator(f, 'Delegate'),\n )\n );\n}\n\nexport function hasClassDecorator(info: ClassInfo, name: string): boolean {\n return info.decorators.some((d) => d.name === name);\n}\n\nexport function fieldHasDecorator(field: FieldInfo, name: string): boolean {\n return field.decorators.some((d) => d.name === name);\n}\n\nexport function fieldExcludesToString(field: FieldInfo): boolean {\n return field.decorators.some(\n (d) => d.name === 'ToStringExclude' || d.name === 'ToString.Exclude',\n );\n}\n\nexport function fieldExcludesEquals(field: FieldInfo): boolean {\n return field.decorators.some((d) => d.name === 'EqualsExclude' || d.name === 'Equals.Exclude');\n}\n\nexport function visibleFields(info: ClassInfo): FieldInfo[] {\n if (\n hasClassDecorator(info, 'ToString') ||\n hasClassDecorator(info, 'Data') ||\n hasClassDecorator(info, 'Value')\n ) {\n return info.fields.filter((f) => !fieldExcludesToString(f));\n }\n return info.fields;\n}\n\nexport function equalsFields(info: ClassInfo): FieldInfo[] {\n return info.fields.filter((f) => !fieldExcludesEquals(f));\n}\n\nexport function getterName(fieldName: string): string {\n return `get${fieldName.charAt(0).toUpperCase()}${fieldName.slice(1)}`;\n}\n\nexport function setterName(fieldName: string): string {\n return `set${fieldName.charAt(0).toUpperCase()}${fieldName.slice(1)}`;\n}\n\nexport function withMethodName(fieldName: string): string {\n return `with${fieldName.charAt(0).toUpperCase()}${fieldName.slice(1)}`;\n}\n\nexport function builderClassName(className: string): string {\n return `${className}Builder`;\n}\n\nexport function hasDataOrValue(info: ClassInfo): boolean {\n return hasClassDecorator(info, 'Data') || hasClassDecorator(info, 'Value');\n}\n\nexport function wantsWithMethods(info: ClassInfo, field: FieldInfo): boolean {\n return (\n hasClassDecorator(info, 'Value') ||\n hasClassDecorator(info, 'With') ||\n fieldHasDecorator(field, 'With')\n );\n}\n\nexport function wantsGetter(info: ClassInfo, field: FieldInfo): boolean {\n return hasDataOrValue(info) || fieldHasDecorator(field, 'Getter');\n}\n\nexport function wantsSetter(info: ClassInfo, field: FieldInfo): boolean {\n if (hasClassDecorator(info, 'Value')) return false;\n if (hasClassDecorator(info, 'Data')) return !effectiveReadonly(info, field);\n return fieldHasDecorator(field, 'Setter');\n}\n\nexport function wantsEquals(info: ClassInfo): boolean {\n return (\n hasClassDecorator(info, 'Data') ||\n hasClassDecorator(info, 'Value') ||\n hasClassDecorator(info, 'Equals')\n );\n}\n\nexport function wantsToString(info: ClassInfo): boolean {\n return (\n hasClassDecorator(info, 'ToString') ||\n hasClassDecorator(info, 'Data') ||\n hasClassDecorator(info, 'Value')\n );\n}\n\nexport function effectiveReadonly(info: ClassInfo, field: FieldInfo): boolean {\n if (field.isReadonly) return true;\n const defaults = getFieldDefaultsOptions(info);\n return defaults?.makeFinal === true;\n}\n\nexport function getFieldDefaultsOptions(\n info: ClassInfo,\n): { level: string; makeFinal: boolean } | undefined {\n const dec = info.decorators.find((d) => d.name === 'FieldDefaults');\n if (!dec) return undefined;\n const [first] = dec.arguments;\n if (typeof first === 'string' && first.startsWith('{')) {\n try {\n const parsed = JSON.parse(first.replace(/(\\w+):/g, '\"$1\":').replace(/'/g, '\"')) as {\n level?: string;\n makeFinal?: boolean;\n };\n return {\n level: parsed.level ?? 'public',\n makeFinal: parsed.makeFinal ?? false,\n };\n } catch {\n return { level: 'public', makeFinal: false };\n }\n }\n return { level: 'public', makeFinal: false };\n}\n\nexport function hasFluentAccessors(info: ClassInfo): boolean {\n const dec = info.decorators.find((d) => d.name === 'Accessors');\n if (!dec) return false;\n const [first] = dec.arguments;\n if (typeof first === 'string') {\n return first.includes('chain') || first.includes('fluent');\n }\n return false;\n}\n\nexport function getDelegateMethods(field: FieldInfo): string[] {\n const dec = field.decorators.find((d) => d.name === 'Delegate');\n if (!dec || dec.arguments.length === 0) return [];\n if (dec.arguments.length === 1 && String(dec.arguments[0]).startsWith('[')) {\n try {\n return JSON.parse(String(dec.arguments[0]).replace(/'/g, '\"')) as string[];\n } catch {\n return [];\n }\n }\n return dec.arguments.map((a) => String(a).replace(/^['\"]|['\"]$/g, ''));\n}\n\nexport function parseDecoratorObjectArg(dec: DecoratorInfo | undefined): Record<string, unknown> {\n if (!dec || dec.arguments.length === 0) return {};\n const [first] = dec.arguments;\n if (typeof first !== 'string' || !first.startsWith('{')) return {};\n try {\n return JSON.parse(first.replace(/(\\w+):/g, '\"$1\":').replace(/'/g, '\"')) as Record<\n string,\n unknown\n >;\n } catch {\n return {};\n }\n}\n","import type { ClassInfo, FieldInfo } from '../types.js';\nimport { getterName, hasFluentAccessors, setterName, wantsGetter, wantsSetter } from './helpers.js';\n\nfunction emitGetterFn(info: ClassInfo, field: FieldInfo): string {\n const g = getterName(field.name);\n return `\nfunction ${info.name}_${g}(this: ${info.name}): ${field.type} {\n return this.${field.name};\n}`.trim();\n}\n\nfunction emitSetterFn(info: ClassInfo, field: FieldInfo): string {\n const s = setterName(field.name);\n const fluent = hasFluentAccessors(info);\n const ret = fluent ? `return this;` : '';\n const returnType = fluent ? info.name : 'void';\n return `\nfunction ${info.name}_${s}(this: ${info.name}, value: ${field.type}): ${returnType} {\n this.${field.name} = value;\n ${ret}\n}`.trim();\n}\n\nexport function emitAccessorFns(info: ClassInfo): string {\n const fns: string[] = [];\n for (const field of info.fields) {\n if (wantsGetter(info, field)) {\n fns.push(emitGetterFn(info, field));\n }\n if (wantsSetter(info, field)) {\n fns.push(emitSetterFn(info, field));\n }\n }\n return fns.join('\\n\\n');\n}\n\nexport function emitAccessorApplyAssignments(info: ClassInfo): string[] {\n const assignments: string[] = [];\n for (const field of info.fields) {\n if (wantsGetter(info, field)) {\n assignments.push(\n `prototype.${getterName(field.name)} = ${info.name}_${getterName(field.name)};`,\n );\n }\n if (wantsSetter(info, field)) {\n assignments.push(\n `prototype.${setterName(field.name)} = ${info.name}_${setterName(field.name)};`,\n );\n }\n }\n return assignments;\n}\n","import type { ClassInfo } from '../types.js';\nimport { builderClassName, hasClassDecorator } from './helpers.js';\n\nexport function emitBuilderClass(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'Builder')) {\n return '';\n }\n\n const builderName = builderClassName(info.name);\n const fieldLines = info.fields.map((f) => {\n if (f.isOptional) {\n return ` private _${f.name}?: ${f.type};`;\n }\n return ` private _${f.name}!: ${f.type};`;\n });\n\n const setterMethods = info.fields.map((f) =>\n `\n ${f.name}(value: ${f.type}): ${builderName} {\n this._${f.name} = value;\n return this;\n }`.trim(),\n );\n\n return `\nexport class ${builderName} {\n${fieldLines.join('\\n')}\n\n static builder(): ${builderName} {\n return new ${builderName}();\n }\n\n${setterMethods.join('\\n\\n')}\n\n build(): ${info.name} {\n const instance = new ${info.name}();\n${info.fields.map((f) => ` instance.${f.name} = this._${f.name}${f.isOptional ? '' : '!'};`).join('\\n')}\n return instance;\n }\n}`.trim();\n}\n\nexport function emitBuilderStaticMethod(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'Builder')) return '';\n const builderName = builderClassName(info.name);\n return `\n static builder(): ${builderName} {\n return ${builderName}.builder();\n }`.trim();\n}\n","import { dirname } from 'node:path';\nimport type { ClassInfo } from '../types.js';\nimport {\n builderClassName,\n fieldHasDecorator,\n getterName,\n getDelegateMethods,\n hasClassDecorator,\n setterName,\n wantsEquals,\n wantsGetter,\n wantsSetter,\n wantsToString,\n wantsWithMethods,\n withMethodName,\n toImportPath,\n} from './helpers.js';\n\nfunction emitDeclarationModuleBlock(relSource: string, classes: readonly ClassInfo[]): string {\n const lines: string[] = [`declare module '${relSource}' {`];\n\n for (const info of classes) {\n if (hasClassDecorator(info, 'Builder')) {\n const builderName = builderClassName(info.name);\n lines.push(` export class ${builderName} {`);\n lines.push(` static builder(): ${builderName};`);\n for (const f of info.fields) {\n lines.push(` ${f.name}(value: ${f.type}): ${builderName};`);\n }\n lines.push(` build(): ${info.name};`);\n lines.push(' }');\n lines.push('');\n }\n\n if (hasClassDecorator(info, 'Builder')) {\n const builderName = builderClassName(info.name);\n lines.push(` namespace ${info.name} {`);\n lines.push(` export function builder(): ${builderName};`);\n lines.push(' }');\n lines.push('');\n }\n\n const augments: string[] = [];\n for (const f of info.fields) {\n if (wantsGetter(info, f)) {\n augments.push(` ${getterName(f.name)}(): ${f.type};`);\n }\n if (wantsSetter(info, f)) {\n const ret = hasClassDecorator(info, 'Accessors') ? info.name : 'void';\n augments.push(` ${setterName(f.name)}(value: ${f.type}): ${ret};`);\n }\n if (wantsWithMethods(info, f)) {\n augments.push(` ${withMethodName(f.name)}(value: ${f.type}): ${info.name};`);\n }\n if (fieldHasDecorator(f, 'Delegate')) {\n for (const method of getDelegateMethods(f)) {\n augments.push(` ${method}(...args: unknown[]): unknown;`);\n }\n }\n }\n\n if (wantsEquals(info)) {\n augments.push(` equals(other: ${info.name} | null | undefined): boolean;`);\n }\n if (wantsToString(info)) {\n augments.push(' toString(): string;');\n }\n\n if (hasClassDecorator(info, 'State')) {\n augments.push(' readonly state: string;');\n }\n if (hasClassDecorator(info, 'Memento')) {\n augments.push(' save(): unknown;');\n augments.push(' restore(snapshot: unknown): void;');\n }\n if (hasClassDecorator(info, 'Observable') || hasClassDecorator(info, 'Observer')) {\n augments.push(\n ' subscribe(key: string | symbol, listener: (next: unknown, prev: unknown) => void): () => void;',\n );\n }\n if (hasClassDecorator(info, 'ChainOfResponsibility')) {\n augments.push(' handle(context: unknown): boolean;');\n }\n if (hasClassDecorator(info, 'Iterable')) {\n augments.push(' [Symbol.iterator](): IterableIterator<unknown>;');\n }\n\n if (augments.length > 0) {\n lines.push(` interface ${info.name} {`);\n lines.push(...augments);\n lines.push(' }');\n }\n\n if (hasClassDecorator(info, 'Equals')) {\n lines.push(` namespace ${info.name} {`);\n lines.push(\n ` export function equals(a: ${info.name} | null | undefined, b: ${info.name} | null | undefined): boolean;`,\n );\n lines.push(' }');\n lines.push('');\n }\n }\n\n lines.push('}');\n return lines.join('\\n');\n}\n\n/** Standalone augmentation file (no sibling `.ts`, so TypeScript loads it). */\nexport function emitDeclarationShim(\n sourcePath: string,\n companionOutputPath: string,\n classes: readonly ClassInfo[],\n): string {\n const relSource = toImportPath(sourcePath, dirname(companionOutputPath));\n const moduleBlock = emitDeclarationModuleBlock(relSource, classes);\n return [\n '// Auto-generated type augmentation by lombok-typescript.',\n '// Do not edit. Regenerate via `lombok-ts generate`.',\n '',\n 'export {};',\n '',\n moduleBlock,\n '',\n ].join('\\n');\n}\n","import type { ClassInfo } from '../types.js';\nimport { fieldHasDecorator, getDelegateMethods } from './helpers.js';\n\nexport function emitDelegateFns(info: ClassInfo): string {\n const fns: string[] = [];\n\n for (const field of info.fields) {\n if (!fieldHasDecorator(field, 'Delegate')) continue;\n const methods = getDelegateMethods(field);\n for (const method of methods) {\n fns.push(\n `\nfunction ${info.name}_${method}(this: ${info.name}, ...args: unknown[]): unknown {\n const target = this.${field.name} as { ${method}: (...a: unknown[]) => unknown };\n return target.${method}(...args);\n}`.trim(),\n );\n }\n }\n\n return fns.join('\\n\\n');\n}\n\nexport function emitDelegateApplyAssignments(info: ClassInfo): string[] {\n const assignments: string[] = [];\n for (const field of info.fields) {\n if (!fieldHasDecorator(field, 'Delegate')) continue;\n for (const method of getDelegateMethods(field)) {\n assignments.push(`prototype.${method} = ${info.name}_${method};`);\n }\n }\n return assignments;\n}\n","import type { ClassInfo } from '../types.js';\nimport { equalsFields, hasClassDecorator, wantsEquals } from './helpers.js';\n\nexport function emitEqualsFn(info: ClassInfo): string {\n if (!wantsEquals(info)) return '';\n\n const fields = equalsFields(info);\n const checks = fields.map((f) => `this.${f.name} === other.${f.name}`).join(' &&\\n ');\n\n return `\nfunction ${info.name}_equals(this: ${info.name}, other: ${info.name} | null | undefined): boolean {\n if (other === null || other === undefined) return false;\n if (!(other instanceof (this.constructor as typeof ${info.name}))) return false;\n return ${checks || 'true'};\n}`.trim();\n}\n\nexport function emitEqualsStaticFn(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'Equals')) return '';\n\n return `\nfunction ${info.name}_equalsStatic(a: ${info.name} | null | undefined, b: ${info.name} | null | undefined): boolean {\n if (a === b) return true;\n if (a === null || a === undefined || b === null || b === undefined) return false;\n return a.equals(b);\n}`.trim();\n}\n","import type { ClassInfo, FieldInfo } from '../types.js';\nimport { wantsWithMethods, withMethodName } from './helpers.js';\n\nfunction emitSingleWithFn(info: ClassInfo, field: FieldInfo): string {\n const method = withMethodName(field.name);\n return `\nfunction ${info.name}_${method}(this: ${info.name}, value: ${field.type}): ${info.name} {\n const copy = Object.create(Object.getPrototypeOf(this)) as ${info.name};\n Object.assign(copy, this);\n copy.${field.name} = value;\n return copy;\n}`.trim();\n}\n\nexport function emitWithFns(info: ClassInfo): string {\n const fields = info.fields.filter((f) => wantsWithMethods(info, f));\n if (fields.length === 0) return '';\n return fields.map((f) => emitSingleWithFn(info, f)).join('\\n\\n');\n}\n","import { dirname, relative } from 'node:path';\nimport { validateAllClassCompositions } from '../../decorators/shared/composition.js';\nimport type { ClassInfo } from '../types.js';\nimport { emitAccessorApplyAssignments, emitAccessorFns } from './accessors-emit.js';\nimport { emitBuilderClass } from './builder.js';\nimport { emitDeclarationShim } from './declaration.js';\nimport { emitDelegateApplyAssignments, emitDelegateFns } from './delegate-emit.js';\nimport { emitEqualsFn, emitEqualsStaticFn } from './equals-emit.js';\nimport {\n builderClassName,\n hasClassDecorator,\n hasCodegenClassDecorator,\n toImportPath,\n visibleFields,\n wantsEquals,\n wantsToString,\n wantsWithMethods,\n withMethodName,\n} from './helpers.js';\nimport { emitWithFns } from './with-emit.js';\n\nfunction emitImports(classes: readonly ClassInfo[], importPath: string): string {\n const names = classes.filter(hasCodegenClassDecorator).map((c) => c.name);\n if (names.length === 0) return '';\n return `import { ${names.join(', ')} } from '${importPath}';\\n\\n`;\n}\n\nfunction emitToStringFn(info: ClassInfo): string {\n if (!wantsToString(info)) return '';\n const fields = visibleFields(info);\n const parts = fields.map((f) => `${f.name}=\\${String(this.${f.name})}`).join(', ');\n return `\nfunction ${info.name}_toString(this: ${info.name}): string {\n return \\`${info.name}(${parts})\\`;\n}`.trim();\n}\n\nfunction emitApplyMixin(info: ClassInfo): string {\n const assignments: string[] = [];\n\n assignments.push(...emitAccessorApplyAssignments(info));\n assignments.push(...emitDelegateApplyAssignments(info));\n\n if (wantsEquals(info)) {\n assignments.push(`prototype.equals = ${info.name}_equals;`);\n }\n\n if (wantsToString(info)) {\n assignments.push(`prototype.toString = ${info.name}_toString;`);\n }\n\n for (const field of info.fields) {\n if (wantsWithMethods(info, field)) {\n assignments.push(\n `prototype.${withMethodName(field.name)} = ${info.name}_${withMethodName(field.name)};`,\n );\n }\n }\n\n if (hasClassDecorator(info, 'Builder')) {\n const bName = builderClassName(info.name);\n assignments.push(\n `(ctor as typeof ${info.name} & { builder(): ${bName} }).builder = ${info.name}_builder;`,\n );\n }\n\n if (hasClassDecorator(info, 'Equals')) {\n assignments.push(\n `(ctor as typeof ${info.name} & { equals(a: ${info.name} | null | undefined, b: ${info.name} | null | undefined): boolean }).equals = ${info.name}_equalsStatic;`,\n );\n }\n\n if (assignments.length === 0) return '';\n\n return `\nexport function apply${info.name}Generated(ctor: typeof ${info.name}): void {\n const prototype = ctor.prototype as unknown as Record<string, unknown>;\n ${assignments.join('\\n ')}\n}`.trim();\n}\n\nfunction emitBuilderFn(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'Builder')) return '';\n const bName = builderClassName(info.name);\n return `\nfunction ${info.name}_builder(): ${bName} {\n return ${bName}.builder();\n}`.trim();\n}\n\nfunction emitClassCompanionBlocks(info: ClassInfo): string {\n const blocks: string[] = [];\n\n const builder = emitBuilderClass(info);\n if (builder) blocks.push(builder);\n\n const accessors = emitAccessorFns(info);\n if (accessors) blocks.push(accessors);\n\n const withFns = emitWithFns(info);\n if (withFns) blocks.push(withFns);\n\n const equalsFn = emitEqualsFn(info);\n if (equalsFn) blocks.push(equalsFn);\n\n const equalsStatic = emitEqualsStaticFn(info);\n if (equalsStatic) blocks.push(equalsStatic);\n\n const toString = emitToStringFn(info);\n if (toString) blocks.push(toString);\n\n const delegate = emitDelegateFns(info);\n if (delegate) blocks.push(delegate);\n\n const builderFn = emitBuilderFn(info);\n if (builderFn) blocks.push(builderFn);\n\n const apply = emitApplyMixin(info);\n if (apply) blocks.push(apply);\n\n return blocks.filter(Boolean).join('\\n\\n');\n}\n\nexport function emitCompanionFile(\n sourcePath: string,\n companionOutputPath: string,\n classes: readonly ClassInfo[],\n cwd: string,\n): { ts: string; dts: string } {\n validateAllClassCompositions(classes);\n\n const header = [\n '// Auto-generated by lombok-typescript.',\n '// Source: ' + relative(cwd, sourcePath).replace(/\\\\/g, '/'),\n '// Do not edit. Regenerate via `lombok-ts generate`.',\n '',\n ].join('\\n');\n\n const importPath = toImportPath(sourcePath, dirname(companionOutputPath));\n const blocks: string[] = [];\n\n for (const info of classes) {\n const chunk = emitClassCompanionBlocks(info);\n if (chunk) blocks.push(chunk);\n }\n\n const classesWithApply = classes.filter((c) => emitApplyMixin(c).length > 0);\n const applyAll =\n classesWithApply.length > 0\n ? `\\n\\nexport function applyAllGenerated(handlers: {\\n${classesWithApply\n .map((c) => ` ${c.name}: typeof ${c.name};`)\n .join('\\n')}\\n}): void {\\n${classesWithApply\n .map((c) => ` apply${c.name}Generated(handlers.${c.name});`)\n .join('\\n')}\\n}\\n`\n : '\\nexport {};\\n';\n\n const imports = emitImports(classes, importPath);\n const ts = header + imports + blocks.join('\\n\\n') + applyAll;\n const dts = emitDeclarationShim(sourcePath, companionOutputPath, classes);\n\n return { ts, dts };\n}\n\nexport { emitDeclarationShim };\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { dirname, relative, resolve } from 'node:path';\nimport { Project } from 'ts-morph';\nimport { analyzeFile } from './analyzer.js';\nimport { emitCompanionFile } from './emitters/index.js';\nimport type { ClassInfo, GeneratedFile, GeneratorOptions } from './types.js';\n\nconst DEFAULT_OPTIONS: GeneratorOptions = {\n outputDir: '.lombok',\n watch: false,\n include: ['src/**/*.ts'],\n exclude: ['node_modules', '**/*.test.ts', '**/*.spec.ts', 'dist', '.lombok'],\n tsConfigPath: 'tsconfig.json',\n};\n\n/**\n * Codegen entry point.\n *\n * Walks the user's source files, finds decorated classes, and writes a\n * companion stub file per source. The stub today is just a comment-form\n * summary of each class. Once real decorators land, this is where their\n * generated TypeScript output will go.\n */\nexport class CodeGenerator {\n readonly options: GeneratorOptions;\n\n constructor(options: Partial<GeneratorOptions> = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\n }\n\n /**\n * Run codegen against all matching source files.\n *\n * Uses the project's `tsConfigPath` if it exists, otherwise an in-memory\n * project that processes the configured globs. For each file with at least\n * one class, writes a companion stub to `<outputDir>/<rel-path>.lombok.ts`.\n */\n async generate(): Promise<GeneratedFile[]> {\n const project = this.createProject();\n const sourceFiles = project.getSourceFiles();\n const generated: GeneratedFile[] = [];\n\n for (const sourceFile of sourceFiles) {\n if (!this.shouldProcess(sourceFile.getFilePath())) continue;\n\n const classes = analyzeFile(sourceFile);\n if (classes.length === 0) continue;\n\n const sourcePath = sourceFile.getFilePath();\n const outputPath = this.computeOutputPath(sourcePath);\n const { ts, dts } = emitCompanionFile(sourcePath, outputPath, classes, process.cwd());\n const content = ts;\n\n this.writeOutput(outputPath, content);\n this.writeOutput(outputPath.replace(/\\.lombok\\.ts$/u, '.lombok.augment.d.ts'), dts);\n\n generated.push({\n sourcePath,\n outputPath,\n content,\n processedClasses: classes.map((c) => c.name),\n });\n }\n\n return generated;\n }\n\n /** Generate code for a single source file path. */\n async generateForFile(filePath: string): Promise<GeneratedFile | null> {\n const project = new Project({\n useInMemoryFileSystem: false,\n compilerOptions: { allowJs: false },\n });\n const sourceFile = project.addSourceFileAtPath(filePath);\n const classes = analyzeFile(sourceFile);\n if (classes.length === 0) return null;\n\n const outputPath = this.computeOutputPath(filePath);\n const { ts, dts } = emitCompanionFile(filePath, outputPath, classes, process.cwd());\n const content = ts;\n this.writeOutput(outputPath, content);\n this.writeOutput(outputPath.replace(/\\.lombok\\.ts$/u, '.lombok.augment.d.ts'), dts);\n\n return {\n sourcePath: filePath,\n outputPath,\n content,\n processedClasses: classes.map((c) => c.name),\n };\n }\n\n /** Watch for source changes and regenerate companion files. */\n async watch(\n options: { log?: (message: string) => void; signal?: AbortSignal } = {},\n ): Promise<void> {\n const log = options.log ?? ((msg: string) => console.info(msg));\n\n const generated = await this.generate();\n log(`Generated ${generated.length} companion file(s). Watching for changes…`);\n if (options.signal?.aborted) return;\n\n const { watch } = await import('node:fs');\n const watchers: ReturnType<typeof watch>[] = [];\n const debounceTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n const project = this.createProject();\n const paths = project\n .getSourceFiles()\n .map((sf) => sf.getFilePath())\n .filter((p) => this.shouldProcess(p));\n\n const scheduleRegenerate = (filePath: string) => {\n const existing = debounceTimers.get(filePath);\n if (existing) clearTimeout(existing);\n debounceTimers.set(\n filePath,\n setTimeout(() => {\n void this.generateForFile(filePath).then((result) => {\n if (result) {\n log(`Regenerated ${relative(process.cwd(), result.outputPath)}`);\n }\n });\n }, 100),\n );\n };\n\n for (const filePath of paths) {\n try {\n const watcher = watch(filePath, { persistent: true }, (event) => {\n if (event === 'change') scheduleRegenerate(filePath);\n });\n watchers.push(watcher);\n } catch {\n // File may have been removed; skip.\n }\n }\n\n await new Promise<void>((resolve) => {\n const onAbort = () => {\n for (const w of watchers) w.close();\n for (const t of debounceTimers.values()) clearTimeout(t);\n resolve();\n };\n if (options.signal) {\n if (options.signal.aborted) {\n onAbort();\n return;\n }\n options.signal.addEventListener('abort', onAbort, { once: true });\n return;\n }\n // CLI mode: keep process alive until externally terminated.\n });\n }\n\n // Internal helpers — previously threw for watch stub\n\n protected createProject(): Project {\n const tsConfig = resolve(this.options.tsConfigPath);\n if (existsSync(tsConfig)) {\n return new Project({ tsConfigFilePath: tsConfig });\n }\n const project = new Project({\n compilerOptions: { allowJs: false, target: 99 /* ESNext */ },\n });\n if (this.options.include.length > 0) {\n project.addSourceFilesAtPaths(this.options.include);\n }\n return project;\n }\n\n protected shouldProcess(filePath: string): boolean {\n const abs = filePath.replace(/\\\\/g, '/');\n const rel = relative(process.cwd(), filePath).replace(/\\\\/g, '/');\n\n const excluded = this.options.exclude.some(\n (pat) => matchesGlob(rel, pat) || matchesGlob(abs, pat),\n );\n if (excluded) return false;\n\n if (this.options.include.length === 0) return true;\n return this.options.include.some((pat) => matchesGlob(rel, pat) || matchesGlob(abs, pat));\n }\n\n protected computeOutputPath(sourcePath: string): string {\n const cwd = process.cwd();\n const rel = relative(cwd, sourcePath);\n const base = rel.replace(/\\.ts$/u, '.lombok.ts');\n return resolve(cwd, this.options.outputDir, base);\n }\n\n protected renderCompanion(_sourcePath: string, _classes: readonly ClassInfo[]): string {\n return 'export {};\\n';\n }\n\n protected writeOutput(outputPath: string, content: string): void {\n mkdirSync(dirname(outputPath), { recursive: true });\n writeFileSync(outputPath, content, 'utf8');\n }\n}\n\n/**\n * Minimal glob match. Handles `**`, `*`, no brace expansion. If we need more\n * we'd pull in `picomatch`, but this keeps the dep tree small.\n */\nfunction matchesGlob(filePath: string, pattern: string): boolean {\n const norm = filePath.replace(/\\\\/g, '/');\n const regex = new RegExp(\n '^' +\n pattern\n .replace(/[.+^$()|[\\]{}]/g, '\\\\$&')\n .replace(/\\*\\*\\//g, '__GLOBSTAR_SLASH__')\n .replace(/\\*\\*/g, '__GLOBSTAR__')\n .replace(/\\*/g, '[^/]*')\n .replace(/__GLOBSTAR_SLASH__/g, '(?:.*/)?')\n .replace(/__GLOBSTAR__/g, '.*') +\n '$',\n 'u',\n );\n return regex.test(norm);\n}\n","import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { bundleRequire } from 'bundle-require';\nimport type { LombokConfig } from '../config.js';\n\n/** Config file names searched in order; first match wins. */\nexport const CONFIG_FILE_NAMES = [\n 'lombok.config.ts',\n 'lombok.config.mts',\n 'lombok.config.cts',\n 'lombok.config.js',\n 'lombok.config.mjs',\n 'lombok.config.cjs',\n] as const;\n\n/** Find the lombok config file in `searchDir` (or cwd). */\nexport function findConfigFile(searchDir: string = process.cwd()): string | undefined {\n for (const name of CONFIG_FILE_NAMES) {\n const candidate = resolve(searchDir, name);\n if (existsSync(candidate)) return candidate;\n }\n return undefined;\n}\n\n/**\n * Load a lombok config via `bundle-require` (esbuild-powered). `lombok.config.ts`\n * works without any transpile step on the user's side. Returns `undefined` if\n * no config file exists.\n */\nexport async function loadConfig(searchDir: string = process.cwd()): Promise<\n | {\n filepath: string;\n config: LombokConfig;\n }\n | undefined\n> {\n const filepath = findConfigFile(searchDir);\n if (!filepath) return undefined;\n return loadConfigFromFile(filepath);\n}\n\n/** Load a config from a specific path. Used by tests and `--config <path>`. */\nexport async function loadConfigFromFile(filepath: string): Promise<{\n filepath: string;\n config: LombokConfig;\n}> {\n if (!existsSync(filepath)) {\n throw new Error(`Config file not found: ${filepath}`);\n }\n const { mod } = await bundleRequire({ filepath });\n const hasDefault = mod !== null && typeof mod === 'object' && 'default' in mod;\n const candidate = hasDefault ? (mod as { default: unknown }).default : mod;\n\n if (candidate === null || candidate === undefined || typeof candidate !== 'object') {\n throw new Error(\n `Config file ${filepath} did not export a valid config object. ` +\n `Make sure it has a default export of \\`defineConfig({...})\\`.`,\n );\n }\n return { filepath, config: candidate as LombokConfig };\n}\n","import { CodeGenerator } from '../../codegen/generator.js';\nimport type { GeneratorOptions } from '../../codegen/types.js';\nimport { loadConfig } from '../config-loader.js';\n\nexport interface GenerateCommandOptions {\n /** Where to look for `lombok.config.*`. Default `process.cwd()`. */\n cwd?: string;\n /** Overrides applied on top of the loaded config. */\n overrides?: Partial<GeneratorOptions>;\n /** Replace `console.info` for testability. */\n log?: (message: string) => void;\n}\n\n/** `lombok-ts generate`: one-shot codegen against the configured source files. */\nexport async function runGenerate(opts: GenerateCommandOptions = {}): Promise<{\n generatedCount: number;\n outputDir: string;\n}> {\n const log = opts.log ?? ((msg) => console.info(msg));\n\n const loaded = await loadConfig(opts.cwd);\n const codegenOpts: Partial<GeneratorOptions> = {\n ...(loaded?.config.codegen ?? {}),\n ...opts.overrides,\n };\n\n if (loaded) {\n log(`Loaded config from ${loaded.filepath}`);\n } else {\n log('No lombok.config.* file found, using defaults.');\n }\n\n const generator = new CodeGenerator(codegenOpts);\n const generated = await generator.generate();\n\n log(\n `Generated ${generated.length} companion file${generated.length === 1 ? '' : 's'} ` +\n `under ${generator.options.outputDir}/`,\n );\n for (const entry of generated) {\n log(` - ${entry.outputPath} (${entry.processedClasses.join(', ')})`);\n }\n\n return {\n generatedCount: generated.length,\n outputDir: generator.options.outputDir,\n };\n}\n","import { existsSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nconst TEMPLATE = `import { defineConfig } from 'lombok-typescript';\n\nexport default defineConfig({\n // Decorator backend: 'legacy' (experimentalDecorators), 'stage3' (ECMAScript),\n // or 'auto' to pick based on your tsconfig.\n backend: 'auto',\n\n // Codegen options used by \\`lombok-ts generate\\`.\n codegen: {\n outputDir: '.lombok',\n include: ['src/**/*.ts'],\n exclude: ['node_modules', '**/*.test.ts', '**/*.spec.ts'],\n tsConfigPath: 'tsconfig.json',\n watch: false,\n },\n});\n`;\n\nexport interface InitCommandOptions {\n cwd?: string;\n fileName?: string;\n /** Overwrite an existing config file. */\n force?: boolean;\n log?: (message: string) => void;\n}\n\n/** `lombok-ts init`: drop a starter `lombok.config.ts` in the cwd. */\nexport async function runInit(opts: InitCommandOptions = {}): Promise<{\n filepath: string;\n created: boolean;\n}> {\n const cwd = opts.cwd ?? process.cwd();\n const fileName = opts.fileName ?? 'lombok.config.ts';\n const filepath = resolve(cwd, fileName);\n const log = opts.log ?? ((msg) => console.info(msg));\n\n if (existsSync(filepath) && !opts.force) {\n log(`${fileName} already exists. Use --force to overwrite.`);\n return { filepath, created: false };\n }\n\n writeFileSync(filepath, TEMPLATE, 'utf8');\n log(`Created ${fileName}`);\n return { filepath, created: true };\n}\n","import { CodeGenerator } from '../../codegen/generator.js';\nimport type { GeneratorOptions } from '../../codegen/types.js';\nimport { loadConfig } from '../config-loader.js';\n\nexport interface WatchCommandOptions {\n cwd?: string;\n overrides?: Partial<GeneratorOptions>;\n log?: (message: string) => void;\n signal?: AbortSignal;\n}\n\n/** `lombok-ts watch` — regenerate companion files when sources change. */\nexport async function runWatch(opts: WatchCommandOptions = {}): Promise<void> {\n const log = opts.log ?? ((msg) => console.info(msg));\n const loaded = await loadConfig(opts.cwd);\n const codegenOpts: Partial<GeneratorOptions> = {\n ...(loaded?.config.codegen ?? {}),\n ...opts.overrides,\n watch: true,\n };\n\n if (loaded) {\n log(`Loaded config from ${loaded.filepath}`);\n } else {\n log('No lombok.config.* file found, using defaults.');\n }\n\n const gen = new CodeGenerator(codegenOpts);\n await gen.watch({ log, signal: opts.signal });\n}\n","import { resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { cac } from 'cac';\nimport { runClean } from './commands/clean.js';\nimport { runGenerate } from './commands/generate.js';\nimport { runInit } from './commands/init.js';\nimport { runWatch } from './commands/watch.js';\n\nexport const CLI_NAME = 'lombok-ts';\nexport const CLI_VERSION = '0.6.0-pre';\n\n/**\n * Build a fresh cac CLI instance. Exposed as a function (rather than a\n * top-level `.parse()`) so tests can construct one without auto-parsing\n * `process.argv`.\n */\nexport function buildCli() {\n const cli = cac(CLI_NAME);\n\n cli\n .command('generate', 'Run codegen once against the configured source files')\n .alias('gen')\n .option('--output-dir <dir>', 'Override codegen output directory')\n .option('--ts-config <path>', 'Path to tsconfig.json (default: tsconfig.json)')\n .action(async (options: { outputDir?: string; tsConfig?: string }) => {\n await runGenerate({\n overrides: {\n ...(options.outputDir ? { outputDir: options.outputDir } : {}),\n ...(options.tsConfig ? { tsConfigPath: options.tsConfig } : {}),\n },\n });\n });\n\n cli.command('watch', 'Watch source files and regenerate on change').action(async () => {\n await runWatch();\n });\n\n cli\n .command('init', 'Create a starter lombok.config.ts in the current directory')\n .option('--force', 'Overwrite an existing config file')\n .action(async (options: { force?: boolean }) => {\n await runInit({ force: options.force });\n });\n\n cli.command('clean', 'Remove generated files and build artifacts').action(async () => {\n await runClean();\n });\n\n cli.help();\n cli.version(CLI_VERSION);\n\n return cli;\n}\n\n/** Run the CLI with the provided argv (defaults to `process.argv`). */\nexport async function runCli(argv: string[] = process.argv): Promise<void> {\n const cli = buildCli();\n cli.parse(argv, { run: false });\n await cli.runMatchedCommand();\n}\n\n// Auto-execute when invoked as the bin entry.\nconst isMain =\n typeof process !== 'undefined' &&\n typeof import.meta.url === 'string' &&\n process.argv[1] !== undefined &&\n fileURLToPath(import.meta.url) === resolve(process.argv[1]);\n\nif (isMain) {\n runCli().catch((err: unknown) => {\n console.error(err);\n process.exit(1);\n });\n}\n"]}
1
+ {"version":3,"sources":["../../src/cli/commands/clean.ts","../../src/codegen/analyzer.ts","../../src/decorators/shared/composition.ts","../../src/codegen/emitters/helpers.ts","../../src/codegen/emitters/accessors-emit.ts","../../src/codegen/emitters/abstract-factory-emit.ts","../../src/codegen/emitters/builder.ts","../../src/codegen/emitters/declaration.ts","../../src/codegen/emitters/delegate-emit.ts","../../src/codegen/emitters/equals-emit.ts","../../src/codegen/emitters/with-emit.ts","../../src/codegen/emitters/template-method-emit.ts","../../src/codegen/emitters/visitor-emit.ts","../../src/codegen/emitters/index.ts","../../src/codegen/generator.ts","../../src/cli/config-loader.ts","../../src/cli/commands/generate.ts","../../src/cli/commands/init.ts","../../src/cli/commands/watch.ts","../../src/cli/index.ts"],"names":["resolve","existsSync","rmSync","SyntaxKind","relative","dirname","Project","mkdirSync","writeFileSync","bundleRequire","cac","fileURLToPath"],"mappings":"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","file":"index.cjs","sourcesContent":["import { existsSync, rmSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nexport interface CleanCommandOptions {\n cwd?: string;\n /** Directories (relative to cwd) to remove. Default `['.lombok', 'dist', 'coverage']`. */\n paths?: string[];\n log?: (message: string) => void;\n}\n\n/** `lombok-ts clean`: remove generated and build artifacts. */\nexport async function runClean(opts: CleanCommandOptions = {}): Promise<{\n removed: string[];\n skipped: string[];\n}> {\n const cwd = opts.cwd ?? process.cwd();\n const paths = opts.paths ?? ['.lombok', 'dist', 'coverage'];\n const log = opts.log ?? ((msg) => console.info(msg));\n\n const removed: string[] = [];\n const skipped: string[] = [];\n\n for (const rel of paths) {\n const abs = resolve(cwd, rel);\n if (existsSync(abs)) {\n rmSync(abs, { recursive: true, force: true });\n removed.push(rel);\n log(`Removed ${rel}/`);\n } else {\n skipped.push(rel);\n }\n }\n\n if (removed.length === 0) {\n log('Nothing to clean.');\n }\n\n return { removed, skipped };\n}\n","import {\n type ClassDeclaration,\n type Decorator,\n type MethodDeclaration,\n type ParameterDeclaration,\n Project,\n type PropertyDeclaration,\n type SourceFile,\n SyntaxKind,\n} from 'ts-morph';\nimport type { ClassInfo, DecoratorInfo, FieldInfo, MethodInfo, ParameterInfo } from './types.js';\n\n/**\n * Walk every class in `sourceFile` and return their decorator/field/method\n * shapes as plain data. No ts-morph references leak out.\n */\nexport function analyzeFile(sourceFile: SourceFile): ClassInfo[] {\n return sourceFile.getClasses().map((cls) => analyzeClassDeclaration(cls));\n}\n\n/** Find one class by name in the source file. Returns `undefined` if missing. */\nexport function analyzeClassByName(\n sourceFile: SourceFile,\n className: string,\n): ClassInfo | undefined {\n const cls = sourceFile.getClass(className);\n return cls ? analyzeClassDeclaration(cls) : undefined;\n}\n\n/** Parse a source string in an in-memory project and analyze every class in it. */\nexport function analyzeSourceString(sourceCode: string, fileName = 'analyze.ts'): ClassInfo[] {\n const project = new Project({ useInMemoryFileSystem: true });\n const sourceFile = project.createSourceFile(fileName, sourceCode);\n return analyzeFile(sourceFile);\n}\n\n/** Analyze a single named class in a source string. Throws if not found. */\nexport function analyzeClass(sourceCode: string, className: string): ClassInfo {\n const project = new Project({ useInMemoryFileSystem: true });\n const sourceFile = project.createSourceFile('analyze.ts', sourceCode);\n const result = analyzeClassByName(sourceFile, className);\n if (!result) {\n throw new Error(`No class named \"${className}\" found in source`);\n }\n return result;\n}\n\n// Internal walkers\n\nfunction analyzeClassDeclaration(cls: ClassDeclaration): ClassInfo {\n const name = cls.getName() ?? '<anonymous>';\n return {\n name,\n decorators: cls.getDecorators().map(toDecoratorInfo),\n fields: cls.getProperties().map(toFieldInfo),\n methods: cls.getMethods().map(toMethodInfo),\n };\n}\n\nfunction toDecoratorInfo(decorator: Decorator): DecoratorInfo {\n return {\n name: decorator.getName(),\n arguments: decorator.getArguments().map((arg) => arg.getText()),\n };\n}\n\nfunction toFieldInfo(prop: PropertyDeclaration): FieldInfo {\n const initializer = prop.getInitializer();\n return {\n name: prop.getName(),\n type: prop.getType().getText(prop),\n isOptional: prop.hasQuestionToken(),\n isReadonly: prop.isReadonly(),\n hasDefault: initializer !== undefined,\n defaultValue: initializer?.getText(),\n decorators: prop.getDecorators().map(toDecoratorInfo),\n };\n}\n\nfunction toMethodInfo(method: MethodDeclaration): MethodInfo {\n return {\n name: method.getName(),\n returnType: method.getReturnType().getText(method),\n parameters: method.getParameters().map(toParameterInfo),\n decorators: method.getDecorators().map(toDecoratorInfo),\n isAsync: method.isAsync(),\n isStatic: method.isStatic(),\n };\n}\n\nfunction toParameterInfo(param: ParameterDeclaration): ParameterInfo {\n return {\n name: param.getName(),\n type: param.getType().getText(param),\n isOptional:\n param.hasQuestionToken() ||\n param.hasInitializer() ||\n param.getDotDotDotToken()?.getKind() === SyntaxKind.DotDotDotToken,\n decorators: param.getDecorators().map(toDecoratorInfo),\n };\n}\n","import type { ClassInfo } from '../../codegen/types.js';\n\n/** Pairs of class decorators that must not appear on the same class. */\nexport const CONFLICTING_CLASS_DECORATOR_PAIRS: readonly (readonly [string, string])[] = [\n ['Data', 'Value'],\n];\n\nexport function classHasDecorator(info: Pick<ClassInfo, 'decorators'>, name: string): boolean {\n return info.decorators.some((d) => d.name === name);\n}\n\n/**\n * Enforce composition rules before codegen runs.\n * `@Data` and `@Value` are mutually exclusive (mutable vs immutable).\n */\nexport function validateClassComposition(info: ClassInfo): void {\n for (const [a, b] of CONFLICTING_CLASS_DECORATOR_PAIRS) {\n if (classHasDecorator(info, a) && classHasDecorator(info, b)) {\n throw new Error(`Class \"${info.name}\": @${a} and @${b} cannot be used together.`);\n }\n }\n}\n\nexport function validateAllClassCompositions(classes: readonly ClassInfo[]): void {\n for (const info of classes) {\n validateClassComposition(info);\n }\n}\n","import { relative } from 'node:path';\nimport type { ClassInfo, DecoratorInfo, FieldInfo } from '../types.js';\n\n/** ESM import path from `fromDir` to `sourcePath` (NodeNext requires a `.js` extension). */\nexport function toImportPath(sourcePath: string, fromDir: string): string {\n let rel = relative(fromDir, sourcePath).replace(/\\\\/g, '/');\n if (!rel.startsWith('.')) rel = './' + rel;\n return rel.replace(/\\.tsx?$/u, '.js');\n}\n\nconst CODEGEN_CLASS_DECORATORS = [\n 'Builder',\n 'Data',\n 'ToString',\n 'Value',\n 'Equals',\n 'With',\n 'TemplateMethod',\n 'AbstractFactory',\n 'Visitable',\n] as const;\n\nexport function hasCodegenClassDecorator(info: ClassInfo): boolean {\n return (\n CODEGEN_CLASS_DECORATORS.some((name) => hasClassDecorator(info, name)) ||\n info.fields.some(\n (f) =>\n fieldHasDecorator(f, 'Getter') ||\n fieldHasDecorator(f, 'Setter') ||\n fieldHasDecorator(f, 'With') ||\n fieldHasDecorator(f, 'Delegate'),\n )\n );\n}\n\nexport function hasClassDecorator(info: ClassInfo, name: string): boolean {\n return info.decorators.some((d) => d.name === name);\n}\n\nexport function fieldHasDecorator(field: FieldInfo, name: string): boolean {\n return field.decorators.some((d) => d.name === name);\n}\n\nexport function fieldExcludesToString(field: FieldInfo): boolean {\n return field.decorators.some(\n (d) => d.name === 'ToStringExclude' || d.name === 'ToString.Exclude',\n );\n}\n\nexport function fieldExcludesEquals(field: FieldInfo): boolean {\n return field.decorators.some((d) => d.name === 'EqualsExclude' || d.name === 'Equals.Exclude');\n}\n\nexport function visibleFields(info: ClassInfo): FieldInfo[] {\n if (\n hasClassDecorator(info, 'ToString') ||\n hasClassDecorator(info, 'Data') ||\n hasClassDecorator(info, 'Value')\n ) {\n return info.fields.filter((f) => !fieldExcludesToString(f));\n }\n return info.fields;\n}\n\nexport function equalsFields(info: ClassInfo): FieldInfo[] {\n return info.fields.filter((f) => !fieldExcludesEquals(f));\n}\n\nexport function getterName(fieldName: string): string {\n return `get${fieldName.charAt(0).toUpperCase()}${fieldName.slice(1)}`;\n}\n\nexport function setterName(fieldName: string): string {\n return `set${fieldName.charAt(0).toUpperCase()}${fieldName.slice(1)}`;\n}\n\nexport function withMethodName(fieldName: string): string {\n return `with${fieldName.charAt(0).toUpperCase()}${fieldName.slice(1)}`;\n}\n\nexport function builderClassName(className: string): string {\n return `${className}Builder`;\n}\n\nexport function hasDataOrValue(info: ClassInfo): boolean {\n return hasClassDecorator(info, 'Data') || hasClassDecorator(info, 'Value');\n}\n\nexport function wantsWithMethods(info: ClassInfo, field: FieldInfo): boolean {\n return (\n hasClassDecorator(info, 'Value') ||\n hasClassDecorator(info, 'With') ||\n fieldHasDecorator(field, 'With')\n );\n}\n\nexport function wantsGetter(info: ClassInfo, field: FieldInfo): boolean {\n return hasDataOrValue(info) || fieldHasDecorator(field, 'Getter');\n}\n\nexport function wantsSetter(info: ClassInfo, field: FieldInfo): boolean {\n if (hasClassDecorator(info, 'Value')) return false;\n if (hasClassDecorator(info, 'Data')) return !effectiveReadonly(info, field);\n return fieldHasDecorator(field, 'Setter');\n}\n\nexport function wantsEquals(info: ClassInfo): boolean {\n return (\n hasClassDecorator(info, 'Data') ||\n hasClassDecorator(info, 'Value') ||\n hasClassDecorator(info, 'Equals')\n );\n}\n\nexport function wantsToString(info: ClassInfo): boolean {\n return (\n hasClassDecorator(info, 'ToString') ||\n hasClassDecorator(info, 'Data') ||\n hasClassDecorator(info, 'Value')\n );\n}\n\nexport function effectiveReadonly(info: ClassInfo, field: FieldInfo): boolean {\n if (field.isReadonly) return true;\n const defaults = getFieldDefaultsOptions(info);\n return defaults?.makeFinal === true;\n}\n\nexport function getFieldDefaultsOptions(\n info: ClassInfo,\n): { level: string; makeFinal: boolean } | undefined {\n const dec = info.decorators.find((d) => d.name === 'FieldDefaults');\n if (!dec) return undefined;\n const [first] = dec.arguments;\n if (typeof first === 'string' && first.startsWith('{')) {\n try {\n const parsed = JSON.parse(first.replace(/(\\w+):/g, '\"$1\":').replace(/'/g, '\"')) as {\n level?: string;\n makeFinal?: boolean;\n };\n return {\n level: parsed.level ?? 'public',\n makeFinal: parsed.makeFinal ?? false,\n };\n } catch {\n return { level: 'public', makeFinal: false };\n }\n }\n return { level: 'public', makeFinal: false };\n}\n\nexport function hasFluentAccessors(info: ClassInfo): boolean {\n const dec = info.decorators.find((d) => d.name === 'Accessors');\n if (!dec) return false;\n const [first] = dec.arguments;\n if (typeof first === 'string') {\n return first.includes('chain') || first.includes('fluent');\n }\n return false;\n}\n\nexport function getDelegateMethods(field: FieldInfo): string[] {\n const dec = field.decorators.find((d) => d.name === 'Delegate');\n if (!dec || dec.arguments.length === 0) return [];\n if (dec.arguments.length === 1 && String(dec.arguments[0]).startsWith('[')) {\n try {\n return JSON.parse(String(dec.arguments[0]).replace(/'/g, '\"')) as string[];\n } catch {\n return [];\n }\n }\n return dec.arguments.map((a) => String(a).replace(/^['\"]|['\"]$/g, ''));\n}\n\nexport function parseDecoratorObjectArg(dec: DecoratorInfo | undefined): Record<string, unknown> {\n if (!dec || dec.arguments.length === 0) return {};\n const [first] = dec.arguments;\n if (typeof first !== 'string' || !first.startsWith('{')) return {};\n try {\n return JSON.parse(first.replace(/(\\w+):/g, '\"$1\":').replace(/'/g, '\"')) as Record<\n string,\n unknown\n >;\n } catch {\n return {};\n }\n}\n\nexport function parseDecoratorArrayArg(dec: DecoratorInfo | undefined): string[] {\n if (!dec || dec.arguments.length === 0) return [];\n const [first] = dec.arguments;\n const text = String(first);\n if (!text.startsWith('[')) return [];\n try {\n return JSON.parse(text.replace(/'/g, '\"')) as string[];\n } catch {\n return [];\n }\n}\n\nexport function getAbstractFactoryProducts(info: ClassInfo): string[] {\n const dec = info.decorators.find((d) => d.name === 'AbstractFactory');\n const fromArray = parseDecoratorArrayArg(dec);\n if (fromArray.length > 0) return fromArray;\n const obj = parseDecoratorObjectArg(dec);\n return Array.isArray(obj.products) ? (obj.products as string[]) : [];\n}\n\nexport function getTemplateMethodSteps(info: ClassInfo): string[] {\n const dec = info.decorators.find((d) => d.name === 'TemplateMethod');\n const obj = parseDecoratorObjectArg(dec);\n return Array.isArray(obj.steps) ? (obj.steps as string[]) : [];\n}\n\nexport function getTemplateMethodName(info: ClassInfo): string {\n const dec = info.decorators.find((d) => d.name === 'TemplateMethod');\n const obj = parseDecoratorObjectArg(dec);\n return typeof obj.template === 'string' ? obj.template : 'execute';\n}\n\nexport function getHookMethodNames(info: ClassInfo): string[] {\n return info.methods\n .filter((m) => m.decorators.some((d) => d.name === 'Hook'))\n .map((m) => {\n const hookDec = m.decorators.find((d) => d.name === 'Hook');\n const opts = parseDecoratorObjectArg(hookDec);\n return typeof opts.name === 'string' ? opts.name : m.name;\n });\n}\n\nexport function visitMethodName(className: string): string {\n return `visit${className}`;\n}\n","import type { ClassInfo, FieldInfo } from '../types.js';\nimport { getterName, hasFluentAccessors, setterName, wantsGetter, wantsSetter } from './helpers.js';\n\nfunction emitGetterFn(info: ClassInfo, field: FieldInfo): string {\n const g = getterName(field.name);\n return `\nfunction ${info.name}_${g}(this: ${info.name}): ${field.type} {\n return this.${field.name};\n}`.trim();\n}\n\nfunction emitSetterFn(info: ClassInfo, field: FieldInfo): string {\n const s = setterName(field.name);\n const fluent = hasFluentAccessors(info);\n const ret = fluent ? `return this;` : '';\n const returnType = fluent ? info.name : 'void';\n return `\nfunction ${info.name}_${s}(this: ${info.name}, value: ${field.type}): ${returnType} {\n this.${field.name} = value;\n ${ret}\n}`.trim();\n}\n\nexport function emitAccessorFns(info: ClassInfo): string {\n const fns: string[] = [];\n for (const field of info.fields) {\n if (wantsGetter(info, field)) {\n fns.push(emitGetterFn(info, field));\n }\n if (wantsSetter(info, field)) {\n fns.push(emitSetterFn(info, field));\n }\n }\n return fns.join('\\n\\n');\n}\n\nexport function emitAccessorApplyAssignments(info: ClassInfo): string[] {\n const assignments: string[] = [];\n for (const field of info.fields) {\n if (wantsGetter(info, field)) {\n assignments.push(\n `prototype.${getterName(field.name)} = ${info.name}_${getterName(field.name)};`,\n );\n }\n if (wantsSetter(info, field)) {\n assignments.push(\n `prototype.${setterName(field.name)} = ${info.name}_${setterName(field.name)};`,\n );\n }\n }\n return assignments;\n}\n","import type { ClassInfo } from '../types.js';\nimport { getAbstractFactoryProducts, hasClassDecorator } from './helpers.js';\n\nexport function emitAbstractFactoryMixin(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'AbstractFactory')) return '';\n\n const products = getAbstractFactoryProducts(info);\n if (products.length === 0) {\n throw new Error(`@AbstractFactory on ${info.name}: product list is empty`);\n }\n\n const methods = products\n .map((product) => {\n const methodName = `create${product}`;\n return ` abstract ${methodName}(): ${product};`;\n })\n .join('\\n');\n\n return `\nexport abstract class ${info.name}Mixin {\n${methods}\n}`.trim();\n}\n\nexport function emitAbstractFactoryApplyAssignment(_info: ClassInfo): string | undefined {\n return undefined;\n}\n","import type { ClassInfo } from '../types.js';\nimport { builderClassName, hasClassDecorator } from './helpers.js';\n\nexport function emitBuilderClass(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'Builder')) {\n return '';\n }\n\n const builderName = builderClassName(info.name);\n const fieldLines = info.fields.map((f) => {\n if (f.isOptional) {\n return ` private _${f.name}?: ${f.type};`;\n }\n return ` private _${f.name}!: ${f.type};`;\n });\n\n const setterMethods = info.fields.map((f) =>\n `\n ${f.name}(value: ${f.type}): ${builderName} {\n this._${f.name} = value;\n return this;\n }`.trim(),\n );\n\n return `\nexport class ${builderName} {\n${fieldLines.join('\\n')}\n\n static builder(): ${builderName} {\n return new ${builderName}();\n }\n\n${setterMethods.join('\\n\\n')}\n\n build(): ${info.name} {\n const instance = new ${info.name}();\n${info.fields.map((f) => ` instance.${f.name} = this._${f.name}${f.isOptional ? '' : '!'};`).join('\\n')}\n return instance;\n }\n}`.trim();\n}\n\nexport function emitBuilderStaticMethod(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'Builder')) return '';\n const builderName = builderClassName(info.name);\n return `\n static builder(): ${builderName} {\n return ${builderName}.builder();\n }`.trim();\n}\n","import { dirname } from 'node:path';\nimport type { ClassInfo } from '../types.js';\nimport {\n builderClassName,\n fieldHasDecorator,\n getterName,\n getDelegateMethods,\n getTemplateMethodName,\n hasClassDecorator,\n setterName,\n wantsEquals,\n wantsGetter,\n wantsSetter,\n wantsToString,\n wantsWithMethods,\n withMethodName,\n toImportPath,\n} from './helpers.js';\n\nfunction emitDeclarationModuleBlock(relSource: string, classes: readonly ClassInfo[]): string {\n const lines: string[] = [`declare module '${relSource}' {`];\n\n for (const info of classes) {\n if (hasClassDecorator(info, 'Builder')) {\n const builderName = builderClassName(info.name);\n lines.push(` export class ${builderName} {`);\n lines.push(` static builder(): ${builderName};`);\n for (const f of info.fields) {\n lines.push(` ${f.name}(value: ${f.type}): ${builderName};`);\n }\n lines.push(` build(): ${info.name};`);\n lines.push(' }');\n lines.push('');\n }\n\n if (hasClassDecorator(info, 'Builder')) {\n const builderName = builderClassName(info.name);\n lines.push(` namespace ${info.name} {`);\n lines.push(` export function builder(): ${builderName};`);\n lines.push(' }');\n lines.push('');\n }\n\n const augments: string[] = [];\n for (const f of info.fields) {\n if (wantsGetter(info, f)) {\n augments.push(` ${getterName(f.name)}(): ${f.type};`);\n }\n if (wantsSetter(info, f)) {\n const ret = hasClassDecorator(info, 'Accessors') ? info.name : 'void';\n augments.push(` ${setterName(f.name)}(value: ${f.type}): ${ret};`);\n }\n if (wantsWithMethods(info, f)) {\n augments.push(` ${withMethodName(f.name)}(value: ${f.type}): ${info.name};`);\n }\n if (fieldHasDecorator(f, 'Delegate')) {\n for (const method of getDelegateMethods(f)) {\n augments.push(` ${method}(...args: unknown[]): unknown;`);\n }\n }\n }\n\n if (wantsEquals(info)) {\n augments.push(` equals(other: ${info.name} | null | undefined): boolean;`);\n }\n if (wantsToString(info)) {\n augments.push(' toString(): string;');\n }\n\n if (hasClassDecorator(info, 'State')) {\n augments.push(' readonly state: string;');\n }\n if (hasClassDecorator(info, 'Memento')) {\n augments.push(' save(): unknown;');\n augments.push(' restore(snapshot: unknown): void;');\n }\n if (hasClassDecorator(info, 'Observable') || hasClassDecorator(info, 'Observer')) {\n augments.push(\n ' subscribe(key: string | symbol, listener: (next: unknown, prev: unknown) => void): () => void;',\n );\n }\n if (hasClassDecorator(info, 'ChainOfResponsibility')) {\n augments.push(' handle(context: unknown): boolean;');\n }\n if (hasClassDecorator(info, 'Iterable')) {\n augments.push(' [Symbol.iterator](): IterableIterator<unknown>;');\n }\n if (hasClassDecorator(info, 'Composite')) {\n augments.push(' add(child: object): void;');\n augments.push(' remove(child: object): void;');\n augments.push(' getChild(index: number): object;');\n augments.push(' getChildren(): readonly object[];');\n augments.push(' traverse(callback: (node: object) => void): void;');\n augments.push(' [Symbol.iterator](): IterableIterator<object>;');\n }\n if (hasClassDecorator(info, 'Wraps')) {\n const dec = info.decorators.find((d) => d.name === 'Wraps');\n const innerName = dec?.arguments[0] ? String(dec.arguments[0]) : 'unknown';\n augments.push(` protected inner: ${innerName};`);\n }\n if (hasClassDecorator(info, 'Visitable')) {\n augments.push(' accept(visitor: unknown): unknown;');\n }\n if (hasClassDecorator(info, 'TemplateMethod')) {\n augments.push(` ${getTemplateMethodName(info)}(): void;`);\n }\n\n if (augments.length > 0) {\n lines.push(` interface ${info.name} {`);\n lines.push(...augments);\n lines.push(' }');\n }\n\n if (hasClassDecorator(info, 'Equals')) {\n lines.push(` namespace ${info.name} {`);\n lines.push(\n ` export function equals(a: ${info.name} | null | undefined, b: ${info.name} | null | undefined): boolean;`,\n );\n lines.push(' }');\n lines.push('');\n }\n }\n\n lines.push('}');\n return lines.join('\\n');\n}\n\n/** Standalone augmentation file (no sibling `.ts`, so TypeScript loads it). */\nexport function emitDeclarationShim(\n sourcePath: string,\n companionOutputPath: string,\n classes: readonly ClassInfo[],\n): string {\n const relSource = toImportPath(sourcePath, dirname(companionOutputPath));\n const moduleBlock = emitDeclarationModuleBlock(relSource, classes);\n return [\n '// Auto-generated type augmentation by lombok-typescript.',\n '// Do not edit. Regenerate via `lombok-ts generate`.',\n '',\n 'export {};',\n '',\n moduleBlock,\n '',\n ].join('\\n');\n}\n","import type { ClassInfo } from '../types.js';\nimport { fieldHasDecorator, getDelegateMethods } from './helpers.js';\n\nexport function emitDelegateFns(info: ClassInfo): string {\n const fns: string[] = [];\n\n for (const field of info.fields) {\n if (!fieldHasDecorator(field, 'Delegate')) continue;\n const methods = getDelegateMethods(field);\n for (const method of methods) {\n fns.push(\n `\nfunction ${info.name}_${method}(this: ${info.name}, ...args: unknown[]): unknown {\n const target = this.${field.name} as { ${method}: (...a: unknown[]) => unknown };\n return target.${method}(...args);\n}`.trim(),\n );\n }\n }\n\n return fns.join('\\n\\n');\n}\n\nexport function emitDelegateApplyAssignments(info: ClassInfo): string[] {\n const assignments: string[] = [];\n for (const field of info.fields) {\n if (!fieldHasDecorator(field, 'Delegate')) continue;\n for (const method of getDelegateMethods(field)) {\n assignments.push(`prototype.${method} = ${info.name}_${method};`);\n }\n }\n return assignments;\n}\n","import type { ClassInfo } from '../types.js';\nimport { equalsFields, hasClassDecorator, wantsEquals } from './helpers.js';\n\nexport function emitEqualsFn(info: ClassInfo): string {\n if (!wantsEquals(info)) return '';\n\n const fields = equalsFields(info);\n const checks = fields.map((f) => `this.${f.name} === other.${f.name}`).join(' &&\\n ');\n\n return `\nfunction ${info.name}_equals(this: ${info.name}, other: ${info.name} | null | undefined): boolean {\n if (other === null || other === undefined) return false;\n if (!(other instanceof (this.constructor as typeof ${info.name}))) return false;\n return ${checks || 'true'};\n}`.trim();\n}\n\nexport function emitEqualsStaticFn(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'Equals')) return '';\n\n return `\nfunction ${info.name}_equalsStatic(a: ${info.name} | null | undefined, b: ${info.name} | null | undefined): boolean {\n if (a === b) return true;\n if (a === null || a === undefined || b === null || b === undefined) return false;\n return a.equals(b);\n}`.trim();\n}\n","import type { ClassInfo, FieldInfo } from '../types.js';\nimport { wantsWithMethods, withMethodName } from './helpers.js';\n\nfunction emitSingleWithFn(info: ClassInfo, field: FieldInfo): string {\n const method = withMethodName(field.name);\n return `\nfunction ${info.name}_${method}(this: ${info.name}, value: ${field.type}): ${info.name} {\n const copy = Object.create(Object.getPrototypeOf(this)) as ${info.name};\n Object.assign(copy, this);\n copy.${field.name} = value;\n return copy;\n}`.trim();\n}\n\nexport function emitWithFns(info: ClassInfo): string {\n const fields = info.fields.filter((f) => wantsWithMethods(info, f));\n if (fields.length === 0) return '';\n return fields.map((f) => emitSingleWithFn(info, f)).join('\\n\\n');\n}\n","import type { ClassInfo } from '../types.js';\nimport {\n getHookMethodNames,\n getTemplateMethodName,\n getTemplateMethodSteps,\n hasClassDecorator,\n} from './helpers.js';\n\nexport function emitTemplateMethodFn(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'TemplateMethod')) return '';\n\n const templateName = getTemplateMethodName(info);\n const steps = getTemplateMethodSteps(info);\n const hookNames = getHookMethodNames(info);\n\n for (const step of steps) {\n if (!hookNames.includes(step)) {\n throw new Error(`@TemplateMethod on ${info.name}: missing @Hook method for step \"${step}\"`);\n }\n }\n\n const calls = steps.map((step) => `this.${step}();`).join(' ');\n return `\nfunction ${info.name}_${templateName}(this: ${info.name}): void {\n ${calls}\n}`.trim();\n}\n\nexport function emitTemplateMethodApplyAssignment(info: ClassInfo): string | undefined {\n if (!hasClassDecorator(info, 'TemplateMethod')) return undefined;\n const templateName = getTemplateMethodName(info);\n return `prototype.${templateName} = ${info.name}_${templateName};`;\n}\n","import type { ClassInfo } from '../types.js';\nimport { hasClassDecorator, visitMethodName } from './helpers.js';\n\nexport function emitVisitableAcceptFn(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'Visitable')) return '';\n\n const methodName = visitMethodName(info.name);\n return `\nfunction ${info.name}_accept(this: ${info.name}, visitor: unknown): unknown {\n const handler = (visitor as Record<string, unknown>)['${methodName}'];\n if (typeof handler !== 'function') {\n throw new Error(\\`Visitor missing ${methodName} for ${info.name}\\`);\n }\n return handler.call(visitor, this);\n}`.trim();\n}\n\nexport function emitVisitableAcceptApplyAssignment(info: ClassInfo): string | undefined {\n if (!hasClassDecorator(info, 'Visitable')) return undefined;\n return `prototype.accept = ${info.name}_accept;`;\n}\n","import { dirname, relative } from 'node:path';\nimport { validateAllClassCompositions } from '../../decorators/shared/composition.js';\nimport type { ClassInfo } from '../types.js';\nimport { emitAccessorApplyAssignments, emitAccessorFns } from './accessors-emit.js';\nimport { emitAbstractFactoryMixin } from './abstract-factory-emit.js';\nimport { emitBuilderClass } from './builder.js';\nimport { emitDeclarationShim } from './declaration.js';\nimport { emitDelegateApplyAssignments, emitDelegateFns } from './delegate-emit.js';\nimport { emitEqualsFn, emitEqualsStaticFn } from './equals-emit.js';\nimport {\n builderClassName,\n getAbstractFactoryProducts,\n hasClassDecorator,\n hasCodegenClassDecorator,\n toImportPath,\n visibleFields,\n wantsEquals,\n wantsToString,\n wantsWithMethods,\n withMethodName,\n} from './helpers.js';\nimport { emitWithFns } from './with-emit.js';\nimport { emitTemplateMethodApplyAssignment, emitTemplateMethodFn } from './template-method-emit.js';\nimport { emitVisitableAcceptApplyAssignment, emitVisitableAcceptFn } from './visitor-emit.js';\n\nfunction emitImports(classes: readonly ClassInfo[], importPath: string): string {\n const names = classes.filter(hasCodegenClassDecorator).map((c) => c.name);\n const productTypes = new Set<string>();\n for (const info of classes) {\n if (hasClassDecorator(info, 'AbstractFactory')) {\n for (const product of getAbstractFactoryProducts(info)) {\n productTypes.add(product);\n }\n }\n }\n const importLines: string[] = [];\n if (names.length > 0) {\n importLines.push(`import { ${names.join(', ')} } from '${importPath}';`);\n }\n const extraProducts = [...productTypes].filter((p) => !names.includes(p));\n if (extraProducts.length > 0) {\n importLines.push(`import type { ${extraProducts.join(', ')} } from '${importPath}';`);\n }\n if (importLines.length === 0) return '';\n return importLines.join('\\n') + '\\n\\n';\n}\n\nfunction emitToStringFn(info: ClassInfo): string {\n if (!wantsToString(info)) return '';\n const fields = visibleFields(info);\n const parts = fields.map((f) => `${f.name}=\\${String(this.${f.name})}`).join(', ');\n return `\nfunction ${info.name}_toString(this: ${info.name}): string {\n return \\`${info.name}(${parts})\\`;\n}`.trim();\n}\n\nfunction emitApplyMixin(info: ClassInfo): string {\n const assignments: string[] = [];\n\n assignments.push(...emitAccessorApplyAssignments(info));\n assignments.push(...emitDelegateApplyAssignments(info));\n\n if (wantsEquals(info)) {\n assignments.push(`prototype.equals = ${info.name}_equals;`);\n }\n\n if (wantsToString(info)) {\n assignments.push(`prototype.toString = ${info.name}_toString;`);\n }\n\n for (const field of info.fields) {\n if (wantsWithMethods(info, field)) {\n assignments.push(\n `prototype.${withMethodName(field.name)} = ${info.name}_${withMethodName(field.name)};`,\n );\n }\n }\n\n if (hasClassDecorator(info, 'Builder')) {\n const bName = builderClassName(info.name);\n assignments.push(\n `(ctor as typeof ${info.name} & { builder(): ${bName} }).builder = ${info.name}_builder;`,\n );\n }\n\n if (hasClassDecorator(info, 'Equals')) {\n assignments.push(\n `(ctor as typeof ${info.name} & { equals(a: ${info.name} | null | undefined, b: ${info.name} | null | undefined): boolean }).equals = ${info.name}_equalsStatic;`,\n );\n }\n\n const templateApply = emitTemplateMethodApplyAssignment(info);\n if (templateApply) assignments.push(templateApply);\n\n const visitableApply = emitVisitableAcceptApplyAssignment(info);\n if (visitableApply) assignments.push(visitableApply);\n\n if (assignments.length === 0) return '';\n\n return `\nexport function apply${info.name}Generated(ctor: typeof ${info.name}): void {\n const prototype = ctor.prototype as unknown as Record<string, unknown>;\n ${assignments.join('\\n ')}\n}`.trim();\n}\n\nfunction emitBuilderFn(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'Builder')) return '';\n const bName = builderClassName(info.name);\n return `\nfunction ${info.name}_builder(): ${bName} {\n return ${bName}.builder();\n}`.trim();\n}\n\nfunction emitClassCompanionBlocks(info: ClassInfo): string {\n const blocks: string[] = [];\n\n const builder = emitBuilderClass(info);\n if (builder) blocks.push(builder);\n\n const accessors = emitAccessorFns(info);\n if (accessors) blocks.push(accessors);\n\n const withFns = emitWithFns(info);\n if (withFns) blocks.push(withFns);\n\n const equalsFn = emitEqualsFn(info);\n if (equalsFn) blocks.push(equalsFn);\n\n const equalsStatic = emitEqualsStaticFn(info);\n if (equalsStatic) blocks.push(equalsStatic);\n\n const toString = emitToStringFn(info);\n if (toString) blocks.push(toString);\n\n const delegate = emitDelegateFns(info);\n if (delegate) blocks.push(delegate);\n\n const builderFn = emitBuilderFn(info);\n if (builderFn) blocks.push(builderFn);\n\n const templateMethod = emitTemplateMethodFn(info);\n if (templateMethod) blocks.push(templateMethod);\n\n const visitableAccept = emitVisitableAcceptFn(info);\n if (visitableAccept) blocks.push(visitableAccept);\n\n const abstractFactory = emitAbstractFactoryMixin(info);\n if (abstractFactory) blocks.push(abstractFactory);\n\n const apply = emitApplyMixin(info);\n if (apply) blocks.push(apply);\n\n return blocks.filter(Boolean).join('\\n\\n');\n}\n\nexport function emitCompanionFile(\n sourcePath: string,\n companionOutputPath: string,\n classes: readonly ClassInfo[],\n cwd: string,\n): { ts: string; dts: string } {\n validateAllClassCompositions(classes);\n\n const header = [\n '// Auto-generated by lombok-typescript.',\n '// Source: ' + relative(cwd, sourcePath).replace(/\\\\/g, '/'),\n '// Do not edit. Regenerate via `lombok-ts generate`.',\n '',\n ].join('\\n');\n\n const importPath = toImportPath(sourcePath, dirname(companionOutputPath));\n const blocks: string[] = [];\n\n for (const info of classes) {\n const chunk = emitClassCompanionBlocks(info);\n if (chunk) blocks.push(chunk);\n }\n\n const classesWithApply = classes.filter((c) => emitApplyMixin(c).length > 0);\n const applyAll =\n classesWithApply.length > 0\n ? `\\n\\nexport function applyAllGenerated(handlers: {\\n${classesWithApply\n .map((c) => ` ${c.name}: typeof ${c.name};`)\n .join('\\n')}\\n}): void {\\n${classesWithApply\n .map((c) => ` apply${c.name}Generated(handlers.${c.name});`)\n .join('\\n')}\\n}\\n`\n : '\\nexport {};\\n';\n\n const imports = emitImports(classes, importPath);\n const ts = header + imports + blocks.join('\\n\\n') + applyAll;\n const dts = emitDeclarationShim(sourcePath, companionOutputPath, classes);\n\n return { ts, dts };\n}\n\nexport { emitDeclarationShim };\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { dirname, relative, resolve } from 'node:path';\nimport { Project } from 'ts-morph';\nimport { analyzeFile } from './analyzer.js';\nimport { emitCompanionFile } from './emitters/index.js';\nimport type { ClassInfo, GeneratedFile, GeneratorOptions } from './types.js';\n\nconst DEFAULT_OPTIONS: GeneratorOptions = {\n outputDir: '.lombok',\n watch: false,\n include: ['src/**/*.ts'],\n exclude: ['node_modules', '**/*.test.ts', '**/*.spec.ts', 'dist', '.lombok'],\n tsConfigPath: 'tsconfig.json',\n};\n\n/**\n * Codegen entry point.\n *\n * Walks the user's source files, finds decorated classes, and writes a\n * companion stub file per source. The stub today is just a comment-form\n * summary of each class. Once real decorators land, this is where their\n * generated TypeScript output will go.\n */\nexport class CodeGenerator {\n readonly options: GeneratorOptions;\n\n constructor(options: Partial<GeneratorOptions> = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\n }\n\n /**\n * Run codegen against all matching source files.\n *\n * Uses the project's `tsConfigPath` if it exists, otherwise an in-memory\n * project that processes the configured globs. For each file with at least\n * one class, writes a companion stub to `<outputDir>/<rel-path>.lombok.ts`.\n */\n async generate(): Promise<GeneratedFile[]> {\n const project = this.createProject();\n const sourceFiles = project.getSourceFiles();\n const generated: GeneratedFile[] = [];\n\n for (const sourceFile of sourceFiles) {\n if (!this.shouldProcess(sourceFile.getFilePath())) continue;\n\n const classes = analyzeFile(sourceFile);\n if (classes.length === 0) continue;\n\n const sourcePath = sourceFile.getFilePath();\n const outputPath = this.computeOutputPath(sourcePath);\n const { ts, dts } = emitCompanionFile(sourcePath, outputPath, classes, process.cwd());\n const content = ts;\n\n this.writeOutput(outputPath, content);\n this.writeOutput(outputPath.replace(/\\.lombok\\.ts$/u, '.lombok.augment.d.ts'), dts);\n\n generated.push({\n sourcePath,\n outputPath,\n content,\n processedClasses: classes.map((c) => c.name),\n });\n }\n\n return generated;\n }\n\n /** Generate code for a single source file path. */\n async generateForFile(filePath: string): Promise<GeneratedFile | null> {\n const project = new Project({\n useInMemoryFileSystem: false,\n compilerOptions: { allowJs: false },\n });\n const sourceFile = project.addSourceFileAtPath(filePath);\n const classes = analyzeFile(sourceFile);\n if (classes.length === 0) return null;\n\n const outputPath = this.computeOutputPath(filePath);\n const { ts, dts } = emitCompanionFile(filePath, outputPath, classes, process.cwd());\n const content = ts;\n this.writeOutput(outputPath, content);\n this.writeOutput(outputPath.replace(/\\.lombok\\.ts$/u, '.lombok.augment.d.ts'), dts);\n\n return {\n sourcePath: filePath,\n outputPath,\n content,\n processedClasses: classes.map((c) => c.name),\n };\n }\n\n /** Watch for source changes and regenerate companion files. */\n async watch(\n options: { log?: (message: string) => void; signal?: AbortSignal } = {},\n ): Promise<void> {\n const log = options.log ?? ((msg: string) => console.info(msg));\n\n const generated = await this.generate();\n log(`Generated ${generated.length} companion file(s). Watching for changes…`);\n if (options.signal?.aborted) return;\n\n const { watch } = await import('node:fs');\n const watchers: ReturnType<typeof watch>[] = [];\n const debounceTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n const project = this.createProject();\n const paths = project\n .getSourceFiles()\n .map((sf) => sf.getFilePath())\n .filter((p) => this.shouldProcess(p));\n\n const scheduleRegenerate = (filePath: string) => {\n const existing = debounceTimers.get(filePath);\n if (existing) clearTimeout(existing);\n debounceTimers.set(\n filePath,\n setTimeout(() => {\n void this.generateForFile(filePath).then((result) => {\n if (result) {\n log(`Regenerated ${relative(process.cwd(), result.outputPath)}`);\n }\n });\n }, 100),\n );\n };\n\n for (const filePath of paths) {\n try {\n const watcher = watch(filePath, { persistent: true }, (event) => {\n if (event === 'change') scheduleRegenerate(filePath);\n });\n watchers.push(watcher);\n } catch {\n // File may have been removed; skip.\n }\n }\n\n await new Promise<void>((resolve) => {\n const onAbort = () => {\n for (const w of watchers) w.close();\n for (const t of debounceTimers.values()) clearTimeout(t);\n resolve();\n };\n if (options.signal) {\n if (options.signal.aborted) {\n onAbort();\n return;\n }\n options.signal.addEventListener('abort', onAbort, { once: true });\n return;\n }\n // CLI mode: keep process alive until externally terminated.\n });\n }\n\n // Internal helpers — previously threw for watch stub\n\n protected createProject(): Project {\n const tsConfig = resolve(this.options.tsConfigPath);\n if (existsSync(tsConfig)) {\n return new Project({ tsConfigFilePath: tsConfig });\n }\n const project = new Project({\n compilerOptions: { allowJs: false, target: 99 /* ESNext */ },\n });\n if (this.options.include.length > 0) {\n project.addSourceFilesAtPaths(this.options.include);\n }\n return project;\n }\n\n protected shouldProcess(filePath: string): boolean {\n const abs = filePath.replace(/\\\\/g, '/');\n const rel = relative(process.cwd(), filePath).replace(/\\\\/g, '/');\n\n const excluded = this.options.exclude.some(\n (pat) => matchesGlob(rel, pat) || matchesGlob(abs, pat),\n );\n if (excluded) return false;\n\n if (this.options.include.length === 0) return true;\n return this.options.include.some((pat) => matchesGlob(rel, pat) || matchesGlob(abs, pat));\n }\n\n protected computeOutputPath(sourcePath: string): string {\n const cwd = process.cwd();\n const rel = relative(cwd, sourcePath);\n const base = rel.replace(/\\.ts$/u, '.lombok.ts');\n return resolve(cwd, this.options.outputDir, base);\n }\n\n protected renderCompanion(_sourcePath: string, _classes: readonly ClassInfo[]): string {\n return 'export {};\\n';\n }\n\n protected writeOutput(outputPath: string, content: string): void {\n mkdirSync(dirname(outputPath), { recursive: true });\n writeFileSync(outputPath, content, 'utf8');\n }\n}\n\n/**\n * Minimal glob match. Handles `**`, `*`, no brace expansion. If we need more\n * we'd pull in `picomatch`, but this keeps the dep tree small.\n */\nfunction matchesGlob(filePath: string, pattern: string): boolean {\n const norm = filePath.replace(/\\\\/g, '/');\n const regex = new RegExp(\n '^' +\n pattern\n .replace(/[.+^$()|[\\]{}]/g, '\\\\$&')\n .replace(/\\*\\*\\//g, '__GLOBSTAR_SLASH__')\n .replace(/\\*\\*/g, '__GLOBSTAR__')\n .replace(/\\*/g, '[^/]*')\n .replace(/__GLOBSTAR_SLASH__/g, '(?:.*/)?')\n .replace(/__GLOBSTAR__/g, '.*') +\n '$',\n 'u',\n );\n return regex.test(norm);\n}\n","import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { bundleRequire } from 'bundle-require';\nimport type { LombokConfig } from '../config.js';\n\n/** Config file names searched in order; first match wins. */\nexport const CONFIG_FILE_NAMES = [\n 'lombok.config.ts',\n 'lombok.config.mts',\n 'lombok.config.cts',\n 'lombok.config.js',\n 'lombok.config.mjs',\n 'lombok.config.cjs',\n] as const;\n\n/** Find the lombok config file in `searchDir` (or cwd). */\nexport function findConfigFile(searchDir: string = process.cwd()): string | undefined {\n for (const name of CONFIG_FILE_NAMES) {\n const candidate = resolve(searchDir, name);\n if (existsSync(candidate)) return candidate;\n }\n return undefined;\n}\n\n/**\n * Load a lombok config via `bundle-require` (esbuild-powered). `lombok.config.ts`\n * works without any transpile step on the user's side. Returns `undefined` if\n * no config file exists.\n */\nexport async function loadConfig(searchDir: string = process.cwd()): Promise<\n | {\n filepath: string;\n config: LombokConfig;\n }\n | undefined\n> {\n const filepath = findConfigFile(searchDir);\n if (!filepath) return undefined;\n return loadConfigFromFile(filepath);\n}\n\n/** Load a config from a specific path. Used by tests and `--config <path>`. */\nexport async function loadConfigFromFile(filepath: string): Promise<{\n filepath: string;\n config: LombokConfig;\n}> {\n if (!existsSync(filepath)) {\n throw new Error(`Config file not found: ${filepath}`);\n }\n const { mod } = await bundleRequire({ filepath });\n const hasDefault = mod !== null && typeof mod === 'object' && 'default' in mod;\n const candidate = hasDefault ? (mod as { default: unknown }).default : mod;\n\n if (candidate === null || candidate === undefined || typeof candidate !== 'object') {\n throw new Error(\n `Config file ${filepath} did not export a valid config object. ` +\n `Make sure it has a default export of \\`defineConfig({...})\\`.`,\n );\n }\n return { filepath, config: candidate as LombokConfig };\n}\n","import { CodeGenerator } from '../../codegen/generator.js';\nimport type { GeneratorOptions } from '../../codegen/types.js';\nimport { loadConfig } from '../config-loader.js';\n\nexport interface GenerateCommandOptions {\n /** Where to look for `lombok.config.*`. Default `process.cwd()`. */\n cwd?: string;\n /** Overrides applied on top of the loaded config. */\n overrides?: Partial<GeneratorOptions>;\n /** Replace `console.info` for testability. */\n log?: (message: string) => void;\n}\n\n/** `lombok-ts generate`: one-shot codegen against the configured source files. */\nexport async function runGenerate(opts: GenerateCommandOptions = {}): Promise<{\n generatedCount: number;\n outputDir: string;\n}> {\n const log = opts.log ?? ((msg) => console.info(msg));\n\n const loaded = await loadConfig(opts.cwd);\n const codegenOpts: Partial<GeneratorOptions> = {\n ...(loaded?.config.codegen ?? {}),\n ...opts.overrides,\n };\n\n if (loaded) {\n log(`Loaded config from ${loaded.filepath}`);\n } else {\n log('No lombok.config.* file found, using defaults.');\n }\n\n const generator = new CodeGenerator(codegenOpts);\n const generated = await generator.generate();\n\n log(\n `Generated ${generated.length} companion file${generated.length === 1 ? '' : 's'} ` +\n `under ${generator.options.outputDir}/`,\n );\n for (const entry of generated) {\n log(` - ${entry.outputPath} (${entry.processedClasses.join(', ')})`);\n }\n\n return {\n generatedCount: generated.length,\n outputDir: generator.options.outputDir,\n };\n}\n","import { existsSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nconst TEMPLATE = `import { defineConfig } from 'lombok-typescript';\n\nexport default defineConfig({\n // Decorator backend: 'legacy' (experimentalDecorators), 'stage3' (ECMAScript),\n // or 'auto' to pick based on your tsconfig.\n backend: 'auto',\n\n // Codegen options used by \\`lombok-ts generate\\`.\n codegen: {\n outputDir: '.lombok',\n include: ['src/**/*.ts'],\n exclude: ['node_modules', '**/*.test.ts', '**/*.spec.ts'],\n tsConfigPath: 'tsconfig.json',\n watch: false,\n },\n});\n`;\n\nexport interface InitCommandOptions {\n cwd?: string;\n fileName?: string;\n /** Overwrite an existing config file. */\n force?: boolean;\n log?: (message: string) => void;\n}\n\n/** `lombok-ts init`: drop a starter `lombok.config.ts` in the cwd. */\nexport async function runInit(opts: InitCommandOptions = {}): Promise<{\n filepath: string;\n created: boolean;\n}> {\n const cwd = opts.cwd ?? process.cwd();\n const fileName = opts.fileName ?? 'lombok.config.ts';\n const filepath = resolve(cwd, fileName);\n const log = opts.log ?? ((msg) => console.info(msg));\n\n if (existsSync(filepath) && !opts.force) {\n log(`${fileName} already exists. Use --force to overwrite.`);\n return { filepath, created: false };\n }\n\n writeFileSync(filepath, TEMPLATE, 'utf8');\n log(`Created ${fileName}`);\n return { filepath, created: true };\n}\n","import { CodeGenerator } from '../../codegen/generator.js';\nimport type { GeneratorOptions } from '../../codegen/types.js';\nimport { loadConfig } from '../config-loader.js';\n\nexport interface WatchCommandOptions {\n cwd?: string;\n overrides?: Partial<GeneratorOptions>;\n log?: (message: string) => void;\n signal?: AbortSignal;\n}\n\n/** `lombok-ts watch` — regenerate companion files when sources change. */\nexport async function runWatch(opts: WatchCommandOptions = {}): Promise<void> {\n const log = opts.log ?? ((msg) => console.info(msg));\n const loaded = await loadConfig(opts.cwd);\n const codegenOpts: Partial<GeneratorOptions> = {\n ...(loaded?.config.codegen ?? {}),\n ...opts.overrides,\n watch: true,\n };\n\n if (loaded) {\n log(`Loaded config from ${loaded.filepath}`);\n } else {\n log('No lombok.config.* file found, using defaults.');\n }\n\n const gen = new CodeGenerator(codegenOpts);\n await gen.watch({ log, signal: opts.signal });\n}\n","import { resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { cac } from 'cac';\nimport { runClean } from './commands/clean.js';\nimport { runGenerate } from './commands/generate.js';\nimport { runInit } from './commands/init.js';\nimport { runWatch } from './commands/watch.js';\n\nexport const CLI_NAME = 'lombok-ts';\nexport const CLI_VERSION = '0.6.0-pre';\n\n/**\n * Build a fresh cac CLI instance. Exposed as a function (rather than a\n * top-level `.parse()`) so tests can construct one without auto-parsing\n * `process.argv`.\n */\nexport function buildCli() {\n const cli = cac(CLI_NAME);\n\n cli\n .command('generate', 'Run codegen once against the configured source files')\n .alias('gen')\n .option('--output-dir <dir>', 'Override codegen output directory')\n .option('--ts-config <path>', 'Path to tsconfig.json (default: tsconfig.json)')\n .action(async (options: { outputDir?: string; tsConfig?: string }) => {\n await runGenerate({\n overrides: {\n ...(options.outputDir ? { outputDir: options.outputDir } : {}),\n ...(options.tsConfig ? { tsConfigPath: options.tsConfig } : {}),\n },\n });\n });\n\n cli.command('watch', 'Watch source files and regenerate on change').action(async () => {\n await runWatch();\n });\n\n cli\n .command('init', 'Create a starter lombok.config.ts in the current directory')\n .option('--force', 'Overwrite an existing config file')\n .action(async (options: { force?: boolean }) => {\n await runInit({ force: options.force });\n });\n\n cli.command('clean', 'Remove generated files and build artifacts').action(async () => {\n await runClean();\n });\n\n cli.help();\n cli.version(CLI_VERSION);\n\n return cli;\n}\n\n/** Run the CLI with the provided argv (defaults to `process.argv`). */\nexport async function runCli(argv: string[] = process.argv): Promise<void> {\n const cli = buildCli();\n cli.parse(argv, { run: false });\n await cli.runMatchedCommand();\n}\n\n// Auto-execute when invoked as the bin entry.\nconst isMain =\n typeof process !== 'undefined' &&\n typeof import.meta.url === 'string' &&\n process.argv[1] !== undefined &&\n fileURLToPath(import.meta.url) === resolve(process.argv[1]);\n\nif (isMain) {\n runCli().catch((err: unknown) => {\n console.error(err);\n process.exit(1);\n });\n}\n"]}
package/dist/cli/index.js CHANGED
@@ -107,7 +107,10 @@ var CODEGEN_CLASS_DECORATORS = [
107
107
  "ToString",
108
108
  "Value",
109
109
  "Equals",
110
- "With"
110
+ "With",
111
+ "TemplateMethod",
112
+ "AbstractFactory",
113
+ "Visitable"
111
114
  ];
112
115
  function hasCodegenClassDecorator(info) {
113
116
  return CODEGEN_CLASS_DECORATORS.some((name) => hasClassDecorator(info, name)) || info.fields.some(
@@ -212,6 +215,54 @@ function getDelegateMethods(field) {
212
215
  }
213
216
  return dec.arguments.map((a) => String(a).replace(/^['"]|['"]$/g, ""));
214
217
  }
218
+ function parseDecoratorObjectArg(dec) {
219
+ if (!dec || dec.arguments.length === 0) return {};
220
+ const [first] = dec.arguments;
221
+ if (typeof first !== "string" || !first.startsWith("{")) return {};
222
+ try {
223
+ return JSON.parse(first.replace(/(\w+):/g, '"$1":').replace(/'/g, '"'));
224
+ } catch {
225
+ return {};
226
+ }
227
+ }
228
+ function parseDecoratorArrayArg(dec) {
229
+ if (!dec || dec.arguments.length === 0) return [];
230
+ const [first] = dec.arguments;
231
+ const text = String(first);
232
+ if (!text.startsWith("[")) return [];
233
+ try {
234
+ return JSON.parse(text.replace(/'/g, '"'));
235
+ } catch {
236
+ return [];
237
+ }
238
+ }
239
+ function getAbstractFactoryProducts(info) {
240
+ const dec = info.decorators.find((d) => d.name === "AbstractFactory");
241
+ const fromArray = parseDecoratorArrayArg(dec);
242
+ if (fromArray.length > 0) return fromArray;
243
+ const obj = parseDecoratorObjectArg(dec);
244
+ return Array.isArray(obj.products) ? obj.products : [];
245
+ }
246
+ function getTemplateMethodSteps(info) {
247
+ const dec = info.decorators.find((d) => d.name === "TemplateMethod");
248
+ const obj = parseDecoratorObjectArg(dec);
249
+ return Array.isArray(obj.steps) ? obj.steps : [];
250
+ }
251
+ function getTemplateMethodName(info) {
252
+ const dec = info.decorators.find((d) => d.name === "TemplateMethod");
253
+ const obj = parseDecoratorObjectArg(dec);
254
+ return typeof obj.template === "string" ? obj.template : "execute";
255
+ }
256
+ function getHookMethodNames(info) {
257
+ return info.methods.filter((m) => m.decorators.some((d) => d.name === "Hook")).map((m) => {
258
+ const hookDec = m.decorators.find((d) => d.name === "Hook");
259
+ const opts = parseDecoratorObjectArg(hookDec);
260
+ return typeof opts.name === "string" ? opts.name : m.name;
261
+ });
262
+ }
263
+ function visitMethodName(className) {
264
+ return `visit${className}`;
265
+ }
215
266
 
216
267
  // src/codegen/emitters/accessors-emit.ts
217
268
  function emitGetterFn(info, field) {
@@ -261,6 +312,23 @@ function emitAccessorApplyAssignments(info) {
261
312
  return assignments;
262
313
  }
263
314
 
315
+ // src/codegen/emitters/abstract-factory-emit.ts
316
+ function emitAbstractFactoryMixin(info) {
317
+ if (!hasClassDecorator(info, "AbstractFactory")) return "";
318
+ const products = getAbstractFactoryProducts(info);
319
+ if (products.length === 0) {
320
+ throw new Error(`@AbstractFactory on ${info.name}: product list is empty`);
321
+ }
322
+ const methods = products.map((product) => {
323
+ const methodName = `create${product}`;
324
+ return ` abstract ${methodName}(): ${product};`;
325
+ }).join("\n");
326
+ return `
327
+ export abstract class ${info.name}Mixin {
328
+ ${methods}
329
+ }`.trim();
330
+ }
331
+
264
332
  // src/codegen/emitters/builder.ts
265
333
  function emitBuilderClass(info) {
266
334
  if (!hasClassDecorator(info, "Builder")) {
@@ -360,6 +428,25 @@ function emitDeclarationModuleBlock(relSource, classes) {
360
428
  if (hasClassDecorator(info, "Iterable")) {
361
429
  augments.push(" [Symbol.iterator](): IterableIterator<unknown>;");
362
430
  }
431
+ if (hasClassDecorator(info, "Composite")) {
432
+ augments.push(" add(child: object): void;");
433
+ augments.push(" remove(child: object): void;");
434
+ augments.push(" getChild(index: number): object;");
435
+ augments.push(" getChildren(): readonly object[];");
436
+ augments.push(" traverse(callback: (node: object) => void): void;");
437
+ augments.push(" [Symbol.iterator](): IterableIterator<object>;");
438
+ }
439
+ if (hasClassDecorator(info, "Wraps")) {
440
+ const dec = info.decorators.find((d) => d.name === "Wraps");
441
+ const innerName = dec?.arguments[0] ? String(dec.arguments[0]) : "unknown";
442
+ augments.push(` protected inner: ${innerName};`);
443
+ }
444
+ if (hasClassDecorator(info, "Visitable")) {
445
+ augments.push(" accept(visitor: unknown): unknown;");
446
+ }
447
+ if (hasClassDecorator(info, "TemplateMethod")) {
448
+ augments.push(` ${getTemplateMethodName(info)}(): void;`);
449
+ }
363
450
  if (augments.length > 0) {
364
451
  lines.push(` interface ${info.name} {`);
365
452
  lines.push(...augments);
@@ -459,13 +546,68 @@ function emitWithFns(info) {
459
546
  return fields.map((f) => emitSingleWithFn(info, f)).join("\n\n");
460
547
  }
461
548
 
549
+ // src/codegen/emitters/template-method-emit.ts
550
+ function emitTemplateMethodFn(info) {
551
+ if (!hasClassDecorator(info, "TemplateMethod")) return "";
552
+ const templateName = getTemplateMethodName(info);
553
+ const steps = getTemplateMethodSteps(info);
554
+ const hookNames = getHookMethodNames(info);
555
+ for (const step of steps) {
556
+ if (!hookNames.includes(step)) {
557
+ throw new Error(`@TemplateMethod on ${info.name}: missing @Hook method for step "${step}"`);
558
+ }
559
+ }
560
+ const calls = steps.map((step) => `this.${step}();`).join(" ");
561
+ return `
562
+ function ${info.name}_${templateName}(this: ${info.name}): void {
563
+ ${calls}
564
+ }`.trim();
565
+ }
566
+ function emitTemplateMethodApplyAssignment(info) {
567
+ if (!hasClassDecorator(info, "TemplateMethod")) return void 0;
568
+ const templateName = getTemplateMethodName(info);
569
+ return `prototype.${templateName} = ${info.name}_${templateName};`;
570
+ }
571
+
572
+ // src/codegen/emitters/visitor-emit.ts
573
+ function emitVisitableAcceptFn(info) {
574
+ if (!hasClassDecorator(info, "Visitable")) return "";
575
+ const methodName = visitMethodName(info.name);
576
+ return `
577
+ function ${info.name}_accept(this: ${info.name}, visitor: unknown): unknown {
578
+ const handler = (visitor as Record<string, unknown>)['${methodName}'];
579
+ if (typeof handler !== 'function') {
580
+ throw new Error(\`Visitor missing ${methodName} for ${info.name}\`);
581
+ }
582
+ return handler.call(visitor, this);
583
+ }`.trim();
584
+ }
585
+ function emitVisitableAcceptApplyAssignment(info) {
586
+ if (!hasClassDecorator(info, "Visitable")) return void 0;
587
+ return `prototype.accept = ${info.name}_accept;`;
588
+ }
589
+
462
590
  // src/codegen/emitters/index.ts
463
591
  function emitImports(classes, importPath) {
464
592
  const names = classes.filter(hasCodegenClassDecorator).map((c) => c.name);
465
- if (names.length === 0) return "";
466
- return `import { ${names.join(", ")} } from '${importPath}';
467
-
468
- `;
593
+ const productTypes = /* @__PURE__ */ new Set();
594
+ for (const info of classes) {
595
+ if (hasClassDecorator(info, "AbstractFactory")) {
596
+ for (const product of getAbstractFactoryProducts(info)) {
597
+ productTypes.add(product);
598
+ }
599
+ }
600
+ }
601
+ const importLines = [];
602
+ if (names.length > 0) {
603
+ importLines.push(`import { ${names.join(", ")} } from '${importPath}';`);
604
+ }
605
+ const extraProducts = [...productTypes].filter((p) => !names.includes(p));
606
+ if (extraProducts.length > 0) {
607
+ importLines.push(`import type { ${extraProducts.join(", ")} } from '${importPath}';`);
608
+ }
609
+ if (importLines.length === 0) return "";
610
+ return importLines.join("\n") + "\n\n";
469
611
  }
470
612
  function emitToStringFn(info) {
471
613
  if (!wantsToString(info)) return "";
@@ -504,6 +646,10 @@ function emitApplyMixin(info) {
504
646
  `(ctor as typeof ${info.name} & { equals(a: ${info.name} | null | undefined, b: ${info.name} | null | undefined): boolean }).equals = ${info.name}_equalsStatic;`
505
647
  );
506
648
  }
649
+ const templateApply = emitTemplateMethodApplyAssignment(info);
650
+ if (templateApply) assignments.push(templateApply);
651
+ const visitableApply = emitVisitableAcceptApplyAssignment(info);
652
+ if (visitableApply) assignments.push(visitableApply);
507
653
  if (assignments.length === 0) return "";
508
654
  return `
509
655
  export function apply${info.name}Generated(ctor: typeof ${info.name}): void {
@@ -537,6 +683,12 @@ function emitClassCompanionBlocks(info) {
537
683
  if (delegate) blocks.push(delegate);
538
684
  const builderFn = emitBuilderFn(info);
539
685
  if (builderFn) blocks.push(builderFn);
686
+ const templateMethod = emitTemplateMethodFn(info);
687
+ if (templateMethod) blocks.push(templateMethod);
688
+ const visitableAccept = emitVisitableAcceptFn(info);
689
+ if (visitableAccept) blocks.push(visitableAccept);
690
+ const abstractFactory = emitAbstractFactoryMixin(info);
691
+ if (abstractFactory) blocks.push(abstractFactory);
540
692
  const apply = emitApplyMixin(info);
541
693
  if (apply) blocks.push(apply);
542
694
  return blocks.filter(Boolean).join("\n\n");