udic 0.2.3 → 0.3.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.
Files changed (3) hide show
  1. package/index.d.ts +29 -13
  2. package/index.js +1 -1
  3. 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
- T extends string,
7
- K
6
+ K extends string,
7
+ T
8
8
  > {
9
- [_t]: K;
10
- [_d]: undefined extends K ? { [k in T]? : K } : { [k in T] : K };
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,22 +17,33 @@ export interface Compute<
17
17
  [_d]: T;
18
18
  (c: T): R;
19
19
  }
20
- export type Dependency = Service<any, any> | Compute<any, any>;
21
- export type InferResult<T extends Dependency> = T[typeof _t];
22
- export type InferDependency<T extends Dependency> = Prettify<UnionToIntersection<T[typeof _d]>>;
20
+ export interface Layer<
21
+ K extends string,
22
+ D,
23
+ R
24
+ > {
25
+ [_t]: { [k in K] : R };
26
+ [_d]: D;
27
+ }
28
+ export type InferResult<T extends {
29
+ [_t]: any
30
+ }> = T[typeof _t];
31
+ export type InferDependency<T extends {
32
+ [_d]: any
33
+ }> = Prettify<UnionToIntersection<T[typeof _d]>>;
23
34
  /**
24
35
  * Create a service
25
36
  * @param name - The service name
26
37
  */
27
- export declare const service: <T extends string>(name: T) => (<K>() => Service<T, K> & T);
38
+ export declare const service: <const T extends string>(name: T) => (<K>() => Service<T, K> & T);
28
39
  /**
29
40
  * Create a compute that relies on other services or computes
30
41
  * @param deps - The service dependencies
31
42
  * @param f
32
43
  */
33
44
  export declare const derive: <
34
- const T extends Dependency[],
35
- const R
45
+ const T extends (Service<any, any> | Compute<any, any>)[],
46
+ R
36
47
  >(deps: T, f: (...args: { [K in keyof T] : InferResult<T[K]> }) => R) => Compute<InferDependency<T[number]>, R>;
37
48
  /**
38
49
  * Inject dependencies to the compute
@@ -45,7 +56,12 @@ export declare const inject: <
45
56
  D extends Partial<T>
46
57
  >(compute: Compute<T, R>, d: D) => Compute<Prettify<Omit<T, keyof D>>, R>;
47
58
  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>;
59
+ K extends string,
60
+ T,
61
+ D
62
+ >(service: Service<K, T>, compute: Compute<D, T>) => Layer<K, D, T>;
63
+ export declare const provide: <
64
+ const T extends Layer<any, any, any>[],
65
+ D extends InferDependency<T[number]>
66
+ >(layers: T, deps: D) => Prettify<D & InferResult<T[number]>>;
51
67
  export {};
package/index.js CHANGED
@@ -1 +1 @@
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)};
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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "udic",
3
- "version": "0.2.3",
3
+ "version": "0.3.1",
4
4
  "description": "A simple dependency injection library",
5
5
  "keywords": ["di"],
6
6
  "license": "MIT",