@nmtjs/type 0.6.5 → 0.7.1

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 (76) hide show
  1. package/dist/index.js +34 -31
  2. package/dist/index.js.map +1 -1
  3. package/dist/temporal.js +0 -1
  4. package/dist/temporal.js.map +1 -1
  5. package/dist/types/any.js +4 -4
  6. package/dist/types/any.js.map +1 -1
  7. package/dist/types/array.js +21 -23
  8. package/dist/types/array.js.map +1 -1
  9. package/dist/types/base.js +65 -66
  10. package/dist/types/base.js.map +1 -1
  11. package/dist/types/boolean.js +4 -4
  12. package/dist/types/boolean.js.map +1 -1
  13. package/dist/types/custom.js +9 -8
  14. package/dist/types/custom.js.map +1 -1
  15. package/dist/types/date.js +8 -13
  16. package/dist/types/date.js.map +1 -1
  17. package/dist/types/enum.js +7 -16
  18. package/dist/types/enum.js.map +1 -1
  19. package/dist/types/literal.js +7 -6
  20. package/dist/types/literal.js.map +1 -1
  21. package/dist/types/never.js +4 -4
  22. package/dist/types/never.js.map +1 -1
  23. package/dist/types/number.js +39 -92
  24. package/dist/types/number.js.map +1 -1
  25. package/dist/types/object.js +42 -31
  26. package/dist/types/object.js.map +1 -1
  27. package/dist/types/string.js +49 -47
  28. package/dist/types/string.js.map +1 -1
  29. package/dist/types/temporal.js +75 -41
  30. package/dist/types/temporal.js.map +1 -1
  31. package/dist/types/union.js +26 -18
  32. package/dist/types/union.js.map +1 -1
  33. package/package.json +7 -19
  34. package/src/index.ts +22 -24
  35. package/src/temporal.ts +1 -1
  36. package/src/types/any.ts +5 -3
  37. package/src/types/array.ts +37 -22
  38. package/src/types/base.ts +149 -81
  39. package/src/types/boolean.ts +5 -3
  40. package/src/types/custom.ts +59 -26
  41. package/src/types/date.ts +13 -17
  42. package/src/types/enum.ts +12 -22
  43. package/src/types/literal.ts +9 -6
  44. package/src/types/never.ts +5 -3
  45. package/src/types/number.ts +43 -90
  46. package/src/types/object.ts +45 -37
  47. package/src/types/string.ts +68 -37
  48. package/src/types/temporal.ts +69 -53
  49. package/src/types/union.ts +54 -50
  50. package/dist/compiler.js +0 -55
  51. package/dist/compiler.js.map +0 -1
  52. package/dist/formats.js +0 -127
  53. package/dist/formats.js.map +0 -1
  54. package/dist/inference.js +0 -1
  55. package/dist/inference.js.map +0 -1
  56. package/dist/parse.js +0 -145
  57. package/dist/parse.js.map +0 -1
  58. package/dist/runtime.js +0 -73
  59. package/dist/runtime.js.map +0 -1
  60. package/dist/schemas/default.js +0 -6
  61. package/dist/schemas/default.js.map +0 -1
  62. package/dist/schemas/discriminated-union.js +0 -9
  63. package/dist/schemas/discriminated-union.js.map +0 -1
  64. package/dist/schemas/nullable.js +0 -11
  65. package/dist/schemas/nullable.js.map +0 -1
  66. package/dist/utils.js +0 -1
  67. package/dist/utils.js.map +0 -1
  68. package/src/compiler.ts +0 -100
  69. package/src/formats.ts +0 -182
  70. package/src/inference.ts +0 -128
  71. package/src/parse.ts +0 -217
  72. package/src/runtime.ts +0 -137
  73. package/src/schemas/default.ts +0 -12
  74. package/src/schemas/discriminated-union.ts +0 -49
  75. package/src/schemas/nullable.ts +0 -20
  76. package/src/utils.ts +0 -24
@@ -1,97 +1,44 @@
1
- import { Type } from '@sinclair/typebox';
1
+ import { gt, gte, int, lt, lte, number, regex, string } from "@zod/mini";
2
2
  import { BaseType } from "./base.js";
3
+ import { CustomType, TransformType } from "./custom.js";
3
4
  export class NumberType extends BaseType {
4
- static factory(options = {}) {
5
- return new NumberType(Type.Number(options), {
6
- options
7
- });
8
- }
9
- positive() {
10
- return this.min(0, true);
11
- }
12
- negative() {
13
- return this.max(0, true);
14
- }
15
- max(value, exclusive) {
16
- return NumberType.factory({
17
- ...this.props.options,
18
- maximum: value,
19
- ...!exclusive ? {} : {
20
- exclusiveMaximum: value
21
- }
22
- });
23
- }
24
- min(value, exclusive) {
25
- return NumberType.factory({
26
- ...this.props.options,
27
- minimum: value,
28
- ...!exclusive ? {} : {
29
- exclusiveMinimum: value
30
- }
31
- });
32
- }
5
+ static factory(...checks) {
6
+ return new NumberType({
7
+ encodedZodType: number().check(...checks),
8
+ params: { checks }
9
+ });
10
+ }
11
+ positive() {
12
+ return NumberType.factory(...this.params.checks, gte(0));
13
+ }
14
+ negative() {
15
+ return NumberType.factory(...this.params.checks, lte(0));
16
+ }
17
+ lt(value) {
18
+ return NumberType.factory(...this.params.checks, lt(value));
19
+ }
20
+ lte(value) {
21
+ return NumberType.factory(...this.params.checks, lte(value));
22
+ }
23
+ gte(value) {
24
+ return NumberType.factory(...this.params.checks, gte(value));
25
+ }
26
+ gt(value) {
27
+ return NumberType.factory(...this.params.checks, gt(value));
28
+ }
33
29
  }
