@cleverbrush/schema 0.0.17 → 1.0.0-beta.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/README.md +213 -163
- package/dist/builders/AliasSchemaBuilder.d.ts +14 -0
- package/dist/builders/AliasSchemaBuilder.js +91 -0
- package/dist/builders/ArraySchemaBuilder.d.ts +15 -0
- package/dist/builders/ArraySchemaBuilder.js +141 -0
- package/dist/builders/BooleanSchemaBuilder.d.ts +31 -0
- package/dist/builders/BooleanSchemaBuilder.js +90 -0
- package/dist/builders/FunctionSchemaBuilder.d.ts +25 -0
- package/dist/builders/FunctionSchemaBuilder.js +66 -0
- package/dist/builders/NumberSchemaBuilder.d.ts +61 -0
- package/dist/builders/NumberSchemaBuilder.js +206 -0
- package/dist/builders/ObjectSchemaBuilder.d.ts +83 -0
- package/dist/builders/ObjectSchemaBuilder.js +344 -0
- package/dist/builders/SchemaBuilder.d.ts +36 -0
- package/dist/builders/SchemaBuilder.js +88 -0
- package/dist/builders/StringSchemaBuilder.d.ts +14 -0
- package/dist/builders/StringSchemaBuilder.js +140 -0
- package/dist/builders/UnionSchemaBuilder.d.ts +10 -0
- package/dist/builders/UnionSchemaBuilder.js +100 -0
- package/dist/defaultSchemas.d.ts +4 -0
- package/dist/defaultSchemas.js +45 -0
- package/dist/index.d.ts +38 -90
- package/dist/index.js +30 -4
- package/dist/schema.d.ts +242 -0
- package/dist/schema.js +2 -0
- package/dist/schemaRegistry.d.ts +54 -0
- package/dist/schemaRegistry.js +301 -0
- package/dist/validators/validateArray.d.ts +3 -2
- package/dist/validators/validateBoolean.d.ts +2 -2
- package/dist/validators/validateBoolean.js +1 -4
- package/dist/validators/validateFunction.d.ts +2 -0
- package/dist/validators/validateFunction.js +21 -0
- package/dist/validators/validateNumber.d.ts +2 -2
- package/dist/validators/validateNumber.js +1 -1
- package/dist/validators/validateObject.d.ts +3 -2
- package/dist/validators/validateObject.js +33 -11
- package/dist/validators/validateString.d.ts +2 -2
- package/dist/validators/validateString.js +1 -1
- package/dist/validators/validateUnion.d.ts +3 -0
- package/dist/validators/validateUnion.js +30 -0
- package/package.json +3 -3
- package/src/builders/AliasSchemaBuilder.test.ts +124 -0
- package/src/builders/AliasSchemaBuilder.ts +250 -0
- package/src/builders/ArraySchemaBuilder.test.ts +270 -0
- package/src/builders/ArraySchemaBuilder.ts +381 -0
- package/src/builders/BooleanSchemaBuilder.test.ts +196 -0
- package/src/builders/BooleanSchemaBuilder.ts +155 -0
- package/src/builders/FunctionSchemaBuilder.test.ts +134 -0
- package/src/builders/FunctionSchemaBuilder.ts +109 -0
- package/src/builders/NumberSchemaBuilder.test.ts +493 -0
- package/src/builders/NumberSchemaBuilder.ts +789 -0
- package/src/builders/ObjectSchemaBuilder.test.ts +657 -0
- package/src/builders/ObjectSchemaBuilder.ts +794 -0
- package/src/builders/SchemaBuilder.test.ts +73 -0
- package/src/builders/SchemaBuilder.ts +135 -0
- package/src/builders/StringSchemaBuilder.test.ts +318 -0
- package/src/builders/StringSchemaBuilder.ts +392 -0
- package/src/builders/UnionSchemaBuilder.test.ts +162 -0
- package/src/builders/UnionSchemaBuilder.ts +159 -0
- package/src/defaultSchemas.ts +44 -0
- package/src/index.ts +70 -190
- package/src/schema.ts +922 -0
- package/src/schemaRegistry.builders.test.ts +1438 -0
- package/src/{schemaValidator.test.ts → schemaRegistry.test.ts} +561 -185
- package/src/schemaRegistry.ts +532 -0
- package/src/validators/validateArray.ts +4 -7
- package/src/validators/validateBoolean.ts +2 -11
- package/src/validators/validateFunction.ts +25 -0
- package/src/validators/validateNumber.ts +2 -7
- package/src/validators/validateObject.ts +32 -21
- package/src/validators/validateString.ts +2 -7
- package/src/validators/validateUnion.ts +36 -0
- package/dist/schemaValidator.d.ts +0 -16
- package/dist/schemaValidator.js +0 -234
- package/src/schemaValidator.ts +0 -367
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { DefaultSchemaType, Schema } from './schema.js';
|
|
2
|
+
|
|
3
|
+
export const defaultSchemas: { [key in DefaultSchemaType]?: Schema } = {
|
|
4
|
+
alias: {
|
|
5
|
+
type: 'alias',
|
|
6
|
+
// TODO: remove
|
|
7
|
+
schemaName: '',
|
|
8
|
+
isRequired: true,
|
|
9
|
+
isNullable: false
|
|
10
|
+
},
|
|
11
|
+
number: {
|
|
12
|
+
type: 'number',
|
|
13
|
+
isRequired: true,
|
|
14
|
+
isNullable: false,
|
|
15
|
+
ensureNotNaN: true,
|
|
16
|
+
ensureIsFinite: true
|
|
17
|
+
},
|
|
18
|
+
boolean: {
|
|
19
|
+
type: 'boolean',
|
|
20
|
+
isRequired: true,
|
|
21
|
+
isNullable: false
|
|
22
|
+
},
|
|
23
|
+
string: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
isRequired: true,
|
|
26
|
+
isNullable: false
|
|
27
|
+
},
|
|
28
|
+
array: {
|
|
29
|
+
type: 'array',
|
|
30
|
+
isRequired: true,
|
|
31
|
+
isNullable: false
|
|
32
|
+
},
|
|
33
|
+
object: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
noUnknownProperties: true,
|
|
36
|
+
isNullable: false,
|
|
37
|
+
isRequired: true
|
|
38
|
+
},
|
|
39
|
+
function: {
|
|
40
|
+
type: 'function',
|
|
41
|
+
isRequired: true,
|
|
42
|
+
isNullable: false
|
|
43
|
+
}
|
|
44
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -1,198 +1,78 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
[S in keyof T]: Schema<PropType<T, S>>;
|
|
43
|
-
}>;
|
|
44
|
-
preprocessors?: Partial<{
|
|
45
|
-
[S in keyof T | '*']: S extends keyof T
|
|
46
|
-
?
|
|
47
|
-
| ((
|
|
48
|
-
value: unknown
|
|
49
|
-
) => undefined | PropType<T, S> | Promise<PropType<T, S>>)
|
|
50
|
-
| string
|
|
51
|
-
: (value: T) => void | Promise<void>;
|
|
52
|
-
}>;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
export type AliasSchemaDefinition<T> = Omit<SchemaDefintion<T>, 'type'> & {
|
|
56
|
-
type: 'alias';
|
|
57
|
-
schemaName: string;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export type ObjectSchemaDefinitionParam<T> = Omit<
|
|
61
|
-
ObjectSchemaDefinition<T>,
|
|
62
|
-
'type'
|
|
63
|
-
>;
|
|
64
|
-
|
|
65
|
-
export type ParamsValidators<TFunc extends (...args: any) => any> = {
|
|
66
|
-
[S in keyof Parameters<TFunc>]: SingleSchema<Parameters<TFunc>[S]>;
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
export type FunctionSchemaDefinition<T extends (...args: any) => any> = Omit<
|
|
70
|
-
SchemaDefintion<T>,
|
|
71
|
-
'type'
|
|
72
|
-
> & {
|
|
73
|
-
type: 'function';
|
|
74
|
-
params?: ParamsValidators<T>;
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
export type BooleanSchemaDefinition<TObj> = Omit<
|
|
78
|
-
SchemaDefintion<TObj>,
|
|
79
|
-
'type'
|
|
80
|
-
> & {
|
|
81
|
-
type: 'boolean';
|
|
82
|
-
equals?: boolean;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
export type NumberSchemaDefinition<TObj> = Omit<
|
|
86
|
-
SchemaDefintion<TObj>,
|
|
87
|
-
'type'
|
|
88
|
-
> & {
|
|
89
|
-
type: 'number';
|
|
90
|
-
min?: number;
|
|
91
|
-
max?: number;
|
|
92
|
-
equals?: number;
|
|
93
|
-
isInteger?: boolean;
|
|
94
|
-
ensureNotNaN?: boolean;
|
|
95
|
-
ensureIsFinite?: boolean;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
export type StringSchemaDefinition<TObj> = Omit<
|
|
99
|
-
SchemaDefintion<TObj>,
|
|
100
|
-
'type'
|
|
101
|
-
> & {
|
|
102
|
-
type: 'string';
|
|
103
|
-
equals?: string;
|
|
104
|
-
minLength?: number;
|
|
105
|
-
maxLength?: number;
|
|
1
|
+
import {
|
|
2
|
+
InferType,
|
|
3
|
+
ExpandSchemaBuilder,
|
|
4
|
+
ValidationResultWithObject
|
|
5
|
+
} from './schema.js';
|
|
6
|
+
import SchemaRegistry from './schemaRegistry.js';
|
|
7
|
+
|
|
8
|
+
import { alias } from './builders/AliasSchemaBuilder.js';
|
|
9
|
+
import { array } from './builders/ArraySchemaBuilder.js';
|
|
10
|
+
import { boolean } from './builders/BooleanSchemaBuilder.js';
|
|
11
|
+
import { number } from './builders/NumberSchemaBuilder.js';
|
|
12
|
+
import { object } from './builders/ObjectSchemaBuilder.js';
|
|
13
|
+
import { string } from './builders/StringSchemaBuilder.js';
|
|
14
|
+
import { union } from './builders/UnionSchemaBuilder.js';
|
|
15
|
+
import { func } from './builders/FunctionSchemaBuilder.js';
|
|
16
|
+
|
|
17
|
+
export type GetNodes<
|
|
18
|
+
T extends Record<string, any>,
|
|
19
|
+
TPrefix extends string = ''
|
|
20
|
+
> = {
|
|
21
|
+
[k in keyof T]: k extends `${TPrefix}${infer F}.${infer S}` ? F : never;
|
|
22
|
+
}[keyof T];
|
|
23
|
+
|
|
24
|
+
export type GetLeafs<
|
|
25
|
+
T extends Record<string, any>,
|
|
26
|
+
TPrefix extends string = ''
|
|
27
|
+
> = {
|
|
28
|
+
[k in keyof T]: k extends `${TPrefix}${infer F}`
|
|
29
|
+
? F extends `${infer S}.${infer G}`
|
|
30
|
+
? never
|
|
31
|
+
: F
|
|
32
|
+
: never;
|
|
33
|
+
}[keyof T];
|
|
34
|
+
|
|
35
|
+
export type Unfold<
|
|
36
|
+
TBag extends Record<string, any>,
|
|
37
|
+
TPrefix extends string = ''
|
|
38
|
+
> = {
|
|
39
|
+
[k in GetLeafs<TBag, TPrefix>]: ISchemaActions<TBag[`${TPrefix}${k}`]>;
|
|
40
|
+
} & {
|
|
41
|
+
[k in GetNodes<TBag, TPrefix>]: Unfold<TBag, `${TPrefix}${k}.`>;
|
|
106
42
|
};
|
|
107
43
|
|
|
108
|
-
export type ArraySchemaDefinition<TObj> = Omit<
|
|
109
|
-
SchemaDefintion<TObj>,
|
|
110
|
-
'type'
|
|
111
|
-
> & {
|
|
112
|
-
type: 'array';
|
|
113
|
-
preprocessor?: ((value: unknown) => unknown | Promise<unknown>) | string;
|
|
114
|
-
ofType?: Schema<any>;
|
|
115
|
-
minLength?: number;
|
|
116
|
-
maxLength?: number;
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
export type CompositeSchema<TObj> = TObj extends (...args: any) => any
|
|
120
|
-
? FunctionSchemaDefinition<TObj>
|
|
121
|
-
: TObj extends number
|
|
122
|
-
? NumberSchemaDefinition<TObj>
|
|
123
|
-
: TObj extends string
|
|
124
|
-
? StringSchemaDefinition<TObj> | 'string'
|
|
125
|
-
:
|
|
126
|
-
| BooleanSchemaDefinition<TObj>
|
|
127
|
-
| NumberSchemaDefinition<TObj>
|
|
128
|
-
| StringSchemaDefinition<TObj>
|
|
129
|
-
| ArraySchemaDefinition<TObj>
|
|
130
|
-
| ObjectSchemaDefinition<TObj>
|
|
131
|
-
| AliasSchemaDefinition<TObj>;
|
|
132
|
-
|
|
133
|
-
export type SingleSchema<TObj = Record<string, never>> =
|
|
134
|
-
| number
|
|
135
|
-
| string
|
|
136
|
-
| DefaultSchemaType
|
|
137
|
-
| CompositeSchema<TObj>;
|
|
138
|
-
|
|
139
|
-
export type Schema<TObj> = SingleSchema<TObj> | Array<SingleSchema<TObj>>;
|
|
140
|
-
|
|
141
|
-
export type Cons<H, T extends unknown[] = []> = T['length'] extends 0
|
|
142
|
-
? [H]
|
|
143
|
-
: ((h: H, ...t: T) => void) extends (...r: infer R) => void
|
|
144
|
-
? R
|
|
145
|
-
: never;
|
|
146
|
-
|
|
147
44
|
export interface ISchemaActions<S> {
|
|
148
|
-
validate(
|
|
149
|
-
|
|
45
|
+
validate(
|
|
46
|
+
value: any
|
|
47
|
+
): Promise<ValidationResultWithObject<InferType<ExpandSchemaBuilder<S>>>>;
|
|
48
|
+
schema: ExpandSchemaBuilder<S>;
|
|
150
49
|
}
|
|
151
50
|
|
|
152
|
-
export interface
|
|
153
|
-
schemas:
|
|
51
|
+
export interface ISchemaRegistry<T extends Record<string, any>> {
|
|
52
|
+
schemas: Unfold<T>;
|
|
154
53
|
}
|
|
155
54
|
|
|
156
|
-
export
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
addSchemaType<
|
|
170
|
-
K,
|
|
171
|
-
L extends ObjectSchemaDefinitionParam<M> | Array<Schema<any>>,
|
|
172
|
-
M = any
|
|
173
|
-
>(
|
|
174
|
-
name: keyof K,
|
|
175
|
-
schema: L
|
|
176
|
-
): SchemaValidator<
|
|
177
|
-
T & { [key in keyof K]: typeof schema },
|
|
178
|
-
Cons<Unfold<keyof K, ISchemaActions<L>>, SchemaTypesStructures>
|
|
179
|
-
>;
|
|
180
|
-
|
|
181
|
-
validate(
|
|
182
|
-
schema: keyof T | DefaultSchemaType | Schema<any>,
|
|
183
|
-
obj: any
|
|
184
|
-
): Promise<ValidationResult>;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
export type Unfold<T, K> = T extends string
|
|
188
|
-
? T extends `${infer F}.${infer L}`
|
|
189
|
-
? {
|
|
190
|
-
[k in F]: Unfold<L, K>;
|
|
191
|
-
}
|
|
192
|
-
: {
|
|
193
|
-
[k in T]: K;
|
|
194
|
-
}
|
|
195
|
-
: never;
|
|
55
|
+
export { SchemaRegistry };
|
|
56
|
+
export default {
|
|
57
|
+
SchemaRegistry,
|
|
58
|
+
alias,
|
|
59
|
+
array,
|
|
60
|
+
boolean,
|
|
61
|
+
number,
|
|
62
|
+
object,
|
|
63
|
+
string,
|
|
64
|
+
union,
|
|
65
|
+
func
|
|
66
|
+
};
|
|
196
67
|
|
|
197
|
-
export {
|
|
198
|
-
|
|
68
|
+
export {
|
|
69
|
+
alias,
|
|
70
|
+
array,
|
|
71
|
+
boolean,
|
|
72
|
+
number,
|
|
73
|
+
object,
|
|
74
|
+
string,
|
|
75
|
+
union,
|
|
76
|
+
func,
|
|
77
|
+
InferType
|
|
78
|
+
};
|