@joist/di 3.4.0 → 3.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/README.md +34 -3
- package/package.json +1 -1
- package/src/lib/environment.test.ts +1 -1
- package/src/lib/inject.test.ts +2 -2
- package/src/lib/inject.ts +3 -3
- package/src/lib/injectable-map.test.ts +18 -0
- package/src/lib/injectable-map.ts +13 -0
- package/src/lib/injectable.test.ts +1 -1
- package/src/lib/injectable.ts +5 -10
- package/src/lib/injector.test.ts +17 -17
- package/src/lib/injector.ts +11 -3
- package/src/lib/provider.ts +4 -0
- package/src/lib.ts +2 -2
- package/target/lib/environment.test.js +1 -1
- package/target/lib/environment.test.js.map +1 -1
- package/target/lib/inject.js +3 -3
- package/target/lib/inject.js.map +1 -1
- package/target/lib/inject.test.js +2 -2
- package/target/lib/inject.test.js.map +1 -1
- package/target/lib/injectable-map.d.ts +6 -0
- package/target/lib/injectable-map.js +10 -0
- package/target/lib/injectable-map.js.map +1 -0
- package/target/lib/injectable-map.test.d.ts +1 -0
- package/target/lib/injectable-map.test.js +15 -0
- package/target/lib/injectable-map.test.js.map +1 -0
- package/target/lib/injectable.d.ts +2 -3
- package/target/lib/injectable.js +5 -9
- package/target/lib/injectable.js.map +1 -1
- package/target/lib/injectable.test.js +1 -1
- package/target/lib/injectable.test.js.map +1 -1
- package/target/lib/injector.d.ts +2 -0
- package/target/lib/injector.js +9 -3
- package/target/lib/injector.js.map +1 -1
- package/target/lib/injector.test.js +17 -17
- package/target/lib/injector.test.js.map +1 -1
- package/target/lib/provider.d.ts +1 -0
- package/target/lib/provider.js +3 -0
- package/target/lib/provider.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/README.md
CHANGED
|
@@ -104,13 +104,42 @@ const app = new Injector([
|
|
|
104
104
|
]);
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
+
### Accessing the injector
|
|
108
|
+
|
|
109
|
+
Factories provide more flexibility but often times cannot use the `inject()` function. To get around this all factories are passed an instance of the current injector.
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
class Logger {
|
|
113
|
+
log(args: any[]): void {
|
|
114
|
+
console.log(...args);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
class Feature {
|
|
119
|
+
#logger;
|
|
120
|
+
|
|
121
|
+
constructor(logger: Logger) {
|
|
122
|
+
this.#logger = logger;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const app = new Injector([
|
|
127
|
+
{
|
|
128
|
+
provide: Feature,
|
|
129
|
+
factory(i) {
|
|
130
|
+
return new Feature(i.get(Logger));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
]);
|
|
134
|
+
```
|
|
135
|
+
|
|
107
136
|
## Static Tokens
|
|
108
137
|
|
|
109
138
|
In most cases a token is any constructable class. There are cases where you might want to return other data types that aren't objects.
|
|
110
139
|
|
|
111
140
|
```ts
|
|
112
141
|
// token that resolves to a string
|
|
113
|
-
const URL_TOKEN =
|
|
142
|
+
const URL_TOKEN = token<string>('app_url');
|
|
114
143
|
|
|
115
144
|
const app = new Injector([
|
|
116
145
|
{
|
|
@@ -125,7 +154,7 @@ const app = new Injector([
|
|
|
125
154
|
A static token can be provided a default factory function to use on creation.
|
|
126
155
|
|
|
127
156
|
```ts
|
|
128
|
-
const URL_TOKEN =
|
|
157
|
+
const URL_TOKEN = token('app_url', () => '/default-url/');
|
|
129
158
|
```
|
|
130
159
|
|
|
131
160
|
### Async values
|
|
@@ -133,7 +162,8 @@ const URL_TOKEN = new StaticToken<string>('app_url', () => '/default-url/');
|
|
|
133
162
|
Static tokens can also leverage promises for cases when you need to async create your service instances.
|
|
134
163
|
|
|
135
164
|
```ts
|
|
136
|
-
|
|
165
|
+
// StaticToken<Promise<string>>
|
|
166
|
+
const URL_TOKEN = token('app_url', () => Promise.resolve('/default-url/'));
|
|
137
167
|
|
|
138
168
|
const app = new Injector();
|
|
139
169
|
|
|
@@ -154,6 +184,7 @@ class HttpService {
|
|
|
154
184
|
}
|
|
155
185
|
}
|
|
156
186
|
|
|
187
|
+
@injectable
|
|
157
188
|
class ApiService {
|
|
158
189
|
#http = inject(HttpService);
|
|
159
190
|
|
package/package.json
CHANGED
package/src/lib/inject.test.ts
CHANGED
|
@@ -35,7 +35,7 @@ describe('inject', () => {
|
|
|
35
35
|
const parent = new Injector();
|
|
36
36
|
|
|
37
37
|
try {
|
|
38
|
-
parent.
|
|
38
|
+
parent.inject(BarService);
|
|
39
39
|
|
|
40
40
|
throw new Error('Should not succeed');
|
|
41
41
|
} catch (err) {
|
|
@@ -66,6 +66,6 @@ describe('inject', () => {
|
|
|
66
66
|
}
|
|
67
67
|
]);
|
|
68
68
|
|
|
69
|
-
expect(parent.
|
|
69
|
+
expect(parent.inject(BarService).foo().value).to.equal('100');
|
|
70
70
|
});
|
|
71
71
|
});
|
package/src/lib/inject.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ConstructableToken } from './provider.js';
|
|
2
|
-
import {
|
|
2
|
+
import { INJECTABLE_MAP } from './injectable.js';
|
|
3
3
|
|
|
4
4
|
export type Injected<T> = () => T;
|
|
5
5
|
|
|
@@ -7,7 +7,7 @@ export function inject<This extends object, T extends object>(
|
|
|
7
7
|
token: ConstructableToken<T>
|
|
8
8
|
): Injected<T> {
|
|
9
9
|
return function (this: This) {
|
|
10
|
-
const injector =
|
|
10
|
+
const injector = INJECTABLE_MAP.get(this);
|
|
11
11
|
|
|
12
12
|
if (injector === undefined) {
|
|
13
13
|
const name = Object.getPrototypeOf(this.constructor).name;
|
|
@@ -17,6 +17,6 @@ export function inject<This extends object, T extends object>(
|
|
|
17
17
|
);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
return injector.
|
|
20
|
+
return injector.inject(token);
|
|
21
21
|
};
|
|
22
22
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { expect } from '@open-wc/testing';
|
|
2
|
+
|
|
3
|
+
import { InjectableMap } from './injectable-map.js';
|
|
4
|
+
import { Injector } from './injector.js';
|
|
5
|
+
|
|
6
|
+
describe('InjectableMap', () => {
|
|
7
|
+
it('should add a new weak reference for an injector', () => {
|
|
8
|
+
const map = new InjectableMap();
|
|
9
|
+
const app = {
|
|
10
|
+
key: {},
|
|
11
|
+
injector: new Injector()
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
map.set(app.key, app.injector);
|
|
15
|
+
|
|
16
|
+
expect(map.get(app.key)).to.equal(app.injector);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Injector } from './injector.js';
|
|
2
|
+
|
|
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,9 @@
|
|
|
1
1
|
import { ConstructableToken } from './provider.js';
|
|
2
2
|
import { Injector } from './injector.js';
|
|
3
3
|
import { environment } from './environment.js';
|
|
4
|
+
import { InjectableMap } from './injectable-map.js';
|
|
4
5
|
|
|
5
|
-
export const
|
|
6
|
+
export const INJECTABLE_MAP = new InjectableMap();
|
|
6
7
|
|
|
7
8
|
export function injectable<T extends ConstructableToken<any>>(Base: T, _?: unknown) {
|
|
8
9
|
return class InjectableNode extends Base {
|
|
@@ -11,7 +12,7 @@ export function injectable<T extends ConstructableToken<any>>(Base: T, _?: unkno
|
|
|
11
12
|
|
|
12
13
|
const injector = new Injector(Base.providers);
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
INJECTABLE_MAP.set(this, injector);
|
|
15
16
|
|
|
16
17
|
try {
|
|
17
18
|
if (this instanceof HTMLElement) {
|
|
@@ -28,12 +29,6 @@ export function injectable<T extends ConstructableToken<any>>(Base: T, _?: unkno
|
|
|
28
29
|
} catch {}
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
onInject() {
|
|
32
|
-
if (super.onInject) {
|
|
33
|
-
super.onInject();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
32
|
connectedCallback() {
|
|
38
33
|
try {
|
|
39
34
|
if (this instanceof HTMLElement) {
|
|
@@ -47,7 +42,7 @@ export function injectable<T extends ConstructableToken<any>>(Base: T, _?: unkno
|
|
|
47
42
|
}
|
|
48
43
|
|
|
49
44
|
disconnectedCallback() {
|
|
50
|
-
const injector =
|
|
45
|
+
const injector = INJECTABLE_MAP.get(this);
|
|
51
46
|
|
|
52
47
|
if (injector) {
|
|
53
48
|
injector.setParent(undefined);
|
|
@@ -68,7 +63,7 @@ function findInjectorRoot(e: Event): Injector | null {
|
|
|
68
63
|
for (let i = 1; i < path.length; i++) {
|
|
69
64
|
const part = path[i];
|
|
70
65
|
|
|
71
|
-
const injector =
|
|
66
|
+
const injector = INJECTABLE_MAP.get(part);
|
|
72
67
|
|
|
73
68
|
if (injector) {
|
|
74
69
|
return injector;
|
package/src/lib/injector.test.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { expect } from '@open-wc/testing';
|
|
|
3
3
|
import { Injector } from './injector.js';
|
|
4
4
|
import { inject } from './inject.js';
|
|
5
5
|
import { injectable } from './injectable.js';
|
|
6
|
-
import { Provider,
|
|
6
|
+
import { Provider, token } from './provider.js';
|
|
7
7
|
|
|
8
8
|
describe('Injector', () => {
|
|
9
9
|
it('should create a new instance of a single provider', () => {
|
|
@@ -11,8 +11,8 @@ describe('Injector', () => {
|
|
|
11
11
|
|
|
12
12
|
const app = new Injector();
|
|
13
13
|
|
|
14
|
-
expect(app.
|
|
15
|
-
expect(app.
|
|
14
|
+
expect(app.inject(A)).to.be.instanceOf(A);
|
|
15
|
+
expect(app.inject(A)).to.equal(app.inject(A));
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
it('should inject providers in the correct order', () => {
|
|
@@ -26,7 +26,7 @@ describe('Injector', () => {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
const app = new Injector();
|
|
29
|
-
const instance = app.
|
|
29
|
+
const instance = app.inject(MyService);
|
|
30
30
|
|
|
31
31
|
expect(instance.a()).to.be.instanceOf(A);
|
|
32
32
|
expect(instance.b()).to.be.instanceOf(B);
|
|
@@ -56,7 +56,7 @@ describe('Injector', () => {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
const app = new Injector();
|
|
59
|
-
const instance = app.
|
|
59
|
+
const instance = app.inject(E);
|
|
60
60
|
|
|
61
61
|
expect(instance.d().c().b().a()).to.be.instanceOf(A);
|
|
62
62
|
});
|
|
@@ -72,7 +72,7 @@ describe('Injector', () => {
|
|
|
72
72
|
class AltA extends A {}
|
|
73
73
|
const app = new Injector([{ provide: A, use: AltA }]);
|
|
74
74
|
|
|
75
|
-
expect(app.
|
|
75
|
+
expect(app.inject(B).a()).to.be.instanceOf(AltA);
|
|
76
76
|
});
|
|
77
77
|
|
|
78
78
|
it('should return an existing instance from a parent injector', () => {
|
|
@@ -82,7 +82,7 @@ describe('Injector', () => {
|
|
|
82
82
|
|
|
83
83
|
const app = new Injector([], parent);
|
|
84
84
|
|
|
85
|
-
expect(parent.
|
|
85
|
+
expect(parent.inject(A)).to.equal(app.inject(A));
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
it('should use a factory if provided', () => {
|
|
@@ -105,7 +105,7 @@ describe('Injector', () => {
|
|
|
105
105
|
}
|
|
106
106
|
]);
|
|
107
107
|
|
|
108
|
-
expect(injector.
|
|
108
|
+
expect(injector.inject(Service).hello()).to.equal('you');
|
|
109
109
|
});
|
|
110
110
|
|
|
111
111
|
it('should throw an error if provider is missing both factory and use', () => {
|
|
@@ -121,7 +121,7 @@ describe('Injector', () => {
|
|
|
121
121
|
}
|
|
122
122
|
]);
|
|
123
123
|
|
|
124
|
-
expect(() => injector.
|
|
124
|
+
expect(() => injector.inject(Service)).to.throw(
|
|
125
125
|
"Provider for Service found but is missing either 'use' or 'factory'"
|
|
126
126
|
);
|
|
127
127
|
});
|
|
@@ -144,32 +144,32 @@ describe('Injector', () => {
|
|
|
144
144
|
}
|
|
145
145
|
]);
|
|
146
146
|
|
|
147
|
-
injector.
|
|
147
|
+
injector.inject(Service);
|
|
148
148
|
});
|
|
149
149
|
|
|
150
150
|
it('should create an instance from a StaticToken factory', () => {
|
|
151
|
-
const
|
|
151
|
+
const TOKEN = token('test', () => 'Hello World');
|
|
152
152
|
const injector = new Injector();
|
|
153
153
|
|
|
154
|
-
const res = injector.
|
|
154
|
+
const res = injector.inject(TOKEN);
|
|
155
155
|
|
|
156
156
|
expect(res).to.equal('Hello World');
|
|
157
157
|
});
|
|
158
158
|
|
|
159
159
|
it('should create an instance from an async StaticToken factory', async () => {
|
|
160
|
-
const
|
|
160
|
+
const TOKEN = token('test', () => Promise.resolve('Hello World'));
|
|
161
161
|
const injector = new Injector();
|
|
162
162
|
|
|
163
|
-
const res = await injector.
|
|
163
|
+
const res = await injector.inject(TOKEN);
|
|
164
164
|
|
|
165
165
|
expect(res).to.equal('Hello World');
|
|
166
166
|
});
|
|
167
167
|
|
|
168
168
|
it('should allow static token to be overridden', () => {
|
|
169
|
-
const
|
|
169
|
+
const TOKEN = token<string>('test');
|
|
170
170
|
|
|
171
171
|
const provider: Provider<string> = {
|
|
172
|
-
provide:
|
|
172
|
+
provide: TOKEN,
|
|
173
173
|
factory() {
|
|
174
174
|
return 'Hello World';
|
|
175
175
|
}
|
|
@@ -177,7 +177,7 @@ describe('Injector', () => {
|
|
|
177
177
|
|
|
178
178
|
const injector = new Injector([provider]);
|
|
179
179
|
|
|
180
|
-
const res = injector.
|
|
180
|
+
const res = injector.inject(TOKEN);
|
|
181
181
|
|
|
182
182
|
expect(res).to.equal('Hello World');
|
|
183
183
|
});
|
package/src/lib/injector.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { INJECTABLE_MAP } from './injectable.js';
|
|
2
2
|
import { InjectionToken, Provider, StaticToken } from './provider.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -30,6 +30,10 @@ export class Injector {
|
|
|
30
30
|
this.providers = providers;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
inject<T>(token: InjectionToken<T>): T {
|
|
34
|
+
return this.get(token);
|
|
35
|
+
}
|
|
36
|
+
|
|
33
37
|
// resolves and retuns and instance of the requested service
|
|
34
38
|
get<T>(token: InjectionToken<T>): T {
|
|
35
39
|
// check for a local instance
|
|
@@ -58,7 +62,7 @@ export class Injector {
|
|
|
58
62
|
|
|
59
63
|
// check for a parent and attempt to get there
|
|
60
64
|
if (this.parent) {
|
|
61
|
-
return this.parent.
|
|
65
|
+
return this.parent.inject(token);
|
|
62
66
|
}
|
|
63
67
|
|
|
64
68
|
if (token instanceof StaticToken) {
|
|
@@ -89,7 +93,7 @@ export class Injector {
|
|
|
89
93
|
* Only values that are objects are able to have associated injectors
|
|
90
94
|
*/
|
|
91
95
|
if (typeof instance === 'object' && instance !== null) {
|
|
92
|
-
const injector =
|
|
96
|
+
const injector = INJECTABLE_MAP.get(instance);
|
|
93
97
|
|
|
94
98
|
if (injector) {
|
|
95
99
|
/**
|
|
@@ -127,3 +131,7 @@ export class Injector {
|
|
|
127
131
|
return undefined;
|
|
128
132
|
}
|
|
129
133
|
}
|
|
134
|
+
|
|
135
|
+
export function injector(providers: Provider<unknown>[] = [], parent?: Injector) {
|
|
136
|
+
return new Injector(providers, parent);
|
|
137
|
+
}
|
package/src/lib/provider.ts
CHANGED
package/src/lib.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Injector } from './lib/injector.js';
|
|
2
|
-
export { Provider, ConstructableToken, StaticToken } from './lib/provider.js';
|
|
3
|
-
export { injectable } from './lib/injectable.js';
|
|
2
|
+
export { Provider, ConstructableToken, StaticToken, token } from './lib/provider.js';
|
|
3
|
+
export { injectable, INJECTABLE_MAP } from './lib/injectable.js';
|
|
4
4
|
export { inject, Injected } from './lib/inject.js';
|
|
5
5
|
export { defineEnvironment, clearEnvironment } from './lib/environment.js';
|
|
@@ -48,7 +48,7 @@ describe('environment', () => {
|
|
|
48
48
|
})();
|
|
49
49
|
customElements.define('env-1', MyElement);
|
|
50
50
|
const el = await fixture(html `<env-1></env-1>`);
|
|
51
|
-
expect(el.my()).to.equal(environment().
|
|
51
|
+
expect(el.my()).to.equal(environment().inject(MyService));
|
|
52
52
|
});
|
|
53
53
|
});
|
|
54
54
|
//# sourceMappingURL=environment.test.js.map
|
|
@@ -1 +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,
|
|
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
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { INJECTABLE_MAP } from './injectable.js';
|
|
2
2
|
export function inject(token) {
|
|
3
3
|
return function () {
|
|
4
|
-
const injector =
|
|
4
|
+
const injector = INJECTABLE_MAP.get(this);
|
|
5
5
|
if (injector === undefined) {
|
|
6
6
|
const name = Object.getPrototypeOf(this.constructor).name;
|
|
7
7
|
throw new Error(`${name} is either not injectable or a service is being called in the constructor. \n Either add the @injectable to your class or use the onInject callback method.`);
|
|
8
8
|
}
|
|
9
|
-
return injector.
|
|
9
|
+
return injector.inject(token);
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=inject.js.map
|
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,
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/lib/inject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,UAAU,MAAM,CACpB,KAA4B;IAE5B,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,6JAA6J,CACrK,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -56,7 +56,7 @@ describe('inject', () => {
|
|
|
56
56
|
})();
|
|
57
57
|
const parent = new Injector();
|
|
58
58
|
try {
|
|
59
|
-
parent.
|
|
59
|
+
parent.inject(BarService);
|
|
60
60
|
throw new Error('Should not succeed');
|
|
61
61
|
}
|
|
62
62
|
catch (err) {
|
|
@@ -94,7 +94,7 @@ describe('inject', () => {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
]);
|
|
97
|
-
expect(parent.
|
|
97
|
+
expect(parent.inject(BarService).foo().value).to.equal('100');
|
|
98
98
|
});
|
|
99
99
|
});
|
|
100
100
|
//# sourceMappingURL=inject.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.test.js","sourceRoot":"","sources":["../../src/lib/inject.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,YAAY;SAAG;YAGf,UAAU;oCADf,UAAU;;;;8BACc,WAAW;kCAAnB,SAAQ,WAAW;;;;oBAApC,6KAEC;;;oBAFK,uDAAU;;gBACd,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;;;;QAG/B,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAE9C,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,UAAU;YACd,KAAK,GAAG,GAAG,CAAC;SACb;YAGK,UAAU;oCADf,UAAU;;;;;;;;oBACX,6KAMC;;;oBANK,uDAAU;;gBACd,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBAEzB;oBACE,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,CAAC;;;;QAGH,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"inject.test.js","sourceRoot":"","sources":["../../src/lib/inject.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,YAAY;SAAG;YAGf,UAAU;oCADf,UAAU;;;;8BACc,WAAW;kCAAnB,SAAQ,WAAW;;;;oBAApC,6KAEC;;;oBAFK,uDAAU;;gBACd,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;;;;QAG/B,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAE9C,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,UAAU;YACd,KAAK,GAAG,GAAG,CAAC;SACb;YAGK,UAAU;oCADf,UAAU;;;;;;;;oBACX,6KAMC;;;oBANK,uDAAU;;gBACd,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBAEzB;oBACE,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,CAAC;;;;QAGH,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAE1B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAY,CAAC;YAE3B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAC5B,uKAAuK,CACxK,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,UAAU;YACd,KAAK,GAAG,GAAG,CAAC;SACb;YAGK,UAAU;oCADf,UAAU;;;;;;;;oBACX,6KAEC;;;oBAFK,uDAAU;;gBACd,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;;;;QAG3B,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC;YAC1B;gBACE,OAAO,EAAE,UAAU;gBACnB,GAAG,EAAE,KAAM,SAAQ,UAAU;oBAC3B,KAAK,GAAG,KAAK,CAAC;iBACf;aACF;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { expect } from '@open-wc/testing';
|
|
2
|
+
import { InjectableMap } from './injectable-map.js';
|
|
3
|
+
import { Injector } from './injector.js';
|
|
4
|
+
describe('InjectableMap', () => {
|
|
5
|
+
it('should add a new weak reference for an injector', () => {
|
|
6
|
+
const map = new InjectableMap();
|
|
7
|
+
const app = {
|
|
8
|
+
key: {},
|
|
9
|
+
injector: new Injector()
|
|
10
|
+
};
|
|
11
|
+
map.set(app.key, app.injector);
|
|
12
|
+
expect(map.get(app.key)).to.equal(app.injector);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=injectable-map.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable-map.test.js","sourceRoot":"","sources":["../../src/lib/injectable-map.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,GAAG,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG;YACV,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,IAAI,QAAQ,EAAE;SACzB,CAAC;QAEF,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE/B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { ConstructableToken } from './provider.js';
|
|
2
|
-
import {
|
|
3
|
-
export declare const
|
|
2
|
+
import { InjectableMap } from './injectable-map.js';
|
|
3
|
+
export declare const INJECTABLE_MAP: InjectableMap;
|
|
4
4
|
export declare function injectable<T extends ConstructableToken<any>>(Base: T, _?: unknown): {
|
|
5
5
|
new (..._: any[]): {
|
|
6
6
|
[x: string]: any;
|
|
7
|
-
onInject(): void;
|
|
8
7
|
connectedCallback(): void;
|
|
9
8
|
disconnectedCallback(): void;
|
|
10
9
|
};
|
package/target/lib/injectable.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Injector } from './injector.js';
|
|
2
2
|
import { environment } from './environment.js';
|
|
3
|
-
|
|
3
|
+
import { InjectableMap } from './injectable-map.js';
|
|
4
|
+
export const INJECTABLE_MAP = new InjectableMap();
|
|
4
5
|
export function injectable(Base, _) {
|
|
5
6
|
return class InjectableNode extends Base {
|
|
6
7
|
constructor(..._) {
|
|
7
8
|
super();
|
|
8
9
|
const injector = new Injector(Base.providers);
|
|
9
|
-
|
|
10
|
+
INJECTABLE_MAP.set(this, injector);
|
|
10
11
|
try {
|
|
11
12
|
if (this instanceof HTMLElement) {
|
|
12
13
|
this.addEventListener('finddiroot', (e) => {
|
|
@@ -22,11 +23,6 @@ export function injectable(Base, _) {
|
|
|
22
23
|
}
|
|
23
24
|
catch { }
|
|
24
25
|
}
|
|
25
|
-
onInject() {
|
|
26
|
-
if (super.onInject) {
|
|
27
|
-
super.onInject();
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
26
|
connectedCallback() {
|
|
31
27
|
try {
|
|
32
28
|
if (this instanceof HTMLElement) {
|
|
@@ -39,7 +35,7 @@ export function injectable(Base, _) {
|
|
|
39
35
|
catch { }
|
|
40
36
|
}
|
|
41
37
|
disconnectedCallback() {
|
|
42
|
-
const injector =
|
|
38
|
+
const injector = INJECTABLE_MAP.get(this);
|
|
43
39
|
if (injector) {
|
|
44
40
|
injector.setParent(undefined);
|
|
45
41
|
}
|
|
@@ -53,7 +49,7 @@ function findInjectorRoot(e) {
|
|
|
53
49
|
const path = e.composedPath();
|
|
54
50
|
for (let i = 1; i < path.length; i++) {
|
|
55
51
|
const part = path[i];
|
|
56
|
-
const injector =
|
|
52
|
+
const injector = INJECTABLE_MAP.get(part);
|
|
57
53
|
if (injector) {
|
|
58
54
|
return injector;
|
|
59
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../src/lib/injectable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,aAAa,EAAE,CAAC;AAElD,MAAM,UAAU,UAAU,CAAoC,IAAO,EAAE,CAAW;IAChF,OAAO,MAAM,cAAe,SAAQ,IAAI;QACtC,YAAY,GAAG,CAAQ;YACrB,KAAK,EAAE,CAAC;YAER,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE9C,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEnC,IAAI,CAAC;gBACH,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;oBAChC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;wBACxC,MAAM,cAAc,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;wBAE3C,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;4BAC5B,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;wBACrC,CAAC;6BAAM,CAAC;4BACN,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;wBACpC,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,iBAAiB;YACf,IAAI,CAAC;gBACH,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;oBAChC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;oBAE5C,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;wBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.test.js","sourceRoot":"","sources":["../../src/lib/injectable.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,GAAG;SAAG;QACZ,MAAM,GAAG;SAAG;YAGN,SAAS;oCADd,UAAU;;;;8BACa,WAAW;iCAAnB,SAAQ,WAAW;;;;oBAAnC,6KAGC;;;oBAHK,uDAAS;;gBACb,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;;;;QAGpB,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAEjD,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAc,CAAC;QAE/D,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG;SAAG;QAEZ,MAAM,GAAI,SAAQ,GAAG;SAAG;QAExB,MAAM,SAAS,GAAG,UAAU,CAC1B;YACE,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAEhD,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SACnB,CACF,CAAC;QAEF,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC;SAAG;YAGJ,CAAC;oCADN,UAAU;;;;;;;;oBACX,6KAMC;;;oBANK,uDAAC;;gBACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAEd,QAAQ;oBACN,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACvC,CAAC;;;;QAGH,IAAI,QAAQ,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"injectable.test.js","sourceRoot":"","sources":["../../src/lib/injectable.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,GAAG;SAAG;QACZ,MAAM,GAAG;SAAG;YAGN,SAAS;oCADd,UAAU;;;;8BACa,WAAW;iCAAnB,SAAQ,WAAW;;;;oBAAnC,6KAGC;;;oBAHK,uDAAS;;gBACb,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;;;;QAGpB,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAEjD,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAc,CAAC;QAE/D,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG;SAAG;QAEZ,MAAM,GAAI,SAAQ,GAAG;SAAG;QAExB,MAAM,SAAS,GAAG,UAAU,CAC1B;YACE,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAEhD,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SACnB,CACF,CAAC;QAEF,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC;SAAG;YAGJ,CAAC;oCADN,UAAU;;;;;;;;oBACX,6KAMC;;;oBANK,uDAAC;;gBACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAEd,QAAQ;oBACN,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACvC,CAAC;;;;QAGH,IAAI,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YAE7C,CAAC;oCADN,UAAU;;;;;;;;oBACX,6KAAU;;;oBAAJ,uDAAC;;;;;QAEP,MAAM,CAAC,GAAG,UAAU,CAClB;YACE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;SACf,CACF,CAAC;QAEF,MAAM,IAAI;SAAgB;YAGpB,MAAM;oCADX,UAAU;;;;8BACU,WAAW;8BAAnB,SAAQ,WAAW;;;;oBAAhC,6KAKC;;;;gBAJC,MAAM,CAAC,SAAS,GAAG;oBACjB,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;oBACtB,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;iBAC1B,CAAC;;oBAJE,uDAAM;;;;;YAQN,KAAK;oCADV,UAAU;;;;8BACS,WAAW;6BAAnB,SAAQ,WAAW;;;;oBAA/B,6KAEC;;;oBAFK,uDAAK;;gBACT,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;QAGhB,cAAc,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACrD,cAAc,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAEnD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAA;;;;KAI5B,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,EAAE,CAAC,aAAa,CAAQ,oBAAoB,CAAE,CAAC;QAE7D,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,CAAC;SAAG;QACV,MAAM,IAAI;SAAgB;YAGpB,IAAI;oCADT,UAAU;;;;8BACQ,WAAW;4BAAnB,SAAQ,WAAW;;;;oBAA9B,6KAEC;;;;gBADC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;;oBADxC,uDAAI;;;;;YAKJ,IAAI;oCADT,UAAU;;;;8BACQ,WAAW;4BAAnB,SAAQ,WAAW;;;;oBAA9B,6KAEC;;;;gBADC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;;oBAD3C,uDAAI;;;;;YAKJ,KAAK;oCADV,UAAU;;;;8BACS,WAAW;6BAAnB,SAAQ,WAAW;;;;oBAA/B,6KAEC;;;oBAFK,uDAAK;;gBACT,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;QAGhB,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAE1C,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAA;;;;;;;;KAQ5B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAE,CAAC;QAExC,IAAI,KAAK,GAAG,EAAE,CAAC,aAAa,CAAQ,WAAW,CAAE,CAAC;QAElD,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAEtC,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnB,KAAK,GAAG,EAAE,CAAC,aAAa,CAAQ,WAAW,CAAE,CAAC;QAE9C,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/target/lib/injector.d.ts
CHANGED
|
@@ -4,7 +4,9 @@ export declare class Injector {
|
|
|
4
4
|
parent: Injector | undefined;
|
|
5
5
|
providers: Provider<unknown>[];
|
|
6
6
|
constructor(providers?: Provider<unknown>[], parent?: Injector);
|
|
7
|
+
inject<T>(token: InjectionToken<T>): T;
|
|
7
8
|
get<T>(token: InjectionToken<T>): T;
|
|
8
9
|
setParent(parent: Injector | undefined): void;
|
|
9
10
|
clear(): void;
|
|
10
11
|
}
|
|
12
|
+
export declare function injector(providers?: Provider<unknown>[], parent?: Injector): Injector;
|
package/target/lib/injector.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { INJECTABLE_MAP } from './injectable.js';
|
|
2
2
|
import { StaticToken } from './provider.js';
|
|
3
3
|
export class Injector {
|
|
4
4
|
#instances = new WeakMap();
|
|
@@ -8,6 +8,9 @@ export class Injector {
|
|
|
8
8
|
this.parent = parent;
|
|
9
9
|
this.providers = providers;
|
|
10
10
|
}
|
|
11
|
+
inject(token) {
|
|
12
|
+
return this.get(token);
|
|
13
|
+
}
|
|
11
14
|
get(token) {
|
|
12
15
|
if (this.#instances.has(token)) {
|
|
13
16
|
return this.#instances.get(token);
|
|
@@ -27,7 +30,7 @@ export class Injector {
|
|
|
27
30
|
}
|
|
28
31
|
}
|
|
29
32
|
if (this.parent) {
|
|
30
|
-
return this.parent.
|
|
33
|
+
return this.parent.inject(token);
|
|
31
34
|
}
|
|
32
35
|
if (token instanceof StaticToken) {
|
|
33
36
|
if (!token.factory) {
|
|
@@ -47,7 +50,7 @@ export class Injector {
|
|
|
47
50
|
const instance = factory(this);
|
|
48
51
|
this.#instances.set(token, instance);
|
|
49
52
|
if (typeof instance === 'object' && instance !== null) {
|
|
50
|
-
const injector =
|
|
53
|
+
const injector = INJECTABLE_MAP.get(instance);
|
|
51
54
|
if (injector) {
|
|
52
55
|
injector.setParent(this);
|
|
53
56
|
if ('onInject' in instance && typeof instance.onInject === 'function') {
|
|
@@ -69,4 +72,7 @@ export class Injector {
|
|
|
69
72
|
return undefined;
|
|
70
73
|
}
|
|
71
74
|
}
|
|
75
|
+
export function injector(providers = [], parent) {
|
|
76
|
+
return new Injector(providers, parent);
|
|
77
|
+
}
|
|
72
78
|
//# sourceMappingURL=injector.js.map
|
|
@@ -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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"}
|
|
@@ -3,14 +3,14 @@ import { expect } from '@open-wc/testing';
|
|
|
3
3
|
import { Injector } from './injector.js';
|
|
4
4
|
import { inject } from './inject.js';
|
|
5
5
|
import { injectable } from './injectable.js';
|
|
6
|
-
import {
|
|
6
|
+
import { token } from './provider.js';
|
|
7
7
|
describe('Injector', () => {
|
|
8
8
|
it('should create a new instance of a single provider', () => {
|
|
9
9
|
class A {
|
|
10
10
|
}
|
|
11
11
|
const app = new Injector();
|
|
12
|
-
expect(app.
|
|
13
|
-
expect(app.
|
|
12
|
+
expect(app.inject(A)).to.be.instanceOf(A);
|
|
13
|
+
expect(app.inject(A)).to.equal(app.inject(A));
|
|
14
14
|
});
|
|
15
15
|
it('should inject providers in the correct order', () => {
|
|
16
16
|
class A {
|
|
@@ -37,7 +37,7 @@ describe('Injector', () => {
|
|
|
37
37
|
return MyService = _classThis;
|
|
38
38
|
})();
|
|
39
39
|
const app = new Injector();
|
|
40
|
-
const instance = app.
|
|
40
|
+
const instance = app.inject(MyService);
|
|
41
41
|
expect(instance.a()).to.be.instanceOf(A);
|
|
42
42
|
expect(instance.b()).to.be.instanceOf(B);
|
|
43
43
|
});
|
|
@@ -117,7 +117,7 @@ describe('Injector', () => {
|
|
|
117
117
|
return E = _classThis;
|
|
118
118
|
})();
|
|
119
119
|
const app = new Injector();
|
|
120
|
-
const instance = app.
|
|
120
|
+
const instance = app.inject(E);
|
|
121
121
|
expect(instance.d().c().b().a()).to.be.instanceOf(A);
|
|
122
122
|
});
|
|
123
123
|
it('should override a provider if explicitly instructed', () => {
|
|
@@ -144,14 +144,14 @@ describe('Injector', () => {
|
|
|
144
144
|
class AltA extends A {
|
|
145
145
|
}
|
|
146
146
|
const app = new Injector([{ provide: A, use: AltA }]);
|
|
147
|
-
expect(app.
|
|
147
|
+
expect(app.inject(B).a()).to.be.instanceOf(AltA);
|
|
148
148
|
});
|
|
149
149
|
it('should return an existing instance from a parent injector', () => {
|
|
150
150
|
class A {
|
|
151
151
|
}
|
|
152
152
|
const parent = new Injector();
|
|
153
153
|
const app = new Injector([], parent);
|
|
154
|
-
expect(parent.
|
|
154
|
+
expect(parent.inject(A)).to.equal(app.inject(A));
|
|
155
155
|
});
|
|
156
156
|
it('should use a factory if provided', () => {
|
|
157
157
|
class Service {
|
|
@@ -171,7 +171,7 @@ describe('Injector', () => {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
]);
|
|
174
|
-
expect(injector.
|
|
174
|
+
expect(injector.inject(Service).hello()).to.equal('you');
|
|
175
175
|
});
|
|
176
176
|
it('should throw an error if provider is missing both factory and use', () => {
|
|
177
177
|
class Service {
|
|
@@ -184,7 +184,7 @@ describe('Injector', () => {
|
|
|
184
184
|
provide: Service
|
|
185
185
|
}
|
|
186
186
|
]);
|
|
187
|
-
expect(() => injector.
|
|
187
|
+
expect(() => injector.inject(Service)).to.throw("Provider for Service found but is missing either 'use' or 'factory'");
|
|
188
188
|
});
|
|
189
189
|
it('should pass factories and instance of the injector', (done) => {
|
|
190
190
|
class Service {
|
|
@@ -201,30 +201,30 @@ describe('Injector', () => {
|
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
]);
|
|
204
|
-
injector.
|
|
204
|
+
injector.inject(Service);
|
|
205
205
|
});
|
|
206
206
|
it('should create an instance from a StaticToken factory', () => {
|
|
207
|
-
const
|
|
207
|
+
const TOKEN = token('test', () => 'Hello World');
|
|
208
208
|
const injector = new Injector();
|
|
209
|
-
const res = injector.
|
|
209
|
+
const res = injector.inject(TOKEN);
|
|
210
210
|
expect(res).to.equal('Hello World');
|
|
211
211
|
});
|
|
212
212
|
it('should create an instance from an async StaticToken factory', async () => {
|
|
213
|
-
const
|
|
213
|
+
const TOKEN = token('test', () => Promise.resolve('Hello World'));
|
|
214
214
|
const injector = new Injector();
|
|
215
|
-
const res = await injector.
|
|
215
|
+
const res = await injector.inject(TOKEN);
|
|
216
216
|
expect(res).to.equal('Hello World');
|
|
217
217
|
});
|
|
218
218
|
it('should allow static token to be overridden', () => {
|
|
219
|
-
const
|
|
219
|
+
const TOKEN = token('test');
|
|
220
220
|
const provider = {
|
|
221
|
-
provide:
|
|
221
|
+
provide: TOKEN,
|
|
222
222
|
factory() {
|
|
223
223
|
return 'Hello World';
|
|
224
224
|
}
|
|
225
225
|
};
|
|
226
226
|
const injector = new Injector([provider]);
|
|
227
|
-
const res = injector.
|
|
227
|
+
const res = injector.inject(TOKEN);
|
|
228
228
|
expect(res).to.equal('Hello World');
|
|
229
229
|
});
|
|
230
230
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injector.test.js","sourceRoot":"","sources":["../../src/lib/injector.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAY,
|
|
1
|
+
{"version":3,"file":"injector.test.js","sourceRoot":"","sources":["../../src/lib/injector.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAY,KAAK,EAAE,MAAM,eAAe,CAAC;AAEhD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC;SAAG;QAEV,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE3B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC;SAAG;QACV,MAAM,CAAC;SAAG;YAGJ,SAAS;oCADd,UAAU;;;;;;;;oBACX,6KAGC;;;oBAHK,uDAAS;;gBACb,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACd,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;QAGhB,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEvC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,CAAC;SAAG;YAGJ,CAAC;oCADN,UAAU;;;;;;;;oBACX,6KAEC;;;oBAFK,uDAAC;;gBACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;YAIV,CAAC;oCADN,UAAU;;;;;;;;oBACX,6KAEC;;;oBAFK,uDAAC;;gBACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;YAIV,CAAC;oCADN,UAAU;;;;;;;;oBACX,6KAEC;;;oBAFK,uDAAC;;gBACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;YAIV,CAAC;oCADN,UAAU;;;;;;;;oBACX,6KAEC;;;oBAFK,uDAAC;;gBACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;QAGhB,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE/B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC;SAAG;YAGJ,CAAC;oCADN,UAAU;;;;;;;;oBACX,6KAEC;;;oBAFK,uDAAC;;gBACL,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;;QAGhB,MAAM,IAAK,SAAQ,CAAC;SAAG;QACvB,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAEtD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC;SAAG;QAEV,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE9B,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAErC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO;YACX,KAAK;gBACH,OAAO,OAAO,CAAC;YACjB,CAAC;SACF;QAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC5B;gBACE,OAAO,EAAE,OAAO;gBAChB,OAAO;oBACL,OAAO;wBACL,KAAK;4BACH,OAAO,KAAK,CAAC;wBACf,CAAC;qBACF,CAAC;gBACJ,CAAC;aACF;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,OAAO;YACX,KAAK;gBACH,OAAO,OAAO,CAAC;YACjB,CAAC;SACF;QAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC5B;gBACE,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC7C,qEAAqE,CACtE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,CAAC,IAAI,EAAE,EAAE;QAChE,MAAM,OAAO;YACX,KAAK;gBACH,OAAO,OAAO,CAAC;YACjB,CAAC;SACF;QAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC5B;gBACE,OAAO,EAAE,OAAO;gBAChB,OAAO,CAAC,CAAC;oBACP,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAE7B,IAAI,EAAE,CAAC;gBACT,CAAC;aACF;SACF,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAEhC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAEhC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,KAAK,GAAG,KAAK,CAAS,MAAM,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAqB;YACjC,OAAO,EAAE,KAAK;YACd,OAAO;gBACL,OAAO,aAAa,CAAC;YACvB,CAAC;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/target/lib/provider.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare class StaticToken<T> {
|
|
|
4
4
|
factory: (() => T) | undefined;
|
|
5
5
|
constructor(name: string, factory?: () => T);
|
|
6
6
|
}
|
|
7
|
+
export declare function token<T>(name: string, factory?: () => T): StaticToken<T>;
|
|
7
8
|
export interface ConstructableToken<T> {
|
|
8
9
|
providers?: Provider<any>[];
|
|
9
10
|
new (...args: any[]): T;
|
package/target/lib/provider.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/lib/provider.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACtB,IAAI,CAAC;IACL,OAAO,CAAC;IAER,YAAY,IAAY,EAAE,OAAiB;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/lib/provider.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACtB,IAAI,CAAC;IACL,OAAO,CAAC;IAER,YAAY,IAAY,EAAE,OAAiB;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,KAAK,CAAI,IAAY,EAAE,OAAiB;IACtD,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC"}
|
package/target/lib.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Injector } from './lib/injector.js';
|
|
2
|
-
export { Provider, ConstructableToken, StaticToken } from './lib/provider.js';
|
|
3
|
-
export { injectable } from './lib/injectable.js';
|
|
2
|
+
export { Provider, ConstructableToken, StaticToken, token } from './lib/provider.js';
|
|
3
|
+
export { injectable, INJECTABLE_MAP } from './lib/injectable.js';
|
|
4
4
|
export { inject, Injected } from './lib/inject.js';
|
|
5
5
|
export { defineEnvironment, clearEnvironment } from './lib/environment.js';
|
package/target/lib.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { Injector } from './lib/injector.js';
|
|
2
|
-
export { StaticToken } from './lib/provider.js';
|
|
3
|
-
export { injectable } from './lib/injectable.js';
|
|
2
|
+
export { StaticToken, token } from './lib/provider.js';
|
|
3
|
+
export { injectable, INJECTABLE_MAP } from './lib/injectable.js';
|
|
4
4
|
export { inject } from './lib/inject.js';
|
|
5
5
|
export { defineEnvironment, clearEnvironment } from './lib/environment.js';
|
|
6
6
|
//# sourceMappingURL=lib.js.map
|
package/target/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAgC,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAgC,WAAW,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAY,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|