@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.
Files changed (44) hide show
  1. package/README.md +6 -11
  2. package/package.json +1 -1
  3. package/src/lib/dom/dom-injector.test.ts +62 -0
  4. package/src/lib/{dom-injector.ts → dom/dom-injector.ts} +6 -3
  5. package/src/lib/{injectable-el.test.ts → dom/injectable-el.test.ts} +47 -2
  6. package/src/lib/{injectable-el.ts → dom/injectable-el.ts} +14 -13
  7. package/src/lib/inject.test.ts +38 -1
  8. package/src/lib/inject.ts +18 -5
  9. package/src/lib/injectable.ts +5 -7
  10. package/src/lib/injector.test.ts +21 -0
  11. package/src/lib/injector.ts +28 -13
  12. package/src/lib.ts +2 -2
  13. package/target/lib/{dom-injector.d.ts → dom/dom-injector.d.ts} +1 -1
  14. package/target/lib/{dom-injector.js → dom/dom-injector.js} +3 -3
  15. package/target/lib/dom/dom-injector.js.map +1 -0
  16. package/{src/lib/dom-injector.test.ts → target/lib/dom/dom-injector.test.js} +17 -40
  17. package/target/lib/dom/dom-injector.test.js.map +1 -0
  18. package/target/lib/{injectable-el.d.ts → dom/injectable-el.d.ts} +3 -3
  19. package/target/lib/{injectable-el.js → dom/injectable-el.js} +7 -8
  20. package/target/lib/dom/injectable-el.js.map +1 -0
  21. package/target/lib/{injectable-el.test.js → dom/injectable-el.test.js} +48 -2
  22. package/target/lib/dom/injectable-el.test.js.map +1 -0
  23. package/target/lib/inject.d.ts +2 -1
  24. package/target/lib/inject.js +7 -1
  25. package/target/lib/inject.js.map +1 -1
  26. package/target/lib/inject.test.js +59 -1
  27. package/target/lib/inject.test.js.map +1 -1
  28. package/target/lib/injectable.js +5 -6
  29. package/target/lib/injectable.js.map +1 -1
  30. package/target/lib/injector.d.ts +7 -2
  31. package/target/lib/injector.js +22 -10
  32. package/target/lib/injector.js.map +1 -1
  33. package/target/lib/injector.test.js +17 -0
  34. package/target/lib/injector.test.js.map +1 -1
  35. package/target/lib.d.ts +2 -2
  36. package/target/lib.js +2 -2
  37. package/target/lib.js.map +1 -1
  38. package/target/lib/dom-injector.js.map +0 -1
  39. package/target/lib/dom-injector.test.js +0 -43
  40. package/target/lib/dom-injector.test.js.map +0 -1
  41. package/target/lib/injectable-el.js.map +0 -1
  42. package/target/lib/injectable-el.test.js.map +0 -1
  43. /package/target/lib/{dom-injector.test.d.ts → dom/dom-injector.test.d.ts} +0 -0
  44. /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
- const app = new DOMInjector();
347
-
348
- app.attach(document.body);
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
- provideSelfAs: [COLOR_CTX]
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
- <!-- Error: No colors provided -->
382
+ <!-- Default Colors -->
388
383
  <my-element></my-element>
389
384
 
390
385
  <!-- colors come from ctx -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joist/di",
3
- "version": "4.0.1",
3
+ "version": "4.1.1",
4
4
  "type": "module",
5
5
  "main": "./target/lib.js",
6
6
  "module": "./target/lib.js",
@@ -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 "./context/injector.js";
1
+ import { INJECTOR_CTX } from "../context/injector.js";
2
2
  import {
3
3
  ContextRequestEvent,
4
4
  type UnknownContext,
5
- } from "./context/protocol.js";
6
- import { Injector } from "./injector.js";
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 "./inject.js";
4
- import { injectable } from "./injectable.js";
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 "./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";
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
- injector.parent = ctx;
35
+ this[INJECTOR].parent = ctx;
38
36
  }),
39
37
  );
40
38
 
41
- callLifecycle(this, injector, metadata?.onInjected);
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
- this[INJECTOR].parent = undefined;
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
  };
@@ -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
- export function inject<This extends object, T>(
7
- token: InjectionToken<T>,
8
- ): Injected<T> {
9
- return function (this: This) {
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.inject(token);
31
+ return cb(injector);
19
32
  };
20
33
  }
