@joist/di 4.2.3-next.10 → 4.2.3-next.12
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 +19 -4
- package/package.json +1 -1
- package/src/lib/dom/injectable-el.ts +4 -2
- package/src/lib/lifecycle.test.ts +34 -6
- package/src/lib/lifecycle.ts +12 -12
- package/src/lib/metadata.ts +7 -7
- package/target/lib/dom/injectable-el.d.ts +3 -2
- package/target/lib/dom/injectable-el.js.map +1 -1
- package/target/lib/lifecycle.d.ts +3 -3
- package/target/lib/lifecycle.js +3 -3
- package/target/lib/lifecycle.js.map +1 -1
- package/target/lib/lifecycle.test.js +43 -5
- package/target/lib/lifecycle.test.js.map +1 -1
- package/target/lib/metadata.d.ts +9 -6
- package/target/lib/metadata.js.map +1 -1
package/README.md
CHANGED
|
@@ -292,16 +292,16 @@ class MyService {
|
|
|
292
292
|
|
|
293
293
|
### Conditional Lifecycle Hooks
|
|
294
294
|
|
|
295
|
-
You can control when lifecycle callbacks are executed by providing a condition function:
|
|
295
|
+
You can control when lifecycle callbacks are executed by providing a condition function. The condition function receives the current injector:
|
|
296
296
|
|
|
297
297
|
```ts
|
|
298
298
|
class MyService {
|
|
299
|
-
@created(() => ({ enabled: true }))
|
|
299
|
+
@created((injector) => ({ enabled: true }))
|
|
300
300
|
onCreated() {
|
|
301
301
|
// This will execute because enabled is true
|
|
302
302
|
}
|
|
303
303
|
|
|
304
|
-
@injected(() => {
|
|
304
|
+
@injected((injector) => {
|
|
305
305
|
return {
|
|
306
306
|
enabled: process.env.NODE_ENV === "development",
|
|
307
307
|
};
|
|
@@ -318,12 +318,27 @@ The condition function can return an object with an `enabled` property that dete
|
|
|
318
318
|
- `{ enabled: false }` - The callback will not execute
|
|
319
319
|
- `{}` - The callback will execute (default behavior)
|
|
320
320
|
|
|
321
|
+
You can use the injector to access other services or check the injector's configuration:
|
|
322
|
+
|
|
323
|
+
```ts
|
|
324
|
+
class MyService {
|
|
325
|
+
@created((injector) => {
|
|
326
|
+
const config = injector.inject(ConfigService);
|
|
327
|
+
return { enabled: config.featureEnabled };
|
|
328
|
+
})
|
|
329
|
+
onCreated() {
|
|
330
|
+
// Only executes if feature is enabled in config
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
321
335
|
Lifecycle conditions are useful when you need to:
|
|
322
336
|
|
|
323
337
|
- Execute callbacks only in specific environments
|
|
324
|
-
- Control callback execution based on
|
|
338
|
+
- Control callback execution based on injector state
|
|
325
339
|
- Implement feature flags for lifecycle hooks
|
|
326
340
|
- Conditionally initialize services based on configuration
|
|
341
|
+
- Make decisions based on other services in the injector
|
|
327
342
|
|
|
328
343
|
## Hierarchical Injectors
|
|
329
344
|
|
package/package.json
CHANGED
|
@@ -6,10 +6,12 @@ import { callLifecycle } from "../lifecycle.js";
|
|
|
6
6
|
import type { InjectableMetadata } from "../metadata.js";
|
|
7
7
|
import type { ConstructableToken } from "../provider.js";
|
|
8
8
|
|
|
9
|
+
export type InjectableEl = HTMLElement & { [INJECTOR]: Injector };
|
|
10
|
+
|
|
9
11
|
export function injectableEl<
|
|
10
|
-
T extends ConstructableToken<
|
|
12
|
+
T extends ConstructableToken<InjectableEl>,
|
|
11
13
|
>(Base: T, ctx: ClassDecoratorContext): T {
|
|
12
|
-
const metadata: InjectableMetadata = ctx.metadata;
|
|
14
|
+
const metadata: InjectableMetadata<InjectableEl> = ctx.metadata;
|
|
13
15
|
|
|
14
16
|
const def = {
|
|
15
17
|
[Base.name]: class extends Base {
|
|
@@ -4,7 +4,8 @@ import { inject } from "./inject.js";
|
|
|
4
4
|
import { injectable } from "./injectable.js";
|
|
5
5
|
import { Injector } from "./injector.js";
|
|
6
6
|
import { created, injected } from "./lifecycle.js";
|
|
7
|
-
import { readInjector } from "./metadata.js";
|
|
7
|
+
import { LifecycleCallback, readInjector } from "./metadata.js";
|
|
8
|
+
import { StaticToken } from "./provider.js";
|
|
8
9
|
|
|
9
10
|
it("should call onInit and onInject when a service is first created", () => {
|
|
10
11
|
const i = new Injector();
|
|
@@ -245,17 +246,26 @@ it("should execute callbacks when condition returns empty object", () => {
|
|
|
245
246
|
});
|
|
246
247
|
});
|
|
247
248
|
|
|
248
|
-
|
|
249
|
+
|
|
250
|
+
it("should pass the injector to the condition", () => {
|
|
251
|
+
const IS_PROD = new StaticToken("isProd", () => false);
|
|
252
|
+
|
|
249
253
|
const i = new Injector();
|
|
250
254
|
|
|
255
|
+
function isProd() {
|
|
256
|
+
return (val: LifecycleCallback, ctx: ClassMethodDecoratorContext) => {
|
|
257
|
+
created(({ injector }) => {
|
|
258
|
+
const enabled = injector.inject(IS_PROD);
|
|
259
|
+
return { enabled };
|
|
260
|
+
})(val, ctx);
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
251
264
|
@injectable()
|
|
252
265
|
class MyService {
|
|
253
266
|
count = 0;
|
|
254
|
-
name = "test";
|
|
255
267
|
|
|
256
|
-
@
|
|
257
|
-
return { enabled: instance.count > 0 && instance.name === "test" };
|
|
258
|
-
})
|
|
268
|
+
@isProd()
|
|
259
269
|
onCreated() {
|
|
260
270
|
this.count++;
|
|
261
271
|
}
|
|
@@ -264,3 +274,21 @@ it("should provide type safety for instance properties", () => {
|
|
|
264
274
|
const service = i.inject(MyService);
|
|
265
275
|
assert.equal(service.count, 0); // Not called because count is 0
|
|
266
276
|
});
|
|
277
|
+
|
|
278
|
+
it("should pass the instance to the condition", () => {
|
|
279
|
+
const i = new Injector();
|
|
280
|
+
|
|
281
|
+
@injectable()
|
|
282
|
+
class MyService {
|
|
283
|
+
enabled = false;
|
|
284
|
+
count = 0;
|
|
285
|
+
|
|
286
|
+
@created(({ instance }) => ({ enabled: instance.enabled }))
|
|
287
|
+
onCreated() {
|
|
288
|
+
this.count++;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
const service = i.inject(MyService);
|
|
293
|
+
assert.equal(service.count, 0); // not called because instance.enabled is false
|
|
294
|
+
});
|
package/src/lib/lifecycle.ts
CHANGED
|
@@ -6,12 +6,12 @@ import type {
|
|
|
6
6
|
LifecycleMethod,
|
|
7
7
|
} from "./metadata.js";
|
|
8
8
|
|
|
9
|
-
export function injected<T
|
|
9
|
+
export function injected<T>(condition?: LifecycleCondition<T>) {
|
|
10
10
|
return function onInjectDecorator(
|
|
11
11
|
val: LifecycleCallback,
|
|
12
|
-
ctx: ClassMethodDecoratorContext
|
|
12
|
+
ctx: ClassMethodDecoratorContext<T>,
|
|
13
13
|
): void {
|
|
14
|
-
const metadata: InjectableMetadata = ctx.metadata;
|
|
14
|
+
const metadata: InjectableMetadata<T> = ctx.metadata;
|
|
15
15
|
metadata.onInjected ??= [];
|
|
16
16
|
metadata.onInjected.push({
|
|
17
17
|
callback: val,
|
|
@@ -20,12 +20,12 @@ export function injected<T extends object>(condition?: LifecycleCondition<T>) {
|
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export function created<T
|
|
23
|
+
export function created<T>(condition?: LifecycleCondition<T>) {
|
|
24
24
|
return function onInjectDecorator(
|
|
25
25
|
val: LifecycleCallback,
|
|
26
|
-
ctx: ClassMethodDecoratorContext
|
|
26
|
+
ctx: ClassMethodDecoratorContext<T>,
|
|
27
27
|
): void {
|
|
28
|
-
const metadata: InjectableMetadata = ctx.metadata;
|
|
28
|
+
const metadata: InjectableMetadata<T> = ctx.metadata;
|
|
29
29
|
metadata.onCreated ??= [];
|
|
30
30
|
metadata.onCreated.push({
|
|
31
31
|
callback: val,
|
|
@@ -34,20 +34,20 @@ export function created<T extends object>(condition?: LifecycleCondition<T>) {
|
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
export function callLifecycle
|
|
38
|
-
instance:
|
|
39
|
-
|
|
40
|
-
methods?: LifecycleMethod<
|
|
37
|
+
export function callLifecycle(
|
|
38
|
+
instance: object,
|
|
39
|
+
injector: Injector,
|
|
40
|
+
methods?: LifecycleMethod<any>[],
|
|
41
41
|
): void {
|
|
42
42
|
if (methods) {
|
|
43
43
|
for (const { callback, condition } of methods) {
|
|
44
44
|
if (condition) {
|
|
45
|
-
const result = condition(instance);
|
|
45
|
+
const result = condition({ injector, instance });
|
|
46
46
|
if (result.enabled === false) {
|
|
47
47
|
continue;
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
callback.call(instance,
|
|
50
|
+
callback.call(instance, injector);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
}
|
package/src/lib/metadata.ts
CHANGED
|
@@ -5,20 +5,20 @@ import type { InjectionToken } from "./provider.js";
|
|
|
5
5
|
|
|
6
6
|
export type LifecycleCallback = (i: Injector) => void;
|
|
7
7
|
|
|
8
|
-
export type LifecycleCondition<T
|
|
8
|
+
export type LifecycleCondition<T> = (ctx:{injector: Injector, instance: T}) => { enabled?: boolean };
|
|
9
9
|
|
|
10
|
-
export interface LifecycleMethod<T
|
|
10
|
+
export interface LifecycleMethod<T> {
|
|
11
11
|
callback: LifecycleCallback;
|
|
12
12
|
condition?: LifecycleCondition<T>;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export interface InjectableMetadata {
|
|
16
|
-
onCreated?: LifecycleMethod<
|
|
17
|
-
onInjected?: LifecycleMethod<
|
|
15
|
+
export interface InjectableMetadata<T> {
|
|
16
|
+
onCreated?: LifecycleMethod<T>[];
|
|
17
|
+
onInjected?: LifecycleMethod<T>[];
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
export function readMetadata<T>(target: InjectionToken<T>): InjectableMetadata | null {
|
|
21
|
-
const metadata: InjectableMetadata | null = target[Symbol.metadata];
|
|
20
|
+
export function readMetadata<T>(target: InjectionToken<T>): InjectableMetadata<T> | null {
|
|
21
|
+
const metadata: InjectableMetadata<T> | null = target[Symbol.metadata];
|
|
22
22
|
|
|
23
23
|
return metadata;
|
|
24
24
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { INJECTOR } from "../injector.js";
|
|
2
2
|
import type { Injector } from "../injector.js";
|
|
3
3
|
import type { ConstructableToken } from "../provider.js";
|
|
4
|
-
export
|
|
4
|
+
export type InjectableEl = HTMLElement & {
|
|
5
5
|
[INJECTOR]: Injector;
|
|
6
|
-
}
|
|
6
|
+
};
|
|
7
|
+
export declare function injectableEl<T extends ConstructableToken<InjectableEl>>(Base: T, ctx: ClassDecoratorContext): T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable-el.js","sourceRoot":"","sources":["../../../src/lib/dom/injectable-el.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"injectable-el.js","sourceRoot":"","sources":["../../../src/lib/dom/injectable-el.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhD,MAAM,UAAU,YAAY,CAE1B,IAAO,EAAE,GAA0B;IACnC,MAAM,QAAQ,GAAqC,GAAG,CAAC,QAAQ,CAAC;IAEhE,MAAM,GAAG,GAAG;QACV,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAM,SAAQ,IAAI;YAC7B,YAAY,GAAG,CAAQ;gBACrB,KAAK,EAAE,CAAC;gBAER,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEhC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC7C,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;wBACpD,CAAC,CAAC,eAAe,EAAE,CAAC;wBAEpB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACrD,CAAC;YAED,iBAAiB;gBACf,IAAI,CAAC,aAAa,CAChB,IAAI,mBAAmB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC5C,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC;gBAC9B,CAAC,CAAC,CACH,CAAC;gBAEF,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAE1D,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,oBAAoB;gBAIlB,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;oBAC/B,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBAC/B,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;YACpC,CAAC;SACF;KACF,CAAC;IAEF,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Injector } from "./injector.js";
|
|
2
2
|
import type { LifecycleCallback, LifecycleCondition, LifecycleMethod } from "./metadata.js";
|
|
3
|
-
export declare function injected<T
|
|
4
|
-
export declare function created<T
|
|
5
|
-
export declare function callLifecycle
|
|
3
|
+
export declare function injected<T>(condition?: LifecycleCondition<T>): (val: LifecycleCallback, ctx: ClassMethodDecoratorContext<T>) => void;
|
|
4
|
+
export declare function created<T>(condition?: LifecycleCondition<T>): (val: LifecycleCallback, ctx: ClassMethodDecoratorContext<T>) => void;
|
|
5
|
+
export declare function callLifecycle(instance: object, injector: Injector, methods?: LifecycleMethod<any>[]): void;
|
package/target/lib/lifecycle.js
CHANGED
|
@@ -18,16 +18,16 @@ export function created(condition) {
|
|
|
18
18
|
});
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
export function callLifecycle(instance,
|
|
21
|
+
export function callLifecycle(instance, injector, methods) {
|
|
22
22
|
if (methods) {
|
|
23
23
|
for (const { callback, condition } of methods) {
|
|
24
24
|
if (condition) {
|
|
25
|
-
const result = condition(instance);
|
|
25
|
+
const result = condition({ injector, instance });
|
|
26
26
|
if (result.enabled === false) {
|
|
27
27
|
continue;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
callback.call(instance,
|
|
30
|
+
callback.call(instance, injector);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/lib/lifecycle.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,QAAQ,
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/lib/lifecycle.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,QAAQ,CAAI,SAAiC;IAC3D,OAAO,SAAS,iBAAiB,CAC/B,GAAsB,EACtB,GAAmC;QAEnC,MAAM,QAAQ,GAA0B,GAAG,CAAC,QAAQ,CAAC;QACrD,QAAQ,CAAC,UAAU,KAAK,EAAE,CAAC;QAC3B,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;YACvB,QAAQ,EAAE,GAAG;YACb,SAAS;SACV,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,SAAiC;IAC1D,OAAO,SAAS,iBAAiB,CAC/B,GAAsB,EACtB,GAAmC;QAEnC,MAAM,QAAQ,GAA0B,GAAG,CAAC,QAAQ,CAAC;QACrD,QAAQ,CAAC,SAAS,KAAK,EAAE,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;YACtB,QAAQ,EAAE,GAAG;YACb,SAAS;SACV,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,QAAkB,EAClB,OAAgC;IAEhC,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,OAAO,EAAE,CAAC;YAC9C,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACjD,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;oBAC7B,SAAS;gBACX,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -5,6 +5,7 @@ import { injectable } from "./injectable.js";
|
|
|
5
5
|
import { Injector } from "./injector.js";
|
|
6
6
|
import { created, injected } from "./lifecycle.js";
|
|
7
7
|
import { readInjector } from "./metadata.js";
|
|
8
|
+
import { StaticToken } from "./provider.js";
|
|
8
9
|
it("should call onInit and onInject when a service is first created", () => {
|
|
9
10
|
const i = new Injector();
|
|
10
11
|
let MyService = (() => {
|
|
@@ -361,8 +362,17 @@ it("should execute callbacks when condition returns empty object", () => {
|
|
|
361
362
|
onInjected: 1,
|
|
362
363
|
});
|
|
363
364
|
});
|
|
364
|
-
it("should
|
|
365
|
+
it("should pass the injector to the condition", () => {
|
|
366
|
+
const IS_PROD = new StaticToken("isProd", () => false);
|
|
365
367
|
const i = new Injector();
|
|
368
|
+
function isProd() {
|
|
369
|
+
return (val, ctx) => {
|
|
370
|
+
created(({ injector }) => {
|
|
371
|
+
const enabled = injector.inject(IS_PROD);
|
|
372
|
+
return { enabled };
|
|
373
|
+
})(val, ctx);
|
|
374
|
+
};
|
|
375
|
+
}
|
|
366
376
|
let MyService = (() => {
|
|
367
377
|
let _classDecorators = [injectable()];
|
|
368
378
|
let _classDescriptor;
|
|
@@ -374,9 +384,7 @@ it("should provide type safety for instance properties", () => {
|
|
|
374
384
|
static { _classThis = this; }
|
|
375
385
|
static {
|
|
376
386
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
377
|
-
_onCreated_decorators = [
|
|
378
|
-
return { enabled: instance.count > 0 && instance.name === "test" };
|
|
379
|
-
})];
|
|
387
|
+
_onCreated_decorators = [isProd()];
|
|
380
388
|
__esDecorate(this, null, _onCreated_decorators, { kind: "method", name: "onCreated", static: false, private: false, access: { has: obj => "onCreated" in obj, get: obj => obj.onCreated }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
381
389
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
382
390
|
MyService = _classThis = _classDescriptor.value;
|
|
@@ -384,7 +392,37 @@ it("should provide type safety for instance properties", () => {
|
|
|
384
392
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
385
393
|
}
|
|
386
394
|
count = (__runInitializers(this, _instanceExtraInitializers), 0);
|
|
387
|
-
|
|
395
|
+
onCreated() {
|
|
396
|
+
this.count++;
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
return MyService = _classThis;
|
|
400
|
+
})();
|
|
401
|
+
const service = i.inject(MyService);
|
|
402
|
+
assert.equal(service.count, 0);
|
|
403
|
+
});
|
|
404
|
+
it("should pass the instance to the condition", () => {
|
|
405
|
+
const i = new Injector();
|
|
406
|
+
let MyService = (() => {
|
|
407
|
+
let _classDecorators = [injectable()];
|
|
408
|
+
let _classDescriptor;
|
|
409
|
+
let _classExtraInitializers = [];
|
|
410
|
+
let _classThis;
|
|
411
|
+
let _instanceExtraInitializers = [];
|
|
412
|
+
let _onCreated_decorators;
|
|
413
|
+
var MyService = class {
|
|
414
|
+
static { _classThis = this; }
|
|
415
|
+
static {
|
|
416
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
417
|
+
_onCreated_decorators = [created(({ instance }) => ({ enabled: instance.enabled }))];
|
|
418
|
+
__esDecorate(this, null, _onCreated_decorators, { kind: "method", name: "onCreated", static: false, private: false, access: { has: obj => "onCreated" in obj, get: obj => obj.onCreated }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
419
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
420
|
+
MyService = _classThis = _classDescriptor.value;
|
|
421
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
422
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
423
|
+
}
|
|
424
|
+
enabled = (__runInitializers(this, _instanceExtraInitializers), false);
|
|
425
|
+
count = 0;
|
|
388
426
|
onCreated() {
|
|
389
427
|
this.count++;
|
|
390
428
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.test.js","sourceRoot":"","sources":["../../src/lib/lifecycle.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"lifecycle.test.js","sourceRoot":"","sources":["../../src/lib/lifecycle.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAqB,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;IACzE,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QAGnB,SAAS;gCADd,UAAU,EAAE;;;;;;;;;;;yCAOV,OAAO,EAAE;0CAKT,QAAQ,EAAE;gBAJX,8KAAA,SAAS,6DAER;gBAGD,iLAAA,UAAU,6DAET;gBAdH,6KAeC;;;gBAfK,uDAAS;;YACb,GAAG,IADC,mDAAS,EACP;gBACJ,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;aACd,EAAC;YAGF,SAAS;gBACP,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC;YAGD,UAAU;gBACR,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC;;;;IAGH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC7D,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QAKnB,SAAS;gCAHd,UAAU,CAAC;gBACV,IAAI,EAAE,WAAW;aAClB,CAAC;;;;;;;;;;;yCAIC,OAAO,EAAE;0CAKT,QAAQ,EAAE;gBAJX,8KAAA,SAAS,6DAER;gBAGD,iLAAA,UAAU,6DAET;gBAXH,6KAYC;;;gBAZK,uDAAS;;YACb,GAAG,IADC,mDAAS,EACK,EAAE,EAAC;YAGrB,SAAS,CAAC,CAAW;gBACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YAGD,UAAU,CAAC,CAAW;gBACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;;;;IAGH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC7D,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QAGnB,SAAS;gCADd,UAAU,EAAE;;;;;;;;;;;yCAOV,OAAO,EAAE;0CAKT,QAAQ,EAAE;gBAJX,8KAAA,SAAS,6DAER;gBAGD,iLAAA,UAAU,6DAET;gBAdH,6KAeC;;;gBAfK,uDAAS;;YACb,GAAG,IADC,mDAAS,EACP;gBACJ,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;aACd,EAAC;YAGF,SAAS;gBACP,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC;YAGD,UAAU;gBACR,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC;;;;IAGH,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpB,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;IAC7E,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QAGnB,SAAS;gCADd,UAAU,EAAE;;;;;;;;;;;yCAOV,OAAO,EAAE;0CAKT,QAAQ,EAAE;gBAJX,8KAAA,SAAS,6DAER;gBAGD,iLAAA,UAAU,6DAET;gBAdH,6KAeC;;;gBAfK,uDAAS;;YACb,GAAG,IADC,mDAAS,EACP;gBACJ,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;aACd,EAAC;YAGF,SAAS;gBACP,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC;YAGD,UAAU;gBACR,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC;;;;QAIG,KAAK;gCADV,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAK;;YACT,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;;;;IAG9B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;IACvE,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QAGnB,SAAS;gCADd,UAAU,EAAE;;;;;;;;;;;yCAOV,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;0CAKnC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAJrC,8KAAA,SAAS,6DAER;gBAGD,iLAAA,UAAU,6DAET;gBAdH,6KAeC;;;gBAfK,uDAAS;;YACb,GAAG,IADC,mDAAS,EACP;gBACJ,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;aACd,EAAC;YAGF,SAAS;gBACP,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC;YAGD,UAAU;gBACR,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC;;;;IAGH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;IACtE,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QAGnB,SAAS;gCADd,UAAU,EAAE;;;;;;;;;;;yCAOV,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;0CAKlC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAJpC,8KAAA,SAAS,6DAER;gBAGD,iLAAA,UAAU,6DAET;gBAdH,6KAeC;;;gBAfK,uDAAS;;YACb,GAAG,IADC,mDAAS,EACP;gBACJ,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;aACd,EAAC;YAGF,SAAS;gBACP,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC;YAGD,UAAU;gBACR,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC;;;;IAGH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;IAC3E,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QAGnB,SAAS;gCADd,UAAU,EAAE;;;;;;;;;;;yCAOV,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;0CAKvC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;gBAJzC,8KAAA,SAAS,6DAER;gBAGD,iLAAA,UAAU,6DAET;gBAdH,6KAeC;;;gBAfK,uDAAS;;YACb,GAAG,IADC,mDAAS,EACP;gBACJ,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;aACd,EAAC;YAGF,SAAS;gBACP,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC;YAGD,UAAU;gBACR,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC;;;;IAGH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;IACtE,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QAGnB,SAAS;gCADd,UAAU,EAAE;;;;;;;;;;;yCAOV,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;0CAKnB,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAJrB,8KAAA,SAAS,6DAER;gBAGD,iLAAA,UAAU,6DAET;gBAdH,6KAeC;;;gBAfK,uDAAS;;YACb,GAAG,IADC,mDAAS,EACP;gBACJ,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;aACd,EAAC;YAGF,SAAS;gBACP,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC;YAGD,UAAU;gBACR,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC;;;;IAGH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAGH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACnD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAEvD,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;IAEzB,SAAS,MAAM;QACb,OAAO,CAAC,GAAsB,EAAE,GAAgC,EAAE,EAAE;YAClE,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACzC,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACf,CAAC,CAAC;IACJ,CAAC;QAGK,SAAS;gCADd,UAAU,EAAE;;;;;;;;;;yCAIV,MAAM,EAAE;gBACT,8KAAA,SAAS,6DAER;gBANH,6KAOC;;;gBAPK,uDAAS;;YACb,KAAK,IADD,mDAAS,EACL,CAAC,EAAC;YAGV,SAAS;gBACP,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;;;;IAGH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACnD,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QAGnB,SAAS;gCADd,UAAU,EAAE;;;;;;;;;;yCAKV,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC3D,8KAAA,SAAS,6DAER;gBAPH,6KAQC;;;gBARK,uDAAS;;YACb,OAAO,IADH,mDAAS,EACH,KAAK,EAAC;YAChB,KAAK,GAAG,CAAC,CAAC;YAGV,SAAS;gBACP,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;;;;IAGH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC"}
|
package/target/lib/metadata.d.ts
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { type Injector } from "./injector.js";
|
|
2
2
|
import type { InjectionToken } from "./provider.js";
|
|
3
3
|
export type LifecycleCallback = (i: Injector) => void;
|
|
4
|
-
export type LifecycleCondition<T
|
|
4
|
+
export type LifecycleCondition<T> = (ctx: {
|
|
5
|
+
injector: Injector;
|
|
6
|
+
instance: T;
|
|
7
|
+
}) => {
|
|
5
8
|
enabled?: boolean;
|
|
6
9
|
};
|
|
7
|
-
export interface LifecycleMethod<T
|
|
10
|
+
export interface LifecycleMethod<T> {
|
|
8
11
|
callback: LifecycleCallback;
|
|
9
12
|
condition?: LifecycleCondition<T>;
|
|
10
13
|
}
|
|
11
|
-
export interface InjectableMetadata {
|
|
12
|
-
onCreated?: LifecycleMethod<
|
|
13
|
-
onInjected?: LifecycleMethod<
|
|
14
|
+
export interface InjectableMetadata<T> {
|
|
15
|
+
onCreated?: LifecycleMethod<T>[];
|
|
16
|
+
onInjected?: LifecycleMethod<T>[];
|
|
14
17
|
}
|
|
15
|
-
export declare function readMetadata<T>(target: InjectionToken<T>): InjectableMetadata | null;
|
|
18
|
+
export declare function readMetadata<T>(target: InjectionToken<T>): InjectableMetadata<T> | null;
|
|
16
19
|
export declare function readInjector<T>(target: T): Injector | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AAiBxD,MAAM,UAAU,YAAY,CAAI,MAAyB;IACvD,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AAiBxD,MAAM,UAAU,YAAY,CAAI,MAAyB;IACvD,MAAM,QAAQ,GAAiC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,MAAS;IACvC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,QAAQ,CAAa,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|