@joist/di 4.5.0 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/lib/context/protocol.ts +1 -1
- package/src/lib/dom/injectable-el.ts +1 -1
- package/src/lib/injectable.ts +11 -13
- package/src/lib/injector.test.ts +18 -0
- package/src/lib/injector.ts +8 -4
- package/src/lib/lifecycle.test.ts +7 -7
- package/src/lib/lifecycle.ts +3 -9
- package/src/lib/metadata.ts +7 -5
- package/src/lib/provider.ts +1 -1
- package/src/lib.ts +4 -4
- package/target/lib/context/injector.d.ts +1 -0
- package/target/lib/context/injector.d.ts.map +1 -0
- package/target/lib/context/protocol.d.ts +32 -1
- package/target/lib/context/protocol.d.ts.map +1 -0
- package/target/lib/context/protocol.js +13 -0
- package/target/lib/context/protocol.js.map +1 -1
- package/target/lib/dom/dom-injector.d.ts +4 -0
- package/target/lib/dom/dom-injector.d.ts.map +1 -0
- package/target/lib/dom/dom-injector.js +3 -0
- package/target/lib/dom/dom-injector.js.map +1 -1
- package/target/lib/dom/dom-injector.test.d.ts +1 -0
- package/target/lib/dom/dom-injector.test.d.ts.map +1 -0
- package/target/lib/dom/dom-injector.test.js +34 -1
- package/target/lib/dom/dom-injector.test.js.map +1 -1
- package/target/lib/dom/injectable-el.d.ts +1 -0
- package/target/lib/dom/injectable-el.d.ts.map +1 -0
- package/target/lib/dom/injectable-el.js +3 -0
- package/target/lib/dom/injectable-el.js.map +1 -1
- package/target/lib/dom/injectable-el.test.d.ts +1 -0
- package/target/lib/dom/injectable-el.test.d.ts.map +1 -0
- package/target/lib/dom/injectable-el.test.js +39 -3
- package/target/lib/dom/injectable-el.test.js.map +1 -1
- package/target/lib/inject.d.ts +7 -0
- package/target/lib/inject.d.ts.map +1 -0
- package/target/lib/inject.js +6 -0
- package/target/lib/inject.js.map +1 -1
- package/target/lib/inject.test.d.ts +1 -0
- package/target/lib/inject.test.d.ts.map +1 -0
- package/target/lib/inject.test.js +34 -1
- package/target/lib/inject.test.js.map +1 -1
- package/target/lib/injectable.d.ts +1 -0
- package/target/lib/injectable.d.ts.map +1 -0
- package/target/lib/injectable.js +7 -2
- package/target/lib/injectable.js.map +1 -1
- package/target/lib/injectable.test.d.ts +1 -0
- package/target/lib/injectable.test.d.ts.map +1 -0
- package/target/lib/injectable.test.js +34 -1
- package/target/lib/injectable.test.js.map +1 -1
- package/target/lib/injector.d.ts +22 -4
- package/target/lib/injector.d.ts.map +1 -0
- package/target/lib/injector.js +38 -1
- package/target/lib/injector.js.map +1 -1
- package/target/lib/injector.test.d.ts +1 -0
- package/target/lib/injector.test.d.ts.map +1 -0
- package/target/lib/injector.test.js +51 -1
- package/target/lib/injector.test.js.map +1 -1
- package/target/lib/lifecycle.d.ts +1 -0
- package/target/lib/lifecycle.d.ts.map +1 -0
- package/target/lib/lifecycle.js +3 -9
- package/target/lib/lifecycle.js.map +1 -1
- package/target/lib/lifecycle.test.d.ts +1 -0
- package/target/lib/lifecycle.test.d.ts.map +1 -0
- package/target/lib/lifecycle.test.js +36 -3
- package/target/lib/lifecycle.test.js.map +1 -1
- package/target/lib/metadata.d.ts +6 -5
- package/target/lib/metadata.d.ts.map +1 -0
- package/target/lib/metadata.js.map +1 -1
- package/target/lib/provider.d.ts +1 -0
- package/target/lib/provider.d.ts.map +1 -0
- package/target/lib/provider.js.map +1 -1
- package/target/lib.d.ts +3 -2
- package/target/lib.d.ts.map +1 -0
- package/target/lib.js.map +1 -1
package/package.json
CHANGED
|
@@ -53,7 +53,7 @@ export type ContextCallback<ValueType> = (value: ValueType, unsubscribe?: () =>
|
|
|
53
53
|
export class ContextRequestEvent<T extends UnknownContext> extends Event {
|
|
54
54
|
context: T;
|
|
55
55
|
callback: ContextCallback<ContextType<T>>;
|
|
56
|
-
subscribe?: boolean;
|
|
56
|
+
subscribe?: boolean | undefined;
|
|
57
57
|
|
|
58
58
|
public constructor(context: T, callback: ContextCallback<ContextType<T>>, subscribe?: boolean) {
|
|
59
59
|
super("context-request", { bubbles: true, composed: true });
|
package/src/lib/injectable.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { injectableEl } from "./dom/injectable-el.js";
|
|
2
|
+
import type { InjectableEl } from "./dom/injectable-el.js";
|
|
2
3
|
import { INJECTOR, Injector } from "./injector.js";
|
|
3
|
-
import type {
|
|
4
|
-
ConstructableToken,
|
|
5
|
-
InjectionToken,
|
|
6
|
-
Provider,
|
|
7
|
-
} from "./provider.js";
|
|
4
|
+
import type { ConstructableToken, InjectionToken, Provider } from "./provider.js";
|
|
8
5
|
|
|
9
6
|
export interface InjectableOpts {
|
|
10
7
|
name?: string;
|
|
@@ -41,18 +38,19 @@ export function injectable(opts?: InjectableOpts) {
|
|
|
41
38
|
},
|
|
42
39
|
};
|
|
43
40
|
|
|
41
|
+
const injectableBase = def[Base.name];
|
|
42
|
+
|
|
43
|
+
if (!injectableBase) {
|
|
44
|
+
throw new Error(`Failed to create injectable class for ${Base.name}`);
|
|
45
|
+
}
|
|
46
|
+
|
|
44
47
|
// Only apply custom element bootstrap logic if the decorated class is an HTMLElement
|
|
45
48
|
if ("HTMLElement" in globalThis) {
|
|
46
|
-
if (
|
|
47
|
-
|
|
48
|
-
HTMLElement.prototype,
|
|
49
|
-
Base.prototype,
|
|
50
|
-
)
|
|
51
|
-
) {
|
|
52
|
-
return injectableEl(def[Base.name], ctx);
|
|
49
|
+
if (Object.prototype.isPrototypeOf.call(HTMLElement.prototype, Base.prototype)) {
|
|
50
|
+
return injectableEl(injectableBase, ctx);
|
|
53
51
|
}
|
|
54
52
|
}
|
|
55
53
|
|
|
56
|
-
return
|
|
54
|
+
return injectableBase;
|
|
57
55
|
};
|
|
58
56
|
}
|
package/src/lib/injector.test.ts
CHANGED
|
@@ -288,3 +288,21 @@ it("should create a non singleton instance", () => {
|
|
|
288
288
|
|
|
289
289
|
assert.notEqual(app.inject(A, { singleton: false }), app.inject(A, { singleton: false }));
|
|
290
290
|
});
|
|
291
|
+
|
|
292
|
+
it("should forward singleton option to parent injector", () => {
|
|
293
|
+
class Service {}
|
|
294
|
+
|
|
295
|
+
const parent = new Injector();
|
|
296
|
+
const child = new Injector({ parent });
|
|
297
|
+
|
|
298
|
+
const a = child.inject(Service, { singleton: false });
|
|
299
|
+
const b = child.inject(Service, { singleton: false });
|
|
300
|
+
|
|
301
|
+
assert.notEqual(a, b);
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
it("should assign injector name from options", () => {
|
|
305
|
+
const app = new Injector({ name: "app" });
|
|
306
|
+
|
|
307
|
+
assert.equal(app.name, "app");
|
|
308
|
+
});
|
package/src/lib/injector.ts
CHANGED
|
@@ -39,11 +39,12 @@ export class Injector {
|
|
|
39
39
|
// keep track of instances. One Token can have one instance
|
|
40
40
|
#instances = new WeakMap<InjectionToken<any>, any>();
|
|
41
41
|
|
|
42
|
-
name?: string;
|
|
43
|
-
parent?: Injector;
|
|
42
|
+
name?: string | undefined;
|
|
43
|
+
parent?: Injector | undefined;
|
|
44
44
|
providers: ProviderMap;
|
|
45
45
|
|
|
46
46
|
constructor(opts?: InjectorOpts) {
|
|
47
|
+
this.name = opts?.name;
|
|
47
48
|
this.parent = opts?.parent;
|
|
48
49
|
this.providers = new ProviderMap(opts?.providers);
|
|
49
50
|
}
|
|
@@ -63,7 +64,10 @@ export class Injector {
|
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
// resolves and retuns and instance of the requested service
|
|
66
|
-
inject<T>(
|
|
67
|
+
inject<T>(
|
|
68
|
+
token: InjectionToken<T>,
|
|
69
|
+
opts?: { ignoreParent?: boolean | undefined; singleton?: boolean | undefined },
|
|
70
|
+
): T {
|
|
67
71
|
// check for a local instance
|
|
68
72
|
if (opts?.singleton !== false && this.#instances.has(token)) {
|
|
69
73
|
const instance = this.#instances.get(token);
|
|
@@ -96,7 +100,7 @@ export class Injector {
|
|
|
96
100
|
|
|
97
101
|
// check for a parent and attempt to get there
|
|
98
102
|
if (this.parent && opts?.ignoreParent !== true) {
|
|
99
|
-
return this.parent.inject(token);
|
|
103
|
+
return this.parent.inject(token, opts);
|
|
100
104
|
}
|
|
101
105
|
|
|
102
106
|
if (token instanceof StaticToken) {
|
|
@@ -4,7 +4,8 @@ import { inject } from "./inject.js";
|
|
|
4
4
|
import { injectable } from "./injectable.js";
|
|
5
5
|
import { Injector } from "./injector.js";
|
|
6
6
|
import { created, injected } from "./lifecycle.js";
|
|
7
|
-
import {
|
|
7
|
+
import { readInjector } from "./metadata.js";
|
|
8
|
+
import type { LifecycleCallback } from "./metadata.js";
|
|
8
9
|
import { StaticToken } from "./provider.js";
|
|
9
10
|
|
|
10
11
|
it("should call onInit and onInject when a service is first created", () => {
|
|
@@ -59,10 +60,10 @@ it("should pass the injector to all lifecycle callbacks", () => {
|
|
|
59
60
|
const service = i.inject(MyService);
|
|
60
61
|
const injector = readInjector(service);
|
|
61
62
|
|
|
62
|
-
assert.equal(service.res[0]
|
|
63
|
-
assert.equal(service.res[0]
|
|
64
|
-
assert.equal(service.res[1]
|
|
65
|
-
assert.equal(service.res[1]
|
|
63
|
+
assert.equal(service.res[0]!, injector);
|
|
64
|
+
assert.equal(service.res[0]!.parent, i);
|
|
65
|
+
assert.equal(service.res[1]!, injector);
|
|
66
|
+
assert.equal(service.res[1]!.parent, i);
|
|
66
67
|
});
|
|
67
68
|
|
|
68
69
|
it("should call onInject any time a service is returned", () => {
|
|
@@ -246,7 +247,6 @@ it("should execute callbacks when condition returns empty object", () => {
|
|
|
246
247
|
});
|
|
247
248
|
});
|
|
248
249
|
|
|
249
|
-
|
|
250
250
|
it("should pass the injector to the condition", () => {
|
|
251
251
|
const IS_PROD = new StaticToken("isProd", () => false);
|
|
252
252
|
|
|
@@ -291,4 +291,4 @@ it("should pass the instance to the condition", () => {
|
|
|
291
291
|
|
|
292
292
|
const service = i.inject(MyService);
|
|
293
293
|
assert.equal(service.count, 0); // not called because instance.enabled is false
|
|
294
|
-
});
|
|
294
|
+
});
|
package/src/lib/lifecycle.ts
CHANGED
|
@@ -13,10 +13,7 @@ export function injected<T>(condition?: LifecycleCondition<T>) {
|
|
|
13
13
|
): void {
|
|
14
14
|
const metadata: InjectableMetadata<T> = ctx.metadata;
|
|
15
15
|
metadata.onInjected ??= [];
|
|
16
|
-
metadata.onInjected.push({
|
|
17
|
-
callback: val,
|
|
18
|
-
condition,
|
|
19
|
-
});
|
|
16
|
+
metadata.onInjected.push({ callback: val, condition });
|
|
20
17
|
};
|
|
21
18
|
}
|
|
22
19
|
|
|
@@ -27,10 +24,7 @@ export function created<T>(condition?: LifecycleCondition<T>) {
|
|
|
27
24
|
): void {
|
|
28
25
|
const metadata: InjectableMetadata<T> = ctx.metadata;
|
|
29
26
|
metadata.onCreated ??= [];
|
|
30
|
-
metadata.onCreated.push({
|
|
31
|
-
callback: val,
|
|
32
|
-
condition,
|
|
33
|
-
});
|
|
27
|
+
metadata.onCreated.push({ callback: val, condition });
|
|
34
28
|
};
|
|
35
29
|
}
|
|
36
30
|
|
|
@@ -47,7 +41,7 @@ export function callLifecycle(
|
|
|
47
41
|
continue;
|
|
48
42
|
}
|
|
49
43
|
}
|
|
50
|
-
callback
|
|
44
|
+
callback?.call(instance, injector);
|
|
51
45
|
}
|
|
52
46
|
}
|
|
53
47
|
}
|
package/src/lib/metadata.ts
CHANGED
|
@@ -5,16 +5,18 @@ import type { InjectionToken } from "./provider.js";
|
|
|
5
5
|
|
|
6
6
|
export type LifecycleCallback = (i: Injector) => void;
|
|
7
7
|
|
|
8
|
-
export type LifecycleCondition<T> = (ctx:{injector: Injector
|
|
8
|
+
export type LifecycleCondition<T> = (ctx: { injector: Injector; instance: T }) => {
|
|
9
|
+
enabled?: boolean | undefined;
|
|
10
|
+
};
|
|
9
11
|
|
|
10
12
|
export interface LifecycleMethod<T> {
|
|
11
|
-
callback
|
|
12
|
-
condition?: LifecycleCondition<T
|
|
13
|
+
callback?: LifecycleCallback | undefined;
|
|
14
|
+
condition?: LifecycleCondition<T> | undefined;
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
export interface InjectableMetadata<T> {
|
|
16
|
-
onCreated?: LifecycleMethod<T>[];
|
|
17
|
-
onInjected?: LifecycleMethod<T>[];
|
|
18
|
+
onCreated?: LifecycleMethod<T>[] | undefined;
|
|
19
|
+
onInjected?: LifecycleMethod<T>[] | undefined;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
export function readMetadata<T>(target: InjectionToken<T>): InjectableMetadata<T> | null {
|
package/src/lib/provider.ts
CHANGED
package/src/lib.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export { Injector } from "./lib/injector.js";
|
|
2
2
|
export {
|
|
3
|
-
Provider,
|
|
4
|
-
ConstructableToken,
|
|
3
|
+
type Provider,
|
|
4
|
+
type ConstructableToken,
|
|
5
5
|
StaticToken,
|
|
6
|
-
InjectionToken,
|
|
6
|
+
type InjectionToken,
|
|
7
7
|
} from "./lib/provider.js";
|
|
8
8
|
export { injectable } from "./lib/injectable.js";
|
|
9
|
-
export { inject, injectAll, Injected } from "./lib/inject.js";
|
|
9
|
+
export { inject, injectAll, type Injected } from "./lib/inject.js";
|
|
10
10
|
export { injected, created } from "./lib/lifecycle.js";
|
|
11
11
|
export { DOMInjector } from "./lib/dom/dom-injector.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injector.d.ts","sourceRoot":"","sources":["../../../src/lib/context/injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAiB,MAAM,eAAe,CAAC;AAE5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,eAAO,MAAM,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,CAC5B,CAAC"}
|
|
@@ -6,16 +6,47 @@ declare global {
|
|
|
6
6
|
"context-request": ContextRequestEvent<Context<unknown, unknown>>;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* A context key.
|
|
11
|
+
*
|
|
12
|
+
* A context key can be any type of object, including strings and symbols. The
|
|
13
|
+
* Context type brands the key type with the `__context__` property that
|
|
14
|
+
* carries the type of the value the context references.
|
|
15
|
+
*/
|
|
9
16
|
export type Context<KeyType, ValueType> = KeyType & {
|
|
10
17
|
__context__: ValueType;
|
|
11
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* An unknown context type
|
|
21
|
+
*/
|
|
12
22
|
export type UnknownContext = Context<unknown, unknown>;
|
|
23
|
+
/**
|
|
24
|
+
* A helper type which can extract a Context value type from a Context type
|
|
25
|
+
*/
|
|
13
26
|
export type ContextType<T extends UnknownContext> = T extends Context<infer _, infer V> ? V : never;
|
|
27
|
+
/**
|
|
28
|
+
* A function which creates a Context value object
|
|
29
|
+
*/
|
|
14
30
|
export declare function createContext<KeyType, ValueType>(key: KeyType): Context<KeyType, ValueType>;
|
|
31
|
+
/**
|
|
32
|
+
* A callback which is provided by a context requester and is called with the value satisfying the request.
|
|
33
|
+
* This callback can be called multiple times by context providers as the requested value is changed.
|
|
34
|
+
*/
|
|
15
35
|
export type ContextCallback<ValueType> = (value: ValueType, unsubscribe?: () => void) => void;
|
|
36
|
+
/**
|
|
37
|
+
* An event fired by a context requester to signal it desires a named context.
|
|
38
|
+
*
|
|
39
|
+
* A provider should inspect the `context` property of the event to determine if it has a value that can
|
|
40
|
+
* satisfy the request, calling the `callback` with the requested value if so.
|
|
41
|
+
*
|
|
42
|
+
* If the requested context event contains a truthy `subscribe` value, then a provider can call the callback
|
|
43
|
+
* multiple times if the value is changed, if this is the case the provider should pass an `unsubscribe`
|
|
44
|
+
* function to the callback which requesters can invoke to indicate they no longer wish to receive these updates.
|
|
45
|
+
*/
|
|
16
46
|
export declare class ContextRequestEvent<T extends UnknownContext> extends Event {
|
|
17
47
|
context: T;
|
|
18
48
|
callback: ContextCallback<ContextType<T>>;
|
|
19
|
-
subscribe?: boolean;
|
|
49
|
+
subscribe?: boolean | undefined;
|
|
20
50
|
constructor(context: T, callback: ContextCallback<ContextType<T>>, subscribe?: boolean);
|
|
21
51
|
}
|
|
52
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/lib/context/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,eAAe;QACvB,iBAAiB,EAAE,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;KACnE;IACD,UAAU,gBAAgB;QACxB,iBAAiB,EAAE,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;KACnE;CACF;AAED;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,OAAO,GAAG;IAAE,WAAW,EAAE,SAAS,CAAA;CAAE,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,cAAc,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEpG;;GAEG;AAEH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAC9C,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAC1C;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AAE9F;;;;;;;;;GASG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,KAAK;IACtE,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;gBAEb,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,OAAO;CAO9F"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A function which creates a Context value object
|
|
3
|
+
*/
|
|
1
4
|
export function createContext(key) {
|
|
2
5
|
return key;
|
|
3
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* An event fired by a context requester to signal it desires a named context.
|
|
9
|
+
*
|
|
10
|
+
* A provider should inspect the `context` property of the event to determine if it has a value that can
|
|
11
|
+
* satisfy the request, calling the `callback` with the requested value if so.
|
|
12
|
+
*
|
|
13
|
+
* If the requested context event contains a truthy `subscribe` value, then a provider can call the callback
|
|
14
|
+
* multiple times if the value is changed, if this is the case the provider should pass an `unsubscribe`
|
|
15
|
+
* function to the callback which requesters can invoke to indicate they no longer wish to receive these updates.
|
|
16
|
+
*/
|
|
4
17
|
export class ContextRequestEvent extends Event {
|
|
5
18
|
context;
|
|
6
19
|
callback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/lib/context/protocol.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/lib/context/protocol.ts"],"names":[],"mappings":"AA4BA;;GAEG;AAEH,MAAM,UAAU,aAAa,CAAqB,GAAY;IAC5D,OAAO,GAAkC,CAAC;AAC5C,CAAC;AAQD;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAA8C,SAAQ,KAAK;IACtE,OAAO,CAAI;IACX,QAAQ,CAAkC;IAC1C,SAAS,CAAuB;IAEhC,YAAmB,OAAU,EAAE,QAAyC,EAAE,SAAmB;QAC3F,KAAK,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { Injector } from "../injector.js";
|
|
2
|
+
/**
|
|
3
|
+
* Special Injector that allows you to register an injector with a particular DOM element.
|
|
4
|
+
*/
|
|
2
5
|
export declare class DOMInjector extends Injector {
|
|
3
6
|
#private;
|
|
4
7
|
get isAttached(): boolean;
|
|
5
8
|
attach(element: Document | HTMLElement): void;
|
|
6
9
|
detach(): void;
|
|
7
10
|
}
|
|
11
|
+
//# sourceMappingURL=dom-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-injector.d.ts","sourceRoot":"","sources":["../../../src/lib/dom/dom-injector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;GAEG;AACH,qBAAa,WAAY,SAAQ,QAAQ;;IAIvC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,WAAW,GAAG,IAAI;IAmC7C,MAAM,IAAI,IAAI;CAOf"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { INJECTOR_CTX } from "../context/injector.js";
|
|
2
2
|
import { ContextRequestEvent } from "../context/protocol.js";
|
|
3
3
|
import { INJECTOR, Injector } from "../injector.js";
|
|
4
|
+
/**
|
|
5
|
+
* Special Injector that allows you to register an injector with a particular DOM element.
|
|
6
|
+
*/
|
|
4
7
|
export class DOMInjector extends Injector {
|
|
5
8
|
#element = null;
|
|
6
9
|
#controller = null;
|
|
@@ -1 +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,EAAE,mBAAmB,EAAuB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
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,EAAE,mBAAmB,EAAuB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,QAAQ,GAAkC,IAAI,CAAC;IAC/C,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,OAA+B;QACpC,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,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC5B,iBAAiB,EACjB,CAAC,KAAK,EAAE,EAAE;YACR,MAAM,CAAC,GAAG,KAA4C,CAAC;YAEvD,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-injector.test.d.ts","sourceRoot":"","sources":["../../../src/lib/dom/dom-injector.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,37 @@
|
|
|
1
|
-
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
2
35
|
import { assert } from "chai";
|
|
3
36
|
import { INJECTOR_CTX } from "../context/injector.js";
|
|
4
37
|
import { ContextRequestEvent } from "../context/protocol.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-injector.test.js","sourceRoot":"","sources":["../../../src/lib/dom/dom-injector.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dom-injector.test.js","sourceRoot":"","sources":["../../../src/lib/dom/dom-injector.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable-el.d.ts","sourceRoot":"","sources":["../../../src/lib/dom/injectable-el.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC;AAElE,wBAAgB,YAAY,CAAC,CAAC,SAAS,kBAAkB,CAAC,YAAY,CAAC,EACrE,IAAI,EAAE,CAAC,EACP,GAAG,EAAE,qBAAqB,GACzB,CAAC,CAiDH"}
|
|
@@ -27,6 +27,9 @@ export function injectableEl(Base, ctx) {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
disconnectedCallback() {
|
|
30
|
+
// super disconnect needs to be called first.
|
|
31
|
+
// If not the context could be different since the element will be removed from the injector chain.
|
|
32
|
+
// This leads to unexpected behaviors.
|
|
30
33
|
if (super.disconnectedCallback) {
|
|
31
34
|
super.disconnectedCallback();
|
|
32
35
|
}
|
|
@@ -1 +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;AAMhD,MAAM,UAAU,YAAY,CAC1B,IAAO,EACP,GAA0B;IAE1B,MAAM,QAAQ,GAAqC,GAAG,CAAC,QAAQ,CAAC;IAEhE,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;
|
|
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;AAMhD,MAAM,UAAU,YAAY,CAC1B,IAAO,EACP,GAA0B;IAE1B,MAAM,QAAQ,GAAqC,GAAG,CAAC,QAAQ,CAAC;IAEhE,MAAM,GAAG,GAAG;QACV,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAM,SAAQ,IAAI;YAC7B,YAAY,GAAG,CAAQ;gBACrB,KAAK,EAAE,CAAC;gBAER,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEhC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC7C,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;wBACpD,CAAC,CAAC,eAAe,EAAE,CAAC;wBAEpB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACrD,CAAC;YAED,iBAAiB;gBACf,IAAI,CAAC,aAAa,CAChB,IAAI,mBAAmB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC5C,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC;gBAC9B,CAAC,CAAC,CACH,CAAC;gBAEF,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAE1D,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,oBAAoB;gBAClB,6CAA6C;gBAC7C,mGAAmG;gBACnG,sCAAsC;gBACtC,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,CAAM,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable-el.test.d.ts","sourceRoot":"","sources":["../../../src/lib/dom/injectable-el.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,37 @@
|
|
|
1
|
-
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
2
35
|
import { assert } from "chai";
|
|
3
36
|
import { inject } from "../inject.js";
|
|
4
37
|
import { injectable } from "../injectable.js";
|
|
@@ -140,7 +173,7 @@ it("should handle parent HTML Injectors", async () => {
|
|
|
140
173
|
customElements.define("injectable-parent-1", Parent);
|
|
141
174
|
customElements.define("injectable-child-1", Child);
|
|
142
175
|
const el = document.createElement("div");
|
|
143
|
-
el.innerHTML = `
|
|
176
|
+
el.innerHTML = /*html*/ `
|
|
144
177
|
<injectable-parent-1>
|
|
145
178
|
<injectable-child-1></injectable-child-1>
|
|
146
179
|
</injectable-parent-1>
|
|
@@ -218,7 +251,7 @@ it("should handle changing contexts", async () => {
|
|
|
218
251
|
customElements.define("ctx-2", Ctx2);
|
|
219
252
|
customElements.define("ctx-child", Child);
|
|
220
253
|
const el = document.createElement("div");
|
|
221
|
-
el.innerHTML = `
|
|
254
|
+
el.innerHTML = /*html*/ `
|
|
222
255
|
<div>
|
|
223
256
|
<ctx-1>
|
|
224
257
|
<ctx-child></ctx-child>
|
|
@@ -310,11 +343,14 @@ it("should call disconnectedCallback when element is removed from DOM", async ()
|
|
|
310
343
|
})();
|
|
311
344
|
customElements.define("test-disconnect", TestElement);
|
|
312
345
|
const el = new TestElement();
|
|
346
|
+
// Initially, neither callback should have been called
|
|
313
347
|
assert.isFalse(el.connectedCalled);
|
|
314
348
|
assert.isFalse(el.disconnectedCalled);
|
|
349
|
+
// Add to DOM - connectedCallback should be called
|
|
315
350
|
document.body.append(el);
|
|
316
351
|
assert.isTrue(el.connectedCalled);
|
|
317
352
|
assert.isFalse(el.disconnectedCalled);
|
|
353
|
+
// Remove from DOM - disconnectedCallback should be called
|
|
318
354
|
el.remove();
|
|
319
355
|
assert.isTrue(el.connectedCalled);
|
|
320
356
|
assert.isTrue(el.disconnectedCalled);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable-el.test.js","sourceRoot":"","sources":["../../../src/lib/dom/injectable-el.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"injectable-el.test.js","sourceRoot":"","sources":["../../../src/lib/dom/injectable-el.test.ts"],"names":[],"mappings":"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"}
|
package/target/lib/inject.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import type { InjectionToken } from "./provider.js";
|
|
2
2
|
export type Injected<T> = () => T;
|
|
3
|
+
/**
|
|
4
|
+
* Injects a service into an `injectable` class.
|
|
5
|
+
*/
|
|
3
6
|
export declare function inject<T>(token: InjectionToken<T>, opts?: {
|
|
4
7
|
singleton?: boolean;
|
|
5
8
|
ignoreParent?: boolean;
|
|
6
9
|
}): Injected<T>;
|
|
10
|
+
/**
|
|
11
|
+
* Finds and injects ALL instances of a service from the current points up.
|
|
12
|
+
*/
|
|
7
13
|
export declare function injectAll<T>(token: InjectionToken<T>, opts?: {
|
|
8
14
|
singleton: boolean;
|
|
9
15
|
}): Injected<T[]>;
|
|
16
|
+
//# sourceMappingURL=inject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAElC;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EACxB,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACrD,QAAQ,CAAC,CAAC,CAAC,CAEb;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EACxB,IAAI,CAAC,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,GAC5B,QAAQ,CAAC,CAAC,EAAE,CAAC,CAEf"}
|
package/target/lib/inject.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { readInjector } from "./metadata.js";
|
|
2
|
+
/**
|
|
3
|
+
* Injects a service into an `injectable` class.
|
|
4
|
+
*/
|
|
2
5
|
export function inject(token, opts) {
|
|
3
6
|
return internalInject((i) => i.inject(token, opts));
|
|
4
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Finds and injects ALL instances of a service from the current points up.
|
|
10
|
+
*/
|
|
5
11
|
export function injectAll(token, opts) {
|
|
6
12
|
return internalInject((i) => i.injectAll(token, opts));
|
|
7
13
|
}
|
package/target/lib/inject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK7C;;GAEG;AACH,MAAM,UAAU,MAAM,CACpB,KAAwB,EACxB,IAAsD;IAEtD,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,KAAwB,EACxB,IAA6B;IAE7B,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACzD,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"}
|