typebad 1.0.3 → 1.1.0

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 iconshot
3
+ Copyright (c) 2026 iconshot
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,21 +1,33 @@
1
- export type InputType<T> = T extends Type<infer U> ? U : never;
2
- export type InputSchema<T extends TypeSchema> = Simplify<{
3
- [K in keyof T as undefined extends InputType<T[K]> ? never : unknown extends InputType<T[K]> ? never : K]: InputType<T[K]>;
4
- } & {
5
- [K in keyof T as undefined extends InputType<T[K]> ? unknown extends InputType<T[K]> ? never : K : never]?: InputType<T[K]>;
6
- }>;
1
+ export type TypeInternal<T> = T extends Type<infer U> ? U : never;
2
+ export type TypeInternalSchema<T extends TypeSchema> = {
3
+ [K in keyof T]: TypeInternal<T[K]>;
4
+ } & {};
5
+ export type TypeSchema = Record<string, Type<any>>;
6
+ export type ConstType<T> = T & {
7
+ __const: true;
8
+ };
7
9
  type Simplify<T> = {
8
10
  [K in keyof T]: T[K];
9
11
  } & {};
10
- export type TypeSchema = Record<string, Type<any>>;
11
12
  type IsTuple<T> = T extends readonly any[] ? number extends T["length"] ? false : true : false;
