lombok-typescript 0.1.0 → 0.2.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 +21 -60
- 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/legacy/index.cjs
CHANGED
|
@@ -71,13 +71,25 @@ var PREFIX = "lombok-ts:";
|
|
|
71
71
|
var MetadataKeys = {
|
|
72
72
|
// Class-level (Lombok)
|
|
73
73
|
DATA: `${PREFIX}data`,
|
|
74
|
+
VALUE: `${PREFIX}value`,
|
|
74
75
|
BUILDER: `${PREFIX}builder`,
|
|
75
76
|
TO_STRING: `${PREFIX}toString`,
|
|
77
|
+
EQUALS: `${PREFIX}equals`,
|
|
78
|
+
UTILITY_CLASS: `${PREFIX}utilityClass`,
|
|
79
|
+
FIELD_DEFAULTS: `${PREFIX}fieldDefaults`,
|
|
80
|
+
ACCESSORS: `${PREFIX}accessors`,
|
|
81
|
+
LOG: `${PREFIX}log`,
|
|
76
82
|
// Class-level (GoF)
|
|
77
83
|
SINGLETON: `${PREFIX}singleton`,
|
|
78
84
|
FACTORY: `${PREFIX}factory`,
|
|
79
85
|
PROTOTYPE: `${PREFIX}prototype`,
|
|
86
|
+
// Field-level
|
|
87
|
+
GETTER: `${PREFIX}getter`,
|
|
88
|
+
SETTER: `${PREFIX}setter`,
|
|
80
89
|
NON_NULL: `${PREFIX}nonNull`,
|
|
90
|
+
WITH: `${PREFIX}with`,
|
|
91
|
+
DELEGATE: `${PREFIX}delegate`,
|
|
92
|
+
EQUALS_EXCLUDE: `${PREFIX}equals:exclude`,
|
|
81
93
|
// Method-level
|
|
82
94
|
MEMOIZE: `${PREFIX}memoize`,
|
|
83
95
|
// Parameter-level
|
|
@@ -222,6 +234,131 @@ function memoizeMethodLegacy(backend, targetPrototype, propertyKey, descriptor,
|
|
|
222
234
|
};
|
|
223
235
|
}
|
|
224
236
|
|
|
237
|
+
// src/decorators/shared/accessors.ts
|
|
238
|
+
function normalizeAccessorsOptions(options = {}) {
|
|
239
|
+
return { chain: Boolean(options.chain ?? options.fluent) };
|
|
240
|
+
}
|
|
241
|
+
function accessorsClassLegacy(backend, target, options = {}) {
|
|
242
|
+
const normalized = normalizeAccessorsOptions(options);
|
|
243
|
+
backend.metadata.set(MetadataKeys.ACCESSORS, target, void 0, normalized);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// src/decorators/shared/markers.ts
|
|
247
|
+
function fieldMarkerLegacy(backend, targetPrototype, propertyKey, metadataKey, value = true) {
|
|
248
|
+
backend.metadata.set(metadataKey, targetPrototype, propertyKey, value);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// src/decorators/shared/delegate.ts
|
|
252
|
+
function parseDelegateMethods(args) {
|
|
253
|
+
if (args.length === 0) return [];
|
|
254
|
+
if (args.length === 1 && Array.isArray(args[0])) {
|
|
255
|
+
return args[0];
|
|
256
|
+
}
|
|
257
|
+
return args.map(String);
|
|
258
|
+
}
|
|
259
|
+
function delegateFieldLegacy(backend, targetPrototype, propertyKey, methods = []) {
|
|
260
|
+
fieldMarkerLegacy(backend, targetPrototype, propertyKey, MetadataKeys.DELEGATE, methods);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// src/decorators/shared/equals.ts
|
|
264
|
+
function equalsClassLegacy(backend, target) {
|
|
265
|
+
codegenClassMarkerLegacy(backend, target, MetadataKeys.EQUALS);
|
|
266
|
+
}
|
|
267
|
+
function equalsExcludeFieldLegacy(backend, targetPrototype, propertyKey) {
|
|
268
|
+
fieldMarkerLegacy(backend, targetPrototype, propertyKey, MetadataKeys.EQUALS_EXCLUDE);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// src/decorators/shared/field-defaults.ts
|
|
272
|
+
function normalizeFieldDefaultsOptions(options = {}) {
|
|
273
|
+
return {
|
|
274
|
+
level: options.level ?? "public",
|
|
275
|
+
makeFinal: options.makeFinal ?? false
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
function fieldDefaultsClassLegacy(backend, target, options = {}) {
|
|
279
|
+
const normalized = normalizeFieldDefaultsOptions(options);
|
|
280
|
+
backend.metadata.set(MetadataKeys.FIELD_DEFAULTS, target, void 0, normalized);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// src/decorators/shared/getter.ts
|
|
284
|
+
function getterFieldLegacy(backend, targetPrototype, propertyKey) {
|
|
285
|
+
fieldMarkerLegacy(backend, targetPrototype, propertyKey, MetadataKeys.GETTER);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// src/decorators/shared/log.ts
|
|
289
|
+
function wrapPrototypeMethods(target, options = {}) {
|
|
290
|
+
const proto = target.prototype;
|
|
291
|
+
const loggerName = options.name ?? target.name;
|
|
292
|
+
const level = options.level ?? "info";
|
|
293
|
+
const logFn = level === "warn" ? console.warn : level === "error" ? console.error : console.info;
|
|
294
|
+
for (const key of Object.getOwnPropertyNames(proto)) {
|
|
295
|
+
if (key === "constructor") continue;
|
|
296
|
+
const desc = Object.getOwnPropertyDescriptor(proto, key);
|
|
297
|
+
if (!desc || typeof desc.value !== "function") continue;
|
|
298
|
+
const original = desc.value;
|
|
299
|
+
desc.value = function logWrapper(...args) {
|
|
300
|
+
logFn.call(console, `[${loggerName}] ${key}`, ...args);
|
|
301
|
+
return original.apply(this, args);
|
|
302
|
+
};
|
|
303
|
+
Object.defineProperty(proto, key, desc);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function logClassLegacy(backend, target, options = {}) {
|
|
307
|
+
backend.metadata.set(MetadataKeys.LOG, target, void 0, options);
|
|
308
|
+
wrapPrototypeMethods(target, options);
|
|
309
|
+
}
|
|
310
|
+
function logMethodLegacy(backend, targetPrototype, propertyKey, descriptor, options = {}) {
|
|
311
|
+
backend.metadata.set(MetadataKeys.LOG, targetPrototype, propertyKey, options);
|
|
312
|
+
const original = descriptor.value;
|
|
313
|
+
if (typeof original !== "function") return;
|
|
314
|
+
const methodName = String(propertyKey);
|
|
315
|
+
const loggerName = options.name ?? "Method";
|
|
316
|
+
const level = options.level ?? "info";
|
|
317
|
+
const logFn = level === "warn" ? console.warn : level === "error" ? console.error : console.info;
|
|
318
|
+
return {
|
|
319
|
+
...descriptor,
|
|
320
|
+
value: function logWrapper(...args) {
|
|
321
|
+
logFn.call(console, `[${loggerName}] ${methodName}`, ...args);
|
|
322
|
+
return original.apply(this, args);
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// src/decorators/shared/setter.ts
|
|
328
|
+
function setterFieldLegacy(backend, targetPrototype, propertyKey) {
|
|
329
|
+
fieldMarkerLegacy(backend, targetPrototype, propertyKey, MetadataKeys.SETTER);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// src/decorators/shared/utility-class.ts
|
|
333
|
+
function utilityClassLegacy(backend, target) {
|
|
334
|
+
backend.metadata.set(MetadataKeys.UTILITY_CLASS, target, void 0, true);
|
|
335
|
+
codegenClassMarkerLegacy(backend, target, MetadataKeys.UTILITY_CLASS);
|
|
336
|
+
const Wrapped = class extends target {
|
|
337
|
+
constructor(...args) {
|
|
338
|
+
if (new.target !== Wrapped) {
|
|
339
|
+
return Reflect.construct(target, args, new.target);
|
|
340
|
+
}
|
|
341
|
+
super(...args);
|
|
342
|
+
throw new TypeError(`Utility class ${target.name} cannot be instantiated`);
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
Object.defineProperty(Wrapped, "name", { value: target.name });
|
|
346
|
+
return Wrapped;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// src/decorators/shared/value.ts
|
|
350
|
+
function valueClassLegacy(backend, target) {
|
|
351
|
+
codegenClassMarkerLegacy(backend, target, MetadataKeys.VALUE);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// src/decorators/shared/with.ts
|
|
355
|
+
function withClassLegacy(backend, target) {
|
|
356
|
+
codegenClassMarkerLegacy(backend, target, MetadataKeys.WITH);
|
|
357
|
+
}
|
|
358
|
+
function withFieldLegacy(backend, targetPrototype, propertyKey) {
|
|
359
|
+
fieldMarkerLegacy(backend, targetPrototype, propertyKey, MetadataKeys.WITH);
|
|
360
|
+
}
|
|
361
|
+
|
|
225
362
|
// src/decorators/legacy/index.ts
|
|
226
363
|
var NonNull = defineFieldDecorator(nonNullFieldLegacy);
|
|
227
364
|
function NonNullParam() {
|
|
@@ -242,23 +379,81 @@ function Factory(key) {
|
|
|
242
379
|
var Data = defineClassDecorator(
|
|
243
380
|
(backend, target) => codegenClassMarkerLegacy(backend, target, MetadataKeys.DATA)
|
|
244
381
|
);
|
|
382
|
+
var Value = defineClassDecorator((backend, target) => valueClassLegacy(backend, target));
|
|
245
383
|
var Builder = defineClassDecorator(
|
|
246
384
|
(backend, target) => codegenClassMarkerLegacy(backend, target, MetadataKeys.BUILDER)
|
|
247
385
|
);
|
|
248
386
|
var ToString = defineClassDecorator(
|
|
249
387
|
(backend, target) => codegenClassMarkerLegacy(backend, target, MetadataKeys.TO_STRING)
|
|
250
388
|
);
|
|
389
|
+
var Equals = defineClassDecorator((backend, target) => equalsClassLegacy(backend, target));
|
|
390
|
+
var withClassDecorator = defineClassDecorator(
|
|
391
|
+
(backend, target) => withClassLegacy(backend, target)
|
|
392
|
+
);
|
|
393
|
+
var withFieldDecorator = defineFieldDecorator(withFieldLegacy);
|
|
394
|
+
function With() {
|
|
395
|
+
return ((target, propertyKey) => {
|
|
396
|
+
if (propertyKey === void 0) {
|
|
397
|
+
return withClassDecorator(target);
|
|
398
|
+
}
|
|
399
|
+
return withFieldDecorator(target, propertyKey);
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
var Getter = defineFieldDecorator(getterFieldLegacy);
|
|
403
|
+
var Setter = defineFieldDecorator(setterFieldLegacy);
|
|
404
|
+
function Log(options = {}) {
|
|
405
|
+
const classDec = defineClassDecorator(
|
|
406
|
+
(backend, target) => logClassLegacy(backend, target, options)
|
|
407
|
+
);
|
|
408
|
+
const methodDec = defineMethodDecorator(
|
|
409
|
+
(backend, target, key, descriptor) => logMethodLegacy(backend, target, key, descriptor, options)
|
|
410
|
+
);
|
|
411
|
+
return ((target, propertyKey, descriptor) => {
|
|
412
|
+
if (propertyKey !== void 0 && descriptor !== void 0) {
|
|
413
|
+
return methodDec(target, propertyKey, descriptor);
|
|
414
|
+
}
|
|
415
|
+
return classDec(target);
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
function Accessors(options = {}) {
|
|
419
|
+
return defineClassDecorator((backend, target) => accessorsClassLegacy(backend, target, options));
|
|
420
|
+
}
|
|
421
|
+
var UtilityClass = defineClassDecorator(
|
|
422
|
+
(backend, target) => utilityClassLegacy(backend, target)
|
|
423
|
+
);
|
|
424
|
+
function FieldDefaults(options = {}) {
|
|
425
|
+
return defineClassDecorator(
|
|
426
|
+
(backend, target) => fieldDefaultsClassLegacy(backend, target, options)
|
|
427
|
+
);
|
|
428
|
+
}
|
|
429
|
+
function Delegate(...methods) {
|
|
430
|
+
return defineFieldDecorator(
|
|
431
|
+
(backend, proto, key) => delegateFieldLegacy(backend, proto, key, parseDelegateMethods(methods))
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
var EqualsExclude = defineFieldDecorator(equalsExcludeFieldLegacy);
|
|
251
435
|
|
|
436
|
+
exports.Accessors = Accessors;
|
|
252
437
|
exports.Builder = Builder;
|
|
253
438
|
exports.Data = Data;
|
|
439
|
+
exports.Delegate = Delegate;
|
|
440
|
+
exports.Equals = Equals;
|
|
441
|
+
exports.EqualsExclude = EqualsExclude;
|
|
254
442
|
exports.Factory = Factory;
|
|
443
|
+
exports.FieldDefaults = FieldDefaults;
|
|
444
|
+
exports.Getter = Getter;
|
|
255
445
|
exports.LegacyBackend = LegacyBackend;
|
|
446
|
+
exports.Log = Log;
|
|
256
447
|
exports.Memoize = Memoize;
|
|
257
448
|
exports.NonNull = NonNull;
|
|
258
449
|
exports.NonNullParam = NonNullParam;
|
|
259
450
|
exports.Prototype = Prototype;
|
|
451
|
+
exports.Setter = Setter;
|
|
260
452
|
exports.Singleton = Singleton;
|
|
261
453
|
exports.ToString = ToString;
|
|
454
|
+
exports.UtilityClass = UtilityClass;
|
|
455
|
+
exports.Value = Value;
|
|
456
|
+
exports.With = With;
|
|
262
457
|
exports.createFromFactory = createFromFactory;
|
|
263
458
|
exports.defineClassDecorator = defineClassDecorator;
|
|
264
459
|
exports.defineFieldDecorator = defineFieldDecorator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/legacy/backend.ts","../../src/legacy/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/legacy/index.ts"],"names":["Singleton","Prototype"],"mappings":"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","file":"index.cjs","sourcesContent":["import 'reflect-metadata';\nimport type { Backend } from '../core/backend.js';\nimport type { MetadataStore } from '../core/metadata-store.js';\nimport type { MetadataKeyList, PropertyName } from '../core/types.js';\n\n/**\n * `MetadataStore` that delegates to the global `Reflect.metadata` registry from\n * `reflect-metadata`. Storage layer for the legacy `experimentalDecorators`\n * standard.\n */\nclass ReflectMetadataStore implements MetadataStore {\n set<V>(key: string, target: object, propertyKey: PropertyName | undefined, value: V): void {\n if (propertyKey === undefined) {\n Reflect.defineMetadata(key, value, target);\n } else {\n Reflect.defineMetadata(key, value, target, propertyKey);\n }\n }\n\n get<V>(key: string, target: object, propertyKey?: PropertyName): V | undefined {\n if (propertyKey === undefined) {\n return Reflect.getOwnMetadata(key, target) as V | undefined;\n }\n return Reflect.getOwnMetadata(key, target, propertyKey) as V | undefined;\n }\n\n has(key: string, target: object, propertyKey?: PropertyName): boolean {\n if (propertyKey === undefined) {\n return Reflect.hasOwnMetadata(key, target);\n }\n return Reflect.hasOwnMetadata(key, target, propertyKey);\n }\n\n delete(key: string, target: object, propertyKey?: PropertyName): boolean {\n const had = this.has(key, target, propertyKey);\n if (!had) return false;\n if (propertyKey === undefined) {\n Reflect.deleteMetadata(key, target);\n } else {\n Reflect.deleteMetadata(key, target, propertyKey);\n }\n return true;\n }\n\n list(target: object, propertyKey?: PropertyName): MetadataKeyList {\n if (propertyKey === undefined) {\n return (Reflect.getOwnMetadataKeys(target) as PropertyName[]).map(String);\n }\n return (Reflect.getOwnMetadataKeys(target, propertyKey) as PropertyName[]).map(String);\n }\n}\n\n/** Backend for the legacy `experimentalDecorators` standard. Use the singleton `legacyBackend`. */\nexport class LegacyBackend implements Backend {\n readonly kind = 'legacy' as const;\n readonly metadata: MetadataStore = new ReflectMetadataStore();\n}\n\n/** Shared instance. Legacy decorators rely on global metadata storage anyway. */\nexport const legacyBackend = new LegacyBackend();\n","import type { Backend } from '../core/backend.js';\nimport type { PropertyName } from '../core/types.js';\nimport { legacyBackend } from './backend.js';\n\n/** A class constructor, used in place of bare `Function` in decorator signatures. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyClass = new (...args: any[]) => any;\n\n/** Logic shapes for legacy decorator authoring. */\nexport interface ClassDecoratorLogic {\n (backend: Backend, target: AnyClass): AnyClass | void;\n}\n\nexport interface FieldDecoratorLogic {\n (backend: Backend, targetPrototype: object, propertyKey: PropertyName): void;\n}\n\nexport interface MethodDecoratorLogic<T = unknown> {\n (\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n descriptor: TypedPropertyDescriptor<T>,\n ): TypedPropertyDescriptor<T> | void;\n}\n\nexport interface ParameterDecoratorLogic {\n (\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName | undefined,\n parameterIndex: number,\n ): void;\n}\n\n/**\n * Build a class decorator with the legacy signature. The constructor comes in\n * as `target`; an optional replacement constructor can be returned.\n *\n * @example\n * const Tracked = defineClassDecorator((backend, target) => {\n * backend.metadata.set('tracked', target, undefined, true);\n * });\n */\nexport function defineClassDecorator(logic: ClassDecoratorLogic): ClassDecorator {\n return ((target: AnyClass) => logic(legacyBackend, target)) as ClassDecorator;\n}\n\n/**\n * Build a field/property decorator with the legacy signature. Field decorators\n * can't return a replacement value here; use a method decorator or the codegen\n * path for that.\n */\nexport function defineFieldDecorator(logic: FieldDecoratorLogic): PropertyDecorator {\n return ((target: object, propertyKey: string | symbol) => {\n logic(legacyBackend, target, propertyKey);\n }) as PropertyDecorator;\n}\n\n/** Build a method decorator with the legacy signature. */\nexport function defineMethodDecorator<T = unknown>(\n logic: MethodDecoratorLogic<T>,\n): MethodDecorator {\n return ((\n target: object,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<T>,\n ) => {\n return logic(legacyBackend, target, propertyKey, descriptor);\n }) as MethodDecorator;\n}\n\n/** Build a parameter decorator with the legacy signature. */\nexport function defineParameterDecorator(logic: ParameterDecoratorLogic): ParameterDecorator {\n return ((target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n logic(legacyBackend, target, propertyKey, parameterIndex);\n }) as ParameterDecorator;\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 defineParameterDecorator,\n} from '../../legacy/decorate.js';\nimport {\n codegenClassMarkerLegacy,\n factoryClassLegacy,\n createFromFactory,\n getFactoryRegistry,\n registerFactory,\n} from '../shared/factory.js';\nimport {\n memoizeMethodLegacy,\n nonNullFieldLegacy,\n nonNullParameterLegacy,\n prototypeClassLegacy,\n singletonClassLegacy,\n} from '../shared/index.js';\nimport type { MemoizeOptions } from '../shared/memoize.js';\n\n/** Validates field assignments are not null or undefined. */\nexport const NonNull = defineFieldDecorator(nonNullFieldLegacy);\n\n/** Validates method parameters marked with `@NonNull`. Legacy backend only. */\nexport function NonNullParam(): ParameterDecorator {\n return defineParameterDecorator(nonNullParameterLegacy);\n}\n\n/** Ensures only one instance of the class exists. */\nexport const Singleton = defineClassDecorator(singletonClassLegacy);\n\n/** Returns a deep clone on every `new` call. */\nexport const Prototype = defineClassDecorator(prototypeClassLegacy);\n\n/** Caches method return values. Optional TTL in milliseconds. */\nexport function Memoize(options: MemoizeOptions = {}): MethodDecorator {\n return defineMethodDecorator((backend, target, key, descriptor) =>\n memoizeMethodLegacy(backend, target, key, descriptor, options),\n );\n}\n\n/** Registers the class in the global factory registry under `key`. */\nexport function Factory(key: string): ClassDecorator {\n return defineClassDecorator((backend, target) => {\n factoryClassLegacy(backend, target, key);\n });\n}\n\n/** Composite Lombok `@Data` — codegen generates getters, setters, toString, equals. */\nexport const Data = defineClassDecorator((backend, target) =>\n codegenClassMarkerLegacy(backend, target, MetadataKeys.DATA),\n);\n\n/** Fluent builder — codegen generates a companion builder class. */\nexport const Builder = defineClassDecorator((backend, target) =>\n codegenClassMarkerLegacy(backend, target, MetadataKeys.BUILDER),\n);\n\n/** Auto `toString()` — codegen generates the method body. */\nexport const ToString = defineClassDecorator((backend, target) =>\n codegenClassMarkerLegacy(backend, target, MetadataKeys.TO_STRING),\n);\n\nexport { createFromFactory, getFactoryRegistry, registerFactory };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/legacy/backend.ts","../../src/legacy/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/legacy/index.ts"],"names":["Singleton","Prototype"],"mappings":";;;;;AAUA,IAAM,uBAAN,MAAoD;AAAA,EAClD,GAAA,CAAO,GAAA,EAAa,MAAA,EAAgB,WAAA,EAAuC,KAAA,EAAgB;AACzF,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,OAAA,CAAQ,cAAA,CAAe,GAAA,EAAK,KAAA,EAAO,MAAM,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,cAAA,CAAe,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,WAAW,CAAA;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,GAAA,CAAO,GAAA,EAAa,MAAA,EAAgB,WAAA,EAA2C;AAC7E,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,OAAO,OAAA,CAAQ,cAAA,CAAe,GAAA,EAAK,MAAM,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,OAAA,CAAQ,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,WAAW,CAAA;AAAA,EACxD;AAAA,EAEA,GAAA,CAAI,GAAA,EAAa,MAAA,EAAgB,WAAA,EAAqC;AACpE,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,OAAO,OAAA,CAAQ,cAAA,CAAe,GAAA,EAAK,MAAM,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,OAAA,CAAQ,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,WAAW,CAAA;AAAA,EACxD;AAAA,EAEA,MAAA,CAAO,GAAA,EAAa,MAAA,EAAgB,WAAA,EAAqC;AACvE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,QAAQ,WAAW,CAAA;AAC7C,IAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AACjB,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,OAAA,CAAQ,cAAA,CAAe,KAAK,MAAM,CAAA;AAAA,IACpC,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,WAAW,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAA,CAAK,QAAgB,WAAA,EAA6C;AAChE,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,OAAQ,OAAA,CAAQ,kBAAA,CAAmB,MAAM,CAAA,CAAqB,IAAI,MAAM,CAAA;AAAA,IAC1E;AACA,IAAA,OAAQ,QAAQ,kBAAA,CAAmB,MAAA,EAAQ,WAAW,CAAA,CAAqB,IAAI,MAAM,CAAA;AAAA,EACvF;AACF,CAAA;AAGO,IAAM,gBAAN,MAAuC;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,QAAA,GAA0B,IAAI,oBAAA,EAAqB;AAC9D;AAGO,IAAM,aAAA,GAAgB,IAAI,aAAA;;;ACf1B,SAAS,qBAAqB,KAAA,EAA4C;AAC/E,EAAA,QAAQ,CAAC,MAAA,KAAqB,KAAA,CAAM,aAAA,EAAe,MAAM,CAAA;AAC3D;AAOO,SAAS,qBAAqB,KAAA,EAA+C;AAClF,EAAA,QAAQ,CAAC,QAAgB,WAAA,KAAiC;AACxD,IAAA,KAAA,CAAM,aAAA,EAAe,QAAQ,WAAW,CAAA;AAAA,EAC1C,CAAA;AACF;AAGO,SAAS,sBACd,KAAA,EACiB;AACjB,EAAA,QAAQ,CACN,MAAA,EACA,WAAA,EACA,UAAA,KACG;AACH,IAAA,OAAO,KAAA,CAAM,aAAA,EAAe,MAAA,EAAQ,WAAA,EAAa,UAAU,CAAA;AAAA,EAC7D,CAAA;AACF;AAGO,SAAS,yBAAyB,KAAA,EAAoD;AAC3F,EAAA,QAAQ,CAAC,MAAA,EAAgB,WAAA,EAA0C,cAAA,KAA2B;AAC5F,IAAA,KAAA,CAAM,aAAA,EAAe,MAAA,EAAQ,WAAA,EAAa,cAAc,CAAA;AAAA,EAC1D,CAAA;AACF;;;ACxEA,IAAM,MAAA,GAAS,YAAA;AAER,IAAM,YAAA,GAAe;AAAA;AAAA,EAE1B,IAAA,EAAM,GAAG,MAAM,CAAA,IAAA,CAAA;AAAA,EACf,KAAA,EAAO,GAAG,MAAM,CAAA,KAAA,CAAA;AAAA,EAChB,OAAA,EAAS,GAAG,MAAM,CAAA,OAAA,CAAA;AAAA,EAClB,SAAA,EAAW,GAAG,MAAM,CAAA,QAAA,CAAA;AAAA,EACpB,MAAA,EAAQ,GAAG,MAAM,CAAA,MAAA,CAAA;AAAA,EACjB,aAAA,EAAe,GAAG,MAAM,CAAA,YAAA,CAAA;AAAA,EACxB,cAAA,EAAgB,GAAG,MAAM,CAAA,aAAA,CAAA;AAAA,EACzB,SAAA,EAAW,GAAG,MAAM,CAAA,SAAA,CAAA;AAAA,EACpB,GAAA,EAAK,GAAG,MAAM,CAAA,GAAA,CAAA;AAAA,EAME;AAAA,EAGhB,SAAA,EAAW,GAAG,MAAM,CAAA,SAAA,CAAA;AAAA,EACpB,OAAA,EAAS,GAAG,MAAM,CAAA,OAAA,CAAA;AAAA,EAElB,SAAA,EAAW,GAAG,MAAM,CAAA,SAAA,CAAA;AAAA,EAkBF;AAAA,EAGlB,MAAA,EAAQ,GAAG,MAAM,CAAA,MAAA,CAAA;AAAA,EACjB,MAAA,EAAQ,GAAG,MAAM,CAAA,MAAA,CAAA;AAAA,EACjB,QAAA,EAAU,GAAG,MAAM,CAAA,OAAA,CAAA;AAAA,EACnB,IAAA,EAAM,GAAG,MAAM,CAAA,IAAA,CAAA;AAAA,EACf,QAAA,EAAU,GAAG,MAAM,CAAA,QAAA,CAAA;AAAA,EAInB,cAAA,EAAgB,GAAG,MAAM,CAAA,cAAA,CAAA;AAAA,EAMF;AAAA,EAGvB,OAAA,EAAS,GAAG,MAAM,CAAA,OAAA,CAAA;AAAA,EAMH;AAAA,EAGf,cAAA,EAAgB,GAAG,MAAM,CAAA,aAAA,CAM3B,CAAA;;;AC7EA,IAAM,eAAA,uBAAsB,GAAA,EAAsB;AAE3C,SAAS,eAAA,CAAgB,KAAa,IAAA,EAAsB;AACjE,EAAA,eAAA,CAAgB,GAAA,CAAI,KAAK,IAAI,CAAA;AAC/B;AAEO,SAAS,iBAAA,CAA+B,QAAgB,IAAA,EAAoB;AACjF,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA;AACpC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,IAAI,IAAA,CAAK,GAAG,IAAI,CAAA;AACzB;AAEO,SAAS,kBAAA,GAAoD;AAClE,EAAA,OAAO,eAAA;AACT;AAEO,SAAS,kBAAA,CAAmB,OAAA,EAAkB,MAAA,EAAkB,GAAA,EAAmB;AACxF,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,OAAA,EAAS,MAAA,EAAQ,QAAW,GAAG,CAAA;AACjE,EAAA,eAAA,CAAgB,KAAK,MAAM,CAAA;AAC7B;AAYO,SAAS,wBAAA,CACd,OAAA,EACA,MAAA,EACA,WAAA,EACM;AACN,EAAA,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,WAAA,EAAa,MAAA,EAAQ,QAAW,IAAI,CAAA;AAC3D;;;ACxCO,SAAS,aAAA,CAAc,OAAgB,KAAA,EAAqB;AACjE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA,8BAAA,CAAgC,CAAA;AAAA,EAC9D;AACF;AAEO,SAAS,kBAAA,CACd,OAAA,EACA,eAAA,EACA,WAAA,EACM;AACN,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,QAAA,EAAU,eAAA,EAAiB,aAAa,IAAI,CAAA;AAC9E,EAAA,MAAM,GAAA,GAAM,OAAO,WAAW,CAAA;AAC9B,EAAA,IAAI,MAAA;AAEJ,EAAA,MAAA,CAAO,cAAA,CAAe,iBAAiB,WAAA,EAAa;AAAA,IAClD,YAAA,EAAc,IAAA;AAAA,IACd,UAAA,EAAY,IAAA;AAAA,IACZ,GAAA,GAAM;AACJ,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAI,KAAA,EAAgB;AAClB,MAAA,aAAA,CAAc,OAAO,GAAG,CAAA;AACxB,MAAA,MAAA,GAAS,KAAA;AAAA,IACX;AAAA,GACD,CAAA;AACH;AAEO,SAAS,sBAAA,CACd,OAAA,EACA,eAAA,EACA,WAAA,EACA,cAAA,EACM;AACN,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,cAAA,EAAgB,eAAA,EAAiB,aAAa,cAAc,CAAA;AAChG;;;ACnCO,SAAS,oBAAA,CAAqB,SAAkB,MAAA,EAA4B;AACjF,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,SAAA,EAAW,MAAA,EAAQ,QAAW,IAAI,CAAA;AAEpE,EAAA,MAAMA,UAAAA,GAAY,cAAc,MAAA,CAAO;AAAA,IACrC,OAAO,SAAA;AAAA,IAEP,eAAe,IAAA,EAAiB;AAC9B,MAAA,IAAIA,WAAU,SAAA,EAAW;AACvB,QAAA,OAAOA,UAAAA,CAAU,SAAA;AAAA,MACnB;AACA,MAAA,KAAA,CAAM,GAAG,IAAI,CAAA;AACb,MAAAA,WAAU,SAAA,GAAY,IAAA;AAAA,IACxB;AAAA,GACF;AAEA,EAAA,OAAOA,UAAAA;AACT;;;ACnBO,SAAS,UAAa,GAAA,EAAW;AACtC,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC3C,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,IAAI,GAAA,CAAI,CAAC,IAAA,KAAS,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,KAAA,MAAW,OAAO,GAAA,EAAK;AACrB,IAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,SAAA,CAAU,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,IAClC;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;ACZO,SAAS,oBAAA,CAAqB,SAAkB,MAAA,EAA4B;AACjF,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,SAAA,EAAW,MAAA,EAAQ,QAAW,IAAI,CAAA;AAEpE,EAAA,MAAMC,UAAAA,GAAY,cAAc,MAAA,CAAO;AAAA,IACrC,eAAe,IAAA,EAAiB;AAC9B,MAAA,KAAA,CAAM,GAAG,IAAI,CAAA;AACb,MAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAC5B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACF;AAEA,EAAA,OAAOA,UAAAA;AACT;;;ACPA,IAAM,UAAA,0BAAoB,oBAAoB,CAAA;AAE9C,SAAS,cAAc,IAAA,EAAyB;AAC9C,EAAA,OAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AAC5B;AAEA,SAAS,YAAA,CACP,KAAA,EACA,GAAA,EACA,GAAA,EAC6B;AAC7B,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAC3B,EAAA,IAAI,CAAC,OAAO,OAAO,UAAA;AACnB,EAAA,IAAI,GAAA,KAAQ,UAAa,KAAA,CAAM,SAAA,KAAc,UAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA,CAAM,SAAA,EAAW;AACtF,IAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,KAAA;AACf;AAEO,SAAS,aAAA,CACd,QAAA,EACA,OAAA,GAA0B,EAAC,EACxB;AACH,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAwB;AAC1C,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;AAEpB,EAAA,OAAO,YAA4B,IAAA,EAAiB;AAClD,IAAA,MAAM,GAAA,GAAM,cAAc,IAAI,CAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,KAAA,EAAO,GAAA,EAAK,GAAG,CAAA;AAC3C,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AACxC,IAAA,MAAM,KAAA,GAAoB,EAAE,KAAA,EAAO,MAAA,EAAO;AAC1C,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,KAAA,CAAM,SAAA,GAAY,IAAA,CAAK,GAAA,EAAI,GAAI,GAAA;AAAA,IACjC;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,KAAK,CAAA;AACpB,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;;;AC9CO,SAAS,oBACd,OAAA,EACA,eAAA,EACA,aACA,UAAA,EACA,OAAA,GAA0B,EAAC,EACA;AAC3B,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,OAAA,EAAS,eAAA,EAAiB,aAAa,OAAO,CAAA;AAChF,EAAA,MAAM,WAAW,UAAA,CAAW,KAAA;AAC5B,EAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AACpC,EAAA,OAAO;AAAA,IACL,GAAG,UAAA;AAAA,IACH,KAAA,EAAO,aAAA,CAAc,QAAA,EAA6C,OAAO;AAAA,GAC3E;AACF;;;ACRO,SAAS,yBAAA,CACd,OAAA,GAA4B,EAAC,EACc;AAC3C,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,CAAQ,QAAQ,KAAA,IAAS,OAAA,CAAQ,MAAM,CAAA,EAAE;AAC3D;AAEO,SAAS,oBAAA,CACd,OAAA,EACA,MAAA,EACA,OAAA,GAA4B,EAAC,EACvB;AACN,EAAA,MAAM,UAAA,GAAa,0BAA0B,OAAO,CAAA;AACpD,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,SAAA,EAAW,MAAA,EAAQ,QAAW,UAAU,CAAA;AAC5E;;;ACrBO,SAAS,kBACd,OAAA,EACA,eAAA,EACA,WAAA,EACA,WAAA,EACA,QAAiB,IAAA,EACX;AACN,EAAA,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,WAAA,EAAa,eAAA,EAAiB,aAAa,KAAK,CAAA;AACvE;;;ACJO,SAAS,qBAAqB,IAAA,EAAkC;AACrE,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAC/B,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,IAAK,KAAA,CAAM,QAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG;AAC/C,IAAA,OAAO,KAAK,CAAC,CAAA;AAAA,EACf;AACA,EAAA,OAAO,IAAA,CAAK,IAAI,MAAM,CAAA;AACxB;AAEO,SAAS,oBACd,OAAA,EACA,eAAA,EACA,WAAA,EACA,OAAA,GAA2B,EAAC,EACtB;AACN,EAAA,iBAAA,CAAkB,OAAA,EAAS,eAAA,EAAiB,WAAA,EAAa,YAAA,CAAa,UAAU,OAAO,CAAA;AACzF;;;ACfO,SAAS,iBAAA,CAAkB,SAAkB,MAAA,EAAwB;AAC1E,EAAA,wBAAA,CAAyB,OAAA,EAAS,MAAA,EAAQ,YAAA,CAAa,MAAM,CAAA;AAC/D;AAUO,SAAS,wBAAA,CACd,OAAA,EACA,eAAA,EACA,WAAA,EACM;AACN,EAAA,iBAAA,CAAkB,OAAA,EAAS,eAAA,EAAiB,WAAA,EAAa,YAAA,CAAa,cAAc,CAAA;AACtF;;;ACZO,SAAS,6BAAA,CACd,OAAA,GAAgC,EAAC,EACD;AAChC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAQ,KAAA,IAAS,QAAA;AAAA,IACxB,SAAA,EAAW,QAAQ,SAAA,IAAa;AAAA,GAClC;AACF;AAEO,SAAS,wBAAA,CACd,OAAA,EACA,MAAA,EACA,OAAA,GAAgC,EAAC,EAC3B;AACN,EAAA,MAAM,UAAA,GAAa,8BAA8B,OAAO,CAAA;AACxD,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,cAAA,EAAgB,MAAA,EAAQ,QAAW,UAAU,CAAA;AACjF;;;ACxBO,SAAS,iBAAA,CACd,OAAA,EACA,eAAA,EACA,WAAA,EACM;AACN,EAAA,iBAAA,CAAkB,OAAA,EAAS,eAAA,EAAiB,WAAA,EAAa,YAAA,CAAa,MAAM,CAAA;AAC9E;;;ACCA,SAAS,oBAAA,CAAqB,MAAA,EAAkB,OAAA,GAAsB,EAAC,EAAS;AAC9E,EAAA,MAAM,QAAQ,MAAA,CAAO,SAAA;AACrB,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,IAAA,IAAQ,MAAA,CAAO,IAAA;AAC1C,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,MAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,UAAU,MAAA,GAAS,OAAA,CAAQ,OAAO,KAAA,KAAU,OAAA,GAAU,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA;AAE5F,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,mBAAA,CAAoB,KAAK,CAAA,EAAG;AACnD,IAAA,IAAI,QAAQ,aAAA,EAAe;AAC3B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,wBAAA,CAAyB,KAAA,EAAO,GAAG,CAAA;AACvD,IAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,CAAK,UAAU,UAAA,EAAY;AAC/C,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA;AACtB,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAS,UAAA,CAAA,GAA6B,IAAA,EAAiB;AAClE,MAAA,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI,UAAU,KAAK,GAAG,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AACrD,MAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IAClC,CAAA;AACA,IAAA,MAAA,CAAO,cAAA,CAAe,KAAA,EAAO,GAAA,EAAK,IAAI,CAAA;AAAA,EACxC;AACF;AAEO,SAAS,cAAA,CAAe,OAAA,EAAkB,MAAA,EAAkB,OAAA,GAAsB,EAAC,EAAS;AACjG,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,GAAA,EAAK,MAAA,EAAQ,QAAW,OAAO,CAAA;AACjE,EAAA,oBAAA,CAAqB,QAAQ,OAAO,CAAA;AACtC;AAYO,SAAS,gBACd,OAAA,EACA,eAAA,EACA,aACA,UAAA,EACA,OAAA,GAAsB,EAAC,EACI;AAC3B,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,GAAA,EAAK,eAAA,EAAiB,aAAa,OAAO,CAAA;AAC5E,EAAA,MAAM,WAAW,UAAA,CAAW,KAAA;AAC5B,EAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AACpC,EAAA,MAAM,UAAA,GAAa,OAAO,WAAW,CAAA;AACrC,EAAA,MAAM,UAAA,GAAa,QAAQ,IAAA,IAAQ,QAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,MAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,UAAU,MAAA,GAAS,OAAA,CAAQ,OAAO,KAAA,KAAU,OAAA,GAAU,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA;AAC5F,EAAA,OAAO;AAAA,IACL,GAAG,UAAA;AAAA,IACH,KAAA,EAAO,SAAS,UAAA,CAAA,GAA6B,IAAA,EAAiB;AAC5D,MAAA,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI,UAAU,KAAK,UAAU,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAC5D,MAAA,OAAQ,QAAA,CAA0C,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IACpE;AAAA,GACF;AACF;;;AC9DO,SAAS,iBAAA,CACd,OAAA,EACA,eAAA,EACA,WAAA,EACM;AACN,EAAA,iBAAA,CAAkB,OAAA,EAAS,eAAA,EAAiB,WAAA,EAAa,YAAA,CAAa,MAAM,CAAA;AAC9E;;;ACNO,SAAS,kBAAA,CAAmB,SAAkB,MAAA,EAA4B;AAC/E,EAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,YAAA,CAAa,aAAA,EAAe,MAAA,EAAQ,QAAW,IAAI,CAAA;AACxE,EAAA,wBAAA,CAAyB,OAAA,EAAS,MAAA,EAAQ,YAAA,CAAa,aAAa,CAAA;AAEpE,EAAA,MAAM,OAAA,GAAU,cAAc,MAAA,CAAO;AAAA,IACnC,eAAe,IAAA,EAAiB;AAC9B,MAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,QAAA,OAAO,OAAA,CAAQ,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,GAAA,CAAA,MAA6C,CAAA;AAAA,MACtF;AACA,MAAA,KAAA,CAAM,GAAG,IAAI,CAAA;AACb,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,cAAA,EAAiB,MAAA,CAAO,IAAI,CAAA,uBAAA,CAAyB,CAAA;AAAA,IAC3E;AAAA,GACF;AACA,EAAA,MAAA,CAAO,eAAe,OAAA,EAAS,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA;AAC7D,EAAA,OAAO,OAAA;AACT;;;ACfO,SAAS,gBAAA,CAAiB,SAAkB,MAAA,EAAwB;AACzE,EAAA,wBAAA,CAAyB,OAAA,EAAS,MAAA,EAAQ,YAAA,CAAa,KAAK,CAAA;AAC9D;;;ACAO,SAAS,eAAA,CAAgB,SAAkB,MAAA,EAAwB;AACxE,EAAA,wBAAA,CAAyB,OAAA,EAAS,MAAA,EAAQ,YAAA,CAAa,IAAI,CAAA;AAC7D;AAUO,SAAS,eAAA,CACd,OAAA,EACA,eAAA,EACA,WAAA,EACM;AACN,EAAA,iBAAA,CAAkB,OAAA,EAAS,eAAA,EAAiB,WAAA,EAAa,YAAA,CAAa,IAAI,CAAA;AAC5E;;;ACYO,IAAM,OAAA,GAAU,qBAAqB,kBAAkB;AAGvD,SAAS,YAAA,GAAmC;AACjD,EAAA,OAAO,yBAAyB,sBAAsB,CAAA;AACxD;AAGO,IAAM,SAAA,GAAY,qBAAqB,oBAAoB;AAG3D,IAAM,SAAA,GAAY,qBAAqB,oBAAoB;AAG3D,SAAS,OAAA,CAAQ,OAAA,GAA0B,EAAC,EAAoB;AACrE,EAAA,OAAO,qBAAA;AAAA,IAAsB,CAAC,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,UAAA,KAClD,oBAAoB,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,UAAA,EAAY,OAAO;AAAA,GAC/D;AACF;AAGO,SAAS,QAAQ,GAAA,EAA6B;AACnD,EAAA,OAAO,oBAAA,CAAqB,CAAC,OAAA,EAAS,MAAA,KAAW;AAC/C,IAAA,kBAAA,CAAmB,OAAA,EAAS,QAAQ,GAAG,CAAA;AAAA,EACzC,CAAC,CAAA;AACH;AAGO,IAAM,IAAA,GAAO,oBAAA;AAAA,EAAqB,CAAC,OAAA,EAAS,MAAA,KACjD,yBAAyB,OAAA,EAAS,MAAA,EAAQ,aAAa,IAAI;AAC7D;AAGO,IAAM,KAAA,GAAQ,qBAAqB,CAAC,OAAA,EAAS,WAAW,gBAAA,CAAiB,OAAA,EAAS,MAAM,CAAC;AAGzF,IAAM,OAAA,GAAU,oBAAA;AAAA,EAAqB,CAAC,OAAA,EAAS,MAAA,KACpD,yBAAyB,OAAA,EAAS,MAAA,EAAQ,aAAa,OAAO;AAChE;AAGO,IAAM,QAAA,GAAW,oBAAA;AAAA,EAAqB,CAAC,OAAA,EAAS,MAAA,KACrD,yBAAyB,OAAA,EAAS,MAAA,EAAQ,aAAa,SAAS;AAClE;AAGO,IAAM,MAAA,GAAS,qBAAqB,CAAC,OAAA,EAAS,WAAW,iBAAA,CAAkB,OAAA,EAAS,MAAM,CAAC;AAGlG,IAAM,kBAAA,GAAqB,oBAAA;AAAA,EAAqB,CAAC,OAAA,EAAS,MAAA,KACxD,eAAA,CAAgB,SAAS,MAAM;AACjC,CAAA;AACA,IAAM,kBAAA,GAAqB,qBAAqB,eAAe,CAAA;AAExD,SAAS,IAAA,GAA2C;AACzD,EAAA,QAAQ,CAAC,QAAgB,WAAA,KAAkC;AACzD,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,OAAO,mBAAmB,MAA6C,CAAA;AAAA,IACzE;AACA,IAAA,OAAO,kBAAA,CAAmB,QAAQ,WAAW,CAAA;AAAA,EAC/C,CAAA;AACF;AAGO,IAAM,MAAA,GAAS,qBAAqB,iBAAiB;AAGrD,IAAM,MAAA,GAAS,qBAAqB,iBAAiB;AAGrD,SAAS,GAAA,CAAI,OAAA,GAAsB,EAAC,EAAqC;AAC9E,EAAA,MAAM,QAAA,GAAW,oBAAA;AAAA,IAAqB,CAAC,OAAA,EAAS,MAAA,KAC9C,cAAA,CAAe,OAAA,EAAS,QAAQ,OAAO;AAAA,GACzC;AACA,EAAA,MAAM,SAAA,GAAY,qBAAA;AAAA,IAAsB,CAAC,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,UAAA,KAC7D,gBAAgB,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,UAAA,EAAY,OAAO;AAAA,GAC3D;AACA,EAAA,QAAQ,CAAC,MAAA,EAAgB,WAAA,EAA+B,UAAA,KAAoC;AAC1F,IAAA,IAAI,WAAA,KAAgB,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW;AACzD,MAAA,OAAO,SAAA,CAAU,MAAA,EAAQ,WAAA,EAAa,UAAU,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,SAAS,MAA6C,CAAA;AAAA,EAC/D,CAAA;AACF;AAGO,SAAS,SAAA,CAAU,OAAA,GAA4B,EAAC,EAAmB;AACxE,EAAA,OAAO,oBAAA,CAAqB,CAAC,OAAA,EAAS,MAAA,KAAW,qBAAqB,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAC,CAAA;AACjG;AAGO,IAAM,YAAA,GAAe,oBAAA;AAAA,EAAqB,CAAC,OAAA,EAAS,MAAA,KACzD,kBAAA,CAAmB,SAAS,MAAM;AACpC;AAGO,SAAS,aAAA,CAAc,OAAA,GAAgC,EAAC,EAAmB;AAChF,EAAA,OAAO,oBAAA;AAAA,IAAqB,CAAC,OAAA,EAAS,MAAA,KACpC,wBAAA,CAAyB,OAAA,EAAS,QAAQ,OAAO;AAAA,GACnD;AACF;AAGO,SAAS,YAAY,OAAA,EAAsC;AAChE,EAAA,OAAO,oBAAA;AAAA,IAAqB,CAAC,OAAA,EAAS,KAAA,EAAO,GAAA,KAC3C,mBAAA,CAAoB,SAAS,KAAA,EAAO,GAAA,EAAK,oBAAA,CAAqB,OAAO,CAAC;AAAA,GACxE;AACF;AAGO,IAAM,aAAA,GAAgB,qBAAqB,wBAAwB","file":"index.cjs","sourcesContent":["import 'reflect-metadata';\nimport type { Backend } from '../core/backend.js';\nimport type { MetadataStore } from '../core/metadata-store.js';\nimport type { MetadataKeyList, PropertyName } from '../core/types.js';\n\n/**\n * `MetadataStore` that delegates to the global `Reflect.metadata` registry from\n * `reflect-metadata`. Storage layer for the legacy `experimentalDecorators`\n * standard.\n */\nclass ReflectMetadataStore implements MetadataStore {\n set<V>(key: string, target: object, propertyKey: PropertyName | undefined, value: V): void {\n if (propertyKey === undefined) {\n Reflect.defineMetadata(key, value, target);\n } else {\n Reflect.defineMetadata(key, value, target, propertyKey);\n }\n }\n\n get<V>(key: string, target: object, propertyKey?: PropertyName): V | undefined {\n if (propertyKey === undefined) {\n return Reflect.getOwnMetadata(key, target) as V | undefined;\n }\n return Reflect.getOwnMetadata(key, target, propertyKey) as V | undefined;\n }\n\n has(key: string, target: object, propertyKey?: PropertyName): boolean {\n if (propertyKey === undefined) {\n return Reflect.hasOwnMetadata(key, target);\n }\n return Reflect.hasOwnMetadata(key, target, propertyKey);\n }\n\n delete(key: string, target: object, propertyKey?: PropertyName): boolean {\n const had = this.has(key, target, propertyKey);\n if (!had) return false;\n if (propertyKey === undefined) {\n Reflect.deleteMetadata(key, target);\n } else {\n Reflect.deleteMetadata(key, target, propertyKey);\n }\n return true;\n }\n\n list(target: object, propertyKey?: PropertyName): MetadataKeyList {\n if (propertyKey === undefined) {\n return (Reflect.getOwnMetadataKeys(target) as PropertyName[]).map(String);\n }\n return (Reflect.getOwnMetadataKeys(target, propertyKey) as PropertyName[]).map(String);\n }\n}\n\n/** Backend for the legacy `experimentalDecorators` standard. Use the singleton `legacyBackend`. */\nexport class LegacyBackend implements Backend {\n readonly kind = 'legacy' as const;\n readonly metadata: MetadataStore = new ReflectMetadataStore();\n}\n\n/** Shared instance. Legacy decorators rely on global metadata storage anyway. */\nexport const legacyBackend = new LegacyBackend();\n","import type { Backend } from '../core/backend.js';\nimport type { PropertyName } from '../core/types.js';\nimport { legacyBackend } from './backend.js';\n\n/** A class constructor, used in place of bare `Function` in decorator signatures. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyClass = new (...args: any[]) => any;\n\n/** Logic shapes for legacy decorator authoring. */\nexport interface ClassDecoratorLogic {\n (backend: Backend, target: AnyClass): AnyClass | void;\n}\n\nexport interface FieldDecoratorLogic {\n (backend: Backend, targetPrototype: object, propertyKey: PropertyName): void;\n}\n\nexport interface MethodDecoratorLogic<T = unknown> {\n (\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName,\n descriptor: TypedPropertyDescriptor<T>,\n ): TypedPropertyDescriptor<T> | void;\n}\n\nexport interface ParameterDecoratorLogic {\n (\n backend: Backend,\n targetPrototype: object,\n propertyKey: PropertyName | undefined,\n parameterIndex: number,\n ): void;\n}\n\n/**\n * Build a class decorator with the legacy signature. The constructor comes in\n * as `target`; an optional replacement constructor can be returned.\n *\n * @example\n * const Tracked = defineClassDecorator((backend, target) => {\n * backend.metadata.set('tracked', target, undefined, true);\n * });\n */\nexport function defineClassDecorator(logic: ClassDecoratorLogic): ClassDecorator {\n return ((target: AnyClass) => logic(legacyBackend, target)) as ClassDecorator;\n}\n\n/**\n * Build a field/property decorator with the legacy signature. Field decorators\n * can't return a replacement value here; use a method decorator or the codegen\n * path for that.\n */\nexport function defineFieldDecorator(logic: FieldDecoratorLogic): PropertyDecorator {\n return ((target: object, propertyKey: string | symbol) => {\n logic(legacyBackend, target, propertyKey);\n }) as PropertyDecorator;\n}\n\n/** Build a method decorator with the legacy signature. */\nexport function defineMethodDecorator<T = unknown>(\n logic: MethodDecoratorLogic<T>,\n): MethodDecorator {\n return ((\n target: object,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<T>,\n ) => {\n return logic(legacyBackend, target, propertyKey, descriptor);\n }) as MethodDecorator;\n}\n\n/** Build a parameter decorator with the legacy signature. */\nexport function defineParameterDecorator(logic: ParameterDecoratorLogic): ParameterDecorator {\n return ((target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n logic(legacyBackend, target, propertyKey, parameterIndex);\n }) as ParameterDecorator;\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 defineParameterDecorator,\n} from '../../legacy/decorate.js';\nimport {\n codegenClassMarkerLegacy,\n factoryClassLegacy,\n createFromFactory,\n getFactoryRegistry,\n registerFactory,\n} from '../shared/factory.js';\nimport {\n memoizeMethodLegacy,\n nonNullFieldLegacy,\n nonNullParameterLegacy,\n prototypeClassLegacy,\n singletonClassLegacy,\n} from '../shared/index.js';\nimport type { MemoizeOptions } from '../shared/memoize.js';\nimport type { AccessorsOptions } from '../shared/accessors.js';\nimport { accessorsClassLegacy } from '../shared/accessors.js';\nimport { delegateFieldLegacy, parseDelegateMethods } from '../shared/delegate.js';\nimport { equalsClassLegacy, equalsExcludeFieldLegacy } from '../shared/equals.js';\nimport type { FieldDefaultsOptions } from '../shared/field-defaults.js';\nimport { fieldDefaultsClassLegacy } from '../shared/field-defaults.js';\nimport { getterFieldLegacy } from '../shared/getter.js';\nimport type { LogOptions } from '../shared/log.js';\nimport { logClassLegacy, logMethodLegacy } from '../shared/log.js';\nimport { setterFieldLegacy } from '../shared/setter.js';\nimport { utilityClassLegacy } from '../shared/utility-class.js';\nimport { valueClassLegacy } from '../shared/value.js';\nimport { withClassLegacy, withFieldLegacy } from '../shared/with.js';\n\n/** Validates field assignments are not null or undefined. */\nexport const NonNull = defineFieldDecorator(nonNullFieldLegacy);\n\n/** Validates method parameters marked with `@NonNull`. Legacy backend only. */\nexport function NonNullParam(): ParameterDecorator {\n return defineParameterDecorator(nonNullParameterLegacy);\n}\n\n/** Ensures only one instance of the class exists. */\nexport const Singleton = defineClassDecorator(singletonClassLegacy);\n\n/** Returns a deep clone on every `new` call. */\nexport const Prototype = defineClassDecorator(prototypeClassLegacy);\n\n/** Caches method return values. Optional TTL in milliseconds. */\nexport function Memoize(options: MemoizeOptions = {}): MethodDecorator {\n return defineMethodDecorator((backend, target, key, descriptor) =>\n memoizeMethodLegacy(backend, target, key, descriptor, options),\n );\n}\n\n/** Registers the class in the global factory registry under `key`. */\nexport function Factory(key: string): ClassDecorator {\n return defineClassDecorator((backend, target) => {\n factoryClassLegacy(backend, target, key);\n });\n}\n\n/** Composite Lombok `@Data` — codegen generates getters, setters, toString, equals. */\nexport const Data = defineClassDecorator((backend, target) =>\n codegenClassMarkerLegacy(backend, target, MetadataKeys.DATA),\n);\n\n/** Immutable value class — codegen generates getters, with*, toString, equals. */\nexport const Value = defineClassDecorator((backend, target) => valueClassLegacy(backend, target));\n\n/** Fluent builder — codegen generates a companion builder class. */\nexport const Builder = defineClassDecorator((backend, target) =>\n codegenClassMarkerLegacy(backend, target, MetadataKeys.BUILDER),\n);\n\n/** Auto `toString()` — codegen generates the method body. */\nexport const ToString = defineClassDecorator((backend, target) =>\n codegenClassMarkerLegacy(backend, target, MetadataKeys.TO_STRING),\n);\n\n/** Structural `equals()` — codegen generates instance and static helpers. */\nexport const Equals = defineClassDecorator((backend, target) => equalsClassLegacy(backend, target));\n\n/** Immutable copy helpers — class or field level `with*` methods. */\nconst withClassDecorator = defineClassDecorator((backend, target) =>\n withClassLegacy(backend, target),\n);\nconst withFieldDecorator = defineFieldDecorator(withFieldLegacy);\n\nexport function With(): ClassDecorator & PropertyDecorator {\n return ((target: object, propertyKey?: string | symbol) => {\n if (propertyKey === undefined) {\n return withClassDecorator(target as new (...args: unknown[]) => unknown);\n }\n return withFieldDecorator(target, propertyKey);\n }) as ClassDecorator & PropertyDecorator;\n}\n\n/** Field getter — codegen generates `getField()`. */\nexport const Getter = defineFieldDecorator(getterFieldLegacy);\n\n/** Field setter — codegen generates `setField()`. */\nexport const Setter = defineFieldDecorator(setterFieldLegacy);\n\n/** Logs method entry via the configured provider (default `console`). */\nexport function Log(options: LogOptions = {}): ClassDecorator & MethodDecorator {\n const classDec = defineClassDecorator((backend, target) =>\n logClassLegacy(backend, target, options),\n );\n const methodDec = defineMethodDecorator((backend, target, key, descriptor) =>\n logMethodLegacy(backend, target, key, descriptor, options),\n );\n return ((target: object, propertyKey?: string | symbol, descriptor?: PropertyDescriptor) => {\n if (propertyKey !== undefined && descriptor !== undefined) {\n return methodDec(target, propertyKey, descriptor);\n }\n return classDec(target as new (...args: unknown[]) => unknown);\n }) as ClassDecorator & MethodDecorator;\n}\n\n/** Fluent/chained accessor style for generated setters. */\nexport function Accessors(options: AccessorsOptions = {}): ClassDecorator {\n return defineClassDecorator((backend, target) => accessorsClassLegacy(backend, target, options));\n}\n\n/** Uninstantiable utility holder — constructor throws. */\nexport const UtilityClass = defineClassDecorator((backend, target) =>\n utilityClassLegacy(backend, target),\n);\n\n/** Default field visibility and finality for codegen. */\nexport function FieldDefaults(options: FieldDefaultsOptions = {}): ClassDecorator {\n return defineClassDecorator((backend, target) =>\n fieldDefaultsClassLegacy(backend, target, options),\n );\n}\n\n/** Delegates methods to a field. Pass method names as decorator arguments. */\nexport function Delegate(...methods: string[]): PropertyDecorator {\n return defineFieldDecorator((backend, proto, key) =>\n delegateFieldLegacy(backend, proto, key, parseDelegateMethods(methods)),\n );\n}\n\n/** Exclude a field from generated `equals()`. */\nexport const EqualsExclude = defineFieldDecorator(equalsExcludeFieldLegacy);\n\nexport { createFromFactory, getFactoryRegistry, registerFactory };\n"]}
|
package/dist/legacy/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as Backend, M as MetadataStore } from '../backend-CkLBcDd8.cjs';
|
|
2
|
-
import { M as MemoizeOptions } from '../
|
|
3
|
-
export { C as ClassDecoratorLogic,
|
|
2
|
+
import { A as AccessorsOptions, F as FieldDefaultsOptions, L as LogOptions, M as MemoizeOptions } from '../log-Dpr79VRt.cjs';
|
|
3
|
+
export { C as ClassDecoratorLogic, a as FieldDecoratorLogic, b as MethodDecoratorLogic, P as ParameterDecoratorLogic, c as createFromFactory, d as defineClassDecorator, e as defineFieldDecorator, f as defineMethodDecorator, g as defineParameterDecorator, h as getFactoryRegistry, r as registerFactory } from '../log-Dpr79VRt.cjs';
|
|
4
4
|
|
|
5
5
|
/** Backend for the legacy `experimentalDecorators` standard. Use the singleton `legacyBackend`. */
|
|
6
6
|
declare class LegacyBackend implements Backend {
|
|
@@ -24,9 +24,30 @@ declare function Memoize(options?: MemoizeOptions): MethodDecorator;
|
|
|
24
24
|
declare function Factory(key: string): ClassDecorator;
|
|
25
25
|
/** Composite Lombok `@Data` — codegen generates getters, setters, toString, equals. */
|
|
26
26
|
declare const Data: ClassDecorator;
|
|
27
|
+
/** Immutable value class — codegen generates getters, with*, toString, equals. */
|
|
28
|
+
declare const Value: ClassDecorator;
|
|
27
29
|
/** Fluent builder — codegen generates a companion builder class. */
|
|
28
30
|
declare const Builder: ClassDecorator;
|
|
29
31
|
/** Auto `toString()` — codegen generates the method body. */
|
|
30
32
|
declare const ToString: ClassDecorator;
|
|
33
|
+
/** Structural `equals()` — codegen generates instance and static helpers. */
|
|
34
|
+
declare const Equals: ClassDecorator;
|
|
35
|
+
declare function With(): ClassDecorator & PropertyDecorator;
|
|
36
|
+
/** Field getter — codegen generates `getField()`. */
|
|
37
|
+
declare const Getter: PropertyDecorator;
|
|
38
|
+
/** Field setter — codegen generates `setField()`. */
|
|
39
|
+
declare const Setter: PropertyDecorator;
|
|
40
|
+
/** Logs method entry via the configured provider (default `console`). */
|
|
41
|
+
declare function Log(options?: LogOptions): ClassDecorator & MethodDecorator;
|
|
42
|
+
/** Fluent/chained accessor style for generated setters. */
|
|
43
|
+
declare function Accessors(options?: AccessorsOptions): ClassDecorator;
|
|
44
|
+
/** Uninstantiable utility holder — constructor throws. */
|
|
45
|
+
declare const UtilityClass: ClassDecorator;
|
|
46
|
+
/** Default field visibility and finality for codegen. */
|
|
47
|
+
declare function FieldDefaults(options?: FieldDefaultsOptions): ClassDecorator;
|
|
48
|
+
/** Delegates methods to a field. Pass method names as decorator arguments. */
|
|
49
|
+
declare function Delegate(...methods: string[]): PropertyDecorator;
|
|
50
|
+
/** Exclude a field from generated `equals()`. */
|
|
51
|
+
declare const EqualsExclude: PropertyDecorator;
|
|
31
52
|
|
|
32
|
-
export { Builder, Data, Factory, LegacyBackend, Memoize, NonNull, NonNullParam, Prototype, Singleton, ToString, legacyBackend };
|
|
53
|
+
export { Accessors, Builder, Data, Delegate, Equals, EqualsExclude, Factory, FieldDefaults, Getter, LegacyBackend, Log, Memoize, NonNull, NonNullParam, Prototype, Setter, Singleton, ToString, UtilityClass, Value, With, legacyBackend };
|
package/dist/legacy/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as Backend, M as MetadataStore } from '../backend-CkLBcDd8.js';
|
|
2
|
-
import { M as MemoizeOptions } from '../
|
|
3
|
-
export { C as ClassDecoratorLogic,
|
|
2
|
+
import { A as AccessorsOptions, F as FieldDefaultsOptions, L as LogOptions, M as MemoizeOptions } from '../log-Dbe0sSP1.js';
|
|
3
|
+
export { C as ClassDecoratorLogic, a as FieldDecoratorLogic, b as MethodDecoratorLogic, P as ParameterDecoratorLogic, c as createFromFactory, d as defineClassDecorator, e as defineFieldDecorator, f as defineMethodDecorator, g as defineParameterDecorator, h as getFactoryRegistry, r as registerFactory } from '../log-Dbe0sSP1.js';
|
|
4
4
|
|
|
5
5
|
/** Backend for the legacy `experimentalDecorators` standard. Use the singleton `legacyBackend`. */
|
|
6
6
|
declare class LegacyBackend implements Backend {
|
|
@@ -24,9 +24,30 @@ declare function Memoize(options?: MemoizeOptions): MethodDecorator;
|
|
|
24
24
|
declare function Factory(key: string): ClassDecorator;
|
|
25
25
|
/** Composite Lombok `@Data` — codegen generates getters, setters, toString, equals. */
|
|
26
26
|
declare const Data: ClassDecorator;
|
|
27
|
+
/** Immutable value class — codegen generates getters, with*, toString, equals. */
|
|
28
|
+
declare const Value: ClassDecorator;
|
|
27
29
|
/** Fluent builder — codegen generates a companion builder class. */
|
|
28
30
|
declare const Builder: ClassDecorator;
|
|
29
31
|
/** Auto `toString()` — codegen generates the method body. */
|
|
30
32
|
declare const ToString: ClassDecorator;
|
|
33
|
+
/** Structural `equals()` — codegen generates instance and static helpers. */
|
|
34
|
+
declare const Equals: ClassDecorator;
|
|
35
|
+
declare function With(): ClassDecorator & PropertyDecorator;
|
|
36
|
+
/** Field getter — codegen generates `getField()`. */
|
|
37
|
+
declare const Getter: PropertyDecorator;
|
|
38
|
+
/** Field setter — codegen generates `setField()`. */
|
|
39
|
+
declare const Setter: PropertyDecorator;
|
|
40
|
+
/** Logs method entry via the configured provider (default `console`). */
|
|
41
|
+
declare function Log(options?: LogOptions): ClassDecorator & MethodDecorator;
|
|
42
|
+
/** Fluent/chained accessor style for generated setters. */
|
|
43
|
+
declare function Accessors(options?: AccessorsOptions): ClassDecorator;
|
|
44
|
+
/** Uninstantiable utility holder — constructor throws. */
|
|
45
|
+
declare const UtilityClass: ClassDecorator;
|
|
46
|
+
/** Default field visibility and finality for codegen. */
|
|
47
|
+
declare function FieldDefaults(options?: FieldDefaultsOptions): ClassDecorator;
|
|
48
|
+
/** Delegates methods to a field. Pass method names as decorator arguments. */
|
|
49
|
+
declare function Delegate(...methods: string[]): PropertyDecorator;
|
|
50
|
+
/** Exclude a field from generated `equals()`. */
|
|
51
|
+
declare const EqualsExclude: PropertyDecorator;
|
|
31
52
|
|
|
32
|
-
export { Builder, Data, Factory, LegacyBackend, Memoize, NonNull, NonNullParam, Prototype, Singleton, ToString, legacyBackend };
|
|
53
|
+
export { Accessors, Builder, Data, Delegate, Equals, EqualsExclude, Factory, FieldDefaults, Getter, LegacyBackend, Log, Memoize, NonNull, NonNullParam, Prototype, Setter, Singleton, ToString, UtilityClass, Value, With, legacyBackend };
|