@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.
Files changed (42) hide show
  1. package/dist/builders/ArraySchemaBuilder.d.ts +15 -0
  2. package/dist/builders/ArraySchemaBuilder.js +141 -0
  3. package/dist/builders/BooleanSchemaBuilder.d.ts +31 -0
  4. package/dist/builders/BooleanSchemaBuilder.js +90 -0
  5. package/dist/builders/FunctionSchemaBuilder.d.ts +27 -0
  6. package/dist/builders/FunctionSchemaBuilder.js +69 -0
  7. package/dist/builders/NumberSchemaBuilder.d.ts +61 -0
  8. package/dist/builders/NumberSchemaBuilder.js +206 -0
  9. package/dist/builders/ObjectSchemaBuilder.d.ts +83 -0
  10. package/dist/builders/ObjectSchemaBuilder.js +344 -0
  11. package/dist/builders/SchemaBuilder.d.ts +36 -0
  12. package/dist/builders/SchemaBuilder.js +88 -0
  13. package/dist/builders/StringSchemaBuilder.d.ts +14 -0
  14. package/dist/builders/StringSchemaBuilder.js +140 -0
  15. package/dist/builders/UnionSchemaBuilder.d.ts +10 -0
  16. package/dist/builders/UnionSchemaBuilder.js +95 -0
  17. package/dist/defaultSchemas.d.ts +4 -0
  18. package/dist/defaultSchemas.js +45 -0
  19. package/dist/index.d.ts +40 -0
  20. package/dist/index.js +32 -0
  21. package/dist/schema.d.ts +231 -0
  22. package/dist/schema.js +2 -0
  23. package/dist/schemaRegistry.d.ts +49 -0
  24. package/dist/schemaRegistry.js +278 -0
  25. package/dist/validators/validateArray.d.ts +3 -0
  26. package/dist/validators/validateArray.js +60 -0
  27. package/dist/validators/validateBoolean.d.ts +2 -0
  28. package/dist/validators/validateBoolean.js +30 -0
  29. package/dist/validators/validateFunction.d.ts +2 -0
  30. package/dist/validators/validateFunction.js +21 -0
  31. package/dist/validators/validateNumber.d.ts +2 -0
  32. package/dist/validators/validateNumber.js +69 -0
  33. package/dist/validators/validateObject.d.ts +3 -0
  34. package/dist/validators/validateObject.js +95 -0
  35. package/dist/validators/validateString.d.ts +2 -0
  36. package/dist/validators/validateString.js +50 -0
  37. package/dist/validators/validateUnion.d.ts +3 -0
  38. package/dist/validators/validateUnion.js +30 -0
  39. package/package.json +6 -2
  40. package/src/builders/FunctionSchemaBuilder.test.ts +11 -0
  41. package/src/builders/FunctionSchemaBuilder.ts +24 -16
  42. 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",
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.3"
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 IFunctionSchemaBuilder<false, TNullable>;
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 IFunctionSchemaBuilder<true, TNullable>;
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 IFunctionSchemaBuilder<TRequired, true>;
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 IFunctionSchemaBuilder<TRequired, false>;
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<infer TRequired, infer TNullable>
310
- ? IFunctionSchemaBuilder<true, TNullable>
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<infer TRequired, infer TNullable>
376
- ? IFunctionSchemaBuilder<TRequired, true>
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<infer TRequired, infer TNullable>
442
- ? IFunctionSchemaBuilder<TRequired, false>
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<infer TRequired, infer TNullable>
782
- ? TRequired extends true
783
- ? Function
784
- : Function | undefined
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