@joist/di 4.5.0 → 4.7.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 +60 -0
- package/src/lib/injector.ts +12 -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 +25 -4
- package/target/lib/injector.d.ts.map +1 -0
- package/target/lib/injector.js +41 -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 +85 -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/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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.test.d.ts","sourceRoot":"","sources":["../../src/lib/inject.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, injectAll } from "./inject.js";
|
|
4
37
|
import { injectable } from "./injectable.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.test.js","sourceRoot":"","sources":["../../src/lib/inject.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inject.test.js","sourceRoot":"","sources":["../../src/lib/inject.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.d.ts","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAElF,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;CACvC;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,cAAc,IACV,CAAC,SAAS,kBAAkB,CAAC,GAAG,CAAC,EACnE,MAAM,CAAC,EACP,KAAK,qBAAqB,KACzB,CAAC,CAwCL"}
|
package/target/lib/injectable.js
CHANGED
|
@@ -21,12 +21,17 @@ export function injectable(opts) {
|
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
};
|
|
24
|
+
const injectableBase = def[Base.name];
|
|
25
|
+
if (!injectableBase) {
|
|
26
|
+
throw new Error(`Failed to create injectable class for ${Base.name}`);
|
|
27
|
+
}
|
|
28
|
+
// Only apply custom element bootstrap logic if the decorated class is an HTMLElement
|
|
24
29
|
if ("HTMLElement" in globalThis) {
|
|
25
30
|
if (Object.prototype.isPrototypeOf.call(HTMLElement.prototype, Base.prototype)) {
|
|
26
|
-
return injectableEl(
|
|
31
|
+
return injectableEl(injectableBase, ctx);
|
|
27
32
|
}
|
|
28
33
|
}
|
|
29
|
-
return
|
|
34
|
+
return injectableBase;
|
|
30
35
|
};
|
|
31
36
|
}
|
|
32
37
|
//# sourceMappingURL=injectable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AASnD,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;QAEF,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,qFAAqF;QACrF,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;YAChC,IAAI,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/E,OAAO,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.test.d.ts","sourceRoot":"","sources":["../../src/lib/injectable.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";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.test.js","sourceRoot":"","sources":["../../src/lib/injectable.test.ts"],"names":[],"mappings":"
|
|
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"}
|
package/target/lib/injector.d.ts
CHANGED
|
@@ -7,19 +7,40 @@ export interface InjectorOpts {
|
|
|
7
7
|
export declare const INJECTOR: unique symbol;
|
|
8
8
|
export declare class ProviderMap extends Map<InjectionToken<any>, ProviderDef<any>> {
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Injectors create and store instances of services.
|
|
12
|
+
* A service is any constructable class.
|
|
13
|
+
* When calling Injector.get, the injector will resolve as following.
|
|
14
|
+
*
|
|
15
|
+
* 1. Do I have a cached instance locally?
|
|
16
|
+
* 2. Do I have a local provider definition for the token?
|
|
17
|
+
* 3. Do I have a parent? Check parent for 1 and 2
|
|
18
|
+
* 5. All clear, go ahead and construct and cache the requested service
|
|
19
|
+
* ```
|
|
20
|
+
* RootInjector |--> InjectorA |--> InjectorB
|
|
21
|
+
* |--> InjectorC
|
|
22
|
+
* |--> InjectorD |--> InjectorE
|
|
23
|
+
* ```
|
|
24
|
+
* in the above tree, if InjectorE requests a service, it will navigate up to the RootInjector and cache.
|
|
25
|
+
* If Inject B then requests the same token, it will recieve the same cached instance from RootInjector.
|
|
26
|
+
*/
|
|
10
27
|
export declare class Injector {
|
|
11
28
|
#private;
|
|
12
|
-
name?: string;
|
|
13
|
-
parent?: Injector;
|
|
29
|
+
name?: string | undefined;
|
|
30
|
+
parent?: Injector | undefined;
|
|
14
31
|
providers: ProviderMap;
|
|
15
32
|
constructor(opts?: InjectorOpts);
|
|
16
33
|
injectAll<T>(token: InjectionToken<T>, opts?: {
|
|
17
34
|
ignoreParent?: boolean;
|
|
18
35
|
singleton?: boolean;
|
|
19
36
|
}, collection?: T[]): T[];
|
|
20
|
-
|
|
37
|
+
injectOnce<T>(token: InjectionToken<T>, opts?: {
|
|
21
38
|
ignoreParent?: boolean;
|
|
22
|
-
|
|
39
|
+
}): T;
|
|
40
|
+
inject<T>(token: InjectionToken<T>, opts?: {
|
|
41
|
+
ignoreParent?: boolean | undefined;
|
|
42
|
+
singleton?: boolean | undefined;
|
|
23
43
|
}): T;
|
|
24
44
|
clear(): void;
|
|
25
45
|
}
|
|
46
|
+
//# sourceMappingURL=injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injector.d.ts","sourceRoot":"","sources":["../../src/lib/injector.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,WAAW,EAGjB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,eAAO,MAAM,QAAQ,EAAE,OAAO,MAAiC,CAAC;AAEhE,qBAAa,WAAY,SAAQ,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;CAAG;AAE9E;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,QAAQ;;IAInB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,WAAW,CAAC;gBAEX,IAAI,CAAC,EAAE,YAAY;IAM/B,SAAS,CAAC,CAAC,EACT,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EACxB,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EACtD,UAAU,GAAE,CAAC,EAAO,GACnB,CAAC,EAAE;IAUN,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,CAAC;IAK7E,MAAM,CAAC,CAAC,EACN,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EACxB,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,GAC7E,CAAC;IA+CJ,KAAK,IAAI,IAAI;CAgDd"}
|
package/target/lib/injector.js
CHANGED
|
@@ -4,12 +4,31 @@ import { StaticToken, } from "./provider.js";
|
|
|
4
4
|
export const INJECTOR = Symbol("JOIST_INJECTOR");
|
|
5
5
|
export class ProviderMap extends Map {
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Injectors create and store instances of services.
|
|
9
|
+
* A service is any constructable class.
|
|
10
|
+
* When calling Injector.get, the injector will resolve as following.
|
|
11
|
+
*
|
|
12
|
+
* 1. Do I have a cached instance locally?
|
|
13
|
+
* 2. Do I have a local provider definition for the token?
|
|
14
|
+
* 3. Do I have a parent? Check parent for 1 and 2
|
|
15
|
+
* 5. All clear, go ahead and construct and cache the requested service
|
|
16
|
+
* ```
|
|
17
|
+
* RootInjector |--> InjectorA |--> InjectorB
|
|
18
|
+
* |--> InjectorC
|
|
19
|
+
* |--> InjectorD |--> InjectorE
|
|
20
|
+
* ```
|
|
21
|
+
* in the above tree, if InjectorE requests a service, it will navigate up to the RootInjector and cache.
|
|
22
|
+
* If Inject B then requests the same token, it will recieve the same cached instance from RootInjector.
|
|
23
|
+
*/
|
|
7
24
|
export class Injector {
|
|
25
|
+
// keep track of instances. One Token can have one instance
|
|
8
26
|
#instances = new WeakMap();
|
|
9
27
|
name;
|
|
10
28
|
parent;
|
|
11
29
|
providers;
|
|
12
30
|
constructor(opts) {
|
|
31
|
+
this.name = opts?.name;
|
|
13
32
|
this.parent = opts?.parent;
|
|
14
33
|
this.providers = new ProviderMap(opts?.providers);
|
|
15
34
|
}
|
|
@@ -20,7 +39,12 @@ export class Injector {
|
|
|
20
39
|
}
|
|
21
40
|
return collection;
|
|
22
41
|
}
|
|
42
|
+
injectOnce(token, opts) {
|
|
43
|
+
return this.inject(token, { ignoreParent: opts?.ignoreParent, singleton: false });
|
|
44
|
+
}
|
|
45
|
+
// resolves and retuns and instance of the requested service
|
|
23
46
|
inject(token, opts) {
|
|
47
|
+
// check for a local instance
|
|
24
48
|
if (opts?.singleton !== false && this.#instances.has(token)) {
|
|
25
49
|
const instance = this.#instances.get(token);
|
|
26
50
|
const metadata = readMetadata(token);
|
|
@@ -32,6 +56,7 @@ export class Injector {
|
|
|
32
56
|
}
|
|
33
57
|
const provider = this.providers.get(token);
|
|
34
58
|
const createOpts = { singleton: opts?.singleton !== false };
|
|
59
|
+
// check for a provider definition
|
|
35
60
|
if (provider) {
|
|
36
61
|
if ("use" in provider) {
|
|
37
62
|
return this.#createAndCache(token, () => new provider.use(), createOpts);
|
|
@@ -41,8 +66,9 @@ export class Injector {
|
|
|
41
66
|
}
|
|
42
67
|
throw new Error(`Provider for ${token.name} found but is missing either 'use' or 'factory'`);
|
|
43
68
|
}
|
|
69
|
+
// check for a parent and attempt to get there
|
|
44
70
|
if (this.parent && opts?.ignoreParent !== true) {
|
|
45
|
-
return this.parent.inject(token);
|
|
71
|
+
return this.parent.inject(token, opts);
|
|
46
72
|
}
|
|
47
73
|
if (token instanceof StaticToken) {
|
|
48
74
|
if (!token.factory) {
|
|
@@ -60,13 +86,27 @@ export class Injector {
|
|
|
60
86
|
if (opts.singleton !== false) {
|
|
61
87
|
this.#instances.set(token, instance);
|
|
62
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Only values that are objects are able to have associated injectors
|
|
91
|
+
*/
|
|
63
92
|
const injector = readInjector(instance);
|
|
64
93
|
if (!injector) {
|
|
65
94
|
return instance;
|
|
66
95
|
}
|
|
67
96
|
if (injector !== this) {
|
|
97
|
+
/**
|
|
98
|
+
* set the this injector instance as a parent.
|
|
99
|
+
* This should ONLY happen in the injector is not self. This would cause an infinite loop.
|
|
100
|
+
* this means that each calling injector will be the parent of what it creates.
|
|
101
|
+
* this allows the created service to navigate up it's chain to find a root
|
|
102
|
+
*/
|
|
68
103
|
injector.parent = this;
|
|
69
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* the onInject and onInit lifecycle hook should be called after the parent is defined.
|
|
107
|
+
* this ensures that services are initialized when the chain is settled
|
|
108
|
+
* this is required since the parent is set after the instance is constructed
|
|
109
|
+
*/
|
|
70
110
|
const metadata = readMetadata(token);
|
|
71
111
|
if (metadata) {
|
|
72
112
|
callLifecycle(instance ?? this, injector, metadata.onCreated);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/lib/injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAKL,WAAW,GACZ,MAAM,eAAe,CAAC;AAQvB,MAAM,CAAC,MAAM,QAAQ,GAAkB,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEhE,MAAM,OAAO,WAAY,SAAQ,GAA0C;CAAG;
|
|
1
|
+
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/lib/injector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injector.test.d.ts","sourceRoot":"","sources":["../../src/lib/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 { inject } from "./inject.js";
|
|
4
37
|
import { injectable } from "./injectable.js";
|
|
@@ -276,7 +309,9 @@ it("should respect skipParent option when injecting", () => {
|
|
|
276
309
|
],
|
|
277
310
|
});
|
|
278
311
|
const child = new Injector({ parent });
|
|
312
|
+
// Without skipParent, should get parent's instance
|
|
279
313
|
assert.equal(child.inject(Service).value, "parent");
|
|
314
|
+
// With skipParent, should get child's instance
|
|
280
315
|
assert.equal(child.inject(Service, { ignoreParent: true }).value, "child");
|
|
281
316
|
});
|
|
282
317
|
it("should handle skipParent with static tokens", () => {
|
|
@@ -285,7 +320,9 @@ it("should handle skipParent with static tokens", () => {
|
|
|
285
320
|
providers: [[TOKEN, { factory: () => "parent-value" }]],
|
|
286
321
|
});
|
|
287
322
|
const child = new Injector({ parent });
|
|
323
|
+
// Without skipParent, should get parent's value
|
|
288
324
|
assert.equal(child.inject(TOKEN), "parent-value");
|
|
325
|
+
// With skipParent, should get child's value
|
|
289
326
|
assert.equal(child.inject(TOKEN, { ignoreParent: true }), "child-value");
|
|
290
327
|
});
|
|
291
328
|
it("should handle StaticToken with null/undefined factory", () => {
|
|
@@ -307,4 +344,51 @@ it("should create a non singleton instance", () => {
|
|
|
307
344
|
assert(app.inject(A) instanceof A);
|
|
308
345
|
assert.notEqual(app.inject(A, { singleton: false }), app.inject(A, { singleton: false }));
|
|
309
346
|
});
|
|
347
|
+
it("should forward singleton option to parent injector", () => {
|
|
348
|
+
class Service {
|
|
349
|
+
}
|
|
350
|
+
const parent = new Injector();
|
|
351
|
+
const child = new Injector({ parent });
|
|
352
|
+
const a = child.inject(Service, { singleton: false });
|
|
353
|
+
const b = child.inject(Service, { singleton: false });
|
|
354
|
+
assert.notEqual(a, b);
|
|
355
|
+
});
|
|
356
|
+
it("should assign injector name from options", () => {
|
|
357
|
+
const app = new Injector({ name: "app" });
|
|
358
|
+
assert.equal(app.name, "app");
|
|
359
|
+
});
|
|
360
|
+
it("should create a new instance each time with injectOnce", () => {
|
|
361
|
+
class Service {
|
|
362
|
+
}
|
|
363
|
+
const app = new Injector();
|
|
364
|
+
const first = app.injectOnce(Service);
|
|
365
|
+
const second = app.injectOnce(Service);
|
|
366
|
+
assert(first instanceof Service);
|
|
367
|
+
assert(second instanceof Service);
|
|
368
|
+
assert.notEqual(first, second);
|
|
369
|
+
});
|
|
370
|
+
it("should respect ignoreParent option in injectOnce", () => {
|
|
371
|
+
class Service {
|
|
372
|
+
value = "child";
|
|
373
|
+
}
|
|
374
|
+
const parent = new Injector({
|
|
375
|
+
providers: [
|
|
376
|
+
[
|
|
377
|
+
Service,
|
|
378
|
+
{
|
|
379
|
+
use: class extends Service {
|
|
380
|
+
value = "parent";
|
|
381
|
+
},
|
|
382
|
+
},
|
|
383
|
+
],
|
|
384
|
+
],
|
|
385
|
+
});
|
|
386
|
+
const child = new Injector({ parent });
|
|
387
|
+
// Without ignoreParent, should create new instance from parent's provider
|
|
388
|
+
const parentInstance = child.injectOnce(Service);
|
|
389
|
+
assert.equal(parentInstance.value, "parent");
|
|
390
|
+
// With ignoreParent, should create new instance from child's provider
|
|
391
|
+
const childInstance = child.injectOnce(Service, { ignoreParent: true });
|
|
392
|
+
assert.equal(childInstance.value, "child");
|
|
393
|
+
});
|
|
310
394
|
//# sourceMappingURL=injector.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injector.test.js","sourceRoot":"","sources":["../../src/lib/injector.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"injector.test.js","sourceRoot":"","sources":["../../src/lib/injector.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,3 +3,4 @@ import type { LifecycleCallback, LifecycleCondition, LifecycleMethod } from "./m
|
|
|
3
3
|
export declare function injected<T>(condition?: LifecycleCondition<T>): (val: LifecycleCallback, ctx: ClassMethodDecoratorContext<T>) => void;
|
|
4
4
|
export declare function created<T>(condition?: LifecycleCondition<T>): (val: LifecycleCallback, ctx: ClassMethodDecoratorContext<T>) => void;
|
|
5
5
|
export declare function callLifecycle(instance: object, injector: Injector, methods?: LifecycleMethod<any>[]): void;
|
|
6
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/lib/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAChB,MAAM,eAAe,CAAC;AAEvB,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAEzD,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,CAAC,CAAC,CAAC,KAClC,IAAI,CAKR;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAExD,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,CAAC,CAAC,CAAC,KAClC,IAAI,CAKR;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,GAC/B,IAAI,CAYN"}
|
package/target/lib/lifecycle.js
CHANGED
|
@@ -2,20 +2,14 @@ export function injected(condition) {
|
|
|
2
2
|
return function onInjectDecorator(val, ctx) {
|
|
3
3
|
const metadata = ctx.metadata;
|
|
4
4
|
metadata.onInjected ??= [];
|
|
5
|
-
metadata.onInjected.push({
|
|
6
|
-
callback: val,
|
|
7
|
-
condition,
|
|
8
|
-
});
|
|
5
|
+
metadata.onInjected.push({ callback: val, condition });
|
|
9
6
|
};
|
|
10
7
|
}
|
|
11
8
|
export function created(condition) {
|
|
12
9
|
return function onInjectDecorator(val, ctx) {
|
|
13
10
|
const metadata = ctx.metadata;
|
|
14
11
|
metadata.onCreated ??= [];
|
|
15
|
-
metadata.onCreated.push({
|
|
16
|
-
callback: val,
|
|
17
|
-
condition,
|
|
18
|
-
});
|
|
12
|
+
metadata.onCreated.push({ callback: val, condition });
|
|
19
13
|
};
|
|
20
14
|
}
|
|
21
15
|
export function callLifecycle(instance, injector, methods) {
|
|
@@ -27,7 +21,7 @@ export function callLifecycle(instance, injector, methods) {
|
|
|
27
21
|
continue;
|
|
28
22
|
}
|
|
29
23
|
}
|
|
30
|
-
callback
|
|
24
|
+
callback?.call(instance, injector);
|
|
31
25
|
}
|
|
32
26
|
}
|
|
33
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/lib/lifecycle.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,QAAQ,CAAI,SAAiC;IAC3D,OAAO,SAAS,iBAAiB,CAC/B,GAAsB,EACtB,GAAmC;QAEnC,MAAM,QAAQ,GAA0B,GAAG,CAAC,QAAQ,CAAC;QACrD,QAAQ,CAAC,UAAU,KAAK,EAAE,CAAC;QAC3B,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/lib/lifecycle.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,QAAQ,CAAI,SAAiC;IAC3D,OAAO,SAAS,iBAAiB,CAC/B,GAAsB,EACtB,GAAmC;QAEnC,MAAM,QAAQ,GAA0B,GAAG,CAAC,QAAQ,CAAC;QACrD,QAAQ,CAAC,UAAU,KAAK,EAAE,CAAC;QAC3B,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,SAAiC;IAC1D,OAAO,SAAS,iBAAiB,CAC/B,GAAsB,EACtB,GAAmC;QAEnC,MAAM,QAAQ,GAA0B,GAAG,CAAC,QAAQ,CAAC;QACrD,QAAQ,CAAC,SAAS,KAAK,EAAE,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,QAAkB,EAClB,OAAgC;IAEhC,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,OAAO,EAAE,CAAC;YAC9C,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACjD,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;oBAC7B,SAAS;gBACX,CAAC;YACH,CAAC;YACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.test.d.ts","sourceRoot":"","sources":["../../src/lib/lifecycle.test.ts"],"names":[],"mappings":""}
|