34
- export class IntegerType extends BaseType {
35
- static factory(options = {}) {
36
- return new IntegerType(Type.Integer(options), {
37
- options
38
- });
39
- }
40
- positive() {
41
- return this.min(0, true);
42
- }
43
- negative() {
44
- return this.max(0, true);
45
- }
46
- max(value, exclusive) {
47
- return IntegerType.factory({
48
- ...this.props.options,
49
- maximum: value,
50
- ...!exclusive ? {} : {
51
- exclusiveMaximum: value
52
- }
53
- });
54
- }
55
- min(value, exclusive) {
56
- return IntegerType.factory({
57
- ...this.props.options,
58
- minimum: value,
59
- ...!exclusive ? {} : {
60
- exclusiveMinimum: value
61
- }
62
- });
63
- }
30
+ export class IntegerType extends NumberType {
31
+ static factory(...checks) {
32
+ return NumberType.factory(...checks, int());
33
+ }
64
34
  }
65
- export class BigIntType extends BaseType {
66
- static factory(options = {}) {
67
- return new BigIntType(Type.BigInt(options), {
68
- options
69
- }, {
70
- encode: (value)=>`${value}`
71
- });
72
- }
73
- positive() {
74
- return this.min(0n, true);
75
- }
76
- negative() {
77
- return this.max(0n, true);
78
- }
79
- max(value, exclusive) {
80
- return BigIntType.factory({
81
- ...this.props.options,
82
- maximum: value,
83
- ...!exclusive ? {} : {
84
- exclusiveMaximum: value
85
- }
86
- });
87
- }
88
- min(value, exclusive) {
89
- return BigIntType.factory({
90
- ...this.props.options,
91
- minimum: value,
92
- ...!exclusive ? {} : {
93
- exclusiveMinimum: value
94
- }
95
- });
96
- }
35
+ export class BigIntType extends TransformType {
36
+ static factory() {
37
+ return CustomType.factory({
38
+ decode: (value) => BigInt(value),
39
+ encode: (value) => value.toString(),
40
+ type: string().check(regex(/^-?\d+$/)),
41
+ error: "Invalid bigint format"
42
+ });
43
+ }
97
44
  }
@@ -1 +1 @@
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
+ {"mappings":"AAAA,SAEE,IACA,KACA,KACA,IACA,KACA,QACA,OACA,cAGK,WAAW;AAClB,SAAS,gBAAgB,WAAW;AACpC,SAAS,YAAY,qBAAqB,aAAa;AAIvD,OAAO,MAAM,mBAAmB,SAG9B;CACA,OAAO,QAAQ,GAAG,QAAiB;AACjC,SAAO,IAAI,WAAW;GACpB,gBAAgB,QAAQ,CAAC,MAAM,GAAG,OAAO;GACzC,QAAQ,EAAE,OAAQ;EACnB;CACF;CAED,WAAW;AACT,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,IAAI,EAAE,CAAC;CACzD;CAED,WAAW;AACT,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,IAAI,EAAE,CAAC;CACzD;CAED,GAAGA,OAAe;AAChB,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,GAAG,MAAM,CAAC;CAC5D;CAED,IAAIA,OAAe;AACjB,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,IAAI,MAAM,CAAC;CAC7D;CAED,IAAIA,OAAe;AACjB,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,IAAI,MAAM,CAAC;CAC7D;CAED,GAAGA,OAAe;AAChB,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,GAAG,MAAM,CAAC;CAC5D;AACF;AAED,OAAO,MAAM,oBAAoB,WAAW;CAC1C,OAAO,QAAQ,GAAG,QAAiB;AACjC,SAAO,WAAW,QAAQ,GAAG,QAAQ,KAAK,CAAC;CAC5C;AACF;AAED,OAAO,MAAM,mBAAmB,cAA6C;CAC3E,OAAO,UAAU;AACf,SAAO,WAAW,QAAuC;GACvD,QAAQ,CAAC,UAAU,OAAO,MAAM;GAChC,QAAQ,CAAC,UAAU,MAAM,UAAU;GACnC,MAAM,QAAQ,CAAC,MAAM,MAAM,UAAU,CAAC;GACtC,OAAO;EACR,EAAC;CACH;AACF","names":["value: number"],"sources":["src/types/number.ts"],"sourcesContent":["import {\n type core,\n gt,\n gte,\n int,\n lt,\n lte,\n number,\n regex,\n string,\n type ZodMiniNumber,\n type ZodMiniString,\n} from '@zod/mini'\nimport { BaseType } from './base.ts'\nimport { CustomType, TransformType } from './custom.ts'\n\ntype Check = core.CheckFn<number> | core.$ZodCheck<number>\n\nexport class NumberType extends BaseType<\n ZodMiniNumber<number>,\n ZodMiniNumber<number>\n> {\n static factory(...checks: Check[]) {\n return new NumberType({\n encodedZodType: number().check(...checks),\n params: { checks },\n })\n }\n\n positive() {\n return NumberType.factory(...this.params.checks, gte(0))\n }\n\n negative() {\n return NumberType.factory(...this.params.checks, lte(0))\n }\n\n lt(value: number) {\n return NumberType.factory(...this.params.checks, lt(value))\n }\n\n lte(value: number) {\n return NumberType.factory(...this.params.checks, lte(value))\n }\n\n gte(value: number) {\n return NumberType.factory(...this.params.checks, gte(value))\n }\n\n gt(value: number) {\n return NumberType.factory(...this.params.checks, gt(value))\n }\n}\n\nexport class IntegerType extends NumberType {\n static factory(...checks: Check[]) {\n return NumberType.factory(...checks, int())\n }\n}\n\nexport class BigIntType extends TransformType<bigint, ZodMiniString<string>> {\n static factory() {\n return CustomType.factory<bigint, ZodMiniString<string>>({\n decode: (value) => BigInt(value),\n encode: (value) => value.toString(),\n type: string().check(regex(/^-?\\d+$/)),\n error: 'Invalid bigint format',\n })\n }\n}\n"],"version":3}
@@ -1,49 +1,60 @@
1
- import { Type } from '@sinclair/typebox';
1
+ import { object, record, strictObject } from "@zod/mini";
2
2
  import { BaseType } from "./base.js";
3
3
  import { EnumType } from "./enum.js";
4
4
  export class ObjectType extends BaseType {
5
- static factory(properties, options = {}) {
6
- const schemaProperties = {};
7
- for(const key in properties){
8
- schemaProperties[key] = properties[key].schema;
9
- }
10
- return new ObjectType(Type.Object(schemaProperties, options), {
11
- properties
12
- });
13
- }
5
+ static factory(properties) {
6
+ const encodeProperties = {};
7
+ const decodeProperties = {};
8
+ for (const key in properties) {
9
+ encodeProperties[key] = properties[key].encodedZodType;
10
+ decodeProperties[key] = properties[key].decodedZodType;
11
+ }
12
+ return new ObjectType({
13
+ encodedZodType: object(encodeProperties),
14
+ decodedZodType: object(decodeProperties),
15
+ props: { properties }
16
+ });
17
+ }
14
18
  }
15
19
  export class RecordType extends BaseType {
16
- static factory(key, element, options = {}) {
17
- return new RecordType(Type.Record(key.schema, element.schema, options));
18
- }
20
+ static factory(key, element) {
21
+ return new RecordType({
22
+ encodedZodType: record(key.encodedZodType, element.encodedZodType),
23
+ decodedZodType: record(key.decodedZodType, element.decodedZodType),
24
+ props: {
25
+ key,
26
+ element
27
+ }
28
+ });
29
+ }
19
30
  }
20
31
  export function keyof(type) {
21
- return EnumType.factory(Object.keys(type.props.properties));
32
+ return EnumType.factory(Object.keys(type.props.properties));
22
33
  }
23
34
  export function pick(source, pick) {
24
- const properties = Object.fromEntries(Object.entries(source.props.properties).filter(([key])=>pick[key]));
25
- return ObjectType.factory(properties);
35
+ const properties = Object.fromEntries(Object.entries(source.props.properties).filter(([key]) => pick[key]));
36
+ return ObjectType.factory(properties);
26
37
  }
27
38
  export function omit(source, omit) {
28
- const properties = Object.fromEntries(Object.entries(source.props.properties).filter(([key])=>!omit[key]));
29
- return ObjectType.factory(properties);
39
+ const properties = Object.fromEntries(Object.entries(source.props.properties).filter(([key]) => !omit[key]));
40
+ return ObjectType.factory(properties);
30
41
  }
31
42
  export function extend(object1, properties) {
32
- return ObjectType.factory({
33
- ...object1.props.properties,
34
- ...properties
35
- });
43
+ return ObjectType.factory({
44
+ ...object1.props.properties,
45
+ ...properties
46
+ });
36
47
  }
37
48
  export function merge(object1, object2) {
38
- return ObjectType.factory({
39
- ...object1.props.properties,
40
- ...object2.props.properties
41
- });
49
+ return ObjectType.factory({
50
+ ...object1.props.properties,
51
+ ...object2.props.properties
52
+ });
42
53
  }
43
54
  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, {});
55
+ const properties = {};
56
+ for (const [key, value] of Object.entries(object.props.properties)) {
57
+ properties[key] = value.optional();
58
+ }
59
+ return ObjectType.factory(properties);
49
60
  }