12
- export type OutputValue<T> = T extends undefined ? OutputValue<Exclude<T, undefined>> : T extends Date ? Date : IsTuple<T> extends true ? {
13
- [K in keyof T]: OutputValue<T[K]>;
14
- } : T extends (infer U)[] ? OutputValue<U>[] : T extends Record<string, any> ? {
15
- [K in keyof T]-?: OutputValue<T[K]>;
13
+ export type TypeInput<T> = T extends Type<infer U> ? TypeInputValue<U> : never;
14
+ export type TypeInputValue<T> = T extends ConstType<infer U> ? U : IsTuple<T> extends true ? {
15
+ [K in keyof T]: TypeInputValue<T[K]>;
16
+ } : T extends (infer U)[] ? TypeInputValue<U>[] : T extends object ? TypeInputObject<T> : T;
17
+ export type TypeInputObject<T> = Simplify<{
18
+ [K in keyof T as undefined extends TypeInputValue<T[K]> ? never : unknown extends TypeInputValue<T[K]> ? never : K]: TypeInputValue<T[K]>;
19
+ } & {
20
+ [K in keyof T as undefined extends TypeInputValue<T[K]> ? unknown extends TypeInputValue<T[K]> ? never : K : never]?: TypeInputValue<T[K]>;
21
+ }>;
22
+ export type TypeOutput<T extends Type<any>> = TypeOutputValue<TypeInternal<T>>;
23
+ export type TypeOutputValue<T> = T extends undefined ? TypeOutputValue<Exclude<T, undefined>> : T extends ConstType<infer U> ? U : IsTuple<T> extends true ? {
24
+ [K in keyof T]: TypeOutputValue<T[K]>;
25
+ } : T extends (infer U)[] ? TypeOutputValue<U>[] : T extends object ? {
26
+ [K in keyof T]: TypeOutputValue<T[K]>;
16
27
  } : T;
17
- type ExtendedValue<T> = T extends Date ? Date : T extends any[] ? any[] : T extends Record<string, any> ? Record<string, any> : T;
18
- export type OutputType<T extends Type<any>> = OutputValue<InputType<T>>;
28
+ type ExtendedValue<T> = T extends ConstType<infer U> ? U : IsTuple<T> extends true ? {
29
+ [K in keyof T]: any;
30
+ } : T extends any[] ? any[] : T extends object ? Record<string, any> : T;
19
31
  export interface ParseOptions {
20
32
  allowUnknownProperties: boolean;
21
33
  }
@@ -31,14 +43,14 @@ export declare class Type<T> {
31
43
  static match<T>(matcher: (value: any) => boolean): Type<T>;
32
44
  static enum<const V extends readonly (string | number | boolean)[]>(values: V): Type<V[number]>;
33
45
  static value<const V extends string | number | boolean>(value: V): Type<V | undefined>;
34
- static array<T extends Type<any>>(elementType: T): Type<InputType<T>[]>;
35
- static object<S extends TypeSchema>(schema: S): Type<InputSchema<S>>;
36
- static union<U extends Type<any>[]>(types: U): Type<InputType<U[number]>>;
46
+ static array<T extends Type<any>>(elementType: T): Type<TypeInternal<T>[]>;
47
+ static object<S extends TypeSchema>(schema: S): Type<TypeInternalSchema<S>>;
48
+ static union<U extends Type<any>[]>(types: U): Type<TypeInternal<U[number]>>;
37
49
  static tuple<const U extends Type<any>[]>(types: U): Type<{
38
- [K in keyof U]: InputType<U[K]>;
50
+ [K in keyof U]: TypeInternal<U[K]>;
39
51
  }>;
40
52
  static lazy<T extends Type<any>>(callback: () => T): T;
41
- static parse<T extends Type<any>>(type: T, value: InputType<T>, options?: Partial<ParseOptions>): OutputType<T>;
53
+ static parse<T extends Type<any>>(type: T, value: TypeInput<T>, options?: Partial<ParseOptions>): TypeOutput<T>;
42
54
  private static getValueError;
43
55
  private static getUnknownPropertyError;
44
56
  private static getMissingPropertyError;
@@ -47,6 +59,6 @@ export declare class Type<T> {
47
59
  static readonly Number: Type<number>;
48
60
  static readonly Integer: Type<number>;
49
61
  static readonly Float: Type<number>;
50
- static readonly Date: Type<Date>;
62
+ static readonly Date: Type<ConstType<Date>>;
51
63
  }
52
64
  export {};
@@ -1,21 +1,33 @@
1
- export type InputType<T> = T extends Type<infer U> ? U : never;
2
- export type InputSchema<T extends TypeSchema> = Simplify<{
3
- [K in keyof T as undefined extends InputType<T[K]> ? never : unknown extends InputType<T[K]> ? never : K]: InputType<T[K]>;
4
- } & {
5
- [K in keyof T as undefined extends InputType<T[K]> ? unknown extends InputType<T[K]> ? never : K : never]?: InputType<T[K]>;
6
- }>;
1
+ export type TypeInternal<T> = T extends Type<infer U> ? U : never;
2
+ export type TypeInternalSchema<T extends TypeSchema> = {
3
+ [K in keyof T]: TypeInternal<T[K]>;
4
+ } & {};
5
+ export type TypeSchema = Record<string, Type<any>>;
6
+ export type ConstType<T> = T & {
7
+ __const: true;
8
+ };
7
9
  type Simplify<T> = {
8
10
  [K in keyof T]: T[K];
9
11
  } & {};
10
- export type TypeSchema = Record<string, Type<any>>;
11
12
  type IsTuple<T> = T extends readonly any[] ? number extends T["length"] ? false : true : false;
12
- export type OutputValue<T> = T extends undefined ? OutputValue<Exclude<T, undefined>> : T extends Date ? Date : IsTuple<T> extends true ? {
13
- [K in keyof T]: OutputValue<T[K]>;
14
- } : T extends (infer U)[] ? OutputValue<U>[] : T extends Record<string, any> ? {
15
- [K in keyof T]-?: OutputValue<T[K]>;
13
+ export type TypeInput<T> = T extends Type<infer U> ? TypeInputValue<U> : never;
14
+ export type TypeInputValue<T> = T extends ConstType<infer U> ? U : IsTuple<T> extends true ? {
15
+ [K in keyof T]: TypeInputValue<T[K]>;
16
+ } : T extends (infer U)[] ? TypeInputValue<U>[] : T extends object ? TypeInputObject<T> : T;
17
+ export type TypeInputObject<T> = Simplify<{
18
+ [K in keyof T as undefined extends TypeInputValue<T[K]> ? never : unknown extends TypeInputValue<T[K]> ? never : K]: TypeInputValue<T[K]>;
19
+ } & {
20
+ [K in keyof T as undefined extends TypeInputValue<T[K]> ? unknown extends TypeInputValue<T[K]> ? never : K : never]?: TypeInputValue<T[K]>;
21
+ }>;
22
+ export type TypeOutput<T extends Type<any>> = TypeOutputValue<TypeInternal<T>>;
23
+ export type TypeOutputValue<T> = T extends undefined ? TypeOutputValue<Exclude<T, undefined>> : T extends ConstType<infer U> ? U : IsTuple<T> extends true ? {
24
+ [K in keyof T]: TypeOutputValue<T[K]>;
25
+ } : T extends (infer U)[] ? TypeOutputValue<U>[] : T extends object ? {
26
+ [K in keyof T]: TypeOutputValue<T[K]>;
16
27
  } : T;
17
- type ExtendedValue<T> = T extends Date ? Date : T extends any[] ? any[] : T extends Record<string, any> ? Record<string, any> : T;
18
- export type OutputType<T extends Type<any>> = OutputValue<InputType<T>>;
28
+ type ExtendedValue<T> = T extends ConstType<infer U> ? U : IsTuple<T> extends true ? {
29
+ [K in keyof T]: any;
30
+ } : T extends any[] ? any[] : T extends object ? Record<string, any> : T;
19
31
  export interface ParseOptions {
20
32
  allowUnknownProperties: boolean;
21
33
  }
@@ -31,14 +43,14 @@ export declare class Type<T> {
31
43
  static match<T>(matcher: (value: any) => boolean): Type<T>;
32
44
  static enum<const V extends readonly (string | number | boolean)[]>(values: V): Type<V[number]>;
33
45
  static value<const V extends string | number | boolean>(value: V): Type<V | undefined>;
34
- static array<T extends Type<any>>(elementType: T): Type<InputType<T>[]>;
35
- static object<S extends TypeSchema>(schema: S): Type<InputSchema<S>>;
36
- static union<U extends Type<any>[]>(types: U): Type<InputType<U[number]>>;
46
+ static array<T extends Type<any>>(elementType: T): Type<TypeInternal<T>[]>;
47
+ static object<S extends TypeSchema>(schema: S): Type<TypeInternalSchema<S>>;
48
+ static union<U extends Type<any>[]>(types: U): Type<TypeInternal<U[number]>>;
37
49
  static tuple<const U extends Type<any>[]>(types: U): Type<{
38
- [K in keyof U]: InputType<U[K]>;
50
+ [K in keyof U]: TypeInternal<U[K]>;
39
51
  }>;
40
52
  static lazy<T extends Type<any>>(callback: () => T): T;
41
- static parse<T extends Type<any>>(type: T, value: InputType<T>, options?: Partial<ParseOptions>): OutputType<T>;
53
+ static parse<T extends Type<any>>(type: T, value: TypeInput<T>, options?: Partial<ParseOptions>): TypeOutput<T>;
42
54
  private static getValueError;
43
55
  private static getUnknownPropertyError;
44
56
  private static getMissingPropertyError;
@@ -47,6 +59,6 @@ export declare class Type<T> {
47
59
  static readonly Number: Type<number>;
48
60
  static readonly Integer: Type<number>;
49
61
  static readonly Float: Type<number>;
50
- static readonly Date: Type<Date>;
62
+ static readonly Date: Type<ConstType<Date>>;
51
63
  }
52
64
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typebad",
3
- "version": "1.0.3",
3
+ "version": "1.1.0",
4
4
  "description": "Efficient type validator for complex structures.",
5
5
  "repository": {
6
6
  "type": "git",