@cleverbrush/schema 1.0.0-beta.3 → 1.0.0-beta.5
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/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 +27 -0
- package/dist/builders/FunctionSchemaBuilder.js +69 -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 +95 -0
- package/dist/defaultSchemas.d.ts +4 -0
- package/dist/defaultSchemas.js +45 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.js +32 -0
- package/dist/schema.d.ts +231 -0
- package/dist/schema.js +2 -0
- package/dist/schemaRegistry.d.ts +49 -0
- package/dist/schemaRegistry.js +278 -0
- package/dist/validators/validateArray.d.ts +3 -0
- package/dist/validators/validateArray.js +60 -0
- package/dist/validators/validateBoolean.d.ts +2 -0
- package/dist/validators/validateBoolean.js +30 -0
- package/dist/validators/validateFunction.d.ts +2 -0
- package/dist/validators/validateFunction.js +21 -0
- package/dist/validators/validateNumber.d.ts +2 -0
- package/dist/validators/validateNumber.js +69 -0
- package/dist/validators/validateObject.d.ts +3 -0
- package/dist/validators/validateObject.js +95 -0
- package/dist/validators/validateString.d.ts +2 -0
- package/dist/validators/validateString.js +50 -0
- package/dist/validators/validateUnion.d.ts +3 -0
- package/dist/validators/validateUnion.js +30 -0
- package/package.json +6 -2
- package/src/builders/FunctionSchemaBuilder.test.ts +11 -0
- package/src/builders/FunctionSchemaBuilder.ts +24 -16
- package/src/schema.ts +36 -14
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cleverbrush/schema",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.5",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"object schema validator",
|
|
6
6
|
"schema",
|
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
],
|
|
9
9
|
"author": "Andrew Zolotukhin <andrew_zol@cleverbrush.com>",
|
|
10
10
|
"license": "BSD",
|
|
11
|
+
"files": [
|
|
12
|
+
"*",
|
|
13
|
+
"dist/*"
|
|
14
|
+
],
|
|
11
15
|
"main": "./dist/index.js",
|
|
12
16
|
"readme": "https://github.com/cleverbrush/libs/tree/master/libs/schema#readme",
|
|
13
17
|
"repository": {
|
|
@@ -19,7 +23,7 @@
|
|
|
19
23
|
"build": "tsc"
|
|
20
24
|
},
|
|
21
25
|
"devDependencies": {
|
|
22
|
-
"@cleverbrush/deep": "1.0.0-beta.
|
|
26
|
+
"@cleverbrush/deep": "1.0.0-beta.5"
|
|
23
27
|
},
|
|
24
28
|
"types": "./dist/index.d.ts"
|
|
25
29
|
}
|
|
@@ -2,6 +2,7 @@ import { deepEqual } from '@cleverbrush/deep';
|
|
|
2
2
|
|
|
3
3
|
import { Schema } from '../schema.js';
|
|
4
4
|
import { func } from './FunctionSchemaBuilder.js';
|
|
5
|
+
import { InferType } from '../schema.js';
|
|
5
6
|
|
|
6
7
|
test('Clean', () => {
|
|
7
8
|
const schema = func();
|
|
@@ -132,3 +133,13 @@ test('Clone', () => {
|
|
|
132
133
|
const equal2 = deepEqual(schema1._schema, schema2._schema);
|
|
133
134
|
expect(equal2).toEqual(true);
|
|
134
135
|
});
|
|
136
|
+
|
|
137
|
+
test('Map to type', () => {
|
|
138
|
+
const schema1 = func();
|
|
139
|
+
const schema2 = schema1.mapToType<(name: string) => number>();
|
|
140
|
+
|
|
141
|
+
// test of type inference
|
|
142
|
+
const callback: InferType<typeof schema2> = (name: string): number => 10;
|
|
143
|
+
|
|
144
|
+
expect(schema1 === schema2).toEqual(true);
|
|
145
|
+
});
|
|
@@ -4,17 +4,20 @@ import { defaultSchemas } from '../defaultSchemas.js';
|
|
|
4
4
|
|
|
5
5
|
export interface IFunctionSchemaBuilder<
|
|
6
6
|
TRequired extends boolean = true,
|
|
7
|
-
TNullable extends boolean = false
|
|
7
|
+
TNullable extends boolean = false,
|
|
8
|
+
TMapToType = undefined
|
|
8
9
|
> extends ISchemaBuilder<TRequired, TNullable> {
|
|
9
|
-
optional(): IFunctionSchemaBuilder<false, TNullable>;
|
|
10
|
-
required(): IFunctionSchemaBuilder<true, TNullable>;
|
|
11
|
-
nullable(): IFunctionSchemaBuilder<TRequired, true>;
|
|
12
|
-
notNullable(): IFunctionSchemaBuilder<TRequired, false>;
|
|
10
|
+
optional(): IFunctionSchemaBuilder<false, TNullable, TMapToType>;
|
|
11
|
+
required(): IFunctionSchemaBuilder<true, TNullable, TMapToType>;
|
|
12
|
+
nullable(): IFunctionSchemaBuilder<TRequired, true, TMapToType>;
|
|
13
|
+
notNullable(): IFunctionSchemaBuilder<TRequired, false, TMapToType>;
|
|
14
|
+
mapToType<T>(): IFunctionSchemaBuilder<TRequired, TNullable, T>;
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
export class FunctionSchemaBuilder<
|
|
16
18
|
TRequired extends boolean = true,
|
|
17
|
-
TNullable extends boolean = false
|
|
19
|
+
TNullable extends boolean = false,
|
|
20
|
+
TMapToType = undefined
|
|
18
21
|
>
|
|
19
22
|
extends SchemaBuilder<TRequired, TNullable>
|
|
20
23
|
implements IFunctionSchemaBuilder<TRequired, TNullable>
|
|
@@ -34,9 +37,14 @@ export class FunctionSchemaBuilder<
|
|
|
34
37
|
return FunctionSchemaBuilder.create(this._schema as any) as this;
|
|
35
38
|
}
|
|
36
39
|
|
|
40
|
+
public mapToType<T>(): IFunctionSchemaBuilder<TRequired, TNullable, T> {
|
|
41
|
+
return this as any;
|
|
42
|
+
}
|
|
43
|
+
|
|
37
44
|
public static create<
|
|
38
45
|
TRequired extends boolean = true,
|
|
39
|
-
TNullable extends boolean = false
|
|
46
|
+
TNullable extends boolean = false,
|
|
47
|
+
TMapToType = undefined
|
|
40
48
|
>(obj?: {
|
|
41
49
|
isRequired: TRequired;
|
|
42
50
|
isNullable: TNullable;
|
|
@@ -44,7 +52,7 @@ export class FunctionSchemaBuilder<
|
|
|
44
52
|
preprocessor?:
|
|
45
53
|
| ((value: unknown) => unknown | Promise<unknown>)
|
|
46
54
|
| string;
|
|
47
|
-
}): IFunctionSchemaBuilder<TRequired, TNullable> {
|
|
55
|
+
}): IFunctionSchemaBuilder<TRequired, TNullable, TMapToType> {
|
|
48
56
|
return new FunctionSchemaBuilder(obj as any);
|
|
49
57
|
}
|
|
50
58
|
|
|
@@ -64,9 +72,9 @@ export class FunctionSchemaBuilder<
|
|
|
64
72
|
}
|
|
65
73
|
}
|
|
66
74
|
|
|
67
|
-
optional(): IFunctionSchemaBuilder<false, TNullable> {
|
|
75
|
+
optional(): IFunctionSchemaBuilder<false, TNullable, TMapToType> {
|
|
68
76
|
if (this.isRequired === false) {
|
|
69
|
-
return this as
|
|
77
|
+
return this as any;
|
|
70
78
|
}
|
|
71
79
|
return FunctionSchemaBuilder.create({
|
|
72
80
|
...(this._schema as any),
|
|
@@ -74,9 +82,9 @@ export class FunctionSchemaBuilder<
|
|
|
74
82
|
});
|
|
75
83
|
}
|
|
76
84
|
|
|
77
|
-
required(): IFunctionSchemaBuilder<true, TNullable> {
|
|
85
|
+
required(): IFunctionSchemaBuilder<true, TNullable, TMapToType> {
|
|
78
86
|
if (this.isRequired === true) {
|
|
79
|
-
return this as
|
|
87
|
+
return this as any;
|
|
80
88
|
}
|
|
81
89
|
return FunctionSchemaBuilder.create({
|
|
82
90
|
...(this._schema as any),
|
|
@@ -84,9 +92,9 @@ export class FunctionSchemaBuilder<
|
|
|
84
92
|
});
|
|
85
93
|
}
|
|
86
94
|
|
|
87
|
-
nullable(): IFunctionSchemaBuilder<TRequired, true> {
|
|
95
|
+
nullable(): IFunctionSchemaBuilder<TRequired, true, TMapToType> {
|
|
88
96
|
if (this.isNullable === true) {
|
|
89
|
-
return this as
|
|
97
|
+
return this as any;
|
|
90
98
|
}
|
|
91
99
|
return FunctionSchemaBuilder.create({
|
|
92
100
|
...(this._schema as any),
|
|
@@ -94,9 +102,9 @@ export class FunctionSchemaBuilder<
|
|
|
94
102
|
});
|
|
95
103
|
}
|
|
96
104
|
|
|
97
|
-
notNullable(): IFunctionSchemaBuilder<TRequired, false> {
|
|
105
|
+
notNullable(): IFunctionSchemaBuilder<TRequired, false, TMapToType> {
|
|
98
106
|
if (this.isNullable === false) {
|
|
99
|
-
return this as
|
|
107
|
+
return this as any;
|
|
100
108
|
}
|
|
101
109
|
return FunctionSchemaBuilder.create({
|
|
102
110
|
...(this._schema as any),
|
package/src/schema.ts
CHANGED
|
@@ -306,8 +306,12 @@ export type MakeRequired<T> = T extends IUnionSchemaBuilder<
|
|
|
306
306
|
infer TEqualsTo
|
|
307
307
|
>
|
|
308
308
|
? IBooleanSchemaBuilder<true, TNullable, TEqualsTo>
|
|
309
|
-
: T extends IFunctionSchemaBuilder<
|
|
310
|
-
|
|
309
|
+
: T extends IFunctionSchemaBuilder<
|
|
310
|
+
infer TRequired,
|
|
311
|
+
infer TNullable,
|
|
312
|
+
infer TMapToType
|
|
313
|
+
>
|
|
314
|
+
? IFunctionSchemaBuilder<true, TNullable, TMapToType>
|
|
311
315
|
: T & { isRequired: true };
|
|
312
316
|
|
|
313
317
|
export type MakeNullable<T> = T extends IUnionSchemaBuilder<
|
|
@@ -372,8 +376,12 @@ export type MakeNullable<T> = T extends IUnionSchemaBuilder<
|
|
|
372
376
|
infer TEqualsTo
|
|
373
377
|
>
|
|
374
378
|
? IBooleanSchemaBuilder<TRequired, true, TEqualsTo>
|
|
375
|
-
: T extends IFunctionSchemaBuilder<
|
|
376
|
-
|
|
379
|
+
: T extends IFunctionSchemaBuilder<
|
|
380
|
+
infer TRequired,
|
|
381
|
+
infer TNullable,
|
|
382
|
+
infer TMapToType
|
|
383
|
+
>
|
|
384
|
+
? IFunctionSchemaBuilder<TRequired, true, TMapToType>
|
|
377
385
|
: T & { isNullable: true };
|
|
378
386
|
|
|
379
387
|
export type MakeNotNullable<T> = T extends IUnionSchemaBuilder<
|
|
@@ -438,8 +446,12 @@ export type MakeNotNullable<T> = T extends IUnionSchemaBuilder<
|
|
|
438
446
|
infer TEqualsTo
|
|
439
447
|
>
|
|
440
448
|
? IBooleanSchemaBuilder<TRequired, false, TEqualsTo>
|
|
441
|
-
: T extends IFunctionSchemaBuilder<
|
|
442
|
-
|
|
449
|
+
: T extends IFunctionSchemaBuilder<
|
|
450
|
+
infer TRequired,
|
|
451
|
+
infer TNullable,
|
|
452
|
+
infer TMapToType
|
|
453
|
+
>
|
|
454
|
+
? IFunctionSchemaBuilder<TRequired, false, TMapToType>
|
|
443
455
|
: T & { isNullable: false };
|
|
444
456
|
|
|
445
457
|
export type ExpandUnionVariants<TVariants extends any[]> = TVariants extends [
|
|
@@ -574,9 +586,10 @@ export type ExpandSchemaBuilder<TSchema> = TSchema extends [
|
|
|
574
586
|
: TType extends 'function'
|
|
575
587
|
? TParams extends [
|
|
576
588
|
infer TRequired extends boolean,
|
|
577
|
-
infer TNullable extends boolean
|
|
589
|
+
infer TNullable extends boolean,
|
|
590
|
+
infer TMapToType
|
|
578
591
|
]
|
|
579
|
-
? IFunctionSchemaBuilder<TRequired, TNullable>
|
|
592
|
+
? IFunctionSchemaBuilder<TRequired, TNullable, TMapToType>
|
|
580
593
|
: IFunctionSchemaBuilder
|
|
581
594
|
: TSchema
|
|
582
595
|
: TSchema;
|
|
@@ -657,9 +670,10 @@ export type ReduceSchemaBuilder<TBuilder> =
|
|
|
657
670
|
? ['boolean', TRequired, TNullable, TEqualsTo]
|
|
658
671
|
: TBuilder extends IFunctionSchemaBuilder<
|
|
659
672
|
infer TRequired,
|
|
660
|
-
infer TNullable
|
|
673
|
+
infer TNullable,
|
|
674
|
+
infer TMapToType
|
|
661
675
|
>
|
|
662
|
-
? ['function', TRequired, TNullable]
|
|
676
|
+
? ['function', TRequired, TNullable, TMapToType]
|
|
663
677
|
: TBuilder extends [infer F]
|
|
664
678
|
? [ReduceSchemaBuilder<F>]
|
|
665
679
|
: TBuilder extends [infer F, ...infer Rest]
|
|
@@ -778,10 +792,18 @@ export type InferType<S> = S extends DefaultSchemaType
|
|
|
778
792
|
: TOfType extends undefined
|
|
779
793
|
? any[] | undefined
|
|
780
794
|
: InferType<TOfType>[] | undefined
|
|
781
|
-
: S extends IFunctionSchemaBuilder<
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
795
|
+
: S extends IFunctionSchemaBuilder<
|
|
796
|
+
infer TRequired,
|
|
797
|
+
infer TNullable,
|
|
798
|
+
infer TMapToType
|
|
799
|
+
>
|
|
800
|
+
? TMapToType extends undefined
|
|
801
|
+
? TRequired extends true
|
|
802
|
+
? Function
|
|
803
|
+
: Function | undefined
|
|
804
|
+
: TRequired extends true
|
|
805
|
+
? TMapToType
|
|
806
|
+
: TMapToType | undefined
|
|
785
807
|
: S extends StringSchema
|
|
786
808
|
? S['equals'] extends undefined
|
|
787
809
|
? string
|