@nmtjs/type 0.5.3 → 0.6.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.
Files changed (59) hide show
  1. package/dist/compiler.js +16 -79
  2. package/dist/compiler.js.map +1 -1
  3. package/dist/index.js +30 -54
  4. package/dist/index.js.map +1 -1
  5. package/dist/inference.js +1 -0
  6. package/dist/inference.js.map +1 -0
  7. package/dist/parse.js +145 -0
  8. package/dist/parse.js.map +1 -0
  9. package/dist/runtime.js +73 -0
  10. package/dist/runtime.js.map +1 -0
  11. package/dist/schemas/default.js +6 -0
  12. package/dist/schemas/default.js.map +1 -0
  13. package/dist/schemas/discriminated-union.js.map +1 -1
  14. package/dist/schemas/nullable.js.map +1 -1
  15. package/dist/temporal.js.map +1 -1
  16. package/dist/types/any.js.map +1 -1
  17. package/dist/types/array.js +1 -1
  18. package/dist/types/array.js.map +1 -1
  19. package/dist/types/base.js +4 -16
  20. package/dist/types/base.js.map +1 -1
  21. package/dist/types/boolean.js.map +1 -1
  22. package/dist/types/custom.js.map +1 -1
  23. package/dist/types/date.js +9 -1
  24. package/dist/types/date.js.map +1 -1
  25. package/dist/types/enum.js +6 -2
  26. package/dist/types/enum.js.map +1 -1
  27. package/dist/types/literal.js +3 -1
  28. package/dist/types/literal.js.map +1 -1
  29. package/dist/types/never.js.map +1 -1
  30. package/dist/types/number.js +2 -0
  31. package/dist/types/number.js.map +1 -1
  32. package/dist/types/object.js +32 -1
  33. package/dist/types/object.js.map +1 -1
  34. package/dist/types/string.js.map +1 -1
  35. package/dist/types/union.js +9 -5
  36. package/dist/types/union.js.map +1 -1
  37. package/package.json +8 -8
  38. package/src/compiler.ts +36 -121
  39. package/src/index.ts +36 -119
  40. package/src/inference.ts +128 -0
  41. package/src/parse.ts +217 -0
  42. package/src/runtime.ts +137 -0
  43. package/src/schemas/default.ts +12 -0
  44. package/src/schemas/discriminated-union.ts +1 -1
  45. package/src/schemas/nullable.ts +0 -6
  46. package/src/temporal.ts +0 -1
  47. package/src/types/any.ts +2 -4
  48. package/src/types/array.ts +1 -12
  49. package/src/types/base.ts +45 -144
  50. package/src/types/boolean.ts +3 -10
  51. package/src/types/custom.ts +14 -13
  52. package/src/types/date.ts +13 -1
  53. package/src/types/enum.ts +12 -15
  54. package/src/types/literal.ts +3 -5
  55. package/src/types/never.ts +2 -4
  56. package/src/types/number.ts +18 -18
  57. package/src/types/object.ts +108 -43
  58. package/src/types/string.ts +8 -5
  59. package/src/types/union.ts +43 -78
@@ -2,7 +2,7 @@ import { Type } from '@sinclair/typebox';
2
2
  import { BaseType } from "./base.js";