@@ -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
- const injector = new Injector(opts);
27
+ this[INJECTOR] = new Injector(opts);
28
28
 
29
- injector.providers.set(Injector, {
30
- factory: () => injector,
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
- injector.providers.set(token, {
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
  };
@@ -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
+ });
@@ -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: WeakMap<InjectionToken<any>, ProviderDef<any>>;
44
+ providers: ProviderMap;
43
45
 
44
46
  constructor(opts?: InjectorOpts) {
45
47
  this.parent = opts?.parent;
46
- this.providers = new Map(opts?.providers);
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>): 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) ?? this;
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
- if (typeof instance === "object" && instance !== null) {
111
- const injector = readInjector(instance) ?? this;
125
+ const injector = readInjector(instance);
112
126
 
113
- if (injector && injector !== this) {
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,4 +1,4 @@
1
- import { Injector } from "./injector.js";
1
+ import { Injector } from "../injector.js";
2
2
  export declare class DOMInjector extends Injector {
3
3
  #private;
4
4
  get isAttached(): boolean;
@@ -1,6 +1,6 @@
1
- import { INJECTOR_CTX } from "./context/injector.js";
2
- import { ContextRequestEvent, } from "./context/protocol.js";
3
- import { Injector } from "./injector.js";
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 { INJECTOR_CTX } from "./context/injector.js";
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
- import { Injector } from "./injector.js";
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
- let parent: Injector | null = null;
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
- const cb = (e: ContextRequestEvent<UnknownContext>) => {
38
- if (e.context === INJECTOR_CTX) {
39
- e.callback(parent);
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
- injector.attach(el);
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 "./injector.js";
2
- import type { Injector } from "./injector.js";
3
- import type { ConstructableToken } from "./provider.js";
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 "./context/injector.js";
2
- import { ContextRequestEvent } from "./context/protocol.js";
3
- import { INJECTOR } from "./injector.js";
4
- import { callLifecycle } from "./lifecycle.js";
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
- injector.parent = ctx;
22
+ this[INJECTOR].parent = ctx;
24
23
  }));
25
- callLifecycle(this, injector, metadata?.onInjected);
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 "./inject.js";
4
- import { injectable } from "./injectable.js";
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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"}
@@ -1,3 +1,4 @@
1
1
  import type { InjectionToken } from "./provider.js";
2
2
  export type Injected<T> = () => T;
3
- export declare function inject<This extends object, T>(token: InjectionToken<T>): Injected<T>;
3
+ export declare function inject<T>(token: InjectionToken<T>): Injected<T>;
4
+ export declare function injectAll<T>(token: InjectionToken<T>): Injected<T[]>;
@@ -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.inject(token);
14
+ return cb(injector);
9
15
  };
10
16
  }
11
17
  //# sourceMappingURL=inject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK7C,MAAM,UAAU,MAAM,CACpB,KAAwB;IAExB,OAAO;QACL,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,gKAAgK,CACzL,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"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;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACrD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;QACjB,MAAM,UAAU;YACd,KAAK,GAAG,GAAG,CAAC;SACb;YAGK,UAAU;oCADf,UAAU,EAAE;;;;;;;;oBACb,6KAMC;;;oBANK,uDAAU;;gBACd,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBAEzB;oBACE,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,CAAC;;;;QAGH,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE9B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC,EAAE,sFAAsF,CAAC,CAAC;AAC7F,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC3D,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;QACjB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE9B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,EAAE,+BAA+B,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACnD,MAAM,UAAU;QACd,KAAK,GAAG,GAAG,CAAC;KACb;QAGK,UAAU;gCADf,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAU;;YACd,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;;;;IAG3B,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC;QAC1B,SAAS,EAAE;YACT;gBACE,UAAU;gBACV;oBACE,GAAG,EAAE,KAAM,SAAQ,UAAU;wBAC3B,KAAK,GAAG,KAAK,CAAC;qBACf;iBACF;aACF;SACF;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;IACtC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;QAGrD,UAAU;gCADf,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAU;;YACd,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;;;;IAGxB,MAAM,CAAC,WAAW,CAAC,IAAI,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,aAAa,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"inject.test.js","sourceRoot":"","sources":["../../src/lib/inject.test.ts"],"names":[],"mappings":"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"}