@@ -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 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
+ {"mappings":"AAAA,SAEE,QACA,QACA,oBAGK,WAAW;AAElB,SAAS,gBAAqD,WAAW;AACzE,SAAS,gBAAgB,WAAW;AAMpC,OAAO,MAAM,mBAAmD,SAI9D;CACA,OAAO,QAAwCA,YAAe;EAC5D,MAAM,mBAAmB,CAAE;EAG3B,MAAM,mBAAmB,CAAE;AAI3B,OAAK,MAAM,OAAO,YAAY;AAC5B,oBAAiB,OAAO,WAAW,KAAK;AACxC,oBAAiB,OAAO,WAAW,KAAK;EACzC;AAED,SAAO,IAAI,WAAc;GACvB,gBAAgB,OAAO,iBAAiB;GACxC,gBAAgB,OAAO,iBAAiB;GACxC,OAAO,EAAE,WAAY;EACtB;CACF;AACF;AAED,OAAO,MAAM,mBAGH,SAGR;CACA,OAAO,QAGLC,KAAQC,SAAY;AACpB,SAAO,IAAI,WAAiB;GAC1B,gBAAgB,OACb,IAAY,gBACb,QAAQ,eACT;GACD,gBAAgB,OACb,IAAY,gBACb,QAAQ,eACT;GACD,OAAO;IAAE;IAAK;GAAS;EACxB;CACF;AACF;AAED,OAAO,SAAS,MACdC,MAGA;AACA,QAAO,SAAS,QAAQ,OAAO,KAAK,KAAK,MAAM,WAAW,CAAQ;AACnE;AAED,OAAO,SAAS,KAIdC,QACAC,MAOC;CACD,MAAM,aAAa,OAAO,YACxB,OAAO,QAAQ,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,KAAK,KAAK,CACrE;AACD,QAAO,WAAW,QAAQ,WAAW;AACtC;AAED,OAAO,SAAS,KAIdD,QACAE,MAKC;CACD,MAAM,aAAa,OAAO,YACxB,OAAO,QAAQ,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,KAAK,KAAK,CACtE;AACD,QAAO,WAAW,QAAQ,WAAW;AACtC;AAED,OAAO,SAAS,OACdC,SACAC,YAOC;AACD,QAAO,WAAW,QAAQ;EACxB,GAAG,QAAQ,MAAM;EACjB,GAAG;CACJ,EAAC;AACH;AAED,OAAO,SAAS,MACdC,SACAC,SASC;AACD,QAAO,WAAW,QAAQ;EACxB,GAAG,QAAQ,MAAM;EACjB,GAAG,QAAQ,MAAM;CAClB,EAAC;AACH;AAED,OAAO,SAAS,QAIdC,QAGC;CACD,MAAM,aAAa,CAAE;AAErB,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,OAAO,MAAM,WAAW,EAAE;AAClE,aAAW,OAAO,MAAM,UAAU;CACnC;AAED,QAAO,WAAW,QAAQ,WAAW;AACtC","names":["properties: T","key: K","element: E","type: T","source: T","pick: P","omit: P","object1: T","properties: P","object1: T1","object2: T2","object: T"],"sources":["src/types/object.ts"],"sourcesContent":["import {\n type core,\n object,\n record,\n strictObject,\n type ZodMiniObject,\n type ZodMiniRecord,\n} from '@zod/mini'\n\nimport { BaseType, type BaseTypeAny, type OptionalType } from './base.ts'\nimport { EnumType } 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 ZodMiniObject<{ [K in keyof T]: T[K]['encodedZodType'] }, {}>,\n ZodMiniObject<{ [K in keyof T]: T[K]['decodedZodType'] }, {}>,\n { properties: T }\n> {\n static factory<T extends ObjectTypeProps = {}>(properties: T) {\n const encodeProperties = {} as {\n [K in keyof T]: T[K]['encodedZodType']\n }\n const decodeProperties = {} as {\n [K in keyof T]: T[K]['decodedZodType']\n }\n\n for (const key in properties) {\n encodeProperties[key] = properties[key].encodedZodType\n decodeProperties[key] = properties[key].decodedZodType\n }\n\n return new ObjectType<T>({\n encodedZodType: object(encodeProperties),\n decodedZodType: object(decodeProperties),\n props: { properties },\n })\n }\n}\n\nexport class RecordType<\n K extends LiteralType<string | number> | EnumType | StringType,\n E extends BaseType,\n> extends BaseType<\n ZodMiniRecord<K['encodedZodType'], E['encodedZodType']>,\n ZodMiniRecord<K['decodedZodType'], E['decodedZodType']>\n> {\n static factory<\n K extends LiteralType<string | number> | EnumType | StringType,\n E extends BaseType,\n >(key: K, element: E) {\n return new RecordType<K, E>({\n encodedZodType: record(\n (key as any).encodedZodType,\n element.encodedZodType,\n ),\n decodedZodType: record(\n (key as any).decodedZodType,\n element.decodedZodType,\n ),\n props: { key, element },\n })\n }\n}\n\nexport function keyof<T extends ObjectType>(\n type: T,\n): EnumType<\n core.utils.ToEnum<Extract<keyof T['props']['properties'], string>>\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]: OptionalType<P[K]>\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)\n}\n"],"version":3}
@@ -1,50 +1,52 @@
1
- import { Type } from '@sinclair/typebox';
1
+ import { cuid, cuid2, e164, email, emoji, ipv4, ipv6, jwt, maxLength, minLength, nanoid, regex, string, url, uuid } from "@zod/mini";
2
2
  import { BaseType } from "./base.js";