3
3
  export class ArrayType extends BaseType {
4
4
  static factory(element, options = {}) {
5
- return new ArrayType(Type.Array(element.final, options));
5
+ return new ArrayType(Type.Array(element.schema, options));
6
6
  }
7
7
  min(value) {
8
8
  return ArrayType.factory(this.props.element, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/array.ts"],"sourcesContent":["import {\n type ArrayOptions,\n type StaticDecode,\n type TArray,\n Type,\n} from '@sinclair/typebox'\nimport { BaseType } from './base.ts'\n\nexport class ArrayType<T extends BaseType = BaseType> extends BaseType<\n TArray<T['schema']>,\n { element: T; options: ArrayOptions }\n> {\n declare _: {\n encoded: {\n input: TArray<T['_']['encoded']['input']>\n output: TArray<T['_']['encoded']['output']>\n }\n decoded: {\n input: TArray<T['_']['decoded']['input']>\n output: TArray<T['_']['decoded']['output']>\n }\n }\n\n static factory<T extends BaseType>(element: T, options: ArrayOptions = {}) {\n return new ArrayType<T>(Type.Array(element.final, options))\n }\n\n min(value: number) {\n return ArrayType.factory(this.props.element, {\n ...this.props.options,\n minItems: value,\n })\n }\n\n max(value: number) {\n return ArrayType.factory(this.props.element, {\n ...this.props.options,\n maxItems: value,\n })\n }\n\n length(value: number) {\n return ArrayType.factory(this.props.element, {\n ...this.props.options,\n minItems: value,\n maxItems: value,\n })\n }\n}\n"],"names":["Type","BaseType","ArrayType","factory","element","options","Array","final","min","value","props","minItems","max","maxItems","length"],"mappings":"AAAA,SAIEA,IAAI,QACC,oBAAmB;AAC1B,SAASC,QAAQ,QAAQ,YAAW;AAEpC,OAAO,MAAMC,kBAAiDD;IAe5D,OAAOE,QAA4BC,OAAU,EAAEC,UAAwB,CAAC,CAAC,EAAE;QACzE,OAAO,IAAIH,UAAaF,KAAKM,KAAK,CAACF,QAAQG,KAAK,EAAEF;IACpD;IAEAG,IAAIC,KAAa,EAAE;QACjB,OAAOP,UAAUC,OAAO,CAAC,IAAI,CAACO,KAAK,CAACN,OAAO,EAAE;YAC3C,GAAG,IAAI,CAACM,KAAK,CAACL,OAAO;YACrBM,UAAUF;QACZ;IACF;IAEAG,IAAIH,KAAa,EAAE;QACjB,OAAOP,UAAUC,OAAO,CAAC,IAAI,CAACO,KAAK,CAACN,OAAO,EAAE;YAC3C,GAAG,IAAI,CAACM,KAAK,CAACL,OAAO;YACrBQ,UAAUJ;QACZ;IACF;IAEAK,OAAOL,KAAa,EAAE;QACpB,OAAOP,UAAUC,OAAO,CAAC,IAAI,CAACO,KAAK,CAACN,OAAO,EAAE;YAC3C,GAAG,IAAI,CAACM,KAAK,CAACL,OAAO;YACrBM,UAAUF;YACVI,UAAUJ;QACZ;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/types/array.ts"],"sourcesContent":["import {\n type ArrayOptions,\n type StaticDecode,\n type TArray,\n Type,\n} from '@sinclair/typebox'\nimport { BaseType } from './base.ts'\n\nexport class ArrayType<T extends BaseType = BaseType> extends BaseType<\n TArray<T['schema']>,\n { element: T; options: ArrayOptions }\n> {\n static factory<T extends BaseType>(element: T, options: ArrayOptions = {}) {\n return new ArrayType<T>(Type.Array(element.schema, options))\n }\n\n min(value: number) {\n return ArrayType.factory(this.props.element, {\n ...this.props.options,\n minItems: value,\n })\n }\n\n max(value: number) {\n return ArrayType.factory(this.props.element, {\n ...this.props.options,\n maxItems: value,\n })\n }\n\n length(value: number) {\n return ArrayType.factory(this.props.element, {\n ...this.props.options,\n minItems: value,\n maxItems: value,\n })\n }\n}\n"],"names":["Type","BaseType","ArrayType","factory","element","options","Array","schema","min","value","props","minItems","max","maxItems","length"],"mappings":"AAAA,SAIEA,IAAI,QACC,oBAAmB;AAC1B,SAASC,QAAQ,QAAQ,YAAW;AAEpC,OAAO,MAAMC,kBAAiDD;IAI5D,OAAOE,QAA4BC,OAAU,EAAEC,UAAwB,CAAC,CAAC,EAAE;QACzE,OAAO,IAAIH,UAAaF,KAAKM,KAAK,CAACF,QAAQG,MAAM,EAAEF;IACrD;IAEAG,IAAIC,KAAa,EAAE;QACjB,OAAOP,UAAUC,OAAO,CAAC,IAAI,CAACO,KAAK,CAACN,OAAO,EAAE;YAC3C,GAAG,IAAI,CAACM,KAAK,CAACL,OAAO;YACrBM,UAAUF;QACZ;IACF;IAEAG,IAAIH,KAAa,EAAE;QACjB,OAAOP,UAAUC,OAAO,CAAC,IAAI,CAACO,KAAK,CAACN,OAAO,EAAE;YAC3C,GAAG,IAAI,CAACM,KAAK,CAACL,OAAO;YACrBQ,UAAUJ;QACZ;IACF;IAEAK,OAAOL,KAAa,EAAE;QACpB,OAAOP,UAAUC,OAAO,CAAC,IAAI,CAACO,KAAK,CAACN,OAAO,EAAE;YAC3C,GAAG,IAAI,CAACM,KAAK,CAACL,OAAO;YACrBM,UAAUF;YACVI,UAAUJ;QACZ;IACF;AACF"}
@@ -1,19 +1,13 @@
1
1
  import { Optional } from '@sinclair/typebox';
2
+ import { Default } from "../schemas/default.js";
2
3
  import { Nullable } from "../schemas/nullable.js";
3
4
  export class BaseType {
4
5
  schema;
5
- final;
6
6
  props;
7
7
  params;
8
8
  constructor(schema, props = {}, params = {}){
9
9
  const { hasDefault = false, nullable = false, optional = false } = params;
10
10
  this.schema = schema;
11
- this.final = schema;
12
- if (nullable) this.final = Nullable({
13
- ...this.final,
14
- default: this.final.default ?? null
15
- });
16
- if (optional || hasDefault) this.final = Optional(this.final);
17
11
  this.props = props;
18
12
  this.params = {
19
13
  hasDefault,
@@ -49,9 +43,8 @@ export class BaseType {
49
43
  }
50
44
  }
51
45
  export class OptionalType extends BaseType {
52
- _;
53
46
  static factory(type) {
54
- return new OptionalType(type.schema, {
47
+ return new OptionalType(Optional(type.schema), {
55
48
  inner: type
56
49
  }, {
57
50
  ...type.params,
@@ -60,9 +53,8 @@ export class OptionalType extends BaseType {
60
53
  }
61
54
  }
62
55
  export class NullableType extends BaseType {
63
- _;
64
56
  static factory(type) {
65
- return new NullableType(type.schema, {
57
+ return new NullableType(Nullable(type.schema), {
66
58
  inner: type
67
59
  }, {
68
60
  ...type.params,
@@ -71,12 +63,8 @@ export class NullableType extends BaseType {
71
63
  }
72
64
  }
73
65
  export class DefaultType extends BaseType {
74
- _;
75
66
  static factory(type, defaultValue) {
76
- return new DefaultType({
77
- ...type.schema,
78
- default: defaultValue
79
- }, {
67
+ return new DefaultType(Default(Optional(type.schema), defaultValue), {
80
68
  inner: type
81
69
  }, {
82
70
  ...type.params,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/base.ts"],"sourcesContent":["import {\n Optional,\n type SchemaOptions,\n type StaticDecode,\n type StaticEncode,\n type TSchema,\n} from '@sinclair/typebox'\nimport {\n Nullable,\n type TNullable,\n type TOptionalUndefined,\n} from '../schemas/nullable.ts'\nimport type { Merge } from '../utils.ts'\n\nexport type TypeProps = Record<string, any>\n\nexport type TypeParams = {\n optional?: boolean\n nullable?: boolean\n hasDefault?: boolean\n encode?: (value: any) => any\n}\n\nexport type DefaultTypeParams = {\n optional: false\n nullable: false\n hasDefault: false\n encode?: TypeParams['encode']\n}\n\nexport type BaseTypeAny<T extends TSchema = TSchema> = BaseType<T, any, any>\n\ntype ResolveNullable<\n T extends TSchema,\n P extends TypeParams,\n> = P['nullable'] extends true\n ? T extends TNullable<infer S>\n ? TNullable<S>\n : TNullable<T>\n : T\n\ntype ResolveOptional<\n T extends TSchema,\n P extends TypeParams,\n> = P['optional'] extends true\n ? T extends TOptionalUndefined<infer S>\n ? TOptionalUndefined<S>\n : TOptionalUndefined<T>\n : T\n\ntype ResolveDefault<\n T extends TSchema,\n P extends TypeParams,\n> = P['hasDefault'] extends true\n ? T extends TOptionalUndefined<infer U>\n ? U\n : T\n : T\n\nexport abstract class BaseType<\n Schema extends TSchema = TSchema,\n Props extends TypeProps = TypeProps,\n Params extends TypeParams = DefaultTypeParams,\n> {\n abstract _: {\n encoded: {\n input: TSchema\n output: TSchema\n }\n decoded: {\n input: TSchema\n output: TSchema\n }\n }\n\n readonly schema: Schema\n readonly final: TSchema\n readonly props: Props\n readonly params: Params\n\n constructor(\n schema: Schema,\n props: Props = {} as Props,\n params: Params = {} as Params,\n ) {\n const { hasDefault = false, nullable = false, optional = false } = params\n this.schema = schema\n this.final = schema\n\n if (nullable)\n this.final = Nullable({\n ...this.final,\n default: this.final.default ?? null,\n }) as any\n if (optional || hasDefault) this.final = Optional(this.final) as any\n\n this.props = props\n this.params = {\n hasDefault,\n nullable,\n optional,\n } as Params\n }\n\n optional(): OptionalType<this> {\n return OptionalType.factory(this) as any\n }\n\n nullable(): NullableType<this> {\n return NullableType.factory(this) as any\n }\n\n nullish() {\n return this.nullable().optional()\n }\n\n default(\n value: StaticDecode<this['_']['decoded']['output']>,\n ): DefaultType<this> {\n return DefaultType.factory(\n this,\n this.params.encode?.(value) ?? value,\n ) as any\n }\n\n description(description: string): this {\n const ThisConstructor = this.constructor as any\n return new ThisConstructor(\n {\n ...this.schema,\n description,\n },\n this.props,\n this.params,\n ) as any\n }\n\n examples(...examples: any[]): this {\n const ThisConstructor = this.constructor as any\n return new ThisConstructor(\n {\n ...this.schema,\n examples,\n },\n this.props,\n this.params,\n ) as any\n }\n}\n\nexport type ConstantType<T extends TSchema> = {\n encoded: {\n input: T\n output: T\n }\n decoded: {\n input: T\n output: T\n }\n}\n\nexport type Static<\n T extends BaseTypeAny,\n P extends TypeProps,\n Params extends Merge<T['params'], P> = Merge<T['params'], P>,\n> = {\n encoded: {\n input: ResolveOptional<\n ResolveNullable<T['_']['encoded']['input'], Params>,\n Params\n >\n output: ResolveDefault<\n ResolveOptional<\n ResolveNullable<T['_']['encoded']['output'], Params>,\n Params\n >,\n Params\n >\n }\n decoded: {\n input: ResolveOptional<\n ResolveNullable<T['_']['decoded']['input'], Params>,\n Params\n >\n output: ResolveDefault<\n ResolveOptional<\n ResolveNullable<T['_']['decoded']['output'], Params>,\n Params\n >,\n Params\n >\n }\n}\n\nexport class OptionalType<\n Type extends BaseTypeAny<any>,\n Params extends TypeParams = DefaultTypeParams,\n> extends BaseType<Type['schema'], { inner: Type }, Params> {\n _!: Static<Type, Params>\n\n static factory<T extends BaseTypeAny<any>>(type: T) {\n return new OptionalType<T, Merge<T['params'], { optional: true }>>(\n type.schema,\n { inner: type },\n { ...type.params, optional: true } as any,\n )\n }\n}\n\nexport class NullableType<\n Type extends BaseTypeAny<any>,\n Params extends TypeParams = DefaultTypeParams,\n> extends BaseType<Type['schema'], { inner: Type }, Params> {\n _!: Static<Type, Params>\n\n static factory<T extends BaseTypeAny<any>>(type: T) {\n return new NullableType<T, Merge<T['params'], { nullable: true }>>(\n type.schema,\n { inner: type },\n { ...type.params, nullable: true } as any,\n )\n }\n}\n\nexport class DefaultType<\n Type extends BaseTypeAny<any>,\n Params extends TypeParams = DefaultTypeParams,\n> extends BaseType<Type['schema'], { inner: Type }, Params> {\n _!: Static<Type, Params>\n\n static factory<T extends BaseTypeAny<any>>(type: T, defaultValue: any) {\n return new DefaultType<T, Merge<T['params'], { hasDefault: true }>>(\n { ...type.schema, default: defaultValue },\n { inner: type },\n { ...type.params, hasDefault: true } as any,\n )\n }\n}\n"],"names":["Optional","Nullable","BaseType","schema","final","props","params","constructor","hasDefault","nullable","optional","default","OptionalType","factory","NullableType","nullish","value","DefaultType","encode","description","ThisConstructor","examples","_","type","inner","defaultValue"],"mappings":"AAAA,SACEA,QAAQ,QAKH,oBAAmB;AAC1B,SACEC,QAAQ,QAGH,yBAAwB;AAgD/B,OAAO,MAAeC;IAgBXC,OAAc;IACdC,MAAc;IACdC,MAAY;IACZC,OAAc;IAEvBC,YACEJ,MAAc,EACdE,QAAe,CAAC,CAAU,EAC1BC,SAAiB,CAAC,CAAW,CAC7B;QACA,MAAM,EAAEE,aAAa,KAAK,EAAEC,WAAW,KAAK,EAAEC,WAAW,KAAK,EAAE,GAAGJ;QACnE,IAAI,CAACH,MAAM,GAAGA;QACd,IAAI,CAACC,KAAK,GAAGD;QAEb,IAAIM,UACF,IAAI,CAACL,KAAK,GAAGH,SAAS;YACpB,GAAG,IAAI,CAACG,KAAK;YACbO,SAAS,IAAI,CAACP,KAAK,CAACO,OAAO,IAAI;QACjC;QACF,IAAID,YAAYF,YAAY,IAAI,CAACJ,KAAK,GAAGJ,SAAS,IAAI,CAACI,KAAK;QAE5D,IAAI,CAACC,KAAK,GAAGA;QACb,IAAI,CAACC,MAAM,GAAG;YACZE;YACAC;YACAC;QACF;IACF;IAEAA,WAA+B;QAC7B,OAAOE,aAAaC,OAAO,CAAC,IAAI;IAClC;IAEAJ,WAA+B;QAC7B,OAAOK,aAAaD,OAAO,CAAC,IAAI;IAClC;IAEAE,UAAU;QACR,OAAO,IAAI,CAACN,QAAQ,GAAGC,QAAQ;IACjC;IAEAC,QACEK,KAAmD,EAChC;QACnB,OAAOC,YAAYJ,OAAO,CACxB,IAAI,EACJ,IAAI,CAACP,MAAM,CAACY,MAAM,GAAGF,UAAUA;IAEnC;IAEAG,YAAYA,WAAmB,EAAQ;QACrC,MAAMC,kBAAkB,IAAI,CAACb,WAAW;QACxC,OAAO,IAAIa,gBACT;YACE,GAAG,IAAI,CAACjB,MAAM;YACdgB;QACF,GACA,IAAI,CAACd,KAAK,EACV,IAAI,CAACC,MAAM;IAEf;IAEAe,SAAS,GAAGA,QAAe,EAAQ;QACjC,MAAMD,kBAAkB,IAAI,CAACb,WAAW;QACxC,OAAO,IAAIa,gBACT;YACE,GAAG,IAAI,CAACjB,MAAM;YACdkB;QACF,GACA,IAAI,CAAChB,KAAK,EACV,IAAI,CAACC,MAAM;IAEf;AACF;AA8CA,OAAO,MAAMM,qBAGHV;IACRoB,EAAwB;IAExB,OAAOT,QAAoCU,IAAO,EAAE;QAClD,OAAO,IAAIX,aACTW,KAAKpB,MAAM,EACX;YAAEqB,OAAOD;QAAK,GACd;YAAE,GAAGA,KAAKjB,MAAM;YAAEI,UAAU;QAAK;IAErC;AACF;AAEA,OAAO,MAAMI,qBAGHZ;IACRoB,EAAwB;IAExB,OAAOT,QAAoCU,IAAO,EAAE;QAClD,OAAO,IAAIT,aACTS,KAAKpB,MAAM,EACX;YAAEqB,OAAOD;QAAK,GACd;YAAE,GAAGA,KAAKjB,MAAM;YAAEG,UAAU;QAAK;IAErC;AACF;AAEA,OAAO,MAAMQ,oBAGHf;IACRoB,EAAwB;IAExB,OAAOT,QAAoCU,IAAO,EAAEE,YAAiB,EAAE;QACrE,OAAO,IAAIR,YACT;YAAE,GAAGM,KAAKpB,MAAM;YAAEQ,SAASc;QAAa,GACxC;YAAED,OAAOD;QAAK,GACd;YAAE,GAAGA,KAAKjB,MAAM;YAAEE,YAAY;QAAK;IAEvC;AACF"}
1
+ {"version":3,"sources":["../../../src/types/base.ts"],"sourcesContent":["import { Optional, type TOptional, type TSchema } from '@sinclair/typebox'\nimport { Default, type TDefault } from '../schemas/default.ts'\nimport { Nullable, type TNullable } from '../schemas/nullable.ts'\n\nexport type TypeProps = Record<string, any>\n\nexport type TypeParams = {\n optional?: boolean\n nullable?: boolean\n hasDefault?: boolean\n encode?: (value: any) => any\n}\n\nexport type DefaultTypeParams = {\n optional: false\n nullable: false\n hasDefault: false\n encode?: TypeParams['encode']\n}\n\nexport type BaseTypeAny<T extends TSchema = TSchema> = BaseType<\n T,\n TypeProps,\n any\n>\n\nexport abstract class BaseType<\n Schema extends TSchema = TSchema,\n Props extends TypeProps = TypeProps,\n ValueType = unknown,\n> {\n readonly schema: Schema\n readonly props: Props\n readonly params: TypeParams\n\n constructor(\n schema: Schema,\n props: Props = {} as Props,\n params: TypeParams = {} as TypeParams,\n ) {\n const { hasDefault = false, nullable = false, optional = false } = params\n this.schema = schema\n\n this.props = props\n this.params = {\n hasDefault,\n nullable,\n optional,\n } as TypeParams\n }\n\n optional(): OptionalType<BaseType<Schema, Props>, ValueType> {\n return OptionalType.factory(this) as any\n }\n\n nullable(): NullableType<BaseType<Schema, Props>, ValueType> {\n return NullableType.factory(this) as any\n }\n\n nullish() {\n return this.nullable().optional()\n }\n\n default(value: ValueType): DefaultType<BaseType<Schema, Props>, ValueType> {\n return DefaultType.factory(\n this,\n this.params.encode?.(value) ?? value,\n ) as any\n }\n\n description(description: string): BaseType<Schema, Props, ValueType> {\n const ThisConstructor = this.constructor as any\n return new ThisConstructor(\n {\n ...this.schema,\n description,\n },\n this.props,\n this.params,\n ) as any\n }\n\n examples(...examples: ValueType[]): BaseType<Schema, Props, ValueType> {\n const ThisConstructor = this.constructor as any\n return new ThisConstructor(\n {\n ...this.schema,\n examples,\n },\n this.props,\n this.params,\n ) as any\n }\n}\n\nexport class OptionalType<\n Type extends BaseTypeAny = BaseTypeAny,\n ValueType = unknown,\n> extends BaseType<TOptional<Type['schema']>, { inner: Type }, ValueType> {\n static factory<T extends BaseTypeAny>(type: T) {\n return new OptionalType<T>(Optional(type.schema) as any, { inner: type }, {\n ...type.params,\n optional: true,\n } as any)\n }\n}\n\nexport class NullableType<\n Type extends BaseTypeAny<any> = BaseTypeAny<any>,\n ValueType = unknown,\n> extends BaseType<\n TNullable<Type['schema']>,\n { inner: Type },\n ValueType | null\n> {\n static factory<T extends BaseTypeAny<any>>(type: T) {\n return new NullableType<T>(Nullable(type.schema), { inner: type }, {\n ...type.params,\n nullable: true,\n } as any)\n }\n}\n\nexport class DefaultType<\n Type extends BaseTypeAny = BaseTypeAny,\n ValueType = unknown,\n> extends BaseType<\n TDefault<TOptional<Type['schema']>>,\n { inner: Type },\n ValueType\n> {\n static factory<T extends BaseTypeAny<any>>(type: T, defaultValue: any) {\n return new DefaultType<T>(\n Default(Optional(type.schema), defaultValue) as any,\n { inner: type },\n { ...type.params, hasDefault: true } as any,\n )\n }\n}\n"],"names":["Optional","Default","Nullable","BaseType","schema","props","params","constructor","hasDefault","nullable","optional","OptionalType","factory","NullableType","nullish","default","value","DefaultType","encode","description","ThisConstructor","examples","type","inner","defaultValue"],"mappings":"AAAA,SAASA,QAAQ,QAAsC,oBAAmB;AAC1E,SAASC,OAAO,QAAuB,wBAAuB;AAC9D,SAASC,QAAQ,QAAwB,yBAAwB;AAwBjE,OAAO,MAAeC;IAKXC,OAAc;IACdC,MAAY;IACZC,OAAkB;IAE3BC,YACEH,MAAc,EACdC,QAAe,CAAC,CAAU,EAC1BC,SAAqB,CAAC,CAAe,CACrC;QACA,MAAM,EAAEE,aAAa,KAAK,EAAEC,WAAW,KAAK,EAAEC,WAAW,KAAK,EAAE,GAAGJ;QACnE,IAAI,CAACF,MAAM,GAAGA;QAEd,IAAI,CAACC,KAAK,GAAGA;QACb,IAAI,CAACC,MAAM,GAAG;YACZE;YACAC;YACAC;QACF;IACF;IAEAA,WAA6D;QAC3D,OAAOC,aAAaC,OAAO,CAAC,IAAI;IAClC;IAEAH,WAA6D;QAC3D,OAAOI,aAAaD,OAAO,CAAC,IAAI;IAClC;IAEAE,UAAU;QACR,OAAO,IAAI,CAACL,QAAQ,GAAGC,QAAQ;IACjC;IAEAK,QAAQC,KAAgB,EAAmD;QACzE,OAAOC,YAAYL,OAAO,CACxB,IAAI,EACJ,IAAI,CAACN,MAAM,CAACY,MAAM,GAAGF,UAAUA;IAEnC;IAEAG,YAAYA,WAAmB,EAAsC;QACnE,MAAMC,kBAAkB,IAAI,CAACb,WAAW;QACxC,OAAO,IAAIa,gBACT;YACE,GAAG,IAAI,CAAChB,MAAM;YACde;QACF,GACA,IAAI,CAACd,KAAK,EACV,IAAI,CAACC,MAAM;IAEf;IAEAe,SAAS,GAAGA,QAAqB,EAAsC;QACrE,MAAMD,kBAAkB,IAAI,CAACb,WAAW;QACxC,OAAO,IAAIa,gBACT;YACE,GAAG,IAAI,CAAChB,MAAM;YACdiB;QACF,GACA,IAAI,CAAChB,KAAK,EACV,IAAI,CAACC,MAAM;IAEf;AACF;AAEA,OAAO,MAAMK,qBAGHR;IACR,OAAOS,QAA+BU,IAAO,EAAE;QAC7C,OAAO,IAAIX,aAAgBX,SAASsB,KAAKlB,MAAM,GAAU;YAAEmB,OAAOD;QAAK,GAAG;YACxE,GAAGA,KAAKhB,MAAM;YACdI,UAAU;QACZ;IACF;AACF;AAEA,OAAO,MAAMG,qBAGHV;IAKR,OAAOS,QAAoCU,IAAO,EAAE;QAClD,OAAO,IAAIT,aAAgBX,SAASoB,KAAKlB,MAAM,GAAG;YAAEmB,OAAOD;QAAK,GAAG;YACjE,GAAGA,KAAKhB,MAAM;YACdG,UAAU;QACZ;IACF;AACF;AAEA,OAAO,MAAMQ,oBAGHd;IAKR,OAAOS,QAAoCU,IAAO,EAAEE,YAAiB,EAAE;QACrE,OAAO,IAAIP,YACThB,QAAQD,SAASsB,KAAKlB,MAAM,GAAGoB,eAC/B;YAAED,OAAOD;QAAK,GACd;YAAE,GAAGA,KAAKhB,MAAM;YAAEE,YAAY;QAAK;IAEvC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/boolean.ts"],"sourcesContent":["import {\n type SchemaOptions,\n type StaticDecode,\n type TBoolean,\n Type,\n} from '@sinclair/typebox'\nimport { BaseType, type ConstantType } from './base.ts'\n\nexport class BooleanType extends BaseType<TBoolean> {\n declare _: ConstantType<this['schema']>\n\n static factory() {\n return new BooleanType(Type.Boolean())\n }\n}\n"],"names":["Type","BaseType","BooleanType","factory","Boolean"],"mappings":"AAAA,SAIEA,IAAI,QACC,oBAAmB;AAC1B,SAASC,QAAQ,QAA2B,YAAW;AAEvD,OAAO,MAAMC,oBAAoBD;IAG/B,OAAOE,UAAU;QACf,OAAO,IAAID,YAAYF,KAAKI,OAAO;IACrC;AACF"}
1
+ {"version":3,"sources":["../../../src/types/boolean.ts"],"sourcesContent":["import { type TBoolean, Type } from '@sinclair/typebox'\nimport { BaseType } from './base.ts'\n\nexport class BooleanType extends BaseType<TBoolean, {}, boolean> {\n static factory() {\n return new BooleanType(Type.Boolean())\n }\n}\n"],"names":["Type","BaseType","BooleanType","factory","Boolean"],"mappings":"AAAA,SAAwBA,IAAI,QAAQ,oBAAmB;AACvD,SAASC,QAAQ,QAAQ,YAAW;AAEpC,OAAO,MAAMC,oBAAoBD;IAC/B,OAAOE,UAAU;QACf,OAAO,IAAID,YAAYF,KAAKI,OAAO;IACrC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/custom.ts"],"sourcesContent":["import {\n type TAny,\n type TTransform,\n type TUnsafe,\n Type,\n} from '@sinclair/typebox'\nimport { BaseType, type ConstantType } from './base.ts'\n\nexport type CustomTypeDecode<T> = (value: any) => T\nexport type CustomTypeEncode<T> = (value: T) => any\n\nexport abstract class TransformType<T, S = TAny> extends BaseType<\n TTransform<TUnsafe<S>, T>\n> {\n declare _: ConstantType<this['schema']>\n}\n\nexport class CustomType<T, S = TAny> extends TransformType<T, S> {\n static factory<T, S = TAny>(\n decode: CustomTypeDecode<T>,\n encode: CustomTypeEncode<T>,\n schema = Type.Any() as unknown as TUnsafe<S>,\n ) {\n return new CustomType<T, S>(\n Type.Transform(schema as unknown as TUnsafe<S>)\n .Decode(decode)\n .Encode(encode),\n {},\n { encode } as any,\n )\n }\n}\n"],"names":["Type","BaseType","TransformType","CustomType","factory","decode","encode","schema","Any","Transform","Decode","Encode"],"mappings":"AAAA,SAIEA,IAAI,QACC,oBAAmB;AAC1B,SAASC,QAAQ,QAA2B,YAAW;AAKvD,OAAO,MAAeC,sBAAmCD;AAIzD;AAEA,OAAO,MAAME,mBAAgCD;IAC3C,OAAOE,QACLC,MAA2B,EAC3BC,MAA2B,EAC3BC,SAASP,KAAKQ,GAAG,EAA2B,EAC5C;QACA,OAAO,IAAIL,WACTH,KAAKS,SAAS,CAACF,QACZG,MAAM,CAACL,QACPM,MAAM,CAACL,SACV,CAAC,GACD;YAAEA;QAAO;IAEb;AACF"}
1
+ {"version":3,"sources":["../../../src/types/custom.ts"],"sourcesContent":["import {\n type TAny,\n type TSchema,\n type TTransform,\n Type,\n} from '@sinclair/typebox'\nimport type { StaticInputDecode, StaticOutputDecode } from '../inference.ts'\nimport { BaseType } from './base.ts'\n\nexport type CustomTypeDecode<T> = (value: any) => T\nexport type CustomTypeEncode<T> = (value: T) => any\n\nexport abstract class TransformType<\n T,\n S extends TSchema = TAny,\n> extends BaseType<TTransform<S, T>, {}, StaticInputDecode<TTransform<S, T>>> {}\n\nexport class CustomType<T, S extends TSchema = TAny> extends TransformType<\n T,\n S\n> {\n static factory<T, S extends TSchema = TAny>(\n decode: CustomTypeDecode<T>,\n encode: CustomTypeEncode<T>,\n schema: S = Type.Any() as S,\n ) {\n return new CustomType<T, S>(\n Type.Transform(schema).Decode(decode).Encode(encode),\n {},\n { encode } as any,\n )\n }\n}\n"],"names":["Type","BaseType","TransformType","CustomType","factory","decode","encode","schema","Any","Transform","Decode","Encode"],"mappings":"AAAA,SAIEA,IAAI,QACC,oBAAmB;AAE1B,SAASC,QAAQ,QAAQ,YAAW;AAKpC,OAAO,MAAeC,sBAGZD;AAAqE;AAE/E,OAAO,MAAME,mBAAgDD;IAI3D,OAAOE,QACLC,MAA2B,EAC3BC,MAA2B,EAC3BC,SAAYP,KAAKQ,GAAG,EAAO,EAC3B;QACA,OAAO,IAAIL,WACTH,KAAKS,SAAS,CAACF,QAAQG,MAAM,CAACL,QAAQM,MAAM,CAACL,SAC7C,CAAC,GACD;YAAEA;QAAO;IAEb;AACF"}
@@ -1,8 +1,16 @@
1
+ import { Type } from '@sinclair/typebox';
1
2
  import { CustomType, TransformType } from "./custom.js";
2
3
  const decode = (value)=>new Date(value);
3
4
  const encode = (value)=>value.toISOString();
4
5
  export class DateType extends TransformType {
5
6
  static factory() {
6
- return CustomType.factory(decode, encode);
7
+ return CustomType.factory(decode, encode, Type.Union([
8
+ Type.String({
9
+ format: 'date'
10
+ }),
11
+ Type.String({
12
+ format: 'date-time'
13
+ })
14
+ ]));
7
15
  }
8
16
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/date.ts"],"sourcesContent":["import { CustomType, TransformType } from './custom.ts'\n\nconst decode = (value: any): Date => new Date(value)\nconst encode = (value: Date): any => value.toISOString()\n\nexport class DateType extends TransformType<Date> {\n static factory() {\n return CustomType.factory<Date>(decode, encode)\n }\n}\n"],"names":["CustomType","TransformType","decode","value","Date","encode","toISOString","DateType","factory"],"mappings":"AAAA,SAASA,UAAU,EAAEC,aAAa,QAAQ,cAAa;AAEvD,MAAMC,SAAS,CAACC,QAAqB,IAAIC,KAAKD;AAC9C,MAAME,SAAS,CAACF,QAAqBA,MAAMG,WAAW;AAEtD,OAAO,MAAMC,iBAAiBN;IAC5B,OAAOO,UAAU;QACf,OAAOR,WAAWQ,OAAO,CAAON,QAAQG;IAC1C;AACF"}
1
+ {"version":3,"sources":["../../../src/types/date.ts"],"sourcesContent":["import { type TString, Type } from '@sinclair/typebox'\nimport { CustomType, TransformType } from './custom.ts'\n\nconst decode = (value: any): Date => new Date(value)\nconst encode = (value: Date): any => value.toISOString()\n\nexport class DateType extends TransformType<Date> {\n static factory() {\n return CustomType.factory<Date, TString>(\n decode,\n encode,\n Type.Union([\n Type.String({\n format: 'date',\n }),\n Type.String({\n format: 'date-time',\n }),\n ]) as unknown as TString,\n )\n }\n}\n"],"names":["Type","CustomType","TransformType","decode","value","Date","encode","toISOString","DateType","factory","Union","String","format"],"mappings":"AAAA,SAAuBA,IAAI,QAAQ,oBAAmB;AACtD,SAASC,UAAU,EAAEC,aAAa,QAAQ,cAAa;AAEvD,MAAMC,SAAS,CAACC,QAAqB,IAAIC,KAAKD;AAC9C,MAAME,SAAS,CAACF,QAAqBA,MAAMG,WAAW;AAEtD,OAAO,MAAMC,iBAAiBN;IAC5B,OAAOO,UAAU;QACf,OAAOR,WAAWQ,OAAO,CACvBN,QACAG,QACAN,KAAKU,KAAK,CAAC;YACTV,KAAKW,MAAM,CAAC;gBACVC,QAAQ;YACV;YACAZ,KAAKW,MAAM,CAAC;gBACVC,QAAQ;YACV;SACD;IAEL;AACF"}
@@ -2,7 +2,9 @@ import { Type } from '@sinclair/typebox';
2
2
  import { BaseType } from "./base.js";
3
3
  export class ObjectEnumType extends BaseType {
4
4
  static factory(values) {
5
- return new ObjectEnumType(Type.Enum(values));
5
+ return new ObjectEnumType(Type.Enum(values), {
6
+ values: Object.values(values)
7
+ });
6
8
  }
7
9
  }
8
10
  export class EnumType extends BaseType {
@@ -10,6 +12,8 @@ export class EnumType extends BaseType {
10
12
  return new EnumType(Type.Enum(Object.fromEntries(values.map((v)=>[
11
13
  v,
12
14
  v
13
- ]))));
15
+ ]))), {
16
+ values
17
+ });
14
18
  }
15
19
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/enum.ts"],"sourcesContent":["import {\n Enum,\n type SchemaOptions,\n type StaticDecode,\n type TEnum,\n Type,\n} from '@sinclair/typebox'\nimport { BaseType, type ConstantType } from './base.ts'\n\nexport class ObjectEnumType<\n T extends { [K in string]: K } = { [K in string]: K },\n> extends BaseType<TEnum<T>> {\n declare _: ConstantType<this['schema']>\n\n static factory<T extends { [K in string]: K }>(values: T) {\n return new ObjectEnumType<T>(Type.Enum(values as any))\n }\n}\n\nexport class EnumType<\n T extends (string | number)[] = (string | number)[],\n> extends BaseType<TEnum<Record<string, T[number]>>> {\n declare _: ConstantType<this['schema']>\n\n static factory<T extends (string | number)[]>(values: [...T]) {\n return new EnumType<T>(\n Type.Enum(Object.fromEntries(values.map((v) => [v, v])) as any),\n )\n }\n}\n"],"names":["Type","BaseType","ObjectEnumType","factory","values","Enum","EnumType","Object","fromEntries","map","v"],"mappings":"AAAA,SAKEA,IAAI,QACC,oBAAmB;AAC1B,SAASC,QAAQ,QAA2B,YAAW;AAEvD,OAAO,MAAMC,uBAEHD;IAGR,OAAOE,QAAwCC,MAAS,EAAE;QACxD,OAAO,IAAIF,eAAkBF,KAAKK,IAAI,CAACD;IACzC;AACF;AAEA,OAAO,MAAME,iBAEHL;IAGR,OAAOE,QAAuCC,MAAc,EAAE;QAC5D,OAAO,IAAIE,SACTN,KAAKK,IAAI,CAACE,OAAOC,WAAW,CAACJ,OAAOK,GAAG,CAAC,CAACC,IAAM;gBAACA;gBAAGA;aAAE;IAEzD;AACF"}
1
+ {"version":3,"sources":["../../../src/types/enum.ts"],"sourcesContent":["import { type TEnum, Type } from '@sinclair/typebox'\nimport { BaseType } from './base.ts'\n\nexport class ObjectEnumType<\n T extends { [K in string]: K } = { [K in string]: K },\n> extends BaseType<TEnum<T>, { values: T[keyof T] }, T[keyof T]> {\n static factory<T extends { [K in string]: K }>(values: T) {\n return new ObjectEnumType<T>(Type.Enum(values as any), {\n values: Object.values(values) as unknown as T[keyof T],\n })\n }\n}\n\nexport class EnumType<\n T extends (string | number)[] = (string | number)[],\n> extends BaseType<\n TEnum<Record<string, T[number]>>,\n { values: [...T] },\n T[keyof T]\n> {\n static factory<T extends (string | number)[]>(values: [...T]) {\n return new EnumType<T>(\n Type.Enum(Object.fromEntries(values.map((v) => [v, v])) as any),\n { values },\n )\n }\n}\n"],"names":["Type","BaseType","ObjectEnumType","factory","values","Enum","Object","EnumType","fromEntries","map","v"],"mappings":"AAAA,SAAqBA,IAAI,QAAQ,oBAAmB;AACpD,SAASC,QAAQ,QAAQ,YAAW;AAEpC,OAAO,MAAMC,uBAEHD;IACR,OAAOE,QAAwCC,MAAS,EAAE;QACxD,OAAO,IAAIF,eAAkBF,KAAKK,IAAI,CAACD,SAAgB;YACrDA,QAAQE,OAAOF,MAAM,CAACA;QACxB;IACF;AACF;AAEA,OAAO,MAAMG,iBAEHN;IAKR,OAAOE,QAAuCC,MAAc,EAAE;QAC5D,OAAO,IAAIG,SACTP,KAAKK,IAAI,CAACC,OAAOE,WAAW,CAACJ,OAAOK,GAAG,CAAC,CAACC,IAAM;gBAACA;gBAAGA;aAAE,KACrD;YAAEN;QAAO;IAEb;AACF"}
@@ -2,6 +2,8 @@ import { Type } from '@sinclair/typebox';
2
2
  import { BaseType } from "./base.js";
3
3
  export class LiteralType extends BaseType {
4
4
  static factory(value) {
5
- return new LiteralType(Type.Literal(value));
5
+ return new LiteralType(Type.Literal(value), {
6
+ value
7
+ });
6
8
  }
7
9
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/literal.ts"],"sourcesContent":["import { type TLiteral, type TLiteralValue, Type } from '@sinclair/typebox'\nimport { BaseType, type ConstantType } from './base.ts'\n\nexport class LiteralType<\n T extends TLiteralValue = TLiteralValue,\n> extends BaseType<TLiteral<T>> {\n declare _: ConstantType<this['schema']>\n\n static factory<T extends TLiteralValue>(value: T) {\n return new LiteralType<T>(Type.Literal(value))\n }\n}\n"],"names":["Type","BaseType","LiteralType","factory","value","Literal"],"mappings":"AAAA,SAA4CA,IAAI,QAAQ,oBAAmB;AAC3E,SAASC,QAAQ,QAA2B,YAAW;AAEvD,OAAO,MAAMC,oBAEHD;IAGR,OAAOE,QAAiCC,KAAQ,EAAE;QAChD,OAAO,IAAIF,YAAeF,KAAKK,OAAO,CAACD;IACzC;AACF"}
1
+ {"version":3,"sources":["../../../src/types/literal.ts"],"sourcesContent":["import { type TLiteral, type TLiteralValue, Type } from '@sinclair/typebox'\nimport { BaseType } from './base.ts'\n\nexport class LiteralType<\n T extends TLiteralValue = TLiteralValue,\n> extends BaseType<TLiteral<T>, { value: TLiteralValue }, T> {\n static factory<T extends TLiteralValue>(value: T) {\n return new LiteralType<T>(Type.Literal(value), { value })\n }\n}\n"],"names":["Type","BaseType","LiteralType","factory","value","Literal"],"mappings":"AAAA,SAA4CA,IAAI,QAAQ,oBAAmB;AAC3E,SAASC,QAAQ,QAAQ,YAAW;AAEpC,OAAO,MAAMC,oBAEHD;IACR,OAAOE,QAAiCC,KAAQ,EAAE;QAChD,OAAO,IAAIF,YAAeF,KAAKK,OAAO,CAACD,QAAQ;YAAEA;QAAM;IACzD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/never.ts"],"sourcesContent":["import { type TNever, Type } from '@sinclair/typebox'\nimport { BaseType, type ConstantType } from './base.ts'\n\nexport class NeverType extends BaseType<TNever> {\n declare _: ConstantType<this['schema']>\n\n static factory() {\n return new NeverType(Type.Never())\n }\n}\n"],"names":["Type","BaseType","NeverType","factory","Never"],"mappings":"AAAA,SAAsBA,IAAI,QAAQ,oBAAmB;AACrD,SAASC,QAAQ,QAA2B,YAAW;AAEvD,OAAO,MAAMC,kBAAkBD;IAG7B,OAAOE,UAAU;QACf,OAAO,IAAID,UAAUF,KAAKI,KAAK;IACjC;AACF"}
1
+ {"version":3,"sources":["../../../src/types/never.ts"],"sourcesContent":["import { type TNever, Type } from '@sinclair/typebox'\nimport { BaseType } from './base.ts'\n\nexport class NeverType extends BaseType<TNever, {}, never> {\n static factory() {\n return new NeverType(Type.Never())\n }\n}\n"],"names":["Type","BaseType","NeverType","factory","Never"],"mappings":"AAAA,SAAsBA,IAAI,QAAQ,oBAAmB;AACrD,SAASC,QAAQ,QAAQ,YAAW;AAEpC,OAAO,MAAMC,kBAAkBD;IAC7B,OAAOE,UAAU;QACf,OAAO,IAAID,UAAUF,KAAKI,KAAK;IACjC;AACF"}
@@ -66,6 +66,8 @@ export class BigIntType extends BaseType {
66
66
  static factory(options = {}) {
67
67
  return new BigIntType(Type.BigInt(options), {
68
68
  options
69
+ }, {
70
+ encode: (value)=>`${value}`
69
71
  });
70
72
  }
71
73
  positive() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/number.ts"],"sourcesContent":["import {\n type BigIntOptions,\n type IntegerOptions,\n type NumberOptions,\n type Static,\n type StaticDecode,\n type StringOptions,\n type TBigInt,\n type TInteger,\n type TNumber,\n type TString,\n type TTransform,\n Type,\n TypeBoxError,\n} from '@sinclair/typebox'\nimport { BaseType, type ConstantType } from './base.ts'\nimport { CustomType, TransformType } from './custom.ts'\n\nexport class NumberType extends BaseType<TNumber, { options: NumberOptions }> {\n declare _: ConstantType<this['schema']>\n\n static factory(options: NumberOptions = {}) {\n return new NumberType(Type.Number(options), { options })\n }\n\n positive() {\n return this.min(0, true)\n }\n\n negative() {\n return this.max(0, true)\n }\n\n max(value: number, exclusive?: true) {\n return NumberType.factory({\n ...this.props.options,\n maximum: value,\n ...(!exclusive ? {} : { exclusiveMaximum: value }),\n })\n }\n\n min(value: number, exclusive?: true) {\n return NumberType.factory({\n ...this.props.options,\n minimum: value,\n ...(!exclusive ? {} : { exclusiveMinimum: value }),\n })\n }\n}\n\nexport class IntegerType extends BaseType<\n TInteger,\n { options: IntegerOptions }\n> {\n declare _: ConstantType<this['schema']>\n\n static factory(options: IntegerOptions = {}) {\n return new IntegerType(Type.Integer(options), { options })\n }\n\n positive() {\n return this.min(0, true)\n }\n\n negative() {\n return this.max(0, true)\n }\n\n max(value: number, exclusive?: true) {\n return IntegerType.factory({\n ...this.props.options,\n maximum: value,\n ...(!exclusive ? {} : { exclusiveMaximum: value }),\n })\n }\n\n min(value: number, exclusive?: true) {\n return IntegerType.factory({\n ...this.props.options,\n minimum: value,\n ...(!exclusive ? {} : { exclusiveMinimum: value }),\n })\n }\n}\n\n// TODO: this is not json schema compatible\nexport class BigIntType extends BaseType<TBigInt, { options: BigIntOptions }> {\n declare _: ConstantType<this['schema']>\n\n static factory(options: BigIntOptions = {}) {\n return new BigIntType(Type.BigInt(options), { options })\n }\n\n positive() {\n return this.min(0n, true)\n }\n\n negative() {\n return this.max(0n, true)\n }\n\n max(value: bigint, exclusive?: true) {\n return BigIntType.factory({\n ...this.props.options,\n maximum: value,\n ...(!exclusive ? {} : { exclusiveMaximum: value }),\n })\n }\n\n min(value: bigint, exclusive?: true) {\n return BigIntType.factory({\n ...this.props.options,\n minimum: value,\n ...(!exclusive ? {} : { exclusiveMinimum: value }),\n })\n }\n}\n"],"names":["Type","BaseType","NumberType","factory","options","Number","positive","min","negative","max","value","exclusive","props","maximum","exclusiveMaximum","minimum","exclusiveMinimum","IntegerType","Integer","BigIntType","BigInt"],"mappings":"AAAA,SAYEA,IAAI,QAEC,oBAAmB;AAC1B,SAASC,QAAQ,QAA2B,YAAW;AAGvD,OAAO,MAAMC,mBAAmBD;IAG9B,OAAOE,QAAQC,UAAyB,CAAC,CAAC,EAAE;QAC1C,OAAO,IAAIF,WAAWF,KAAKK,MAAM,CAACD,UAAU;YAAEA;QAAQ;IACxD;IAEAE,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,GAAG;IACrB;IAEAC,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,GAAG;IACrB;IAEAA,IAAIC,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOT,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBS,SAASH;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEG,kBAAkBJ;YAAM,CAAC;QACnD;IACF;IAEAH,IAAIG,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOT,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBW,SAASL;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEK,kBAAkBN;YAAM,CAAC;QACnD;IACF;AACF;AAEA,OAAO,MAAMO,oBAAoBhB;IAM/B,OAAOE,QAAQC,UAA0B,CAAC,CAAC,EAAE;QAC3C,OAAO,IAAIa,YAAYjB,KAAKkB,OAAO,CAACd,UAAU;YAAEA;QAAQ;IAC1D;IAEAE,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,GAAG;IACrB;IAEAC,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,GAAG;IACrB;IAEAA,IAAIC,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOM,YAAYd,OAAO,CAAC;YACzB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBS,SAASH;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEG,kBAAkBJ;YAAM,CAAC;QACnD;IACF;IAEAH,IAAIG,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOM,YAAYd,OAAO,CAAC;YACzB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBW,SAASL;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEK,kBAAkBN;YAAM,CAAC;QACnD;IACF;AACF;AAGA,OAAO,MAAMS,mBAAmBlB;IAG9B,OAAOE,QAAQC,UAAyB,CAAC,CAAC,EAAE;QAC1C,OAAO,IAAIe,WAAWnB,KAAKoB,MAAM,CAAChB,UAAU;YAAEA;QAAQ;IACxD;IAEAE,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,EAAE,EAAE;IACtB;IAEAC,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,EAAE,EAAE;IACtB;IAEAA,IAAIC,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOQ,WAAWhB,OAAO,CAAC;YACxB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBS,SAASH;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEG,kBAAkBJ;YAAM,CAAC;QACnD;IACF;IAEAH,IAAIG,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOQ,WAAWhB,OAAO,CAAC;YACxB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBW,SAASL;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEK,kBAAkBN;YAAM,CAAC;QACnD;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/types/number.ts"],"sourcesContent":["import {\n type BigIntOptions,\n type IntegerOptions,\n type NumberOptions,\n type TBigInt,\n type TInteger,\n type TNumber,\n Type,\n} from '@sinclair/typebox'\nimport { BaseType } from './base.ts'\n\nexport class NumberType extends BaseType<\n TNumber,\n { options: NumberOptions },\n number\n> {\n static factory(options: NumberOptions = {}) {\n return new NumberType(Type.Number(options), { options })\n }\n\n positive() {\n return this.min(0, true)\n }\n\n negative() {\n return this.max(0, true)\n }\n\n max(value: number, exclusive?: true) {\n return NumberType.factory({\n ...this.props.options,\n maximum: value,\n ...(!exclusive ? {} : { exclusiveMaximum: value }),\n })\n }\n\n min(value: number, exclusive?: true) {\n return NumberType.factory({\n ...this.props.options,\n minimum: value,\n ...(!exclusive ? {} : { exclusiveMinimum: value }),\n })\n }\n}\n\nexport class IntegerType extends BaseType<\n TInteger,\n { options: IntegerOptions },\n number\n> {\n static factory(options: IntegerOptions = {}) {\n return new IntegerType(Type.Integer(options), { options })\n }\n\n positive() {\n return this.min(0, true)\n }\n\n negative() {\n return this.max(0, true)\n }\n\n max(value: number, exclusive?: true) {\n return IntegerType.factory({\n ...this.props.options,\n maximum: value,\n ...(!exclusive ? {} : { exclusiveMaximum: value }),\n })\n }\n\n min(value: number, exclusive?: true) {\n return IntegerType.factory({\n ...this.props.options,\n minimum: value,\n ...(!exclusive ? {} : { exclusiveMinimum: value }),\n })\n }\n}\n\n// TODO: this is not json schema compatible\nexport class BigIntType extends BaseType<\n TBigInt,\n { options: BigIntOptions },\n bigint\n> {\n static factory(options: BigIntOptions = {}) {\n return new BigIntType(\n Type.BigInt(options),\n { options },\n { encode: (value) => `${value}` },\n )\n }\n\n positive() {\n return this.min(0n, true)\n }\n\n negative() {\n return this.max(0n, true)\n }\n\n max(value: bigint, exclusive?: true) {\n return BigIntType.factory({\n ...this.props.options,\n maximum: value,\n ...(!exclusive ? {} : { exclusiveMaximum: value }),\n })\n }\n\n min(value: bigint, exclusive?: true) {\n return BigIntType.factory({\n ...this.props.options,\n minimum: value,\n ...(!exclusive ? {} : { exclusiveMinimum: value }),\n })\n }\n}\n"],"names":["Type","BaseType","NumberType","factory","options","Number","positive","min","negative","max","value","exclusive","props","maximum","exclusiveMaximum","minimum","exclusiveMinimum","IntegerType","Integer","BigIntType","BigInt","encode"],"mappings":"AAAA,SAOEA,IAAI,QACC,oBAAmB;AAC1B,SAASC,QAAQ,QAAQ,YAAW;AAEpC,OAAO,MAAMC,mBAAmBD;IAK9B,OAAOE,QAAQC,UAAyB,CAAC,CAAC,EAAE;QAC1C,OAAO,IAAIF,WAAWF,KAAKK,MAAM,CAACD,UAAU;YAAEA;QAAQ;IACxD;IAEAE,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,GAAG;IACrB;IAEAC,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,GAAG;IACrB;IAEAA,IAAIC,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOT,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBS,SAASH;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEG,kBAAkBJ;YAAM,CAAC;QACnD;IACF;IAEAH,IAAIG,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOT,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBW,SAASL;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEK,kBAAkBN;YAAM,CAAC;QACnD;IACF;AACF;AAEA,OAAO,MAAMO,oBAAoBhB;IAK/B,OAAOE,QAAQC,UAA0B,CAAC,CAAC,EAAE;QAC3C,OAAO,IAAIa,YAAYjB,KAAKkB,OAAO,CAACd,UAAU;YAAEA;QAAQ;IAC1D;IAEAE,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,GAAG;IACrB;IAEAC,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,GAAG;IACrB;IAEAA,IAAIC,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOM,YAAYd,OAAO,CAAC;YACzB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBS,SAASH;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEG,kBAAkBJ;YAAM,CAAC;QACnD;IACF;IAEAH,IAAIG,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOM,YAAYd,OAAO,CAAC;YACzB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBW,SAASL;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEK,kBAAkBN;YAAM,CAAC;QACnD;IACF;AACF;AAGA,OAAO,MAAMS,mBAAmBlB;IAK9B,OAAOE,QAAQC,UAAyB,CAAC,CAAC,EAAE;QAC1C,OAAO,IAAIe,WACTnB,KAAKoB,MAAM,CAAChB,UACZ;YAAEA;QAAQ,GACV;YAAEiB,QAAQ,CAACX,QAAU,CAAC,EAAEA,MAAM,CAAC;QAAC;IAEpC;IAEAJ,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,EAAE,EAAE;IACtB;IAEAC,WAAW;QACT,OAAO,IAAI,CAACC,GAAG,CAAC,EAAE,EAAE;IACtB;IAEAA,IAAIC,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOQ,WAAWhB,OAAO,CAAC;YACxB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBS,SAASH;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEG,kBAAkBJ;YAAM,CAAC;QACnD;IACF;IAEAH,IAAIG,KAAa,EAAEC,SAAgB,EAAE;QACnC,OAAOQ,WAAWhB,OAAO,CAAC;YACxB,GAAG,IAAI,CAACS,KAAK,CAACR,OAAO;YACrBW,SAASL;YACT,GAAI,CAACC,YAAY,CAAC,IAAI;gBAAEK,kBAAkBN;YAAM,CAAC;QACnD;IACF;AACF"}
@@ -1,10 +1,11 @@
1
1
  import { Type } from '@sinclair/typebox';
2
2
  import { BaseType } from "./base.js";
3
+ import { EnumType } from "./enum.js";
3
4
  export class ObjectType extends BaseType {
4
5
  static factory(properties, options = {}) {
5
6
  const schemaProperties = {};
6
7
  for(const key in properties){
7
- schemaProperties[key] = properties[key].final;
8
+ schemaProperties[key] = properties[key].schema;
8
9
  }
9
10
  return new ObjectType(Type.Object(schemaProperties, options), {
10
11
  properties
@@ -16,3 +17,33 @@ export class RecordType extends BaseType {
16
17
  return new RecordType(Type.Record(key.schema, element.schema, options));
17
18
  }
18
19
  }
20
+ export function keyof(type) {
21
+ return EnumType.factory(Object.keys(type.props.properties));
22
+ }
23
+ export function pick(source, pick) {
24
+ const properties = Object.fromEntries(Object.entries(source.props.properties).filter(([key])=>pick[key]));
25
+ return ObjectType.factory(properties);
26
+ }
27
+ export function omit(source, omit) {
28
+ const properties = Object.fromEntries(Object.entries(source.props.properties).filter(([key])=>!omit[key]));
29
+ return ObjectType.factory(properties);
30
+ }
31
+ export function extend(object1, properties) {
32
+ return ObjectType.factory({
33
+ ...object1.props.properties,
34
+ ...properties
35
+ });
36
+ }
37
+ export function merge(object1, object2) {
38
+ return ObjectType.factory({
39
+ ...object1.props.properties,
40
+ ...object2.props.properties
41
+ });
42
+ }
43
+ export function partial(object) {
44
+ const properties = {};
45
+ for (const [key, value] of Object.entries(object.props.properties)){
46
+ properties[key] = value.optional();
47
+ }
48
+ return ObjectType.factory(properties, {});
49
+ }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/object.ts"],"sourcesContent":["import {\n type ObjectOptions,\n type TObject,\n type TRecordOrObject,\n type TSchema,\n Type,\n} from '@sinclair/typebox'\nimport { BaseType, type BaseTypeAny } from './base.ts'\nimport type { EnumType, ObjectEnumType } from './enum.ts'\nimport type { LiteralType } from './literal.ts'\nimport type { StringType } from './string.ts'\n\nexport type ObjectTypeProps = { [k: string]: BaseTypeAny<any> }\nexport class ObjectType<\n T extends ObjectTypeProps = ObjectTypeProps,\n> extends BaseType<\n TObject<{ [K in keyof T]: T[K]['schema'] }>,\n { properties: T }\n> {\n declare _: {\n encoded: {\n input: TObject<{ [K in keyof T]: T[K]['_']['encoded']['input'] }>\n output: TObject<{ [K in keyof T]: T[K]['_']['encoded']['output'] }>\n }\n decoded: {\n input: TObject<{ [K in keyof T]: T[K]['_']['decoded']['input'] }>\n output: TObject<{ [K in keyof T]: T[K]['_']['decoded']['output'] }>\n }\n }\n\n static factory<T extends ObjectTypeProps = ObjectTypeProps>(\n properties: T,\n options: ObjectOptions = {},\n ) {\n const schemaProperties = {} as {\n [K in keyof T]: T[K]['schema']\n }\n\n for (const key in properties) {\n schemaProperties[key] = properties[key].final\n }\n\n return new ObjectType<T>(Type.Object(schemaProperties, options) as any, {\n properties,\n })\n }\n}\n\nexport class RecordType<\n K extends LiteralType | EnumType | ObjectEnumType | StringType,\n E extends BaseType,\n> extends BaseType<TRecordOrObject<K['schema'], E['schema']>> {\n declare _: {\n encoded: {\n input: TRecordOrObject<\n K['_']['encoded']['input'],\n E['_']['encoded']['input']\n >\n output: TRecordOrObject<\n K['_']['encoded']['output'],\n E['_']['encoded']['output']\n >\n }\n decoded: {\n input: TRecordOrObject<\n K['_']['decoded']['input'],\n E['_']['decoded']['input']\n >\n output: TRecordOrObject<\n K['_']['decoded']['output'],\n E['_']['decoded']['output']\n >\n }\n }\n\n static factory<\n K extends\n | LiteralType<any>\n | EnumType<any>\n | ObjectEnumType<any>\n | StringType,\n E extends BaseType,\n >(key: K, element: E, options: ObjectOptions = {}) {\n return new RecordType<K, E>(\n Type.Record(key.schema, element.schema, options) as any,\n )\n }\n}\n"],"names":["Type","BaseType","ObjectType","factory","properties","options","schemaProperties","key","final","Object","RecordType","element","Record","schema"],"mappings":"AAAA,SAKEA,IAAI,QACC,oBAAmB;AAC1B,SAASC,QAAQ,QAA0B,YAAW;AAMtD,OAAO,MAAMC,mBAEHD;IAeR,OAAOE,QACLC,UAAa,EACbC,UAAyB,CAAC,CAAC,EAC3B;QACA,MAAMC,mBAAmB,CAAC;QAI1B,IAAK,MAAMC,OAAOH,WAAY;YAC5BE,gBAAgB,CAACC,IAAI,GAAGH,UAAU,CAACG,IAAI,CAACC,KAAK;QAC/C;QAEA,OAAO,IAAIN,WAAcF,KAAKS,MAAM,CAACH,kBAAkBD,UAAiB;YACtED;QACF;IACF;AACF;AAEA,OAAO,MAAMM,mBAGHT;IAwBR,OAAOE,QAOLI,GAAM,EAAEI,OAAU,EAAEN,UAAyB,CAAC,CAAC,EAAE;QACjD,OAAO,IAAIK,WACTV,KAAKY,MAAM,CAACL,IAAIM,MAAM,EAAEF,QAAQE,MAAM,EAAER;IAE5C;AACF"}
1
+ {"version":3,"sources":["../../../src/types/object.ts"],"sourcesContent":["import {\n type ObjectOptions,\n type TObject,\n type TRecordOrObject,\n type TSchema,\n Type,\n} from '@sinclair/typebox'\nimport type { StaticInputDecode } from '../inference.ts'\nimport type { UnionToTupleString } from '../utils.ts'\nimport { BaseType, type BaseTypeAny, type OptionalType } from './base.ts'\nimport { EnumType, type ObjectEnumType } from './enum.ts'\nimport type { LiteralType } from './literal.ts'\nimport type { StringType } from './string.ts'\n\nexport type ObjectTypeProps = { [k: string]: BaseTypeAny }\nexport type AnyObjectType = ObjectType<ObjectTypeProps>\nexport class ObjectType<T extends ObjectTypeProps = {}> extends BaseType<\n TObject<{ [K in keyof T]: T[K]['schema'] }>,\n { properties: T },\n StaticInputDecode<TObject<{ [K in keyof T]: T[K]['schema'] }>>\n> {\n static factory<T extends ObjectTypeProps = {}>(\n properties: T,\n options: ObjectOptions = {},\n ) {\n const schemaProperties = {} as {\n [K in keyof T]: T[K]['schema']\n }\n\n for (const key in properties) {\n schemaProperties[key] = properties[key].schema\n }\n\n return new ObjectType<T>(Type.Object(schemaProperties, options) as any, {\n properties,\n })\n }\n}\n\nexport class RecordType<\n K extends LiteralType | EnumType | ObjectEnumType | StringType,\n E extends BaseType,\n> extends BaseType<TRecordOrObject<K['schema'], E['schema']>> {\n static factory<\n K extends\n | LiteralType<any>\n | EnumType<any>\n | ObjectEnumType<any>\n | StringType,\n E extends BaseType,\n >(key: K, element: E, options: ObjectOptions = {}) {\n return new RecordType<K, E>(\n Type.Record(key.schema, element.schema, options) as any,\n )\n }\n}\n\nexport function keyof<T extends ObjectType>(\n type: T,\n): EnumType<\n UnionToTupleString<T extends ObjectType<infer Props> ? keyof Props : never>\n> {\n return EnumType.factory(Object.keys(type.props.properties) as any)\n}\n\nexport function pick<\n T extends AnyObjectType,\n P extends { [K in keyof T['props']['properties']]?: true },\n>(\n source: T,\n pick: P,\n): ObjectType<{\n [K in keyof P]: P[K] extends true\n ? K extends keyof T['props']['properties']\n ? T['props']['properties'][K]\n : never\n : never\n}> {\n const properties = Object.fromEntries(\n Object.entries(source.props.properties).filter(([key]) => pick[key]),\n )\n return ObjectType.factory(properties) as any\n}\n\nexport function omit<\n T extends AnyObjectType,\n P extends { [K in keyof T['props']['properties']]?: true },\n>(\n source: T,\n omit: P,\n): ObjectType<{\n [K in keyof T['props']['properties'] as K extends keyof P\n ? never\n : K]: T['props']['properties'][K]\n}> {\n const properties = Object.fromEntries(\n Object.entries(source.props.properties).filter(([key]) => !omit[key]),\n )\n return ObjectType.factory(properties) as any\n}\n\nexport function extend<T extends AnyObjectType, P extends ObjectTypeProps>(\n object1: T,\n properties: P,\n): ObjectType<{\n [K in keyof T['props']['properties'] | keyof P]: K extends keyof P\n ? P[K]\n : K extends keyof T['props']['properties']\n ? T['props']['properties'][K]\n : never\n}> {\n return ObjectType.factory({\n ...object1.props.properties,\n ...properties,\n }) as any\n}\n\nexport function merge<T1 extends AnyObjectType, T2 extends AnyObjectType>(\n object1: T1,\n object2: T2,\n): ObjectType<{\n [K in\n | keyof T1['props']['properties']\n | keyof T2['props']['properties']]: K extends keyof T2['props']['properties']\n ? T2['props']['properties'][K]\n : K extends keyof T1['props']['properties']\n ? T1['props']['properties'][K]\n : never\n}> {\n return ObjectType.factory({\n ...object1.props.properties,\n ...object2.props.properties,\n }) as any\n}\n\nexport function partial<\n T extends AnyObjectType,\n P extends T extends ObjectType<infer Props> ? Props : never,\n>(\n object: T,\n): ObjectType<{\n [K in keyof P]: P[K] extends BaseType<any, any, infer T>\n ? OptionalType<P[K], T>\n : never\n}> {\n const properties = {} as any\n\n for (const [key, value] of Object.entries(object.props.properties)) {\n properties[key] = value.optional()\n }\n\n return ObjectType.factory(properties, {}) as any\n}\n"],"names":["Type","BaseType","EnumType","ObjectType","factory","properties","options","schemaProperties","key","schema","Object","RecordType","element","Record","keyof","type","keys","props","pick","source","fromEntries","entries","filter","omit","extend","object1","merge","object2","partial","object","value","optional"],"mappings":"AAAA,SAKEA,IAAI,QACC,oBAAmB;AAG1B,SAASC,QAAQ,QAA6C,YAAW;AACzE,SAASC,QAAQ,QAA6B,YAAW;AAMzD,OAAO,MAAMC,mBAAmDF;IAK9D,OAAOG,QACLC,UAAa,EACbC,UAAyB,CAAC,CAAC,EAC3B;QACA,MAAMC,mBAAmB,CAAC;QAI1B,IAAK,MAAMC,OAAOH,WAAY;YAC5BE,gBAAgB,CAACC,IAAI,GAAGH,UAAU,CAACG,IAAI,CAACC,MAAM;QAChD;QAEA,OAAO,IAAIN,WAAcH,KAAKU,MAAM,CAACH,kBAAkBD,UAAiB;YACtED;QACF;IACF;AACF;AAEA,OAAO,MAAMM,mBAGHV;IACR,OAAOG,QAOLI,GAAM,EAAEI,OAAU,EAAEN,UAAyB,CAAC,CAAC,EAAE;QACjD,OAAO,IAAIK,WACTX,KAAKa,MAAM,CAACL,IAAIC,MAAM,EAAEG,QAAQH,MAAM,EAAEH;IAE5C;AACF;AAEA,OAAO,SAASQ,MACdC,IAAO;IAIP,OAAOb,SAASE,OAAO,CAACM,OAAOM,IAAI,CAACD,KAAKE,KAAK,CAACZ,UAAU;AAC3D;AAEA,OAAO,SAASa,KAIdC,MAAS,EACTD,IAAO;IAQP,MAAMb,aAAaK,OAAOU,WAAW,CACnCV,OAAOW,OAAO,CAACF,OAAOF,KAAK,CAACZ,UAAU,EAAEiB,MAAM,CAAC,CAAC,CAACd,IAAI,GAAKU,IAAI,CAACV,IAAI;IAErE,OAAOL,WAAWC,OAAO,CAACC;AAC5B;AAEA,OAAO,SAASkB,KAIdJ,MAAS,EACTI,IAAO;IAMP,MAAMlB,aAAaK,OAAOU,WAAW,CACnCV,OAAOW,OAAO,CAACF,OAAOF,KAAK,CAACZ,UAAU,EAAEiB,MAAM,CAAC,CAAC,CAACd,IAAI,GAAK,CAACe,IAAI,CAACf,IAAI;IAEtE,OAAOL,WAAWC,OAAO,CAACC;AAC5B;AAEA,OAAO,SAASmB,OACdC,OAAU,EACVpB,UAAa;IAQb,OAAOF,WAAWC,OAAO,CAAC;QACxB,GAAGqB,QAAQR,KAAK,CAACZ,UAAU;QAC3B,GAAGA,UAAU;IACf;AACF;AAEA,OAAO,SAASqB,MACdD,OAAW,EACXE,OAAW;IAUX,OAAOxB,WAAWC,OAAO,CAAC;QACxB,GAAGqB,QAAQR,KAAK,CAACZ,UAAU;QAC3B,GAAGsB,QAAQV,KAAK,CAACZ,UAAU;IAC7B;AACF;AAEA,OAAO,SAASuB,QAIdC,MAAS;IAMT,MAAMxB,aAAa,CAAC;IAEpB,KAAK,MAAM,CAACG,KAAKsB,MAAM,IAAIpB,OAAOW,OAAO,CAACQ,OAAOZ,KAAK,CAACZ,UAAU,EAAG;QAClEA,UAAU,CAACG,IAAI,GAAGsB,MAAMC,QAAQ;IAClC;IAEA,OAAO5B,WAAWC,OAAO,CAACC,YAAY,CAAC;AACzC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/string.ts"],"sourcesContent":["import { type StringOptions, type TString, Type } from '@sinclair/typebox'\nimport { BaseType, type ConstantType, type TypeParams } from './base.ts'\n\nexport class StringType extends BaseType<TString, { options: StringOptions }> {\n declare _: ConstantType<TString>\n\n static factory(options: StringOptions = {}) {\n return new StringType(Type.String(options), { options })\n }\n\n max(value: number) {\n return StringType.factory({\n ...this.props.options,\n maxLength: value,\n })\n }\n\n min(value: number) {\n return StringType.factory({\n ...this.props.options,\n minLength: value,\n })\n }\n\n format(format: TString['format']) {\n return StringType.factory({\n ...this.props.options,\n pattern: undefined,\n format,\n })\n }\n\n pattern(pattern: string) {\n return StringType.factory({\n ...this.props.options,\n format: undefined,\n pattern,\n })\n }\n\n email() {\n return this.format('email')\n }\n\n url() {\n return this.format('uri')\n }\n\n ipv4() {\n return this.format('ipv4')\n }\n\n ipv6() {\n return this.format('ipv6')\n }\n\n uuid() {\n return this.format('uuid')\n }\n}\n"],"names":["Type","BaseType","StringType","factory","options","String","max","value","props","maxLength","min","minLength","format","pattern","undefined","email","url","ipv4","ipv6","uuid"],"mappings":"AAAA,SAA2CA,IAAI,QAAQ,oBAAmB;AAC1E,SAASC,QAAQ,QAA4C,YAAW;AAExE,OAAO,MAAMC,mBAAmBD;IAG9B,OAAOE,QAAQC,UAAyB,CAAC,CAAC,EAAE;QAC1C,OAAO,IAAIF,WAAWF,KAAKK,MAAM,CAACD,UAAU;YAAEA;QAAQ;IACxD;IAEAE,IAAIC,KAAa,EAAE;QACjB,OAAOL,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACK,KAAK,CAACJ,OAAO;YACrBK,WAAWF;QACb;IACF;IAEAG,IAAIH,KAAa,EAAE;QACjB,OAAOL,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACK,KAAK,CAACJ,OAAO;YACrBO,WAAWJ;QACb;IACF;IAEAK,OAAOA,MAAyB,EAAE;QAChC,OAAOV,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACK,KAAK,CAACJ,OAAO;YACrBS,SAASC;YACTF;QACF;IACF;IAEAC,QAAQA,OAAe,EAAE;QACvB,OAAOX,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACK,KAAK,CAACJ,OAAO;YACrBQ,QAAQE;YACRD;QACF;IACF;IAEAE,QAAQ;QACN,OAAO,IAAI,CAACH,MAAM,CAAC;IACrB;IAEAI,MAAM;QACJ,OAAO,IAAI,CAACJ,MAAM,CAAC;IACrB;IAEAK,OAAO;QACL,OAAO,IAAI,CAACL,MAAM,CAAC;IACrB;IAEAM,OAAO;QACL,OAAO,IAAI,CAACN,MAAM,CAAC;IACrB;IAEAO,OAAO;QACL,OAAO,IAAI,CAACP,MAAM,CAAC;IACrB;AACF"}
1
+ {"version":3,"sources":["../../../src/types/string.ts"],"sourcesContent":["import { type StringOptions, type TString, Type } from '@sinclair/typebox'\nimport type { StaticOutputDecode } from '../inference.ts'\nimport { BaseType } from './base.ts'\n\nexport class StringType extends BaseType<\n TString,\n { options: StringOptions },\n string\n> {\n static factory(options: StringOptions = {}) {\n return new StringType(Type.String(options), { options })\n }\n\n max(value: number) {\n return StringType.factory({\n ...this.props.options,\n maxLength: value,\n })\n }\n\n min(value: number) {\n return StringType.factory({\n ...this.props.options,\n minLength: value,\n })\n }\n\n format(format: TString['format']) {\n return StringType.factory({\n ...this.props.options,\n pattern: undefined,\n format,\n })\n }\n\n pattern(pattern: string) {\n return StringType.factory({\n ...this.props.options,\n format: undefined,\n pattern,\n })\n }\n\n email() {\n return this.format('email')\n }\n\n url() {\n return this.format('uri')\n }\n\n ipv4() {\n return this.format('ipv4')\n }\n\n ipv6() {\n return this.format('ipv6')\n }\n\n uuid() {\n return this.format('uuid')\n }\n}\n"],"names":["Type","BaseType","StringType","factory","options","String","max","value","props","maxLength","min","minLength","format","pattern","undefined","email","url","ipv4","ipv6","uuid"],"mappings":"AAAA,SAA2CA,IAAI,QAAQ,oBAAmB;AAE1E,SAASC,QAAQ,QAAQ,YAAW;AAEpC,OAAO,MAAMC,mBAAmBD;IAK9B,OAAOE,QAAQC,UAAyB,CAAC,CAAC,EAAE;QAC1C,OAAO,IAAIF,WAAWF,KAAKK,MAAM,CAACD,UAAU;YAAEA;QAAQ;IACxD;IAEAE,IAAIC,KAAa,EAAE;QACjB,OAAOL,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACK,KAAK,CAACJ,OAAO;YACrBK,WAAWF;QACb;IACF;IAEAG,IAAIH,KAAa,EAAE;QACjB,OAAOL,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACK,KAAK,CAACJ,OAAO;YACrBO,WAAWJ;QACb;IACF;IAEAK,OAAOA,MAAyB,EAAE;QAChC,OAAOV,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACK,KAAK,CAACJ,OAAO;YACrBS,SAASC;YACTF;QACF;IACF;IAEAC,QAAQA,OAAe,EAAE;QACvB,OAAOX,WAAWC,OAAO,CAAC;YACxB,GAAG,IAAI,CAACK,KAAK,CAACJ,OAAO;YACrBQ,QAAQE;YACRD;QACF;IACF;IAEAE,QAAQ;QACN,OAAO,IAAI,CAACH,MAAM,CAAC;IACrB;IAEAI,MAAM;QACJ,OAAO,IAAI,CAACJ,MAAM,CAAC;IACrB;IAEAK,OAAO;QACL,OAAO,IAAI,CAACL,MAAM,CAAC;IACrB;IAEAM,OAAO;QACL,OAAO,IAAI,CAACN,MAAM,CAAC;IACrB;IAEAO,OAAO;QACL,OAAO,IAAI,CAACP,MAAM,CAAC;IACrB;AACF"}
@@ -2,18 +2,22 @@ import { Type } from '@sinclair/typebox';
2
2
  import { DiscriminatedUnion } from "../schemas/discriminated-union.js";
3
3
  import { BaseType } from "./base.js";
4
4
  export class UnionType extends BaseType {
5
- static factory(...types) {
6
- return new UnionType(Type.Union(types.map((t)=>t.schema)));
5
+ static factory(...options) {
6
+ return new UnionType(Type.Union(options.map((t)=>t.schema)), {
7
+ options
8
+ });
7
9
  }
8
10
  }
9
11
  export class IntersactionType extends BaseType {
10
- static factory(...types) {
11
- return new IntersactionType(Type.Intersect(types.map((t)=>t.schema)));
12
+ static factory(...options) {
13
+ return new IntersactionType(Type.Intersect(options.map((t)=>t.schema)), {
14
+ options
15
+ });
12
16
  }
13
17
  }
14
18
  export class DiscriminatedUnionType extends BaseType {
15
19
  static factory(key, ...options) {
16
- return new DiscriminatedUnionType(DiscriminatedUnion(key, options.map((t)=>t.final)), {
20
+ return new DiscriminatedUnionType(DiscriminatedUnion(key, options.map((t)=>t.schema)), {
17
21
  key,
18
22
  options
19
23
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/union.ts"],"sourcesContent":["import {\n type TIntersect,\n type TUnion,\n Type,\n type UnionToTuple,\n} from '@sinclair/typebox'\nimport {\n DiscriminatedUnion,\n type TDiscriminatedUnion,\n} from '../schemas/discriminated-union.ts'\nimport { BaseType, type BaseTypeAny } from './base.ts'\nimport type { LiteralType } from './literal.ts'\nimport type { ObjectType, ObjectTypeProps } from './object.ts'\n\nexport class UnionType<\n T extends readonly BaseType[] = readonly BaseType[],\n> extends BaseType<TUnion<UnionToTuple<T[number]['schema']>>> {\n declare _: {\n encoded: {\n input: TUnion<UnionToTuple<T[number]['_']['encoded']['input']>>\n output: TUnion<UnionToTuple<T[number]['_']['encoded']['output']>>\n }\n decoded: {\n input: TUnion<UnionToTuple<T[number]['_']['decoded']['input']>>\n output: TUnion<UnionToTuple<T[number]['_']['decoded']['output']>>\n }\n }\n\n static factory<T extends readonly BaseType[] = readonly BaseType[]>(\n ...types: T\n ) {\n return new UnionType<T>(Type.Union(types.map((t) => t.schema)) as any)\n }\n}\n\nexport class IntersactionType<\n T extends readonly BaseType[] = readonly BaseType[],\n> extends BaseType<TIntersect<UnionToTuple<T[number]['schema']>>> {\n declare _: {\n encoded: {\n input: TIntersect<UnionToTuple<T[number]['_']['encoded']['input']>>\n output: TIntersect<UnionToTuple<T[number]['_']['encoded']['output']>>\n }\n decoded: {\n input: TIntersect<UnionToTuple<T[number]['_']['decoded']['input']>>\n output: TIntersect<UnionToTuple<T[number]['_']['decoded']['output']>>\n }\n }\n\n static factory<T extends readonly BaseType[] = readonly BaseType[]>(\n ...types: T\n ) {\n return new IntersactionType<T>(\n Type.Intersect(types.map((t) => t.schema)) as any,\n )\n }\n}\n\nexport type DiscriminatedUnionOptionType<K extends string> = ObjectType<\n ObjectTypeProps & { [_ in K]: BaseTypeAny }\n>\n\nexport class DiscriminatedUnionType<\n K extends string,\n T extends readonly [\n DiscriminatedUnionOptionType<K>,\n ...DiscriminatedUnionOptionType<K>[],\n ],\n> extends BaseType<\n TDiscriminatedUnion<\n K,\n //@ts-expect-error\n UnionToTuple<T[number]['schema']>\n >,\n {\n key: K\n options: T\n }\n> {\n declare _: {\n encoded: {\n input: TDiscriminatedUnion<\n K,\n //@ts-expect-error\n UnionToTuple<T[number]['_']['encoded']['input']>\n >\n output: TDiscriminatedUnion<\n K,\n //@ts-expect-error\n UnionToTuple<T[number]['_']['encoded']['output']>\n >\n }\n decoded: {\n input: TDiscriminatedUnion<\n K,\n //@ts-expect-error\n UnionToTuple<T[number]['_']['decoded']['input']>\n >\n output: TDiscriminatedUnion<\n K,\n //@ts-expect-error\n UnionToTuple<T[number]['_']['decoded']['output']>\n >\n }\n }\n\n static factory<\n K extends string,\n T extends readonly [\n DiscriminatedUnionOptionType<K>,\n ...DiscriminatedUnionOptionType<K>[],\n ],\n >(key: K, ...options: T) {\n return new DiscriminatedUnionType<K, T>(\n DiscriminatedUnion(key, options.map((t) => t.final) as any),\n { key, options },\n )\n }\n}\n"],"names":["Type","DiscriminatedUnion","BaseType","UnionType","factory","types","Union","map","t","schema","IntersactionType","Intersect","DiscriminatedUnionType","key","options","final"],"mappings":"AAAA,SAGEA,IAAI,QAEC,oBAAmB;AAC1B,SACEC,kBAAkB,QAEb,oCAAmC;AAC1C,SAASC,QAAQ,QAA0B,YAAW;AAItD,OAAO,MAAMC,kBAEHD;IAYR,OAAOE,QACL,GAAGC,KAAQ,EACX;QACA,OAAO,IAAIF,UAAaH,KAAKM,KAAK,CAACD,MAAME,GAAG,CAAC,CAACC,IAAMA,EAAEC,MAAM;IAC9D;AACF;AAEA,OAAO,MAAMC,yBAEHR;IAYR,OAAOE,QACL,GAAGC,KAAQ,EACX;QACA,OAAO,IAAIK,iBACTV,KAAKW,SAAS,CAACN,MAAME,GAAG,CAAC,CAACC,IAAMA,EAAEC,MAAM;IAE5C;AACF;AAMA,OAAO,MAAMG,+BAMHV;IAsCR,OAAOE,QAMLS,GAAM,EAAE,GAAGC,OAAU,EAAE;QACvB,OAAO,IAAIF,uBACTX,mBAAmBY,KAAKC,QAAQP,GAAG,CAAC,CAACC,IAAMA,EAAEO,KAAK,IAClD;YAAEF;YAAKC;QAAQ;IAEnB;AACF"}
1
+ {"version":3,"sources":["../../../src/types/union.ts"],"sourcesContent":["import {\n type TIntersect,\n type TObject,\n type TSchema,\n type TUnion,\n Type,\n type UnionToTuple,\n} from '@sinclair/typebox'\nimport type { StaticInputDecode } from '../inference.ts'\nimport {\n DiscriminatedUnion,\n type DiscriminatedUnionProperties,\n type TDiscriminatedUnion,\n} from '../schemas/discriminated-union.ts'\nimport { BaseType, type BaseTypeAny } from './base.ts'\nimport type { ObjectType, ObjectTypeProps } from './object.ts'\n\nexport class UnionType<\n T extends readonly BaseType[] = readonly BaseType[],\n S extends TSchema[] = UnionToTuple<T[number]['schema']>,\n> extends BaseType<TUnion<S>, { options: T }, StaticInputDecode<TUnion<S>>> {\n static factory<\n T extends readonly BaseType[] = readonly BaseType[],\n S extends TSchema[] = UnionToTuple<T[number]['schema']>,\n >(...options: T) {\n return new UnionType<T, S>(\n Type.Union(options.map((t) => t.schema)) as any,\n {\n options,\n },\n )\n }\n}\n\nexport class IntersactionType<\n T extends readonly BaseType[] = readonly BaseType[],\n S extends TSchema[] = UnionToTuple<T[number]['schema']>,\n> extends BaseType<\n TIntersect<S>,\n { options: T },\n StaticInputDecode<TIntersect<S>>\n> {\n static factory<\n T extends readonly BaseType[] = readonly BaseType[],\n S extends TSchema[] = UnionToTuple<T[number]['schema']>,\n >(...options: T) {\n return new IntersactionType<T, S>(\n Type.Intersect(options.map((t) => t.schema)) as any,\n { options },\n )\n }\n}\n\nexport type DiscriminatedUnionOptionType<K extends string> = ObjectType<\n ObjectTypeProps & { [_ in K]: BaseTypeAny }\n>\n\nexport class DiscriminatedUnionType<\n K extends string = string,\n T extends\n readonly DiscriminatedUnionOptionType<K>[] = DiscriminatedUnionOptionType<K>[],\n S extends TObject<DiscriminatedUnionProperties<K>>[] = [],\n> extends BaseType<\n TDiscriminatedUnion<K, S>,\n {\n key: K\n options: T\n },\n StaticInputDecode<TDiscriminatedUnion<K, S>>\n> {\n static factory<\n K extends string,\n T extends readonly DiscriminatedUnionOptionType<K>[],\n //@ts-expect-error\n S extends TObject<DiscriminatedUnionProperties<K>>[] = UnionToTuple<\n T[number]['schema']\n >,\n >(key: K, ...options: T) {\n return new DiscriminatedUnionType<K, T, S>(\n DiscriminatedUnion(key, options.map((t) => t.schema) as any),\n { key, options },\n )\n }\n}\n"],"names":["Type","DiscriminatedUnion","BaseType","UnionType","factory","options","Union","map","t","schema","IntersactionType","Intersect","DiscriminatedUnionType","key"],"mappings":"AAAA,SAKEA,IAAI,QAEC,oBAAmB;AAE1B,SACEC,kBAAkB,QAGb,oCAAmC;AAC1C,SAASC,QAAQ,QAA0B,YAAW;AAGtD,OAAO,MAAMC,kBAGHD;IACR,OAAOE,QAGL,GAAGC,OAAU,EAAE;QACf,OAAO,IAAIF,UACTH,KAAKM,KAAK,CAACD,QAAQE,GAAG,CAAC,CAACC,IAAMA,EAAEC,MAAM,IACtC;YACEJ;QACF;IAEJ;AACF;AAEA,OAAO,MAAMK,yBAGHR;IAKR,OAAOE,QAGL,GAAGC,OAAU,EAAE;QACf,OAAO,IAAIK,iBACTV,KAAKW,SAAS,CAACN,QAAQE,GAAG,CAAC,CAACC,IAAMA,EAAEC,MAAM,IAC1C;YAAEJ;QAAQ;IAEd;AACF;AAMA,OAAO,MAAMO,+BAKHV;IAQR,OAAOE,QAOLS,GAAM,EAAE,GAAGR,OAAU,EAAE;QACvB,OAAO,IAAIO,uBACTX,mBAAmBY,KAAKR,QAAQE,GAAG,CAAC,CAACC,IAAMA,EAAEC,MAAM,IACnD;YAAEI;YAAKR;QAAQ;IAEnB;AACF"}
package/package.json CHANGED
@@ -12,21 +12,21 @@
12
12
  "default": "./dist/compiler.js",
13
13
  "types": "./src/compiler.ts"
14
14
  },
15
+ "./runtime": {
16
+ "bun": "./src/runtime.ts",
17
+ "default": "./dist/runtime.js",
18
+ "types": "./src/runtime.ts"
19
+ },
15
20
  "./temporal": {
16
21
  "bun": "./src/temporal.ts",
17
22
  "default": "./dist/temporal.js",
18
23
  "types": "./src/temporal.ts"
19
24
  }
20
25
  },
21
- "peerDependencies": {
22
- "@sinclair/typebox": "^0.34.13",
23
- "temporal-polyfill": "^0.2.5",
24
- "@nmtjs/common": "0.5.3"
25
- },
26
- "devDependencies": {
26
+ "dependencies": {
27
27
  "@sinclair/typebox": "^0.34.13",
28
28
  "temporal-polyfill": "^0.2.5",
29
- "@nmtjs/common": "0.5.3"
29
+ "@nmtjs/common": "0.6.0"
30
30
  },
31
31
  "files": [
32
32
  "src",
@@ -35,7 +35,7 @@
35
35
  "LICENSE.md",
36
36
  "README.md"
37
37
  ],
38
- "version": "0.5.3",
38
+ "version": "0.6.0",
39
39
  "scripts": {
40
40
  "build": "neemata-build -p neutral --root=./src './**/*.ts'",
41
41
  "type-check": "tsc --noEmit"