@joist/di 4.0.1 → 4.1.1
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 +6 -11
- 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} +47 -2
- package/src/lib/{injectable-el.ts → dom/injectable-el.ts} +14 -13
- 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} +7 -8
- package/target/lib/dom/injectable-el.js.map +1 -0
- package/target/lib/{injectable-el.test.js → dom/injectable-el.test.js} +48 -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/README.md
CHANGED
|
@@ -343,19 +343,14 @@ Since custom elements are treated the same as any other class they can define pr
|
|
|
343
343
|
This also makes it easy to attributes to define values for the service.
|
|
344
344
|
|
|
345
345
|
```TS
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
interface ColorCtx {
|
|
351
|
-
primary: string;
|
|
352
|
-
secondary: string;
|
|
346
|
+
class ColorCtx {
|
|
347
|
+
primary = "red";
|
|
348
|
+
secondary = "green";
|
|
353
349
|
}
|
|
354
350
|
|
|
355
|
-
const COLOR_CTX = new StaticToken<ColorCtx>('COLOR_CTX')
|
|
356
|
-
|
|
357
351
|
@injectable({
|
|
358
|
-
|
|
352
|
+
name: 'color-ctx',
|
|
353
|
+
provideSelfAs: [ColorCtx]
|
|
359
354
|
})
|
|
360
355
|
class ColorCtx extends HTMLElement implements ColorCtx {
|
|
361
356
|
get primary() {
|
|
@@ -384,7 +379,7 @@ customElements.define('my-element', MyElement);
|
|
|
384
379
|
```
|
|
385
380
|
|
|
386
381
|
```HTML
|
|
387
|
-
<!--
|
|
382
|
+
<!-- Default Colors -->
|
|
388
383
|
<my-element></my-element>
|
|
389
384
|
|
|
390
385
|
<!-- colors come from ctx -->
|
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,8 @@
|
|
|
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
|
+
import { DOMInjector } from "./dom-injector.js";
|
|
5
6
|
|
|
6
7
|
it("should allow services to be injected into custom element", () => {
|
|
7
8
|
class Foo {}
|
|
@@ -128,3 +129,47 @@ it("should handle changing contexts", async () => {
|
|
|
128
129
|
|
|
129
130
|
assert.instanceOf(child?.a(), AltA);
|
|
130
131
|
});
|
|
132
|
+
|
|
133
|
+
it("should provide the same context in disconnectedCallback as connectedCallback", async () => {
|
|
134
|
+
class A {}
|
|
135
|
+
|
|
136
|
+
class AltA {}
|
|
137
|
+
|
|
138
|
+
const app = new DOMInjector({
|
|
139
|
+
providers: [[A, { use: AltA }]],
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
app.attach(document.body);
|
|
143
|
+
|
|
144
|
+
@injectable()
|
|
145
|
+
class Example extends HTMLElement {
|
|
146
|
+
#ctx = inject(A);
|
|
147
|
+
|
|
148
|
+
connected: A | null = null;
|
|
149
|
+
disconnected: A | null = null;
|
|
150
|
+
|
|
151
|
+
connectedCallback(): void {
|
|
152
|
+
this.connected = this.#ctx();
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
disconnectedCallback(): void {
|
|
156
|
+
this.disconnected = this.#ctx();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
customElements.define("ctx-3", Example);
|
|
161
|
+
|
|
162
|
+
const el = document.createElement("ctx-3") as Example;
|
|
163
|
+
|
|
164
|
+
document.body.append(el);
|
|
165
|
+
|
|
166
|
+
assert.instanceOf(el.connected, AltA);
|
|
167
|
+
|
|
168
|
+
el.remove();
|
|
169
|
+
|
|
170
|
+
assert.instanceOf(el.disconnected, AltA);
|
|
171
|
+
|
|
172
|
+
assert.equal(el.connected, el.disconnected);
|
|
173
|
+
|
|
174
|
+
app.detach();
|
|
175
|
+
});
|
|
@@ -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();
|
|
@@ -46,11 +44,14 @@ export function injectableEl<
|
|
|
46
44
|
}
|
|
47
45
|
|
|
48
46
|
disconnectedCallback() {
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
// super disconnect needs to be called first.
|
|
48
|
+
// If not the context could be different since the element will be removed from the injector chain.
|
|
49
|
+
// This leads to unexpected behaviors.
|
|
51
50
|
if (super.disconnectedCallback) {
|
|
52
51
|
super.disconnectedCallback();
|
|
53
52
|
}
|
|
53
|
+
|
|
54
|
+
this[INJECTOR].parent = undefined;
|
|
54
55
|
}
|
|
55
56
|
},
|
|
56
57
|
};
|
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,20 +18,19 @@ 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
|
}
|
|
29
28
|
}
|
|
30
29
|
disconnectedCallback() {
|
|
31
|
-
this[INJECTOR].parent = undefined;
|
|
32
30
|
if (super.disconnectedCallback) {
|
|
33
31
|
super.disconnectedCallback();
|
|
34
32
|
}
|
|
33
|
+
this[INJECTOR].parent = undefined;
|
|
35
34
|
}
|
|
36
35
|
},
|
|
37
36
|
};
|
|
@@ -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;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,7 +1,8 @@
|
|
|
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
|
+
import { DOMInjector } from "./dom-injector.js";
|
|
5
6
|
it("should allow services to be injected into custom element", () => {
|
|
6
7
|
class Foo {
|
|
7
8
|
}
|
|
@@ -235,4 +236,49 @@ it("should handle changing contexts", async () => {
|
|
|
235
236
|
child = el.querySelector("ctx-child");
|
|
236
237
|
assert.instanceOf(child?.a(), AltA);
|
|
237
238
|
});
|
|
239
|
+
it("should provide the same context in disconnectedCallback as connectedCallback", async () => {
|
|
240
|
+
class A {
|
|
241
|
+
}
|
|
242
|
+
class AltA {
|
|
243
|
+
}
|
|
244
|
+
const app = new DOMInjector({
|
|
245
|
+
providers: [[A, { use: AltA }]],
|
|
246
|
+
});
|
|
247
|
+
app.attach(document.body);
|
|
248
|
+
let Example = (() => {
|
|
249
|
+
let _classDecorators = [injectable()];
|
|
250
|
+
let _classDescriptor;
|
|
251
|
+
let _classExtraInitializers = [];
|
|
252
|
+
let _classThis;
|
|
253
|
+
let _classSuper = HTMLElement;
|
|
254
|
+
var Example = class extends _classSuper {
|
|
255
|
+
static { _classThis = this; }
|
|
256
|
+
static {
|
|
257
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
258
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
259
|
+
Example = _classThis = _classDescriptor.value;
|
|
260
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
261
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
262
|
+
}
|
|
263
|
+
#ctx = inject(A);
|
|
264
|
+
connected = null;
|
|
265
|
+
disconnected = null;
|
|
266
|
+
connectedCallback() {
|
|
267
|
+
this.connected = this.#ctx();
|
|
268
|
+
}
|
|
269
|
+
disconnectedCallback() {
|
|
270
|
+
this.disconnected = this.#ctx();
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
return Example = _classThis;
|
|
274
|
+
})();
|
|
275
|
+
customElements.define("ctx-3", Example);
|
|
276
|
+
const el = document.createElement("ctx-3");
|
|
277
|
+
document.body.append(el);
|
|
278
|
+
assert.instanceOf(el.connected, AltA);
|
|
279
|
+
el.remove();
|
|
280
|
+
assert.instanceOf(el.disconnected, AltA);
|
|
281
|
+
assert.equal(el.connected, el.disconnected);
|
|
282
|
+
app.detach();
|
|
283
|
+
});
|
|
238
284
|
//# sourceMappingURL=injectable-el.test.js.map
|
|
@@ -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":"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"}
|
|
File without changes
|
|
File without changes
|