3
3
  export class StringType extends BaseType {
4
- static factory(options = {}) {
5
- return new StringType(Type.String(options), {
6
- options
7
- });
8
- }
9
- max(value) {
10
- return StringType.factory({
11
- ...this.props.options,
12
- maxLength: value
13
- });
14
- }
15
- min(value) {
16
- return StringType.factory({
17
- ...this.props.options,
18
- minLength: value
19
- });
20
- }
21
- format(format) {
22
- return StringType.factory({
23
- ...this.props.options,
24
- pattern: undefined,
25
- format
26
- });
27
- }
28
- pattern(pattern) {
29
- return StringType.factory({
30
- ...this.props.options,
31
- format: undefined,
32
- pattern
33
- });
34
- }
35
- email() {
36
- return this.format('email');
37
- }
38
- url() {
39
- return this.format('uri');
40
- }
41
- ipv4() {
42
- return this.format('ipv4');
43
- }
44
- ipv6() {
45
- return this.format('ipv6');
46
- }
47
- uuid() {
48
- return this.format('uuid');
49
- }
4
+ static factory(...checks) {
5
+ return new StringType({
6
+ encodedZodType: string().check(...checks),
7
+ params: { checks }
8
+ });
9
+ }
10
+ max(value) {
11
+ return StringType.factory(...this.params.checks, maxLength(value));
12
+ }
13
+ min(value) {
14
+ return StringType.factory(...this.params.checks, minLength(value));
15
+ }
16
+ pattern(pattern) {
17
+ return StringType.factory(...this.params.checks, regex(typeof pattern === "string" ? new RegExp(pattern) : pattern));
18
+ }
19
+ email(options) {
20
+ return StringType.factory(...this.params.checks, email(options));
21
+ }
22
+ url(options) {
23
+ return StringType.factory(...this.params.checks, url(options));
24
+ }
25
+ ipv4(options) {
26
+ return StringType.factory(...this.params.checks, ipv4(options));
27
+ }
28
+ ipv6(options) {
29
+ return StringType.factory(...this.params.checks, ipv6(options));
30
+ }
31
+ uuid(options) {
32
+ return StringType.factory(...this.params.checks, uuid(options));
33
+ }
34
+ emoji(options) {
35
+ return StringType.factory(...this.params.checks, emoji(options));
36
+ }
37
+ nanoid(options) {
38
+ return StringType.factory(...this.params.checks, nanoid(options));
39
+ }
40
+ cuid(options) {
41
+ return StringType.factory(...this.params.checks, cuid(options));
42
+ }
43
+ cuid2(options) {
44
+ return StringType.factory(...this.params.checks, cuid2(options));
45
+ }
46
+ e164(options) {
47
+ return StringType.factory(...this.params.checks, e164(options));
48
+ }
49
+ jwt(options) {
50
+ return StringType.factory(...this.params.checks, jwt(options));
51
+ }
50
52
  }
@@ -1 +1 @@
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"}
1
+ {"mappings":"AAAA,SAEE,MACA,OACA,MACA,OACA,OACA,MACA,MACA,KACA,WACA,WACA,QACA,OACA,QACA,KACA,YAEK,WAAW;AAElB,SAAS,gBAAgB,WAAW;AAIpC,OAAO,MAAM,mBAAmB,SAG9B;CACA,OAAO,QAAQ,GAAG,QAAiB;AACjC,SAAO,IAAI,WAAW;GACpB,gBAAgB,QAAQ,CAAC,MAAM,GAAG,OAAO;GACzC,QAAQ,EAAE,OAAQ;EACnB;CACF;CAED,IAAIA,OAAe;AACjB,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,UAAU,MAAM,CAAC;CACnE;CAED,IAAIA,OAAe;AACjB,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,UAAU,MAAM,CAAC;CACnE;CAED,QAAQC,SAA0B;AAChC,SAAO,WAAW,QAChB,GAAG,KAAK,OAAO,QACf,aAAa,YAAY,WAAW,IAAI,OAAO,WAAW,QAAQ,CACnE;CACF;CAED,MAAMC,SAAgC;AACpC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,MAAM,QAAQ,CAAC;CACjE;CAED,IAAIC,SAA8B;AAChC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,IAAI,QAAQ,CAAC;CAC/D;CAED,KAAKC,SAA+B;AAClC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,KAAK,QAAQ,CAAC;CAChE;CAED,KAAKC,SAA+B;AAClC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,KAAK,QAAQ,CAAC;CAChE;CAED,KAAKC,SAA+B;AAClC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,KAAK,QAAQ,CAAC;CAChE;CAED,MAAMC,SAAgC;AACpC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,MAAM,QAAQ,CAAC;CACjE;CAED,OAAOC,SAAiC;AACtC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,OAAO,QAAQ,CAAC;CAClE;CAED,KAAKC,SAA+B;AAClC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,KAAK,QAAQ,CAAC;CAChE;CAED,MAAMC,SAAgC;AACpC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,MAAM,QAAQ,CAAC;CACjE;CAED,KAAKC,SAA+B;AAClC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,KAAK,QAAQ,CAAC;CAChE;CAED,IAAIC,SAA8B;AAChC,SAAO,WAAW,QAAQ,GAAG,KAAK,OAAO,QAAQ,IAAI,QAAQ,CAAC;CAC/D;AACF","names":["value: number","pattern: string | RegExp","options?: core.$ZodEmailParams","options?: core.$ZodURLParams","options?: core.$ZodIPv4Params","options?: core.$ZodIPv6Params","options?: core.$ZodUUIDParams","options?: core.$ZodEmojiParams","options?: core.$ZodNanoIDParams","options?: core.$ZodCUIDParams","options?: core.$ZodCUID2Params","options?: core.$ZodE164Params","options?: core.$ZodJWTParams"],"sources":["src/types/string.ts"],"sourcesContent":["import {\n type core,\n cuid,\n cuid2,\n e164,\n email,\n emoji,\n ipv4,\n ipv6,\n jwt,\n maxLength,\n minLength,\n nanoid,\n regex,\n string,\n url,\n uuid,\n type ZodMiniString,\n} from '@zod/mini'\n\nimport { BaseType } from './base.ts'\n\ntype Check = core.CheckFn<string> | core.$ZodCheck<string>\n\nexport class StringType extends BaseType<\n ZodMiniString<string>,\n ZodMiniString<string>\n> {\n static factory(...checks: Check[]) {\n return new StringType({\n encodedZodType: string().check(...checks),\n params: { checks },\n })\n }\n\n max(value: number) {\n return StringType.factory(...this.params.checks, maxLength(value))\n }\n\n min(value: number) {\n return StringType.factory(...this.params.checks, minLength(value))\n }\n\n pattern(pattern: string | RegExp) {\n return StringType.factory(\n ...this.params.checks,\n regex(typeof pattern === 'string' ? new RegExp(pattern) : pattern),\n )\n }\n\n email(options?: core.$ZodEmailParams) {\n return StringType.factory(...this.params.checks, email(options))\n }\n\n url(options?: core.$ZodURLParams) {\n return StringType.factory(...this.params.checks, url(options))\n }\n\n ipv4(options?: core.$ZodIPv4Params) {\n return StringType.factory(...this.params.checks, ipv4(options))\n }\n\n ipv6(options?: core.$ZodIPv6Params) {\n return StringType.factory(...this.params.checks, ipv6(options))\n }\n\n uuid(options?: core.$ZodUUIDParams) {\n return StringType.factory(...this.params.checks, uuid(options))\n }\n\n emoji(options?: core.$ZodEmojiParams) {\n return StringType.factory(...this.params.checks, emoji(options))\n }\n\n nanoid(options?: core.$ZodNanoIDParams) {\n return StringType.factory(...this.params.checks, nanoid(options))\n }\n\n cuid(options?: core.$ZodCUIDParams) {\n return StringType.factory(...this.params.checks, cuid(options))\n }\n\n cuid2(options?: core.$ZodCUID2Params) {\n return StringType.factory(...this.params.checks, cuid2(options))\n }\n\n e164(options?: core.$ZodE164Params) {\n return StringType.factory(...this.params.checks, e164(options))\n }\n\n jwt(options?: core.$ZodJWTParams) {\n return StringType.factory(...this.params.checks, jwt(options))\n }\n}\n"],"version":3}
@@ -1,57 +1,91 @@
1
- import { Type } from '@sinclair/typebox';
2
- import { Temporal } from 'temporal-polyfill';
1
+ import { iso, regex, string } from "@zod/mini";
2
+ import { Temporal } from "temporal-polyfill";
3
3
  import { CustomType, TransformType } from "./custom.js";
