lombok-typescript 0.1.0 → 0.3.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.
- package/README.md +33 -64
- package/dist/cli/index.cjs +389 -98
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +389 -98
- package/dist/cli/index.js.map +1 -1
- package/dist/codegen/index.cjs +371 -92
- package/dist/codegen/index.cjs.map +1 -1
- package/dist/codegen/index.d.cts +6 -3
- package/dist/codegen/index.d.ts +6 -3
- package/dist/codegen/index.js +371 -92
- package/dist/codegen/index.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy/index.cjs +195 -0
- package/dist/legacy/index.cjs.map +1 -1
- package/dist/legacy/index.d.cts +24 -3
- package/dist/legacy/index.d.ts +24 -3
- package/dist/legacy/index.js +185 -1
- package/dist/legacy/index.js.map +1 -1
- package/dist/{memoize-DvelzGDl.d.ts → log-Dbe0sSP1.d.ts} +23 -1
- package/dist/{memoize-Bj9pm_cK.d.cts → log-Dpr79VRt.d.cts} +23 -1
- package/dist/stage3/index.cjs +200 -0
- package/dist/stage3/index.cjs.map +1 -1
- package/dist/stage3/index.d.cts +24 -3
- package/dist/stage3/index.d.ts +24 -3
- package/dist/stage3/index.js +190 -1
- package/dist/stage3/index.js.map +1 -1
- package/package.json +4 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/codegen/analyzer.ts","../../src/codegen/emitters/helpers.ts","../../src/codegen/emitters/builder.ts","../../src/codegen/emitters/declaration.ts","../../src/codegen/emitters/index.ts","../../src/codegen/generator.ts","../../src/codegen/transformer.ts"],"names":["relative","dirname","ts","Project"],"mappings":"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","file":"index.js","sourcesContent":["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 { relative } from 'node:path';\nimport type { ClassInfo, 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\nexport function hasCodegenClassDecorator(info: ClassInfo): boolean {\n return (\n hasClassDecorator(info, 'Builder') ||\n hasClassDecorator(info, 'Data') ||\n hasClassDecorator(info, 'ToString')\n );\n}\n\nexport function hasClassDecorator(info: ClassInfo, name: string): boolean {\n return info.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 visibleFields(info: ClassInfo): FieldInfo[] {\n if (hasClassDecorator(info, 'ToString')) {\n return info.fields.filter((f) => !fieldExcludesToString(f));\n }\n return info.fields;\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 builderClassName(className: string): string {\n return `${className}Builder`;\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 { builderClassName, hasClassDecorator, toImportPath } from './helpers.js';\n\nexport function emitDeclarationShim(\n sourcePath: string,\n companionOutputPath: string,\n classes: readonly ClassInfo[],\n): string {\n const relSource = toImportPath(sourcePath, dirname(companionOutputPath));\n const lines: string[] = [\n '// Auto-generated type augmentation by lombok-typescript.',\n '// Do not edit. Regenerate via `lombok-ts generate`.',\n '',\n 'export {};',\n '',\n `declare module '${relSource}' {`,\n ];\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(` export class ${info.name} {`);\n lines.push(` static builder(): ${builderName};`);\n lines.push(' }');\n lines.push('');\n }\n\n const augments: string[] = [];\n if (hasClassDecorator(info, 'Data')) {\n for (const f of info.fields) {\n const g = `get${f.name.charAt(0).toUpperCase()}${f.name.slice(1)}`;\n augments.push(` ${g}(): ${f.type};`);\n if (!f.isReadonly) {\n const s = `set${f.name.charAt(0).toUpperCase()}${f.name.slice(1)}`;\n augments.push(` ${s}(value: ${f.type}): void;`);\n }\n }\n augments.push(` equals(other: ${info.name} | null | undefined): boolean;`);\n augments.push(` toString(): string;`);\n } else if (hasClassDecorator(info, 'ToString')) {\n augments.push(' toString(): string;');\n }\n\n if (augments.length > 0) {\n lines.push(` interface ${info.name} {`);\n lines.push(...augments);\n lines.push(' }');\n }\n }\n\n lines.push('}');\n lines.push('');\n return lines.join('\\n');\n}\n","import { dirname, relative } from 'node:path';\nimport type { ClassInfo } from '../types.js';\nimport { emitBuilderClass } from './builder.js';\nimport { emitDeclarationShim } from './declaration.js';\nimport {\n builderClassName,\n hasClassDecorator,\n hasCodegenClassDecorator,\n toImportPath,\n visibleFields,\n} from './helpers.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 (!hasClassDecorator(info, 'ToString') && !hasClassDecorator(info, 'Data')) 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 if (hasClassDecorator(info, 'Data')) {\n for (const f of info.fields) {\n const g = `get${f.name.charAt(0).toUpperCase()}${f.name.slice(1)}`;\n assignments.push(`prototype.${g} = ${info.name}_${g};`);\n if (!f.isReadonly) {\n const s = `set${f.name.charAt(0).toUpperCase()}${f.name.slice(1)}`;\n assignments.push(`prototype.${s} = ${info.name}_${s};`);\n }\n }\n assignments.push(`prototype.equals = ${info.name}_equals;`);\n assignments.push(`prototype.toString = ${info.name}_toString;`);\n } else if (hasClassDecorator(info, 'ToString')) {\n assignments.push(`prototype.toString = ${info.name}_toString;`);\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 (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 emitDataFns(info: ClassInfo): string {\n if (!hasClassDecorator(info, 'Data')) return '';\n\n const fns: string[] = [];\n\n for (const f of info.fields) {\n const g = `get${f.name.charAt(0).toUpperCase()}${f.name.slice(1)}`;\n fns.push(\n `\nfunction ${info.name}_${g}(this: ${info.name}): ${f.type} {\n return this.${f.name};\n}`.trim(),\n );\n if (!f.isReadonly) {\n const s = `set${f.name.charAt(0).toUpperCase()}${f.name.slice(1)}`;\n fns.push(\n `\nfunction ${info.name}_${s}(this: ${info.name}, value: ${f.type}): void {\n this.${f.name} = value;\n}`.trim(),\n );\n }\n }\n\n const equalsBody = info.fields.map((f) => `this.${f.name} === other.${f.name}`).join(' &&\\n ');\n\n fns.push(\n `\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 ${equalsBody || 'true'};\n}`.trim(),\n );\n\n fns.push(emitToStringFn(info));\n\n return fns.filter(Boolean).join('\\n\\n');\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\nexport function emitCompanionFile(\n sourcePath: string,\n companionOutputPath: string,\n classes: readonly ClassInfo[],\n cwd: string,\n): { ts: string; dts: string } {\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\n const blocks: string[] = [];\n\n for (const info of classes) {\n const builder = emitBuilderClass(info);\n if (builder) blocks.push(builder);\n\n if (hasClassDecorator(info, 'Data')) {\n blocks.push(emitDataFns(info));\n } else {\n const ts = emitToStringFn(info);\n if (ts) blocks.push(ts);\n }\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\n const applyAll =\n classes.filter((c) => emitApplyMixin(c)).length > 0\n ? `\\n\\nexport function applyAllGenerated(handlers: {\\n${classes\n .filter((c) => emitApplyMixin(c))\n .map((c) => ` ${c.name}: typeof ${c.name};`)\n .join('\\n')}\\n}): void {\\n${classes\n .filter((c) => emitApplyMixin(c))\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.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.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 mode is not implemented yet. Re-run `lombok-ts generate` for now. */\n async watch(): Promise<void> {\n throw new Error(\n 'Watch mode is not implemented yet. Re-run `lombok-ts generate` after changes.',\n );\n }\n\n // Internal helpers\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","/**\n * Placeholder for a TypeScript compiler transformer that would run codegen as\n * part of `tsc` itself (via `ts-patch` or `ttypescript`).\n *\n * For now the standalone `lombok-ts` CLI is the only codegen path. This file\n * exists so importing a transformer gives a clear \"not yet\" rather than a\n * module-not-found.\n */\nexport class LombokTransformer {\n constructor() {\n throw new Error('LombokTransformer is not implemented yet. Use `lombok-ts generate` for now.');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../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/codegen/transformer.ts"],"names":["relative","dirname","Project","resolve"],"mappings":"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","file":"index.js","sourcesContent":["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 (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","/**\n * Placeholder for a TypeScript compiler transformer that would run codegen as\n * part of `tsc` itself (via `ts-patch` or `ttypescript`).\n *\n * For now the standalone `lombok-ts` CLI is the only codegen path. This file\n * exists so importing a transformer gives a clear \"not yet\" rather than a\n * module-not-found.\n */\nexport class LombokTransformer {\n constructor() {\n throw new Error('LombokTransformer is not implemented yet. Use `lombok-ts generate` for now.');\n }\n}\n"]}
|
package/dist/index.cjs
CHANGED
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/metadata-store.ts","../src/core/metadata-keys.ts","../src/config.ts","../src/index.ts"],"names":["bucket"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { MetadataKeyList, PropertyName } from './types.js';\n\n/**\n * Storage interface used by both decorator backends. Legacy delegates to\n * `reflect-metadata`; Stage 3 uses the WeakMap implementation below.\n */\nexport interface MetadataStore {\n /** Store `value` under `key`. Omit `propertyKey` for class-level scope. */\n set<V>(key: string, target: object, propertyKey: PropertyName | undefined, value: V): void;\n\n /** Read the value stored under `key`, or `undefined`. */\n get<V>(key: string, target: object, propertyKey?: PropertyName): V | undefined;\n\n /** True if `key` exists at the given scope. */\n has(key: string, target: object, propertyKey?: PropertyName): boolean;\n\n /** Remove the entry. Returns true if it existed. */\n delete(key: string, target: object, propertyKey?: PropertyName): boolean;\n\n /** All keys at the given scope. */\n list(target: object, propertyKey?: PropertyName): MetadataKeyList;\n}\n\n/**\n * WeakMap-backed `MetadataStore`. Used directly by the Stage 3 backend.\n * Layout: target -> (propertyKey or class-level) -> key -> value.\n */\nexport class WeakMapMetadataStore implements MetadataStore {\n private readonly classScopes = new WeakMap<object, Map<string, unknown>>();\n private readonly memberScopes = new WeakMap<object, Map<string | symbol, Map<string, unknown>>>();\n\n set<V>(key: string, target: object, propertyKey: PropertyName | undefined, value: V): void {\n const bucket = this.bucket(target, propertyKey, true)!;\n bucket.set(key, value);\n }\n\n get<V>(key: string, target: object, propertyKey?: PropertyName): V | undefined {\n const bucket = this.bucket(target, propertyKey, false);\n return bucket?.get(key) as V | undefined;\n }\n\n has(key: string, target: object, propertyKey?: PropertyName): boolean {\n const bucket = this.bucket(target, propertyKey, false);\n return bucket?.has(key) ?? false;\n }\n\n delete(key: string, target: object, propertyKey?: PropertyName): boolean {\n const bucket = this.bucket(target, propertyKey, false);\n if (!bucket) return false;\n return bucket.delete(key);\n }\n\n list(target: object, propertyKey?: PropertyName): MetadataKeyList {\n const bucket = this.bucket(target, propertyKey, false);\n if (!bucket) return [];\n return Array.from(bucket.keys());\n }\n\n private bucket(\n target: object,\n propertyKey: PropertyName | undefined,\n createIfMissing: boolean,\n ): Map<string, unknown> | undefined {\n if (propertyKey === undefined) {\n let bucket = this.classScopes.get(target);\n if (!bucket && createIfMissing) {\n bucket = new Map();\n this.classScopes.set(target, bucket);\n }\n return bucket;\n }\n\n let perTarget = this.memberScopes.get(target);\n if (!perTarget) {\n if (!createIfMissing) return undefined;\n perTarget = new Map();\n this.memberScopes.set(target, perTarget);\n }\n\n let bucket = perTarget.get(propertyKey);\n if (!bucket) {\n if (!createIfMissing) return undefined;\n bucket = new Map();\n perTarget.set(propertyKey, bucket);\n }\n return bucket;\n }\n}\n","/**\n * Metadata keys used across the library. Adding one? Use the `lombok-ts:`\n * prefix and check `metadata-keys.test.ts` so uniqueness stays enforced.\n */\n\nconst PREFIX = 'lombok-ts:';\n\nexport const MetadataKeys = {\n // Class-level (Lombok)\n DATA: `${PREFIX}data`,\n VALUE: `${PREFIX}value`,\n BUILDER: `${PREFIX}builder`,\n TO_STRING: `${PREFIX}toString`,\n EQUALS: `${PREFIX}equals`,\n UTILITY_CLASS: `${PREFIX}utilityClass`,\n FIELD_DEFAULTS: `${PREFIX}fieldDefaults`,\n ACCESSORS: `${PREFIX}accessors`,\n LOG: `${PREFIX}log`,\n\n // Class-level (TS-only)\n OBSERVABLE: `${PREFIX}observable`,\n SERIALIZABLE: `${PREFIX}serializable`,\n DEEP_FREEZE: `${PREFIX}deepFreeze`,\n TRACE: `${PREFIX}trace`,\n\n // Class-level (GoF)\n SINGLETON: `${PREFIX}singleton`,\n FACTORY: `${PREFIX}factory`,\n ABSTRACT_FACTORY: `${PREFIX}abstractFactory`,\n PROTOTYPE: `${PREFIX}prototype`,\n ADAPTER: `${PREFIX}adapter`,\n BRIDGE: `${PREFIX}bridge`,\n COMPOSITE: `${PREFIX}composite`,\n WRAPS: `${PREFIX}wraps`,\n FACADE: `${PREFIX}facade`,\n FLYWEIGHT: `${PREFIX}flyweight`,\n PROXY: `${PREFIX}proxy`,\n CHAIN_OF_RESPONSIBILITY: `${PREFIX}chainOfResponsibility`,\n COMMAND: `${PREFIX}command`,\n INTERPRETER: `${PREFIX}interpreter`,\n ITERABLE: `${PREFIX}iterable`,\n MEDIATOR: `${PREFIX}mediator`,\n MEMENTO: `${PREFIX}memento`,\n STATE: `${PREFIX}state`,\n STRATEGY: `${PREFIX}strategy`,\n TEMPLATE_METHOD: `${PREFIX}templateMethod`,\n VISITABLE: `${PREFIX}visitable`,\n VISITOR: `${PREFIX}visitor`,\n\n // Field-level\n GETTER: `${PREFIX}getter`,\n SETTER: `${PREFIX}setter`,\n NON_NULL: `${PREFIX}nonNull`,\n WITH: `${PREFIX}with`,\n DELEGATE: `${PREFIX}delegate`,\n VALIDATE: `${PREFIX}validate`,\n TO_STRING_EXCLUDE: `${PREFIX}toString:exclude`,\n TO_STRING_INCLUDE: `${PREFIX}toString:include`,\n EQUALS_EXCLUDE: `${PREFIX}equals:exclude`,\n SERIALIZABLE_EXCLUDE: `${PREFIX}serializable:exclude`,\n SERIALIZABLE_TRANSFORM: `${PREFIX}serializable:transform`,\n SERIALIZABLE_ALIAS: `${PREFIX}serializable:alias`,\n BUILDER_DEFAULT: `${PREFIX}builder:default`,\n SINGULAR: `${PREFIX}singular`,\n ITERATE_OVER: `${PREFIX}iterateOver`,\n\n // Method-level\n MEMOIZE: `${PREFIX}memoize`,\n DEBOUNCE: `${PREFIX}debounce`,\n THROTTLE: `${PREFIX}throttle`,\n RETRY: `${PREFIX}retry`,\n HANDLER: `${PREFIX}handler`,\n TRANSITION: `${PREFIX}transition`,\n HOOK: `${PREFIX}hook`,\n\n // Parameter-level\n NON_NULL_PARAM: `${PREFIX}nonNull:param`,\n\n // Internal, framework-managed\n FIELDS: `${PREFIX}internal:fields`,\n CONSTRUCTOR_PARAMS: `${PREFIX}internal:constructorParams`,\n BACKEND: `${PREFIX}internal:backend`,\n} as const;\n\nexport type MetadataKey = (typeof MetadataKeys)[keyof typeof MetadataKeys];\n\nexport const METADATA_KEY_PREFIX = PREFIX;\n","import type { BackendKind } from './core/types.js';\n\nexport interface LogConfig {\n /** Logging provider. Default `'console'`. */\n provider: 'console' | 'winston' | 'pino' | 'bunyan';\n\n /** Default log level. Default `'info'`. */\n defaultLevel: 'debug' | 'info' | 'warn' | 'error';\n}\n\nexport interface BuilderConfig {\n /** Prefix for builder setter methods. Default `''` (so `name()`, not `withName()`). */\n prefix: string;\n\n /** Name of the build method. Default `'build'`. */\n buildMethodName: string;\n\n /** Name of the static builder method. Default `'builder'`. */\n builderMethodName: string;\n}\n\nexport interface ToStringConfig {\n /** Output format. Default `'pretty'`. */\n format: 'pretty' | 'json' | 'compact';\n\n /** Include the class name in output. Default `true`. */\n includeClassName: boolean;\n}\n\nexport interface ValidateConfig {\n /** Validation library. Default `'zod'`. */\n provider: 'zod' | 'yup' | 'class-validator';\n\n /** Throw on validation failure. Default `true`. */\n throwOnError: boolean;\n}\n\nexport interface CodegenConfig {\n /** Where to write generated companion files. Default `'.lombok'`. */\n outputDir: string;\n\n /** Glob patterns for files to process. Default `['src/** /*.ts']`. */\n include: string[];\n\n /** Glob patterns for files to skip. Defaults exclude tests, `dist`, and `.lombok`. */\n exclude: string[];\n\n /** Path to the project's tsconfig. Default `'tsconfig.json'`. */\n tsConfigPath: string;\n\n /** Watch for source changes. Not implemented yet. Default `false`. */\n watch: boolean;\n}\n\n/**\n * Top-level lombok-typescript config.\n *\n * `backend` chooses which decorator standard to assume:\n * - `'legacy'`: `experimentalDecorators` (NestJS / class-validator ecosystem)\n * - `'stage3'`: Stage 3 ECMAScript decorators (TS 5.0+)\n * - `'auto'`: detect from the project's tsconfig\n *\n * The `@ToString` config field is named `formatToString` (not `toString`) so it\n * doesn't clash with `Object.prototype.toString`.\n */\nexport interface LombokConfig {\n /** Decorator backend. Default `'auto'`. */\n backend?: BackendKind | 'auto';\n\n log?: Partial<LogConfig>;\n builder?: Partial<BuilderConfig>;\n /** Settings for the `@ToString` decorator. */\n formatToString?: Partial<ToStringConfig>;\n validate?: Partial<ValidateConfig>;\n codegen?: Partial<CodegenConfig>;\n}\n\n/**\n * Identity helper that gives you autocomplete in `lombok.config.ts`.\n *\n * @example\n * import { defineConfig } from 'lombok-typescript';\n *\n * export default defineConfig({\n * backend: 'legacy',\n * log: { provider: 'winston' },\n * builder: { prefix: 'with' },\n * });\n */\nexport function defineConfig(config: LombokConfig): LombokConfig {\n return config;\n}\n","/**\n * `lombok-typescript`: a TypeScript port of Project Lombok plus GoF design\n * patterns as decorators.\n *\n * Sub-paths:\n * - `lombok-typescript/legacy`: legacy `experimentalDecorators` backend\n * - `lombok-typescript/stage3`: Stage 3 ECMAScript decorators backend\n * - `lombok-typescript/core`: backend-agnostic primitives\n * - `lombok-typescript/codegen`: ts-morph powered code generation\n *\n * @see https://github.com/A-Dev-Kit/lombok-typescript\n */\n\nexport type {\n Backend,\n MetadataStore,\n BackendKind,\n DecoratorKind,\n PropertyName,\n} from './core/index.js';\nexport { MetadataKeys, METADATA_KEY_PREFIX, WeakMapMetadataStore } from './core/index.js';\nexport type { MetadataKey } from './core/index.js';\n\nexport { defineConfig } from './config.js';\nexport type {\n LombokConfig,\n LogConfig,\n BuilderConfig,\n ToStringConfig,\n ValidateConfig,\n CodegenConfig,\n} from './config.js';\n\nexport const VERSION = '0.1.0-pre';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/metadata-store.ts","../src/core/metadata-keys.ts","../src/config.ts","../src/index.ts"],"names":["bucket"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { MetadataKeyList, PropertyName } from './types.js';\n\n/**\n * Storage interface used by both decorator backends. Legacy delegates to\n * `reflect-metadata`; Stage 3 uses the WeakMap implementation below.\n */\nexport interface MetadataStore {\n /** Store `value` under `key`. Omit `propertyKey` for class-level scope. */\n set<V>(key: string, target: object, propertyKey: PropertyName | undefined, value: V): void;\n\n /** Read the value stored under `key`, or `undefined`. */\n get<V>(key: string, target: object, propertyKey?: PropertyName): V | undefined;\n\n /** True if `key` exists at the given scope. */\n has(key: string, target: object, propertyKey?: PropertyName): boolean;\n\n /** Remove the entry. Returns true if it existed. */\n delete(key: string, target: object, propertyKey?: PropertyName): boolean;\n\n /** All keys at the given scope. */\n list(target: object, propertyKey?: PropertyName): MetadataKeyList;\n}\n\n/**\n * WeakMap-backed `MetadataStore`. Used directly by the Stage 3 backend.\n * Layout: target -> (propertyKey or class-level) -> key -> value.\n */\nexport class WeakMapMetadataStore implements MetadataStore {\n private readonly classScopes = new WeakMap<object, Map<string, unknown>>();\n private readonly memberScopes = new WeakMap<object, Map<string | symbol, Map<string, unknown>>>();\n\n set<V>(key: string, target: object, propertyKey: PropertyName | undefined, value: V): void {\n const bucket = this.bucket(target, propertyKey, true)!;\n bucket.set(key, value);\n }\n\n get<V>(key: string, target: object, propertyKey?: PropertyName): V | undefined {\n const bucket = this.bucket(target, propertyKey, false);\n return bucket?.get(key) as V | undefined;\n }\n\n has(key: string, target: object, propertyKey?: PropertyName): boolean {\n const bucket = this.bucket(target, propertyKey, false);\n return bucket?.has(key) ?? false;\n }\n\n delete(key: string, target: object, propertyKey?: PropertyName): boolean {\n const bucket = this.bucket(target, propertyKey, false);\n if (!bucket) return false;\n return bucket.delete(key);\n }\n\n list(target: object, propertyKey?: PropertyName): MetadataKeyList {\n const bucket = this.bucket(target, propertyKey, false);\n if (!bucket) return [];\n return Array.from(bucket.keys());\n }\n\n private bucket(\n target: object,\n propertyKey: PropertyName | undefined,\n createIfMissing: boolean,\n ): Map<string, unknown> | undefined {\n if (propertyKey === undefined) {\n let bucket = this.classScopes.get(target);\n if (!bucket && createIfMissing) {\n bucket = new Map();\n this.classScopes.set(target, bucket);\n }\n return bucket;\n }\n\n let perTarget = this.memberScopes.get(target);\n if (!perTarget) {\n if (!createIfMissing) return undefined;\n perTarget = new Map();\n this.memberScopes.set(target, perTarget);\n }\n\n let bucket = perTarget.get(propertyKey);\n if (!bucket) {\n if (!createIfMissing) return undefined;\n bucket = new Map();\n perTarget.set(propertyKey, bucket);\n }\n return bucket;\n }\n}\n","/**\n * Metadata keys used across the library. Adding one? Use the `lombok-ts:`\n * prefix and check `metadata-keys.test.ts` so uniqueness stays enforced.\n */\n\nconst PREFIX = 'lombok-ts:';\n\nexport const MetadataKeys = {\n // Class-level (Lombok)\n DATA: `${PREFIX}data`,\n VALUE: `${PREFIX}value`,\n BUILDER: `${PREFIX}builder`,\n TO_STRING: `${PREFIX}toString`,\n EQUALS: `${PREFIX}equals`,\n UTILITY_CLASS: `${PREFIX}utilityClass`,\n FIELD_DEFAULTS: `${PREFIX}fieldDefaults`,\n ACCESSORS: `${PREFIX}accessors`,\n LOG: `${PREFIX}log`,\n\n // Class-level (TS-only)\n OBSERVABLE: `${PREFIX}observable`,\n SERIALIZABLE: `${PREFIX}serializable`,\n DEEP_FREEZE: `${PREFIX}deepFreeze`,\n TRACE: `${PREFIX}trace`,\n\n // Class-level (GoF)\n SINGLETON: `${PREFIX}singleton`,\n FACTORY: `${PREFIX}factory`,\n ABSTRACT_FACTORY: `${PREFIX}abstractFactory`,\n PROTOTYPE: `${PREFIX}prototype`,\n ADAPTER: `${PREFIX}adapter`,\n BRIDGE: `${PREFIX}bridge`,\n COMPOSITE: `${PREFIX}composite`,\n WRAPS: `${PREFIX}wraps`,\n FACADE: `${PREFIX}facade`,\n FLYWEIGHT: `${PREFIX}flyweight`,\n PROXY: `${PREFIX}proxy`,\n CHAIN_OF_RESPONSIBILITY: `${PREFIX}chainOfResponsibility`,\n COMMAND: `${PREFIX}command`,\n INTERPRETER: `${PREFIX}interpreter`,\n ITERABLE: `${PREFIX}iterable`,\n MEDIATOR: `${PREFIX}mediator`,\n MEMENTO: `${PREFIX}memento`,\n STATE: `${PREFIX}state`,\n STRATEGY: `${PREFIX}strategy`,\n TEMPLATE_METHOD: `${PREFIX}templateMethod`,\n VISITABLE: `${PREFIX}visitable`,\n VISITOR: `${PREFIX}visitor`,\n\n // Field-level\n GETTER: `${PREFIX}getter`,\n SETTER: `${PREFIX}setter`,\n NON_NULL: `${PREFIX}nonNull`,\n WITH: `${PREFIX}with`,\n DELEGATE: `${PREFIX}delegate`,\n VALIDATE: `${PREFIX}validate`,\n TO_STRING_EXCLUDE: `${PREFIX}toString:exclude`,\n TO_STRING_INCLUDE: `${PREFIX}toString:include`,\n EQUALS_EXCLUDE: `${PREFIX}equals:exclude`,\n SERIALIZABLE_EXCLUDE: `${PREFIX}serializable:exclude`,\n SERIALIZABLE_TRANSFORM: `${PREFIX}serializable:transform`,\n SERIALIZABLE_ALIAS: `${PREFIX}serializable:alias`,\n BUILDER_DEFAULT: `${PREFIX}builder:default`,\n SINGULAR: `${PREFIX}singular`,\n ITERATE_OVER: `${PREFIX}iterateOver`,\n\n // Method-level\n MEMOIZE: `${PREFIX}memoize`,\n DEBOUNCE: `${PREFIX}debounce`,\n THROTTLE: `${PREFIX}throttle`,\n RETRY: `${PREFIX}retry`,\n HANDLER: `${PREFIX}handler`,\n TRANSITION: `${PREFIX}transition`,\n HOOK: `${PREFIX}hook`,\n\n // Parameter-level\n NON_NULL_PARAM: `${PREFIX}nonNull:param`,\n\n // Internal, framework-managed\n FIELDS: `${PREFIX}internal:fields`,\n CONSTRUCTOR_PARAMS: `${PREFIX}internal:constructorParams`,\n BACKEND: `${PREFIX}internal:backend`,\n} as const;\n\nexport type MetadataKey = (typeof MetadataKeys)[keyof typeof MetadataKeys];\n\nexport const METADATA_KEY_PREFIX = PREFIX;\n","import type { BackendKind } from './core/types.js';\n\nexport interface LogConfig {\n /** Logging provider. Default `'console'`. */\n provider: 'console' | 'winston' | 'pino' | 'bunyan';\n\n /** Default log level. Default `'info'`. */\n defaultLevel: 'debug' | 'info' | 'warn' | 'error';\n}\n\nexport interface BuilderConfig {\n /** Prefix for builder setter methods. Default `''` (so `name()`, not `withName()`). */\n prefix: string;\n\n /** Name of the build method. Default `'build'`. */\n buildMethodName: string;\n\n /** Name of the static builder method. Default `'builder'`. */\n builderMethodName: string;\n}\n\nexport interface ToStringConfig {\n /** Output format. Default `'pretty'`. */\n format: 'pretty' | 'json' | 'compact';\n\n /** Include the class name in output. Default `true`. */\n includeClassName: boolean;\n}\n\nexport interface ValidateConfig {\n /** Validation library. Default `'zod'`. */\n provider: 'zod' | 'yup' | 'class-validator';\n\n /** Throw on validation failure. Default `true`. */\n throwOnError: boolean;\n}\n\nexport interface CodegenConfig {\n /** Where to write generated companion files. Default `'.lombok'`. */\n outputDir: string;\n\n /** Glob patterns for files to process. Default `['src/** /*.ts']`. */\n include: string[];\n\n /** Glob patterns for files to skip. Defaults exclude tests, `dist`, and `.lombok`. */\n exclude: string[];\n\n /** Path to the project's tsconfig. Default `'tsconfig.json'`. */\n tsConfigPath: string;\n\n /** Watch for source changes and regenerate companions. Default `false`. */\n watch: boolean;\n}\n\n/**\n * Top-level lombok-typescript config.\n *\n * `backend` chooses which decorator standard to assume:\n * - `'legacy'`: `experimentalDecorators` (NestJS / class-validator ecosystem)\n * - `'stage3'`: Stage 3 ECMAScript decorators (TS 5.0+)\n * - `'auto'`: detect from the project's tsconfig\n *\n * The `@ToString` config field is named `formatToString` (not `toString`) so it\n * doesn't clash with `Object.prototype.toString`.\n */\nexport interface LombokConfig {\n /** Decorator backend. Default `'auto'`. */\n backend?: BackendKind | 'auto';\n\n log?: Partial<LogConfig>;\n builder?: Partial<BuilderConfig>;\n /** Settings for the `@ToString` decorator. */\n formatToString?: Partial<ToStringConfig>;\n validate?: Partial<ValidateConfig>;\n codegen?: Partial<CodegenConfig>;\n}\n\n/**\n * Identity helper that gives you autocomplete in `lombok.config.ts`.\n *\n * @example\n * import { defineConfig } from 'lombok-typescript';\n *\n * export default defineConfig({\n * backend: 'legacy',\n * log: { provider: 'winston' },\n * builder: { prefix: 'with' },\n * });\n */\nexport function defineConfig(config: LombokConfig): LombokConfig {\n return config;\n}\n","/**\n * `lombok-typescript`: a TypeScript port of Project Lombok plus GoF design\n * patterns as decorators.\n *\n * Sub-paths:\n * - `lombok-typescript/legacy`: legacy `experimentalDecorators` backend\n * - `lombok-typescript/stage3`: Stage 3 ECMAScript decorators backend\n * - `lombok-typescript/core`: backend-agnostic primitives\n * - `lombok-typescript/codegen`: ts-morph powered code generation\n *\n * @see https://github.com/A-Dev-Kit/lombok-typescript\n */\n\nexport type {\n Backend,\n MetadataStore,\n BackendKind,\n DecoratorKind,\n PropertyName,\n} from './core/index.js';\nexport { MetadataKeys, METADATA_KEY_PREFIX, WeakMapMetadataStore } from './core/index.js';\nexport type { MetadataKey } from './core/index.js';\n\nexport { defineConfig } from './config.js';\nexport type {\n LombokConfig,\n LogConfig,\n BuilderConfig,\n ToStringConfig,\n ValidateConfig,\n CodegenConfig,\n} from './config.js';\n\nexport const VERSION = '0.4.0-pre';\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -37,7 +37,7 @@ interface CodegenConfig {
|
|
|
37
37
|
exclude: string[];
|
|
38
38
|
/** Path to the project's tsconfig. Default `'tsconfig.json'`. */
|
|
39
39
|
tsConfigPath: string;
|
|
40
|
-
/** Watch for source changes
|
|
40
|
+
/** Watch for source changes and regenerate companions. Default `false`. */
|
|
41
41
|
watch: boolean;
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
@@ -88,6 +88,6 @@ declare function defineConfig(config: LombokConfig): LombokConfig;
|
|
|
88
88
|
* @see https://github.com/A-Dev-Kit/lombok-typescript
|
|
89
89
|
*/
|
|
90
90
|
|
|
91
|
-
declare const VERSION = "0.
|
|
91
|
+
declare const VERSION = "0.4.0-pre";
|
|
92
92
|
|
|
93
93
|
export { BackendKind, type BuilderConfig, type CodegenConfig, type LogConfig, type LombokConfig, type ToStringConfig, VERSION, type ValidateConfig, defineConfig };
|
package/dist/index.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ interface CodegenConfig {
|
|
|
37
37
|
exclude: string[];
|
|
38
38
|
/** Path to the project's tsconfig. Default `'tsconfig.json'`. */
|
|
39
39
|
tsConfigPath: string;
|
|
40
|
-
/** Watch for source changes
|
|
40
|
+
/** Watch for source changes and regenerate companions. Default `false`. */
|
|
41
41
|
watch: boolean;
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
@@ -88,6 +88,6 @@ declare function defineConfig(config: LombokConfig): LombokConfig;
|
|
|
88
88
|
* @see https://github.com/A-Dev-Kit/lombok-typescript
|
|
89
89
|
*/
|
|
90
90
|
|
|
91
|
-
declare const VERSION = "0.
|
|
91
|
+
declare const VERSION = "0.4.0-pre";
|
|
92
92
|
|
|
93
93
|
export { BackendKind, type BuilderConfig, type CodegenConfig, type LogConfig, type LombokConfig, type ToStringConfig, VERSION, type ValidateConfig, defineConfig };
|
package/dist/index.js
CHANGED
|
@@ -129,7 +129,7 @@ function defineConfig(config) {
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
// src/index.ts
|
|
132
|
-
var VERSION = "0.
|
|
132
|
+
var VERSION = "0.4.0-pre";
|
|
133
133
|
|
|
134
134
|
export { METADATA_KEY_PREFIX, MetadataKeys, VERSION, WeakMapMetadataStore, defineConfig };
|
|
135
135
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/metadata-store.ts","../src/core/metadata-keys.ts","../src/config.ts","../src/index.ts"],"names":["bucket"],"mappings":"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","file":"index.js","sourcesContent":["import type { MetadataKeyList, PropertyName } from './types.js';\n\n/**\n * Storage interface used by both decorator backends. Legacy delegates to\n * `reflect-metadata`; Stage 3 uses the WeakMap implementation below.\n */\nexport interface MetadataStore {\n /** Store `value` under `key`. Omit `propertyKey` for class-level scope. */\n set<V>(key: string, target: object, propertyKey: PropertyName | undefined, value: V): void;\n\n /** Read the value stored under `key`, or `undefined`. */\n get<V>(key: string, target: object, propertyKey?: PropertyName): V | undefined;\n\n /** True if `key` exists at the given scope. */\n has(key: string, target: object, propertyKey?: PropertyName): boolean;\n\n /** Remove the entry. Returns true if it existed. */\n delete(key: string, target: object, propertyKey?: PropertyName): boolean;\n\n /** All keys at the given scope. */\n list(target: object, propertyKey?: PropertyName): MetadataKeyList;\n}\n\n/**\n * WeakMap-backed `MetadataStore`. Used directly by the Stage 3 backend.\n * Layout: target -> (propertyKey or class-level) -> key -> value.\n */\nexport class WeakMapMetadataStore implements MetadataStore {\n private readonly classScopes = new WeakMap<object, Map<string, unknown>>();\n private readonly memberScopes = new WeakMap<object, Map<string | symbol, Map<string, unknown>>>();\n\n set<V>(key: string, target: object, propertyKey: PropertyName | undefined, value: V): void {\n const bucket = this.bucket(target, propertyKey, true)!;\n bucket.set(key, value);\n }\n\n get<V>(key: string, target: object, propertyKey?: PropertyName): V | undefined {\n const bucket = this.bucket(target, propertyKey, false);\n return bucket?.get(key) as V | undefined;\n }\n\n has(key: string, target: object, propertyKey?: PropertyName): boolean {\n const bucket = this.bucket(target, propertyKey, false);\n return bucket?.has(key) ?? false;\n }\n\n delete(key: string, target: object, propertyKey?: PropertyName): boolean {\n const bucket = this.bucket(target, propertyKey, false);\n if (!bucket) return false;\n return bucket.delete(key);\n }\n\n list(target: object, propertyKey?: PropertyName): MetadataKeyList {\n const bucket = this.bucket(target, propertyKey, false);\n if (!bucket) return [];\n return Array.from(bucket.keys());\n }\n\n private bucket(\n target: object,\n propertyKey: PropertyName | undefined,\n createIfMissing: boolean,\n ): Map<string, unknown> | undefined {\n if (propertyKey === undefined) {\n let bucket = this.classScopes.get(target);\n if (!bucket && createIfMissing) {\n bucket = new Map();\n this.classScopes.set(target, bucket);\n }\n return bucket;\n }\n\n let perTarget = this.memberScopes.get(target);\n if (!perTarget) {\n if (!createIfMissing) return undefined;\n perTarget = new Map();\n this.memberScopes.set(target, perTarget);\n }\n\n let bucket = perTarget.get(propertyKey);\n if (!bucket) {\n if (!createIfMissing) return undefined;\n bucket = new Map();\n perTarget.set(propertyKey, bucket);\n }\n return bucket;\n }\n}\n","/**\n * Metadata keys used across the library. Adding one? Use the `lombok-ts:`\n * prefix and check `metadata-keys.test.ts` so uniqueness stays enforced.\n */\n\nconst PREFIX = 'lombok-ts:';\n\nexport const MetadataKeys = {\n // Class-level (Lombok)\n DATA: `${PREFIX}data`,\n VALUE: `${PREFIX}value`,\n BUILDER: `${PREFIX}builder`,\n TO_STRING: `${PREFIX}toString`,\n EQUALS: `${PREFIX}equals`,\n UTILITY_CLASS: `${PREFIX}utilityClass`,\n FIELD_DEFAULTS: `${PREFIX}fieldDefaults`,\n ACCESSORS: `${PREFIX}accessors`,\n LOG: `${PREFIX}log`,\n\n // Class-level (TS-only)\n OBSERVABLE: `${PREFIX}observable`,\n SERIALIZABLE: `${PREFIX}serializable`,\n DEEP_FREEZE: `${PREFIX}deepFreeze`,\n TRACE: `${PREFIX}trace`,\n\n // Class-level (GoF)\n SINGLETON: `${PREFIX}singleton`,\n FACTORY: `${PREFIX}factory`,\n ABSTRACT_FACTORY: `${PREFIX}abstractFactory`,\n PROTOTYPE: `${PREFIX}prototype`,\n ADAPTER: `${PREFIX}adapter`,\n BRIDGE: `${PREFIX}bridge`,\n COMPOSITE: `${PREFIX}composite`,\n WRAPS: `${PREFIX}wraps`,\n FACADE: `${PREFIX}facade`,\n FLYWEIGHT: `${PREFIX}flyweight`,\n PROXY: `${PREFIX}proxy`,\n CHAIN_OF_RESPONSIBILITY: `${PREFIX}chainOfResponsibility`,\n COMMAND: `${PREFIX}command`,\n INTERPRETER: `${PREFIX}interpreter`,\n ITERABLE: `${PREFIX}iterable`,\n MEDIATOR: `${PREFIX}mediator`,\n MEMENTO: `${PREFIX}memento`,\n STATE: `${PREFIX}state`,\n STRATEGY: `${PREFIX}strategy`,\n TEMPLATE_METHOD: `${PREFIX}templateMethod`,\n VISITABLE: `${PREFIX}visitable`,\n VISITOR: `${PREFIX}visitor`,\n\n // Field-level\n GETTER: `${PREFIX}getter`,\n SETTER: `${PREFIX}setter`,\n NON_NULL: `${PREFIX}nonNull`,\n WITH: `${PREFIX}with`,\n DELEGATE: `${PREFIX}delegate`,\n VALIDATE: `${PREFIX}validate`,\n TO_STRING_EXCLUDE: `${PREFIX}toString:exclude`,\n TO_STRING_INCLUDE: `${PREFIX}toString:include`,\n EQUALS_EXCLUDE: `${PREFIX}equals:exclude`,\n SERIALIZABLE_EXCLUDE: `${PREFIX}serializable:exclude`,\n SERIALIZABLE_TRANSFORM: `${PREFIX}serializable:transform`,\n SERIALIZABLE_ALIAS: `${PREFIX}serializable:alias`,\n BUILDER_DEFAULT: `${PREFIX}builder:default`,\n SINGULAR: `${PREFIX}singular`,\n ITERATE_OVER: `${PREFIX}iterateOver`,\n\n // Method-level\n MEMOIZE: `${PREFIX}memoize`,\n DEBOUNCE: `${PREFIX}debounce`,\n THROTTLE: `${PREFIX}throttle`,\n RETRY: `${PREFIX}retry`,\n HANDLER: `${PREFIX}handler`,\n TRANSITION: `${PREFIX}transition`,\n HOOK: `${PREFIX}hook`,\n\n // Parameter-level\n NON_NULL_PARAM: `${PREFIX}nonNull:param`,\n\n // Internal, framework-managed\n FIELDS: `${PREFIX}internal:fields`,\n CONSTRUCTOR_PARAMS: `${PREFIX}internal:constructorParams`,\n BACKEND: `${PREFIX}internal:backend`,\n} as const;\n\nexport type MetadataKey = (typeof MetadataKeys)[keyof typeof MetadataKeys];\n\nexport const METADATA_KEY_PREFIX = PREFIX;\n","import type { BackendKind } from './core/types.js';\n\nexport interface LogConfig {\n /** Logging provider. Default `'console'`. */\n provider: 'console' | 'winston' | 'pino' | 'bunyan';\n\n /** Default log level. Default `'info'`. */\n defaultLevel: 'debug' | 'info' | 'warn' | 'error';\n}\n\nexport interface BuilderConfig {\n /** Prefix for builder setter methods. Default `''` (so `name()`, not `withName()`). */\n prefix: string;\n\n /** Name of the build method. Default `'build'`. */\n buildMethodName: string;\n\n /** Name of the static builder method. Default `'builder'`. */\n builderMethodName: string;\n}\n\nexport interface ToStringConfig {\n /** Output format. Default `'pretty'`. */\n format: 'pretty' | 'json' | 'compact';\n\n /** Include the class name in output. Default `true`. */\n includeClassName: boolean;\n}\n\nexport interface ValidateConfig {\n /** Validation library. Default `'zod'`. */\n provider: 'zod' | 'yup' | 'class-validator';\n\n /** Throw on validation failure. Default `true`. */\n throwOnError: boolean;\n}\n\nexport interface CodegenConfig {\n /** Where to write generated companion files. Default `'.lombok'`. */\n outputDir: string;\n\n /** Glob patterns for files to process. Default `['src/** /*.ts']`. */\n include: string[];\n\n /** Glob patterns for files to skip. Defaults exclude tests, `dist`, and `.lombok`. */\n exclude: string[];\n\n /** Path to the project's tsconfig. Default `'tsconfig.json'`. */\n tsConfigPath: string;\n\n /** Watch for source changes. Not implemented yet. Default `false`. */\n watch: boolean;\n}\n\n/**\n * Top-level lombok-typescript config.\n *\n * `backend` chooses which decorator standard to assume:\n * - `'legacy'`: `experimentalDecorators` (NestJS / class-validator ecosystem)\n * - `'stage3'`: Stage 3 ECMAScript decorators (TS 5.0+)\n * - `'auto'`: detect from the project's tsconfig\n *\n * The `@ToString` config field is named `formatToString` (not `toString`) so it\n * doesn't clash with `Object.prototype.toString`.\n */\nexport interface LombokConfig {\n /** Decorator backend. Default `'auto'`. */\n backend?: BackendKind | 'auto';\n\n log?: Partial<LogConfig>;\n builder?: Partial<BuilderConfig>;\n /** Settings for the `@ToString` decorator. */\n formatToString?: Partial<ToStringConfig>;\n validate?: Partial<ValidateConfig>;\n codegen?: Partial<CodegenConfig>;\n}\n\n/**\n * Identity helper that gives you autocomplete in `lombok.config.ts`.\n *\n * @example\n * import { defineConfig } from 'lombok-typescript';\n *\n * export default defineConfig({\n * backend: 'legacy',\n * log: { provider: 'winston' },\n * builder: { prefix: 'with' },\n * });\n */\nexport function defineConfig(config: LombokConfig): LombokConfig {\n return config;\n}\n","/**\n * `lombok-typescript`: a TypeScript port of Project Lombok plus GoF design\n * patterns as decorators.\n *\n * Sub-paths:\n * - `lombok-typescript/legacy`: legacy `experimentalDecorators` backend\n * - `lombok-typescript/stage3`: Stage 3 ECMAScript decorators backend\n * - `lombok-typescript/core`: backend-agnostic primitives\n * - `lombok-typescript/codegen`: ts-morph powered code generation\n *\n * @see https://github.com/A-Dev-Kit/lombok-typescript\n */\n\nexport type {\n Backend,\n MetadataStore,\n BackendKind,\n DecoratorKind,\n PropertyName,\n} from './core/index.js';\nexport { MetadataKeys, METADATA_KEY_PREFIX, WeakMapMetadataStore } from './core/index.js';\nexport type { MetadataKey } from './core/index.js';\n\nexport { defineConfig } from './config.js';\nexport type {\n LombokConfig,\n LogConfig,\n BuilderConfig,\n ToStringConfig,\n ValidateConfig,\n CodegenConfig,\n} from './config.js';\n\nexport const VERSION = '0.1.0-pre';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/metadata-store.ts","../src/core/metadata-keys.ts","../src/config.ts","../src/index.ts"],"names":["bucket"],"mappings":"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","file":"index.js","sourcesContent":["import type { MetadataKeyList, PropertyName } from './types.js';\n\n/**\n * Storage interface used by both decorator backends. Legacy delegates to\n * `reflect-metadata`; Stage 3 uses the WeakMap implementation below.\n */\nexport interface MetadataStore {\n /** Store `value` under `key`. Omit `propertyKey` for class-level scope. */\n set<V>(key: string, target: object, propertyKey: PropertyName | undefined, value: V): void;\n\n /** Read the value stored under `key`, or `undefined`. */\n get<V>(key: string, target: object, propertyKey?: PropertyName): V | undefined;\n\n /** True if `key` exists at the given scope. */\n has(key: string, target: object, propertyKey?: PropertyName): boolean;\n\n /** Remove the entry. Returns true if it existed. */\n delete(key: string, target: object, propertyKey?: PropertyName): boolean;\n\n /** All keys at the given scope. */\n list(target: object, propertyKey?: PropertyName): MetadataKeyList;\n}\n\n/**\n * WeakMap-backed `MetadataStore`. Used directly by the Stage 3 backend.\n * Layout: target -> (propertyKey or class-level) -> key -> value.\n */\nexport class WeakMapMetadataStore implements MetadataStore {\n private readonly classScopes = new WeakMap<object, Map<string, unknown>>();\n private readonly memberScopes = new WeakMap<object, Map<string | symbol, Map<string, unknown>>>();\n\n set<V>(key: string, target: object, propertyKey: PropertyName | undefined, value: V): void {\n const bucket = this.bucket(target, propertyKey, true)!;\n bucket.set(key, value);\n }\n\n get<V>(key: string, target: object, propertyKey?: PropertyName): V | undefined {\n const bucket = this.bucket(target, propertyKey, false);\n return bucket?.get(key) as V | undefined;\n }\n\n has(key: string, target: object, propertyKey?: PropertyName): boolean {\n const bucket = this.bucket(target, propertyKey, false);\n return bucket?.has(key) ?? false;\n }\n\n delete(key: string, target: object, propertyKey?: PropertyName): boolean {\n const bucket = this.bucket(target, propertyKey, false);\n if (!bucket) return false;\n return bucket.delete(key);\n }\n\n list(target: object, propertyKey?: PropertyName): MetadataKeyList {\n const bucket = this.bucket(target, propertyKey, false);\n if (!bucket) return [];\n return Array.from(bucket.keys());\n }\n\n private bucket(\n target: object,\n propertyKey: PropertyName | undefined,\n createIfMissing: boolean,\n ): Map<string, unknown> | undefined {\n if (propertyKey === undefined) {\n let bucket = this.classScopes.get(target);\n if (!bucket && createIfMissing) {\n bucket = new Map();\n this.classScopes.set(target, bucket);\n }\n return bucket;\n }\n\n let perTarget = this.memberScopes.get(target);\n if (!perTarget) {\n if (!createIfMissing) return undefined;\n perTarget = new Map();\n this.memberScopes.set(target, perTarget);\n }\n\n let bucket = perTarget.get(propertyKey);\n if (!bucket) {\n if (!createIfMissing) return undefined;\n bucket = new Map();\n perTarget.set(propertyKey, bucket);\n }\n return bucket;\n }\n}\n","/**\n * Metadata keys used across the library. Adding one? Use the `lombok-ts:`\n * prefix and check `metadata-keys.test.ts` so uniqueness stays enforced.\n */\n\nconst PREFIX = 'lombok-ts:';\n\nexport const MetadataKeys = {\n // Class-level (Lombok)\n DATA: `${PREFIX}data`,\n VALUE: `${PREFIX}value`,\n BUILDER: `${PREFIX}builder`,\n TO_STRING: `${PREFIX}toString`,\n EQUALS: `${PREFIX}equals`,\n UTILITY_CLASS: `${PREFIX}utilityClass`,\n FIELD_DEFAULTS: `${PREFIX}fieldDefaults`,\n ACCESSORS: `${PREFIX}accessors`,\n LOG: `${PREFIX}log`,\n\n // Class-level (TS-only)\n OBSERVABLE: `${PREFIX}observable`,\n SERIALIZABLE: `${PREFIX}serializable`,\n DEEP_FREEZE: `${PREFIX}deepFreeze`,\n TRACE: `${PREFIX}trace`,\n\n // Class-level (GoF)\n SINGLETON: `${PREFIX}singleton`,\n FACTORY: `${PREFIX}factory`,\n ABSTRACT_FACTORY: `${PREFIX}abstractFactory`,\n PROTOTYPE: `${PREFIX}prototype`,\n ADAPTER: `${PREFIX}adapter`,\n BRIDGE: `${PREFIX}bridge`,\n COMPOSITE: `${PREFIX}composite`,\n WRAPS: `${PREFIX}wraps`,\n FACADE: `${PREFIX}facade`,\n FLYWEIGHT: `${PREFIX}flyweight`,\n PROXY: `${PREFIX}proxy`,\n CHAIN_OF_RESPONSIBILITY: `${PREFIX}chainOfResponsibility`,\n COMMAND: `${PREFIX}command`,\n INTERPRETER: `${PREFIX}interpreter`,\n ITERABLE: `${PREFIX}iterable`,\n MEDIATOR: `${PREFIX}mediator`,\n MEMENTO: `${PREFIX}memento`,\n STATE: `${PREFIX}state`,\n STRATEGY: `${PREFIX}strategy`,\n TEMPLATE_METHOD: `${PREFIX}templateMethod`,\n VISITABLE: `${PREFIX}visitable`,\n VISITOR: `${PREFIX}visitor`,\n\n // Field-level\n GETTER: `${PREFIX}getter`,\n SETTER: `${PREFIX}setter`,\n NON_NULL: `${PREFIX}nonNull`,\n WITH: `${PREFIX}with`,\n DELEGATE: `${PREFIX}delegate`,\n VALIDATE: `${PREFIX}validate`,\n TO_STRING_EXCLUDE: `${PREFIX}toString:exclude`,\n TO_STRING_INCLUDE: `${PREFIX}toString:include`,\n EQUALS_EXCLUDE: `${PREFIX}equals:exclude`,\n SERIALIZABLE_EXCLUDE: `${PREFIX}serializable:exclude`,\n SERIALIZABLE_TRANSFORM: `${PREFIX}serializable:transform`,\n SERIALIZABLE_ALIAS: `${PREFIX}serializable:alias`,\n BUILDER_DEFAULT: `${PREFIX}builder:default`,\n SINGULAR: `${PREFIX}singular`,\n ITERATE_OVER: `${PREFIX}iterateOver`,\n\n // Method-level\n MEMOIZE: `${PREFIX}memoize`,\n DEBOUNCE: `${PREFIX}debounce`,\n THROTTLE: `${PREFIX}throttle`,\n RETRY: `${PREFIX}retry`,\n HANDLER: `${PREFIX}handler`,\n TRANSITION: `${PREFIX}transition`,\n HOOK: `${PREFIX}hook`,\n\n // Parameter-level\n NON_NULL_PARAM: `${PREFIX}nonNull:param`,\n\n // Internal, framework-managed\n FIELDS: `${PREFIX}internal:fields`,\n CONSTRUCTOR_PARAMS: `${PREFIX}internal:constructorParams`,\n BACKEND: `${PREFIX}internal:backend`,\n} as const;\n\nexport type MetadataKey = (typeof MetadataKeys)[keyof typeof MetadataKeys];\n\nexport const METADATA_KEY_PREFIX = PREFIX;\n","import type { BackendKind } from './core/types.js';\n\nexport interface LogConfig {\n /** Logging provider. Default `'console'`. */\n provider: 'console' | 'winston' | 'pino' | 'bunyan';\n\n /** Default log level. Default `'info'`. */\n defaultLevel: 'debug' | 'info' | 'warn' | 'error';\n}\n\nexport interface BuilderConfig {\n /** Prefix for builder setter methods. Default `''` (so `name()`, not `withName()`). */\n prefix: string;\n\n /** Name of the build method. Default `'build'`. */\n buildMethodName: string;\n\n /** Name of the static builder method. Default `'builder'`. */\n builderMethodName: string;\n}\n\nexport interface ToStringConfig {\n /** Output format. Default `'pretty'`. */\n format: 'pretty' | 'json' | 'compact';\n\n /** Include the class name in output. Default `true`. */\n includeClassName: boolean;\n}\n\nexport interface ValidateConfig {\n /** Validation library. Default `'zod'`. */\n provider: 'zod' | 'yup' | 'class-validator';\n\n /** Throw on validation failure. Default `true`. */\n throwOnError: boolean;\n}\n\nexport interface CodegenConfig {\n /** Where to write generated companion files. Default `'.lombok'`. */\n outputDir: string;\n\n /** Glob patterns for files to process. Default `['src/** /*.ts']`. */\n include: string[];\n\n /** Glob patterns for files to skip. Defaults exclude tests, `dist`, and `.lombok`. */\n exclude: string[];\n\n /** Path to the project's tsconfig. Default `'tsconfig.json'`. */\n tsConfigPath: string;\n\n /** Watch for source changes and regenerate companions. Default `false`. */\n watch: boolean;\n}\n\n/**\n * Top-level lombok-typescript config.\n *\n * `backend` chooses which decorator standard to assume:\n * - `'legacy'`: `experimentalDecorators` (NestJS / class-validator ecosystem)\n * - `'stage3'`: Stage 3 ECMAScript decorators (TS 5.0+)\n * - `'auto'`: detect from the project's tsconfig\n *\n * The `@ToString` config field is named `formatToString` (not `toString`) so it\n * doesn't clash with `Object.prototype.toString`.\n */\nexport interface LombokConfig {\n /** Decorator backend. Default `'auto'`. */\n backend?: BackendKind | 'auto';\n\n log?: Partial<LogConfig>;\n builder?: Partial<BuilderConfig>;\n /** Settings for the `@ToString` decorator. */\n formatToString?: Partial<ToStringConfig>;\n validate?: Partial<ValidateConfig>;\n codegen?: Partial<CodegenConfig>;\n}\n\n/**\n * Identity helper that gives you autocomplete in `lombok.config.ts`.\n *\n * @example\n * import { defineConfig } from 'lombok-typescript';\n *\n * export default defineConfig({\n * backend: 'legacy',\n * log: { provider: 'winston' },\n * builder: { prefix: 'with' },\n * });\n */\nexport function defineConfig(config: LombokConfig): LombokConfig {\n return config;\n}\n","/**\n * `lombok-typescript`: a TypeScript port of Project Lombok plus GoF design\n * patterns as decorators.\n *\n * Sub-paths:\n * - `lombok-typescript/legacy`: legacy `experimentalDecorators` backend\n * - `lombok-typescript/stage3`: Stage 3 ECMAScript decorators backend\n * - `lombok-typescript/core`: backend-agnostic primitives\n * - `lombok-typescript/codegen`: ts-morph powered code generation\n *\n * @see https://github.com/A-Dev-Kit/lombok-typescript\n */\n\nexport type {\n Backend,\n MetadataStore,\n BackendKind,\n DecoratorKind,\n PropertyName,\n} from './core/index.js';\nexport { MetadataKeys, METADATA_KEY_PREFIX, WeakMapMetadataStore } from './core/index.js';\nexport type { MetadataKey } from './core/index.js';\n\nexport { defineConfig } from './config.js';\nexport type {\n LombokConfig,\n LogConfig,\n BuilderConfig,\n ToStringConfig,\n ValidateConfig,\n CodegenConfig,\n} from './config.js';\n\nexport const VERSION = '0.4.0-pre';\n"]}
|