udic 0.2.1 → 0.2.3
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 +2 -105
- package/index.d.ts +6 -2
- package/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,107 +1,4 @@
|
|
|
1
1
|
A dependency injection library.
|
|
2
|
-
```ts
|
|
3
|
-
import * as di from 'udic';
|
|
4
|
-
```
|
|
5
2
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
```ts
|
|
9
|
-
// Create a service that generates random number
|
|
10
|
-
const randNumber = di.service('randNumber')<() => number>();
|
|
11
|
-
|
|
12
|
-
// Use the service
|
|
13
|
-
const compute = di.derive(
|
|
14
|
-
[randNumber],
|
|
15
|
-
(getRandNumber) => getRandNumber() + 1
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
// 1
|
|
19
|
-
console.log(
|
|
20
|
-
compute({ randNumber: () => 0 })
|
|
21
|
-
);
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Nested `derive()`:
|
|
25
|
-
```ts
|
|
26
|
-
// Create a service that generates random number
|
|
27
|
-
const randNumber = di.service('randNumber')<() => number>();
|
|
28
|
-
|
|
29
|
-
// Use the service
|
|
30
|
-
const compute = di.derive(
|
|
31
|
-
[randNumber],
|
|
32
|
-
(getRandNumber) => getRandNumber() + 1
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
// Use `compute()` within current context
|
|
36
|
-
const anotherCompute = di.derive(
|
|
37
|
-
[compute],
|
|
38
|
-
(computedValue) => computedValue * 2
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
// 2
|
|
42
|
-
console.log(
|
|
43
|
-
anotherCompute({ randNumber: () => 0 })
|
|
44
|
-
);
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Multiple dependencies:
|
|
48
|
-
```ts
|
|
49
|
-
// Create a service that generates random number
|
|
50
|
-
const randNumber = di.service('randNumber')<() => number>();
|
|
51
|
-
|
|
52
|
-
// Use the service
|
|
53
|
-
const computeNumber = di.derive(
|
|
54
|
-
[randNumber],
|
|
55
|
-
(getRandNumber) => getRandNumber() + 1,
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
// Create a service that generates random string
|
|
59
|
-
const randString = di.service('randString')<() => string>();
|
|
60
|
-
|
|
61
|
-
// Use the computed value of `computed`
|
|
62
|
-
const computeString = di.derive(
|
|
63
|
-
[randString, computeNumber],
|
|
64
|
-
(getRandString, number) => getRandString() + ': ' + number,
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
// 'reve: 1'
|
|
68
|
-
console.log(
|
|
69
|
-
computeString({
|
|
70
|
-
randNumber: () => 0,
|
|
71
|
-
randString: () => 'reve',
|
|
72
|
-
}),
|
|
73
|
-
);
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
Inject not all dependencies:
|
|
77
|
-
```ts
|
|
78
|
-
// Create a service that generates random number
|
|
79
|
-
const randNumber = di.service('randNumber')<() => number>();
|
|
80
|
-
|
|
81
|
-
// Use the service
|
|
82
|
-
const computeNumber = di.derive(
|
|
83
|
-
[randNumber],
|
|
84
|
-
(getRandNumber) => getRandNumber() + 1,
|
|
85
|
-
);
|
|
86
|
-
|
|
87
|
-
// Create a service that generates random string
|
|
88
|
-
const randString = di.service('randString')<() => string>();
|
|
89
|
-
|
|
90
|
-
// Use the computed value of `computed`
|
|
91
|
-
const computeString = di.derive(
|
|
92
|
-
[randString, computeNumber],
|
|
93
|
-
(getRandString, number) => getRandString() + ': ' + number,
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
// Inject the randNumber service
|
|
97
|
-
const computeString1 = di.inject(computeString, {
|
|
98
|
-
randNumber: () => 0
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
// 'reve: 1'
|
|
102
|
-
console.log(
|
|
103
|
-
computeString1({
|
|
104
|
-
randString: () => 'reve',
|
|
105
|
-
}),
|
|
106
|
-
);
|
|
107
|
-
```
|
|
3
|
+
## Docs
|
|
4
|
+
Documentation is now on [re-utils/di](https://re-utils.pages.dev/di).
|
package/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ declare const _d: unique symbol;
|
|
|
3
3
|
type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
|
|
4
4
|
type Prettify<T> = { [K in keyof T] : T[K] } & {};
|
|
5
5
|
export interface Service<
|
|
6
|
-
T extends string
|
|
6
|
+
T extends string,
|
|
7
7
|
K
|
|
8
8
|
> {
|
|
9
9
|
[_t]: K;
|
|
@@ -24,7 +24,7 @@ export type InferDependency<T extends Dependency> = Prettify<UnionToIntersection
|
|
|
24
24
|
* Create a service
|
|
25
25
|
* @param name - The service name
|
|
26
26
|
*/
|
|
27
|
-
export declare const service: <T extends string
|
|
27
|
+
export declare const service: <T extends string>(name: T) => (<K>() => Service<T, K> & T);
|
|
28
28
|
/**
|
|
29
29
|
* Create a compute that relies on other services or computes
|
|
30
30
|
* @param deps - The service dependencies
|
|
@@ -44,4 +44,8 @@ export declare const inject: <
|
|
|
44
44
|
R,
|
|
45
45
|
D extends Partial<T>
|
|
46
46
|
>(compute: Compute<T, R>, d: D) => Compute<Prettify<Omit<T, keyof D>>, R>;
|
|
47
|
+
export declare const layer: <
|
|
48
|
+
C extends Record<string, Compute<any, any>>,
|
|
49
|
+
D extends InferDependency<C[keyof C]>
|
|
50
|
+
>(r: C, d: D) => Prettify<{ [K in keyof C] : InferResult<C[K]> } & D>;
|
|
47
51
|
export {};
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
let _t=Symbol()
|
|
1
|
+
let _t=Symbol();export let service=e=>()=>e;let tag=r=>(r[_t]=Symbol(),r);export let derive=(r,a)=>tag(i=>a(...r.map(r=>typeof r===`function`?i[r[_t]]??=r(i):i[r])));export let inject=(e,r)=>tag(i=>e({...i,...r}));export let layer=(e,r)=>{for(let i in e)e[i]=e[i](r);return Object.assign(e,r)};
|