@cleverbrush/schema 1.0.0-beta.0 → 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.
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
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateUnion = void 0;
4
- const validateUnion = async (obj, schema, validator) => {
5
- if (typeof obj === 'undefined' && schema.isRequired === false) {
6
- return {
7
- valid: true
8
- };
9
- }
10
- if (obj === null && schema.isNullable) {
11
- return {
12
- valid: true
13
- };
14
- }
15
- if (Array.isArray(schema.variants) && schema.variants.length > 0) {
16
- for (let i = 0; i < schema.variants.length; i++) {
17
- const variant = schema.variants[i];
18
- const result = await validator.validate(variant, obj);
19
- if (result.valid) {
20
- return result;
21
- }
22
- }
23
- return {
24
- valid: false,
25
- errors: ['object does not satisfy any scheme']
26
- };
27
- }
28
- throw new Error('variants should be non empty array');
29
- };
30
- exports.validateUnion = validateUnion;
@@ -1,124 +0,0 @@
1
- import { Schema } from '../schema.js';
2
- import { alias } from './AliasSchemaBuilder.js';
3
-
4
- test('Clean', () => {
5
- const schema = alias('Something');
6
- expect(schema).toHaveProperty('type', 'alias');
7
- expect(schema).toHaveProperty('schemaName', 'Something');
8
- expect(schema).toHaveProperty('isRequired', true);
9
- expect(schema).toHaveProperty('isNullable', false);
10
- });
11
-
12
- test('optional', () => {
13
- const schema = alias('Something').optional();
14
- expect(schema).toHaveProperty('type', 'alias');
15
- expect(schema).toHaveProperty('isRequired', false);
16
- });
17
-
18
- test('optional - 2', () => {
19
- const schema = alias('Something').optional().required();
20
- expect(schema).toHaveProperty('type', 'alias');
21
- expect(schema).toHaveProperty('isRequired', true);
22
- });
23
-
24
- test('optional - 3', () => {
25
- const schema1 = alias('Something');
26
- const schema2 = schema1.optional();
27
- const e = (schema1 as Schema) === (schema2 as Schema);
28
- const isRequiredEqual = (schema1 as any).isRequired !== schema2.isRequired;
29
- expect(e).toEqual(false);
30
- expect(isRequiredEqual).toEqual(true);
31
- });
32
-
33
- test('optional - 4', () => {
34
- const schema1 = alias('Something').optional();
35
- const schema2 = schema1.optional();
36
- const e = (schema1 as Schema) === (schema2 as Schema);
37
- const isRequiredEqual = (schema1 as any).isRequired === schema2.isRequired;
38
- expect(e).toEqual(true);
39
- expect(isRequiredEqual).toEqual(true);
40
- });
41
-
42
- test('optional - 5', () => {
43
- const schema1 = alias('Something');
44
- const schema2 = schema1.required();
45
- const e = (schema1 as Schema) === (schema2 as Schema);
46
- const isRequiredEqual = (schema1 as any).isRequired === schema2.isRequired;
47
- expect(e).toEqual(true);
48
- expect(isRequiredEqual).toEqual(true);
49
- });
50
-
51
- test('optional - 6', () => {
52
- const schema1 = alias('Something').optional();
53
- const schema2 = schema1.required();
54
- const e = (schema1 as Schema) === (schema2 as Schema);
55
- const isRequiredEqual = (schema1 as any).isRequired === schema2.isRequired;
56
- expect(e).toEqual(false);
57
- expect(isRequiredEqual).toEqual(false);
58
- });
59
-
60
- test('optional - 7', () => {
61
- const schema1 = alias('Something').optional().required();
62
- const schema2 = schema1.required();
63
- const e = (schema1 as Schema) === (schema2 as Schema);
64
- const isRequiredEqual = (schema1 as any).isRequired === schema2.isRequired;
65
- expect(e).toEqual(true);
66
- expect(isRequiredEqual).toEqual(true);
67
- });
68
-
69
- test('nullable', () => {
70
- const schema = alias('Something').nullable();
71
- expect(schema).toHaveProperty('type', 'alias');
72
- expect(schema).toHaveProperty('isNullable', true);
73
- });
74
-
75
- test('nullable - 2', () => {
76
- const schema = alias('Something').nullable().notNullable();
77
- expect(schema).toHaveProperty('type', 'alias');
78
- expect(schema).toHaveProperty('isNullable', false);
79
- });
80
-
81
- test('nullable - 3', () => {
82
- const schema1 = alias('Something');
83
- const schema2 = schema1.nullable();
84
- const e = (schema1 as Schema) === (schema2 as Schema);
85
- const isNullableEqual = (schema1 as any).isNullable !== schema2.isNullable;
86
- expect(e).toEqual(false);
87
- expect(isNullableEqual).toEqual(true);
88
- });
89
-
90
- test('nullable - 4', () => {
91
- const schema1 = alias('Something').nullable();
92
- const schema2 = schema1.nullable();
93
- const e = (schema1 as Schema) === (schema2 as Schema);
94
- const isNullableEqual = (schema1 as any).isNullable === schema2.isNullable;
95
- expect(e).toEqual(true);
96
- expect(isNullableEqual).toEqual(true);
97
- });
98
-
99
- test('nullable - 5', () => {
100
- const schema1 = alias('Something');
101
- const schema2 = schema1.nullable();
102
- const e = (schema1 as Schema) === (schema2 as Schema);
103
- const isNullableEqual = (schema1 as any).isNullable === schema2.isNullable;
104
- expect(e).toEqual(false);
105
- expect(isNullableEqual).toEqual(false);
106
- });
107
-
108
- test('nullable - 6', () => {
109
- const schema1 = alias('Something');
110
- const schema2 = schema1.notNullable();
111
- const e = (schema1 as Schema) === (schema2 as Schema);
112
- const isNullableEqual = (schema1 as any).isNullable === schema2.isNullable;
113
- expect(e).toEqual(true);
114
- expect(isNullableEqual).toEqual(true);
115
- });
116
-
117
- test('nullable - 7', () => {
118
- const schema1 = alias('Something').nullable();
119
- const schema2 = schema1.notNullable();
120
- const e = (schema1 as Schema) === (schema2 as Schema);
121
- const isNullableEqual = (schema1 as any).isNullable === schema2.isNullable;
122
- expect(e).toEqual(false);
123
- expect(isNullableEqual).toEqual(false);
124
- });
@@ -1,250 +0,0 @@
1
- import { ISchemaBuilder, SchemaBuilder } from './SchemaBuilder.js';
2
- import { InferType, Schema } from '../schema.js';
3
- import { defaultSchemas } from '../defaultSchemas.js';
4
- import { ISchemaRegistry } from '../index.js';
5
-
6
- export interface IAliasSchemaBuilder<
7
- TSchemaName extends keyof TAliases,
8
- TRequired extends boolean = true,
9
- TNullable extends boolean = false,
10
- TAliases extends Record<string, any> = never,
11
- TAliasesCompiledType = any,
12
- TExternalRegistryKeys extends Record<string, any> = {}
13
- > extends ISchemaBuilder<TRequired, TNullable> {
14
- readonly type: 'alias';
15
- schemaName: TSchemaName;
16
- externalRegistry: ISchemaRegistry<TExternalRegistryKeys>;
17
-
18
- optional(): IAliasSchemaBuilder<
19
- TSchemaName,
20
- false,
21
- TNullable,
22
- TAliases,
23
- TAliasesCompiledType,
24
- TExternalRegistryKeys
25
- >;
26
- required(): IAliasSchemaBuilder<
27
- TSchemaName,
28
- true,
29
- TNullable,
30
- TAliases,
31
- TAliasesCompiledType,
32
- TExternalRegistryKeys
33
- >;
34
- nullable(): IAliasSchemaBuilder<
35
- TSchemaName,
36
- TRequired,
37
- true,
38
- TAliases,
39
- TAliasesCompiledType,
40
- TExternalRegistryKeys
41
- >;
42
- notNullable(): IAliasSchemaBuilder<
43
- TSchemaName,
44
- TRequired,
45
- false,
46
- TAliases,
47
- TAliasesCompiledType,
48
- TExternalRegistryKeys
49
- >;
50
- }
51
-
52
- class AliasSchemaBuilder<
53
- TSchemaName extends keyof TAliases,
54
- TRequired extends boolean = true,
55
- TNullable extends boolean = false,
56
- TAliases extends Record<string, any> = never,
57
- TAliasesCompiledType = any,
58
- TExternalRegistryKeys extends Record<string, any> = {}
59
- >
60
- extends SchemaBuilder<TRequired, TNullable>
61
- implements
62
- IAliasSchemaBuilder<
63
- TSchemaName,
64
- TRequired,
65
- TNullable,
66
- TAliases,
67
- TAliasesCompiledType,
68
- TExternalRegistryKeys
69
- >
70
- {
71
- public clone(): this {
72
- return AliasSchemaBuilder.create(this._schema as any) as this;
73
- }
74
-
75
- public get _schema(): Schema {
76
- return Object.assign(
77
- {
78
- type: this.type,
79
- schemaName: this.schemaName,
80
- externalRegistry: this.externalRegistry
81
- },
82
- this.getCommonSchema()
83
- );
84
- }
85
-
86
- public static create<
87
- TSchemaName extends keyof TAliases,
88
- TRequired extends boolean = true,
89
- TNullable extends boolean = false,
90
- TAliases extends Record<string, any> = never,
91
- TAliasesCompiledType = any,
92
- TExternalRegistryKeys extends Record<string, any> = {}
93
- >(obj?: {
94
- schemaName: TSchemaName;
95
- isRequired: TRequired;
96
- isNullable: TNullable;
97
- externalRegistry?: ISchemaRegistry<TExternalRegistryKeys>;
98
- }): IAliasSchemaBuilder<
99
- TSchemaName,
100
- TRequired,
101
- TNullable,
102
- TAliases,
103
- TAliasesCompiledType,
104
- TExternalRegistryKeys
105
- > {
106
- return new AliasSchemaBuilder(obj as any) as any;
107
- }
108
-
109
- public schemaName: TSchemaName;
110
- public externalRegistry: ISchemaRegistry<TExternalRegistryKeys>;
111
-
112
- private constructor(obj: {
113
- schemaName: TSchemaName;
114
- isRequired: TRequired;
115
- isNullable: TNullable;
116
- externalRegistry?: ISchemaRegistry<any>;
117
- }) {
118
- super(obj);
119
- if (typeof obj === 'object' && obj) {
120
- if (typeof obj.schemaName === 'string') {
121
- this.schemaName = obj.schemaName;
122
- }
123
- if (
124
- typeof obj.externalRegistry === 'object' &&
125
- obj.externalRegistry
126
- ) {
127
- this.externalRegistry = obj.externalRegistry;
128
- }
129
- } else {
130
- const defaultSchema = defaultSchemas['alias'] as any;
131
- this.isRequired = defaultSchema.isRequired;
132
- this.isNullable = defaultSchema.isNullable;
133
- }
134
- }
135
-
136
- get type(): 'alias' {
137
- return 'alias';
138
- }
139
-
140
- optional(): IAliasSchemaBuilder<
141
- TSchemaName,
142
- false,
143
- TNullable,
144
- TAliases,
145
- TAliasesCompiledType,
146
- TExternalRegistryKeys
147
- > {
148
- if (this.isRequired === false) {
149
- return this as any;
150
- }
151
-
152
- return AliasSchemaBuilder.create({
153
- ...(this._schema as any),
154
- isRequired: false
155
- });
156
- }
157
-
158
- required(): IAliasSchemaBuilder<
159
- TSchemaName,
160
- true,
161
- TNullable,
162
- TAliases,
163
- TAliasesCompiledType,
164
- TExternalRegistryKeys
165
- > {
166
- if (this.isRequired === true) {
167
- return this as any;
168
- }
169
-
170
- return AliasSchemaBuilder.create({
171
- ...(this._schema as any),
172
- isRequired: true
173
- });
174
- }
175
-
176
- nullable(): IAliasSchemaBuilder<
177
- TSchemaName,
178
- TRequired,
179
- true,
180
- TAliases,
181
- TAliasesCompiledType,
182
- TExternalRegistryKeys
183
- > {
184
- if (this._isNullable === true) {
185
- return this as any;
186
- }
187
- return AliasSchemaBuilder.create({
188
- ...(this._schema as any),
189
- isNullable: true
190
- });
191
- }
192
-
193
- notNullable(): IAliasSchemaBuilder<
194
- TSchemaName,
195
- TRequired,
196
- false,
197
- TAliases,
198
- TAliasesCompiledType,
199
- TExternalRegistryKeys
200
- > {
201
- if (this.isNullable === false) {
202
- return this as any;
203
- }
204
- return AliasSchemaBuilder.create({
205
- ...(this._schema as any),
206
- isNullable: false
207
- });
208
- }
209
- }
210
-
211
- export const alias = <
212
- TSchemaName extends keyof TAliases,
213
- TAliases extends Record<string, any>,
214
- TAliasesCompiledType = InferType<TAliases[TSchemaName]>
215
- >(
216
- schemaName: TSchemaName
217
- ) =>
218
- AliasSchemaBuilder.create<
219
- TSchemaName,
220
- true,
221
- false,
222
- TAliases,
223
- TAliasesCompiledType
224
- >({
225
- schemaName,
226
- isRequired: true,
227
- isNullable: false
228
- });
229
-
230
- export const externalAlias = <
231
- TSchemaName extends keyof TAliases,
232
- TAliases extends Record<string, any>,
233
- TExternalSchemaRegistry extends ISchemaRegistry<TAliases>,
234
- TAliasesCompiledType = InferType<TAliases[TSchemaName]>
235
- >(
236
- registry: TExternalSchemaRegistry,
237
- schemaName: TSchemaName
238
- ) =>
239
- AliasSchemaBuilder.create<
240
- TSchemaName,
241
- true,
242
- false,
243
- TAliases,
244
- TAliasesCompiledType
245
- >({
246
- schemaName,
247
- isRequired: true,
248
- isNullable: false,
249
- externalRegistry: registry
250
- });