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
package/dist/stage3/index.js
CHANGED
|
@@ -88,13 +88,25 @@ var PREFIX = "lombok-ts:";
|
|
|
88
88
|
var MetadataKeys = {
|
|
89
89
|
// Class-level (Lombok)
|
|
90
90
|
DATA: `${PREFIX}data`,
|
|
91
|
+
VALUE: `${PREFIX}value`,
|
|
91
92
|
BUILDER: `${PREFIX}builder`,
|
|
92
93
|
TO_STRING: `${PREFIX}toString`,
|
|
94
|
+
EQUALS: `${PREFIX}equals`,
|
|
95
|
+
UTILITY_CLASS: `${PREFIX}utilityClass`,
|
|
96
|
+
FIELD_DEFAULTS: `${PREFIX}fieldDefaults`,
|
|
97
|
+
ACCESSORS: `${PREFIX}accessors`,
|
|
98
|
+
LOG: `${PREFIX}log`,
|
|
93
99
|
// Class-level (GoF)
|
|
94
100
|
SINGLETON: `${PREFIX}singleton`,
|
|
95
101
|
FACTORY: `${PREFIX}factory`,
|
|
96
102
|
PROTOTYPE: `${PREFIX}prototype`,
|
|
103
|
+
// Field-level
|
|
104
|
+
GETTER: `${PREFIX}getter`,
|
|
105
|
+
SETTER: `${PREFIX}setter`,
|
|
97
106
|
NON_NULL: `${PREFIX}nonNull`,
|
|
107
|
+
WITH: `${PREFIX}with`,
|
|
108
|
+
DELEGATE: `${PREFIX}delegate`,
|
|
109
|
+
EQUALS_EXCLUDE: `${PREFIX}equals:exclude`,
|
|
98
110
|
// Method-level
|
|
99
111
|
MEMOIZE: `${PREFIX}memoize`};
|
|
100
112
|
|
|
@@ -221,6 +233,131 @@ function memoizeMethodStage3(backend, value, context, options = {}) {
|
|
|
221
233
|
return memoizeMethod(value, options);
|
|
222
234
|
}
|
|
223
235
|
|
|
236
|
+
// src/decorators/shared/accessors.ts
|
|
237
|
+
function normalizeAccessorsOptions(options = {}) {
|
|
238
|
+
return { chain: Boolean(options.chain ?? options.fluent) };
|
|
239
|
+
}
|
|
240
|
+
function accessorsClassStage3(backend, value, context, options = {}) {
|
|
241
|
+
const normalized = normalizeAccessorsOptions(options);
|
|
242
|
+
backend.metadata.set(MetadataKeys.ACCESSORS, context.metadata, void 0, normalized);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// src/decorators/shared/markers.ts
|
|
246
|
+
function fieldMarkerStage3(backend, context, metadataKey, value = true) {
|
|
247
|
+
backend.metadata.set(metadataKey, context.metadata, context.name, value);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// src/decorators/shared/delegate.ts
|
|
251
|
+
function parseDelegateMethods(args) {
|
|
252
|
+
if (args.length === 0) return [];
|
|
253
|
+
if (args.length === 1 && Array.isArray(args[0])) {
|
|
254
|
+
return args[0];
|
|
255
|
+
}
|
|
256
|
+
return args.map(String);
|
|
257
|
+
}
|
|
258
|
+
function delegateFieldStage3(backend, context, methods = []) {
|
|
259
|
+
fieldMarkerStage3(backend, context, MetadataKeys.DELEGATE, methods);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// src/decorators/shared/equals.ts
|
|
263
|
+
function equalsClassStage3(backend, value, context) {
|
|
264
|
+
codegenClassMarkerStage3(backend, value, context, MetadataKeys.EQUALS);
|
|
265
|
+
}
|
|
266
|
+
function equalsExcludeFieldStage3(backend, context) {
|
|
267
|
+
fieldMarkerStage3(backend, context, MetadataKeys.EQUALS_EXCLUDE);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// src/decorators/shared/field-defaults.ts
|
|
271
|
+
function normalizeFieldDefaultsOptions(options = {}) {
|
|
272
|
+
return {
|
|
273
|
+
level: options.level ?? "public",
|
|
274
|
+
makeFinal: options.makeFinal ?? false
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function fieldDefaultsClassStage3(backend, _value, context, options = {}) {
|
|
278
|
+
const normalized = normalizeFieldDefaultsOptions(options);
|
|
279
|
+
backend.metadata.set(
|
|
280
|
+
MetadataKeys.FIELD_DEFAULTS,
|
|
281
|
+
context.metadata,
|
|
282
|
+
void 0,
|
|
283
|
+
normalized
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// src/decorators/shared/getter.ts
|
|
288
|
+
function getterFieldStage3(backend, context) {
|
|
289
|
+
fieldMarkerStage3(backend, context, MetadataKeys.GETTER);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// src/decorators/shared/log.ts
|
|
293
|
+
function wrapPrototypeMethods(target, options = {}) {
|
|
294
|
+
const proto = target.prototype;
|
|
295
|
+
const loggerName = options.name ?? target.name;
|
|
296
|
+
const level = options.level ?? "info";
|
|
297
|
+
const logFn = level === "warn" ? console.warn : level === "error" ? console.error : console.info;
|
|
298
|
+
for (const key of Object.getOwnPropertyNames(proto)) {
|
|
299
|
+
if (key === "constructor") continue;
|
|
300
|
+
const desc = Object.getOwnPropertyDescriptor(proto, key);
|
|
301
|
+
if (!desc || typeof desc.value !== "function") continue;
|
|
302
|
+
const original = desc.value;
|
|
303
|
+
desc.value = function logWrapper(...args) {
|
|
304
|
+
logFn.call(console, `[${loggerName}] ${key}`, ...args);
|
|
305
|
+
return original.apply(this, args);
|
|
306
|
+
};
|
|
307
|
+
Object.defineProperty(proto, key, desc);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
function logClassStage3(backend, value, context, options = {}) {
|
|
311
|
+
backend.metadata.set(MetadataKeys.LOG, context.metadata, void 0, options);
|
|
312
|
+
wrapPrototypeMethods(value, options);
|
|
313
|
+
}
|
|
314
|
+
function logMethodStage3(backend, value, context, options = {}) {
|
|
315
|
+
backend.metadata.set(MetadataKeys.LOG, context.metadata, context.name, options);
|
|
316
|
+
const methodName = String(context.name);
|
|
317
|
+
const loggerName = options.name ?? "Method";
|
|
318
|
+
const level = options.level ?? "info";
|
|
319
|
+
const logFn = level === "warn" ? console.warn : level === "error" ? console.error : console.info;
|
|
320
|
+
return function logWrapper(...args) {
|
|
321
|
+
logFn.call(console, `[${loggerName}] ${methodName}`, ...args);
|
|
322
|
+
return value.apply(this, args);
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// src/decorators/shared/setter.ts
|
|
327
|
+
function setterFieldStage3(backend, context) {
|
|
328
|
+
fieldMarkerStage3(backend, context, MetadataKeys.SETTER);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// src/decorators/shared/utility-class.ts
|
|
332
|
+
function utilityClassStage3(backend, value, context) {
|
|
333
|
+
backend.metadata.set(MetadataKeys.UTILITY_CLASS, context.metadata, void 0, true);
|
|
334
|
+
codegenClassMarkerStage3(backend, value, context, MetadataKeys.UTILITY_CLASS);
|
|
335
|
+
const Wrapped = class extends value {
|
|
336
|
+
constructor(...args) {
|
|
337
|
+
if (new.target !== Wrapped) {
|
|
338
|
+
return Reflect.construct(value, args, new.target);
|
|
339
|
+
}
|
|
340
|
+
super(...args);
|
|
341
|
+
throw new TypeError(`Utility class ${value.name} cannot be instantiated`);
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
Object.defineProperty(Wrapped, "name", { value: value.name });
|
|
345
|
+
return Wrapped;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// src/decorators/shared/value.ts
|
|
349
|
+
function valueClassStage3(backend, value, context) {
|
|
350
|
+
codegenClassMarkerStage3(backend, value, context, MetadataKeys.VALUE);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// src/decorators/shared/with.ts
|
|
354
|
+
function withClassStage3(backend, value, context) {
|
|
355
|
+
codegenClassMarkerStage3(backend, value, context, MetadataKeys.WITH);
|
|
356
|
+
}
|
|
357
|
+
function withFieldStage3(backend, context) {
|
|
358
|
+
fieldMarkerStage3(backend, context, MetadataKeys.WITH);
|
|
359
|
+
}
|
|
360
|
+
|
|
224
361
|
// src/decorators/stage3/index.ts
|
|
225
362
|
var NonNull = defineFieldDecorator(nonNullFieldStage3);
|
|
226
363
|
var Singleton = defineClassDecorator(singletonClassStage3);
|
|
@@ -238,18 +375,70 @@ function Factory(key) {
|
|
|
238
375
|
var Data = defineClassDecorator(
|
|
239
376
|
(backend, value, context) => codegenClassMarkerStage3(backend, value, context, MetadataKeys.DATA)
|
|
240
377
|
);
|
|
378
|
+
var Value = defineClassDecorator(
|
|
379
|
+
(backend, value, context) => valueClassStage3(backend, value, context)
|
|
380
|
+
);
|
|
241
381
|
var Builder = defineClassDecorator(
|
|
242
382
|
(backend, value, context) => codegenClassMarkerStage3(backend, value, context, MetadataKeys.BUILDER)
|
|
243
383
|
);
|
|
244
384
|
var ToString = defineClassDecorator(
|
|
245
385
|
(backend, value, context) => codegenClassMarkerStage3(backend, value, context, MetadataKeys.TO_STRING)
|
|
246
386
|
);
|
|
387
|
+
var Equals = defineClassDecorator(
|
|
388
|
+
(backend, value, context) => equalsClassStage3(backend, value, context)
|
|
389
|
+
);
|
|
390
|
+
var withClassDec = defineClassDecorator(withClassStage3);
|
|
391
|
+
var withFieldDec = defineFieldDecorator(withFieldStage3);
|
|
392
|
+
function With() {
|
|
393
|
+
return function decorator(value, context) {
|
|
394
|
+
if (context.kind === "class") {
|
|
395
|
+
return withClassDec(
|
|
396
|
+
value,
|
|
397
|
+
context
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
return withFieldDec(value, context);
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
var Getter = defineFieldDecorator(getterFieldStage3);
|
|
404
|
+
var Setter = defineFieldDecorator(setterFieldStage3);
|
|
405
|
+
function Log(options = {}) {
|
|
406
|
+
return function decorator(value, context) {
|
|
407
|
+
if (context.kind === "class") {
|
|
408
|
+
return defineClassDecorator(
|
|
409
|
+
(backend, ctor, ctx) => logClassStage3(backend, ctor, ctx, options)
|
|
410
|
+
)(value, context);
|
|
411
|
+
}
|
|
412
|
+
return defineMethodDecorator(
|
|
413
|
+
(backend, method, ctx) => logMethodStage3(backend, method, ctx, options)
|
|
414
|
+
)(value, context);
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
function Accessors(options = {}) {
|
|
418
|
+
return defineClassDecorator(
|
|
419
|
+
(backend, value, context) => accessorsClassStage3(backend, value, context, options)
|
|
420
|
+
);
|
|
421
|
+
}
|
|
422
|
+
var UtilityClass = defineClassDecorator(
|
|
423
|
+
(backend, value, context) => utilityClassStage3(backend, value, context)
|
|
424
|
+
);
|
|
425
|
+
function FieldDefaults(options = {}) {
|
|
426
|
+
return defineClassDecorator(
|
|
427
|
+
(backend, value, context) => fieldDefaultsClassStage3(backend, value, context, options)
|
|
428
|
+
);
|
|
429
|
+
}
|
|
430
|
+
function Delegate(...methods) {
|
|
431
|
+
return defineFieldDecorator(
|
|
432
|
+
(backend, context) => delegateFieldStage3(backend, context, parseDelegateMethods(methods))
|
|
433
|
+
);
|
|
434
|
+
}
|
|
435
|
+
var EqualsExclude = defineFieldDecorator(equalsExcludeFieldStage3);
|
|
247
436
|
|
|
248
437
|
// src/stage3/index.ts
|
|
249
438
|
function getClassMetadata(cls) {
|
|
250
439
|
return cls[Symbol.metadata];
|
|
251
440
|
}
|
|
252
441
|
|
|
253
|
-
export { Builder, Data, Factory, Memoize, NonNull, Prototype, Singleton, Stage3Backend, ToString, createFromFactory, defineClassDecorator, defineFieldDecorator, defineGetterDecorator, defineMethodDecorator, defineSetterDecorator, getClassMetadata, getFactoryRegistry, registerFactory, stage3Backend };
|
|
442
|
+
export { Accessors, Builder, Data, Delegate, Equals, EqualsExclude, Factory, FieldDefaults, Getter, Log, Memoize, NonNull, Prototype, Setter, Singleton, Stage3Backend, ToString, UtilityClass, Value, With, createFromFactory, defineClassDecorator, defineFieldDecorator, defineGetterDecorator, defineMethodDecorator, defineSetterDecorator, getClassMetadata, getFactoryRegistry, registerFactory, stage3Backend };
|
|
254
443
|
//# sourceMappingURL=index.js.map
|
|
255
444
|
//# sourceMappingURL=index.js.map
|
package/dist/stage3/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/metadata-store.ts","../../src/stage3/backend.ts","../../src/stage3/decorate.ts","../../src/core/metadata-keys.ts","../../src/decorators/shared/factory.ts","../../src/decorators/shared/non-null.ts","../../src/decorators/shared/singleton.ts","../../src/utils/index.ts","../../src/decorators/shared/prototype.ts","../../src/decorators/shared/memoize.ts","../../src/decorators/shared/memoize-logic.ts","../../src/decorators/stage3/index.ts","../../src/stage3/index.ts"],"names":["bucket","Singleton","Prototype"],"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","import type { Backend } from '../core/backend.js';\nimport type { MetadataStore } from '../core/metadata-store.js';\nimport { WeakMapMetadataStore } from '../core/metadata-store.js';\n\n/**\n * Backend for the Stage 3 ECMAScript decorator standard (TS 5.0+).\n *\n * Stage 3 doesn't use `reflect-metadata`. Each decorator's `context.metadata`\n * is a per-class `Record<PropertyKey, unknown>` accessible at runtime as\n * `MyClass[Symbol.metadata]`. We key the WeakMap on that object so all\n * decorators on the same class share storage and consumers can recover the\n * metadata at runtime via `Class[Symbol.metadata]`.\n *\n * @see https://github.com/tc39/proposal-decorators\n * @see https://github.com/tc39/proposal-decorator-metadata\n */\nexport class Stage3Backend implements Backend {\n readonly kind = 'stage3' as const;\n readonly metadata: MetadataStore = new WeakMapMetadataStore();\n}\n\n/** Shared instance. */\nexport const stage3Backend = new Stage3Backend();\n","import type { Backend } from '../core/backend.js';\nimport type { AnyClass } from '../legacy/decorate.js';\nimport { stage3Backend } from './backend.js';\n\n/**\n * Logic shapes for Stage 3 decorator authoring.\n *\n * Stage 3 contexts are richer than legacy: `context.metadata` holds per-class\n * storage, `context.addInitializer(fn)` hooks into instance construction, and\n * `context.access` exposes get/set helpers. Logic functions get the full\n * context so they can use any of it.\n */\nexport type Stage3ClassLogic = (\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n) => AnyClass | void;\n\nexport type Stage3FieldLogic<This = unknown, Value = unknown> = (\n backend: Backend,\n context: ClassFieldDecoratorContext<This, Value>,\n) => ((this: This, initialValue: Value) => Value) | void;\n\nexport type Stage3MethodLogic<\n This = unknown,\n Args extends unknown[] = unknown[],\n Return = unknown,\n> = (\n backend: Backend,\n value: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n) => ((this: This, ...args: Args) => Return) | void;\n\nexport type Stage3GetterLogic<This = unknown, Value = unknown> = (\n backend: Backend,\n value: (this: This) => Value,\n context: ClassGetterDecoratorContext<This, Value>,\n) => ((this: This) => Value) | void;\n\nexport type Stage3SetterLogic<This = unknown, Value = unknown> = (\n backend: Backend,\n value: (this: This, v: Value) => void,\n context: ClassSetterDecoratorContext<This, Value>,\n) => ((this: This, v: Value) => void) | void;\n\n/**\n * Build a Stage 3 class decorator.\n *\n * @example\n * const Tracked = defineClassDecorator((backend, _value, context) => {\n * backend.metadata.set('tracked', context.metadata as object, undefined, true);\n * });\n */\nexport function defineClassDecorator(\n logic: Stage3ClassLogic,\n): <T extends AnyClass>(value: T, context: ClassDecoratorContext) => T | void {\n return function decorator<T extends AnyClass>(\n value: T,\n context: ClassDecoratorContext,\n ): T | void {\n return logic(stage3Backend, value, context) as T | void;\n };\n}\n\n/**\n * Build a Stage 3 field decorator. The logic can return an initializer\n * transformer that receives the field's initial value and returns the value\n * to store. Returning `void` leaves the initializer alone.\n */\nexport function defineFieldDecorator<This = unknown, Value = unknown>(\n logic: Stage3FieldLogic<This, Value>,\n) {\n return function decorator(\n _value: undefined,\n context: ClassFieldDecoratorContext<This, Value>,\n ): ((this: This, initialValue: Value) => Value) | void {\n return logic(stage3Backend, context);\n };\n}\n\n/** Build a Stage 3 method decorator. The logic may return a wrapping function. */\nexport function defineMethodDecorator<\n This = unknown,\n Args extends unknown[] = unknown[],\n Return = unknown,\n>(logic: Stage3MethodLogic<This, Args, Return>) {\n return function decorator(\n value: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n ): ((this: This, ...args: Args) => Return) | void {\n return logic(stage3Backend, value, context);\n };\n}\n\n/** Build a Stage 3 getter decorator. */\nexport function defineGetterDecorator<This = unknown, Value = unknown>(\n logic: Stage3GetterLogic<This, Value>,\n) {\n return function decorator(\n value: (this: This) => Value,\n context: ClassGetterDecoratorContext<This, Value>,\n ): ((this: This) => Value) | void {\n return logic(stage3Backend, value, context);\n };\n}\n\n/** Build a Stage 3 setter decorator. */\nexport function defineSetterDecorator<This = unknown, Value = unknown>(\n logic: Stage3SetterLogic<This, Value>,\n) {\n return function decorator(\n value: (this: This, v: Value) => void,\n context: ClassSetterDecoratorContext<This, Value>,\n ): ((this: This, v: Value) => void) | void {\n return logic(stage3Backend, value, context);\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 { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\n\n/** Global factory registry keyed by `@Factory('key')` string. */\nconst factoryRegistry = new Map<string, AnyClass>();\n\nexport function registerFactory(key: string, ctor: AnyClass): void {\n factoryRegistry.set(key, ctor);\n}\n\nexport function createFromFactory<T = unknown>(key: string, ...args: unknown[]): T {\n const ctor = factoryRegistry.get(key);\n if (!ctor) {\n throw new Error(`No factory registered for key \"${key}\"`);\n }\n return new ctor(...args) as T;\n}\n\nexport function getFactoryRegistry(): ReadonlyMap<string, AnyClass> {\n return factoryRegistry;\n}\n\nexport function factoryClassLegacy(backend: Backend, target: AnyClass, key: string): void {\n backend.metadata.set(MetadataKeys.FACTORY, target, undefined, key);\n registerFactory(key, target);\n}\n\nexport function factoryClassStage3(\n backend: Backend,\n _value: AnyClass,\n context: ClassDecoratorContext,\n key: string,\n): void {\n backend.metadata.set(MetadataKeys.FACTORY, context.metadata as object, undefined, key);\n registerFactory(key, _value);\n}\n\nexport function codegenClassMarkerLegacy(\n backend: Backend,\n target: AnyClass,\n metadataKey: string,\n): void {\n backend.metadata.set(metadataKey, target, undefined, true);\n}\n\nexport function codegenClassMarkerStage3(\n backend: Backend,\n _value: AnyClass,\n context: ClassDecoratorContext,\n metadataKey: string,\n): void {\n backend.metadata.set(metadataKey, context.metadata as object, undefined, true);\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { PropertyName } from '../../core/types.js';\n\nexport function assertNonNull(value: unknown, label: string): void {\n if (value === null || value === undefined) {\n throw new TypeError(`${label} must not be null or undefined`);\n }\n}\n\nexport function nonNullFieldLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n): void {\n backend.metadata.set(MetadataKeys.NON_NULL, targetPrototype, propertyKey, true);\n const key = String(propertyKey);\n let stored: unknown;\n\n Object.defineProperty(targetPrototype, propertyKey, {\n configurable: true,\n enumerable: true,\n get() {\n return stored;\n },\n set(value: unknown) {\n assertNonNull(value, key);\n stored = value;\n },\n });\n}\n\nexport function nonNullParameterLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName | undefined,\n parameterIndex: number,\n): void {\n backend.metadata.set(MetadataKeys.NON_NULL_PARAM, targetPrototype, propertyKey, parameterIndex);\n}\n\nexport function wrapMethodWithNonNullParams(\n original: (...args: unknown[]) => unknown,\n paramIndices: number[],\n methodName: string,\n): (...args: unknown[]) => unknown {\n return function (this: unknown, ...args: unknown[]) {\n for (const index of paramIndices) {\n assertNonNull(args[index], `${methodName} argument at index ${index}`);\n }\n return original.apply(this, args);\n };\n}\n\nexport function nonNullFieldStage3<This, Value>(\n backend: Backend,\n context: ClassFieldDecoratorContext<This, Value>,\n): ((this: This, initialValue: Value) => Value) | void {\n backend.metadata.set(MetadataKeys.NON_NULL, context.metadata as object, context.name, true);\n const name = String(context.name);\n return function (initialValue: Value): Value {\n assertNonNull(initialValue, name);\n return initialValue;\n };\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\n\nexport function singletonClassLegacy(backend: Backend, target: AnyClass): AnyClass {\n backend.metadata.set(MetadataKeys.SINGLETON, target, undefined, true);\n\n const Singleton = class extends target {\n static #instance: object | undefined;\n\n constructor(...args: unknown[]) {\n if (Singleton.#instance) {\n return Singleton.#instance;\n }\n super(...args);\n Singleton.#instance = this as object;\n }\n };\n\n return Singleton as AnyClass;\n}\n\nexport function singletonClassStage3(\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n): AnyClass {\n backend.metadata.set(MetadataKeys.SINGLETON, context.metadata as object, undefined, true);\n\n const Singleton = class extends value {\n static #instance: object | undefined;\n\n constructor(...args: unknown[]) {\n if (Singleton.#instance) {\n return Singleton.#instance;\n }\n super(...args);\n Singleton.#instance = this as object;\n }\n };\n\n return Singleton as AnyClass;\n}\n","/** Recursively clones primitives, arrays, and plain objects. */\nexport function deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => deepClone(item)) as T;\n }\n\n const cloned = {} as T;\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cloned[key] = deepClone(obj[key]);\n }\n }\n return cloned;\n}\n\n/** Freezes an object and recursively freezes its nested objects. */\nexport function deepFreeze<T extends object>(obj: T): Readonly<T> {\n Object.freeze(obj);\n\n for (const key of Object.keys(obj) as (keyof T)[]) {\n const value = obj[key];\n if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {\n deepFreeze(value as object);\n }\n }\n\n return obj;\n}\n\n/** Structural equality for primitives, arrays, and plain objects. */\nexport function deepEquals(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n\n if (typeof a !== typeof b) return false;\n\n if (a === null || b === null) return a === b;\n\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, index) => deepEquals(item, b[index]));\n }\n\n const aKeys = Object.keys(a as object);\n const bKeys = Object.keys(b as object);\n\n if (aKeys.length !== bKeys.length) return false;\n\n return aKeys.every((key) =>\n deepEquals((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]),\n );\n}\n\n/** djb2-ish 32-bit hash over the JSON-serialized value. */\nexport function hashCode(obj: unknown): number {\n const str = JSON.stringify(obj);\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return hash;\n}\n\n/** Uppercase the first letter. */\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/** Strip dashes/underscores, capitalize the next character. */\nexport function toCamelCase(str: string): string {\n return str.replace(/[-_](.)/g, (_, char) => char.toUpperCase());\n}\n\n/** `toCamelCase` plus uppercase first letter. */\nexport function toPascalCase(str: string): string {\n const camel = toCamelCase(str);\n return capitalize(camel);\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\nimport { deepClone } from '../../utils/index.js';\n\nexport function prototypeClassLegacy(backend: Backend, target: AnyClass): AnyClass {\n backend.metadata.set(MetadataKeys.PROTOTYPE, target, undefined, true);\n\n const Prototype = class extends target {\n constructor(...args: unknown[]) {\n super(...args);\n const clone = deepClone(this) as object;\n return clone;\n }\n };\n\n return Prototype as AnyClass;\n}\n\nexport function prototypeClassStage3(\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n): AnyClass {\n backend.metadata.set(MetadataKeys.PROTOTYPE, context.metadata as object, undefined, true);\n\n const Prototype = class extends value {\n constructor(...args: unknown[]) {\n super(...args);\n const clone = deepClone(this) as object;\n return clone;\n }\n };\n\n return Prototype as AnyClass;\n}\n","export interface MemoizeOptions {\n /** Time-to-live in milliseconds. Omit for infinite cache. */\n ttl?: number;\n}\n\ninterface CacheEntry {\n value: unknown;\n expiresAt?: number;\n}\n\nconst CACHE_MISS = Symbol('memoize-cache-miss');\n\nfunction buildCacheKey(args: unknown[]): string {\n return JSON.stringify(args);\n}\n\nfunction getFromCache(\n cache: Map<string, CacheEntry>,\n key: string,\n ttl?: number,\n): unknown | typeof CACHE_MISS {\n const entry = cache.get(key);\n if (!entry) return CACHE_MISS;\n if (ttl !== undefined && entry.expiresAt !== undefined && Date.now() > entry.expiresAt) {\n cache.delete(key);\n return CACHE_MISS;\n }\n return entry.value;\n}\n\nexport function memoizeMethod<T extends (...args: unknown[]) => unknown>(\n original: T,\n options: MemoizeOptions = {},\n): T {\n const cache = new Map<string, CacheEntry>();\n const ttl = options.ttl;\n\n return function (this: unknown, ...args: unknown[]) {\n const key = buildCacheKey(args);\n const cached = getFromCache(cache, key, ttl);\n if (cached !== CACHE_MISS) {\n return cached;\n }\n const result = original.apply(this, args);\n const entry: CacheEntry = { value: result };\n if (ttl !== undefined) {\n entry.expiresAt = Date.now() + ttl;\n }\n cache.set(key, entry);\n return result;\n } as T;\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { PropertyName } from '../../core/types.js';\nimport { memoizeMethod, type MemoizeOptions } from './memoize.js';\n\nexport function memoizeMethodLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n descriptor: PropertyDescriptor,\n options: MemoizeOptions = {},\n): PropertyDescriptor | void {\n backend.metadata.set(MetadataKeys.MEMOIZE, targetPrototype, propertyKey, options);\n const original = descriptor.value;\n if (typeof original !== 'function') return;\n return {\n ...descriptor,\n value: memoizeMethod(original as (...args: unknown[]) => unknown, options),\n };\n}\n\nexport function memoizeMethodStage3<This, Args extends unknown[], Return>(\n backend: Backend,\n value: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n options: MemoizeOptions = {},\n): (this: This, ...args: Args) => Return {\n backend.metadata.set(MetadataKeys.MEMOIZE, context.metadata as object, context.name, options);\n return memoizeMethod(value as (...args: unknown[]) => unknown, options) as (\n this: This,\n ...args: Args\n ) => Return;\n}\n","import { MetadataKeys } from '../../core/metadata-keys.js';\nimport {\n defineClassDecorator,\n defineFieldDecorator,\n defineMethodDecorator,\n} from '../../stage3/decorate.js';\nimport {\n codegenClassMarkerStage3,\n factoryClassStage3,\n createFromFactory,\n getFactoryRegistry,\n registerFactory,\n} from '../shared/factory.js';\nimport {\n memoizeMethodStage3,\n nonNullFieldStage3,\n prototypeClassStage3,\n singletonClassStage3,\n} from '../shared/index.js';\nimport type { MemoizeOptions } from '../shared/memoize.js';\n\n/** Validates field initial values are not null or undefined. */\nexport const NonNull = defineFieldDecorator(nonNullFieldStage3);\n\n/** Ensures only one instance of the class exists. */\nexport const Singleton = defineClassDecorator(singletonClassStage3);\n\n/** Returns a deep clone on every `new` call. */\nexport const Prototype = defineClassDecorator(prototypeClassStage3);\n\n/** Caches method return values. Optional TTL in milliseconds. */\nexport function Memoize(options: MemoizeOptions = {}) {\n return defineMethodDecorator((backend, value, context) =>\n memoizeMethodStage3(backend, value, context, options),\n );\n}\n\n/** Registers the class in the global factory registry under `key`. */\nexport function Factory(key: string) {\n return defineClassDecorator((backend, value, context) => {\n factoryClassStage3(backend, value, context, key);\n });\n}\n\n/** Composite Lombok `@Data` — codegen generates getters, setters, toString, equals. */\nexport const Data = defineClassDecorator((backend, value, context) =>\n codegenClassMarkerStage3(backend, value, context, MetadataKeys.DATA),\n);\n\n/** Fluent builder — codegen generates a companion builder class. */\nexport const Builder = defineClassDecorator((backend, value, context) =>\n codegenClassMarkerStage3(backend, value, context, MetadataKeys.BUILDER),\n);\n\n/** Auto `toString()` — codegen generates the method body. */\nexport const ToString = defineClassDecorator((backend, value, context) =>\n codegenClassMarkerStage3(backend, value, context, MetadataKeys.TO_STRING),\n);\n\nexport { createFromFactory, getFactoryRegistry, registerFactory };\n","/**\n * Stage 3 decorator backend, for the modern ECMAScript decorator standard\n * (TS 5.0+, with `experimentalDecorators` set to false or unset).\n *\n * No `reflect-metadata` here. Each decorator's `context.metadata` holds\n * per-class storage, accessible at runtime as `MyClass[Symbol.metadata]`.\n *\n * Stage 3 has no parameter decorators. Reach for the legacy backend if you\n * need them.\n *\n * @example\n * import { defineClassDecorator } from 'lombok-typescript/stage3';\n *\n * const Tracked = defineClassDecorator((backend, _value, context) => {\n * backend.metadata.set('tracked', context.metadata as object, undefined, true);\n * });\n */\n\nexport { Stage3Backend, stage3Backend } from './backend.js';\nexport {\n defineClassDecorator,\n defineFieldDecorator,\n defineMethodDecorator,\n defineGetterDecorator,\n defineSetterDecorator,\n} from './decorate.js';\nexport type {\n Stage3ClassLogic,\n Stage3FieldLogic,\n Stage3MethodLogic,\n Stage3GetterLogic,\n Stage3SetterLogic,\n} from './decorate.js';\nexport {\n NonNull,\n Singleton,\n Prototype,\n Memoize,\n Factory,\n Data,\n Builder,\n ToString,\n createFromFactory,\n getFactoryRegistry,\n registerFactory,\n} from '../decorators/stage3/index.js';\n\n/** Read the Stage 3 `Symbol.metadata` object from a class, if present. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getClassMetadata(cls: new (...args: any[]) => any): object | undefined {\n return (cls as { [Symbol.metadata]?: object })[Symbol.metadata];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/metadata-store.ts","../../src/stage3/backend.ts","../../src/stage3/decorate.ts","../../src/core/metadata-keys.ts","../../src/decorators/shared/factory.ts","../../src/decorators/shared/non-null.ts","../../src/decorators/shared/singleton.ts","../../src/utils/index.ts","../../src/decorators/shared/prototype.ts","../../src/decorators/shared/memoize.ts","../../src/decorators/shared/memoize-logic.ts","../../src/decorators/shared/accessors.ts","../../src/decorators/shared/markers.ts","../../src/decorators/shared/delegate.ts","../../src/decorators/shared/equals.ts","../../src/decorators/shared/field-defaults.ts","../../src/decorators/shared/getter.ts","../../src/decorators/shared/log.ts","../../src/decorators/shared/setter.ts","../../src/decorators/shared/utility-class.ts","../../src/decorators/shared/value.ts","../../src/decorators/shared/with.ts","../../src/decorators/stage3/index.ts","../../src/stage3/index.ts"],"names":["bucket","Singleton","Prototype"],"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","import type { Backend } from '../core/backend.js';\nimport type { MetadataStore } from '../core/metadata-store.js';\nimport { WeakMapMetadataStore } from '../core/metadata-store.js';\n\n/**\n * Backend for the Stage 3 ECMAScript decorator standard (TS 5.0+).\n *\n * Stage 3 doesn't use `reflect-metadata`. Each decorator's `context.metadata`\n * is a per-class `Record<PropertyKey, unknown>` accessible at runtime as\n * `MyClass[Symbol.metadata]`. We key the WeakMap on that object so all\n * decorators on the same class share storage and consumers can recover the\n * metadata at runtime via `Class[Symbol.metadata]`.\n *\n * @see https://github.com/tc39/proposal-decorators\n * @see https://github.com/tc39/proposal-decorator-metadata\n */\nexport class Stage3Backend implements Backend {\n readonly kind = 'stage3' as const;\n readonly metadata: MetadataStore = new WeakMapMetadataStore();\n}\n\n/** Shared instance. */\nexport const stage3Backend = new Stage3Backend();\n","import type { Backend } from '../core/backend.js';\nimport type { AnyClass } from '../legacy/decorate.js';\nimport { stage3Backend } from './backend.js';\n\n/**\n * Logic shapes for Stage 3 decorator authoring.\n *\n * Stage 3 contexts are richer than legacy: `context.metadata` holds per-class\n * storage, `context.addInitializer(fn)` hooks into instance construction, and\n * `context.access` exposes get/set helpers. Logic functions get the full\n * context so they can use any of it.\n */\nexport type Stage3ClassLogic = (\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n) => AnyClass | void;\n\nexport type Stage3FieldLogic<This = unknown, Value = unknown> = (\n backend: Backend,\n context: ClassFieldDecoratorContext<This, Value>,\n) => ((this: This, initialValue: Value) => Value) | void;\n\nexport type Stage3MethodLogic<\n This = unknown,\n Args extends unknown[] = unknown[],\n Return = unknown,\n> = (\n backend: Backend,\n value: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n) => ((this: This, ...args: Args) => Return) | void;\n\nexport type Stage3GetterLogic<This = unknown, Value = unknown> = (\n backend: Backend,\n value: (this: This) => Value,\n context: ClassGetterDecoratorContext<This, Value>,\n) => ((this: This) => Value) | void;\n\nexport type Stage3SetterLogic<This = unknown, Value = unknown> = (\n backend: Backend,\n value: (this: This, v: Value) => void,\n context: ClassSetterDecoratorContext<This, Value>,\n) => ((this: This, v: Value) => void) | void;\n\n/**\n * Build a Stage 3 class decorator.\n *\n * @example\n * const Tracked = defineClassDecorator((backend, _value, context) => {\n * backend.metadata.set('tracked', context.metadata as object, undefined, true);\n * });\n */\nexport function defineClassDecorator(\n logic: Stage3ClassLogic,\n): <T extends AnyClass>(value: T, context: ClassDecoratorContext) => T | void {\n return function decorator<T extends AnyClass>(\n value: T,\n context: ClassDecoratorContext,\n ): T | void {\n return logic(stage3Backend, value, context) as T | void;\n };\n}\n\n/**\n * Build a Stage 3 field decorator. The logic can return an initializer\n * transformer that receives the field's initial value and returns the value\n * to store. Returning `void` leaves the initializer alone.\n */\nexport function defineFieldDecorator<This = unknown, Value = unknown>(\n logic: Stage3FieldLogic<This, Value>,\n) {\n return function decorator(\n _value: undefined,\n context: ClassFieldDecoratorContext<This, Value>,\n ): ((this: This, initialValue: Value) => Value) | void {\n return logic(stage3Backend, context);\n };\n}\n\n/** Build a Stage 3 method decorator. The logic may return a wrapping function. */\nexport function defineMethodDecorator<\n This = unknown,\n Args extends unknown[] = unknown[],\n Return = unknown,\n>(logic: Stage3MethodLogic<This, Args, Return>) {\n return function decorator(\n value: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n ): ((this: This, ...args: Args) => Return) | void {\n return logic(stage3Backend, value, context);\n };\n}\n\n/** Build a Stage 3 getter decorator. */\nexport function defineGetterDecorator<This = unknown, Value = unknown>(\n logic: Stage3GetterLogic<This, Value>,\n) {\n return function decorator(\n value: (this: This) => Value,\n context: ClassGetterDecoratorContext<This, Value>,\n ): ((this: This) => Value) | void {\n return logic(stage3Backend, value, context);\n };\n}\n\n/** Build a Stage 3 setter decorator. */\nexport function defineSetterDecorator<This = unknown, Value = unknown>(\n logic: Stage3SetterLogic<This, Value>,\n) {\n return function decorator(\n value: (this: This, v: Value) => void,\n context: ClassSetterDecoratorContext<This, Value>,\n ): ((this: This, v: Value) => void) | void {\n return logic(stage3Backend, value, context);\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 { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\n\n/** Global factory registry keyed by `@Factory('key')` string. */\nconst factoryRegistry = new Map<string, AnyClass>();\n\nexport function registerFactory(key: string, ctor: AnyClass): void {\n factoryRegistry.set(key, ctor);\n}\n\nexport function createFromFactory<T = unknown>(key: string, ...args: unknown[]): T {\n const ctor = factoryRegistry.get(key);\n if (!ctor) {\n throw new Error(`No factory registered for key \"${key}\"`);\n }\n return new ctor(...args) as T;\n}\n\nexport function getFactoryRegistry(): ReadonlyMap<string, AnyClass> {\n return factoryRegistry;\n}\n\nexport function factoryClassLegacy(backend: Backend, target: AnyClass, key: string): void {\n backend.metadata.set(MetadataKeys.FACTORY, target, undefined, key);\n registerFactory(key, target);\n}\n\nexport function factoryClassStage3(\n backend: Backend,\n _value: AnyClass,\n context: ClassDecoratorContext,\n key: string,\n): void {\n backend.metadata.set(MetadataKeys.FACTORY, context.metadata as object, undefined, key);\n registerFactory(key, _value);\n}\n\nexport function codegenClassMarkerLegacy(\n backend: Backend,\n target: AnyClass,\n metadataKey: string,\n): void {\n backend.metadata.set(metadataKey, target, undefined, true);\n}\n\nexport function codegenClassMarkerStage3(\n backend: Backend,\n _value: AnyClass,\n context: ClassDecoratorContext,\n metadataKey: string,\n): void {\n backend.metadata.set(metadataKey, context.metadata as object, undefined, true);\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { PropertyName } from '../../core/types.js';\n\nexport function assertNonNull(value: unknown, label: string): void {\n if (value === null || value === undefined) {\n throw new TypeError(`${label} must not be null or undefined`);\n }\n}\n\nexport function nonNullFieldLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n): void {\n backend.metadata.set(MetadataKeys.NON_NULL, targetPrototype, propertyKey, true);\n const key = String(propertyKey);\n let stored: unknown;\n\n Object.defineProperty(targetPrototype, propertyKey, {\n configurable: true,\n enumerable: true,\n get() {\n return stored;\n },\n set(value: unknown) {\n assertNonNull(value, key);\n stored = value;\n },\n });\n}\n\nexport function nonNullParameterLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName | undefined,\n parameterIndex: number,\n): void {\n backend.metadata.set(MetadataKeys.NON_NULL_PARAM, targetPrototype, propertyKey, parameterIndex);\n}\n\nexport function wrapMethodWithNonNullParams(\n original: (...args: unknown[]) => unknown,\n paramIndices: number[],\n methodName: string,\n): (...args: unknown[]) => unknown {\n return function (this: unknown, ...args: unknown[]) {\n for (const index of paramIndices) {\n assertNonNull(args[index], `${methodName} argument at index ${index}`);\n }\n return original.apply(this, args);\n };\n}\n\nexport function nonNullFieldStage3<This, Value>(\n backend: Backend,\n context: ClassFieldDecoratorContext<This, Value>,\n): ((this: This, initialValue: Value) => Value) | void {\n backend.metadata.set(MetadataKeys.NON_NULL, context.metadata as object, context.name, true);\n const name = String(context.name);\n return function (initialValue: Value): Value {\n assertNonNull(initialValue, name);\n return initialValue;\n };\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\n\nexport function singletonClassLegacy(backend: Backend, target: AnyClass): AnyClass {\n backend.metadata.set(MetadataKeys.SINGLETON, target, undefined, true);\n\n const Singleton = class extends target {\n static #instance: object | undefined;\n\n constructor(...args: unknown[]) {\n if (Singleton.#instance) {\n return Singleton.#instance;\n }\n super(...args);\n Singleton.#instance = this as object;\n }\n };\n\n return Singleton as AnyClass;\n}\n\nexport function singletonClassStage3(\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n): AnyClass {\n backend.metadata.set(MetadataKeys.SINGLETON, context.metadata as object, undefined, true);\n\n const Singleton = class extends value {\n static #instance: object | undefined;\n\n constructor(...args: unknown[]) {\n if (Singleton.#instance) {\n return Singleton.#instance;\n }\n super(...args);\n Singleton.#instance = this as object;\n }\n };\n\n return Singleton as AnyClass;\n}\n","/** Recursively clones primitives, arrays, and plain objects. */\nexport function deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => deepClone(item)) as T;\n }\n\n const cloned = {} as T;\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cloned[key] = deepClone(obj[key]);\n }\n }\n return cloned;\n}\n\n/** Freezes an object and recursively freezes its nested objects. */\nexport function deepFreeze<T extends object>(obj: T): Readonly<T> {\n Object.freeze(obj);\n\n for (const key of Object.keys(obj) as (keyof T)[]) {\n const value = obj[key];\n if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {\n deepFreeze(value as object);\n }\n }\n\n return obj;\n}\n\n/** Structural equality for primitives, arrays, and plain objects. */\nexport function deepEquals(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n\n if (typeof a !== typeof b) return false;\n\n if (a === null || b === null) return a === b;\n\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, index) => deepEquals(item, b[index]));\n }\n\n const aKeys = Object.keys(a as object);\n const bKeys = Object.keys(b as object);\n\n if (aKeys.length !== bKeys.length) return false;\n\n return aKeys.every((key) =>\n deepEquals((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]),\n );\n}\n\n/** djb2-ish 32-bit hash over the JSON-serialized value. */\nexport function hashCode(obj: unknown): number {\n const str = JSON.stringify(obj);\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return hash;\n}\n\n/** Uppercase the first letter. */\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/** Strip dashes/underscores, capitalize the next character. */\nexport function toCamelCase(str: string): string {\n return str.replace(/[-_](.)/g, (_, char) => char.toUpperCase());\n}\n\n/** `toCamelCase` plus uppercase first letter. */\nexport function toPascalCase(str: string): string {\n const camel = toCamelCase(str);\n return capitalize(camel);\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\nimport { deepClone } from '../../utils/index.js';\n\nexport function prototypeClassLegacy(backend: Backend, target: AnyClass): AnyClass {\n backend.metadata.set(MetadataKeys.PROTOTYPE, target, undefined, true);\n\n const Prototype = class extends target {\n constructor(...args: unknown[]) {\n super(...args);\n const clone = deepClone(this) as object;\n return clone;\n }\n };\n\n return Prototype as AnyClass;\n}\n\nexport function prototypeClassStage3(\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n): AnyClass {\n backend.metadata.set(MetadataKeys.PROTOTYPE, context.metadata as object, undefined, true);\n\n const Prototype = class extends value {\n constructor(...args: unknown[]) {\n super(...args);\n const clone = deepClone(this) as object;\n return clone;\n }\n };\n\n return Prototype as AnyClass;\n}\n","export interface MemoizeOptions {\n /** Time-to-live in milliseconds. Omit for infinite cache. */\n ttl?: number;\n}\n\ninterface CacheEntry {\n value: unknown;\n expiresAt?: number;\n}\n\nconst CACHE_MISS = Symbol('memoize-cache-miss');\n\nfunction buildCacheKey(args: unknown[]): string {\n return JSON.stringify(args);\n}\n\nfunction getFromCache(\n cache: Map<string, CacheEntry>,\n key: string,\n ttl?: number,\n): unknown | typeof CACHE_MISS {\n const entry = cache.get(key);\n if (!entry) return CACHE_MISS;\n if (ttl !== undefined && entry.expiresAt !== undefined && Date.now() > entry.expiresAt) {\n cache.delete(key);\n return CACHE_MISS;\n }\n return entry.value;\n}\n\nexport function memoizeMethod<T extends (...args: unknown[]) => unknown>(\n original: T,\n options: MemoizeOptions = {},\n): T {\n const cache = new Map<string, CacheEntry>();\n const ttl = options.ttl;\n\n return function (this: unknown, ...args: unknown[]) {\n const key = buildCacheKey(args);\n const cached = getFromCache(cache, key, ttl);\n if (cached !== CACHE_MISS) {\n return cached;\n }\n const result = original.apply(this, args);\n const entry: CacheEntry = { value: result };\n if (ttl !== undefined) {\n entry.expiresAt = Date.now() + ttl;\n }\n cache.set(key, entry);\n return result;\n } as T;\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { PropertyName } from '../../core/types.js';\nimport { memoizeMethod, type MemoizeOptions } from './memoize.js';\n\nexport function memoizeMethodLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n descriptor: PropertyDescriptor,\n options: MemoizeOptions = {},\n): PropertyDescriptor | void {\n backend.metadata.set(MetadataKeys.MEMOIZE, targetPrototype, propertyKey, options);\n const original = descriptor.value;\n if (typeof original !== 'function') return;\n return {\n ...descriptor,\n value: memoizeMethod(original as (...args: unknown[]) => unknown, options),\n };\n}\n\nexport function memoizeMethodStage3<This, Args extends unknown[], Return>(\n backend: Backend,\n value: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n options: MemoizeOptions = {},\n): (this: This, ...args: Args) => Return {\n backend.metadata.set(MetadataKeys.MEMOIZE, context.metadata as object, context.name, options);\n return memoizeMethod(value as (...args: unknown[]) => unknown, options) as (\n this: This,\n ...args: Args\n ) => Return;\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\n\nexport interface AccessorsOptions {\n /** When true, setters return `this` for chaining. Alias: `fluent`. */\n chain?: boolean;\n /** Alias for `chain`. */\n fluent?: boolean;\n}\n\nexport function normalizeAccessorsOptions(\n options: AccessorsOptions = {},\n): Required<Pick<AccessorsOptions, 'chain'>> {\n return { chain: Boolean(options.chain ?? options.fluent) };\n}\n\nexport function accessorsClassLegacy(\n backend: Backend,\n target: AnyClass,\n options: AccessorsOptions = {},\n): void {\n const normalized = normalizeAccessorsOptions(options);\n backend.metadata.set(MetadataKeys.ACCESSORS, target, undefined, normalized);\n}\n\nexport function accessorsClassStage3(\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n options: AccessorsOptions = {},\n): void {\n const normalized = normalizeAccessorsOptions(options);\n backend.metadata.set(MetadataKeys.ACCESSORS, context.metadata as object, undefined, normalized);\n void value;\n}\n","import type { Backend } from '../../core/backend.js';\nimport type { PropertyName } from '../../core/types.js';\n\nexport function fieldMarkerLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n metadataKey: string,\n value: unknown = true,\n): void {\n backend.metadata.set(metadataKey, targetPrototype, propertyKey, value);\n}\n\nexport function fieldMarkerStage3(\n backend: Backend,\n context: ClassFieldDecoratorContext,\n metadataKey: string,\n value: unknown = true,\n): void {\n backend.metadata.set(metadataKey, context.metadata as object, context.name, value);\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { PropertyName } from '../../core/types.js';\nimport { fieldMarkerLegacy, fieldMarkerStage3 } from './markers.js';\n\nexport type DelegateMethods = readonly string[];\n\nexport function parseDelegateMethods(args: unknown[]): DelegateMethods {\n if (args.length === 0) return [];\n if (args.length === 1 && Array.isArray(args[0])) {\n return args[0] as string[];\n }\n return args.map(String);\n}\n\nexport function delegateFieldLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n methods: DelegateMethods = [],\n): void {\n fieldMarkerLegacy(backend, targetPrototype, propertyKey, MetadataKeys.DELEGATE, methods);\n}\n\nexport function delegateFieldStage3(\n backend: Backend,\n context: ClassFieldDecoratorContext,\n methods: DelegateMethods = [],\n): void {\n fieldMarkerStage3(backend, context, MetadataKeys.DELEGATE, methods);\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\nimport type { PropertyName } from '../../core/types.js';\nimport { codegenClassMarkerLegacy, codegenClassMarkerStage3 } from './factory.js';\nimport { fieldMarkerLegacy, fieldMarkerStage3 } from './markers.js';\n\nexport function equalsClassLegacy(backend: Backend, target: AnyClass): void {\n codegenClassMarkerLegacy(backend, target, MetadataKeys.EQUALS);\n}\n\nexport function equalsClassStage3(\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n): void {\n codegenClassMarkerStage3(backend, value, context, MetadataKeys.EQUALS);\n}\n\nexport function equalsExcludeFieldLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n): void {\n fieldMarkerLegacy(backend, targetPrototype, propertyKey, MetadataKeys.EQUALS_EXCLUDE);\n}\n\nexport function equalsExcludeFieldStage3(\n backend: Backend,\n context: ClassFieldDecoratorContext,\n): void {\n fieldMarkerStage3(backend, context, MetadataKeys.EQUALS_EXCLUDE);\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\n\nexport type FieldVisibility = 'public' | 'private' | 'protected';\n\nexport interface FieldDefaultsOptions {\n /** Default visibility for generated accessors. Default `'public'`. */\n level?: FieldVisibility;\n /** Treat non-readonly fields as readonly in generated code. Default `false`. */\n makeFinal?: boolean;\n}\n\nexport function normalizeFieldDefaultsOptions(\n options: FieldDefaultsOptions = {},\n): Required<FieldDefaultsOptions> {\n return {\n level: options.level ?? 'public',\n makeFinal: options.makeFinal ?? false,\n };\n}\n\nexport function fieldDefaultsClassLegacy(\n backend: Backend,\n target: AnyClass,\n options: FieldDefaultsOptions = {},\n): void {\n const normalized = normalizeFieldDefaultsOptions(options);\n backend.metadata.set(MetadataKeys.FIELD_DEFAULTS, target, undefined, normalized);\n}\n\nexport function fieldDefaultsClassStage3(\n backend: Backend,\n _value: AnyClass,\n context: ClassDecoratorContext,\n options: FieldDefaultsOptions = {},\n): void {\n const normalized = normalizeFieldDefaultsOptions(options);\n backend.metadata.set(\n MetadataKeys.FIELD_DEFAULTS,\n context.metadata as object,\n undefined,\n normalized,\n );\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { PropertyName } from '../../core/types.js';\nimport { fieldMarkerLegacy, fieldMarkerStage3 } from './markers.js';\n\nexport function getterFieldLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n): void {\n fieldMarkerLegacy(backend, targetPrototype, propertyKey, MetadataKeys.GETTER);\n}\n\nexport function getterFieldStage3(backend: Backend, context: ClassFieldDecoratorContext): void {\n fieldMarkerStage3(backend, context, MetadataKeys.GETTER);\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\nimport type { PropertyName } from '../../core/types.js';\n\nexport interface LogOptions {\n /** Logger name shown in output. Defaults to the class name. */\n name?: string;\n /** Log level prefix. Default `'info'`. */\n level?: 'debug' | 'info' | 'warn' | 'error';\n}\n\nfunction wrapPrototypeMethods(target: AnyClass, options: LogOptions = {}): void {\n const proto = target.prototype as Record<string, unknown>;\n const loggerName = options.name ?? target.name;\n const level = options.level ?? 'info';\n const logFn = level === 'warn' ? console.warn : level === 'error' ? console.error : console.info;\n\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (key === 'constructor') continue;\n const desc = Object.getOwnPropertyDescriptor(proto, key);\n if (!desc || typeof desc.value !== 'function') continue;\n const original = desc.value as (...args: unknown[]) => unknown;\n desc.value = function logWrapper(this: unknown, ...args: unknown[]) {\n logFn.call(console, `[${loggerName}] ${key}`, ...args);\n return original.apply(this, args);\n };\n Object.defineProperty(proto, key, desc);\n }\n}\n\nexport function logClassLegacy(backend: Backend, target: AnyClass, options: LogOptions = {}): void {\n backend.metadata.set(MetadataKeys.LOG, target, undefined, options);\n wrapPrototypeMethods(target, options);\n}\n\nexport function logClassStage3(\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n options: LogOptions = {},\n): void {\n backend.metadata.set(MetadataKeys.LOG, context.metadata as object, undefined, options);\n wrapPrototypeMethods(value, options);\n}\n\nexport function logMethodLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n descriptor: PropertyDescriptor,\n options: LogOptions = {},\n): PropertyDescriptor | void {\n backend.metadata.set(MetadataKeys.LOG, targetPrototype, propertyKey, options);\n const original = descriptor.value;\n if (typeof original !== 'function') return;\n const methodName = String(propertyKey);\n const loggerName = options.name ?? 'Method';\n const level = options.level ?? 'info';\n const logFn = level === 'warn' ? console.warn : level === 'error' ? console.error : console.info;\n return {\n ...descriptor,\n value: function logWrapper(this: unknown, ...args: unknown[]) {\n logFn.call(console, `[${loggerName}] ${methodName}`, ...args);\n return (original as (...a: unknown[]) => unknown).apply(this, args);\n },\n };\n}\n\nexport function logMethodStage3<This, Args extends unknown[], Return>(\n backend: Backend,\n value: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n options: LogOptions = {},\n): (this: This, ...args: Args) => Return {\n backend.metadata.set(MetadataKeys.LOG, context.metadata as object, context.name, options);\n const methodName = String(context.name);\n const loggerName = options.name ?? 'Method';\n const level = options.level ?? 'info';\n const logFn = level === 'warn' ? console.warn : level === 'error' ? console.error : console.info;\n return function logWrapper(this: This, ...args: Args): Return {\n logFn.call(console, `[${loggerName}] ${methodName}`, ...args);\n return value.apply(this, args);\n };\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { PropertyName } from '../../core/types.js';\nimport { fieldMarkerLegacy, fieldMarkerStage3 } from './markers.js';\n\nexport function setterFieldLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n): void {\n fieldMarkerLegacy(backend, targetPrototype, propertyKey, MetadataKeys.SETTER);\n}\n\nexport function setterFieldStage3(backend: Backend, context: ClassFieldDecoratorContext): void {\n fieldMarkerStage3(backend, context, MetadataKeys.SETTER);\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\nimport { codegenClassMarkerLegacy, codegenClassMarkerStage3 } from './factory.js';\n\nexport function utilityClassLegacy(backend: Backend, target: AnyClass): AnyClass {\n backend.metadata.set(MetadataKeys.UTILITY_CLASS, target, undefined, true);\n codegenClassMarkerLegacy(backend, target, MetadataKeys.UTILITY_CLASS);\n\n const Wrapped = class extends target {\n constructor(...args: unknown[]) {\n if (new.target !== Wrapped) {\n return Reflect.construct(target, args, new.target as new (...a: unknown[]) => object);\n }\n super(...args);\n throw new TypeError(`Utility class ${target.name} cannot be instantiated`);\n }\n };\n Object.defineProperty(Wrapped, 'name', { value: target.name });\n return Wrapped as AnyClass;\n}\n\nexport function utilityClassStage3(\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n): AnyClass {\n backend.metadata.set(MetadataKeys.UTILITY_CLASS, context.metadata as object, undefined, true);\n codegenClassMarkerStage3(backend, value, context, MetadataKeys.UTILITY_CLASS);\n\n const Wrapped = class extends value {\n constructor(...args: unknown[]) {\n if (new.target !== Wrapped) {\n return Reflect.construct(value, args, new.target as new (...a: unknown[]) => object);\n }\n super(...args);\n throw new TypeError(`Utility class ${value.name} cannot be instantiated`);\n }\n };\n Object.defineProperty(Wrapped, 'name', { value: value.name });\n return Wrapped as AnyClass;\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\nimport { codegenClassMarkerLegacy, codegenClassMarkerStage3 } from './factory.js';\n\nexport function valueClassLegacy(backend: Backend, target: AnyClass): void {\n codegenClassMarkerLegacy(backend, target, MetadataKeys.VALUE);\n}\n\nexport function valueClassStage3(\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n): void {\n codegenClassMarkerStage3(backend, value, context, MetadataKeys.VALUE);\n}\n","import type { Backend } from '../../core/backend.js';\nimport { MetadataKeys } from '../../core/metadata-keys.js';\nimport type { AnyClass } from '../../legacy/decorate.js';\nimport type { PropertyName } from '../../core/types.js';\nimport { codegenClassMarkerLegacy, codegenClassMarkerStage3 } from './factory.js';\nimport { fieldMarkerLegacy, fieldMarkerStage3 } from './markers.js';\n\nexport function withClassLegacy(backend: Backend, target: AnyClass): void {\n codegenClassMarkerLegacy(backend, target, MetadataKeys.WITH);\n}\n\nexport function withClassStage3(\n backend: Backend,\n value: AnyClass,\n context: ClassDecoratorContext,\n): void {\n codegenClassMarkerStage3(backend, value, context, MetadataKeys.WITH);\n}\n\nexport function withFieldLegacy(\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n): void {\n fieldMarkerLegacy(backend, targetPrototype, propertyKey, MetadataKeys.WITH);\n}\n\nexport function withFieldStage3(backend: Backend, context: ClassFieldDecoratorContext): void {\n fieldMarkerStage3(backend, context, MetadataKeys.WITH);\n}\n","import { MetadataKeys } from '../../core/metadata-keys.js';\nimport {\n defineClassDecorator,\n defineFieldDecorator,\n defineMethodDecorator,\n} from '../../stage3/decorate.js';\nimport {\n codegenClassMarkerStage3,\n factoryClassStage3,\n createFromFactory,\n getFactoryRegistry,\n registerFactory,\n} from '../shared/factory.js';\nimport {\n memoizeMethodStage3,\n nonNullFieldStage3,\n prototypeClassStage3,\n singletonClassStage3,\n} from '../shared/index.js';\nimport type { MemoizeOptions } from '../shared/memoize.js';\nimport type { AccessorsOptions } from '../shared/accessors.js';\nimport { accessorsClassStage3 } from '../shared/accessors.js';\nimport { delegateFieldStage3, parseDelegateMethods } from '../shared/delegate.js';\nimport { equalsClassStage3, equalsExcludeFieldStage3 } from '../shared/equals.js';\nimport type { FieldDefaultsOptions } from '../shared/field-defaults.js';\nimport { fieldDefaultsClassStage3 } from '../shared/field-defaults.js';\nimport { getterFieldStage3 } from '../shared/getter.js';\nimport type { LogOptions } from '../shared/log.js';\nimport { logClassStage3, logMethodStage3 } from '../shared/log.js';\nimport { setterFieldStage3 } from '../shared/setter.js';\nimport { utilityClassStage3 } from '../shared/utility-class.js';\nimport { valueClassStage3 } from '../shared/value.js';\nimport { withClassStage3, withFieldStage3 } from '../shared/with.js';\n\n/** Validates field initial values are not null or undefined. */\nexport const NonNull = defineFieldDecorator(nonNullFieldStage3);\n\n/** Ensures only one instance of the class exists. */\nexport const Singleton = defineClassDecorator(singletonClassStage3);\n\n/** Returns a deep clone on every `new` call. */\nexport const Prototype = defineClassDecorator(prototypeClassStage3);\n\n/** Caches method return values. Optional TTL in milliseconds. */\nexport function Memoize(options: MemoizeOptions = {}) {\n return defineMethodDecorator((backend, value, context) =>\n memoizeMethodStage3(backend, value, context, options),\n );\n}\n\n/** Registers the class in the global factory registry under `key`. */\nexport function Factory(key: string) {\n return defineClassDecorator((backend, value, context) => {\n factoryClassStage3(backend, value, context, key);\n });\n}\n\n/** Composite Lombok `@Data` — codegen generates getters, setters, toString, equals. */\nexport const Data = defineClassDecorator((backend, value, context) =>\n codegenClassMarkerStage3(backend, value, context, MetadataKeys.DATA),\n);\n\n/** Immutable value class — codegen generates getters, with*, toString, equals. */\nexport const Value = defineClassDecorator((backend, value, context) =>\n valueClassStage3(backend, value, context),\n);\n\n/** Fluent builder — codegen generates a companion builder class. */\nexport const Builder = defineClassDecorator((backend, value, context) =>\n codegenClassMarkerStage3(backend, value, context, MetadataKeys.BUILDER),\n);\n\n/** Auto `toString()` — codegen generates the method body. */\nexport const ToString = defineClassDecorator((backend, value, context) =>\n codegenClassMarkerStage3(backend, value, context, MetadataKeys.TO_STRING),\n);\n\n/** Structural `equals()` — codegen generates instance and static helpers. */\nexport const Equals = defineClassDecorator((backend, value, context) =>\n equalsClassStage3(backend, value, context),\n);\n\n/** Immutable copy helpers — class or field level `with*` methods. */\nconst withClassDec = defineClassDecorator(withClassStage3);\nconst withFieldDec = defineFieldDecorator(withFieldStage3);\n\nexport function With() {\n return function decorator(\n value: unknown,\n context: ClassDecoratorContext | ClassFieldDecoratorContext,\n ): unknown {\n if (context.kind === 'class') {\n return withClassDec(\n value as new (...args: unknown[]) => unknown,\n context as ClassDecoratorContext,\n );\n }\n return withFieldDec(value as undefined, context as ClassFieldDecoratorContext);\n };\n}\n\n/** Field getter — codegen generates `getField()`. */\nexport const Getter = defineFieldDecorator(getterFieldStage3);\n\n/** Field setter — codegen generates `setField()`. */\nexport const Setter = defineFieldDecorator(setterFieldStage3);\n\n/** Logs method entry via the configured provider (default `console`). */\nexport function Log(options: LogOptions = {}) {\n return function decorator(\n value: unknown,\n context: ClassDecoratorContext | ClassMethodDecoratorContext,\n ): unknown {\n if (context.kind === 'class') {\n return defineClassDecorator((backend, ctor, ctx) =>\n logClassStage3(backend, ctor, ctx, options),\n )(value as new (...args: unknown[]) => unknown, context as ClassDecoratorContext);\n }\n return defineMethodDecorator((backend, method, ctx) =>\n logMethodStage3(backend, method, ctx, options),\n )(value as (...args: unknown[]) => unknown, context as ClassMethodDecoratorContext);\n };\n}\n\n/** Fluent/chained accessor style for generated setters. */\nexport function Accessors(options: AccessorsOptions = {}) {\n return defineClassDecorator((backend, value, context) =>\n accessorsClassStage3(backend, value, context, options),\n );\n}\n\n/** Uninstantiable utility holder — constructor throws. */\nexport const UtilityClass = defineClassDecorator((backend, value, context) =>\n utilityClassStage3(backend, value, context),\n);\n\n/** Default field visibility and finality for codegen. */\nexport function FieldDefaults(options: FieldDefaultsOptions = {}) {\n return defineClassDecorator((backend, value, context) =>\n fieldDefaultsClassStage3(backend, value, context, options),\n );\n}\n\n/** Delegates methods to a field. Pass method names as decorator arguments. */\nexport function Delegate(...methods: string[]) {\n return defineFieldDecorator((backend, context) =>\n delegateFieldStage3(backend, context, parseDelegateMethods(methods)),\n );\n}\n\n/** Exclude a field from generated `equals()`. */\nexport const EqualsExclude = defineFieldDecorator(equalsExcludeFieldStage3);\n\nexport { createFromFactory, getFactoryRegistry, registerFactory };\n","/**\n * Stage 3 decorator backend, for the modern ECMAScript decorator standard\n * (TS 5.0+, with `experimentalDecorators` set to false or unset).\n *\n * No `reflect-metadata` here. Each decorator's `context.metadata` holds\n * per-class storage, accessible at runtime as `MyClass[Symbol.metadata]`.\n *\n * Stage 3 has no parameter decorators. Reach for the legacy backend if you\n * need them.\n *\n * @example\n * import { defineClassDecorator } from 'lombok-typescript/stage3';\n *\n * const Tracked = defineClassDecorator((backend, _value, context) => {\n * backend.metadata.set('tracked', context.metadata as object, undefined, true);\n * });\n */\n\nexport { Stage3Backend, stage3Backend } from './backend.js';\nexport {\n defineClassDecorator,\n defineFieldDecorator,\n defineMethodDecorator,\n defineGetterDecorator,\n defineSetterDecorator,\n} from './decorate.js';\nexport type {\n Stage3ClassLogic,\n Stage3FieldLogic,\n Stage3MethodLogic,\n Stage3GetterLogic,\n Stage3SetterLogic,\n} from './decorate.js';\nexport {\n NonNull,\n Singleton,\n Prototype,\n Memoize,\n Factory,\n Data,\n Value,\n Builder,\n ToString,\n Equals,\n With,\n Getter,\n Setter,\n Log,\n Accessors,\n UtilityClass,\n FieldDefaults,\n Delegate,\n EqualsExclude,\n createFromFactory,\n getFactoryRegistry,\n registerFactory,\n} from '../decorators/stage3/index.js';\n\n/** Read the Stage 3 `Symbol.metadata` object from a class, if present. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getClassMetadata(cls: new (...args: any[]) => any): object | undefined {\n return (cls as { [Symbol.metadata]?: object })[Symbol.metadata];\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lombok-typescript",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Lombok-
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Lombok-style TypeScript decorators with logging and accessor utilities.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
7
7
|
"module": "./dist/index.js",
|
|
@@ -42,26 +42,13 @@
|
|
|
42
42
|
"LICENSE"
|
|
43
43
|
],
|
|
44
44
|
"keywords": [
|
|
45
|
-
"lombok",
|
|
46
45
|
"typescript",
|
|
47
46
|
"decorators",
|
|
47
|
+
"lombok",
|
|
48
48
|
"codegen",
|
|
49
|
-
"ts-morph",
|
|
50
49
|
"design-patterns",
|
|
51
|
-
"gof",
|
|
52
50
|
"gang-of-four",
|
|
53
|
-
"
|
|
54
|
-
"data-class",
|
|
55
|
-
"boilerplate",
|
|
56
|
-
"annotations",
|
|
57
|
-
"getter",
|
|
58
|
-
"setter",
|
|
59
|
-
"immutable",
|
|
60
|
-
"singleton",
|
|
61
|
-
"factory",
|
|
62
|
-
"strategy",
|
|
63
|
-
"observer",
|
|
64
|
-
"nestjs"
|
|
51
|
+
"boilerplate"
|
|
65
52
|
],
|
|
66
53
|
"author": "A-Dev-Kit",
|
|
67
54
|
"license": "MIT",
|