@joist/di 3.9.1-next.0 → 3.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -35
- package/package.json +1 -1
- package/src/lib/environment.test.ts +30 -0
- package/src/lib/environment.ts +21 -0
- package/src/lib/inject.ts +2 -4
- package/src/lib/injectable-map.ts +11 -1
- package/src/lib/injectable.ts +4 -4
- package/src/lib/injector.ts +3 -1
- package/src/lib.ts +2 -2
- package/target/lib/environment.d.ts +5 -0
- package/target/lib/environment.js +16 -0
- package/target/lib/environment.js.map +1 -0
- package/target/lib/environment.test.js +54 -0
- package/target/lib/environment.test.js.map +1 -0
- package/target/lib/inject.js +1 -1
- package/target/lib/inject.js.map +1 -1
- package/target/lib/injectable-map.d.ts +4 -1
- package/target/lib/injectable-map.js +8 -1
- package/target/lib/injectable-map.js.map +1 -1
- package/target/lib/injectable.d.ts +0 -2
- package/target/lib/injectable.js +5 -3
- package/target/lib/injectable.js.map +1 -1
- package/target/lib/injector.d.ts +2 -0
- package/target/lib/injector.js +2 -1
- package/target/lib/injector.js.map +1 -1
- package/target/lib.d.ts +2 -2
- package/target/lib.js +2 -2
- package/target/lib.js.map +1 -1
- package/src/lib/dom-injector.test.ts +0 -30
- package/src/lib/dom-injector.ts +0 -12
- package/target/lib/dom-injector.d.ts +0 -5
- package/target/lib/dom-injector.js +0 -11
- package/target/lib/dom-injector.js.map +0 -1
- package/target/lib/dom-injector.test.js +0 -21
- package/target/lib/dom-injector.test.js.map +0 -1
- /package/target/lib/{dom-injector.test.d.ts → environment.test.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -272,43 +272,9 @@ This behavior allows for services to be "scoped" within a certain branch of the
|
|
|
272
272
|
|
|
273
273
|
## Custom Elements:
|
|
274
274
|
|
|
275
|
-
Joist is built to work with custom elements. Since the document is a tree we can search up that tree for providers.
|
|
276
|
-
|
|
277
|
-
Setting your web page to work is very similar to any other JavaScript environment. There is a special `DOMInjector` class that will allow you to attach an injector to any location in the dom, in most cases this will be document.body.
|
|
275
|
+
Joist is built to work with custom elements. Since the document is a tree we can search up that tree for providers. This is where Hierarchical Injectors can really shine as they allow you to defined React/Preact esq "context" elements.
|
|
278
276
|
|
|
279
277
|
```TS
|
|
280
|
-
const app = new DOMInjector();
|
|
281
|
-
|
|
282
|
-
app.attach(document.body); // anything rendered in the body will have access to this injector.
|
|
283
|
-
|
|
284
|
-
class Colors {
|
|
285
|
-
primary = 'red';
|
|
286
|
-
secodnary = 'green';
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
@injectable
|
|
290
|
-
class MyElement extends HTMLElement {
|
|
291
|
-
#colors = inject(Colors);
|
|
292
|
-
|
|
293
|
-
connectedCallback() {
|
|
294
|
-
const { primary } = this.#colors();
|
|
295
|
-
|
|
296
|
-
this.style.background = primary;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
customElements.define('my-element', MyElement);
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
### Context Elements:
|
|
304
|
-
|
|
305
|
-
Context elements are where Hierarchical Injectors can really shine as they allow you to defined React/Preact esq "context" elements. Since custom elements are treated the same as any other class they can define providers for their local scope.
|
|
306
|
-
|
|
307
|
-
```TS
|
|
308
|
-
const app = new DOMInjector();
|
|
309
|
-
|
|
310
|
-
app.attach(document.body);
|
|
311
|
-
|
|
312
278
|
class Colors {
|
|
313
279
|
primary = 'red';
|
|
314
280
|
secodnary = 'green';
|
package/package.json
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { expect, fixture, html } from '@open-wc/testing';
|
|
2
|
+
|
|
3
|
+
import { Injector } from './injector.js';
|
|
4
|
+
import { environment, clearEnvironment } from './environment.js';
|
|
5
|
+
import { injectable } from './injectable.js';
|
|
6
|
+
import { inject } from './inject.js';
|
|
7
|
+
|
|
8
|
+
describe('environment', () => {
|
|
9
|
+
afterEach(clearEnvironment);
|
|
10
|
+
|
|
11
|
+
it('should create a global Injector instance', () => {
|
|
12
|
+
expect(environment()).to.be.instanceOf(Injector);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('should use the root injector when creating services', async () => {
|
|
16
|
+
@injectable
|
|
17
|
+
class MyService {}
|
|
18
|
+
|
|
19
|
+
@injectable
|
|
20
|
+
class MyElement extends HTMLElement {
|
|
21
|
+
my = inject(MyService);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
customElements.define('env-1', MyElement);
|
|
25
|
+
|
|
26
|
+
const el = await fixture<MyElement>(html`<env-1></env-1>`);
|
|
27
|
+
|
|
28
|
+
expect(el.my()).to.equal(environment().inject(MyService));
|
|
29
|
+
});
|
|
30
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Injector } from './injector.js';
|
|
2
|
+
import { Provider } from './provider.js';
|
|
3
|
+
|
|
4
|
+
let rootInjector: Injector;
|
|
5
|
+
|
|
6
|
+
export function environment(): Injector {
|
|
7
|
+
if (!rootInjector) {
|
|
8
|
+
rootInjector = new Injector();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return rootInjector;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function defineEnvironment(providers: Provider<any>[]) {
|
|
15
|
+
environment().providers = providers;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function clearEnvironment(): void {
|
|
19
|
+
rootInjector.providers = [];
|
|
20
|
+
rootInjector.clear();
|
|
21
|
+
}
|
package/src/lib/inject.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
+
import { INJECTABLE_MAP } from './injector.js';
|
|
1
2
|
import { InjectionToken } from './provider.js';
|
|
2
|
-
import { INJECTABLE_MAP } from './injectable.js';
|
|
3
3
|
|
|
4
4
|
export type Injected<T> = () => T;
|
|
5
5
|
|
|
6
|
-
export function inject<This extends object, T>(
|
|
7
|
-
token: InjectionToken<T>
|
|
8
|
-
): Injected<T> {
|
|
6
|
+
export function inject<This extends object, T>(token: InjectionToken<T>): Injected<T> {
|
|
9
7
|
return function (this: This) {
|
|
10
8
|
const injector = INJECTABLE_MAP.get(this);
|
|
11
9
|
|
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
import { Injector } from './injector.js';
|
|
2
2
|
|
|
3
|
-
export class InjectableMap
|
|
3
|
+
export class InjectableMap {
|
|
4
|
+
#injectables = new WeakMap<object, Injector>();
|
|
5
|
+
|
|
6
|
+
get(key: object) {
|
|
7
|
+
return this.#injectables.get(key);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
set(key: object, injector: Injector) {
|
|
11
|
+
return this.#injectables.set(key, injector);
|
|
12
|
+
}
|
|
13
|
+
}
|
package/src/lib/injectable.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { ConstructableToken } from './provider.js';
|
|
2
|
-
import { Injector } from './injector.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export const INJECTABLE_MAP = new InjectableMap();
|
|
2
|
+
import { INJECTABLE_MAP, Injector } from './injector.js';
|
|
3
|
+
import { environment } from './environment.js';
|
|
6
4
|
|
|
7
5
|
export function injectable<T extends ConstructableToken<any>>(Base: T, _?: unknown) {
|
|
8
6
|
return class InjectableNode extends Base {
|
|
@@ -21,6 +19,8 @@ export function injectable<T extends ConstructableToken<any>>(Base: T, _?: unkno
|
|
|
21
19
|
|
|
22
20
|
if (parentInjector !== null) {
|
|
23
21
|
injector.setParent(parentInjector);
|
|
22
|
+
} else {
|
|
23
|
+
injector.setParent(environment());
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
26
|
}
|
package/src/lib/injector.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InjectableMap } from './injectable-map.js';
|
|
2
2
|
import { LifeCycle } from './lifecycle.js';
|
|
3
3
|
import { InjectionToken, Provider, StaticToken } from './provider.js';
|
|
4
4
|
|
|
5
|
+
export const INJECTABLE_MAP = new InjectableMap();
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* Injectors create and store instances of services.
|
|
7
9
|
* A service is any constructable class.
|
package/src/lib.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { Injector } from './lib/injector.js';
|
|
1
|
+
export { Injector, INJECTABLE_MAP } from './lib/injector.js';
|
|
2
2
|
export { Provider, ConstructableToken, StaticToken } from './lib/provider.js';
|
|
3
3
|
export { injectable } from './lib/injectable.js';
|
|
4
4
|
export { inject, Injected } from './lib/inject.js';
|
|
5
|
+
export { defineEnvironment, clearEnvironment } from './lib/environment.js';
|
|
5
6
|
export { LifeCycle } from './lib/lifecycle.js';
|
|
6
|
-
export { DOMInjector } from './lib/dom-injector.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Injector } from './injector.js';
|
|
2
|
+
let rootInjector;
|
|
3
|
+
export function environment() {
|
|
4
|
+
if (!rootInjector) {
|
|
5
|
+
rootInjector = new Injector();
|
|
6
|
+
}
|
|
7
|
+
return rootInjector;
|
|
8
|
+
}
|
|
9
|
+
export function defineEnvironment(providers) {
|
|
10
|
+
environment().providers = providers;
|
|
11
|
+
}
|
|
12
|
+
export function clearEnvironment() {
|
|
13
|
+
rootInjector.providers = [];
|
|
14
|
+
rootInjector.clear();
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/lib/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,IAAI,YAAsB,CAAC;AAE3B,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,IAAI,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAA0B;IAC1D,WAAW,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;IAC5B,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { expect, fixture, html } from '@open-wc/testing';
|
|
3
|
+
import { Injector } from './injector.js';
|
|
4
|
+
import { environment, clearEnvironment } from './environment.js';
|
|
5
|
+
import { injectable } from './injectable.js';
|
|
6
|
+
import { inject } from './inject.js';
|
|
7
|
+
describe('environment', () => {
|
|
8
|
+
afterEach(clearEnvironment);
|
|
9
|
+
it('should create a global Injector instance', () => {
|
|
10
|
+
expect(environment()).to.be.instanceOf(Injector);
|
|
11
|
+
});
|
|
12
|
+
it('should use the root injector when creating services', async () => {
|
|
13
|
+
let MyService = (() => {
|
|
14
|
+
let _classDecorators = [injectable];
|
|
15
|
+
let _classDescriptor;
|
|
16
|
+
let _classExtraInitializers = [];
|
|
17
|
+
let _classThis;
|
|
18
|
+
var MyService = class {
|
|
19
|
+
static { _classThis = this; }
|
|
20
|
+
static {
|
|
21
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
22
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
23
|
+
MyService = _classThis = _classDescriptor.value;
|
|
24
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
25
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
return MyService = _classThis;
|
|
29
|
+
})();
|
|
30
|
+
let MyElement = (() => {
|
|
31
|
+
let _classDecorators = [injectable];
|
|
32
|
+
let _classDescriptor;
|
|
33
|
+
let _classExtraInitializers = [];
|
|
34
|
+
let _classThis;
|
|
35
|
+
let _classSuper = HTMLElement;
|
|
36
|
+
var MyElement = class extends _classSuper {
|
|
37
|
+
static { _classThis = this; }
|
|
38
|
+
static {
|
|
39
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
40
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
41
|
+
MyElement = _classThis = _classDescriptor.value;
|
|
42
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
43
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
44
|
+
}
|
|
45
|
+
my = inject(MyService);
|
|
46
|
+
};
|
|
47
|
+
return MyElement = _classThis;
|
|
48
|
+
})();
|
|
49
|
+
customElements.define('env-1', MyElement);
|
|
50
|
+
const el = await fixture(html `<env-1></env-1>`);
|
|
51
|
+
expect(el.my()).to.equal(environment().inject(MyService));
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=environment.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.test.js","sourceRoot":"","sources":["../../src/lib/environment.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE5B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YAE7D,SAAS;oCADd,UAAU;;;;;;;;oBACX,6KAAkB;;;oBAAZ,uDAAS;;;;;YAGT,SAAS;oCADd,UAAU;;;;8BACa,WAAW;iCAAnB,SAAQ,WAAW;;;;oBAAnC,6KAEC;;;oBAFK,uDAAS;;gBACb,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;;;;QAGzB,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE1C,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,iBAAiB,CAAC,CAAC;QAE3D,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/target/lib/inject.js
CHANGED
package/target/lib/inject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAK/C,MAAM,UAAU,MAAM,CAAyB,KAAwB;IACrE,OAAO;QACL,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;YAE1D,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,yKAAyK,CACjL,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import { Injector } from './injector.js';
|
|
2
|
-
export declare class InjectableMap
|
|
2
|
+
export declare class InjectableMap {
|
|
3
|
+
#private;
|
|
4
|
+
get(key: object): Injector | undefined;
|
|
5
|
+
set(key: object, injector: Injector): WeakMap<object, Injector>;
|
|
3
6
|
}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
-
export class InjectableMap
|
|
1
|
+
export class InjectableMap {
|
|
2
|
+
#injectables = new WeakMap();
|
|
3
|
+
get(key) {
|
|
4
|
+
return this.#injectables.get(key);
|
|
5
|
+
}
|
|
6
|
+
set(key, injector) {
|
|
7
|
+
return this.#injectables.set(key, injector);
|
|
8
|
+
}
|
|
2
9
|
}
|
|
3
10
|
//# sourceMappingURL=injectable-map.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable-map.js","sourceRoot":"","sources":["../../src/lib/injectable-map.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"injectable-map.js","sourceRoot":"","sources":["../../src/lib/injectable-map.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACxB,YAAY,GAAG,IAAI,OAAO,EAAoB,CAAC;IAE/C,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,QAAkB;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { ConstructableToken } from './provider.js';
|
|
2
|
-
import { InjectableMap } from './injectable-map.js';
|
|
3
|
-
export declare const INJECTABLE_MAP: InjectableMap;
|
|
4
2
|
export declare function injectable<T extends ConstructableToken<any>>(Base: T, _?: unknown): {
|
|
5
3
|
new (..._: any[]): {
|
|
6
4
|
[x: string]: any;
|
package/target/lib/injectable.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { Injector } from './injector.js';
|
|
2
|
-
import {
|
|
3
|
-
export const INJECTABLE_MAP = new InjectableMap();
|
|
1
|
+
import { INJECTABLE_MAP, Injector } from './injector.js';
|
|
2
|
+
import { environment } from './environment.js';
|
|
4
3
|
export function injectable(Base, _) {
|
|
5
4
|
return class InjectableNode extends Base {
|
|
6
5
|
constructor(..._) {
|
|
@@ -13,6 +12,9 @@ export function injectable(Base, _) {
|
|
|
13
12
|
if (parentInjector !== null) {
|
|
14
13
|
injector.setParent(parentInjector);
|
|
15
14
|
}
|
|
15
|
+
else {
|
|
16
|
+
injector.setParent(environment());
|
|
17
|
+
}
|
|
16
18
|
});
|
|
17
19
|
}
|
|
18
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,UAAU,UAAU,CAAoC,IAAO,EAAE,CAAW;IAChF,OAAO,MAAM,cAAe,SAAQ,IAAI;QACtC,YAAY,GAAG,CAAQ;YACrB,KAAK,EAAE,CAAC;YAGR,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAInC,IAAI,aAAa,IAAI,UAAU,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;gBAC/D,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;oBACxC,MAAM,cAAc,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBAE3C,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;wBAC5B,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;oBACrC,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,iBAAiB;YACf,IAAI,aAAa,IAAI,UAAU,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;gBAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;gBAE5C,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QAED,oBAAoB;YAClB,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE1C,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBAC/B,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAQ;IAChC,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC;IAI9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAErB,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/target/lib/injector.d.ts
CHANGED
package/target/lib/injector.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InjectableMap } from './injectable-map.js';
|
|
2
2
|
import { LifeCycle } from './lifecycle.js';
|
|
3
3
|
import { StaticToken } from './provider.js';
|
|
4
|
+
export const INJECTABLE_MAP = new InjectableMap();
|
|
4
5
|
export class Injector {
|
|
5
6
|
#instances = new WeakMap();
|
|
6
7
|
parent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/lib/injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/lib/injector.ts"],"names":[],"mappings":"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"}
|
package/target/lib.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { Injector } from './lib/injector.js';
|
|
1
|
+
export { Injector, INJECTABLE_MAP } from './lib/injector.js';
|
|
2
2
|
export { Provider, ConstructableToken, StaticToken } from './lib/provider.js';
|
|
3
3
|
export { injectable } from './lib/injectable.js';
|
|
4
4
|
export { inject, Injected } from './lib/inject.js';
|
|
5
|
+
export { defineEnvironment, clearEnvironment } from './lib/environment.js';
|
|
5
6
|
export { LifeCycle } from './lib/lifecycle.js';
|
|
6
|
-
export { DOMInjector } from './lib/dom-injector.js';
|
package/target/lib.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { Injector } from './lib/injector.js';
|
|
1
|
+
export { Injector, INJECTABLE_MAP } from './lib/injector.js';
|
|
2
2
|
export { StaticToken } from './lib/provider.js';
|
|
3
3
|
export { injectable } from './lib/injectable.js';
|
|
4
4
|
export { inject } from './lib/inject.js';
|
|
5
|
+
export { defineEnvironment, clearEnvironment } from './lib/environment.js';
|
|
5
6
|
export { LifeCycle } from './lib/lifecycle.js';
|
|
6
|
-
export { DOMInjector } from './lib/dom-injector.js';
|
|
7
7
|
//# sourceMappingURL=lib.js.map
|
package/target/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAgC,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAY,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { expect } from '@open-wc/testing';
|
|
2
|
-
|
|
3
|
-
import { DOMInjector } from './dom-injector.js';
|
|
4
|
-
import { INJECTABLE_MAP } from './injectable.js';
|
|
5
|
-
|
|
6
|
-
describe('DOMInjector', () => {
|
|
7
|
-
it('should attach an injector to a dom element', () => {
|
|
8
|
-
const root = document.createElement('div');
|
|
9
|
-
const app = new DOMInjector();
|
|
10
|
-
|
|
11
|
-
app.attach(root);
|
|
12
|
-
|
|
13
|
-
const injector = INJECTABLE_MAP.get(root);
|
|
14
|
-
|
|
15
|
-
expect(injector).to.equal(app);
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it('should remove an injector associated with a dom element', () => {
|
|
19
|
-
const root = document.createElement('div');
|
|
20
|
-
const app = new DOMInjector();
|
|
21
|
-
|
|
22
|
-
app.attach(root);
|
|
23
|
-
|
|
24
|
-
expect(INJECTABLE_MAP.get(root)).to.equal(app);
|
|
25
|
-
|
|
26
|
-
app.detach(root);
|
|
27
|
-
|
|
28
|
-
expect(INJECTABLE_MAP.get(root)).to.equal(undefined);
|
|
29
|
-
});
|
|
30
|
-
});
|
package/src/lib/dom-injector.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { INJECTABLE_MAP } from './injectable.js';
|
|
2
|
-
import { Injector } from './injector.js';
|
|
3
|
-
|
|
4
|
-
export class DOMInjector extends Injector {
|
|
5
|
-
attach(root: HTMLElement) {
|
|
6
|
-
INJECTABLE_MAP.set(root, this);
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
detach(root: HTMLElement) {
|
|
10
|
-
INJECTABLE_MAP.delete(root);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { INJECTABLE_MAP } from './injectable.js';
|
|
2
|
-
import { Injector } from './injector.js';
|
|
3
|
-
export class DOMInjector extends Injector {
|
|
4
|
-
attach(root) {
|
|
5
|
-
INJECTABLE_MAP.set(root, this);
|
|
6
|
-
}
|
|
7
|
-
detach(root) {
|
|
8
|
-
INJECTABLE_MAP.delete(root);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=dom-injector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom-injector.js","sourceRoot":"","sources":["../../src/lib/dom-injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,MAAM,CAAC,IAAiB;QACtB,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,IAAiB;QACtB,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { expect } from '@open-wc/testing';
|
|
2
|
-
import { DOMInjector } from './dom-injector.js';
|
|
3
|
-
import { INJECTABLE_MAP } from './injectable.js';
|
|
4
|
-
describe('DOMInjector', () => {
|
|
5
|
-
it('should attach an injector to a dom element', () => {
|
|
6
|
-
const root = document.createElement('div');
|
|
7
|
-
const app = new DOMInjector();
|
|
8
|
-
app.attach(root);
|
|
9
|
-
const injector = INJECTABLE_MAP.get(root);
|
|
10
|
-
expect(injector).to.equal(app);
|
|
11
|
-
});
|
|
12
|
-
it('should remove an injector associated with a dom element', () => {
|
|
13
|
-
const root = document.createElement('div');
|
|
14
|
-
const app = new DOMInjector();
|
|
15
|
-
app.attach(root);
|
|
16
|
-
expect(INJECTABLE_MAP.get(root)).to.equal(app);
|
|
17
|
-
app.detach(root);
|
|
18
|
-
expect(INJECTABLE_MAP.get(root)).to.equal(undefined);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
//# sourceMappingURL=dom-injector.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom-injector.test.js","sourceRoot":"","sources":["../../src/lib/dom-injector.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAE9B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEjB,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE1C,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAE9B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEjB,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE/C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEjB,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
File without changes
|