@cleverbrush/schema 1.0.0-beta.3 → 1.0.0-beta.4

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 (39) 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 +25 -0
  6. package/dist/builders/FunctionSchemaBuilder.js +66 -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 +230 -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
@@ -0,0 +1,83 @@
1
+ import { ISchemaBuilder, SchemaBuilder } from './SchemaBuilder.js';
2
+ import { Schema, Validator, InferType, MakeOptional, MakeRequired, MakeNullable, MakeNotNullable } from '../schema.js';
3
+ export interface IObjectSchemaBuilder<TRequired extends boolean = true, TNullable extends boolean = false, TNoUnknownProperties extends boolean = true, TProperties = {}, TMapToType = undefined> extends ISchemaBuilder<TRequired, TNullable> {
4
+ optional(): IObjectSchemaBuilder<false, TNullable, TNoUnknownProperties, TProperties, TMapToType>;
5
+ required(): IObjectSchemaBuilder<true, TNullable, TNoUnknownProperties, TProperties, TMapToType>;
6
+ nullable(): IObjectSchemaBuilder<TRequired, true, TNoUnknownProperties, TProperties, TMapToType>;
7
+ notNullable(): IObjectSchemaBuilder<TRequired, false, TNoUnknownProperties, TProperties, TMapToType>;
8
+ addProps<T extends Record<string, any>>(val?: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties & T, TMapToType>;
9
+ removeProp<T extends keyof TProperties>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, Omit<TProperties, T>, TMapToType>;
10
+ canHaveUnknownProps(): IObjectSchemaBuilder<TRequired, TNullable, false, TProperties, TMapToType>;
11
+ noUnknownProps(): IObjectSchemaBuilder<TRequired, TNullable, true, TProperties, TMapToType>;
12
+ setPropPreprocessor<T extends keyof TProperties | '*', S = T extends keyof TProperties ? ((value: any) => undefined | InferType<TProperties[T]> | Promise<InferType<TProperties[T]>>) | string : (value: InferType<this>) => void | Promise<void>>(property: T, validator: S): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, TMapToType>;
13
+ unsetPropPreprocessor<T extends keyof TProperties | '*'>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, TMapToType>;
14
+ clearPropsPreprocessors(): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, TMapToType>;
15
+ makeAllPropsOptional<T extends keyof TProperties>(): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, {
16
+ [k in T]: MakeOptional<TProperties[k]>;
17
+ }, TMapToType>;
18
+ makePropOptional<T extends keyof TProperties>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, Omit<TProperties, T> & {
19
+ [k in T]: MakeOptional<TProperties[k]>;
20
+ }, TMapToType>;
21
+ makePropRequired<T extends keyof TProperties>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, Omit<TProperties, T> & {
22
+ [k in T]: MakeRequired<TProperties[k]>;
23
+ }, TMapToType>;
24
+ makePropNullable<T extends keyof TProperties>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, Omit<TProperties, T> & {
25
+ [k in T]: MakeNullable<TProperties[k]>;
26
+ }, TMapToType>;
27
+ makePropNotNullable<T extends keyof TProperties>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, Omit<TProperties, T> & {
28
+ [k in T]: MakeNotNullable<TProperties[k]>;
29
+ }, TMapToType>;
30
+ mapToType<T>(): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, T>;
31
+ clearMapToType(): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, undefined>;
32
+ }
33
+ export declare class ObjectSchemaBuilder<TRequired extends boolean = true, TNullable extends boolean = false, TNoUnknownProperties extends boolean = true, TProperties = {}, TMapToType = undefined> extends SchemaBuilder<TRequired, TNullable> implements IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, TMapToType> {
34
+ protected readonly type = "object";
35
+ protected noUnknownProperties?: TNoUnknownProperties;
36
+ protected properties?: TProperties;
37
+ protected preprocessors?: {
38
+ [S in keyof TProperties | '*']?: S extends keyof TProperties ? ((value: any) => undefined | InferType<TProperties[S]> | Promise<InferType<TProperties[S]>>) | string : (value: InferType<TProperties>) => void | Promise<void>;
39
+ };
40
+ clone(): this;
41
+ get _schema(): Schema;
42
+ private constructor();
43
+ static create<TCRequired extends boolean = true, TCNullable extends boolean = false, TCNoUnknownProperties extends boolean = false, TCProperties = {}, TMapToType = undefined>(obj?: {
44
+ isRequired: TCRequired;
45
+ isNullable: TCNullable;
46
+ properties: TCProperties;
47
+ noUnknownProperties: TCNoUnknownProperties;
48
+ validators?: Validator[];
49
+ preprocessor?: ((value: unknown) => unknown | Promise<unknown>) | string;
50
+ preprocessors?: {
51
+ [S in keyof TCProperties | '*']?: S extends keyof TCProperties ? ((value: any) => undefined | InferType<TCProperties[S]> | Promise<InferType<TCProperties[S]>>) | string : (value: InferType<TCProperties>) => void | Promise<void>;
52
+ };
53
+ }): IObjectSchemaBuilder<TCRequired, TCNullable, TCNoUnknownProperties, TCProperties, TMapToType>;
54
+ canHaveUnknownProps(): IObjectSchemaBuilder<TRequired, TNullable, false, TProperties, TMapToType>;
55
+ noUnknownProps(): IObjectSchemaBuilder<TRequired, TNullable, true, TProperties, TMapToType>;
56
+ optional(): IObjectSchemaBuilder<false, TNullable, TNoUnknownProperties, TProperties, TMapToType>;
57
+ required(): IObjectSchemaBuilder<true, TNullable, TNoUnknownProperties, TProperties, TMapToType>;
58
+ nullable(): IObjectSchemaBuilder<TRequired, true, TNoUnknownProperties, TProperties, TMapToType>;
59
+ notNullable(): IObjectSchemaBuilder<TRequired, false, TNoUnknownProperties, TProperties, TMapToType>;
60
+ addProps<T extends Record<string, any>>(val?: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties & T, TMapToType>;
61
+ removeProp<T extends keyof TProperties>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, Omit<TProperties, T>, TMapToType>;
62
+ setPropPreprocessor<T extends keyof TProperties | '*', S = T extends keyof TProperties ? ((value: any) => undefined | InferType<TProperties[T]> | Promise<InferType<TProperties[T]>>) | string : (value: InferType<T>) => void | Promise<void>>(property: T, validator: S): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, TMapToType>;
63
+ unsetPropPreprocessor<T extends keyof TProperties | '*'>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, TMapToType>;
64
+ clearPropsPreprocessors(): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, TMapToType>;
65
+ mapToType<T>(): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, T>;
66
+ clearMapToType(): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, TProperties, undefined>;
67
+ makeAllPropsOptional<T extends keyof TProperties>(): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, {
68
+ [k in T]: MakeOptional<TProperties[k]>;
69
+ }, TMapToType>;
70
+ makePropOptional<T extends keyof TProperties>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, Omit<TProperties, T> & {
71
+ [k in T]: MakeOptional<TProperties[k]>;
72
+ }, TMapToType>;
73
+ makePropRequired<T extends keyof TProperties>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, Omit<TProperties, T> & {
74
+ [k in T]: MakeRequired<TProperties[k]>;
75
+ }, TMapToType>;
76
+ makePropNullable<T extends keyof TProperties>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, Omit<TProperties, T> & {
77
+ [k in T]: MakeNullable<TProperties[k]>;
78
+ }, TMapToType>;
79
+ makePropNotNullable<T extends keyof TProperties>(property: T): IObjectSchemaBuilder<TRequired, TNullable, TNoUnknownProperties, Omit<TProperties, T> & {
80
+ [k in T]: MakeNotNullable<TProperties[k]>;
81
+ }, TMapToType>;
82
+ }
83
+ export declare const object: <T>(properties?: T) => IObjectSchemaBuilder<true, false, true, T extends undefined ? {} : T, undefined>;
@@ -0,0 +1,344 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.object = exports.ObjectSchemaBuilder = void 0;
4
+ const SchemaBuilder_js_1 = require("./SchemaBuilder.js");
5
+ const defaultSchemas_js_1 = require("../defaultSchemas.js");
6
+ class ObjectSchemaBuilder extends SchemaBuilder_js_1.SchemaBuilder {
7
+ type = 'object';
8
+ noUnknownProperties;
9
+ properties;
10
+ preprocessors;
11
+ clone() {
12
+ return ObjectSchemaBuilder.create({
13
+ isNullable: this._isNullable,
14
+ isRequired: this._isRequired,
15
+ noUnknownProperties: this.noUnknownProperties,
16
+ properties: this.properties,
17
+ preprocessor: this.preprocessor,
18
+ preprocessors: this.preprocessors,
19
+ validators: this.validators
20
+ });
21
+ }
22
+ get _schema() {
23
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
24
+ const that = this;
25
+ return Object.assign({
26
+ type: this.type
27
+ }, this.getCommonSchema(), typeof that.properties !== 'undefined' && that.properties
28
+ ? {
29
+ properties: Object.keys(that.properties).reduce((acc, curr) => {
30
+ if (!that.properties)
31
+ return;
32
+ if (that.properties[curr] instanceof SchemaBuilder_js_1.SchemaBuilder) {
33
+ acc[curr] = that.properties[curr].clone();
34
+ }
35
+ else {
36
+ acc[curr] = that.properties[curr];
37
+ }
38
+ return acc;
39
+ }, {})
40
+ }
41
+ : {}, typeof that.noUnknownProperties !== 'undefined'
42
+ ? { noUnknownProperties: that.noUnknownProperties }
43
+ : {}, typeof that.preprocessors !== 'undefined' && that.preprocessors
44
+ ? {
45
+ preprocessors: {
46
+ ...that.preprocessors
47
+ }
48
+ }
49
+ : {});
50
+ }
51
+ constructor(obj) {
52
+ super(obj);
53
+ if (typeof obj === 'object' && obj) {
54
+ if (typeof obj.properties !== 'undefined') {
55
+ this.properties = Object.keys(obj.properties).reduce((acc, curr) => {
56
+ if (obj.properties[curr] instanceof SchemaBuilder_js_1.SchemaBuilder) {
57
+ acc[curr] = obj.properties[curr].clone();
58
+ }
59
+ else {
60
+ acc[curr] = {
61
+ ...obj.properties[curr]
62
+ };
63
+ }
64
+ return acc;
65
+ }, {});
66
+ }
67
+ if (typeof obj.preprocessors !== 'undefined') {
68
+ this.preprocessors = { ...obj.preprocessors };
69
+ }
70
+ if (typeof obj.noUnknownProperties !== 'undefined') {
71
+ this.noUnknownProperties = obj.noUnknownProperties;
72
+ }
73
+ }
74
+ else {
75
+ const defaultSchema = defaultSchemas_js_1.defaultSchemas['object'];
76
+ this.isRequired = defaultSchema.isRequired;
77
+ this.isNullable = defaultSchema.isNullable;
78
+ }
79
+ }
80
+ static create(obj) {
81
+ return new ObjectSchemaBuilder(obj);
82
+ }
83
+ canHaveUnknownProps() {
84
+ if (this.noUnknownProperties === false) {
85
+ return this;
86
+ }
87
+ return ObjectSchemaBuilder.create({
88
+ ...this._schema,
89
+ noUnknownProperties: false
90
+ });
91
+ }
92
+ noUnknownProps() {
93
+ if (this.noUnknownProperties === true) {
94
+ return this;
95
+ }
96
+ return ObjectSchemaBuilder.create({
97
+ ...this._schema,
98
+ noUnknownProperties: true
99
+ });
100
+ }
101
+ optional() {
102
+ if (this.isRequired === false) {
103
+ return this;
104
+ }
105
+ return ObjectSchemaBuilder.create({
106
+ ...this._schema,
107
+ isRequired: false
108
+ });
109
+ }
110
+ required() {
111
+ if (this.isRequired === true) {
112
+ return this;
113
+ }
114
+ return ObjectSchemaBuilder.create({
115
+ ...this._schema,
116
+ isRequired: true
117
+ });
118
+ }
119
+ nullable() {
120
+ if (this.isNullable === true) {
121
+ return this;
122
+ }
123
+ return ObjectSchemaBuilder.create({
124
+ ...this._schema,
125
+ isNullable: true
126
+ });
127
+ }
128
+ notNullable() {
129
+ if (this.isNullable === false) {
130
+ return this;
131
+ }
132
+ return ObjectSchemaBuilder.create({
133
+ ...this._schema,
134
+ isNullable: false
135
+ });
136
+ }
137
+ addProps(val) {
138
+ if (typeof val === 'undefined')
139
+ return this;
140
+ return ObjectSchemaBuilder.create({
141
+ ...this._schema,
142
+ properties: {
143
+ ...this.properties,
144
+ ...val
145
+ }
146
+ });
147
+ }
148
+ removeProp(property) {
149
+ if (typeof this.properties === 'undefined') {
150
+ return this;
151
+ }
152
+ if (!(property in this.properties)) {
153
+ return this;
154
+ }
155
+ const newProperties = {
156
+ ...this.properties
157
+ };
158
+ delete newProperties[property];
159
+ let newPreprocessors = this.preprocessors;
160
+ if (typeof newPreprocessors !== 'undefined' &&
161
+ property in newPreprocessors) {
162
+ if (Object.keys(newPreprocessors).length === 1) {
163
+ newPreprocessors = undefined;
164
+ }
165
+ else {
166
+ newPreprocessors = {
167
+ ...this.preprocessors
168
+ };
169
+ delete newPreprocessors[property];
170
+ }
171
+ }
172
+ return ObjectSchemaBuilder.create({
173
+ ...this._schema,
174
+ preprocessors: newPreprocessors,
175
+ properties: newProperties
176
+ });
177
+ }
178
+ setPropPreprocessor(property, validator) {
179
+ if (typeof this.preprocessors === 'undefined') {
180
+ this.preprocessors = {
181
+ [property]: validator
182
+ };
183
+ }
184
+ else {
185
+ this.preprocessors = {
186
+ ...this.preprocessors,
187
+ [property]: validator
188
+ };
189
+ }
190
+ return ObjectSchemaBuilder.create({
191
+ ...this._schema,
192
+ preprocessors: {
193
+ ...this.preprocessors
194
+ }
195
+ });
196
+ }
197
+ unsetPropPreprocessor(property) {
198
+ if (typeof this.preprocessors === 'undefined' ||
199
+ !(property in this.preprocessors)) {
200
+ return this;
201
+ }
202
+ let newPreprocessors;
203
+ if (Object.keys(this.preprocessors).length === 1) {
204
+ newPreprocessors = undefined;
205
+ }
206
+ else {
207
+ newPreprocessors = {
208
+ ...this.preprocessors
209
+ };
210
+ delete newPreprocessors[property];
211
+ }
212
+ return ObjectSchemaBuilder.create({
213
+ ...this._schema,
214
+ preprocessors: newPreprocessors
215
+ });
216
+ }
217
+ clearPropsPreprocessors() {
218
+ if (typeof this.preprocessors === 'undefined') {
219
+ return this;
220
+ }
221
+ return ObjectSchemaBuilder.create({
222
+ ...this._schema,
223
+ preprocessors: undefined
224
+ });
225
+ }
226
+ mapToType() {
227
+ return this;
228
+ }
229
+ clearMapToType() {
230
+ return this;
231
+ }
232
+ makeAllPropsOptional() {
233
+ let res = this;
234
+ for (const prop in this.properties) {
235
+ res = res.makePropOptional(prop);
236
+ }
237
+ return res;
238
+ }
239
+ makePropOptional(property) {
240
+ if (typeof this.properties[property] === 'undefined')
241
+ throw new Error(`Property ${property} does not exists`);
242
+ if (this.properties[property] instanceof SchemaBuilder_js_1.SchemaBuilder) {
243
+ return ObjectSchemaBuilder.create({
244
+ ...this._schema,
245
+ properties: {
246
+ ...this.properties,
247
+ [property]: this.properties[property].optional()
248
+ }
249
+ });
250
+ }
251
+ else {
252
+ return ObjectSchemaBuilder.create({
253
+ ...this._schema,
254
+ properties: {
255
+ ...this.properties,
256
+ [property]: {
257
+ ...this.properties[property],
258
+ isRequired: false
259
+ }
260
+ }
261
+ });
262
+ }
263
+ }
264
+ makePropRequired(property) {
265
+ if (typeof this.properties[property] === 'undefined')
266
+ throw new Error(`Property ${property} does not exists`);
267
+ if (this.properties[property] instanceof SchemaBuilder_js_1.SchemaBuilder) {
268
+ return ObjectSchemaBuilder.create({
269
+ ...this._schema,
270
+ properties: {
271
+ ...this.properties,
272
+ [property]: this.properties[property].required()
273
+ }
274
+ });
275
+ }
276
+ else {
277
+ return ObjectSchemaBuilder.create({
278
+ ...this._schema,
279
+ properties: {
280
+ ...this.properties,
281
+ [property]: {
282
+ ...this.properties[property],
283
+ isRequired: true
284
+ }
285
+ }
286
+ });
287
+ }
288
+ }
289
+ makePropNullable(property) {
290
+ if (typeof this.properties[property] === 'undefined')
291
+ throw new Error(`Property ${property} does not exists`);
292
+ if (this.properties[property] instanceof SchemaBuilder_js_1.SchemaBuilder) {
293
+ return ObjectSchemaBuilder.create({
294
+ ...this._schema,
295
+ properties: {
296
+ ...this.properties,
297
+ [property]: this.properties[property].nullable()
298
+ }
299
+ });
300
+ }
301
+ else {
302
+ return ObjectSchemaBuilder.create({
303
+ ...this._schema,
304
+ properties: {
305
+ ...this.properties,
306
+ [property]: {
307
+ ...this.properties[property],
308
+ isNullable: true
309
+ }
310
+ }
311
+ });
312
+ }
313
+ }
314
+ makePropNotNullable(property) {
315
+ if (typeof this.properties[property] === 'undefined')
316
+ throw new Error(`Property ${property} does not exists`);
317
+ if (this.properties[property] instanceof SchemaBuilder_js_1.SchemaBuilder) {
318
+ return ObjectSchemaBuilder.create({
319
+ ...this._schema,
320
+ properties: {
321
+ ...this.properties,
322
+ [property]: this.properties[property].notNullable()
323
+ }
324
+ });
325
+ }
326
+ else {
327
+ return ObjectSchemaBuilder.create({
328
+ ...this._schema,
329
+ properties: {
330
+ ...this.properties,
331
+ [property]: {
332
+ ...this.properties[property],
333
+ isNullable: false
334
+ }
335
+ }
336
+ });
337
+ }
338
+ }
339
+ }
340
+ exports.ObjectSchemaBuilder = ObjectSchemaBuilder;
341
+ const object = (properties) => typeof properties === 'undefined'
342
+ ? ObjectSchemaBuilder.create()
343
+ : ObjectSchemaBuilder.create().addProps(properties);
344
+ exports.object = object;
@@ -0,0 +1,36 @@
1
+ import { Schema, Validator } from '../schema.js';
2
+ export interface ISchemaBuilder<TRequired extends boolean = true, TNullable extends boolean = false> {
3
+ readonly _schema: Schema;
4
+ isRequired: TRequired;
5
+ isNullable: TNullable;
6
+ validators?: Validator[];
7
+ preprocessor?: ((value: unknown) => unknown | Promise<unknown>) | string;
8
+ addValidator(validator: Validator): this;
9
+ clearValidators(): this;
10
+ addPreprocessor(preprocessor: ((value: unknown) => unknown | Promise<unknown>) | string): this;
11
+ clearPreprocessor(): this;
12
+ clone(): this;
13
+ }
14
+ export declare abstract class SchemaBuilder<TRequired extends boolean = true, TNullable extends boolean = false> implements ISchemaBuilder<TRequired, TNullable> {
15
+ protected _isRequired: TRequired;
16
+ protected _isNullable: TNullable;
17
+ validators?: Validator[];
18
+ preprocessor?: ((value: unknown) => unknown | Promise<unknown>) | string;
19
+ abstract clone(): this;
20
+ abstract get _schema(): Schema;
21
+ protected constructor(obj: {
22
+ isRequired?: boolean;
23
+ isNullable?: boolean;
24
+ preprocessor?: ((value: unknown) => unknown | Promise<unknown>) | string;
25
+ validators?: Validator[];
26
+ });
27
+ protected getCommonSchema(): any;
28
+ addPreprocessor(preprocessor: ((value: unknown) => unknown | Promise<unknown>) | string): this;
29
+ clearPreprocessor(): this;
30
+ addValidator(validator: Validator): this;
31
+ clearValidators(): this;
32
+ get isRequired(): TRequired;
33
+ protected set isRequired(val: boolean);
34
+ get isNullable(): TNullable;
35
+ protected set isNullable(val: boolean);
36
+ }
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaBuilder = void 0;
4
+ class SchemaBuilder {
5
+ _isRequired = true;
6
+ _isNullable = false;
7
+ validators;
8
+ preprocessor;
9
+ constructor(obj) {
10
+ if (typeof obj === 'object') {
11
+ if (typeof obj.isRequired !== 'undefined') {
12
+ this.isRequired = obj.isRequired;
13
+ }
14
+ if (typeof obj.isNullable !== 'undefined') {
15
+ this.isNullable = obj.isNullable;
16
+ }
17
+ if (Array.isArray(obj.validators)) {
18
+ this.validators = [...obj.validators];
19
+ }
20
+ if (typeof obj.preprocessor !== 'undefined') {
21
+ this.preprocessor = obj.preprocessor;
22
+ }
23
+ }
24
+ }
25
+ getCommonSchema() {
26
+ const schemas = [];
27
+ if (typeof this.preprocessor !== 'undefined') {
28
+ schemas.push({
29
+ preprocessor: this.preprocessor
30
+ });
31
+ }
32
+ if (typeof this.isRequired !== 'undefined') {
33
+ schemas.push({ isRequired: this.isRequired });
34
+ }
35
+ if (typeof this.isNullable !== 'undefined') {
36
+ schemas.push({ isNullable: this.isNullable });
37
+ }
38
+ if (typeof this.validators !== 'undefined') {
39
+ schemas.push({ validators: [...this.validators] });
40
+ }
41
+ return Object.assign({}, ...schemas);
42
+ }
43
+ addPreprocessor(preprocessor) {
44
+ const result = this.clone();
45
+ result.preprocessor = preprocessor;
46
+ return result;
47
+ }
48
+ clearPreprocessor() {
49
+ if (typeof this.preprocessor === 'undefined') {
50
+ return this;
51
+ }
52
+ const result = this.clone();
53
+ delete result.preprocessor;
54
+ return result;
55
+ }
56
+ addValidator(validator) {
57
+ const result = this.clone();
58
+ if (typeof validator !== 'function')
59
+ throw new Error('validator should be a function');
60
+ if (Array.isArray(result.validators)) {
61
+ result.validators.push(validator);
62
+ }
63
+ else {
64
+ result.validators = [validator];
65
+ }
66
+ return result;
67
+ }
68
+ clearValidators() {
69
+ if (typeof this.validators === 'undefined')
70
+ return this;
71
+ const result = this.clone();
72
+ delete result.validators;
73
+ return result;
74
+ }
75
+ get isRequired() {
76
+ return this._isRequired;
77
+ }
78
+ set isRequired(val) {
79
+ this._isRequired = val;
80
+ }
81
+ get isNullable() {
82
+ return this._isNullable;
83
+ }
84
+ set isNullable(val) {
85
+ this._isNullable = val;
86
+ }
87
+ }
88
+ exports.SchemaBuilder = SchemaBuilder;
@@ -0,0 +1,14 @@
1
+ import { ISchemaBuilder } from './SchemaBuilder.js';
2
+ export interface IStringSchemaBuilder<TRequired extends boolean = true, TNullable extends boolean = false, TMinLength extends number | undefined = undefined, TMaxLength extends number | undefined = undefined, TEqualsTo extends string | undefined = undefined> extends ISchemaBuilder<TRequired, TNullable> {
3
+ optional(): IStringSchemaBuilder<false, TNullable, TMinLength, TMaxLength, TEqualsTo>;
4
+ required(): IStringSchemaBuilder<true, TNullable, TMinLength, TMaxLength, TEqualsTo>;
5
+ nullable(): IStringSchemaBuilder<TRequired, true, TMinLength, TMaxLength, TEqualsTo>;
6
+ notNullable(): IStringSchemaBuilder<TRequired, false, TMinLength, TMaxLength, TEqualsTo>;
7
+ minLength<K extends number>(val: K): IStringSchemaBuilder<TRequired, TNullable, K, TMaxLength, TEqualsTo>;
8
+ clearMinLength(): IStringSchemaBuilder<TRequired, TNullable, undefined, TMaxLength, TEqualsTo>;
9
+ maxLength<K extends number>(val: K): IStringSchemaBuilder<TRequired, TNullable, TMinLength, K, TEqualsTo>;
10
+ clearMaxLength(): IStringSchemaBuilder<TRequired, TNullable, TMinLength, undefined, TEqualsTo>;
11
+ equals<T extends string>(val: T): IStringSchemaBuilder<TRequired, TNullable, TMinLength, TMaxLength, T>;
12
+ clearEquals(): IStringSchemaBuilder<TRequired, TNullable, TMinLength, TMaxLength, undefined>;
13
+ }
14
+ export declare const string: <T extends string = undefined>(equals?: T) => IStringSchemaBuilder<true, false, undefined, undefined, T extends undefined ? undefined : T>;