@cleverbrush/schema 1.0.0-beta.4 → 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/FunctionSchemaBuilder.d.ts +14 -12
- package/dist/builders/FunctionSchemaBuilder.js +3 -0
- package/dist/index.d.ts +1 -1
- package/dist/schema.d.ts +8 -7
- package/package.json +2 -2
- package/src/builders/FunctionSchemaBuilder.test.ts +11 -0
- package/src/builders/FunctionSchemaBuilder.ts +24 -16
- package/src/schema.ts +36 -14
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
import { Schema, Validator } from '../schema.js';
|
|
2
2
|
import { ISchemaBuilder, SchemaBuilder } from './SchemaBuilder.js';
|
|
3
|
-
export interface IFunctionSchemaBuilder<TRequired extends boolean = true, TNullable extends boolean = false> extends ISchemaBuilder<TRequired, TNullable> {
|
|
4
|
-
optional(): IFunctionSchemaBuilder<false, TNullable>;
|
|
5
|
-
required(): IFunctionSchemaBuilder<true, TNullable>;
|
|
6
|
-
nullable(): IFunctionSchemaBuilder<TRequired, true>;
|
|
7
|
-
notNullable(): IFunctionSchemaBuilder<TRequired, false>;
|
|
3
|
+
export interface IFunctionSchemaBuilder<TRequired extends boolean = true, TNullable extends boolean = false, TMapToType = undefined> extends ISchemaBuilder<TRequired, TNullable> {
|
|
4
|
+
optional(): IFunctionSchemaBuilder<false, TNullable, TMapToType>;
|
|
5
|
+
required(): IFunctionSchemaBuilder<true, TNullable, TMapToType>;
|
|
6
|
+
nullable(): IFunctionSchemaBuilder<TRequired, true, TMapToType>;
|
|
7
|
+
notNullable(): IFunctionSchemaBuilder<TRequired, false, TMapToType>;
|
|
8
|
+
mapToType<T>(): IFunctionSchemaBuilder<TRequired, TNullable, T>;
|
|
8
9
|
}
|
|
9
|
-
export declare class FunctionSchemaBuilder<TRequired extends boolean = true, TNullable extends boolean = false> extends SchemaBuilder<TRequired, TNullable> implements IFunctionSchemaBuilder<TRequired, TNullable> {
|
|
10
|
+
export declare class FunctionSchemaBuilder<TRequired extends boolean = true, TNullable extends boolean = false, TMapToType = undefined> extends SchemaBuilder<TRequired, TNullable> implements IFunctionSchemaBuilder<TRequired, TNullable> {
|
|
10
11
|
protected readonly type = "function";
|
|
11
12
|
get _schema(): Schema;
|
|
12
13
|
clone(): this;
|
|
13
|
-
|
|
14
|
+
mapToType<T>(): IFunctionSchemaBuilder<TRequired, TNullable, T>;
|
|
15
|
+
static create<TRequired extends boolean = true, TNullable extends boolean = false, TMapToType = undefined>(obj?: {
|
|
14
16
|
isRequired: TRequired;
|
|
15
17
|
isNullable: TNullable;
|
|
16
18
|
validators?: Validator[];
|
|
17
19
|
preprocessor?: ((value: unknown) => unknown | Promise<unknown>) | string;
|
|
18
|
-
}): IFunctionSchemaBuilder<TRequired, TNullable>;
|
|
20
|
+
}): IFunctionSchemaBuilder<TRequired, TNullable, TMapToType>;
|
|
19
21
|
private constructor();
|
|
20
|
-
optional(): IFunctionSchemaBuilder<false, TNullable>;
|
|
21
|
-
required(): IFunctionSchemaBuilder<true, TNullable>;
|
|
22
|
-
nullable(): IFunctionSchemaBuilder<TRequired, true>;
|
|
23
|
-
notNullable(): IFunctionSchemaBuilder<TRequired, false>;
|
|
22
|
+
optional(): IFunctionSchemaBuilder<false, TNullable, TMapToType>;
|
|
23
|
+
required(): IFunctionSchemaBuilder<true, TNullable, TMapToType>;
|
|
24
|
+
nullable(): IFunctionSchemaBuilder<TRequired, true, TMapToType>;
|
|
25
|
+
notNullable(): IFunctionSchemaBuilder<TRequired, false, TMapToType>;
|
|
24
26
|
}
|
|
25
27
|
export declare const func: () => IFunctionSchemaBuilder;
|
package/dist/index.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ declare const _default: {
|
|
|
34
34
|
object: <T>(properties?: T) => import("./builders/ObjectSchemaBuilder.js").IObjectSchemaBuilder<true, false, true, T extends undefined ? {} : T, undefined>;
|
|
35
35
|
string: <T_1 extends string = undefined>(equals?: T_1) => import("./builders/StringSchemaBuilder.js").IStringSchemaBuilder<true, false, undefined, undefined, T_1 extends undefined ? undefined : T_1>;
|
|
36
36
|
union: <T_2 extends import("./builders/SchemaBuilder.js").ISchemaBuilder<true, false>, K extends T_2[], TRequired extends boolean = true, TNullable extends boolean = false>(...schemas: K) => import("./builders/UnionSchemaBuilder.js").IUnionSchemaBuilder<TRequired, TNullable, K>;
|
|
37
|
-
func: () => import("./builders/FunctionSchemaBuilder.js").IFunctionSchemaBuilder<true, false>;
|
|
37
|
+
func: () => import("./builders/FunctionSchemaBuilder.js").IFunctionSchemaBuilder<true, false, undefined>;
|
|
38
38
|
};
|
|
39
39
|
export default _default;
|
|
40
40
|
export { array, boolean, number, object, string, union, func, InferType };
|
package/dist/schema.d.ts
CHANGED
|
@@ -113,13 +113,13 @@ export declare type Schema<T = any> = T extends Record<string, any> ? any : T ex
|
|
|
113
113
|
export declare type MakeOptional<T> = T extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? IUnionSchemaBuilder<false, TNullable, TVariants> : T extends IStringSchemaBuilder<infer TRequired, infer TNullable, infer TMinLength, infer TMaxLength, infer TEqualsTo> ? IStringSchemaBuilder<false, TNullable, TMinLength, TMaxLength, TEqualsTo> : T extends IObjectSchemaBuilder<infer TRequired, infer TNullable, infer TNoUnknownProperties, infer TProperties, infer TMapToType> ? IObjectSchemaBuilder<false, TNullable, TNoUnknownProperties, TProperties, TMapToType> : T extends INumberSchemaBuilder<infer TRequired, infer TNullable, infer TMin, infer TMax, infer TIsInteger, infer TEnsureNotNaN, infer TEnsureIsFinite, infer TEqualsTo> ? INumberSchemaBuilder<false, TNullable, TMin, TMax, TIsInteger, TEnsureNotNaN, TEnsureIsFinite, TEqualsTo> : T extends IArraySchemaBuilder<infer TRequired, infer TNullable, infer TOfType, infer TMaxLength, infer TMinLength> ? IArraySchemaBuilder<false, TNullable, TOfType, TMaxLength, TMinLength> : T extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? IBooleanSchemaBuilder<false, TNullable, TEqualsTo> : T extends IFunctionSchemaBuilder<infer TRequired, infer TNullable> ? IFunctionSchemaBuilder<false, TNullable> : T & {
|
|
114
114
|
isRequired: false;
|
|
115
115
|
};
|
|
116
|
-
export declare type MakeRequired<T> = T extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? IUnionSchemaBuilder<true, TNullable, TVariants> : T extends IStringSchemaBuilder<infer TRequired, infer TNullable, infer TMinLength, infer TMaxLength, infer TEqualsTo> ? IStringSchemaBuilder<true, TNullable, TMinLength, TMaxLength, TEqualsTo> : T extends IObjectSchemaBuilder<infer TRequired, infer TNullable, infer TNoUnknownProperties, infer TProperties, infer TMapToType> ? IObjectSchemaBuilder<true, TNullable, TNoUnknownProperties, TProperties, TMapToType> : T extends INumberSchemaBuilder<infer TRequired, infer TNullable, infer TMin, infer TMax, infer TIsInteger, infer TEnsureNotNaN, infer TEnsureIsFinite, infer TEqualsTo> ? INumberSchemaBuilder<true, TNullable, TMin, TMax, TIsInteger, TEnsureNotNaN, TEnsureIsFinite, TEqualsTo> : T extends IArraySchemaBuilder<infer TRequired, infer TNullable, infer TOfType, infer TMaxLength, infer TMinLength> ? IArraySchemaBuilder<true, TNullable, TOfType, TMaxLength, TMinLength> : T extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? IBooleanSchemaBuilder<true, TNullable, TEqualsTo> : T extends IFunctionSchemaBuilder<infer TRequired, infer TNullable> ? IFunctionSchemaBuilder<true, TNullable> : T & {
|
|
116
|
+
export declare type MakeRequired<T> = T extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? IUnionSchemaBuilder<true, TNullable, TVariants> : T extends IStringSchemaBuilder<infer TRequired, infer TNullable, infer TMinLength, infer TMaxLength, infer TEqualsTo> ? IStringSchemaBuilder<true, TNullable, TMinLength, TMaxLength, TEqualsTo> : T extends IObjectSchemaBuilder<infer TRequired, infer TNullable, infer TNoUnknownProperties, infer TProperties, infer TMapToType> ? IObjectSchemaBuilder<true, TNullable, TNoUnknownProperties, TProperties, TMapToType> : T extends INumberSchemaBuilder<infer TRequired, infer TNullable, infer TMin, infer TMax, infer TIsInteger, infer TEnsureNotNaN, infer TEnsureIsFinite, infer TEqualsTo> ? INumberSchemaBuilder<true, TNullable, TMin, TMax, TIsInteger, TEnsureNotNaN, TEnsureIsFinite, TEqualsTo> : T extends IArraySchemaBuilder<infer TRequired, infer TNullable, infer TOfType, infer TMaxLength, infer TMinLength> ? IArraySchemaBuilder<true, TNullable, TOfType, TMaxLength, TMinLength> : T extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? IBooleanSchemaBuilder<true, TNullable, TEqualsTo> : T extends IFunctionSchemaBuilder<infer TRequired, infer TNullable, infer TMapToType> ? IFunctionSchemaBuilder<true, TNullable, TMapToType> : T & {
|
|
117
117
|
isRequired: true;
|
|
118
118
|
};
|
|
119
|
-
export declare type MakeNullable<T> = T extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? IUnionSchemaBuilder<TRequired, true, TVariants> : T extends IStringSchemaBuilder<infer TRequired, infer TNullable, infer TMinLength, infer TMaxLength, infer TEqualsTo> ? IStringSchemaBuilder<TRequired, true, TMinLength, TMaxLength, TEqualsTo> : T extends IObjectSchemaBuilder<infer TRequired, infer TNullable, infer TNoUnknownProperties, infer TProperties, infer TMapToType> ? IObjectSchemaBuilder<TRequired, true, TNoUnknownProperties, TProperties, TMapToType> : T extends INumberSchemaBuilder<infer TRequired, infer TNullable, infer TMin, infer TMax, infer TIsInteger, infer TEnsureNotNaN, infer TEnsureIsFinite, infer TEqualsTo> ? INumberSchemaBuilder<TRequired, true, TMin, TMax, TIsInteger, TEnsureNotNaN, TEnsureIsFinite, TEqualsTo> : T extends IArraySchemaBuilder<infer TRequired, infer TNullable, infer TOfType, infer TMaxLength, infer TMinLength> ? IArraySchemaBuilder<TRequired, true, TOfType, TMaxLength, TMinLength> : T extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? IBooleanSchemaBuilder<TRequired, true, TEqualsTo> : T extends IFunctionSchemaBuilder<infer TRequired, infer TNullable> ? IFunctionSchemaBuilder<TRequired, true> : T & {
|
|
119
|
+
export declare type MakeNullable<T> = T extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? IUnionSchemaBuilder<TRequired, true, TVariants> : T extends IStringSchemaBuilder<infer TRequired, infer TNullable, infer TMinLength, infer TMaxLength, infer TEqualsTo> ? IStringSchemaBuilder<TRequired, true, TMinLength, TMaxLength, TEqualsTo> : T extends IObjectSchemaBuilder<infer TRequired, infer TNullable, infer TNoUnknownProperties, infer TProperties, infer TMapToType> ? IObjectSchemaBuilder<TRequired, true, TNoUnknownProperties, TProperties, TMapToType> : T extends INumberSchemaBuilder<infer TRequired, infer TNullable, infer TMin, infer TMax, infer TIsInteger, infer TEnsureNotNaN, infer TEnsureIsFinite, infer TEqualsTo> ? INumberSchemaBuilder<TRequired, true, TMin, TMax, TIsInteger, TEnsureNotNaN, TEnsureIsFinite, TEqualsTo> : T extends IArraySchemaBuilder<infer TRequired, infer TNullable, infer TOfType, infer TMaxLength, infer TMinLength> ? IArraySchemaBuilder<TRequired, true, TOfType, TMaxLength, TMinLength> : T extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? IBooleanSchemaBuilder<TRequired, true, TEqualsTo> : T extends IFunctionSchemaBuilder<infer TRequired, infer TNullable, infer TMapToType> ? IFunctionSchemaBuilder<TRequired, true, TMapToType> : T & {
|
|
120
120
|
isNullable: true;
|
|
121
121
|
};
|
|
122
|
-
export declare type MakeNotNullable<T> = T extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? IUnionSchemaBuilder<TRequired, false, TVariants> : T extends IStringSchemaBuilder<infer TRequired, infer TNullable, infer TMinLength, infer TMaxLength, infer TEqualsTo> ? IStringSchemaBuilder<TRequired, false, TMinLength, TMaxLength, TEqualsTo> : T extends IObjectSchemaBuilder<infer TRequired, infer TNullable, infer TNoUnknownProperties, infer TProperties, infer TMapToType> ? IObjectSchemaBuilder<TRequired, false, TNoUnknownProperties, TProperties, TMapToType> : T extends INumberSchemaBuilder<infer TRequired, infer TNullable, infer TMin, infer TMax, infer TIsInteger, infer TEnsureNotNaN, infer TEnsureIsFinite, infer TEqualsTo> ? INumberSchemaBuilder<TRequired, false, TMin, TMax, TIsInteger, TEnsureNotNaN, TEnsureIsFinite, TEqualsTo> : T extends IArraySchemaBuilder<infer TRequired, infer TNullable, infer TOfType, infer TMaxLength, infer TMinLength> ? IArraySchemaBuilder<TRequired, false, TOfType, TMaxLength, TMinLength> : T extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? IBooleanSchemaBuilder<TRequired, false, TEqualsTo> : T extends IFunctionSchemaBuilder<infer TRequired, infer TNullable> ? IFunctionSchemaBuilder<TRequired, false> : T & {
|
|
122
|
+
export declare type MakeNotNullable<T> = T extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? IUnionSchemaBuilder<TRequired, false, TVariants> : T extends IStringSchemaBuilder<infer TRequired, infer TNullable, infer TMinLength, infer TMaxLength, infer TEqualsTo> ? IStringSchemaBuilder<TRequired, false, TMinLength, TMaxLength, TEqualsTo> : T extends IObjectSchemaBuilder<infer TRequired, infer TNullable, infer TNoUnknownProperties, infer TProperties, infer TMapToType> ? IObjectSchemaBuilder<TRequired, false, TNoUnknownProperties, TProperties, TMapToType> : T extends INumberSchemaBuilder<infer TRequired, infer TNullable, infer TMin, infer TMax, infer TIsInteger, infer TEnsureNotNaN, infer TEnsureIsFinite, infer TEqualsTo> ? INumberSchemaBuilder<TRequired, false, TMin, TMax, TIsInteger, TEnsureNotNaN, TEnsureIsFinite, TEqualsTo> : T extends IArraySchemaBuilder<infer TRequired, infer TNullable, infer TOfType, infer TMaxLength, infer TMinLength> ? IArraySchemaBuilder<TRequired, false, TOfType, TMaxLength, TMinLength> : T extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? IBooleanSchemaBuilder<TRequired, false, TEqualsTo> : T extends IFunctionSchemaBuilder<infer TRequired, infer TNullable, infer TMapToType> ? IFunctionSchemaBuilder<TRequired, false, TMapToType> : T & {
|
|
123
123
|
isNullable: false;
|
|
124
124
|
};
|
|
125
125
|
export declare type ExpandUnionVariants<TVariants extends any[]> = TVariants extends [
|
|
@@ -167,8 +167,9 @@ export declare type ExpandSchemaBuilder<TSchema> = TSchema extends [
|
|
|
167
167
|
infer TEqualsTo extends boolean | undefined
|
|
168
168
|
] ? IBooleanSchemaBuilder<TRequired, TNullable, TEqualsTo extends undefined ? undefined : boolean> : IBooleanSchemaBuilder : TType extends 'function' ? TParams extends [
|
|
169
169
|
infer TRequired extends boolean,
|
|
170
|
-
infer TNullable extends boolean
|
|
171
|
-
|
|
170
|
+
infer TNullable extends boolean,
|
|
171
|
+
infer TMapToType
|
|
172
|
+
] ? IFunctionSchemaBuilder<TRequired, TNullable, TMapToType> : IFunctionSchemaBuilder : TSchema : TSchema;
|
|
172
173
|
export declare type ReduceSchemaBuilder<TBuilder> = TBuilder extends IObjectSchemaBuilder<infer TRequired, infer TNullable, infer TNoUnknownProperties, infer TProperties, infer TMapToType> ? [
|
|
173
174
|
'object',
|
|
174
175
|
TRequired,
|
|
@@ -195,7 +196,7 @@ export declare type ReduceSchemaBuilder<TBuilder> = TBuilder extends IObjectSche
|
|
|
195
196
|
ReduceSchemaBuilder<TOfType>,
|
|
196
197
|
TMaxLength,
|
|
197
198
|
TMinLength
|
|
198
|
-
] : TBuilder extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? ['union', TRequired, TNullable, ReduceSchemaBuilder<TVariants>] : TBuilder extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? ['boolean', TRequired, TNullable, TEqualsTo] : TBuilder extends IFunctionSchemaBuilder<infer TRequired, infer TNullable> ? ['function', TRequired, TNullable] : TBuilder extends [infer F] ? [ReduceSchemaBuilder<F>] : TBuilder extends [infer F, ...infer Rest] ? [ReduceSchemaBuilder<F>, ...ReduceSchemaBuilder<Rest>] : TBuilder;
|
|
199
|
+
] : TBuilder extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? ['union', TRequired, TNullable, ReduceSchemaBuilder<TVariants>] : TBuilder extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? ['boolean', TRequired, TNullable, TEqualsTo] : TBuilder extends IFunctionSchemaBuilder<infer TRequired, infer TNullable, infer TMapToType> ? ['function', TRequired, TNullable, TMapToType] : TBuilder extends [infer F] ? [ReduceSchemaBuilder<F>] : TBuilder extends [infer F, ...infer Rest] ? [ReduceSchemaBuilder<F>, ...ReduceSchemaBuilder<Rest>] : TBuilder;
|
|
199
200
|
export declare type InferType<S> = S extends DefaultSchemaType ? S extends 'string' ? string : S extends 'boolean' ? boolean : S extends 'number' ? number : S extends 'array' ? Array<any> : S extends 'object' ? Record<string, never> : S extends 'function' ? Function : never : S extends number ? S : S extends BooleanSchema ? S['equals'] extends undefined ? boolean : S['equals'] : S extends UnionSchema<infer K> ? InferType<K> : S extends {
|
|
200
201
|
type: 'union';
|
|
201
202
|
variants: infer K;
|
|
@@ -207,7 +208,7 @@ export declare type InferType<S> = S extends DefaultSchemaType ? S extends 'stri
|
|
|
207
208
|
noUnknownProperties: false;
|
|
208
209
|
}) & (TProperties extends Record<string, any> ? {
|
|
209
210
|
properties: TProperties;
|
|
210
|
-
} : {})> : TMapToType : S extends INumberSchemaBuilder<infer TRequired, infer TNullable, infer TMin, infer TMax, infer TIsInteger, infer TEnsureNotNaN, infer TEnsureIsFinite, infer TEqualsTo> ? TRequired extends true ? TEqualsTo extends undefined ? number : TEqualsTo : TEqualsTo extends undefined ? number | undefined : TEqualsTo | undefined : S extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? TRequired extends true ? TEqualsTo extends undefined ? boolean : TEqualsTo : TEqualsTo extends undefined ? boolean | undefined : TEqualsTo | undefined : S extends IStringSchemaBuilder<infer TRequired, infer TNullable, infer TMinLength, infer TMaxLength, infer TEqualsTo> ? TRequired extends true ? TEqualsTo extends undefined ? string : TEqualsTo : TEqualsTo extends undefined ? string | undefined : TEqualsTo | undefined : S extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? TRequired extends true ? InferType<TVariants> : InferType<TVariants> | undefined : S extends IArraySchemaBuilder<infer TRequired, infer TNullable, infer TOfType, infer TMaxLength, infer TMinLength> ? TRequired extends true ? TOfType extends undefined ? any[] : InferType<TOfType>[] : TOfType extends undefined ? any[] | undefined : InferType<TOfType>[] | undefined : S extends IFunctionSchemaBuilder<infer TRequired, infer TNullable> ? TRequired extends true ? Function : Function | undefined : S extends StringSchema ? S['equals'] extends undefined ? string : S['equals'] : S extends NumberSchema ? S['equals'] extends undefined ? number : S['equals'] : S extends ObjectSchema<infer K> ? OptionalPropertiesOf<K> extends never ? {
|
|
211
|
+
} : {})> : TMapToType : S extends INumberSchemaBuilder<infer TRequired, infer TNullable, infer TMin, infer TMax, infer TIsInteger, infer TEnsureNotNaN, infer TEnsureIsFinite, infer TEqualsTo> ? TRequired extends true ? TEqualsTo extends undefined ? number : TEqualsTo : TEqualsTo extends undefined ? number | undefined : TEqualsTo | undefined : S extends IBooleanSchemaBuilder<infer TRequired, infer TNullable, infer TEqualsTo> ? TRequired extends true ? TEqualsTo extends undefined ? boolean : TEqualsTo : TEqualsTo extends undefined ? boolean | undefined : TEqualsTo | undefined : S extends IStringSchemaBuilder<infer TRequired, infer TNullable, infer TMinLength, infer TMaxLength, infer TEqualsTo> ? TRequired extends true ? TEqualsTo extends undefined ? string : TEqualsTo : TEqualsTo extends undefined ? string | undefined : TEqualsTo | undefined : S extends IUnionSchemaBuilder<infer TRequired, infer TNullable, infer TVariants> ? TRequired extends true ? InferType<TVariants> : InferType<TVariants> | undefined : S extends IArraySchemaBuilder<infer TRequired, infer TNullable, infer TOfType, infer TMaxLength, infer TMinLength> ? TRequired extends true ? TOfType extends undefined ? any[] : InferType<TOfType>[] : TOfType extends undefined ? any[] | undefined : InferType<TOfType>[] | undefined : S extends IFunctionSchemaBuilder<infer TRequired, infer TNullable, infer TMapToType> ? TMapToType extends undefined ? TRequired extends true ? Function : Function | undefined : TRequired extends true ? TMapToType : TMapToType | undefined : S extends StringSchema ? S['equals'] extends undefined ? string : S['equals'] : S extends NumberSchema ? S['equals'] extends undefined ? number : S['equals'] : S extends ObjectSchema<infer K> ? OptionalPropertiesOf<K> extends never ? {
|
|
211
212
|
[k in keyof K]: InferType<K[k]>;
|
|
212
213
|
} : MakePropOptional<{
|
|
213
214
|
[k in keyof K]: InferType<K[k]>;
|
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",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"build": "tsc"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@cleverbrush/deep": "1.0.0-beta.
|
|
26
|
+
"@cleverbrush/deep": "1.0.0-beta.5"
|
|
27
27
|
},
|
|
28
28
|
"types": "./dist/index.d.ts"
|
|
29
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
|