@cleverbrush/schema 0.0.17 → 1.0.0-beta.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.
- package/README.md +213 -163
- package/package.json +3 -3
- 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 +154 -0
- package/src/defaultSchemas.ts +44 -0
- package/src/index.ts +58 -190
- package/src/schema.ts +827 -0
- package/src/schemaRegistry.builders.test.ts +1393 -0
- package/src/schemaRegistry.test.ts +118 -0
- package/src/schemaRegistry.ts +461 -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/index.d.ts +0 -94
- package/dist/index.js +0 -9
- package/dist/schemaValidator.d.ts +0 -16
- package/dist/schemaValidator.js +0 -234
- package/dist/validators/validateArray.d.ts +0 -2
- package/dist/validators/validateArray.js +0 -60
- package/dist/validators/validateBoolean.d.ts +0 -2
- package/dist/validators/validateBoolean.js +0 -33
- package/dist/validators/validateNumber.d.ts +0 -2
- package/dist/validators/validateNumber.js +0 -69
- package/dist/validators/validateObject.d.ts +0 -2
- package/dist/validators/validateObject.js +0 -73
- package/dist/validators/validateString.d.ts +0 -2
- package/dist/validators/validateString.js +0 -50
- package/src/schemaValidator.test.ts +0 -1656
- 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,66 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
import {
|
|
2
|
+
InferType,
|
|
3
|
+
ExpandSchemaBuilder,
|
|
4
|
+
ValidationResultWithObject
|
|
5
|
+
} from './schema.js';
|
|
6
|
+
import SchemaRegistry from './schemaRegistry.js';
|
|
7
|
+
|
|
8
|
+
import { array } from './builders/ArraySchemaBuilder.js';
|
|
9
|
+
import { boolean } from './builders/BooleanSchemaBuilder.js';
|
|
10
|
+
import { number } from './builders/NumberSchemaBuilder.js';
|
|
11
|
+
import { object } from './builders/ObjectSchemaBuilder.js';
|
|
12
|
+
import { string } from './builders/StringSchemaBuilder.js';
|
|
13
|
+
import { union } from './builders/UnionSchemaBuilder.js';
|
|
14
|
+
import { func } from './builders/FunctionSchemaBuilder.js';
|
|
15
|
+
|
|
16
|
+
export type GetNodes<
|
|
17
|
+
T extends Record<string, any>,
|
|
18
|
+
TPrefix extends string = ''
|
|
19
|
+
> = {
|
|
20
|
+
[k in keyof T]: k extends `${TPrefix}${infer F}.${infer S}` ? F : never;
|
|
21
|
+
}[keyof T];
|
|
22
|
+
|
|
23
|
+
export type GetLeafs<
|
|
24
|
+
T extends Record<string, any>,
|
|
25
|
+
TPrefix extends string = ''
|
|
26
|
+
> = {
|
|
27
|
+
[k in keyof T]: k extends `${TPrefix}${infer F}`
|
|
28
|
+
? F extends `${infer S}.${infer G}`
|
|
29
|
+
? never
|
|
30
|
+
: F
|
|
31
|
+
: never;
|
|
32
|
+
}[keyof T];
|
|
33
|
+
|
|
34
|
+
export type Unfold<
|
|
35
|
+
TBag extends Record<string, any>,
|
|
36
|
+
TPrefix extends string = ''
|
|
37
|
+
> = {
|
|
38
|
+
[k in GetLeafs<TBag, TPrefix>]: ISchemaActions<TBag[`${TPrefix}${k}`]>;
|
|
39
|
+
} & {
|
|
40
|
+
[k in GetNodes<TBag, TPrefix>]: Unfold<TBag, `${TPrefix}${k}.`>;
|
|
23
41
|
};
|
|
24
42
|
|
|
25
|
-
export type ValidationResult =
|
|
26
|
-
| ValidationResultRaw
|
|
27
|
-
| Promise<ValidationResultRaw>;
|
|
28
|
-
|
|
29
|
-
export type Validator<TObj> = (value: TObj) => ValidationResult;
|
|
30
|
-
|
|
31
|
-
export type SchemaDefintion<TObj> = {
|
|
32
|
-
type: DefaultSchemaType;
|
|
33
|
-
isRequired?: boolean;
|
|
34
|
-
isNullable?: boolean;
|
|
35
|
-
validators?: Array<Validator<TObj>>;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export type ObjectSchemaDefinition<T> = Omit<SchemaDefintion<T>, 'type'> & {
|
|
39
|
-
type: 'object';
|
|
40
|
-
extends?: string;
|
|
41
|
-
properties?: Partial<{
|
|
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;
|
|
106
|
-
};
|
|
107
|
-
|
|
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
43
|
export interface ISchemaActions<S> {
|
|
148
|
-
validate(
|
|
149
|
-
|
|
44
|
+
validate(
|
|
45
|
+
value: any
|
|
46
|
+
): Promise<ValidationResultWithObject<InferType<ExpandSchemaBuilder<S>>>>;
|
|
47
|
+
schema: ExpandSchemaBuilder<S>;
|
|
150
48
|
}
|
|
151
49
|
|
|
152
|
-
export interface
|
|
153
|
-
schemas:
|
|
50
|
+
export interface ISchemaRegistry<T extends Record<string, any>> {
|
|
51
|
+
schemas: Unfold<T>;
|
|
154
52
|
}
|
|
155
53
|
|
|
156
|
-
export
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
): SchemaValidator<T, SchemaTypesStructures>;
|
|
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;
|
|
54
|
+
export { SchemaRegistry };
|
|
55
|
+
export default {
|
|
56
|
+
SchemaRegistry,
|
|
57
|
+
array,
|
|
58
|
+
boolean,
|
|
59
|
+
number,
|
|
60
|
+
object,
|
|
61
|
+
string,
|
|
62
|
+
union,
|
|
63
|
+
func
|
|
64
|
+
};
|
|
196
65
|
|
|
197
|
-
export {
|
|
198
|
-
export default SchemaValidator;
|
|
66
|
+
export { array, boolean, number, object, string, union, func, InferType };
|