@joist/di 3.8.0 → 3.9.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 +5 -5
- package/package.json +1 -1
- package/src/lib/inject.test.ts +12 -0
- package/src/lib/inject.ts +3 -3
- package/target/lib/inject.d.ts +2 -2
- package/target/lib/inject.js.map +1 -1
- package/target/lib/inject.test.js +23 -0
- package/target/lib/inject.test.js.map +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Allows you to inject services into other class instances (including custom eleme
|
|
|
9
9
|
- [Installation](#installation)
|
|
10
10
|
- [Example Usage](#example)
|
|
11
11
|
- [Factories](#factories)
|
|
12
|
-
- [
|
|
12
|
+
- [StaticToken](#statictoken)
|
|
13
13
|
- [Testing](#testing)
|
|
14
14
|
- [LifeCycle](#life-cycle)
|
|
15
15
|
- [Parent/Child Relationship](#parentchild-relationship)
|
|
@@ -134,13 +134,13 @@ const app = new Injector([
|
|
|
134
134
|
]);
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
-
##
|
|
137
|
+
## StaticToken
|
|
138
138
|
|
|
139
139
|
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.
|
|
140
140
|
|
|
141
141
|
```ts
|
|
142
142
|
// token that resolves to a string
|
|
143
|
-
const URL_TOKEN =
|
|
143
|
+
const URL_TOKEN = new StaticToken<string>('app_url');
|
|
144
144
|
|
|
145
145
|
const app = new Injector([
|
|
146
146
|
{
|
|
@@ -155,7 +155,7 @@ const app = new Injector([
|
|
|
155
155
|
A static token can be provided a default factory function to use on creation.
|
|
156
156
|
|
|
157
157
|
```ts
|
|
158
|
-
const URL_TOKEN =
|
|
158
|
+
const URL_TOKEN = new StaticToken('app_url', () => '/default-url/');
|
|
159
159
|
```
|
|
160
160
|
|
|
161
161
|
### Async values
|
|
@@ -164,7 +164,7 @@ Static tokens can also leverage promises for cases when you need to async create
|
|
|
164
164
|
|
|
165
165
|
```ts
|
|
166
166
|
// StaticToken<Promise<string>>
|
|
167
|
-
const URL_TOKEN =
|
|
167
|
+
const URL_TOKEN = new StaticToken('app_url', () => Promise.resolve('/default-url/'));
|
|
168
168
|
|
|
169
169
|
const app = new Injector();
|
|
170
170
|
|
package/package.json
CHANGED
package/src/lib/inject.test.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { expect } from '@open-wc/testing';
|
|
|
3
3
|
import { inject } from './inject.js';
|
|
4
4
|
import { injectable } from './injectable.js';
|
|
5
5
|
import { Injector } from './injector.js';
|
|
6
|
+
import { StaticToken } from './provider.js';
|
|
6
7
|
|
|
7
8
|
describe('inject', () => {
|
|
8
9
|
it('should work', () => {
|
|
@@ -68,4 +69,15 @@ describe('inject', () => {
|
|
|
68
69
|
|
|
69
70
|
expect(parent.inject(BarService).foo().value).to.equal('100');
|
|
70
71
|
});
|
|
72
|
+
|
|
73
|
+
it('should inject a static token', () => {
|
|
74
|
+
const TOKEN = new StaticToken('test', () => 'Hello World');
|
|
75
|
+
|
|
76
|
+
@injectable
|
|
77
|
+
class HelloWorld {
|
|
78
|
+
hello = inject(TOKEN);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
expect(new HelloWorld().hello()).to.equal('Hello World');
|
|
82
|
+
});
|
|
71
83
|
});
|
package/src/lib/inject.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InjectionToken } from './provider.js';
|
|
2
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:
|
|
6
|
+
export function inject<This extends object, T>(
|
|
7
|
+
token: InjectionToken<T>
|
|
8
8
|
): Injected<T> {
|
|
9
9
|
return function (this: This) {
|
|
10
10
|
const injector = INJECTABLE_MAP.get(this);
|
package/target/lib/inject.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InjectionToken } from './provider.js';
|
|
2
2
|
export type Injected<T> = () => T;
|
|
3
|
-
export declare function inject<This extends object, T
|
|
3
|
+
export declare function inject<This extends object, T>(token: InjectionToken<T>): Injected<T>;
|
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,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,UAAU,MAAM,CACpB,
|
|
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,KAAwB;IAExB,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"}
|
|
@@ -3,6 +3,7 @@ import { expect } from '@open-wc/testing';
|
|
|
3
3
|
import { inject } from './inject.js';
|
|
4
4
|
import { injectable } from './injectable.js';
|
|
5
5
|
import { Injector } from './injector.js';
|
|
6
|
+
import { StaticToken } from './provider.js';
|
|
6
7
|
describe('inject', () => {
|
|
7
8
|
it('should work', () => {
|
|
8
9
|
class HelloService {
|
|
@@ -96,5 +97,27 @@ describe('inject', () => {
|
|
|
96
97
|
]);
|
|
97
98
|
expect(parent.inject(BarService).foo().value).to.equal('100');
|
|
98
99
|
});
|
|
100
|
+
it('should inject a static token', () => {
|
|
101
|
+
const TOKEN = new StaticToken('test', () => 'Hello World');
|
|
102
|
+
let HelloWorld = (() => {
|
|
103
|
+
let _classDecorators = [injectable];
|
|
104
|
+
let _classDescriptor;
|
|
105
|
+
let _classExtraInitializers = [];
|
|
106
|
+
let _classThis;
|
|
107
|
+
var HelloWorld = class {
|
|
108
|
+
static { _classThis = this; }
|
|
109
|
+
static {
|
|
110
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
111
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
112
|
+
HelloWorld = _classThis = _classDescriptor.value;
|
|
113
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
114
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
115
|
+
}
|
|
116
|
+
hello = inject(TOKEN);
|
|
117
|
+
};
|
|
118
|
+
return HelloWorld = _classThis;
|
|
119
|
+
})();
|
|
120
|
+
expect(new HelloWorld().hello()).to.equal('Hello World');
|
|
121
|
+
});
|
|
99
122
|
});
|
|
100
123
|
//# 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;
|
|
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;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,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,mLAAmL,CACpL,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;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;YAGrD,UAAU;oCADf,UAAU;;;;;;;;oBACX,6KAEC;;;oBAFK,uDAAU;;gBACd,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;;;;QAGxB,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|