udic 0.2.3 → 0.3.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/index.d.ts +28 -11
- package/index.js +1 -1
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ 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
|
-
|
|
7
|
-
|
|
6
|
+
K extends string,
|
|
7
|
+
T
|
|
8
8
|
> {
|
|
9
|
-
[_t]:
|
|
10
|
-
[_d]: undefined extends
|
|
9
|
+
[_t]: T;
|
|
10
|
+
[_d]: undefined extends T ? { [k in K]? : T } : { [k in K] : T };
|
|
11
11
|
}
|
|
12
12
|
export interface Compute<
|
|
13
13
|
T,
|
|
@@ -17,9 +17,21 @@ export interface Compute<
|
|
|
17
17
|
[_d]: T;
|
|
18
18
|
(c: T): R;
|
|
19
19
|
}
|
|
20
|
-
export
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
export interface Layer<
|
|
21
|
+
K extends string,
|
|
22
|
+
C extends Compute<any, any>
|
|
23
|
+
> {
|
|
24
|
+
[_t]: { [k in K] : InferResult<C> };
|
|
25
|
+
[_d]: InferDependency<C>;
|
|
26
|
+
0: K;
|
|
27
|
+
1: C;
|
|
28
|
+
}
|
|
29
|
+
export type InferResult<T extends {
|
|
30
|
+
[_t]: any
|
|
31
|
+
}> = T[typeof _t];
|
|
32
|
+
export type InferDependency<T extends {
|
|
33
|
+
[_d]: any
|
|
34
|
+
}> = Prettify<UnionToIntersection<T[typeof _d]>>;
|
|
23
35
|
/**
|
|
24
36
|
* Create a service
|
|
25
37
|
* @param name - The service name
|
|
@@ -31,7 +43,7 @@ export declare const service: <T extends string>(name: T) => (<K>() => Service<T
|
|
|
31
43
|
* @param f
|
|
32
44
|
*/
|
|
33
45
|
export declare const derive: <
|
|
34
|
-
const T extends
|
|
46
|
+
const T extends (Service<any, any> | Compute<any, any>)[],
|
|
35
47
|
const R
|
|
36
48
|
>(deps: T, f: (...args: { [K in keyof T] : InferResult<T[K]> }) => R) => Compute<InferDependency<T[number]>, R>;
|
|
37
49
|
/**
|
|
@@ -45,7 +57,12 @@ export declare const inject: <
|
|
|
45
57
|
D extends Partial<T>
|
|
46
58
|
>(compute: Compute<T, R>, d: D) => Compute<Prettify<Omit<T, keyof D>>, R>;
|
|
47
59
|
export declare const layer: <
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
60
|
+
T,
|
|
61
|
+
K extends string,
|
|
62
|
+
const C extends Compute<any, T>
|
|
63
|
+
>(service: Service<K, T>, compute: C) => Layer<K, C>;
|
|
64
|
+
export declare const provide: <
|
|
65
|
+
const T extends Layer<any, any>[],
|
|
66
|
+
const D extends InferDependency<T[number]>
|
|
67
|
+
>(layers: T, deps: D) => Prettify<D & InferResult<T[number]>>;
|
|
51
68
|
export {};
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
let _t=Symbol();export let service=e=>()=>e;let tag=
|
|
1
|
+
let _t=Symbol();export let service=e=>()=>e;let tag=i=>(i[_t]=Symbol(),i);export let derive=(i,o)=>tag(a=>o(...i.map(i=>typeof i===`function`?a[i[_t]]??=i(a):a[i])));export let inject=(e,i)=>tag(a=>e({...a,...i}));export let layer=(e,i)=>[e,i];export let provide=(e,i)=>{for(let a=0;a<e.length;a++)i[e[a][0]]=e[a][1](i);return i};
|