@joist/di 4.0.0-next.50 → 4.0.0-next.52
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/package.json +1 -1
- package/src/lib/context/injector.ts +2 -1
- package/src/lib/inject.ts +3 -3
- package/src/lib/injectable-el.ts +21 -31
- package/src/lib/injectable.test.ts +4 -3
- package/src/lib/injectable.ts +4 -2
- package/src/lib/injector.ts +8 -14
- package/src/lib/lifecycle.test.ts +3 -2
- package/src/lib/lifecycle.ts +0 -2
- package/src/lib/metadata.ts +11 -1
- package/target/lib/context/injector.d.ts +1 -1
- package/target/lib/context/injector.js.map +1 -1
- package/target/lib/inject.js +3 -3
- package/target/lib/inject.js.map +1 -1
- package/target/lib/injectable-el.d.ts +5 -1
- package/target/lib/injectable-el.js +15 -23
- package/target/lib/injectable-el.js.map +1 -1
- package/target/lib/injectable.js +3 -2
- package/target/lib/injectable.js.map +1 -1
- package/target/lib/injectable.test.js +4 -3
- package/target/lib/injectable.test.js.map +1 -1
- package/target/lib/injector.d.ts +1 -1
- package/target/lib/injector.js +7 -6
- package/target/lib/injector.js.map +1 -1
- package/target/lib/lifecycle.js +0 -1
- package/target/lib/lifecycle.js.map +1 -1
- package/target/lib/lifecycle.test.js +3 -2
- package/target/lib/lifecycle.test.js.map +1 -1
- package/target/lib/metadata.d.ts +2 -1
- package/target/lib/metadata.js +8 -0
- package/target/lib/metadata.js.map +1 -1
package/package.json
CHANGED
package/src/lib/inject.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readInjector } from "./metadata.js";
|
|
2
2
|
import type { InjectionToken } from "./provider.js";
|
|
3
3
|
|
|
4
4
|
export type Injected<T> = () => T;
|
|
@@ -7,9 +7,9 @@ export function inject<This extends object, T>(
|
|
|
7
7
|
token: InjectionToken<T>,
|
|
8
8
|
): Injected<T> {
|
|
9
9
|
return function (this: This) {
|
|
10
|
-
const injector =
|
|
10
|
+
const injector = readInjector(this);
|
|
11
11
|
|
|
12
|
-
if (injector ===
|
|
12
|
+
if (injector === null) {
|
|
13
13
|
throw new Error(
|
|
14
14
|
`${this.constructor.name} is either not injectable or a service is being called in the constructor. \n Either add the @injectable() to your class or use the @injected callback method.`,
|
|
15
15
|
);
|
package/src/lib/injectable-el.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
(Symbol as any).metadata ??= Symbol("Symbol.metadata");
|
|
2
|
-
|
|
3
1
|
import { INJECTOR_CTX } from "./context/injector.js";
|
|
4
2
|
import { ContextRequestEvent } from "./context/protocol.js";
|
|
5
|
-
import {
|
|
3
|
+
import { INJECTOR } from "./injector.js";
|
|
4
|
+
import type { Injector } from "./injector.js";
|
|
6
5
|
import { callLifecycle } from "./lifecycle.js";
|
|
7
6
|
import type { InjectableMetadata } from "./metadata.js";
|
|
8
7
|
import type { ConstructableToken } from "./provider.js";
|
|
9
8
|
|
|
10
|
-
export function injectableEl<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
): T {
|
|
9
|
+
export function injectableEl<
|
|
10
|
+
T extends ConstructableToken<HTMLElement & { [INJECTOR]: Injector }>,
|
|
11
|
+
>(Base: T, ctx: ClassDecoratorContext): T {
|
|
14
12
|
const metadata: InjectableMetadata = ctx.metadata;
|
|
15
13
|
|
|
16
14
|
const def = {
|
|
@@ -18,33 +16,29 @@ export function injectableEl<T extends ConstructableToken<HTMLElement>>(
|
|
|
18
16
|
constructor(..._: any[]) {
|
|
19
17
|
super();
|
|
20
18
|
|
|
21
|
-
const injector =
|
|
19
|
+
const injector = this[INJECTOR];
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
this.
|
|
25
|
-
|
|
26
|
-
e.stopPropagation();
|
|
21
|
+
this.addEventListener("context-request", (e) => {
|
|
22
|
+
if (e.target !== this && e.context === INJECTOR_CTX) {
|
|
23
|
+
e.stopPropagation();
|
|
27
24
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
e.callback(injector);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
31
28
|
|
|
32
|
-
|
|
33
|
-
}
|
|
29
|
+
callLifecycle(this, injector, metadata?.onCreated);
|
|
34
30
|
}
|
|
35
31
|
|
|
36
32
|
connectedCallback() {
|
|
37
|
-
const injector =
|
|
33
|
+
const injector = this[INJECTOR];
|
|
38
34
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
);
|
|
35
|
+
this.dispatchEvent(
|
|
36
|
+
new ContextRequestEvent(INJECTOR_CTX, (ctx) => {
|
|
37
|
+
injector.parent = ctx;
|
|
38
|
+
}),
|
|
39
|
+
);
|
|
45
40
|
|
|
46
|
-
|
|
47
|
-
}
|
|
41
|
+
callLifecycle(this, injector, metadata?.onInjected);
|
|
48
42
|
|
|
49
43
|
if (super.connectedCallback) {
|
|
50
44
|
super.connectedCallback();
|
|
@@ -52,11 +46,7 @@ export function injectableEl<T extends ConstructableToken<HTMLElement>>(
|
|
|
52
46
|
}
|
|
53
47
|
|
|
54
48
|
disconnectedCallback() {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (injector) {
|
|
58
|
-
injector.parent = undefined;
|
|
59
|
-
}
|
|
49
|
+
this[INJECTOR].parent = undefined;
|
|
60
50
|
|
|
61
51
|
if (super.disconnectedCallback) {
|
|
62
52
|
super.disconnectedCallback();
|
|
@@ -2,7 +2,8 @@ import { assert } from "chai";
|
|
|
2
2
|
|
|
3
3
|
import { inject } from "./inject.js";
|
|
4
4
|
import { injectable } from "./injectable.js";
|
|
5
|
-
import { Injector
|
|
5
|
+
import { Injector } from "./injector.js";
|
|
6
|
+
import { readInjector } from "./metadata.js";
|
|
6
7
|
import { StaticToken } from "./provider.js";
|
|
7
8
|
|
|
8
9
|
it("should locally override a provider", () => {
|
|
@@ -30,7 +31,7 @@ it("should define an injector for a service instance", () => {
|
|
|
30
31
|
|
|
31
32
|
const instance = new MyService("b");
|
|
32
33
|
|
|
33
|
-
assert.ok(
|
|
34
|
+
assert.ok(readInjector(instance));
|
|
34
35
|
assert.ok(instance.arg === "b");
|
|
35
36
|
});
|
|
36
37
|
|
|
@@ -43,7 +44,7 @@ it("should inject the current service injectable instance", () => {
|
|
|
43
44
|
const app = new Injector();
|
|
44
45
|
const service = app.inject(MyService);
|
|
45
46
|
|
|
46
|
-
assert.equal(service.injector(),
|
|
47
|
+
assert.equal(service.injector(), readInjector(service));
|
|
47
48
|
});
|
|
48
49
|
|
|
49
50
|
it("should not override the name of the original class", () => {
|
package/src/lib/injectable.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(Symbol as any).metadata ??= Symbol("Symbol.metadata");
|
|
2
2
|
|
|
3
3
|
import { injectableEl } from "./injectable-el.js";
|
|
4
|
-
import {
|
|
4
|
+
import { INJECTOR, Injector } from "./injector.js";
|
|
5
5
|
import type {
|
|
6
6
|
ConstructableToken,
|
|
7
7
|
InjectionToken,
|
|
@@ -21,6 +21,8 @@ export function injectable(opts?: InjectableOpts) {
|
|
|
21
21
|
): T {
|
|
22
22
|
const def = {
|
|
23
23
|
[Base.name]: class extends Base {
|
|
24
|
+
[INJECTOR]: Injector;
|
|
25
|
+
|
|
24
26
|
constructor(...args: any[]) {
|
|
25
27
|
super(...args);
|
|
26
28
|
|
|
@@ -38,7 +40,7 @@ export function injectable(opts?: InjectableOpts) {
|
|
|
38
40
|
}
|
|
39
41
|
}
|
|
40
42
|
|
|
41
|
-
|
|
43
|
+
this[INJECTOR] = injector;
|
|
42
44
|
}
|
|
43
45
|
},
|
|
44
46
|
};
|
package/src/lib/injector.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { callLifecycle } from "./lifecycle.js";
|
|
2
|
-
import { readMetadata } from "./metadata.js";
|
|
2
|
+
import { readInjector, readMetadata } from "./metadata.js";
|
|
3
3
|
import {
|
|
4
4
|
type InjectionToken,
|
|
5
5
|
type Provider,
|
|
@@ -8,17 +8,14 @@ import {
|
|
|
8
8
|
StaticToken,
|
|
9
9
|
} from "./provider.js";
|
|
10
10
|
|
|
11
|
-
/**
|
|
12
|
-
* Keeps track of all Injectable services and their Injector
|
|
13
|
-
*/
|
|
14
|
-
export const injectables: WeakMap<object, Injector> = new WeakMap();
|
|
15
|
-
|
|
16
11
|
export interface InjectorOpts {
|
|
17
12
|
name?: string;
|
|
18
13
|
providers?: Iterable<Provider<any>>;
|
|
19
14
|
parent?: Injector;
|
|
20
15
|
}
|
|
21
16
|
|
|
17
|
+
export const INJECTOR: unique symbol = Symbol("JOIST_INJECTOR");
|
|
18
|
+
|
|
22
19
|
/**
|
|
23
20
|
* Injectors create and store instances of services.
|
|
24
21
|
* A service is any constructable class.
|
|
@@ -56,13 +53,10 @@ export class Injector {
|
|
|
56
53
|
const instance = this.#instances.get(token);
|
|
57
54
|
|
|
58
55
|
const metadata = readMetadata<T>(token);
|
|
56
|
+
const injector = readInjector(instance) ?? this;
|
|
59
57
|
|
|
60
58
|
if (metadata) {
|
|
61
|
-
callLifecycle(
|
|
62
|
-
instance,
|
|
63
|
-
injectables.get(instance) ?? this,
|
|
64
|
-
metadata.onInjected,
|
|
65
|
-
);
|
|
59
|
+
callLifecycle(instance, injector, metadata.onInjected);
|
|
66
60
|
}
|
|
67
61
|
|
|
68
62
|
return instance;
|
|
@@ -114,7 +108,7 @@ export class Injector {
|
|
|
114
108
|
* Only values that are objects are able to have associated injectors
|
|
115
109
|
*/
|
|
116
110
|
if (typeof instance === "object" && instance !== null) {
|
|
117
|
-
const injector =
|
|
111
|
+
const injector = readInjector(instance) ?? this;
|
|
118
112
|
|
|
119
113
|
if (injector && injector !== this) {
|
|
120
114
|
/**
|
|
@@ -134,8 +128,8 @@ export class Injector {
|
|
|
134
128
|
const metadata = readMetadata<T>(token);
|
|
135
129
|
|
|
136
130
|
if (metadata) {
|
|
137
|
-
callLifecycle(instance, injector
|
|
138
|
-
callLifecycle(instance, injector
|
|
131
|
+
callLifecycle(instance, injector, metadata.onCreated);
|
|
132
|
+
callLifecycle(instance, injector, metadata.onInjected);
|
|
139
133
|
}
|
|
140
134
|
}
|
|
141
135
|
|
|
@@ -2,8 +2,9 @@ import { assert } from "chai";
|
|
|
2
2
|
|
|
3
3
|
import { inject } from "./inject.js";
|
|
4
4
|
import { injectable } from "./injectable.js";
|
|
5
|
-
import { Injector
|
|
5
|
+
import { Injector } from "./injector.js";
|
|
6
6
|
import { created, injected } from "./lifecycle.js";
|
|
7
|
+
import { readInjector } from "./metadata.js";
|
|
7
8
|
|
|
8
9
|
it("should call onInit and onInject when a service is first created", () => {
|
|
9
10
|
const i = new Injector();
|
|
@@ -55,7 +56,7 @@ it("should pass the injector to all lifecycle callbacks", () => {
|
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
const service = i.inject(MyService);
|
|
58
|
-
const injector =
|
|
59
|
+
const injector = readInjector(service);
|
|
59
60
|
|
|
60
61
|
assert.equal(service.res[0], injector);
|
|
61
62
|
assert.equal(service.res[0].parent, i);
|
package/src/lib/lifecycle.ts
CHANGED
package/src/lib/metadata.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
(Symbol as any).metadata ??= Symbol("Symbol.metadata");
|
|
2
|
+
|
|
3
|
+
import { INJECTOR, type Injector } from "./injector.js";
|
|
2
4
|
import type { InjectionToken } from "./provider.js";
|
|
3
5
|
|
|
4
6
|
export type LifecycleCallback = (i: Injector) => void;
|
|
@@ -15,3 +17,11 @@ export function readMetadata<T>(
|
|
|
15
17
|
|
|
16
18
|
return metadata;
|
|
17
19
|
}
|
|
20
|
+
|
|
21
|
+
export function readInjector<T extends object>(target: T): Injector | null {
|
|
22
|
+
if (INJECTOR in target) {
|
|
23
|
+
return target[INJECTOR] as Injector;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../../src/lib/context/injector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../../src/lib/context/injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,aAAa,EAAE,MAAM,eAAe,CAAC;AAI5D,MAAM,CAAC,MAAM,YAAY,GACvB,aAAa,CAAC,UAAU,CAAC,CAAC"}
|
package/target/lib/inject.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readInjector } from "./metadata.js";
|
|
2
2
|
export function inject(token) {
|
|
3
3
|
return function () {
|
|
4
|
-
const injector =
|
|
5
|
-
if (injector ===
|
|
4
|
+
const injector = readInjector(this);
|
|
5
|
+
if (injector === null) {
|
|
6
6
|
throw new Error(`${this.constructor.name} is either not injectable or a service is being called in the constructor. \n Either add the @injectable() to your class or use the @injected callback method.`);
|
|
7
7
|
}
|
|
8
8
|
return injector.inject(token);
|
package/target/lib/inject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK7C,MAAM,UAAU,MAAM,CACpB,KAAwB;IAExB,OAAO;QACL,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,gKAAgK,CACzL,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
+
import { INJECTOR } from "./injector.js";
|
|
2
|
+
import type { Injector } from "./injector.js";
|
|
1
3
|
import type { ConstructableToken } from "./provider.js";
|
|
2
|
-
export declare function injectableEl<T extends ConstructableToken<HTMLElement
|
|
4
|
+
export declare function injectableEl<T extends ConstructableToken<HTMLElement & {
|
|
5
|
+
[INJECTOR]: Injector;
|
|
6
|
+
}>>(Base: T, ctx: ClassDecoratorContext): T;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
Symbol.metadata ??= Symbol("Symbol.metadata");
|
|
2
1
|
import { INJECTOR_CTX } from "./context/injector.js";
|
|
3
2
|
import { ContextRequestEvent } from "./context/protocol.js";
|
|
4
|
-
import {
|
|
3
|
+
import { INJECTOR } from "./injector.js";
|
|
5
4
|
import { callLifecycle } from "./lifecycle.js";
|
|
6
5
|
export function injectableEl(Base, ctx) {
|
|
7
6
|
const metadata = ctx.metadata;
|
|
@@ -9,34 +8,27 @@ export function injectableEl(Base, ctx) {
|
|
|
9
8
|
[Base.name]: class extends Base {
|
|
10
9
|
constructor(..._) {
|
|
11
10
|
super();
|
|
12
|
-
const injector =
|
|
13
|
-
|
|
14
|
-
this.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
callLifecycle(this, injector, metadata?.onCreated);
|
|
21
|
-
}
|
|
11
|
+
const injector = this[INJECTOR];
|
|
12
|
+
this.addEventListener("context-request", (e) => {
|
|
13
|
+
if (e.target !== this && e.context === INJECTOR_CTX) {
|
|
14
|
+
e.stopPropagation();
|
|
15
|
+
e.callback(injector);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
callLifecycle(this, injector, metadata?.onCreated);
|
|
22
19
|
}
|
|
23
20
|
connectedCallback() {
|
|
24
|
-
const injector =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
callLifecycle(this, injector, metadata?.onInjected);
|
|
30
|
-
}
|
|
21
|
+
const injector = this[INJECTOR];
|
|
22
|
+
this.dispatchEvent(new ContextRequestEvent(INJECTOR_CTX, (ctx) => {
|
|
23
|
+
injector.parent = ctx;
|
|
24
|
+
}));
|
|
25
|
+
callLifecycle(this, injector, metadata?.onInjected);
|
|
31
26
|
if (super.connectedCallback) {
|
|
32
27
|
super.connectedCallback();
|
|
33
28
|
}
|
|
34
29
|
}
|
|
35
30
|
disconnectedCallback() {
|
|
36
|
-
|
|
37
|
-
if (injector) {
|
|
38
|
-
injector.parent = undefined;
|
|
39
|
-
}
|
|
31
|
+
this[INJECTOR].parent = undefined;
|
|
40
32
|
if (super.disconnectedCallback) {
|
|
41
33
|
super.disconnectedCallback();
|
|
42
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable-el.js","sourceRoot":"","sources":["../../src/lib/injectable-el.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"injectable-el.js","sourceRoot":"","sources":["../../src/lib/injectable-el.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAI/C,MAAM,UAAU,YAAY,CAE1B,IAAO,EAAE,GAA0B;IACnC,MAAM,QAAQ,GAAuB,GAAG,CAAC,QAAQ,CAAC;IAElD,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,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEhC,IAAI,CAAC,aAAa,CAChB,IAAI,mBAAmB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC5C,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,CAAC,CAAC,CACH,CAAC;gBAEF,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAEpD,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,oBAAoB;gBAClB,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;gBAElC,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;oBAC/B,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBAC/B,CAAC;YACH,CAAC;SACF;KACF,CAAC;IAEF,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
package/target/lib/injectable.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
Symbol.metadata ??= Symbol("Symbol.metadata");
|
|
2
2
|
import { injectableEl } from "./injectable-el.js";
|
|
3
|
-
import {
|
|
3
|
+
import { INJECTOR, Injector } from "./injector.js";
|
|
4
4
|
export function injectable(opts) {
|
|
5
5
|
return function injectableDecorator(Base, ctx) {
|
|
6
6
|
const def = {
|
|
7
7
|
[Base.name]: class extends Base {
|
|
8
|
+
[INJECTOR];
|
|
8
9
|
constructor(...args) {
|
|
9
10
|
super(...args);
|
|
10
11
|
const injector = new Injector(opts);
|
|
@@ -18,7 +19,7 @@ export function injectable(opts) {
|
|
|
18
19
|
});
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
+
this[INJECTOR] = injector;
|
|
22
23
|
}
|
|
23
24
|
},
|
|
24
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAanD,MAAM,UAAU,UAAU,CAAC,IAAqB;IAC9C,OAAO,SAAS,mBAAmB,CACjC,IAAO,EACP,GAA0B;QAE1B,MAAM,GAAG,GAAG;YACV,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAM,SAAQ,IAAI;gBAC7B,CAAC,QAAQ,CAAC,CAAW;gBAErB,YAAY,GAAG,IAAW;oBACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;oBAEf,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAEpC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE;wBAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ;qBACxB,CAAC,CAAC;oBAEH,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC;wBACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;4BACvC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE;gCAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;6BACpB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;gBAC5B,CAAC;aACF;SACF,CAAC;QAGF,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;YAChC,IACE,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CACjC,WAAW,CAAC,SAAS,EACrB,IAAI,CAAC,SAAS,CACf,EACD,CAAC;gBACD,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -2,7 +2,8 @@ import { __esDecorate, __runInitializers } from "tslib";
|
|
|
2
2
|
import { assert } from "chai";
|
|
3
3
|
import { inject } from "./inject.js";
|
|
4
4
|
import { injectable } from "./injectable.js";
|
|
5
|
-
import { Injector
|
|
5
|
+
import { Injector } from "./injector.js";
|
|
6
|
+
import { readInjector } from "./metadata.js";
|
|
6
7
|
import { StaticToken } from "./provider.js";
|
|
7
8
|
it("should locally override a provider", () => {
|
|
8
9
|
class Foo {
|
|
@@ -55,7 +56,7 @@ it("should define an injector for a service instance", () => {
|
|
|
55
56
|
return MyService = _classThis;
|
|
56
57
|
})();
|
|
57
58
|
const instance = new MyService("b");
|
|
58
|
-
assert.ok(
|
|
59
|
+
assert.ok(readInjector(instance));
|
|
59
60
|
assert.ok(instance.arg === "b");
|
|
60
61
|
});
|
|
61
62
|
it("should inject the current service injectable instance", () => {
|
|
@@ -79,7 +80,7 @@ it("should inject the current service injectable instance", () => {
|
|
|
79
80
|
})();
|
|
80
81
|
const app = new Injector();
|
|
81
82
|
const service = app.inject(MyService);
|
|
82
|
-
assert.equal(service.injector(),
|
|
83
|
+
assert.equal(service.injector(), readInjector(service));
|
|
83
84
|
});
|
|
84
85
|
it("should not override the name of the original class", () => {
|
|
85
86
|
let MyService = (() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.test.js","sourceRoot":"","sources":["../../src/lib/injectable.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,
|
|
1
|
+
{"version":3,"file":"injectable.test.js","sourceRoot":"","sources":["../../src/lib/injectable.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,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAC5C,MAAM,GAAG;KAAG;IAEZ,MAAM,GAAI,SAAQ,GAAG;KAAG;QAKlB,SAAS;gCAHd,UAAU,CAAC;gBACV,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;aACjC,CAAC;;;;;;;;gBACF,6KAEC;;;gBAFK,uDAAS;;YACb,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;;;;IAGpB,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;IAE3B,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAEpD,SAAS;gCADd,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAS;;YACM,GAAG;YAAtB,YAAmB,GAAG,GAAG,GAAG;gBAAT,QAAG,GAAH,GAAG,CAAM;YAAG,CAAC;;;;IAGlC,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;IAEpC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAEzD,SAAS;gCADd,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAS;;YACb,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;;;;IAG9B,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEtC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAEtD,SAAS;gCADd,UAAU,EAAE;;;;;;;;gBACb,6KAAkB;;;gBAAZ,uDAAS;;;;;IAEf,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;IACpD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;QAKpC,SAAS;gCAHd,UAAU,CAAC;gBACV,aAAa,EAAE,CAAC,KAAK,CAAC;aACvB,CAAC;;;;;;;;gBACF,6KAEC;;;gBAFK,uDAAS;;YACb,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;;;;IAGxB,MAAM,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;IAEhC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC"}
|
package/target/lib/injector.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type InjectionToken, type Provider, type ProviderDef } from "./provider.js";
|
|
2
|
-
export declare const injectables: WeakMap<object, Injector>;
|
|
3
2
|
export interface InjectorOpts {
|
|
4
3
|
name?: string;
|
|
5
4
|
providers?: Iterable<Provider<any>>;
|
|
6
5
|
parent?: Injector;
|
|
7
6
|
}
|
|
7
|
+
export declare const INJECTOR: unique symbol;
|
|
8
8
|
export declare class Injector {
|
|
9
9
|
#private;
|
|
10
10
|
name?: string;
|
package/target/lib/injector.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { callLifecycle } from "./lifecycle.js";
|
|
2
|
-
import { readMetadata } from "./metadata.js";
|
|
2
|
+
import { readInjector, readMetadata } from "./metadata.js";
|
|
3
3
|
import { StaticToken, } from "./provider.js";
|
|
4
|
-
export const
|
|
4
|
+
export const INJECTOR = Symbol("JOIST_INJECTOR");
|
|
5
5
|
export class Injector {
|
|
6
6
|
#instances = new WeakMap();
|
|
7
7
|
name;
|
|
@@ -15,8 +15,9 @@ export class Injector {
|
|
|
15
15
|
if (this.#instances.has(token)) {
|
|
16
16
|
const instance = this.#instances.get(token);
|
|
17
17
|
const metadata = readMetadata(token);
|
|
18
|
+
const injector = readInjector(instance) ?? this;
|
|
18
19
|
if (metadata) {
|
|
19
|
-
callLifecycle(instance,
|
|
20
|
+
callLifecycle(instance, injector, metadata.onInjected);
|
|
20
21
|
}
|
|
21
22
|
return instance;
|
|
22
23
|
}
|
|
@@ -48,14 +49,14 @@ export class Injector {
|
|
|
48
49
|
const instance = factory(this);
|
|
49
50
|
this.#instances.set(token, instance);
|
|
50
51
|
if (typeof instance === "object" && instance !== null) {
|
|
51
|
-
const injector =
|
|
52
|
+
const injector = readInjector(instance) ?? this;
|
|
52
53
|
if (injector && injector !== this) {
|
|
53
54
|
injector.parent = this;
|
|
54
55
|
}
|
|
55
56
|
const metadata = readMetadata(token);
|
|
56
57
|
if (metadata) {
|
|
57
|
-
callLifecycle(instance, injector
|
|
58
|
-
callLifecycle(instance, injector
|
|
58
|
+
callLifecycle(instance, injector, metadata.onCreated);
|
|
59
|
+
callLifecycle(instance, injector, metadata.onInjected);
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
62
|
return instance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/lib/injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/lib/injector.ts"],"names":[],"mappings":"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"}
|
package/target/lib/lifecycle.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/lib/lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/lib/lifecycle.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,QAAQ;IACtB,OAAO,SAAS,iBAAiB,CAC/B,GAAsB,EACtB,GAAgC;QAEhC,MAAM,QAAQ,GAAuB,GAAG,CAAC,QAAQ,CAAC;QAClD,QAAQ,CAAC,UAAU,KAAK,EAAE,CAAC;QAC3B,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,SAAS,iBAAiB,CAC/B,GAAsB,EACtB,GAAgC;QAEhC,MAAM,QAAQ,GAAuB,GAAG,CAAC,QAAQ,CAAC;QAClD,QAAQ,CAAC,SAAS,KAAK,EAAE,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,CAAW,EACX,OAA6B;IAE7B,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -2,8 +2,9 @@ import { __esDecorate, __runInitializers } from "tslib";
|
|
|
2
2
|
import { assert } from "chai";
|
|
3
3
|
import { inject } from "./inject.js";
|
|
4
4
|
import { injectable } from "./injectable.js";
|
|
5
|
-
import { Injector
|
|
5
|
+
import { Injector } from "./injector.js";
|
|
6
6
|
import { created, injected } from "./lifecycle.js";
|
|
7
|
+
import { readInjector } from "./metadata.js";
|
|
7
8
|
it("should call onInit and onInject when a service is first created", () => {
|
|
8
9
|
const i = new Injector();
|
|
9
10
|
let MyService = (() => {
|
|
@@ -82,7 +83,7 @@ it("should pass the injector to all lifecycle callbacks", () => {
|
|
|
82
83
|
return MyService = _classThis;
|
|
83
84
|
})();
|
|
84
85
|
const service = i.inject(MyService);
|
|
85
|
-
const injector =
|
|
86
|
+
const injector = readInjector(service);
|
|
86
87
|
assert.equal(service.res[0], injector);
|
|
87
88
|
assert.equal(service.res[0].parent, i);
|
|
88
89
|
assert.equal(service.res[1], injector);
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"lifecycle.test.js","sourceRoot":"","sources":["../../src/lib/lifecycle.test.ts"],"names":[],"mappings":"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"}
|
package/target/lib/metadata.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Injector } from "./injector.js";
|
|
2
2
|
import type { InjectionToken } from "./provider.js";
|
|
3
3
|
export type LifecycleCallback = (i: Injector) => void;
|
|
4
4
|
export interface InjectableMetadata {
|
|
@@ -6,3 +6,4 @@ export interface InjectableMetadata {
|
|
|
6
6
|
onInjected?: LifecycleCallback[];
|
|
7
7
|
}
|
|
8
8
|
export declare function readMetadata<T>(target: InjectionToken<T>): InjectableMetadata | null;
|
|
9
|
+
export declare function readInjector<T extends object>(target: T): Injector | null;
|
package/target/lib/metadata.js
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
Symbol.metadata ??= Symbol("Symbol.metadata");
|
|
2
|
+
import { INJECTOR } from "./injector.js";
|
|
1
3
|
export function readMetadata(target) {
|
|
2
4
|
const metadata = target[Symbol.metadata];
|
|
3
5
|
return metadata;
|
|
4
6
|
}
|
|
7
|
+
export function readInjector(target) {
|
|
8
|
+
if (INJECTOR in target) {
|
|
9
|
+
return target[INJECTOR];
|
|
10
|
+
}
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
5
13
|
//# sourceMappingURL=metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"
|
|
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;AAUxD,MAAM,UAAU,YAAY,CAC1B,MAAyB;IAEzB,MAAM,QAAQ,GAA8B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEpE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,YAAY,CAAmB,MAAS;IACtD,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,QAAQ,CAAa,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|