Architecture
Three decorator mechanisms
| Mechanism | Examples | When it runs |
|---|---|---|
| Runtime | @Singleton, @Prototype, @Memoize, @NonNull | At class/method decoration time; no generate step required |
| Codegen | @Data, @Builder, @ToString | lombok-ts generate writes companions; you call applyAllGenerated at startup |
| Hybrid | @Factory | Runtime registry + optional generated types |
Codegen pipeline
You decorate classes in
src/**/*.ts.lombok-ts generatescans configured globs (see Configuration).For each file with decorated classes, emit:
.lombok/.../file.lombok.ts— builder classes, getter/setter functions,apply*Generatedmixins.lombok/.../file.lombok.d.ts—declare moduleaugmentation for IDE types
Include generated files in
tsconfig.json:
jsonc
{
"include": ["src/**/*.ts", ".lombok/**/*.ts", ".lombok/**/*.d.ts"],
}- After imports resolve, call apply helpers once (e.g. in
main.ts):
ts
import { User } from './user.js';
import { applyAllGenerated } from '../.lombok/src/user.lombok.js';
applyAllGenerated({ User });NodeNext imports
Companion files import your sources with .js extensions and paths relative to .lombok/, matching moduleResolution: NodeNext.
Package layout
| Export | Role |
|---|---|
lombok-typescript/legacy | Legacy decorator factories |
lombok-typescript/stage3 | Stage 3 decorator factories |
lombok-typescript/codegen | Generator types (advanced) |
lombok-typescript | defineConfig, shared entry |
NestJS
| Entry point | Role |
|---|---|
lombok-typescript/nestjs | LombokModule, @LogNest, scope helpers (optional @nestjs peers) |
Built into the core package — no separate install. See NestJS integration.
v0.1 limitations
@Datadoes not replace your class constructor; generated getters/setters are mixed onto the prototype viaapply*Generated.@Builderbuilds instances by assigning fields afternew Class()— your class needs assignable properties.lombok-ts watchregenerates companions on file changes (Phase 2+).- NestJS: import from
lombok-typescript/nestjsforLombokModuleand@LogNest(see NestJS integration).
See Examples for end-to-end projects.