4
- const createTemporalTransformer = (type, decode = (value)=>Temporal[type].from(value))=>{
5
- const encode = (value)=>value.toString({
6
- calendarName: 'never',
7
- smallestUnit: 'microsecond',
8
- timeZoneName: 'never'
9
- });
10
- return {
11
- decode,
12
- encode
13
- };
4
+ const createTemporalTransformer = (type, decode = (value) => Temporal[type].from(value)) => {
5
+ const encode = (value) => value.toString({
6
+ calendarName: "never",
7
+ smallestUnit: "microsecond",
8
+ timeZoneName: "never"
9
+ });
10
+ return {
11
+ decode,
12
+ encode
13
+ };
14
14
  };
15
15
  export class PlainDateType extends TransformType {
16
- static transformer = createTemporalTransformer('PlainDate');
17
- static factory() {
18
- return CustomType.factory(PlainDateType.transformer.decode, PlainDateType.transformer.encode, Type.String());
19
- }
16
+ static transformer = createTemporalTransformer("PlainDate");
17
+ static factory() {
18
+ return CustomType.factory({
19
+ decode: PlainDateType.transformer.decode,
20
+ encode: PlainDateType.transformer.encode,
21
+ type: iso.date(),
22
+ error: "Invalid date format"
23
+ });
24
+ }
20
25
  }
21
26
  export class PlainDateTimeType extends TransformType {
22
- static transformer = createTemporalTransformer('PlainDateTime');
23
- _encode = PlainDateTimeType.transformer.encode;
24
- static factory() {
25
- return CustomType.factory(PlainDateTimeType.transformer.decode, PlainDateTimeType.transformer.encode, Type.String());
26
- }
27
+ static transformer = createTemporalTransformer("PlainDateTime");
28
+ static factory() {
29
+ return CustomType.factory({
30
+ decode: PlainDateTimeType.transformer.decode,
31
+ encode: PlainDateTimeType.transformer.encode,
32
+ type: iso.datetime({ local: true }),
33
+ error: "Invalid datetime format"
34
+ });
35
+ }
27
36
  }
28
37
  export class ZonedDateTimeType extends TransformType {
29
- static transformer = createTemporalTransformer('ZonedDateTime', (value)=>Temporal.Instant.from(value).toZonedDateTimeISO('UTC'));
30
- static factory() {
31
- return CustomType.factory(ZonedDateTimeType.transformer.decode, ZonedDateTimeType.transformer.encode, Type.String());
32
- }
38
+ static transformer = createTemporalTransformer("ZonedDateTime", (value) => Temporal.Instant.from(value).toZonedDateTimeISO("UTC"));
39
+ static factory() {
40
+ return CustomType.factory({
41
+ decode: ZonedDateTimeType.transformer.decode,
42
+ encode: ZonedDateTimeType.transformer.encode,
43
+ type: iso.datetime({ local: true }),
44
+ error: "Invalid datetime format"
45
+ });
46
+ }
33
47
  }
34
48
  export class PlainTimeType extends TransformType {
35
- static transformer = createTemporalTransformer('PlainTime');
36
- static factory() {
37
- return CustomType.factory(PlainTimeType.transformer.decode, PlainTimeType.transformer.encode, Type.String());
38
- }
49
+ static transformer = createTemporalTransformer("PlainTime");
50
+ static factory() {
51
+ return CustomType.factory({
52
+ decode: PlainTimeType.transformer.decode,
53
+ encode: PlainTimeType.transformer.encode,
54
+ type: iso.time(),
55
+ error: "Invalid time format"
56
+ });
57
+ }
39
58
  }
40
59
  export class DurationType extends TransformType {
41
- static transformer = createTemporalTransformer('Duration');
42
- static factory() {
43
- return CustomType.factory(DurationType.transformer.decode, DurationType.transformer.encode, Type.String());
44
- }
60
+ static transformer = createTemporalTransformer("Duration");
61
+ static factory() {
62
+ return CustomType.factory({
63
+ decode: DurationType.transformer.decode,
64
+ encode: DurationType.transformer.encode,
65
+ type: iso.duration(),
66
+ error: "Invalid duration format"
67
+ });
68
+ }
45
69
  }
46
70
  export class PlainYearMonthType extends TransformType {
47
- static transformer = createTemporalTransformer('PlainYearMonth');
48
- static factory() {
49
- return CustomType.factory(PlainYearMonthType.transformer.decode, PlainYearMonthType.transformer.encode, Type.String());
50
- }
71
+ static transformer = createTemporalTransformer("PlainYearMonth");
72
+ static factory() {
73
+ return CustomType.factory({
74
+ decode: PlainYearMonthType.transformer.decode,
75
+ encode: PlainYearMonthType.transformer.encode,
76
+ type: string().check(regex(/^\d{4}-\d{2}$/)),
77
+ error: "Invalid year-month format"
78
+ });
79
+ }
51
80
  }
52
81
  export class PlainMonthDayType extends TransformType {
53
- static transformer = createTemporalTransformer('PlainMonthDay');
54
- static factory() {
55
- return CustomType.factory(PlainMonthDayType.transformer.decode, PlainMonthDayType.transformer.encode, Type.String());
56
- }
82
+ static transformer = createTemporalTransformer("PlainMonthDay");
83
+ static factory() {
84
+ return CustomType.factory({
85
+ decode: PlainMonthDayType.transformer.decode,
86
+ encode: PlainMonthDayType.transformer.encode,
87
+ type: string().check(regex(/^\d{2}-\d{2}$/)),
88
+ error: "Invalid month-day format"
89
+ });
90
+ }
57
91
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/types/temporal.ts"],"sourcesContent":["import { type TString, Type } from '@sinclair/typebox'\nimport { Temporal } from 'temporal-polyfill'\nimport { CustomType, TransformType } from './custom.ts'\n\ntype Types = Exclude<\n keyof typeof Temporal,\n 'Now' | 'Instant' | 'Calendar' | 'TimeZone'\n>\n\ntype TemporalTransformer<T extends Types> = {\n decode: (value: string) => ReturnType<(typeof Temporal)[T]['from']>\n encode: (value: ReturnType<(typeof Temporal)[T]['from']>) => string\n}\n\nconst createTemporalTransformer = <T extends Types>(\n type: T,\n decode = (value: string) => Temporal[type].from(value),\n) => {\n const encode = (value: ReturnType<(typeof Temporal)[T]['from']>) =>\n value.toString({\n calendarName: 'never',\n smallestUnit: 'microsecond',\n timeZoneName: 'never',\n })\n\n return {\n decode,\n encode,\n } as TemporalTransformer<T>\n}\n\nexport class PlainDateType extends TransformType<Temporal.PlainDate, TString> {\n static readonly transformer = createTemporalTransformer('PlainDate')\n\n static factory() {\n return CustomType.factory(\n PlainDateType.transformer.decode,\n PlainDateType.transformer.encode,\n Type.String(),\n )\n }\n}\n\nexport class PlainDateTimeType extends TransformType<\n Temporal.PlainDateTime,\n TString\n> {\n static readonly transformer = createTemporalTransformer('PlainDateTime')\n protected _encode = PlainDateTimeType.transformer.encode\n\n static factory() {\n return CustomType.factory(\n PlainDateTimeType.transformer.decode,\n PlainDateTimeType.transformer.encode,\n Type.String(),\n )\n }\n}\n\nexport class ZonedDateTimeType extends TransformType<\n Temporal.ZonedDateTime,\n TString\n> {\n static readonly transformer = createTemporalTransformer(\n 'ZonedDateTime',\n (value) => Temporal.Instant.from(value).toZonedDateTimeISO('UTC'),\n )\n\n static factory() {\n return CustomType.factory(\n ZonedDateTimeType.transformer.decode,\n ZonedDateTimeType.transformer.encode,\n Type.String(),\n )\n }\n}\n\nexport class PlainTimeType extends TransformType<Temporal.PlainTime, TString> {\n static readonly transformer = createTemporalTransformer('PlainTime')\n\n static factory() {\n return CustomType.factory(\n PlainTimeType.transformer.decode,\n PlainTimeType.transformer.encode,\n Type.String(),\n )\n }\n}\n\nexport class DurationType extends TransformType<Temporal.Duration, TString> {\n static readonly transformer = createTemporalTransformer('Duration')\n\n static factory() {\n return CustomType.factory(\n DurationType.transformer.decode,\n DurationType.transformer.encode,\n Type.String(),\n )\n }\n}\n\nexport class PlainYearMonthType extends TransformType<\n Temporal.PlainYearMonth,\n TString\n> {\n static readonly transformer = createTemporalTransformer('PlainYearMonth')\n\n static factory() {\n return CustomType.factory(\n PlainYearMonthType.transformer.decode,\n PlainYearMonthType.transformer.encode,\n Type.String(),\n )\n }\n}\n\nexport class PlainMonthDayType extends TransformType<\n Temporal.PlainMonthDay,\n TString\n> {\n static readonly transformer = createTemporalTransformer('PlainMonthDay')\n\n static factory() {\n return CustomType.factory(\n PlainMonthDayType.transformer.decode,\n PlainMonthDayType.transformer.encode,\n Type.String(),\n )\n }\n}\n"],"names":["Type","Temporal","CustomType","TransformType","createTemporalTransformer","type","decode","value","from","encode","toString","calendarName","smallestUnit","timeZoneName","PlainDateType","transformer","factory","String","PlainDateTimeType","_encode","ZonedDateTimeType","Instant","toZonedDateTimeISO","PlainTimeType","DurationType","PlainYearMonthType","PlainMonthDayType"],"mappings":"AAAA,SAAuBA,IAAI,QAAQ,oBAAmB;AACtD,SAASC,QAAQ,QAAQ,oBAAmB;AAC5C,SAASC,UAAU,EAAEC,aAAa,QAAQ,cAAa;AAYvD,MAAMC,4BAA4B,CAChCC,MACAC,SAAS,CAACC,QAAkBN,QAAQ,CAACI,KAAK,CAACG,IAAI,CAACD,MAAM;IAEtD,MAAME,SAAS,CAACF,QACdA,MAAMG,QAAQ,CAAC;YACbC,cAAc;YACdC,cAAc;YACdC,cAAc;QAChB;IAEF,OAAO;QACLP;QACAG;IACF;AACF;AAEA,OAAO,MAAMK,sBAAsBX;IACjC,OAAgBY,cAAcX,0BAA0B,aAAY;IAEpE,OAAOY,UAAU;QACf,OAAOd,WAAWc,OAAO,CACvBF,cAAcC,WAAW,CAACT,MAAM,EAChCQ,cAAcC,WAAW,CAACN,MAAM,EAChCT,KAAKiB,MAAM;IAEf;AACF;AAEA,OAAO,MAAMC,0BAA0Bf;IAIrC,OAAgBY,cAAcX,0BAA0B,iBAAgB;IAC9De,UAAUD,kBAAkBH,WAAW,CAACN,MAAM,CAAA;IAExD,OAAOO,UAAU;QACf,OAAOd,WAAWc,OAAO,CACvBE,kBAAkBH,WAAW,CAACT,MAAM,EACpCY,kBAAkBH,WAAW,CAACN,MAAM,EACpCT,KAAKiB,MAAM;IAEf;AACF;AAEA,OAAO,MAAMG,0BAA0BjB;IAIrC,OAAgBY,cAAcX,0BAC5B,iBACA,CAACG,QAAUN,SAASoB,OAAO,CAACb,IAAI,CAACD,OAAOe,kBAAkB,CAAC,QAC5D;IAED,OAAON,UAAU;QACf,OAAOd,WAAWc,OAAO,CACvBI,kBAAkBL,WAAW,CAACT,MAAM,EACpCc,kBAAkBL,WAAW,CAACN,MAAM,EACpCT,KAAKiB,MAAM;IAEf;AACF;AAEA,OAAO,MAAMM,sBAAsBpB;IACjC,OAAgBY,cAAcX,0BAA0B,aAAY;IAEpE,OAAOY,UAAU;QACf,OAAOd,WAAWc,OAAO,CACvBO,cAAcR,WAAW,CAACT,MAAM,EAChCiB,cAAcR,WAAW,CAACN,MAAM,EAChCT,KAAKiB,MAAM;IAEf;AACF;AAEA,OAAO,MAAMO,qBAAqBrB;IAChC,OAAgBY,cAAcX,0BAA0B,YAAW;IAEnE,OAAOY,UAAU;QACf,OAAOd,WAAWc,OAAO,CACvBQ,aAAaT,WAAW,CAACT,MAAM,EAC/BkB,aAAaT,WAAW,CAACN,MAAM,EAC/BT,KAAKiB,MAAM;IAEf;AACF;AAEA,OAAO,MAAMQ,2BAA2BtB;IAItC,OAAgBY,cAAcX,0BAA0B,kBAAiB;IAEzE,OAAOY,UAAU;QACf,OAAOd,WAAWc,OAAO,CACvBS,mBAAmBV,WAAW,CAACT,MAAM,EACrCmB,mBAAmBV,WAAW,CAACN,MAAM,EACrCT,KAAKiB,MAAM;IAEf;AACF;AAEA,OAAO,MAAMS,0BAA0BvB;IAIrC,OAAgBY,cAAcX,0BAA0B,iBAAgB;IAExE,OAAOY,UAAU;QACf,OAAOd,WAAWc,OAAO,CACvBU,kBAAkBX,WAAW,CAACT,MAAM,EACpCoB,kBAAkBX,WAAW,CAACN,MAAM,EACpCT,KAAKiB,MAAM;IAEf;AACF"}
1
+ {"mappings":"AAAA,SAAS,KAAK,OAAO,cAAkC,WAAW;AAClE,SAAS,gBAAgB,mBAAmB;AAC5C,SAAS,YAAY,qBAAqB,aAAa;AAYvD,MAAM,4BAA4B,CAChCA,MACA,SAAS,CAACC,UAAkB,SAAS,MAAM,KAAK,MAAM,KACnD;CACH,MAAM,SAAS,CAACC,UACd,MAAM,SAAS;EACb,cAAc;EACd,cAAc;EACd,cAAc;CACf,EAAC;AAEJ,QAAO;EACL;EACA;CACD;AACF;AAID,OAAO,MAAM,sBAAsB,cAGjC;CACA,OAAO,cAAc,0BAA0B,YAAY;CAE3D,OAAO,UAAU;AACf,SAAO,WAAW,QAAyC;GACzD,QAAQ,cAAc,YAAY;GAClC,QAAQ,cAAc,YAAY;GAClC,MAAM,IAAI,MAAM;GAChB,OAAO;EACR,EAAC;CACH;AACF;AAED,OAAO,MAAM,0BAA0B,cAGrC;CACA,OAAO,cAAc,0BAA0B,gBAAgB;CAE/D,OAAO,UAAU;AACf,SAAO,WAAW,QAA6C;GAC7D,QAAQ,kBAAkB,YAAY;GACtC,QAAQ,kBAAkB,YAAY;GACtC,MAAM,IAAI,SAAS,EAAE,OAAO,KAAM,EAAC;GACnC,OAAO;EACR,EAAC;CACH;AACF;AAED,OAAO,MAAM,0BAA0B,cAGrC;CACA,OAAO,cAAc,0BAA0B,iBAAiB,CAAC,UAC/D,SAAS,QAAQ,KAAK,MAAM,CAAC,mBAAmB,MAAM,CACvD;CAED,OAAO,UAAU;AACf,SAAO,WAAW,QAA6C;GAC7D,QAAQ,kBAAkB,YAAY;GACtC,QAAQ,kBAAkB,YAAY;GACtC,MAAM,IAAI,SAAS,EAAE,OAAO,KAAM,EAAC;GACnC,OAAO;EACR,EAAC;CACH;AACF;AAED,OAAO,MAAM,sBAAsB,cAGjC;CACA,OAAO,cAAc,0BAA0B,YAAY;CAE3D,OAAO,UAAU;AACf,SAAO,WAAW,QAAyC;GACzD,QAAQ,cAAc,YAAY;GAClC,QAAQ,cAAc,YAAY;GAClC,MAAM,IAAI,MAAM;GAChB,OAAO;EACR,EAAC;CACH;AACF;AAED,OAAO,MAAM,qBAAqB,cAGhC;CACA,OAAO,cAAc,0BAA0B,WAAW;CAE1D,OAAO,UAAU;AACf,SAAO,WAAW,QAAwC;GACxD,QAAQ,aAAa,YAAY;GACjC,QAAQ,aAAa,YAAY;GACjC,MAAM,IAAI,UAAU;GACpB,OAAO;EACR,EAAC;CACH;AACF;AAED,OAAO,MAAM,2BAA2B,cAGtC;CACA,OAAO,cAAc,0BAA0B,iBAAiB;CAEhE,OAAO,UAAU;AACf,SAAO,WAAW,QAA8C;GAC9D,QAAQ,mBAAmB,YAAY;GACvC,QAAQ,mBAAmB,YAAY;GACvC,MAAM,QAAQ,CAAC,MAAM,MAAM,gBAAgB,CAAC;GAC5C,OAAO;EACR,EAAC;CACH;AACF;AAED,OAAO,MAAM,0BAA0B,cAGrC;CACA,OAAO,cAAc,0BAA0B,gBAAgB;CAE/D,OAAO,UAAU;AACf,SAAO,WAAW,QAA6C;GAC7D,QAAQ,kBAAkB,YAAY;GACtC,QAAQ,kBAAkB,YAAY;GACtC,MAAM,QAAQ,CAAC,MAAM,MAAM,gBAAgB,CAAC;GAC5C,OAAO;EACR,EAAC;CACH;AACF","names":["type: T","value: string","value: ReturnType<(typeof Temporal)[T]['from']>"],"sources":["src/types/temporal.ts"],"sourcesContent":["import { iso, regex, string, type ZodMiniString } from '@zod/mini'\nimport { Temporal } from 'temporal-polyfill'\nimport { CustomType, TransformType } from './custom.ts'\n\ntype Types = Exclude<\n keyof typeof Temporal,\n 'Now' | 'Instant' | 'Calendar' | 'TimeZone'\n>\n\ntype TemporalTransformer<T extends Types> = {\n decode: (value: string) => ReturnType<(typeof Temporal)[T]['from']>\n encode: (value: ReturnType<(typeof Temporal)[T]['from']>) => string\n}\n\nconst createTemporalTransformer = <T extends Types>(\n type: T,\n decode = (value: string) => Temporal[type].from(value),\n) => {\n const encode = (value: ReturnType<(typeof Temporal)[T]['from']>) =>\n value.toString({\n calendarName: 'never',\n smallestUnit: 'microsecond',\n timeZoneName: 'never',\n })\n\n return {\n decode,\n encode,\n } as TemporalTransformer<T>\n}\n\ntype EncodedType = ZodMiniString<string>\n\nexport class PlainDateType extends TransformType<\n Temporal.PlainDate,\n EncodedType\n> {\n static transformer = createTemporalTransformer('PlainDate')\n\n static factory() {\n return CustomType.factory<Temporal.PlainDate, EncodedType>({\n decode: PlainDateType.transformer.decode,\n encode: PlainDateType.transformer.encode,\n type: iso.date(),\n error: 'Invalid date format',\n })\n }\n}\n\nexport class PlainDateTimeType extends TransformType<\n Temporal.PlainDateTime,\n EncodedType\n> {\n static transformer = createTemporalTransformer('PlainDateTime')\n\n static factory() {\n return CustomType.factory<Temporal.PlainDateTime, EncodedType>({\n decode: PlainDateTimeType.transformer.decode,\n encode: PlainDateTimeType.transformer.encode,\n type: iso.datetime({ local: true }),\n error: 'Invalid datetime format',\n })\n }\n}\n\nexport class ZonedDateTimeType extends TransformType<\n Temporal.ZonedDateTime,\n EncodedType\n> {\n static transformer = createTemporalTransformer('ZonedDateTime', (value) =>\n Temporal.Instant.from(value).toZonedDateTimeISO('UTC'),\n )\n\n static factory() {\n return CustomType.factory<Temporal.ZonedDateTime, EncodedType>({\n decode: ZonedDateTimeType.transformer.decode,\n encode: ZonedDateTimeType.transformer.encode,\n type: iso.datetime({ local: true }),\n error: 'Invalid datetime format',\n })\n }\n}\n\nexport class PlainTimeType extends TransformType<\n Temporal.PlainTime,\n EncodedType\n> {\n static transformer = createTemporalTransformer('PlainTime')\n\n static factory() {\n return CustomType.factory<Temporal.PlainTime, EncodedType>({\n decode: PlainTimeType.transformer.decode,\n encode: PlainTimeType.transformer.encode,\n type: iso.time(),\n error: 'Invalid time format',\n })\n }\n}\n\nexport class DurationType extends TransformType<\n Temporal.Duration,\n EncodedType\n> {\n static transformer = createTemporalTransformer('Duration')\n\n static factory() {\n return CustomType.factory<Temporal.Duration, EncodedType>({\n decode: DurationType.transformer.decode,\n encode: DurationType.transformer.encode,\n type: iso.duration(),\n error: 'Invalid duration format',\n })\n }\n}\n\nexport class PlainYearMonthType extends TransformType<\n Temporal.PlainYearMonth,\n EncodedType\n> {\n static transformer = createTemporalTransformer('PlainYearMonth')\n\n static factory() {\n return CustomType.factory<Temporal.PlainYearMonth, EncodedType>({\n decode: PlainYearMonthType.transformer.decode,\n encode: PlainYearMonthType.transformer.encode,\n type: string().check(regex(/^\\d{4}-\\d{2}$/)),\n error: 'Invalid year-month format',\n })\n }\n}\n\nexport class PlainMonthDayType extends TransformType<\n Temporal.PlainMonthDay,\n EncodedType\n> {\n static transformer = createTemporalTransformer('PlainMonthDay')\n\n static factory() {\n return CustomType.factory<Temporal.PlainMonthDay, EncodedType>({\n decode: PlainMonthDayType.transformer.decode,\n encode: PlainMonthDayType.transformer.encode,\n type: string().check(regex(/^\\d{2}-\\d{2}$/)),\n error: 'Invalid month-day format',\n })\n }\n}\n"],"version":3}
@@ -1,25 +1,33 @@
1
- import { Type } from '@sinclair/typebox';
2
- import { DiscriminatedUnion } from "../schemas/discriminated-union.js";
1
+ import { discriminatedUnion, intersection, union } from "@zod/mini";
3
2
  import { BaseType } from "./base.js";
4
3
  export class UnionType extends BaseType {
5
- static factory(...options) {
6
- return new UnionType(Type.Union(options.map((t)=>t.schema)), {
7
- options
8
- });
9
- }
4
+ static factory(...options) {
5
+ return new UnionType({
6
+ encodedZodType: union(options.map((t) => t.encodedZodType)),
7
+ decodedZodType: union(options.map((t) => t.decodedZodType)),
8
+ props: { options }
9
+ });
10
+ }
10
11
  }
11
12
  export class IntersactionType extends BaseType {
12
- static factory(...options) {
13
- return new IntersactionType(Type.Intersect(options.map((t)=>t.schema)), {
14
- options
15
- });
16
- }
13
+ static factory(...options) {
14
+ const [first, second] = options;
15
+ return new IntersactionType({
16
+ encodedZodType: intersection(first.encodedZodType, second.encodedZodType),
17
+ decodedZodType: intersection(first.decodedZodType, second.decodedZodType),
18
+ props: { options }
19
+ });
20
+ }
17
21
  }
18
22
  export class DiscriminatedUnionType extends BaseType {
19
- static factory(key, ...options) {
20
- return new DiscriminatedUnionType(DiscriminatedUnion(key, options.map((t)=>t.schema)), {
21
- key,
22
- options
23
- });
24
- }
23
+ static factory(key, ...options) {
24
+ return new DiscriminatedUnionType({
25
+ encodedZodType: discriminatedUnion(options.map((t) => t.encodedZodType)),
26
+ decodedZodType: discriminatedUnion(options.map((t) => t.decodedZodType)),
27
+ props: {
28
+ key,
29
+ options
30
+ }
31
+ });
32
+ }
25
33
  }