@cleverbrush/schema 1.0.0-beta.0 → 1.0.0-beta.2

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 (49) hide show
  1. package/package.json +2 -2
  2. package/src/builders/UnionSchemaBuilder.ts +1 -6
  3. package/src/index.ts +1 -13
  4. package/src/schema.ts +9 -104
  5. package/src/schemaRegistry.builders.test.ts +35 -80
  6. package/src/schemaRegistry.test.ts +2 -1916
  7. package/src/schemaRegistry.ts +55 -126
  8. package/dist/builders/AliasSchemaBuilder.d.ts +0 -14
  9. package/dist/builders/AliasSchemaBuilder.js +0 -91
  10. package/dist/builders/ArraySchemaBuilder.d.ts +0 -15
  11. package/dist/builders/ArraySchemaBuilder.js +0 -141
  12. package/dist/builders/BooleanSchemaBuilder.d.ts +0 -31
  13. package/dist/builders/BooleanSchemaBuilder.js +0 -90
  14. package/dist/builders/FunctionSchemaBuilder.d.ts +0 -25
  15. package/dist/builders/FunctionSchemaBuilder.js +0 -66
  16. package/dist/builders/NumberSchemaBuilder.d.ts +0 -61
  17. package/dist/builders/NumberSchemaBuilder.js +0 -206
  18. package/dist/builders/ObjectSchemaBuilder.d.ts +0 -83
  19. package/dist/builders/ObjectSchemaBuilder.js +0 -344
  20. package/dist/builders/SchemaBuilder.d.ts +0 -36
  21. package/dist/builders/SchemaBuilder.js +0 -88
  22. package/dist/builders/StringSchemaBuilder.d.ts +0 -14
  23. package/dist/builders/StringSchemaBuilder.js +0 -140
  24. package/dist/builders/UnionSchemaBuilder.d.ts +0 -10
  25. package/dist/builders/UnionSchemaBuilder.js +0 -100
  26. package/dist/defaultSchemas.d.ts +0 -4
  27. package/dist/defaultSchemas.js +0 -45
  28. package/dist/index.d.ts +0 -42
  29. package/dist/index.js +0 -35
  30. package/dist/schema.d.ts +0 -242
  31. package/dist/schema.js +0 -2
  32. package/dist/schemaRegistry.d.ts +0 -54
  33. package/dist/schemaRegistry.js +0 -301
  34. package/dist/validators/validateArray.d.ts +0 -3
  35. package/dist/validators/validateArray.js +0 -60
  36. package/dist/validators/validateBoolean.d.ts +0 -2
  37. package/dist/validators/validateBoolean.js +0 -30
  38. package/dist/validators/validateFunction.d.ts +0 -2
  39. package/dist/validators/validateFunction.js +0 -21
  40. package/dist/validators/validateNumber.d.ts +0 -2
  41. package/dist/validators/validateNumber.js +0 -69
  42. package/dist/validators/validateObject.d.ts +0 -3
  43. package/dist/validators/validateObject.js +0 -95
  44. package/dist/validators/validateString.d.ts +0 -2
  45. package/dist/validators/validateString.js +0 -50
  46. package/dist/validators/validateUnion.d.ts +0 -3
  47. package/dist/validators/validateUnion.js +0 -30
  48. package/src/builders/AliasSchemaBuilder.test.ts +0 -124
  49. package/src/builders/AliasSchemaBuilder.ts +0 -250
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleverbrush/schema",
3
- "version": "1.0.0-beta.0",
3
+ "version": "1.0.0-beta.2",
4
4
  "keywords": [
5
5
  "object schema validator",
6
6
  "schema",
@@ -19,7 +19,7 @@
19
19
  "build": "tsc"
20
20
  },
21
21
  "devDependencies": {
22
- "@cleverbrush/deep": "1.0.0-beta.0"
22
+ "@cleverbrush/deep": "1.0.0-beta.2"
23
23
  },
24
24
  "types": "./dist/index.d.ts"
25
25
  }
@@ -33,12 +33,7 @@ class UnionSchemaBuilder<
33
33
  },
34
34
  this.getCommonSchema(),
35
35
  {
36
- variants: this._variants.map((variant) => {
37
- if (variant instanceof SchemaBuilder) {
38
- return variant._schema;
39
- }
40
- return JSON.parse(JSON.stringify(variant));
41
- })
36
+ variants: this._variants
42
37
  }
43
38
  );
44
39
  }
package/src/index.ts CHANGED
@@ -5,7 +5,6 @@ import {
5
5
  } from './schema.js';
6
6
  import SchemaRegistry from './schemaRegistry.js';
