Skip to content

Commit ea7f1a3

Browse files
feat: Better type tooling around custom config (FieldStatus types etc...) #132
1 parent 9360faf commit ea7f1a3

File tree

5 files changed

+10
-36
lines changed

5 files changed

+10
-36
lines changed

.github/workflows/build-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818

1919
strategy:
2020
matrix:
21-
node-version: [20.x, 22.x]
21+
node-version: [22.x]
2222

2323
steps:
2424
- uses: actions/checkout@v4

packages/core/src/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,4 @@ export type {
109109
RegleUnknownRulesTree,
110110
HaveAnyRequiredProps,
111111
RegleCustomFieldStatus,
112-
RegleCustomStatus,
113-
RegleCustomCollectionStatus,
114112
} from './types';

packages/core/src/types/utils/props.types.ts

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type {
77
RegleFieldStatus,
88
RegleFormPropertyType,
99
ReglePartialRuleTree,
10+
RegleRuleTree,
1011
RegleStatus,
1112
SuperCompatibleRegle,
1213
UnwrapRuleTree,
@@ -49,8 +50,8 @@ export type RegleEnforceRequiredRules<TRules extends keyof DefaultValidators> =
4950
5051
*/
5152
export type RegleEnforceCustomRequiredRules<
52-
T extends Partial<AllRulesDeclarations> | useRegleFn<any, any>,
53-
TRules extends T extends useRegleFn<any, any> ? keyof InferRegleRules<T> : keyof T,
53+
T extends useRegleFn<any, any>,
54+
TRules extends keyof InferRegleRules<T>,
5455
> = Omit<Partial<DefaultValidatorsTree>, TRules> & {
5556
[K in TRules]-?: T extends useRegleFn<any, any>
5657
? K extends keyof InferRegleRules<T>
@@ -69,23 +70,5 @@ export type RegleEnforceCustomRequiredRules<
6970
export type RegleCustomFieldStatus<
7071
T extends useRegleFn<any, any>,
7172
TState extends unknown = any,
72-
TRules extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = InferRegleRules<T>,
73-
> = RegleFieldStatus<TState, TRules, InferRegleShortcuts<T>>;
74-
75-
/**
76-
* Extract custom rules and custom shortcuts and apply them to a RegleFieldStatus type
77-
*/
78-
export type RegleCustomStatus<
79-
T extends useRegleFn<any, any>,
80-
TState extends Record<string, any> | undefined = Record<string, any>,
81-
TRules extends ReglePartialRuleTree<NonNullable<TState>> = InferRegleRules<T>,
82-
> = RegleStatus<TState, TRules, InferRegleShortcuts<T>>;
83-
84-
/**
85-
* Extract custom rules and custom shortcuts and apply them to a RegleFieldStatus type
86-
*/
87-
export type RegleCustomCollectionStatus<
88-
T extends useRegleFn<any, any>,
89-
TState extends any[] = any[],
90-
TRules extends ReglePartialRuleTree<ArrayElement<TState>> = InferRegleRules<T>,
91-
> = RegleCollectionStatus<TState, TRules, InferRegleShortcuts<T>>;
73+
TRules extends keyof InferRegleRules<T> = keyof InferRegleRules<T>,
74+
> = RegleFieldStatus<TState, RegleEnforceCustomRequiredRules<T, TRules>, InferRegleShortcuts<T>>;

packages/core/tsdown.dev.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const sharedOptions: Options = {
55
...defaultOptions,
66
entry: { 'regle-core': 'src/index.ts' },
77
dts: true,
8-
clean: false,
8+
clean: true,
99
external: ['vue', '@vue/reactivity', '@vue/runtime-core', '@vue/runtime-dom'],
1010
ignoreWatch: ['dist/**'],
1111
sourcemap: false,

tests/unit/types-errors/prop-types/Component-test.vue

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,25 @@
55
<script setup lang="ts">
66
import type {
77
CommonComparisonOptions,
8-
InferRegleShortcuts,
98
MaybeOutput,
10-
RegleEnforceCustomRequiredRules,
9+
RegleCustomFieldStatus,
1110
RegleEnforceRequiredRules,
1211
RegleFieldStatus,
1312
RegleRuleMetadataDefinition,
1413
RegleRuleStatus,
1514
} from '@regle/core';
1615
import type { useCustomRegle } from './prop-types.config';
1716
18-
type MyShortcuts = InferRegleShortcuts<typeof useCustomRegle>;
19-
2017
const props = defineProps<{
2118
unknownField: RegleFieldStatus;
2219
unknownExplicitField: RegleFieldStatus<unknown>;
2320
booleanField: RegleFieldStatus<boolean | undefined>;
2421
stringField: RegleFieldStatus<string | undefined>;
2522
stringNumberField: RegleFieldStatus<string | undefined> | RegleFieldStatus<number | undefined>;
26-
customStringField: RegleFieldStatus<string | undefined, any, MyShortcuts>;
23+
customStringField: RegleCustomFieldStatus<typeof useCustomRegle, string | undefined>;
2724
enforcedRulesField: RegleFieldStatus<string | undefined, RegleEnforceRequiredRules<'required'>>;
2825
enforcedMultipleRulesField: RegleFieldStatus<string | undefined, RegleEnforceRequiredRules<'required' | 'minLength'>>;
29-
enforcedCustomRulesField: RegleFieldStatus<
30-
string | undefined,
31-
RegleEnforceCustomRequiredRules<typeof useCustomRegle, 'myCustomRule'>,
32-
MyShortcuts
33-
>;
26+
enforcedCustomRulesField: RegleCustomFieldStatus<typeof useCustomRegle, string | undefined, 'myCustomRule'>;
3427
}>();
3528
3629
// -

0 commit comments

Comments
 (0)