@joist/di 4.0.0-next.50 → 4.0.0-next.52

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