7
7
 
8
- import { alias } from './builders/AliasSchemaBuilder.js';
9
8
  import { array } from './builders/ArraySchemaBuilder.js';
10
9
  import { boolean } from './builders/BooleanSchemaBuilder.js';
11
10
  import { number } from './builders/NumberSchemaBuilder.js';
@@ -55,7 +54,6 @@ export interface ISchemaRegistry<T extends Record<string, any>> {
55
54
  export { SchemaRegistry };
56
55
  export default {
57
56
  SchemaRegistry,
58
- alias,
59
57
  array,
60
58
  boolean,
61
59
  number,
@@ -65,14 +63,4 @@ export default {
65
63
  func
66
64
  };
67
65
 
68
- export {
69
- alias,
70
- array,
71
- boolean,
72
- number,
73
- object,
74
- string,
75
- union,
76
- func,
77
- InferType
78
- };
66
+ export { array, boolean, number, object, string, union, func, InferType };
package/src/schema.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { ISchemaBuilder } from './builders/SchemaBuilder.js';
2
- import { IAliasSchemaBuilder } from './builders/AliasSchemaBuilder.js';
3
2
  import { IUnionSchemaBuilder } from './builders/UnionSchemaBuilder.js';
4
3
  import { IStringSchemaBuilder } from './builders/StringSchemaBuilder.js';
5
4
  import { IObjectSchemaBuilder } from './builders/ObjectSchemaBuilder.js';
@@ -179,25 +178,11 @@ export type Schema<T = any> = T extends Record<string, any>
179
178
  ? BooleanSchema | boolean
180
179
  : number | DefaultSchemaType | SchemaSpecification | Schema[];
181
180
 
182
- export type MakeOptional<T> = T extends IAliasSchemaBuilder<
183
- infer TSchemaName,
181
+ export type MakeOptional<T> = T extends IUnionSchemaBuilder<
184
182
  infer TRequired,
185
183
  infer TNullable,
186
- infer TAliases,
187
- infer TAliasesCompiledType
184
+ infer TVariants
188
185
  >
189
- ? IAliasSchemaBuilder<
190
- TSchemaName,
191
- false,
192
- TNullable,
193
- TAliases,
194
- TAliasesCompiledType
195
- >
196
- : T extends IUnionSchemaBuilder<
197
- infer TRequired,
198
- infer TNullable,
199
- infer TVariants
200
- >
201
186
  ? IUnionSchemaBuilder<false, TNullable, TVariants>
202
187
  : T extends IStringSchemaBuilder<
203
188
  infer TRequired,
@@ -259,25 +244,11 @@ export type MakeOptional<T> = T extends IAliasSchemaBuilder<
259
244
  ? IFunctionSchemaBuilder<false, TNullable>
260
245
  : T & { isRequired: false };
261
246
 
262
- export type MakeRequired<T> = T extends IAliasSchemaBuilder<
263
- infer TSchemaName,
247
+ export type MakeRequired<T> = T extends IUnionSchemaBuilder<
264
248
  infer TRequired,
265
249
  infer TNullable,
266
- infer TAliases,
267
- infer TAliasesCompiledType
250
+ infer TVariants
268
251
  >
269
- ? IAliasSchemaBuilder<
270
- TSchemaName,
271
- true,
272
- TNullable,
273
- TAliases,
274
- TAliasesCompiledType
275
- >
276
- : T extends IUnionSchemaBuilder<
277
- infer TRequired,
278
- infer TNullable,
279
- infer TVariants
280
- >
281
252
  ? IUnionSchemaBuilder<true, TNullable, TVariants>
282
253
  : T extends IStringSchemaBuilder<
283
254
  infer TRequired,
@@ -339,25 +310,11 @@ export type MakeRequired<T> = T extends IAliasSchemaBuilder<
339
310
  ? IFunctionSchemaBuilder<true, TNullable>
340
311
  : T & { isRequired: true };
341
312
 
342
- export type MakeNullable<T> = T extends IAliasSchemaBuilder<
343
- infer TSchemaName,
313
+ export type MakeNullable<T> = T extends IUnionSchemaBuilder<
344
314
  infer TRequired,
345
315
  infer TNullable,
346
- infer TAliases,
347
- infer TAliasesCompiledType
316
+ infer TVariants
348
317
  >
349
- ? IAliasSchemaBuilder<
350
- TSchemaName,
351
- TRequired,
352
- true,
353
- TAliases,
354
- TAliasesCompiledType
355
- >
356
- : T extends IUnionSchemaBuilder<
357
- infer TRequired,
358
- infer TNullable,
359
- infer TVariants
360
- >
361
318
  ? IUnionSchemaBuilder<TRequired, true, TVariants>
362
319
  : T extends IStringSchemaBuilder<
363
320
  infer TRequired,
@@ -419,25 +376,11 @@ export type MakeNullable<T> = T extends IAliasSchemaBuilder<
419
376
  ? IFunctionSchemaBuilder<TRequired, true>
420
377
  : T & { isNullable: true };
421
378
 
422
- export type MakeNotNullable<T> = T extends IAliasSchemaBuilder<
423
- infer TSchemaName,
379
+ export type MakeNotNullable<T> = T extends IUnionSchemaBuilder<
424
380
  infer TRequired,
425
381
  infer TNullable,
426
- infer TAliases,
427
- infer TAliasesCompiledType
382
+ infer TVariants
428
383
  >
429
- ? IAliasSchemaBuilder<
430
- TSchemaName,
431
- TRequired,
432
- false,
433
- TAliases,
434
- TAliasesCompiledType
435
- >
436
- : T extends IUnionSchemaBuilder<
437
- infer TRequired,
438
- infer TNullable,
439
- infer TVariants
440
- >
441
384
  ? IUnionSchemaBuilder<TRequired, false, TVariants>
442
385
  : T extends IStringSchemaBuilder<
443
386
  infer TRequired,
@@ -504,7 +447,7 @@ export type ExpandUnionVariants<TVariants extends any[]> = TVariants extends [
504
447
  ]
505
448
  ? [ExpandSchemaBuilder<T>]
506
449
  : TVariants extends [infer T, ...infer Rest]
507
- ? [ExpandSchemaBuilder<T>, ExpandUnionVariants<[...Rest]>]
450
+ ? [ExpandSchemaBuilder<T>, ...ExpandUnionVariants<[...Rest]>]
508
451
  : never;
509
452
 
510
453
  export type ExpandSchemaBuilder<TSchema> = TSchema extends [
@@ -588,21 +531,6 @@ export type ExpandSchemaBuilder<TSchema> = TSchema extends [
588
531
  undefined
589
532
  >
590
533
  : INumberSchemaBuilder
591
- : TType extends 'alias'
592
- ? TParams extends [
593
- infer TSchemaName extends string,
594
- infer TRequired extends boolean,
595
- infer TNullable extends boolean,
596
- infer TAliasesCompiledType
597
- ]
598
- ? IAliasSchemaBuilder<
599
- TSchemaName,
600
- TRequired,
601
- TNullable,
602
- any,
603
- TAliasesCompiledType
604
- >
605
- : IAliasSchemaBuilder<any>
606
534
  : TType extends 'array'
607
535
  ? TParams extends [
608
536
  infer TRequired extends boolean,
@@ -700,19 +628,6 @@ export type ReduceSchemaBuilder<TBuilder> =
700
628
  TEnsureIsFinite,
701
629
  TEqualsTo
702
630
  ]
703
- : TBuilder extends IAliasSchemaBuilder<
704
- infer TSchemaName,
705
- infer TRequired,
706
- infer TNullable,
707
- infer TAliases
708
- >
709
- ? [
710
- 'alias',
711
- TSchemaName,
712
- TRequired,
713
- TNullable,
714
- InferType<ExpandSchemaBuilder<TAliases[TSchemaName]>>
715
- ]
716
631
  : TBuilder extends IArraySchemaBuilder<
717
632
  infer TRequired,
718
633
  infer TNullable,
@@ -849,16 +764,6 @@ export type InferType<S> = S extends DefaultSchemaType
849
764
  ? TRequired extends true
850
765
  ? InferType<TVariants>
851
766
  : InferType<TVariants> | undefined
852
- : S extends IAliasSchemaBuilder<
853
- infer TSchemaName,
854
- infer TRequired,
855
- infer TNullable,
856
- infer TAliases,
857
- infer TAliasesCompiledType
858
- >
859
- ? TRequired extends true
860
- ? TAliasesCompiledType
861
- : TAliasesCompiledType | undefined
862
767
  : S extends IArraySchemaBuilder<
863
768
  infer TRequired,
864
769
  infer TNullable,
@@ -5,7 +5,6 @@ import { string } from './builders/StringSchemaBuilder.js';
5
5
  import { array } from './builders/ArraySchemaBuilder.js';
6
6
  import { union } from './builders/UnionSchemaBuilder.js';
7
7
  import { boolean } from './builders/BooleanSchemaBuilder.js';
8
- import { alias } from './builders/AliasSchemaBuilder.js';
9
8
 
10
9
  import SchemaRegistry from './schemaRegistry.js';
11
10
 
@@ -702,7 +701,7 @@ test('Validate schema - 2', async () => {
702
701
 
703
702
  const result = await validator.validate(
704
703
  object({
705
- date: alias('Date').optional()
704
+ date: validator.schemas.Date.schema.optional()
706
705
  }),
707
706
  {}
708
707
  );
@@ -710,52 +709,6 @@ test('Validate schema - 2', async () => {
710
709
  expect(result).toHaveProperty('valid', true);
711
710
  });
712
711
 
713
- test('Not required alternative schema alias', async () => {
714
- const validator = new SchemaRegistry()
715
- .addSchema('Alternate1', ({ object, string }) =>
716
- object({
717
- a1: string()
718
- })
719
- )
720
- .addSchema('Alternate2', ({ object, string }) =>
721
- object({
722
- a2: string()
723
- })
724
- )
725
- .addSchema('Alternate', ({ union, alias }) =>
726
- union(alias('Alternate1')).or(alias('Alternate2'))
727
- );
728
-
729
- const s = alias('Alternate').optional();
730
- let result = await validator.validate(s, undefined);
731
-
732
- expect(result).toHaveProperty('valid', true);
733
-
734
- result = await validator.validate(
735
- {
736
- type: 'alias',
737
- isRequired: false,
738
- schemaName: 'Alternate'
739
- },
740
- {
741
- a2: 'something'
742
- }
743
- );
744
-
745
- expect(result).toHaveProperty('valid', true);
746
-
747
- result = await validator.validate(
748
- {
749
- type: 'alias',
750
- isRequired: false,
751
- schemaName: 'Alternate'
752
- },
753
- 'invalid'
754
- );
755
-
756
- expect(result).toHaveProperty('valid', false);
757
- });
758
-
759
712
  test('Preprocessors - 1', async () => {
760
713
  const validator = new SchemaRegistry().addSchema(
761
714
  'Date',
@@ -772,7 +725,7 @@ test('Preprocessors - 1', async () => {
772
725
  );
773
726
 
774
727
  const schema = object({
775
- bornAt: alias('Date')
728
+ bornAt: validator.schemas.Date.schema
776
729
  }).setPropPreprocessor('bornAt', (value: any): Date | undefined => {
777
730
  const time = Date.parse((value as Record<string, unknown>).toString());
778
731
  if (Number.isNaN(time)) return undefined;
@@ -800,7 +753,7 @@ test('Preprocessors - 2', async () => {
800
753
  );
801
754
 
802
755
  let schema = object({
803
- bornAt: alias('Date')
756
+ bornAt: validator.schemas.Date.schema
804
757
  }).setPropPreprocessor('bornAt', 'StringToDate');
805
758
 
806
759
  validator.addPreprocessor(
@@ -833,8 +786,8 @@ test('Preprocessors - 2', async () => {
833
786
  expect(result).toHaveProperty('valid', true);
834
787
 
835
788
  schema = object({
836
- bornAt: alias('Date'),
837
- diedAt: alias('Date')
789
+ bornAt: validator.schemas.Date.schema,
790
+ diedAt: validator.schemas.Date.schema
838
791
  })
839
792
  .setPropPreprocessor('bornAt', 'StringToDate')
840
793
  .setPropPreprocessor('diedAt', 'Unregistered') as any;
@@ -873,7 +826,9 @@ test('Preprocessors - 3', async () => {
873
826
  let obj = [new Date().toJSON()];
874
827
 
875
828
  let result = await validator.validate(
876
- array().ofType(alias('Date')).addPreprocessor('StringToDate'),
829
+ array()
830
+ .ofType(validator.schemas.Date.schema)
831
+ .addPreprocessor('StringToDate'),
877
832
  obj
878
833
  );
879
834
  expect(result).toHaveProperty('valid', true);
@@ -881,7 +836,7 @@ test('Preprocessors - 3', async () => {
881
836
  obj = [new Date().toJSON()];
882
837
  result = await validator.validate(
883
838
  array()
884
- .ofType(alias('Date'))
839
+ .ofType(validator.schemas.Date.schema)
885
840
  .addPreprocessor((value: unknown): Date | undefined => {
886
841
  const time = Date.parse(
887
842
  (value as Record<string, unknown>).toString()
@@ -896,7 +851,7 @@ test('Preprocessors - 3', async () => {
896
851
  obj = ['sdfsdf12', new Date().toJSON()];
897
852
  result = await validator.validate(
898
853
  array()
899
- .ofType(alias('Date'))
854
+ .ofType(validator.schemas.Date.schema)
900
855
  .addPreprocessor((value: unknown): Date | undefined => {
901
856
  const time = Date.parse(
902
857
  (value as Record<string, unknown>).toString()
@@ -961,7 +916,9 @@ test('Preprocessors - 4', async () => {
961
916
  let obj = [new Date().toJSON()];
962
917
 
963
918
  let result = await validator.validate(
964
- array().ofType(alias('Date')).addPreprocessor('StringToDate'),
919
+ array()
920
+ .ofType(validator.schemas.Date.schema)
921
+ .addPreprocessor('StringToDate'),
965
922
  obj
966
923
  );
967
924
  expect(result).toHaveProperty('valid', true);
@@ -969,7 +926,7 @@ test('Preprocessors - 4', async () => {
969
926
  obj = [new Date().toJSON()];
970
927
  result = await validator.validate(
971
928
  array()
972
- .ofType(alias('Date'))
929
+ .ofType(validator.schemas.Date.schema)
973
930
  .addPreprocessor((value: unknown): Date | undefined => {
974
931
  const time = Date.parse(
975
932
  (value as Record<string, unknown>).toString()
@@ -984,7 +941,7 @@ test('Preprocessors - 4', async () => {
984
941
  obj = ['sdfsdf12', new Date().toJSON()];
985
942
  result = await validator.validate(
986
943
  array()
987
- .ofType(alias('Date'))
944
+ .ofType(validator.schemas.Date.schema)
988
945
  .addPreprocessor((value: unknown): Date | undefined => {
989
946
  const time = Date.parse(
990
947
  (value as Record<string, unknown>).toString()
@@ -1039,23 +996,21 @@ test('Submodules - 3', async () => {
1039
996
  });
1040
997
 
1041
998
  test('Submodules - 4', async () => {
1042
- const validator = new SchemaRegistry()
1043
- .addSchema('Module1.Schema1', ({ object, number }) =>
1044
- object({
1045
- b: number()
1046
- })
1047
- )
1048
- .addSchema('Module1.Schema2', ({ object, alias }) =>
1049
- object({
1050
- a: alias('Module1.Schema3' as any)
1051
- })
1052
- );
1053
-
1054
- await validator.schemas.Module1.Schema2.validate({
1055
- a: {
1056
- b: 20
1057
- }
1058
- }).catch((e) => expect(e).toBeInstanceOf(Error));
999
+ try {
1000
+ new SchemaRegistry()
1001
+ .addSchema('Module1.Schema1', ({ object, number }) =>
1002
+ object({
1003
+ b: number()
1004
+ })
1005
+ )
1006
+ .addSchema('Module1.Schema2', ({ object, alias }) =>
1007
+ object({
1008
+ a: alias('Module1.Schema3' as any)
1009
+ })
1010
+ );
1011
+ } catch (e) {
1012
+ expect(e).toBeInstanceOf(Error);
1013
+ }
1059
1014
  });
1060
1015
 
1061
1016
  test('No unknown fields - 1', async () => {
@@ -1098,8 +1053,8 @@ test('addSchemaFrom - 1', async () => {
1098
1053
  last: string()
1099
1054
  })
1100
1055
  )
1101
- .addSchemaFrom('Person', 'PersonWithEmail', ({ schema, string }) =>
1102
- schema.addProps({
1056
+ .addSchemaFrom('Person', 'PersonWithEmail', ({ base, string }) =>
1057
+ base.addProps({
1103
1058
  email: string()
1104
1059
  })
1105
1060
  );
@@ -1168,8 +1123,8 @@ test('no unknown props allowed by default', async () => {
1168
1123
 
1169
1124
  expect(valid).toEqual(false);
1170
1125
 
1171
- const registry2 = registry.addSchemaFrom('User', 'UserOpen', ({ schema }) =>
1172
- schema.canHaveUnknownProps()
1126
+ const registry2 = registry.addSchemaFrom('User', 'UserOpen', ({ base }) =>
1127
+ base.canHaveUnknownProps()
1173
1128
  );
1174
1129
 
1175
1130
  const { valid: valid2 } = await registry2.schemas.UserOpen.validate({
@@ -1347,7 +1302,7 @@ test('External Schema - 2', async () => {
1347
1302
  object({
1348
1303
  name: string().addValidator(() => ({ valid: true })),
1349
1304
  director: external(validator1, 'person')
1350
- }).addValidator((v) => ({ valid: true }))
1305
+ }).addValidator(() => ({ valid: true }))
1351
1306
  );
1352
1307
 
1353
1308
  const result = await validator2.schemas.company.validate({