lombok-typescript 0.1.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/LICENSE +21 -0
- package/README.md +98 -0
- package/dist/backend-CkLBcDd8.d.cts +59 -0
- package/dist/backend-CkLBcDd8.d.ts +59 -0
- package/dist/cli/index.cjs +585 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +14 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.js +579 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/codegen/index.cjs +450 -0
- package/dist/codegen/index.cjs.map +1 -0
- package/dist/codegen/index.d.cts +109 -0
- package/dist/codegen/index.d.ts +109 -0
- package/dist/codegen/index.js +443 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/core/index.cjs +132 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +73 -0
- package/dist/core/index.d.ts +73 -0
- package/dist/core/index.js +128 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.cjs +142 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +93 -0
- package/dist/index.d.ts +93 -0
- package/dist/index.js +136 -0
- package/dist/index.js.map +1 -0
- package/dist/legacy/index.cjs +271 -0
- package/dist/legacy/index.cjs.map +1 -0
- package/dist/legacy/index.d.cts +32 -0
- package/dist/legacy/index.d.ts +32 -0
- package/dist/legacy/index.js +252 -0
- package/dist/legacy/index.js.map +1 -0
- package/dist/memoize-Bj9pm_cK.d.cts +48 -0
- package/dist/memoize-DvelzGDl.d.ts +48 -0
- package/dist/stage3/index.cjs +275 -0
- package/dist/stage3/index.cjs.map +1 -0
- package/dist/stage3/index.d.cts +97 -0
- package/dist/stage3/index.d.ts +97 -0
- package/dist/stage3/index.js +255 -0
- package/dist/stage3/index.js.map +1 -0
- package/package.json +120 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { a as Backend, M as MetadataStore } from '../backend-CkLBcDd8.js';
|
|
2
|
+
import { M as MemoizeOptions } from '../memoize-DvelzGDl.js';
|
|
3
|
+
export { C as ClassDecoratorLogic, F as FieldDecoratorLogic, a as MethodDecoratorLogic, P as ParameterDecoratorLogic, c as createFromFactory, d as defineClassDecorator, b as defineFieldDecorator, e as defineMethodDecorator, f as defineParameterDecorator, g as getFactoryRegistry, r as registerFactory } from '../memoize-DvelzGDl.js';
|
|
4
|
+
|
|
5
|
+
/** Backend for the legacy `experimentalDecorators` standard. Use the singleton `legacyBackend`. */
|
|
6
|
+
declare class LegacyBackend implements Backend {
|
|
7
|
+
readonly kind: "legacy";
|
|
8
|
+
readonly metadata: MetadataStore;
|
|
9
|
+
}
|
|
10
|
+
/** Shared instance. Legacy decorators rely on global metadata storage anyway. */
|
|
11
|
+
declare const legacyBackend: LegacyBackend;
|
|
12
|
+
|
|
13
|
+
/** Validates field assignments are not null or undefined. */
|
|
14
|
+
declare const NonNull: PropertyDecorator;
|
|
15
|
+
/** Validates method parameters marked with `@NonNull`. Legacy backend only. */
|
|
16
|
+
declare function NonNullParam(): ParameterDecorator;
|
|
17
|
+
/** Ensures only one instance of the class exists. */
|
|
18
|
+
declare const Singleton: ClassDecorator;
|
|
19
|
+
/** Returns a deep clone on every `new` call. */
|
|
20
|
+
declare const Prototype: ClassDecorator;
|
|
21
|
+
/** Caches method return values. Optional TTL in milliseconds. */
|
|
22
|
+
declare function Memoize(options?: MemoizeOptions): MethodDecorator;
|
|
23
|
+
/** Registers the class in the global factory registry under `key`. */
|
|
24
|
+
declare function Factory(key: string): ClassDecorator;
|
|
25
|
+
/** Composite Lombok `@Data` — codegen generates getters, setters, toString, equals. */
|
|
26
|
+
declare const Data: ClassDecorator;
|
|
27
|
+
/** Fluent builder — codegen generates a companion builder class. */
|
|
28
|
+
declare const Builder: ClassDecorator;
|
|
29
|
+
/** Auto `toString()` — codegen generates the method body. */
|
|
30
|
+
declare const ToString: ClassDecorator;
|
|
31
|
+
|
|
32
|
+
export { Builder, Data, Factory, LegacyBackend, Memoize, NonNull, NonNullParam, Prototype, Singleton, ToString, legacyBackend };
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
|
|
3
|
+
// src/legacy/backend.ts
|
|
4
|
+
var ReflectMetadataStore = class {
|
|
5
|
+
set(key, target, propertyKey, value) {
|
|
6
|
+
if (propertyKey === void 0) {
|
|
7
|
+
Reflect.defineMetadata(key, value, target);
|
|
8
|
+
} else {
|
|
9
|
+
Reflect.defineMetadata(key, value, target, propertyKey);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
get(key, target, propertyKey) {
|
|
13
|
+
if (propertyKey === void 0) {
|
|
14
|
+
return Reflect.getOwnMetadata(key, target);
|
|
15
|
+
}
|
|
16
|
+
return Reflect.getOwnMetadata(key, target, propertyKey);
|
|
17
|
+
}
|
|
18
|
+
has(key, target, propertyKey) {
|
|
19
|
+
if (propertyKey === void 0) {
|
|
20
|
+
return Reflect.hasOwnMetadata(key, target);
|
|
21
|
+
}
|
|
22
|
+
return Reflect.hasOwnMetadata(key, target, propertyKey);
|
|
23
|
+
}
|
|
24
|
+
delete(key, target, propertyKey) {
|
|
25
|
+
const had = this.has(key, target, propertyKey);
|
|
26
|
+
if (!had) return false;
|
|
27
|
+
if (propertyKey === void 0) {
|
|
28
|
+
Reflect.deleteMetadata(key, target);
|
|
29
|
+
} else {
|
|
30
|
+
Reflect.deleteMetadata(key, target, propertyKey);
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
list(target, propertyKey) {
|
|
35
|
+
if (propertyKey === void 0) {
|
|
36
|
+
return Reflect.getOwnMetadataKeys(target).map(String);
|
|
37
|
+
}
|
|
38
|
+
return Reflect.getOwnMetadataKeys(target, propertyKey).map(String);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
var LegacyBackend = class {
|
|
42
|
+
kind = "legacy";
|
|
43
|
+
metadata = new ReflectMetadataStore();
|
|
44
|
+
};
|
|
45
|
+
var legacyBackend = new LegacyBackend();
|
|
46
|
+
|
|
47
|
+
// src/legacy/decorate.ts
|
|
48
|
+
function defineClassDecorator(logic) {
|
|
49
|
+
return ((target) => logic(legacyBackend, target));
|
|
50
|
+
}
|
|
51
|
+
function defineFieldDecorator(logic) {
|
|
52
|
+
return ((target, propertyKey) => {
|
|
53
|
+
logic(legacyBackend, target, propertyKey);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function defineMethodDecorator(logic) {
|
|
57
|
+
return ((target, propertyKey, descriptor) => {
|
|
58
|
+
return logic(legacyBackend, target, propertyKey, descriptor);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function defineParameterDecorator(logic) {
|
|
62
|
+
return ((target, propertyKey, parameterIndex) => {
|
|
63
|
+
logic(legacyBackend, target, propertyKey, parameterIndex);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// src/core/metadata-keys.ts
|
|
68
|
+
var PREFIX = "lombok-ts:";
|
|
69
|
+
var MetadataKeys = {
|
|
70
|
+
// Class-level (Lombok)
|
|
71
|
+
DATA: `${PREFIX}data`,
|
|
72
|
+
BUILDER: `${PREFIX}builder`,
|
|
73
|
+
TO_STRING: `${PREFIX}toString`,
|
|
74
|
+
// Class-level (GoF)
|
|
75
|
+
SINGLETON: `${PREFIX}singleton`,
|
|
76
|
+
FACTORY: `${PREFIX}factory`,
|
|
77
|
+
PROTOTYPE: `${PREFIX}prototype`,
|
|
78
|
+
NON_NULL: `${PREFIX}nonNull`,
|
|
79
|
+
// Method-level
|
|
80
|
+
MEMOIZE: `${PREFIX}memoize`,
|
|
81
|
+
// Parameter-level
|
|
82
|
+
NON_NULL_PARAM: `${PREFIX}nonNull:param`};
|
|
83
|
+
|
|
84
|
+
// src/decorators/shared/factory.ts
|
|
85
|
+
var factoryRegistry = /* @__PURE__ */ new Map();
|
|
86
|
+
function registerFactory(key, ctor) {
|
|
87
|
+
factoryRegistry.set(key, ctor);
|
|
88
|
+
}
|
|
89
|
+
function createFromFactory(key, ...args) {
|
|
90
|
+
const ctor = factoryRegistry.get(key);
|
|
91
|
+
if (!ctor) {
|
|
92
|
+
throw new Error(`No factory registered for key "${key}"`);
|
|
93
|
+
}
|
|
94
|
+
return new ctor(...args);
|
|
95
|
+
}
|
|
96
|
+
function getFactoryRegistry() {
|
|
97
|
+
return factoryRegistry;
|
|
98
|
+
}
|
|
99
|
+
function factoryClassLegacy(backend, target, key) {
|
|
100
|
+
backend.metadata.set(MetadataKeys.FACTORY, target, void 0, key);
|
|
101
|
+
registerFactory(key, target);
|
|
102
|
+
}
|
|
103
|
+
function codegenClassMarkerLegacy(backend, target, metadataKey) {
|
|
104
|
+
backend.metadata.set(metadataKey, target, void 0, true);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// src/decorators/shared/non-null.ts
|
|
108
|
+
function assertNonNull(value, label) {
|
|
109
|
+
if (value === null || value === void 0) {
|
|
110
|
+
throw new TypeError(`${label} must not be null or undefined`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function nonNullFieldLegacy(backend, targetPrototype, propertyKey) {
|
|
114
|
+
backend.metadata.set(MetadataKeys.NON_NULL, targetPrototype, propertyKey, true);
|
|
115
|
+
const key = String(propertyKey);
|
|
116
|
+
let stored;
|
|
117
|
+
Object.defineProperty(targetPrototype, propertyKey, {
|
|
118
|
+
configurable: true,
|
|
119
|
+
enumerable: true,
|
|
120
|
+
get() {
|
|
121
|
+
return stored;
|
|
122
|
+
},
|
|
123
|
+
set(value) {
|
|
124
|
+
assertNonNull(value, key);
|
|
125
|
+
stored = value;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function nonNullParameterLegacy(backend, targetPrototype, propertyKey, parameterIndex) {
|
|
130
|
+
backend.metadata.set(MetadataKeys.NON_NULL_PARAM, targetPrototype, propertyKey, parameterIndex);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// src/decorators/shared/singleton.ts
|
|
134
|
+
function singletonClassLegacy(backend, target) {
|
|
135
|
+
backend.metadata.set(MetadataKeys.SINGLETON, target, void 0, true);
|
|
136
|
+
const Singleton2 = class extends target {
|
|
137
|
+
static #instance;
|
|
138
|
+
constructor(...args) {
|
|
139
|
+
if (Singleton2.#instance) {
|
|
140
|
+
return Singleton2.#instance;
|
|
141
|
+
}
|
|
142
|
+
super(...args);
|
|
143
|
+
Singleton2.#instance = this;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
return Singleton2;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// src/utils/index.ts
|
|
150
|
+
function deepClone(obj) {
|
|
151
|
+
if (obj === null || typeof obj !== "object") {
|
|
152
|
+
return obj;
|
|
153
|
+
}
|
|
154
|
+
if (Array.isArray(obj)) {
|
|
155
|
+
return obj.map((item) => deepClone(item));
|
|
156
|
+
}
|
|
157
|
+
const cloned = {};
|
|
158
|
+
for (const key in obj) {
|
|
159
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
160
|
+
cloned[key] = deepClone(obj[key]);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return cloned;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// src/decorators/shared/prototype.ts
|
|
167
|
+
function prototypeClassLegacy(backend, target) {
|
|
168
|
+
backend.metadata.set(MetadataKeys.PROTOTYPE, target, void 0, true);
|
|
169
|
+
const Prototype2 = class extends target {
|
|
170
|
+
constructor(...args) {
|
|
171
|
+
super(...args);
|
|
172
|
+
const clone = deepClone(this);
|
|
173
|
+
return clone;
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
return Prototype2;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// src/decorators/shared/memoize.ts
|
|
180
|
+
var CACHE_MISS = /* @__PURE__ */ Symbol("memoize-cache-miss");
|
|
181
|
+
function buildCacheKey(args) {
|
|
182
|
+
return JSON.stringify(args);
|
|
183
|
+
}
|
|
184
|
+
function getFromCache(cache, key, ttl) {
|
|
185
|
+
const entry = cache.get(key);
|
|
186
|
+
if (!entry) return CACHE_MISS;
|
|
187
|
+
if (ttl !== void 0 && entry.expiresAt !== void 0 && Date.now() > entry.expiresAt) {
|
|
188
|
+
cache.delete(key);
|
|
189
|
+
return CACHE_MISS;
|
|
190
|
+
}
|
|
191
|
+
return entry.value;
|
|
192
|
+
}
|
|
193
|
+
function memoizeMethod(original, options = {}) {
|
|
194
|
+
const cache = /* @__PURE__ */ new Map();
|
|
195
|
+
const ttl = options.ttl;
|
|
196
|
+
return function(...args) {
|
|
197
|
+
const key = buildCacheKey(args);
|
|
198
|
+
const cached = getFromCache(cache, key, ttl);
|
|
199
|
+
if (cached !== CACHE_MISS) {
|
|
200
|
+
return cached;
|
|
201
|
+
}
|
|
202
|
+
const result = original.apply(this, args);
|
|
203
|
+
const entry = { value: result };
|
|
204
|
+
if (ttl !== void 0) {
|
|
205
|
+
entry.expiresAt = Date.now() + ttl;
|
|
206
|
+
}
|
|
207
|
+
cache.set(key, entry);
|
|
208
|
+
return result;
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// src/decorators/shared/memoize-logic.ts
|
|
213
|
+
function memoizeMethodLegacy(backend, targetPrototype, propertyKey, descriptor, options = {}) {
|
|
214
|
+
backend.metadata.set(MetadataKeys.MEMOIZE, targetPrototype, propertyKey, options);
|
|
215
|
+
const original = descriptor.value;
|
|
216
|
+
if (typeof original !== "function") return;
|
|
217
|
+
return {
|
|
218
|
+
...descriptor,
|
|
219
|
+
value: memoizeMethod(original, options)
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// src/decorators/legacy/index.ts
|
|
224
|
+
var NonNull = defineFieldDecorator(nonNullFieldLegacy);
|
|
225
|
+
function NonNullParam() {
|
|
226
|
+
return defineParameterDecorator(nonNullParameterLegacy);
|
|
227
|
+
}
|
|
228
|
+
var Singleton = defineClassDecorator(singletonClassLegacy);
|
|
229
|
+
var Prototype = defineClassDecorator(prototypeClassLegacy);
|
|
230
|
+
function Memoize(options = {}) {
|
|
231
|
+
return defineMethodDecorator(
|
|
232
|
+
(backend, target, key, descriptor) => memoizeMethodLegacy(backend, target, key, descriptor, options)
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
function Factory(key) {
|
|
236
|
+
return defineClassDecorator((backend, target) => {
|
|
237
|
+
factoryClassLegacy(backend, target, key);
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
var Data = defineClassDecorator(
|
|
241
|
+
(backend, target) => codegenClassMarkerLegacy(backend, target, MetadataKeys.DATA)
|
|
242
|
+
);
|
|
243
|
+
var Builder = defineClassDecorator(
|
|
244
|
+
(backend, target) => codegenClassMarkerLegacy(backend, target, MetadataKeys.BUILDER)
|
|
245
|
+
);
|
|
246
|
+
var ToString = defineClassDecorator(
|
|
247
|
+
(backend, target) => codegenClassMarkerLegacy(backend, target, MetadataKeys.TO_STRING)
|
|
248
|
+
);
|
|
249
|
+
|
|
250
|
+
export { Builder, Data, Factory, LegacyBackend, Memoize, NonNull, NonNullParam, Prototype, Singleton, ToString, createFromFactory, defineClassDecorator, defineFieldDecorator, defineMethodDecorator, defineParameterDecorator, getFactoryRegistry, legacyBackend, registerFactory };
|
|
251
|
+
//# sourceMappingURL=index.js.map
|
|
252
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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.js","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"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { a as Backend, P as PropertyName } from './backend-CkLBcDd8.cjs';
|
|
2
|
+
|
|
3
|
+
/** A class constructor, used in place of bare `Function` in decorator signatures. */
|
|
4
|
+
type AnyClass = new (...args: any[]) => any;
|
|
5
|
+
/** Logic shapes for legacy decorator authoring. */
|
|
6
|
+
interface ClassDecoratorLogic {
|
|
7
|
+
(backend: Backend, target: AnyClass): AnyClass | void;
|
|
8
|
+
}
|
|
9
|
+
interface FieldDecoratorLogic {
|
|
10
|
+
(backend: Backend, targetPrototype: object, propertyKey: PropertyName): void;
|
|
11
|
+
}
|
|
12
|
+
interface MethodDecoratorLogic<T = unknown> {
|
|
13
|
+
(backend: Backend, targetPrototype: object, propertyKey: PropertyName, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T> | void;
|
|
14
|
+
}
|
|
15
|
+
interface ParameterDecoratorLogic {
|
|
16
|
+
(backend: Backend, targetPrototype: object, propertyKey: PropertyName | undefined, parameterIndex: number): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build a class decorator with the legacy signature. The constructor comes in
|
|
20
|
+
* as `target`; an optional replacement constructor can be returned.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* const Tracked = defineClassDecorator((backend, target) => {
|
|
24
|
+
* backend.metadata.set('tracked', target, undefined, true);
|
|
25
|
+
* });
|
|
26
|
+
*/
|
|
27
|
+
declare function defineClassDecorator(logic: ClassDecoratorLogic): ClassDecorator;
|
|
28
|
+
/**
|
|
29
|
+
* Build a field/property decorator with the legacy signature. Field decorators
|
|
30
|
+
* can't return a replacement value here; use a method decorator or the codegen
|
|
31
|
+
* path for that.
|
|
32
|
+
*/
|
|
33
|
+
declare function defineFieldDecorator(logic: FieldDecoratorLogic): PropertyDecorator;
|
|
34
|
+
/** Build a method decorator with the legacy signature. */
|
|
35
|
+
declare function defineMethodDecorator<T = unknown>(logic: MethodDecoratorLogic<T>): MethodDecorator;
|
|
36
|
+
/** Build a parameter decorator with the legacy signature. */
|
|
37
|
+
declare function defineParameterDecorator(logic: ParameterDecoratorLogic): ParameterDecorator;
|
|
38
|
+
|
|
39
|
+
declare function registerFactory(key: string, ctor: AnyClass): void;
|
|
40
|
+
declare function createFromFactory<T = unknown>(key: string, ...args: unknown[]): T;
|
|
41
|
+
declare function getFactoryRegistry(): ReadonlyMap<string, AnyClass>;
|
|
42
|
+
|
|
43
|
+
interface MemoizeOptions {
|
|
44
|
+
/** Time-to-live in milliseconds. Omit for infinite cache. */
|
|
45
|
+
ttl?: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { type AnyClass as A, type ClassDecoratorLogic as C, type FieldDecoratorLogic as F, type MemoizeOptions as M, type ParameterDecoratorLogic as P, type MethodDecoratorLogic as a, defineFieldDecorator as b, createFromFactory as c, defineClassDecorator as d, defineMethodDecorator as e, defineParameterDecorator as f, getFactoryRegistry as g, registerFactory as r };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { a as Backend, P as PropertyName } from './backend-CkLBcDd8.js';
|
|
2
|
+
|
|
3
|
+
/** A class constructor, used in place of bare `Function` in decorator signatures. */
|
|
4
|
+
type AnyClass = new (...args: any[]) => any;
|
|
5
|
+
/** Logic shapes for legacy decorator authoring. */
|
|
6
|
+
interface ClassDecoratorLogic {
|
|
7
|
+
(backend: Backend, target: AnyClass): AnyClass | void;
|
|
8
|
+
}
|
|
9
|
+
interface FieldDecoratorLogic {
|
|
10
|
+
(backend: Backend, targetPrototype: object, propertyKey: PropertyName): void;
|
|
11
|
+
}
|
|
12
|
+
interface MethodDecoratorLogic<T = unknown> {
|
|
13
|
+
(backend: Backend, targetPrototype: object, propertyKey: PropertyName, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T> | void;
|
|
14
|
+
}
|
|
15
|
+
interface ParameterDecoratorLogic {
|
|
16
|
+
(backend: Backend, targetPrototype: object, propertyKey: PropertyName | undefined, parameterIndex: number): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build a class decorator with the legacy signature. The constructor comes in
|
|
20
|
+
* as `target`; an optional replacement constructor can be returned.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* const Tracked = defineClassDecorator((backend, target) => {
|
|
24
|
+
* backend.metadata.set('tracked', target, undefined, true);
|
|
25
|
+
* });
|
|
26
|
+
*/
|
|
27
|
+
declare function defineClassDecorator(logic: ClassDecoratorLogic): ClassDecorator;
|
|
28
|
+
/**
|
|
29
|
+
* Build a field/property decorator with the legacy signature. Field decorators
|
|
30
|
+
* can't return a replacement value here; use a method decorator or the codegen
|
|
31
|
+
* path for that.
|
|
32
|
+
*/
|
|
33
|
+
declare function defineFieldDecorator(logic: FieldDecoratorLogic): PropertyDecorator;
|
|
34
|
+
/** Build a method decorator with the legacy signature. */
|
|
35
|
+
declare function defineMethodDecorator<T = unknown>(logic: MethodDecoratorLogic<T>): MethodDecorator;
|
|
36
|
+
/** Build a parameter decorator with the legacy signature. */
|
|
37
|
+
declare function defineParameterDecorator(logic: ParameterDecoratorLogic): ParameterDecorator;
|
|
38
|
+
|
|
39
|
+
declare function registerFactory(key: string, ctor: AnyClass): void;
|
|
40
|
+
declare function createFromFactory<T = unknown>(key: string, ...args: unknown[]): T;
|
|
41
|
+
declare function getFactoryRegistry(): ReadonlyMap<string, AnyClass>;
|
|
42
|
+
|
|
43
|
+
interface MemoizeOptions {
|
|
44
|
+
/** Time-to-live in milliseconds. Omit for infinite cache. */
|
|
45
|
+
ttl?: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { type AnyClass as A, type ClassDecoratorLogic as C, type FieldDecoratorLogic as F, type MemoizeOptions as M, type ParameterDecoratorLogic as P, type MethodDecoratorLogic as a, defineFieldDecorator as b, createFromFactory as c, defineClassDecorator as d, defineMethodDecorator as e, defineParameterDecorator as f, getFactoryRegistry as g, registerFactory as r };
|