@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.
@@ -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
- static create<TRequired extends boolean = true, TNullable extends boolean = false>(obj?: {
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;
@@ -13,6 +13,9 @@ class FunctionSchemaBuilder extends SchemaBuilder_js_1.SchemaBuilder {
13
13
  clone() {
14
14
  return FunctionSchemaBuilder.create(this._schema);
15
15
  }
16
+ mapToType() {
17
+ return this;
18
+ }
16
19
  static create(obj) {
17
20
  return new FunctionSchemaBuilder(obj);
18
21
  }
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
- ] ? IFunctionSchemaBuilder<TRequired, TNullable> : IFunctionSchemaBuilder : TSchema : TSchema;
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.4",
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.4"
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 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