@joist/di 4.0.1 → 4.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/package.json +1 -1
- package/src/lib/dom/dom-injector.test.ts +62 -0
- package/src/lib/{dom-injector.ts → dom/dom-injector.ts} +6 -3
- package/src/lib/{injectable-el.test.ts → dom/injectable-el.test.ts} +2 -2
- package/src/lib/{injectable-el.ts → dom/injectable-el.ts} +9 -11
- package/src/lib/inject.test.ts +38 -1
- package/src/lib/inject.ts +18 -5
- package/src/lib/injectable.ts +5 -7
- package/src/lib/injector.test.ts +21 -0
- package/src/lib/injector.ts +28 -13
- package/src/lib.ts +2 -2
- package/target/lib/{dom-injector.d.ts → dom/dom-injector.d.ts} +1 -1
- package/target/lib/{dom-injector.js → dom/dom-injector.js} +3 -3
- package/target/lib/dom/dom-injector.js.map +1 -0
- package/{src/lib/dom-injector.test.ts → target/lib/dom/dom-injector.test.js} +17 -40
- package/target/lib/dom/dom-injector.test.js.map +1 -0
- package/target/lib/{injectable-el.d.ts → dom/injectable-el.d.ts} +3 -3
- package/target/lib/{injectable-el.js → dom/injectable-el.js} +6 -7
- package/target/lib/dom/injectable-el.js.map +1 -0
- package/target/lib/{injectable-el.test.js → dom/injectable-el.test.js} +2 -2
- package/target/lib/dom/injectable-el.test.js.map +1 -0
- package/target/lib/inject.d.ts +2 -1
- package/target/lib/inject.js +7 -1
- package/target/lib/inject.js.map +1 -1
- package/target/lib/inject.test.js +59 -1
- package/target/lib/inject.test.js.map +1 -1
- package/target/lib/injectable.js +5 -6
- package/target/lib/injectable.js.map +1 -1
- package/target/lib/injector.d.ts +7 -2
- package/target/lib/injector.js +22 -10
- package/target/lib/injector.js.map +1 -1
- package/target/lib/injector.test.js +17 -0
- package/target/lib/injector.test.js.map +1 -1
- package/target/lib.d.ts +2 -2
- package/target/lib.js +2 -2
- package/target/lib.js.map +1 -1
- package/target/lib/dom-injector.js.map +0 -1
- package/target/lib/dom-injector.test.js +0 -43
- package/target/lib/dom-injector.test.js.map +0 -1
- package/target/lib/injectable-el.js.map +0 -1
- package/target/lib/injectable-el.test.js.map +0 -1
- /package/target/lib/{dom-injector.test.d.ts → dom/dom-injector.test.d.ts} +0 -0
- /package/target/lib/{injectable-el.test.d.ts → dom/injectable-el.test.d.ts} +0 -0
package/package.json
CHANGED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { assert } from "chai";
|
|
2
|
+
|
|
3
|
+
import { INJECTOR_CTX } from "../context/injector.js";
|
|
4
|
+
import {
|
|
5
|
+
ContextRequestEvent,
|
|
6
|
+
type UnknownContext,
|
|
7
|
+
} from "../context/protocol.js";
|
|
8
|
+
import { Injector } from "../injector.js";
|
|
9
|
+
import { DOMInjector } from "./dom-injector.js";
|
|
10
|
+
|
|
11
|
+
it("should respond to elements looking for an injector", () => {
|
|
12
|
+
const injector = new DOMInjector();
|
|
13
|
+
injector.attach(document.body);
|
|
14
|
+
|
|
15
|
+
const host = document.createElement("div");
|
|
16
|
+
document.body.append(host);
|
|
17
|
+
|
|
18
|
+
let parent: Injector | null = null;
|
|
19
|
+
|
|
20
|
+
host.dispatchEvent(
|
|
21
|
+
new ContextRequestEvent(INJECTOR_CTX, (i) => {
|
|
22
|
+
parent = i;
|
|
23
|
+
}),
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
assert.equal(parent, injector);
|
|
27
|
+
|
|
28
|
+
injector.detach();
|
|
29
|
+
host.remove();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("should send request looking for other injector contexts", () => {
|
|
33
|
+
const parent = new Injector();
|
|
34
|
+
const injector = new DOMInjector();
|
|
35
|
+
|
|
36
|
+
const cb = (e: ContextRequestEvent<UnknownContext>) => {
|
|
37
|
+
if (e.context === INJECTOR_CTX) {
|
|
38
|
+
e.callback(parent);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
document.body.addEventListener("context-request", cb);
|
|
43
|
+
|
|
44
|
+
injector.attach(document.body);
|
|
45
|
+
|
|
46
|
+
assert.equal(injector.parent, parent);
|
|
47
|
+
|
|
48
|
+
injector.detach();
|
|
49
|
+
document.body.removeEventListener("context-request", cb);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("should throw an error if attempting to attach an already attached DOMInjector", () => {
|
|
53
|
+
const injector = new DOMInjector();
|
|
54
|
+
|
|
55
|
+
const el = document.createElement("div");
|
|
56
|
+
|
|
57
|
+
injector.attach(el);
|
|
58
|
+
|
|
59
|
+
assert.throw(() => {
|
|
60
|
+
injector.attach(el);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { INJECTOR_CTX } from "
|
|
1
|
+
import { INJECTOR_CTX } from "../context/injector.js";
|
|
2
2
|
import {
|
|
3
3
|
ContextRequestEvent,
|
|
4
4
|
type UnknownContext,
|
|
5
|
-
} from "
|
|
6
|
-
import { Injector } from "
|
|
5
|
+
} from "../context/protocol.js";
|
|
6
|
+
import { Injector } from "../injector.js";
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Special Injector that allows you to register an injector with a particular DOM element.
|
|
10
|
+
*/
|
|
8
11
|
export class DOMInjector extends Injector {
|
|
9
12
|
#element: HTMLElement | null = null;
|
|
10
13
|
#controller: AbortController | null = null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { assert } from "chai";
|
|
2
2
|
|
|
3
|
-
import { inject } from "
|
|
4
|
-
import { injectable } from "
|
|
3
|
+
import { inject } from "../inject.js";
|
|
4
|
+
import { injectable } from "../injectable.js";
|
|
5
5
|
|
|
6
6
|
it("should allow services to be injected into custom element", () => {
|
|
7
7
|
class Foo {}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { INJECTOR_CTX } from "
|
|
2
|
-
import { ContextRequestEvent } from "
|
|
3
|
-
import { INJECTOR } from "
|
|
4
|
-
import type { Injector } from "
|
|
5
|
-
import { callLifecycle } from "
|
|
6
|
-
import type { InjectableMetadata } from "
|
|
7
|
-
import type { ConstructableToken } from "
|
|
1
|
+
import { INJECTOR_CTX } from "../context/injector.js";
|
|
2
|
+
import { ContextRequestEvent } from "../context/protocol.js";
|
|
3
|
+
import { INJECTOR } from "../injector.js";
|
|
4
|
+
import type { Injector } from "../injector.js";
|
|
5
|
+
import { callLifecycle } from "../lifecycle.js";
|
|
6
|
+
import type { InjectableMetadata } from "../metadata.js";
|
|
7
|
+
import type { ConstructableToken } from "../provider.js";
|
|
8
8
|
|
|
9
9
|
export function injectableEl<
|
|
10
10
|
T extends ConstructableToken<HTMLElement & { [INJECTOR]: Injector }>,
|
|
@@ -30,15 +30,13 @@ export function injectableEl<
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
connectedCallback() {
|
|
33
|
-
const injector = this[INJECTOR];
|
|
34
|
-
|
|
35
33
|
this.dispatchEvent(
|
|
36
34
|
new ContextRequestEvent(INJECTOR_CTX, (ctx) => {
|
|
37
|
-
|
|
35
|
+
this[INJECTOR].parent = ctx;
|
|
38
36
|
}),
|
|
39
37
|
);
|
|
40
38
|
|
|
41
|
-
callLifecycle(this,
|
|
39
|
+
callLifecycle(this, this[INJECTOR], metadata?.onInjected);
|
|
42
40
|
|
|
43
41
|
if (super.connectedCallback) {
|
|
44
42
|
super.connectedCallback();
|
package/src/lib/inject.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { assert } from "chai";
|
|
2
2
|
|
|
3
|
-
import { inject } from "./inject.js";
|
|
3
|
+
import { inject, injectAll } from "./inject.js";
|
|
4
4
|
import { injectable } from "./injectable.js";
|
|
5
5
|
import { Injector } from "./injector.js";
|
|
6
6
|
import { StaticToken } from "./provider.js";
|
|
@@ -72,3 +72,40 @@ it("should inject a static token", () => {
|
|
|
72
72
|
|
|
73
73
|
assert.strictEqual(new HelloWorld().hello(), "Hello World");
|
|
74
74
|
});
|
|
75
|
+
|
|
76
|
+
it("should use the calling injector as parent", () => {
|
|
77
|
+
class FooService {
|
|
78
|
+
value = "1";
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@injectable()
|
|
82
|
+
class BarService {
|
|
83
|
+
foo = inject(FooService);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const parent = new Injector({
|
|
87
|
+
providers: [
|
|
88
|
+
[
|
|
89
|
+
FooService,
|
|
90
|
+
{
|
|
91
|
+
use: class extends FooService {
|
|
92
|
+
value = "100";
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
],
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
assert.strictEqual(parent.inject(BarService).foo().value, "100");
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it("should all you to inject all", () => {
|
|
103
|
+
const TOKEN = new StaticToken("test", () => "Hello World");
|
|
104
|
+
|
|
105
|
+
@injectable()
|
|
106
|
+
class HelloWorld {
|
|
107
|
+
hello = injectAll(TOKEN);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
assert.deepEqual(new HelloWorld().hello(), ["Hello World"]);
|
|
111
|
+
});
|
package/src/lib/inject.ts
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
|
+
import type { Injector } from "./injector.js";
|
|
1
2
|
import { readInjector } from "./metadata.js";
|
|
2
3
|
import type { InjectionToken } from "./provider.js";
|
|
3
4
|
|
|
4
5
|
export type Injected<T> = () => T;
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Injects a service into an `injectable` class.
|
|
9
|
+
*/
|
|
10
|
+
export function inject<T>(token: InjectionToken<T>): Injected<T> {
|
|
11
|
+
return internalInject((i) => i.inject(token));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Finds and injects ALL instances of a service from the current points up.
|
|
16
|
+
*/
|
|
17
|
+
export function injectAll<T>(token: InjectionToken<T>): Injected<T[]> {
|
|
18
|
+
return internalInject((i) => i.injectAll(token));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function internalInject<T extends object, R>(cb: (i: Injector) => R) {
|
|
22
|
+
return function (this: T) {
|
|
10
23
|
const injector = readInjector(this);
|
|
11
24
|
|
|
12
25
|
if (injector === null) {
|
|
@@ -15,6 +28,6 @@ export function inject<This extends object, T>(
|
|
|
15
28
|
);
|
|
16
29
|
}
|
|
17
30
|
|
|
18
|
-
return injector
|
|
31
|
+
return cb(injector);
|
|
19
32
|
};
|
|
20
33
|
}
|
package/src/lib/injectable.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { injectableEl } from "./injectable-el.js";
|
|
1
|
+
import { injectableEl } from "./dom/injectable-el.js";
|
|
2
2
|
import { INJECTOR, Injector } from "./injector.js";
|
|
3
3
|
import type {
|
|
4
4
|
ConstructableToken,
|
|
@@ -24,21 +24,19 @@ export function injectable(opts?: InjectableOpts) {
|
|
|
24
24
|
constructor(...args: any[]) {
|
|
25
25
|
super(...args);
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
this[INJECTOR] = new Injector(opts);
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
factory: () =>
|
|
29
|
+
this[INJECTOR].providers.set(Injector, {
|
|
30
|
+
factory: () => this[INJECTOR],
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
if (opts?.provideSelfAs) {
|
|
34
34
|
for (const token of opts.provideSelfAs) {
|
|
35
|
-
|
|
35
|
+
this[INJECTOR].providers.set(token, {
|
|
36
36
|
factory: () => this,
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
this[INJECTOR] = injector;
|
|
42
40
|
}
|
|
43
41
|
},
|
|
44
42
|
};
|
package/src/lib/injector.test.ts
CHANGED
|
@@ -198,3 +198,24 @@ it("should allow static token to be overridden", () => {
|
|
|
198
198
|
|
|
199
199
|
assert.equal(res, "Hello World");
|
|
200
200
|
});
|
|
201
|
+
|
|
202
|
+
it("should allow you to get ALL available instances in a particular injector chain", () => {
|
|
203
|
+
const TOKEN = new StaticToken<string>("TOKEN");
|
|
204
|
+
|
|
205
|
+
const injector = new Injector({
|
|
206
|
+
providers: [[TOKEN, { factory: () => "first" }]],
|
|
207
|
+
parent: new Injector({
|
|
208
|
+
providers: [[TOKEN, { factory: () => "second" }]],
|
|
209
|
+
parent: new Injector({
|
|
210
|
+
providers: [[TOKEN, { factory: () => "third" }]],
|
|
211
|
+
parent: new Injector({
|
|
212
|
+
providers: [[TOKEN, { factory: () => "fourth" }]],
|
|
213
|
+
}),
|
|
214
|
+
}),
|
|
215
|
+
}),
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
const res = injector.injectAll(TOKEN);
|
|
219
|
+
|
|
220
|
+
assert.deepEqual(res, ["first", "second", "third", "fourth"]);
|
|
221
|
+
});
|
package/src/lib/injector.ts
CHANGED
|
@@ -16,6 +16,8 @@ export interface InjectorOpts {
|
|
|
16
16
|
|
|
17
17
|
export const INJECTOR: unique symbol = Symbol("JOIST_INJECTOR");
|
|
18
18
|
|
|
19
|
+
export class ProviderMap extends Map<InjectionToken<any>, ProviderDef<any>> {}
|
|
20
|
+
|
|
19
21
|
/**
|
|
20
22
|
* Injectors create and store instances of services.
|
|
21
23
|
* A service is any constructable class.
|
|
@@ -25,11 +27,11 @@ export const INJECTOR: unique symbol = Symbol("JOIST_INJECTOR");
|
|
|
25
27
|
* 2. Do I have a local provider definition for the token?
|
|
26
28
|
* 3. Do I have a parent? Check parent for 1 and 2
|
|
27
29
|
* 5. All clear, go ahead and construct and cache the requested service
|
|
28
|
-
*
|
|
30
|
+
* ```
|
|
29
31
|
* RootInjector |--> InjectorA |--> InjectorB
|
|
30
32
|
* |--> InjectorC
|
|
31
33
|
* |--> InjectorD |--> InjectorE
|
|
32
|
-
*
|
|
34
|
+
* ```
|
|
33
35
|
* in the above tree, if InjectorE requests a service, it will navigate up to the RootInjector and cache.
|
|
34
36
|
* If Inject B then requests the same token, it will recieve the same cached instance from RootInjector.
|
|
35
37
|
*/
|
|
@@ -39,24 +41,37 @@ export class Injector {
|
|
|
39
41
|
|
|
40
42
|
name?: string;
|
|
41
43
|
parent?: Injector;
|
|
42
|
-
providers:
|
|
44
|
+
providers: ProviderMap;
|
|
43
45
|
|
|
44
46
|
constructor(opts?: InjectorOpts) {
|
|
45
47
|
this.parent = opts?.parent;
|
|
46
|
-
this.providers = new
|
|
48
|
+
this.providers = new ProviderMap(opts?.providers);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
injectAll<T>(token: InjectionToken<T>, collection: T[] = []): T[] {
|
|
52
|
+
const result: T[] = [
|
|
53
|
+
...collection,
|
|
54
|
+
this.inject<T>(token, { skipParent: true }),
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
if (this.parent) {
|
|
58
|
+
return this.parent.injectAll<T>(token, result);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return result;
|
|
47
62
|
}
|
|
48
63
|
|
|
49
64
|
// resolves and retuns and instance of the requested service
|
|
50
|
-
inject<T>(token: InjectionToken<T
|
|
65
|
+
inject<T>(token: InjectionToken<T>, opts?: { skipParent: boolean }): T {
|
|
51
66
|
// check for a local instance
|
|
52
67
|
if (this.#instances.has(token)) {
|
|
53
68
|
const instance = this.#instances.get(token);
|
|
54
69
|
|
|
55
70
|
const metadata = readMetadata<T>(token);
|
|
56
|
-
const injector = readInjector(instance)
|
|
71
|
+
const injector = readInjector(instance);
|
|
57
72
|
|
|
58
73
|
if (metadata) {
|
|
59
|
-
callLifecycle(instance, injector, metadata.onInjected);
|
|
74
|
+
callLifecycle(instance, injector ?? this, metadata.onInjected);
|
|
60
75
|
}
|
|
61
76
|
|
|
62
77
|
return instance;
|
|
@@ -80,7 +95,7 @@ export class Injector {
|
|
|
80
95
|
}
|
|
81
96
|
|
|
82
97
|
// check for a parent and attempt to get there
|
|
83
|
-
if (this.parent) {
|
|
98
|
+
if (this.parent && !opts?.skipParent) {
|
|
84
99
|
return this.parent.inject(token);
|
|
85
100
|
}
|
|
86
101
|
|
|
@@ -107,10 +122,10 @@ export class Injector {
|
|
|
107
122
|
/**
|
|
108
123
|
* Only values that are objects are able to have associated injectors
|
|
109
124
|
*/
|
|
110
|
-
|
|
111
|
-
const injector = readInjector(instance) ?? this;
|
|
125
|
+
const injector = readInjector(instance);
|
|
112
126
|
|
|
113
|
-
|
|
127
|
+
if (injector) {
|
|
128
|
+
if (injector !== this) {
|
|
114
129
|
/**
|
|
115
130
|
* set the this injector instance as a parent.
|
|
116
131
|
* This should ONLY happen in the injector is not self. This would cause an infinite loop.
|
|
@@ -128,8 +143,8 @@ export class Injector {
|
|
|
128
143
|
const metadata = readMetadata<T>(token);
|
|
129
144
|
|
|
130
145
|
if (metadata) {
|
|
131
|
-
callLifecycle(instance, injector, metadata.onCreated);
|
|
132
|
-
callLifecycle(instance, injector, metadata.onInjected);
|
|
146
|
+
callLifecycle(instance ?? this, injector, metadata.onCreated);
|
|
147
|
+
callLifecycle(instance ?? this, injector, metadata.onInjected);
|
|
133
148
|
}
|
|
134
149
|
}
|
|
135
150
|
|
package/src/lib.ts
CHANGED
|
@@ -6,6 +6,6 @@ export {
|
|
|
6
6
|
InjectionToken,
|
|
7
7
|
} from "./lib/provider.js";
|
|
8
8
|
export { injectable } from "./lib/injectable.js";
|
|
9
|
-
export { inject, Injected } from "./lib/inject.js";
|
|
9
|
+
export { inject, injectAll, Injected } from "./lib/inject.js";
|
|
10
10
|
export { injected, created } from "./lib/lifecycle.js";
|
|
11
|
-
export { DOMInjector } from "./lib/dom-injector.js";
|
|
11
|
+
export { DOMInjector } from "./lib/dom/dom-injector.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { INJECTOR_CTX } from "
|
|
2
|
-
import { ContextRequestEvent, } from "
|
|
3
|
-
import { Injector } from "
|
|
1
|
+
import { INJECTOR_CTX } from "../context/injector.js";
|
|
2
|
+
import { ContextRequestEvent, } from "../context/protocol.js";
|
|
3
|
+
import { Injector } from "../injector.js";
|
|
4
4
|
export class DOMInjector extends Injector {
|
|
5
5
|
#element = null;
|
|
6
6
|
#controller = null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-injector.js","sourceRoot":"","sources":["../../../src/lib/dom/dom-injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,mBAAmB,GAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK1C,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,QAAQ,GAAuB,IAAI,CAAC;IACpC,WAAW,GAA2B,IAAI,CAAC;IAE3C,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,OAAoB;QACzB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,2CAA2C,IAAI,CAAC,QAAQ,uCAAuC,CAChG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAEzC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC5B,iBAAiB,EACjB,CAAC,CAAsC,EAAE,EAAE;YACzC,IAAI,CAAC,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBACzB,CAAC,CAAC,eAAe,EAAE,CAAC;oBAEpB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC,EACD,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CACpC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,aAAa,CACzB,IAAI,mBAAmB,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -1,64 +1,41 @@
|
|
|
1
1
|
import { assert } from "chai";
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
ContextRequestEvent,
|
|
6
|
-
type UnknownContext,
|
|
7
|
-
} from "./context/protocol.js";
|
|
2
|
+
import { INJECTOR_CTX } from "../context/injector.js";
|
|
3
|
+
import { ContextRequestEvent, } from "../context/protocol.js";
|
|
4
|
+
import { Injector } from "../injector.js";
|
|
8
5
|
import { DOMInjector } from "./dom-injector.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
describe("DOMInjector", () => {
|
|
12
|
-
it("should respond to elements looking for an injector", () => {
|
|
6
|
+
it("should respond to elements looking for an injector", () => {
|
|
13
7
|
const injector = new DOMInjector();
|
|
14
8
|
injector.attach(document.body);
|
|
15
|
-
|
|
16
9
|
const host = document.createElement("div");
|
|
17
10
|
document.body.append(host);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
host.dispatchEvent(
|
|
22
|
-
new ContextRequestEvent(INJECTOR_CTX, (i) => {
|
|
11
|
+
let parent = null;
|
|
12
|
+
host.dispatchEvent(new ContextRequestEvent(INJECTOR_CTX, (i) => {
|
|
23
13
|
parent = i;
|
|
24
|
-
|
|
25
|
-
);
|
|
26
|
-
|
|
14
|
+
}));
|
|
27
15
|
assert.equal(parent, injector);
|
|
28
|
-
|
|
29
16
|
injector.detach();
|
|
30
17
|
host.remove();
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
it("should send request looking for other injector contexts", () => {
|
|
18
|
+
});
|
|
19
|
+
it("should send request looking for other injector contexts", () => {
|
|
34
20
|
const parent = new Injector();
|
|
35
21
|
const injector = new DOMInjector();
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
22
|
+
const cb = (e) => {
|
|
23
|
+
if (e.context === INJECTOR_CTX) {
|
|
24
|
+
e.callback(parent);
|
|
25
|
+
}
|
|
41
26
|
};
|
|
42
|
-
|
|
43
27
|
document.body.addEventListener("context-request", cb);
|
|
44
|
-
|
|
45
28
|
injector.attach(document.body);
|
|
46
|
-
|
|
47
29
|
assert.equal(injector.parent, parent);
|
|
48
|
-
|
|
49
30
|
injector.detach();
|
|
50
31
|
document.body.removeEventListener("context-request", cb);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
it("should throw an error if attempting to attach an already attached DOMInjector", () => {
|
|
32
|
+
});
|
|
33
|
+
it("should throw an error if attempting to attach an already attached DOMInjector", () => {
|
|
54
34
|
const injector = new DOMInjector();
|
|
55
|
-
|
|
56
35
|
const el = document.createElement("div");
|
|
57
|
-
|
|
58
36
|
injector.attach(el);
|
|
59
|
-
|
|
60
37
|
assert.throw(() => {
|
|
61
|
-
|
|
38
|
+
injector.attach(el);
|
|
62
39
|
});
|
|
63
|
-
});
|
|
64
40
|
});
|
|
41
|
+
//# sourceMappingURL=dom-injector.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-injector.test.js","sourceRoot":"","sources":["../../../src/lib/dom/dom-injector.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,mBAAmB,GAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC5D,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE/B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3B,IAAI,MAAM,GAAoB,IAAI,CAAC;IAEnC,IAAI,CAAC,aAAa,CAChB,IAAI,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;QAC1C,MAAM,GAAG,CAAC,CAAC;IACb,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE/B,QAAQ,CAAC,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACjE,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;IAEnC,MAAM,EAAE,GAAG,CAAC,CAAsC,EAAE,EAAE;QACpD,IAAI,CAAC,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;YAC/B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAEtD,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE/B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEtC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;IACvF,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;IAEnC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAEzC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEpB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAChB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { INJECTOR } from "
|
|
2
|
-
import type { Injector } from "
|
|
3
|
-
import type { ConstructableToken } from "
|
|
1
|
+
import { INJECTOR } from "../injector.js";
|
|
2
|
+
import type { Injector } from "../injector.js";
|
|
3
|
+
import type { ConstructableToken } from "../provider.js";
|
|
4
4
|
export declare function injectableEl<T extends ConstructableToken<HTMLElement & {
|
|
5
5
|
[INJECTOR]: Injector;
|
|
6
6
|
}>>(Base: T, ctx: ClassDecoratorContext): T;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { INJECTOR_CTX } from "
|
|
2
|
-
import { ContextRequestEvent } from "
|
|
3
|
-
import { INJECTOR } from "
|
|
4
|
-
import { callLifecycle } from "
|
|
1
|
+
import { INJECTOR_CTX } from "../context/injector.js";
|
|
2
|
+
import { ContextRequestEvent } from "../context/protocol.js";
|
|
3
|
+
import { INJECTOR } from "../injector.js";
|
|
4
|
+
import { callLifecycle } from "../lifecycle.js";
|
|
5
5
|
export function injectableEl(Base, ctx) {
|
|
6
6
|
const metadata = ctx.metadata;
|
|
7
7
|
const def = {
|
|
@@ -18,11 +18,10 @@ export function injectableEl(Base, ctx) {
|
|
|
18
18
|
callLifecycle(this, injector, metadata?.onCreated);
|
|
19
19
|
}
|
|
20
20
|
connectedCallback() {
|
|
21
|
-
const injector = this[INJECTOR];
|
|
22
21
|
this.dispatchEvent(new ContextRequestEvent(INJECTOR_CTX, (ctx) => {
|
|
23
|
-
|
|
22
|
+
this[INJECTOR].parent = ctx;
|
|
24
23
|
}));
|
|
25
|
-
callLifecycle(this,
|
|
24
|
+
callLifecycle(this, this[INJECTOR], metadata?.onInjected);
|
|
26
25
|
if (super.connectedCallback) {
|
|
27
26
|
super.connectedCallback();
|
|
28
27
|
}
|
|
@@ -0,0 +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;AAIhD,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,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;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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
2
|
import { assert } from "chai";
|
|
3
|
-
import { inject } from "
|
|
4
|
-
import { injectable } from "
|
|
3
|
+
import { inject } from "../inject.js";
|
|
4
|
+
import { injectable } from "../injectable.js";
|
|
5
5
|
it("should allow services to be injected into custom element", () => {
|
|
6
6
|
class Foo {
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable-el.test.js","sourceRoot":"","sources":["../../../src/lib/dom/injectable-el.test.ts"],"names":[],"mappings":"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"}
|
package/target/lib/inject.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { InjectionToken } from "./provider.js";
|
|
2
2
|
export type Injected<T> = () => T;
|
|
3
|
-
export declare function inject<
|
|
3
|
+
export declare function inject<T>(token: InjectionToken<T>): Injected<T>;
|
|
4
|
+
export declare function injectAll<T>(token: InjectionToken<T>): Injected<T[]>;
|
package/target/lib/inject.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { readInjector } from "./metadata.js";
|
|
2
2
|
export function inject(token) {
|
|
3
|
+
return internalInject((i) => i.inject(token));
|
|
4
|
+
}
|
|
5
|
+
export function injectAll(token) {
|
|
6
|
+
return internalInject((i) => i.injectAll(token));
|
|
7
|
+
}
|
|
8
|
+
function internalInject(cb) {
|
|
3
9
|
return function () {
|
|
4
10
|
const injector = readInjector(this);
|
|
5
11
|
if (injector === null) {
|
|
6
12
|
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
13
|
}
|
|
8
|
-
return injector
|
|
14
|
+
return cb(injector);
|
|
9
15
|
};
|
|
10
16
|
}
|
|
11
17
|
//# sourceMappingURL=inject.js.map
|
package/target/lib/inject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAQ7C,MAAM,UAAU,MAAM,CAAI,KAAwB;IAChD,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC;AAKD,MAAM,UAAU,SAAS,CAAI,KAAwB;IACnD,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,cAAc,CAAsB,EAAsB;IACjE,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,EAAE,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
2
|
import { assert } from "chai";
|
|
3
|
-
import { inject } from "./inject.js";
|
|
3
|
+
import { inject, injectAll } from "./inject.js";
|
|
4
4
|
import { injectable } from "./injectable.js";
|
|
5
5
|
import { Injector } from "./injector.js";
|
|
6
6
|
import { StaticToken } from "./provider.js";
|
|
@@ -99,4 +99,62 @@ it("should inject a static token", () => {
|
|
|
99
99
|
})();
|
|
100
100
|
assert.strictEqual(new HelloWorld().hello(), "Hello World");
|
|
101
101
|
});
|
|
102
|
+
it("should use the calling injector as parent", () => {
|
|
103
|
+
class FooService {
|
|
104
|
+
value = "1";
|
|
105
|
+
}
|
|
106
|
+
let BarService = (() => {
|
|
107
|
+
let _classDecorators = [injectable()];
|
|
108
|
+
let _classDescriptor;
|
|
109
|
+
let _classExtraInitializers = [];
|
|
110
|
+
let _classThis;
|
|
111
|
+
var BarService = class {
|
|
112
|
+
static { _classThis = this; }
|
|
113
|
+
static {
|
|
114
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
115
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
116
|
+
BarService = _classThis = _classDescriptor.value;
|
|
117
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
118
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
119
|
+
}
|
|
120
|
+
foo = inject(FooService);
|
|
121
|
+
};
|
|
122
|
+
return BarService = _classThis;
|
|
123
|
+
})();
|
|
124
|
+
const parent = new Injector({
|
|
125
|
+
providers: [
|
|
126
|
+
[
|
|
127
|
+
FooService,
|
|
128
|
+
{
|
|
129
|
+
use: class extends FooService {
|
|
130
|
+
value = "100";
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
],
|
|
135
|
+
});
|
|
136
|
+
assert.strictEqual(parent.inject(BarService).foo().value, "100");
|
|
137
|
+
});
|
|
138
|
+
it("should all you to inject all", () => {
|
|
139
|
+
const TOKEN = new StaticToken("test", () => "Hello World");
|
|
140
|
+
let HelloWorld = (() => {
|
|
141
|
+
let _classDecorators = [injectable()];
|
|
142
|
+
let _classDescriptor;
|
|
143
|
+
let _classExtraInitializers = [];
|
|
144
|
+
let _classThis;
|
|
145
|
+
var HelloWorld = class {
|
|
146
|
+
static { _classThis = this; }
|
|
147
|
+
static {
|
|
148
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
149
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
150
|
+
HelloWorld = _classThis = _classDescriptor.value;
|
|
151
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
152
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
153
|
+
}
|
|
154
|
+
hello = injectAll(TOKEN);
|
|
155
|
+
};
|
|
156
|
+
return HelloWorld = _classThis;
|
|
157
|
+
})();
|
|
158
|
+
assert.deepEqual(new HelloWorld().hello(), ["Hello World"]);
|
|
159
|
+
});
|
|
102
160
|
//# sourceMappingURL=inject.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.test.js","sourceRoot":"","sources":["../../src/lib/inject.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"inject.test.js","sourceRoot":"","sources":["../../src/lib/inject.test.ts"],"names":[],"mappings":"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"}
|
package/target/lib/injectable.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { injectableEl } from "./injectable-el.js";
|
|
1
|
+
import { injectableEl } from "./dom/injectable-el.js";
|
|
2
2
|
import { INJECTOR, Injector } from "./injector.js";
|
|
3
3
|
export function injectable(opts) {
|
|
4
4
|
return function injectableDecorator(Base, ctx) {
|
|
@@ -7,18 +7,17 @@ export function injectable(opts) {
|
|
|
7
7
|
[INJECTOR];
|
|
8
8
|
constructor(...args) {
|
|
9
9
|
super(...args);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
factory: () =>
|
|
10
|
+
this[INJECTOR] = new Injector(opts);
|
|
11
|
+
this[INJECTOR].providers.set(Injector, {
|
|
12
|
+
factory: () => this[INJECTOR],
|
|
13
13
|
});
|
|
14
14
|
if (opts?.provideSelfAs) {
|
|
15
15
|
for (const token of opts.provideSelfAs) {
|
|
16
|
-
|
|
16
|
+
this[INJECTOR].providers.set(token, {
|
|
17
17
|
factory: () => this,
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
this[INJECTOR] = injector;
|
|
22
21
|
}
|
|
23
22
|
},
|
|
24
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,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,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAEpC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE;wBACrC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;qBAC9B,CAAC,CAAC;oBAEH,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC;wBACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;4BACvC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE;gCAClC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;6BACpB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,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"}
|
package/target/lib/injector.d.ts
CHANGED
|
@@ -5,12 +5,17 @@ export interface InjectorOpts {
|
|
|
5
5
|
parent?: Injector;
|
|
6
6
|
}
|
|
7
7
|
export declare const INJECTOR: unique symbol;
|
|
8
|
+
export declare class ProviderMap extends Map<InjectionToken<any>, ProviderDef<any>> {
|
|
9
|
+
}
|
|
8
10
|
export declare class Injector {
|
|
9
11
|
#private;
|
|
10
12
|
name?: string;
|
|
11
13
|
parent?: Injector;
|
|
12
|
-
providers:
|
|
14
|
+
providers: ProviderMap;
|
|
13
15
|
constructor(opts?: InjectorOpts);
|
|
14
|
-
|
|
16
|
+
injectAll<T>(token: InjectionToken<T>, collection?: T[]): T[];
|
|
17
|
+
inject<T>(token: InjectionToken<T>, opts?: {
|
|
18
|
+
skipParent: boolean;
|
|
19
|
+
}): T;
|
|
15
20
|
clear(): void;
|
|
16
21
|
}
|
package/target/lib/injector.js
CHANGED
|
@@ -2,6 +2,8 @@ import { callLifecycle } from "./lifecycle.js";
|
|
|
2
2
|
import { readInjector, readMetadata } from "./metadata.js";
|
|
3
3
|
import { StaticToken, } from "./provider.js";
|
|
4
4
|
export const INJECTOR = Symbol("JOIST_INJECTOR");
|
|
5
|
+
export class ProviderMap extends Map {
|
|
6
|
+
}
|
|
5
7
|
export class Injector {
|
|
6
8
|
#instances = new WeakMap();
|
|
7
9
|
name;
|
|
@@ -9,15 +11,25 @@ export class Injector {
|
|
|
9
11
|
providers;
|
|
10
12
|
constructor(opts) {
|
|
11
13
|
this.parent = opts?.parent;
|
|
12
|
-
this.providers = new
|
|
14
|
+
this.providers = new ProviderMap(opts?.providers);
|
|
13
15
|
}
|
|
14
|
-
|
|
16
|
+
injectAll(token, collection = []) {
|
|
17
|
+
const result = [
|
|
18
|
+
...collection,
|
|
19
|
+
this.inject(token, { skipParent: true }),
|
|
20
|
+
];
|
|
21
|
+
if (this.parent) {
|
|
22
|
+
return this.parent.injectAll(token, result);
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
inject(token, opts) {
|
|
15
27
|
if (this.#instances.has(token)) {
|
|
16
28
|
const instance = this.#instances.get(token);
|
|
17
29
|
const metadata = readMetadata(token);
|
|
18
|
-
const injector = readInjector(instance)
|
|
30
|
+
const injector = readInjector(instance);
|
|
19
31
|
if (metadata) {
|
|
20
|
-
callLifecycle(instance, injector, metadata.onInjected);
|
|
32
|
+
callLifecycle(instance, injector ?? this, metadata.onInjected);
|
|
21
33
|
}
|
|
22
34
|
return instance;
|
|
23
35
|
}
|
|
@@ -31,7 +43,7 @@ export class Injector {
|
|
|
31
43
|
}
|
|
32
44
|
throw new Error(`Provider for ${token.name} found but is missing either 'use' or 'factory'`);
|
|
33
45
|
}
|
|
34
|
-
if (this.parent) {
|
|
46
|
+
if (this.parent && !opts?.skipParent) {
|
|
35
47
|
return this.parent.inject(token);
|
|
36
48
|
}
|
|
37
49
|
if (token instanceof StaticToken) {
|
|
@@ -48,15 +60,15 @@ export class Injector {
|
|
|
48
60
|
#createAndCache(token, factory) {
|
|
49
61
|
const instance = factory(this);
|
|
50
62
|
this.#instances.set(token, instance);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (injector
|
|
63
|
+
const injector = readInjector(instance);
|
|
64
|
+
if (injector) {
|
|
65
|
+
if (injector !== this) {
|
|
54
66
|
injector.parent = this;
|
|
55
67
|
}
|
|
56
68
|
const metadata = readMetadata(token);
|
|
57
69
|
if (metadata) {
|
|
58
|
-
callLifecycle(instance, injector, metadata.onCreated);
|
|
59
|
-
callLifecycle(instance, injector, metadata.onInjected);
|
|
70
|
+
callLifecycle(instance ?? this, injector, metadata.onCreated);
|
|
71
|
+
callLifecycle(instance ?? this, injector, metadata.onInjected);
|
|
60
72
|
}
|
|
61
73
|
}
|
|
62
74
|
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,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAKL,WAAW,GACZ,MAAM,eAAe,CAAC;AAQvB,MAAM,CAAC,MAAM,QAAQ,GAAkB,MAAM,CAAC,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/lib/injector.ts"],"names":[],"mappings":"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"}
|
|
@@ -242,4 +242,21 @@ it("should allow static token to be overridden", () => {
|
|
|
242
242
|
const res = injector.inject(TOKEN);
|
|
243
243
|
assert.equal(res, "Hello World");
|
|
244
244
|
});
|
|
245
|
+
it("should allow you to get ALL available instances in a particular injector chain", () => {
|
|
246
|
+
const TOKEN = new StaticToken("TOKEN");
|
|
247
|
+
const injector = new Injector({
|
|
248
|
+
providers: [[TOKEN, { factory: () => "first" }]],
|
|
249
|
+
parent: new Injector({
|
|
250
|
+
providers: [[TOKEN, { factory: () => "second" }]],
|
|
251
|
+
parent: new Injector({
|
|
252
|
+
providers: [[TOKEN, { factory: () => "third" }]],
|
|
253
|
+
parent: new Injector({
|
|
254
|
+
providers: [[TOKEN, { factory: () => "fourth" }]],
|
|
255
|
+
}),
|
|
256
|
+
}),
|
|
257
|
+
}),
|
|
258
|
+
});
|
|
259
|
+
const res = injector.injectAll(TOKEN);
|
|
260
|
+
assert.deepEqual(res, ["first", "second", "third", "fourth"]);
|
|
261
|
+
});
|
|
245
262
|
//# sourceMappingURL=injector.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injector.test.js","sourceRoot":"","sources":["../../src/lib/injector.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"injector.test.js","sourceRoot":"","sources":["../../src/lib/injector.test.ts"],"names":[],"mappings":"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"}
|
package/target/lib.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { Injector } from "./lib/injector.js";
|
|
2
2
|
export { Provider, ConstructableToken, StaticToken, InjectionToken, } from "./lib/provider.js";
|
|
3
3
|
export { injectable } from "./lib/injectable.js";
|
|
4
|
-
export { inject, Injected } from "./lib/inject.js";
|
|
4
|
+
export { inject, injectAll, Injected } from "./lib/inject.js";
|
|
5
5
|
export { injected, created } from "./lib/lifecycle.js";
|
|
6
|
-
export { DOMInjector } from "./lib/dom-injector.js";
|
|
6
|
+
export { DOMInjector } from "./lib/dom/dom-injector.js";
|
package/target/lib.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { Injector } from "./lib/injector.js";
|
|
2
2
|
export { StaticToken, } from "./lib/provider.js";
|
|
3
3
|
export { injectable } from "./lib/injectable.js";
|
|
4
|
-
export { inject } from "./lib/inject.js";
|
|
4
|
+
export { inject, injectAll } from "./lib/inject.js";
|
|
5
5
|
export { injected, created } from "./lib/lifecycle.js";
|
|
6
|
-
export { DOMInjector } from "./lib/dom-injector.js";
|
|
6
|
+
export { DOMInjector } from "./lib/dom/dom-injector.js";
|
|
7
7
|
//# sourceMappingURL=lib.js.map
|
package/target/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAGL,WAAW,GAEZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAY,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAGL,WAAW,GAEZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAY,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom-injector.js","sourceRoot":"","sources":["../../src/lib/dom-injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,QAAQ,GAAuB,IAAI,CAAC;IACpC,WAAW,GAA2B,IAAI,CAAC;IAE3C,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,OAAoB;QACzB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,2CAA2C,IAAI,CAAC,QAAQ,uCAAuC,CAChG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAEzC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC5B,iBAAiB,EACjB,CAAC,CAAsC,EAAE,EAAE;YACzC,IAAI,CAAC,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBACzB,CAAC,CAAC,eAAe,EAAE,CAAC;oBAEpB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC,EACD,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CACpC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,aAAa,CACzB,IAAI,mBAAmB,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { assert } from "chai";
|
|
2
|
-
import { INJECTOR_CTX } from "./context/injector.js";
|
|
3
|
-
import { ContextRequestEvent, } from "./context/protocol.js";
|
|
4
|
-
import { DOMInjector } from "./dom-injector.js";
|
|
5
|
-
import { Injector } from "./injector.js";
|
|
6
|
-
describe("DOMInjector", () => {
|
|
7
|
-
it("should respond to elements looking for an injector", () => {
|
|
8
|
-
const injector = new DOMInjector();
|
|
9
|
-
injector.attach(document.body);
|
|
10
|
-
const host = document.createElement("div");
|
|
11
|
-
document.body.append(host);
|
|
12
|
-
let parent = null;
|
|
13
|
-
host.dispatchEvent(new ContextRequestEvent(INJECTOR_CTX, (i) => {
|
|
14
|
-
parent = i;
|
|
15
|
-
}));
|
|
16
|
-
assert.equal(parent, injector);
|
|
17
|
-
injector.detach();
|
|
18
|
-
host.remove();
|
|
19
|
-
});
|
|
20
|
-
it("should send request looking for other injector contexts", () => {
|
|
21
|
-
const parent = new Injector();
|
|
22
|
-
const injector = new DOMInjector();
|
|
23
|
-
const cb = (e) => {
|
|
24
|
-
if (e.context === INJECTOR_CTX) {
|
|
25
|
-
e.callback(parent);
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
document.body.addEventListener("context-request", cb);
|
|
29
|
-
injector.attach(document.body);
|
|
30
|
-
assert.equal(injector.parent, parent);
|
|
31
|
-
injector.detach();
|
|
32
|
-
document.body.removeEventListener("context-request", cb);
|
|
33
|
-
});
|
|
34
|
-
it("should throw an error if attempting to attach an already attached DOMInjector", () => {
|
|
35
|
-
const injector = new DOMInjector();
|
|
36
|
-
const el = document.createElement("div");
|
|
37
|
-
injector.attach(el);
|
|
38
|
-
assert.throw(() => {
|
|
39
|
-
injector.attach(el);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
//# sourceMappingURL=dom-injector.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom-injector.test.js","sourceRoot":"","sources":["../../src/lib/dom-injector.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QACnC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,MAAM,GAAoB,IAAI,CAAC;QAEnC,IAAI,CAAC,aAAa,CAChB,IAAI,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1C,MAAM,GAAG,CAAC,CAAC;QACb,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE/B,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QAEnC,MAAM,EAAE,GAAG,CAAC,CAAsC,EAAE,EAAE;YACpD,IAAI,CAAC,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;gBAC/B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;QAEF,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAEtD,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEtC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QAEnC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEzC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEpB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YAChB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injectable-el.test.js","sourceRoot":"","sources":["../../src/lib/injectable-el.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;AAE7C,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;IAClE,MAAM,GAAG;KAAG;QAGN,SAAS;gCADd,UAAU,EAAE;;;;0BACW,WAAW;6BAAnB,SAAQ,WAAW;;;;gBAAnC,6KAEC;;;gBAFK,uDAAS;;YACb,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;;;;IAGpB,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAEjD,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,kFAAkF,EAAE,GAAG,EAAE;IAC1F,MAAM,GAAG;KAAG;IAEZ,MAAM,aAAc,SAAQ,WAAW;KAAG;QAGpC,SAAS;gCADd,UAAU,EAAE;;;;0BACW,aAAa;6BAArB,SAAQ,WAAa;;;;gBAArC,6KAEC;;;gBAFK,uDAAS;;YACb,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;;;;IAGpB,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAEjD,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,qCAAqC,EAAE,KAAK,IAAI,EAAE;QAE7C,CAAC;gCADN,UAAU,EAAE;;;;;;;;gBACb,6KAAU;;;gBAAJ,uDAAC;;;;;QAGD,CAAC;gCADN,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAC;;YACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;IAGhB,MAAM,IAAI;KAAgB;QAQpB,MAAM;gCANX,UAAU,CAAC;gBACV,SAAS,EAAE;oBACT,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;oBACf,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;iBACnB;aACF,CAAC;;;;0BACmB,WAAW;0BAAnB,SAAQ,WAAW;;;;gBAAhC,6KAAmC;;;gBAA7B,uDAAM;;;;;QAGN,KAAK;gCADV,UAAU,EAAE;;;;0BACO,WAAW;yBAAnB,SAAQ,WAAW;;;;gBAA/B,6KAEC;;;gBAFK,uDAAK;;YACT,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;IAGhB,cAAc,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACrD,cAAc,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;IAEnD,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,EAAE,CAAC,SAAS,GAAY;;;;GAIvB,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEzB,MAAM,KAAK,GAAG,EAAE,CAAC,aAAa,CAAQ,oBAAoB,CAAC,CAAC;IAE5D,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAExC,EAAE,CAAC,MAAM,EAAE,CAAC;AACd,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;IAC/C,MAAM,CAAC;KAAG;IACV,MAAM,IAAI;KAAgB;QAKpB,IAAI;gCAHT,UAAU,CAAC;gBACV,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;aAC7B,CAAC;;;;0BACiB,WAAW;wBAAnB,SAAQ,WAAW;;;;gBAA9B,6KAAiC;;;gBAA3B,uDAAI;;;;;QAKJ,IAAI;gCAHT,UAAU,CAAC;gBACV,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;aAChC,CAAC;;;;0BACiB,WAAW;wBAAnB,SAAQ,WAAW;;;;gBAA9B,6KAAiC;;;gBAA3B,uDAAI;;;;;QAGJ,KAAK;gCADV,UAAU,EAAE;;;;0BACO,WAAW;yBAAnB,SAAQ,WAAW;;;;gBAA/B,6KAEC;;;gBAFK,uDAAK;;YACT,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;IAGhB,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAE1C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,EAAE,CAAC,SAAS,GAAY;;;;;;;;GAQvB,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEzB,MAAM,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEvC,IAAI,KAAK,GAAG,EAAE,CAAC,aAAa,CAAQ,WAAW,CAAC,CAAC;IAEjD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAEjC,KAAK,CAAC,MAAM,EAAE,CAAC;IAEf,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpB,KAAK,GAAG,EAAE,CAAC,aAAa,CAAQ,WAAW,CAAC,CAAC;IAE7C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC"}
|
|
File without changes
|
|
File without changes
|