@@ -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
- const injector = new Injector(opts);
11
- injector.providers.set(Injector, {
12
- factory: () => injector,
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
- injector.providers.set(token, {
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,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAanD,MAAM,UAAU,UAAU,CAAC,IAAqB;IAC9C,OAAO,SAAS,mBAAmB,CACjC,IAAO,EACP,GAA0B;QAE1B,MAAM,GAAG,GAAG;YACV,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAM,SAAQ,IAAI;gBAC7B,CAAC,QAAQ,CAAC,CAAW;gBAErB,YAAY,GAAG,IAAW;oBACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;oBAEf,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAEpC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE;wBAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ;qBACxB,CAAC,CAAC;oBAEH,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC;wBACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;4BACvC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE;gCAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;6BACpB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;gBAC5B,CAAC;aACF;SACF,CAAC;QAGF,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;YAChC,IACE,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CACjC,WAAW,CAAC,SAAS,EACrB,IAAI,CAAC,SAAS,CACf,EACD,CAAC;gBACD,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC"}
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"}
@@ -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: WeakMap<InjectionToken<any>, ProviderDef<any>>;
14
+ providers: ProviderMap;
13
15
  constructor(opts?: InjectorOpts);
14
- inject<T>(token: InjectionToken<T>): T;
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
  }
@@ -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 Map(opts?.providers);
14
+ this.providers = new ProviderMap(opts?.providers);
13
15
  }
14
- inject(token) {
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) ?? this;
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
- if (typeof instance === "object" && instance !== null) {
52
- const injector = readInjector(instance) ?? this;
53
- if (injector && injector !== this) {
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":"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"}
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":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC3D,MAAM,CAAC;KAAG;IAEV,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;IAE3B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACtD,MAAM,CAAC;KAAG;IACV,MAAM,CAAC;KAAG;QAGJ,SAAS;gCADd,UAAU,EAAE;;;;;;;;gBACb,6KAGC;;;gBAHK,uDAAS;;YACb,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACd,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;IAGhB,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEvC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;IAC7E,MAAM,CAAC;KAAG;QAGJ,CAAC;gCADN,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAC;;YACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;QAIV,CAAC;gCADN,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAC;;YACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;QAIV,CAAC;gCADN,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAC;;YACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;QAIV,CAAC;gCADN,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAC;;YACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;IAGhB,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC7D,MAAM,CAAC;KAAG;QAGJ,CAAC;gCADN,UAAU,EAAE;;;;;;;;gBACb,6KAEC;;;gBAFK,uDAAC;;YACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;IAGhB,MAAM,IAAK,SAAQ,CAAC;KAAG;IACvB,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;QACvB,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;KAChC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACnE,MAAM,CAAC;KAAG;IAEV,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;IAE9B,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;QACvB,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAC1C,MAAM,OAAO;QACX,KAAK;YACH,OAAO,OAAO,CAAC;QACjB,CAAC;KACF;IAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;QAC5B,SAAS,EAAE;YACT;gBACE,OAAO;gBACP;oBACE,OAAO;wBACL,OAAO;4BACL,KAAK;gCACH,OAAO,OAAO,CAAC;4BACjB,CAAC;yBACF,CAAC;oBACJ,CAAC;iBACF;aACF;SACF;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;IAC3E,MAAM,OAAO;QACX,KAAK;YACH,OAAO,OAAO,CAAC;QACjB,CAAC;KACF;IAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;QAC5B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,EAAS,CAAC,CAAC;KAClC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,qEAAqE,CACtE,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;IAClE,MAAM,OAAO;QACX,KAAK;YACH,OAAO,OAAO,CAAC;QACjB,CAAC;KACF;IAED,IAAI,eAAe,GAAoB,IAAI,CAAC;IAE5C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;QAC5B,SAAS,EAAE;YACT;gBACE,OAAO;gBACP;oBACE,OAAO,CAAC,CAAC;wBACP,eAAe,GAAG,CAAC,CAAC;oBACtB,CAAC;iBACF;aACF;SACF;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzB,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAC9D,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAEhC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;IAC3E,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAEhC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEzC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;IACpD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAS,MAAM,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;QAC5B,SAAS,EAAE;YACT;gBACE,KAAK;gBACL;oBACE,OAAO;wBACL,OAAO,aAAa,CAAC;oBACvB,CAAC;iBACF;aACF;SACF;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC"}
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;AACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,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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"}