@modular-component/core 0.1.2 → 0.1.4

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 (67) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/index.d.ts +304 -91
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +107 -53
  5. package/dist/index.js.map +1 -1
  6. package/dist/types/arguments.d.ts +33 -0
  7. package/dist/types/arguments.d.ts.map +1 -0
  8. package/dist/types/arguments.js +6 -0
  9. package/dist/types/arguments.js.map +1 -0
  10. package/dist/types/methods/add.d.ts +23 -0
  11. package/dist/types/methods/add.d.ts.map +1 -0
  12. package/dist/types/methods/add.js +8 -0
  13. package/dist/types/methods/add.js.map +1 -0
  14. package/dist/types/methods/at.d.ts +22 -0
  15. package/dist/types/methods/at.d.ts.map +1 -0
  16. package/dist/types/methods/at.js +7 -0
  17. package/dist/types/methods/at.js.map +1 -0
  18. package/dist/types/methods/hook.d.ts +14 -0
  19. package/dist/types/methods/hook.d.ts.map +1 -0
  20. package/dist/types/methods/hook.js +7 -0
  21. package/dist/types/methods/hook.js.map +1 -0
  22. package/dist/types/methods/mock.d.ts +26 -0
  23. package/dist/types/methods/mock.d.ts.map +1 -0
  24. package/dist/types/methods/mock.js +6 -0
  25. package/dist/types/methods/mock.js.map +1 -0
  26. package/dist/types/methods/with.d.ts +44 -0
  27. package/dist/types/methods/with.d.ts.map +1 -0
  28. package/dist/types/methods/with.js +8 -0
  29. package/dist/types/methods/with.js.map +1 -0
  30. package/dist/types/methods.d.ts +10 -0
  31. package/dist/types/methods.d.ts.map +1 -0
  32. package/dist/types/methods.js +5 -0
  33. package/dist/types/methods.js.map +1 -0
  34. package/dist/types/modular-component.d.ts +15 -0
  35. package/dist/types/modular-component.d.ts.map +1 -0
  36. package/dist/types/modular-component.js +5 -0
  37. package/dist/types/modular-component.js.map +1 -0
  38. package/dist/types/stage.d.ts +41 -0
  39. package/dist/types/stage.d.ts.map +1 -0
  40. package/dist/types/stage.js +5 -0
  41. package/dist/types/stage.js.map +1 -0
  42. package/dist/types/utils.d.ts +24 -0
  43. package/dist/types/utils.d.ts.map +1 -0
  44. package/dist/types/utils.js +5 -0
  45. package/dist/types/utils.js.map +1 -0
  46. package/dist/types/validation.d.ts +4 -0
  47. package/dist/types/validation.d.ts.map +1 -0
  48. package/dist/types/validation.js +2 -0
  49. package/dist/types/validation.js.map +1 -0
  50. package/package.json +1 -1
  51. package/src/index.ts +185 -83
  52. package/src/types/arguments.ts +55 -0
  53. package/src/types/methods/add.ts +50 -0
  54. package/src/types/methods/at.ts +64 -0
  55. package/src/types/methods/hook.ts +27 -0
  56. package/src/types/methods/mock.ts +90 -0
  57. package/src/types/methods/with.ts +153 -0
  58. package/src/types/methods.ts +11 -0
  59. package/src/types/modular-component.ts +25 -0
  60. package/src/types/stage.ts +91 -0
  61. package/src/types/utils.ts +63 -0
  62. package/src/types/validation.ts +13 -0
  63. package/dist/types.d.ts +0 -76
  64. package/dist/types.d.ts.map +0 -1
  65. package/dist/types.js +0 -2
  66. package/dist/types.js.map +0 -1
  67. package/src/types.ts +0 -279
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Methods for mocking the value returned by a given stage,
3
+ * replacing the stage and bypassing its transform function
4
+ */
5
+
6
+ import { ModularComponent } from '../modular-component'
7
+ import { MethodRecord } from '../methods'
8
+ import { ValidateIndex } from '../validation'
9
+ import { ComputeArguments } from '../arguments'
10
+ import { FilterNever, Last, ToIndices } from '../utils'
11
+ import { BeforeStage, ModularStages, StageIndices, StageTuple } from '../stage'
12
+
13
+ interface ModularMockMethodIndices<
14
+ Props extends {},
15
+ Ref,
16
+ Methods extends Record<string, MethodRecord>,
17
+ Stages extends StageTuple,
18
+ Method extends keyof Methods,
19
+ Indices extends number[],
20
+ Symbol extends keyof ModularStages = Methods[Method]['symbol'],
21
+ > {
22
+ <
23
+ Arguments extends ComputeArguments<
24
+ Props,
25
+ Ref,
26
+ Methods,
27
+ BeforeStage<Stages, StageIndex>
28
+ >,
29
+ // Value validation
30
+ Value extends Stages[StageIndex]['value'],
31
+ Mock extends ModularStages<Arguments, Value>[Symbol] extends {
32
+ transform: infer T
33
+ }
34
+ ? T
35
+ : Value,
36
+ // Validate index
37
+ StageIndex extends Index extends number ? Indices[Index] : Last<Indices>,
38
+ ValidIndex extends ValidateIndex<Index, ToIndices<Indices>>,
39
+ Index extends number,
40
+ >(
41
+ mock: Mock,
42
+ index: ValidIndex extends true ? Index : ToIndices<Indices>,
43
+ ): ModularComponent<Props, Ref, Methods, Stages>
44
+ }
45
+
46
+ interface ModularMockMethodLast<
47
+ Props extends {},
48
+ Ref,
49
+ Methods extends Record<string, MethodRecord>,
50
+ Stages extends StageTuple,
51
+ Method extends keyof Methods,
52
+ Index extends number,
53
+ Symbol extends keyof ModularStages = Methods[Method]['symbol'],
54
+ > {
55
+ <
56
+ // Value validation
57
+ Value extends Stages[Index]['value'],
58
+ Mock extends ModularStages<any, Value>[Symbol] extends {
59
+ transform: infer T
60
+ }
61
+ ? T
62
+ : Value,
63
+ >(
64
+ mock: Mock,
65
+ ): ModularComponent<Props, Ref, Methods, Stages>
66
+ }
67
+
68
+ type ModularMockMethod<
69
+ Props extends {},
70
+ Ref,
71
+ Methods extends Record<string, MethodRecord>,
72
+ Stages extends StageTuple,
73
+ Method extends keyof Methods,
74
+ Symbol extends keyof ModularStages = Methods[Method]['symbol'],
75
+ Indices extends StageIndices<Stages, Symbol> = StageIndices<Stages, Symbol>,
76
+ > = Indices['length'] extends 0
77
+ ? never
78
+ : ModularMockMethodIndices<Props, Ref, Methods, Stages, Method, Indices> &
79
+ ModularMockMethodLast<Props, Ref, Methods, Stages, Method, Last<Indices>>
80
+
81
+ export type ModularMockMethods<
82
+ Props extends {},
83
+ Ref,
84
+ Methods extends Record<string, MethodRecord>,
85
+ Stages extends StageTuple,
86
+ > = FilterNever<{
87
+ [Method in keyof Methods as `mock${Method extends string
88
+ ? Method
89
+ : never}`]: ModularMockMethod<Props, Ref, Methods, Stages, Method>
90
+ }>
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Main factory methods adding or editing an entry for a given
3
+ * stage. If multiple entries for the same stage were added
4
+ * with the `add` method, an index can be passed to select the
5
+ * entry to edit.
6
+ */
7
+
8
+ import { ModularComponent } from '../modular-component'
9
+ import { Last, ToIndices } from '../utils'
10
+ import {
11
+ BeforeStage,
12
+ ModularStages,
13
+ StageIndices,
14
+ StageTuple,
15
+ UpsertStage,
16
+ } from '../stage'
17
+ import { MethodRecord } from '../methods'
18
+ import { ComputeArguments } from '../arguments'
19
+ import { RestrictValue, ValidateIndex } from '../validation'
20
+
21
+ interface ModularWithMethodDefault<
22
+ Props extends {},
23
+ Ref,
24
+ Methods extends Record<string, MethodRecord>,
25
+ Stages extends StageTuple,
26
+ Method extends keyof Methods,
27
+ Symbol extends keyof ModularStages = Methods[Method]['symbol'],
28
+ Arguments extends {} = ComputeArguments<Props, Ref, Methods, Stages>,
29
+ > {
30
+ <Value extends RestrictValue<Arguments, Symbol>>(
31
+ value: Value,
32
+ ): ModularComponent<
33
+ Props,
34
+ Ref,
35
+ Methods,
36
+ UpsertStage<Stages, { stage: Symbol; value: Value }>
37
+ >
38
+ }
39
+
40
+ interface ModularWithMethodIndices<
41
+ Props extends {},
42
+ Ref,
43
+ Methods extends Record<string, MethodRecord>,
44
+ Stages extends StageTuple,
45
+ Method extends keyof Methods,
46
+ Indices extends number[],
47
+ Symbol extends keyof ModularStages = Methods[Method]['symbol'],
48
+ > {
49
+ <
50
+ Arguments extends ComputeArguments<
51
+ Props,
52
+ Ref,
53
+ Methods,
54
+ BeforeStage<Stages, StageIndex>
55
+ >,
56
+ // Validate value
57
+ Value extends RestrictValue<Arguments, Symbol>,
58
+ PreviousValue extends Stages[StageIndex]['value'],
59
+ Valid extends ModularStages<Arguments, Value>[Symbol] extends {
60
+ validate: infer V
61
+ }
62
+ ? V
63
+ : Value,
64
+ PreviousValid extends ModularStages<
65
+ Arguments,
66
+ PreviousValue
67
+ >[Symbol] extends {
68
+ validate: infer V
69
+ }
70
+ ? V
71
+ : PreviousValue,
72
+ ValidValue extends [Valid] extends [PreviousValid] ? true : false,
73
+ // Validate index
74
+ StageIndex extends Index extends number ? Indices[Index] : Last<Indices>,
75
+ ValidIndex extends ValidateIndex<Index, ToIndices<Indices>>,
76
+ Index extends number,
77
+ >(
78
+ value: ValidValue extends true ? Value : PreviousValue,
79
+ index: ValidIndex extends true ? Index : ToIndices<Indices>,
80
+ ): ModularComponent<
81
+ Props,
82
+ Ref,
83
+ Methods,
84
+ UpsertStage<Stages, { stage: Symbol; value: Value }, StageIndex>
85
+ >
86
+ }
87
+
88
+ interface ModularWithMethodLast<
89
+ Props extends {},
90
+ Ref,
91
+ Methods extends Record<string, MethodRecord>,
92
+ Stages extends StageTuple,
93
+ Method extends keyof Methods,
94
+ Index extends number,
95
+ Symbol extends keyof ModularStages = Methods[Method]['symbol'],
96
+ Arguments extends {} = ComputeArguments<
97
+ Props,
98
+ Ref,
99
+ Methods,
100
+ BeforeStage<Stages, Index>
101
+ >,
102
+ > {
103
+ <
104
+ // Validate value
105
+ Value extends RestrictValue<Arguments, Symbol>,
106
+ PreviousValue extends Stages[Index]['value'],
107
+ Valid extends ModularStages<Arguments, Value>[Symbol] extends {
108
+ validate: infer V
109
+ }
110
+ ? V
111
+ : Value,
112
+ PreviousValid extends ModularStages<
113
+ Arguments,
114
+ PreviousValue
115
+ >[Symbol] extends {
116
+ validate: infer V
117
+ }
118
+ ? V
119
+ : PreviousValue,
120
+ ValidValue extends [Valid] extends [PreviousValid] ? true : false,
121
+ >(
122
+ value: ValidValue extends true ? Value : PreviousValue,
123
+ ): ModularComponent<
124
+ Props,
125
+ Ref,
126
+ Methods,
127
+ UpsertStage<Stages, { stage: Symbol; value: Value }, Index>
128
+ >
129
+ }
130
+
131
+ type ModularWithMethod<
132
+ Props extends {},
133
+ Ref,
134
+ Methods extends Record<string, MethodRecord>,
135
+ Stages extends StageTuple,
136
+ Method extends keyof Methods,
137
+ Symbol extends keyof ModularStages = Methods[Method]['symbol'],
138
+ Indices extends StageIndices<Stages, Symbol> = StageIndices<Stages, Symbol>,
139
+ > = Indices['length'] extends 0
140
+ ? ModularWithMethodDefault<Props, Ref, Methods, Stages, Method>
141
+ : ModularWithMethodIndices<Props, Ref, Methods, Stages, Method, Indices> &
142
+ ModularWithMethodLast<Props, Ref, Methods, Stages, Method, Last<Indices>>
143
+
144
+ export type ModularWithMethods<
145
+ Props extends {},
146
+ Ref,
147
+ Methods extends Record<string, MethodRecord>,
148
+ Stages extends StageTuple,
149
+ > = {
150
+ [Method in keyof Methods as `with${Method extends string
151
+ ? Method
152
+ : never}`]: ModularWithMethod<Props, Ref, Methods, Stages, Method>
153
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Helper types for handling method records
3
+ */
4
+
5
+ import { ModularStages } from './stage'
6
+
7
+ export type MethodRecord = {
8
+ symbol: keyof ModularStages
9
+ field: string
10
+ transform?: (args: any, value: any) => any
11
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Main ModularComponent type
3
+ */
4
+
5
+ import { ForwardedRef, FunctionComponent, PropsWithChildren } from 'react'
6
+
7
+ import { StageTuple } from './stage'
8
+ import { MethodRecord } from './methods'
9
+ import { ModularWithMethods } from './methods/with'
10
+ import { ModularAddMethods } from './methods/add'
11
+ import { ModularAtMethods } from './methods/at'
12
+ import { ModularMockMethods } from './methods/mock'
13
+ import { ModularHookMethods } from './methods/hook'
14
+
15
+ export type ModularComponent<
16
+ Props extends {},
17
+ Ref,
18
+ Methods extends Record<string, MethodRecord>,
19
+ Stages extends StageTuple,
20
+ > = ModularWithMethods<Props, Ref, Methods, Stages> &
21
+ ModularAddMethods<Props, Ref, Methods, Stages> &
22
+ ModularAtMethods<Props, Ref, Methods, Stages> &
23
+ ModularMockMethods<Props, Ref, Methods, Stages> &
24
+ ModularHookMethods<Props, Ref, Methods, Stages> &
25
+ FunctionComponent<PropsWithChildren<Props & { ref?: ForwardedRef<Ref> }>>
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Helper for manipulating stages and stage tuples
3
+ */
4
+
5
+ import { At, Before, Reduce, After, OneLess } from './utils'
6
+
7
+ export interface ModularStages<Args = any, Value = any> {}
8
+
9
+ type StageRecord = {
10
+ stage: keyof ModularStages
11
+ value: unknown
12
+ }
13
+ export type StageTuple = StageRecord[]
14
+
15
+ export type AddStage<List extends StageTuple, Stage extends StageRecord> = [
16
+ ...List,
17
+ Stage,
18
+ ]
19
+
20
+ export type ReplaceStageAt<
21
+ List extends StageTuple,
22
+ Stage extends StageRecord,
23
+ At extends number | string,
24
+ > = {
25
+ [Index in keyof List]: Index extends At
26
+ ? List[Index]['stage'] extends Stage['stage']
27
+ ? Stage
28
+ : List[Index]
29
+ : List[Index]
30
+ }
31
+
32
+ type ReplaceStage<
33
+ List extends StageTuple,
34
+ Stage extends StageRecord,
35
+ At extends number | string = never,
36
+ > = [At] extends [never]
37
+ ? {
38
+ [Index in keyof List]: List[Index]['stage'] extends Stage['stage']
39
+ ? Stage
40
+ : List[Index]
41
+ }
42
+ : ReplaceStageAt<List, Stage, At>
43
+
44
+ export type ExtractStage<
45
+ List extends StageTuple,
46
+ Stage extends symbol,
47
+ Union = List[number],
48
+ > = Union extends { stage: Stage; value: infer U }
49
+ ? { stage: Stage; value: U }
50
+ : never
51
+
52
+ export type UpsertStage<
53
+ List extends StageTuple,
54
+ Stage extends StageRecord,
55
+ At extends number = never,
56
+ > = [ExtractStage<List, Stage['stage']>] extends [never]
57
+ ? AddStage<List, Stage>
58
+ : ReplaceStage<List, Stage, At>
59
+
60
+ type IsolateStage<Tuple extends StageTuple, Stage extends symbol> = {
61
+ [key in keyof Tuple]: Tuple[key]['stage'] extends Stage ? key : never
62
+ }
63
+
64
+ export type StageIndices<
65
+ Tuple extends StageTuple,
66
+ Stage extends symbol,
67
+ > = Reduce<IsolateStage<Tuple, Stage>>
68
+
69
+ export type AtStage<
70
+ Tuple extends StageTuple,
71
+ Index extends number | string,
72
+ > = At<Tuple, Index> extends StageTuple ? At<Tuple, Index> : []
73
+
74
+ export type BeforeStage<
75
+ Tuple extends StageTuple,
76
+ Index extends number | string,
77
+ > = Before<Tuple, Index> extends StageTuple ? Before<Tuple, Index> : []
78
+
79
+ type AfterStage<
80
+ Tuple extends StageTuple,
81
+ Index extends number | string,
82
+ > = After<Tuple, Index> extends StageTuple ? After<Tuple, Index> : []
83
+
84
+ export type CleanUpStages<Tuple extends StageTuple> = {
85
+ [key in keyof Tuple]: StageIndices<
86
+ OneLess<AfterStage<Tuple, key>>,
87
+ Tuple[key]['stage']
88
+ >['length'] extends 0
89
+ ? Tuple[key]
90
+ : never
91
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Generic type helpers (tuple, union, object...)
3
+ */
4
+
5
+ // Tuple handling
6
+ export type OneLess<Tuple extends unknown[]> = Tuple extends [
7
+ unknown,
8
+ ...infer Rest,
9
+ ]
10
+ ? Rest
11
+ : Tuple
12
+ export type Before<
13
+ Tuple extends unknown[],
14
+ Index extends string | number,
15
+ > = `${Tuple['length']}` extends `${Index}`
16
+ ? Tuple
17
+ : Tuple extends [...infer Keep, infer Drop]
18
+ ? Before<Keep, Index>
19
+ : never
20
+ export type After<
21
+ Tuple extends unknown[],
22
+ Index extends string | number,
23
+ Rest extends unknown[] = [],
24
+ > = `${Rest['length']}` extends `${Index}`
25
+ ? Tuple
26
+ : Tuple extends [infer Drop, ...infer Keep]
27
+ ? After<Keep, Index, [...Rest, Drop]>
28
+ : never
29
+ export type At<
30
+ Tuple extends unknown[],
31
+ Index extends string | number,
32
+ > = `${OneLess<Tuple>['length']}` extends `${Index}`
33
+ ? Tuple
34
+ : Tuple extends [...infer Keep, infer Drop]
35
+ ? At<Keep, Index>
36
+ : never
37
+ export type Reduce<T extends unknown[]> = T extends [...infer R, infer L]
38
+ ? [L] extends [never]
39
+ ? [...Reduce<R>]
40
+ : [...Reduce<R>, L]
41
+ : T
42
+ export type ToIndices<T extends unknown[]> = { [key in keyof T]: key }[number]
43
+ export type Last<T extends unknown[]> = T extends [...infer R, infer L]
44
+ ? L
45
+ : never
46
+
47
+ // Union handling
48
+
49
+ // Collapse a union of similar object into the intersection of the various objects
50
+ export type UnionToIntersection<U> = [U] extends [never]
51
+ ? never
52
+ : (U extends infer V ? (k: U) => void : never) extends (k: infer I) => void
53
+ ? I
54
+ : never
55
+
56
+ // Object handling
57
+ type NonNeverKeys<Obj extends {}> = {
58
+ [key in keyof Obj]: Obj[key] extends never ? never : key
59
+ }[keyof Obj]
60
+
61
+ export type FilterNever<Obj extends {}> = {
62
+ [key in NonNeverKeys<Obj>]: Obj[key]
63
+ }
@@ -0,0 +1,13 @@
1
+ import { ModularStages } from './stage'
2
+
3
+ export type ValidateIndex<
4
+ Index extends number | undefined,
5
+ Candidates extends string | number,
6
+ > = `${Index}` extends Candidates ? true : false
7
+
8
+ export type RestrictValue<
9
+ Arguments extends {},
10
+ Stage extends keyof ModularStages,
11
+ > = ModularStages<Arguments>[Stage]['restrict'] extends never
12
+ ? unknown
13
+ : ModularStages<Arguments>[Stage]['restrict']
package/dist/types.d.ts DELETED
@@ -1,76 +0,0 @@
1
- import { FunctionComponent } from 'react';
2
- declare type UnionToIntersection<U> = [U] extends [never] ? never : (U extends infer V ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
3
- export declare type StageEntry = {
4
- key: MethodName;
5
- value: unknown;
6
- stages: string;
7
- };
8
- declare type StageList = StageEntry[];
9
- export declare type MethodName = `with${Capitalize<string>}`;
10
- export declare type MethodEntry = {
11
- field: string;
12
- transform?: (args: any, value: any) => any;
13
- restrict?: unknown;
14
- multiple?: boolean;
15
- empty?: boolean;
16
- symbol?: symbol;
17
- };
18
- export declare type MethodRecord = Record<MethodName, MethodEntry>;
19
- declare type AppendStage<List extends StageList, Stage extends MethodName, Value extends unknown, Prev extends StageEntry = GetStage<List, Stage>> = [
20
- ...List,
21
- {
22
- key: Stage;
23
- value: Value;
24
- stages: [Prev] extends [never] ? List[number]['key'] : Prev['stages'];
25
- }
26
- ];
27
- declare type DropStages<List extends StageList, Dropped extends string> = {
28
- [Index in keyof List]: List[Index]['key'] extends Dropped ? never : List[Index];
29
- };
30
- declare type KeepStages<List extends StageList, Allowed extends string> = {
31
- [Index in keyof List]: List[Index]['key'] extends Allowed ? List[Index] : never;
32
- };
33
- declare type GetStage<List extends StageList, Key extends MethodName, Union = List[number]> = Union extends {
34
- key: Key;
35
- value: infer U;
36
- stages: infer S;
37
- } ? {
38
- key: Key;
39
- value: U;
40
- stages: S;
41
- } : never;
42
- declare type GetStageValue<List extends StageList, Key extends MethodName> = UnionToIntersection<GetStage<List, Key>['value']>;
43
- declare type ComputeArgs<Stages extends StageList, Limit extends string, Union = Stages[number], Intersection = UnionToIntersection<Union extends {
44
- key: infer Key;
45
- value: infer Value;
46
- } ? {
47
- [key in Key extends string ? Key : never]: Value;
48
- } : never>> = Pick<Intersection, Limit extends keyof Intersection ? Limit : never> extends infer U ? {
49
- [key in keyof U]: U[key] extends Record<string, unknown> ? U[key] extends infer V ? {
50
- [key in keyof V]: V[key];
51
- } : never : U[key];
52
- } : never;
53
- declare type TransformArg<Value, Symbol> = Symbol extends keyof ModularStageTransform<Value> ? ModularStageTransform<Value>[Symbol] : Value;
54
- declare type MapArgs<Stages extends StageList, Limit extends string, Methods extends MethodRecord, Props, Args = ComputeArgs<Stages, Limit>> = UnionToIntersection<{
55
- props: Props;
56
- } | {
57
- [key in keyof Methods]: key extends keyof Args ? Methods[key] extends MethodEntry ? {
58
- [k in Methods[key]['field']]: TransformArg<Args[key], Methods[key]['symbol']>;
59
- } : never : never;
60
- }[keyof Methods]> extends infer U ? {
61
- [key in keyof U]: U[key] extends Record<string, unknown> ? U[key] extends infer V ? {
62
- [key in keyof V]: V[key];
63
- } : never : U[key];
64
- } : never;
65
- declare type ModularExtension<Props, Methods extends MethodRecord, Stages extends StageList> = {
66
- [key in keyof Methods]: (Methods[key] extends MethodEntry ? Methods[key] : never)['restrict'] extends undefined ? <Key extends key extends MethodName ? key : never, Method extends Methods[Key] extends MethodEntry ? Methods[Key] : never, Prev extends Method['multiple'] extends true ? never : GetStageValue<Stages, Key>, Limit extends Method['multiple'] extends true ? Stages[number]['key'] : [GetStage<Stages, Key>] extends [never] ? Stages[number]['key'] : GetStage<Stages, Key>['stages'], KeptStages extends Method['multiple'] extends true ? DropStages<Stages, Key> : Stages, Value extends [Prev] extends [never] ? [Method['restrict']] extends [never] ? unknown : Method['restrict'] : Prev>(value?: Value | ((args: MapArgs<Stages, Limit, Methods, Props>) => Value | void)) => Modular<Props, Methods, AppendStage<KeptStages, Key, Value>> : <Key extends key extends MethodName ? key : never, Method extends Methods[Key] extends MethodEntry ? Methods[Key] : never, Prev extends Method['multiple'] extends true ? never : GetStageValue<Stages, Key>, Limit extends Method['multiple'] extends true ? Stages[number]['key'] : [GetStage<Stages, Key>] extends [never] ? Stages[number]['key'] : GetStage<Stages, Key>['stages'], KeptStages extends Method['multiple'] extends true ? DropStages<Stages, Key> : Stages, Value extends [Prev] extends [never] ? [Method['restrict']] extends [never] ? unknown : Method['restrict'] : Prev>(value: Value | ((args: MapArgs<Stages, Limit, Methods, Props>) => Value)) => Modular<Props, Methods, AppendStage<KeptStages, Key, Value>>;
67
- } & {
68
- atStage<Key extends Stages[number]['key'], KeptStages extends KeepStages<Stages, GetStage<Stages, Key>['stages'] | Key>>(stage: Key): Modular<Props, Methods, KeptStages>;
69
- asHook(): Props extends {} ? () => MapArgs<Stages, Stages[number]['key'], Methods, Props> : (props: Props) => MapArgs<Stages, Stages[number]['key'], Methods, Props>;
70
- asHook<Field extends keyof MapArgs<Stages, Stages[number]['key'], Methods, Props>>(field: Field): Props extends {} ? () => MapArgs<Stages, Stages[number]['key'], Methods, Props>[Field] : (props: Props) => MapArgs<Stages, Stages[number]['key'], Methods, Props>[Field];
71
- };
72
- export declare type Modular<Props, Methods extends MethodRecord, Stages extends StageList> = FunctionComponent<Props> & ModularExtension<Props, Methods, Stages>;
73
- export interface ModularStageTransform<T> {
74
- }
75
- export {};
76
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}