@nmtjs/type 0.5.2 → 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 (64) 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 +0 -1
  17. package/dist/types/any.js.map +1 -1
  18. package/dist/types/array.js +0 -1
  19. package/dist/types/array.js.map +1 -1
  20. package/dist/types/base.js +4 -13
  21. package/dist/types/base.js.map +1 -1
  22. package/dist/types/boolean.js +0 -1
  23. package/dist/types/boolean.js.map +1 -1
  24. package/dist/types/custom.js +0 -1
  25. package/dist/types/custom.js.map +1 -1
  26. package/dist/types/date.js +9 -1
  27. package/dist/types/date.js.map +1 -1
  28. package/dist/types/enum.js +6 -4
  29. package/dist/types/enum.js.map +1 -1
  30. package/dist/types/literal.js +3 -2
  31. package/dist/types/literal.js.map +1 -1
  32. package/dist/types/never.js +0 -1
  33. package/dist/types/never.js.map +1 -1
  34. package/dist/types/number.js +2 -3
  35. package/dist/types/number.js.map +1 -1
  36. package/dist/types/object.js +31 -1
  37. package/dist/types/object.js.map +1 -1
  38. package/dist/types/string.js +0 -1
  39. package/dist/types/string.js.map +1 -1
  40. package/dist/types/union.js +8 -7
  41. package/dist/types/union.js.map +1 -1
  42. package/package.json +8 -8
  43. package/src/compiler.ts +36 -121
  44. package/src/index.ts +36 -119
  45. package/src/inference.ts +128 -0
  46. package/src/parse.ts +217 -0
  47. package/src/runtime.ts +137 -0
  48. package/src/schemas/default.ts +12 -0
  49. package/src/schemas/discriminated-union.ts +1 -1
  50. package/src/schemas/nullable.ts +0 -6
  51. package/src/temporal.ts +0 -1
  52. package/src/types/any.ts +2 -4
  53. package/src/types/array.ts +0 -11
  54. package/src/types/base.ts +45 -139
  55. package/src/types/boolean.ts +3 -10
  56. package/src/types/custom.ts +14 -13
  57. package/src/types/date.ts +13 -1
  58. package/src/types/enum.ts +12 -15
  59. package/src/types/literal.ts +3 -5
  60. package/src/types/never.ts +2 -4
  61. package/src/types/number.ts +18 -18
  62. package/src/types/object.ts +107 -42
  63. package/src/types/string.ts +8 -5
  64. package/src/types/union.ts +42 -77
package/dist/compiler.js CHANGED
@@ -1,66 +1,26 @@
1
1
  import { TypeCompiler } from '@sinclair/typebox/compiler';
2
- import { TransformDecode, TransformEncode, Value } from '@sinclair/typebox/value';
3
- import { IsDiscriminatedUnion } from "./schemas/discriminated-union.js";
4
- function _parse(schema, value) {
5
- return Value.Convert(schema, Value.Default(schema, Value.Clean(schema, Value.Clone(value))));
6
- }
7
- function _errors(errors) {
8
- const result = [];
9
- for (const error of errors){
10
- if (IsDiscriminatedUnion(error.schema)) {
11
- const discriminator = error.schema.discriminator;
12
- const discriminatorValue = error.value?.[discriminator];
13
- if (discriminatorValue !== undefined) {
14
- const variantSchema = error.schema.anyOf.find((schema)=>schema.properties[discriminator].const === discriminatorValue);
15
- if (variantSchema) {
16
- const propertiesSchemas = [];
17
- for(const element in variantSchema.properties){
18
- const propertySchema = variantSchema.properties[element];
19
- if (propertySchema !== variantSchema.properties[discriminator]) {
20
- propertiesSchemas.push(propertySchema);
21
- }
22
- }
23
- for (const iter of error.errors){
24
- for (const err of iter){
25
- if (!propertiesSchemas.includes(err.schema)) continue;
26
- result.push({
27
- path: err.path,
28
- message: err.message,
29
- value: err.value
30
- });
31
- }
32
- }
33
- continue;
34
- }
35
- }
36
- }
37
- result.push({
38
- path: error.path,
39
- message: error.message,
40
- value: error.value
41
- });
42
- for (const nestedError of error.errors){
43
- result.push(..._errors(nestedError));
44
- }
45
- }
46
- return result;
47
- }
2
+ import { TransformDecode, TransformEncode } from '@sinclair/typebox/value';
3
+ import { _applyDefaults, _parse, _traversErrors } from "./runtime.js";
48
4
  function compileType(type) {
49
- const { final: schema } = type;
5
+ const { schema } = type;
50
6
  const compiled = TypeCompiler.Compile(schema);
51
- const errors = (value)=>{
52
- return _errors(compiled.Errors(value));
53
- };
7
+ const check = (value)=>compiled.Check(value);
8
+ const applyDefaults = (value)=>_applyDefaults(schema, value);
9
+ const parse = (value, cloneOptions)=>_parse(schema, value, cloneOptions);
10
+ const errors = (value)=>_traversErrors(compiled.Errors(value));
11
+ const decode = TransformDecode.bind(null, schema, compiled.References());
12
+ const encode = TransformEncode.bind(null, schema, compiled.References());
54
13
  return {
55
- check: compiled.Check.bind(compiled),
56
- parse: _parse.bind(null, schema),
14
+ check,
15
+ parse,
57
16
  errors,
58
- decode: TransformDecode.bind(null, schema, compiled.References()),
59
- encode: TransformEncode.bind(null, schema, compiled.References())
17
+ applyDefaults,
18
+ decode,
19
+ encode
60
20
  };
61
21
  }
62
- export function compile(schema) {
63
- const compiled = compileType(schema);
22
+ export function compile(type) {
23
+ const compiled = compileType(type);
64
24
  function decodeSafe(val) {
65
25
  try {
66
26
  return {
@@ -93,26 +53,3 @@ export function compile(schema) {
93
53
  encodeSafe
94
54
  };
95
55
  }
96
- export var runtime;
97
- (function(runtime) {
98
- function parse(type, value) {
99
- return _parse(type.final, value);
100
- }
101
- runtime.parse = parse;
102
- function errors(type, value) {
103
- return _errors(Value.Errors(type.final, value));
104
- }
105
- runtime.errors = errors;
106
- function check(type, value) {
107
- return Value.Check(type.final, value);
108
- }
109
- runtime.check = check;
110
- function decode(type, value) {
111
- return TransformDecode(type.final, [], value);
112
- }
113
- runtime.decode = decode;
114
- function encode(type, value) {
115
- return TransformEncode(type.final, [], value);
116
- }
117
- runtime.encode = encode;
118
- })(runtime || (runtime = {}));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/compiler.ts"],"sourcesContent":["import type { TSchema } from '@sinclair/typebox'\nimport {\n TypeCompiler,\n type ValueErrorIterator,\n} from '@sinclair/typebox/compiler'\nimport {\n TransformDecode,\n TransformEncode,\n Value,\n} from '@sinclair/typebox/value'\nimport type { t } from './index.ts'\nimport { IsDiscriminatedUnion } from './schemas/discriminated-union.ts'\nimport type { BaseType } from './types/base.ts'\n\ntype ValidationError = {\n path: string\n message: string\n value: unknown\n}\n\nexport type Compiled<T extends BaseType = BaseType> = {\n check: (val: unknown) => boolean\n errors: (val: unknown) => ValidationError[]\n parse: (val: unknown) => unknown\n /**\n * Requires to `check` before calling\n */\n decode: (val: unknown) => t.infer.decoded<T>\n /**\n * Requires to `check` before calling\n */\n encode: (val: unknown) => t.infer.encoded<T>\n /**\n * Requires to `check` before calling\n */\n decodeSafe: (\n val: unknown,\n ) =>\n | { success: true; value: t.infer.decoded<T> }\n | { success: false; error: any }\n /**\n * Requires to `check` before calling\n */\n encodeSafe: (\n val: unknown,\n ) =>\n | { success: true; value: t.infer.encoded<T> }\n | { success: false; error: any }\n}\n\n// FIXME: this one is very slow\nfunction _parse(schema: TSchema, value: any) {\n // Clone -> Clean -> Default -> Convert\n return Value.Convert(\n schema,\n Value.Default(schema, Value.Clean(schema, Value.Clone(value))),\n )\n}\n\nfunction _errors(errors: ValueErrorIterator) {\n const result: ValidationError[] = []\n\n for (const error of errors) {\n if (IsDiscriminatedUnion(error.schema)) {\n const discriminator = error.schema.discriminator\n const discriminatorValue = error.value?.[discriminator]\n if (discriminatorValue !== undefined) {\n const variantSchema = error.schema.anyOf.find(\n (schema) =>\n schema.properties[discriminator].const === discriminatorValue,\n )\n if (variantSchema) {\n const propertiesSchemas: TSchema[] = []\n for (const element in variantSchema.properties) {\n const propertySchema = variantSchema.properties[element]\n if (propertySchema !== variantSchema.properties[discriminator]) {\n propertiesSchemas.push(propertySchema)\n }\n }\n\n for (const iter of error.errors) {\n for (const err of iter) {\n if (!propertiesSchemas.includes(err.schema)) continue\n result.push({\n path: err.path,\n message: err.message,\n value: err.value,\n })\n }\n }\n\n continue\n }\n }\n }\n\n result.push({\n path: error.path,\n message: error.message,\n value: error.value,\n })\n\n for (const nestedError of error.errors) {\n result.push(..._errors(nestedError))\n }\n }\n\n return result\n}\n\nfunction compileType(type: BaseType) {\n const { final: schema } = type\n const compiled = TypeCompiler.Compile(schema)\n const errors = (value) => {\n return _errors(compiled.Errors(value))\n }\n\n return {\n check: compiled.Check.bind(compiled),\n parse: _parse.bind(null, schema),\n errors,\n decode: TransformDecode.bind(null, schema, compiled.References()),\n encode: TransformEncode.bind(null, schema, compiled.References()),\n }\n}\n\nexport function compile<T extends BaseType>(schema: T): Compiled<T> {\n const compiled = compileType(schema)\n\n function decodeSafe(val: unknown) {\n try {\n return {\n success: true as const,\n value: compiled.decode(val),\n }\n } catch (error) {\n return { success: false as const, error }\n }\n }\n\n function encodeSafe(val: unknown) {\n try {\n return {\n success: true as const,\n value: compiled.encode(val),\n }\n } catch (error) {\n return { success: false as const, error }\n }\n }\n\n return {\n ...compiled,\n decodeSafe,\n encodeSafe,\n } as any\n}\n\nexport namespace runtime {\n export function parse(type: BaseType, value: any) {\n return _parse(type.final, value)\n }\n\n export function errors(type: BaseType, value: any): ValidationError[] {\n return _errors(Value.Errors(type.final, value))\n }\n\n export function check(type: BaseType, value: any): boolean {\n return Value.Check(type.final, value)\n }\n\n export function decode<T extends BaseType>(\n type: T,\n value: any,\n ): t.infer.decoded<T> {\n return TransformDecode(type.final, [], value)\n }\n\n export function encode<T extends BaseType>(\n type: T,\n value: any,\n ): t.infer.encoded<T> {\n return TransformEncode(type.final, [], value)\n }\n}\n"],"names":["TypeCompiler","TransformDecode","TransformEncode","Value","IsDiscriminatedUnion","_parse","schema","value","Convert","Default","Clean","Clone","_errors","errors","result","error","discriminator","discriminatorValue","undefined","variantSchema","anyOf","find","properties","const","propertiesSchemas","element","propertySchema","push","iter","err","includes","path","message","nestedError","compileType","type","final","compiled","Compile","Errors","check","Check","bind","parse","decode","References","encode","compile","decodeSafe","val","success","encodeSafe","runtime"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/compiler.ts"],"sourcesContent":["import { TypeCompiler } from '@sinclair/typebox/compiler'\nimport { TransformDecode, TransformEncode } from '@sinclair/typebox/value'\nimport type {\n StaticInputEncode,\n StaticOutputDecode,\n StaticOutputEncode,\n} from './inference.ts'\nimport {\n type CloneOptions,\n type ValidationError,\n _applyDefaults,\n _parse,\n _traversErrors,\n} from './runtime.ts'\nimport type { BaseType } from './types/base.ts'\n\nexport type Compiled<T extends BaseType = BaseType> = {\n check: (val: unknown) => val is StaticInputEncode<T['schema']>\n errors: (val: unknown) => ValidationError[]\n parse: (val: unknown, cloneOptions?: CloneOptions) => unknown\n applyDefaults: (val: unknown) => unknown\n /**\n * Requires to `check` before calling\n */\n decode: (val: unknown) => StaticOutputDecode<T['schema']>\n /**\n * Requires to `check` before calling\n */\n encode: (val: unknown) => StaticOutputEncode<T['schema']>\n /**\n * Requires to `check` before calling\n */\n decodeSafe: (\n val: unknown,\n ) =>\n | { success: true; value: StaticOutputDecode<T['schema']> }\n | { success: false; error: any }\n /**\n * Requires to `check` before calling\n */\n encodeSafe: (\n val: unknown,\n ) =>\n | { success: true; value: StaticOutputEncode<T['schema']> }\n | { success: false; error: any }\n}\n\nfunction compileType(type: BaseType) {\n const { schema } = type\n const compiled = TypeCompiler.Compile(schema)\n\n const check = (value: unknown) => compiled.Check(value)\n const applyDefaults = (value: unknown) => _applyDefaults(schema, value)\n const parse = (value: unknown, cloneOptions?: CloneOptions) =>\n _parse(schema, value, cloneOptions)\n const errors = (value: unknown) => _traversErrors(compiled.Errors(value))\n const decode = TransformDecode.bind(null, schema, compiled.References())\n const encode = TransformEncode.bind(null, schema, compiled.References())\n\n return {\n check,\n parse,\n errors,\n applyDefaults,\n decode,\n encode,\n }\n}\n\nexport function compile<T extends BaseType>(type: T): Compiled<T> {\n const compiled = compileType(type)\n\n function decodeSafe(val: unknown) {\n try {\n return {\n success: true as const,\n value: compiled.decode(val),\n }\n } catch (error) {\n return { success: false as const, error }\n }\n }\n\n function encodeSafe(val: unknown) {\n try {\n return {\n success: true as const,\n value: compiled.encode(val),\n }\n } catch (error) {\n return { success: false as const, error }\n }\n }\n\n return {\n ...compiled,\n decodeSafe,\n encodeSafe,\n } as any\n}\n"],"names":["TypeCompiler","TransformDecode","TransformEncode","_applyDefaults","_parse","_traversErrors","compileType","type","schema","compiled","Compile","check","value","Check","applyDefaults","parse","cloneOptions","errors","Errors","decode","bind","References","encode","compile","decodeSafe","val","success","error","encodeSafe"],"mappings":"AAAA,SAASA,YAAY,QAAQ,6BAA4B;AACzD,SAASC,eAAe,EAAEC,eAAe,QAAQ,0BAAyB;AAM1E,SAGEC,cAAc,EACdC,MAAM,EACNC,cAAc,QACT,eAAc;AAkCrB,SAASC,YAAYC,IAAc;IACjC,MAAM,EAAEC,MAAM,EAAE,GAAGD;IACnB,MAAME,WAAWT,aAAaU,OAAO,CAACF;IAEtC,MAAMG,QAAQ,CAACC,QAAmBH,SAASI,KAAK,CAACD;IACjD,MAAME,gBAAgB,CAACF,QAAmBT,eAAeK,QAAQI;IACjE,MAAMG,QAAQ,CAACH,OAAgBI,eAC7BZ,OAAOI,QAAQI,OAAOI;IACxB,MAAMC,SAAS,CAACL,QAAmBP,eAAeI,SAASS,MAAM,CAACN;IAClE,MAAMO,SAASlB,gBAAgBmB,IAAI,CAAC,MAAMZ,QAAQC,SAASY,UAAU;IACrE,MAAMC,SAASpB,gBAAgBkB,IAAI,CAAC,MAAMZ,QAAQC,SAASY,UAAU;IAErE,OAAO;QACLV;QACAI;QACAE;QACAH;QACAK;QACAG;IACF;AACF;AAEA,OAAO,SAASC,QAA4BhB,IAAO;IACjD,MAAME,WAAWH,YAAYC;IAE7B,SAASiB,WAAWC,GAAY;QAC9B,IAAI;YACF,OAAO;gBACLC,SAAS;gBACTd,OAAOH,SAASU,MAAM,CAACM;YACzB;QACF,EAAE,OAAOE,OAAO;YACd,OAAO;gBAAED,SAAS;gBAAgBC;YAAM;QAC1C;IACF;IAEA,SAASC,WAAWH,GAAY;QAC9B,IAAI;YACF,OAAO;gBACLC,SAAS;gBACTd,OAAOH,SAASa,MAAM,CAACG;YACzB;QACF,EAAE,OAAOE,OAAO;YACd,OAAO;gBAAED,SAAS;gBAAgBC;YAAM;QAC1C;IACF;IAEA,OAAO;QACL,GAAGlB,QAAQ;QACXe;QACAI;IACF;AACF"}
package/dist/index.js CHANGED
@@ -7,62 +7,38 @@ import { EnumType, ObjectEnumType } from "./types/enum.js";
7
7
  import { LiteralType } from "./types/literal.js";
8
8
  import { NeverType } from "./types/never.js";
9
9
  import { BigIntType, IntegerType, NumberType } from "./types/number.js";
10
- import { ObjectType, RecordType } from "./types/object.js";
10
+ import { ObjectType, RecordType, extend, keyof, merge, omit, partial, pick } from "./types/object.js";
11
11
  import { StringType } from "./types/string.js";
12
12
  import { DiscriminatedUnionType, IntersactionType, UnionType } from "./types/union.js";
13
- import { register } from "./formats.js";
14
- register();
15
13
  export * from "./schemas/nullable.js";
16
14
  export { BaseType } from "./types/base.js";
17
15
  export { ArrayType, BooleanType, CustomType, DateType, EnumType, LiteralType, IntegerType, NumberType, ObjectType, StringType, IntersactionType, UnionType, AnyType, NeverType, };
18
- export var t;
19
- (function(t) {
20
- t.never = NeverType.factory;
21
- t.boolean = BooleanType.factory;
22
- t.string = StringType.factory;
23
- t.number = NumberType.factory;
24
- t.integer = IntegerType.factory;
25
- t.bitint = BigIntType.factory;
26
- t.literal = LiteralType.factory;
27
- t.objectEnum = ObjectEnumType.factory;
28
- t.arrayEnum = EnumType.factory;
29
- t.date = DateType.factory;
30
- t.array = ArrayType.factory;
31
- t.object = ObjectType.factory;
32
- t.record = RecordType.factory;
33
- t.any = AnyType.factory;
34
- t.or = UnionType.factory;
35
- t.and = IntersactionType.factory;
36
- t.discriminatedUnion = DiscriminatedUnionType.factory;
37
- t.custom = CustomType.factory;
38
- t.keyof = (type)=>{
39
- return t.arrayEnum(Object.keys(type.props.properties));
40
- };
41
- t.pick = (source, pick)=>{
42
- const properties = Object.fromEntries(Object.entries(source.props.properties).filter(([key])=>pick[key]));
43
- return ObjectType.factory(properties);
44
- };
45
- t.omit = (source, omit)=>{
46
- const properties = Object.fromEntries(Object.entries(source.props.properties).filter(([key])=>!omit[key]));
47
- return ObjectType.factory(properties);
48
- };
49
- t.extend = (object1, properties)=>{
50
- return ObjectType.factory({
51
- ...object1.props.properties,
52
- ...properties
53
- });
54
- };
55
- t.merge = (object1, object2)=>{
56
- return ObjectType.factory({
57
- ...object1.props.properties,
58
- ...object2.props.properties
59
- });
60
- };
61
- t.partial = (object)=>{
62
- const properties = {};
63
- for (const [key, value] of Object.entries(object.props.properties)){
64
- properties[key] = value.optional();
65
- }
66
- return ObjectType.factory(properties, {});
67
- };
68
- })(t || (t = {}));
16
+ export var type;
17
+ (function(type) {
18
+ type.never = NeverType.factory;
19
+ type.boolean = BooleanType.factory;
20
+ type.string = StringType.factory;
21
+ type.number = NumberType.factory;
22
+ type.integer = IntegerType.factory;
23
+ type.bitint = BigIntType.factory;
24
+ type.literal = LiteralType.factory;
25
+ type.objectEnum = ObjectEnumType.factory;
26
+ type.arrayEnum = EnumType.factory;
27
+ type.date = DateType.factory;
28
+ type.array = ArrayType.factory;
29
+ type.record = RecordType.factory;
30
+ type.any = AnyType.factory;
31
+ type.or = UnionType.factory;
32
+ type.and = IntersactionType.factory;
33
+ type.discriminatedUnion = DiscriminatedUnionType.factory;
34
+ type.custom = CustomType.factory;
35
+ type.object = Object.assign(ObjectType.factory.bind(ObjectType), {
36
+ keyof,
37
+ partial,
38
+ merge,
39
+ omit,
40
+ extend,
41
+ pick
42
+ });
43
+ })(type || (type = {}));
44
+ export { type as t };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import type {\n StaticDecode,\n StaticEncode,\n TLiteralValue,\n} from '@sinclair/typebox/type'\nimport { AnyType } from './types/any.ts'\nimport { ArrayType } from './types/array.ts'\nimport type {\n BaseType,\n BaseTypeAny,\n OptionalType,\n Static,\n} from './types/base.ts'\nimport { BooleanType } from './types/boolean.ts'\nimport { CustomType } from './types/custom.ts'\nimport { DateType } from './types/date.ts'\nimport { EnumType, ObjectEnumType } from './types/enum.ts'\nimport { LiteralType } from './types/literal.ts'\nimport { NeverType } from './types/never.ts'\nimport { BigIntType, IntegerType, NumberType } from './types/number.ts'\nimport { ObjectType, type ObjectTypeProps, RecordType } from './types/object.ts'\nimport { StringType } from './types/string.ts'\nimport {\n DiscriminatedUnionType,\n IntersactionType,\n UnionType,\n} from './types/union.ts'\nimport type { UnionToTupleString } from './utils.ts'\n\n// register ajv formats\nimport { register } from './formats.ts'\nregister()\n\nexport * from './schemas/nullable.ts'\nexport { BaseType, type BaseTypeAny } from './types/base.ts'\nexport { type TSchema } from '@sinclair/typebox'\nexport {\n ArrayType,\n BooleanType,\n CustomType,\n DateType,\n EnumType,\n LiteralType,\n IntegerType,\n NumberType,\n ObjectType,\n StringType,\n IntersactionType,\n UnionType,\n AnyType,\n NeverType,\n}\n\nexport namespace t {\n export namespace infer {\n export type decoded<T extends BaseTypeAny> = StaticDecode<\n T['_']['decoded']['output']\n >\n export type encoded<T extends BaseTypeAny> = StaticEncode<\n T['_']['encoded']['output']\n >\n export namespace input {\n export type decoded<T extends BaseTypeAny> = StaticDecode<\n T['_']['decoded']['input']\n >\n export type encoded<T extends BaseTypeAny> = StaticEncode<\n T['_']['encoded']['input']\n >\n }\n }\n\n export const never = NeverType.factory\n export const boolean = BooleanType.factory\n export const string = StringType.factory\n export const number = NumberType.factory\n export const integer = IntegerType.factory\n export const bitint = BigIntType.factory\n export const literal = LiteralType.factory\n export const objectEnum = ObjectEnumType.factory\n export const arrayEnum = EnumType.factory\n export const date = DateType.factory\n export const array = ArrayType.factory\n export const object = ObjectType.factory\n export const record = RecordType.factory\n export const any = AnyType.factory\n export const or = UnionType.factory\n export const and = IntersactionType.factory\n export const discriminatedUnion = DiscriminatedUnionType.factory\n export const custom = CustomType.factory\n\n export const keyof = <T extends ObjectType>(\n type: T,\n ): EnumType<\n UnionToTupleString<T extends ObjectType<infer Props> ? keyof Props : never>\n > => {\n return arrayEnum(Object.keys(type.props.properties) as any)\n }\n\n export const pick = <\n T extends ObjectType,\n P extends { [K in keyof T['props']['properties']]?: true },\n >(\n source: T,\n pick: P,\n ): ObjectType<{\n [K in keyof T['props']['properties'] as K extends keyof P\n ? K\n : never]: T['props']['properties'][K]\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\n export const omit = <\n T extends ObjectType,\n P extends { [K in keyof T]?: 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\n export const extend = <T extends ObjectType, 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\n export const merge = <T1 extends ObjectType, T2 extends ObjectType>(\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\n export const partial = <T extends ObjectType>(\n object: T,\n ): ObjectType<{\n [K in keyof T['props']['properties']]: OptionalType<\n T['props']['properties'][K]\n >\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}\n"],"names":["AnyType","ArrayType","BooleanType","CustomType","DateType","EnumType","ObjectEnumType","LiteralType","NeverType","BigIntType","IntegerType","NumberType","ObjectType","RecordType","StringType","DiscriminatedUnionType","IntersactionType","UnionType","register","BaseType","t","never","factory","boolean","string","number","integer","bitint","literal","objectEnum","arrayEnum","date","array","object","record","any","or","and","discriminatedUnion","custom","keyof","type","Object","keys","props","properties","pick","source","fromEntries","entries","filter","key","omit","extend","object1","merge","object2","partial","value","optional"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import type {\n StaticInputDecode,\n StaticInputEncode,\n StaticOutputDecode,\n StaticOutputEncode,\n} from './inference.ts'\nimport { AnyType } from './types/any.ts'\nimport { ArrayType } from './types/array.ts'\nimport type { BaseTypeAny, OptionalType } from './types/base.ts'\nimport { BooleanType } from './types/boolean.ts'\nimport { CustomType } from './types/custom.ts'\nimport { DateType } from './types/date.ts'\nimport { EnumType, ObjectEnumType } from './types/enum.ts'\nimport { LiteralType } from './types/literal.ts'\nimport { NeverType } from './types/never.ts'\nimport { BigIntType, IntegerType, NumberType } from './types/number.ts'\nimport {\n ObjectType,\n RecordType,\n extend,\n keyof,\n merge,\n omit,\n partial,\n pick,\n} from './types/object.ts'\nimport { StringType } from './types/string.ts'\nimport {\n DiscriminatedUnionType,\n IntersactionType,\n UnionType,\n} from './types/union.ts'\n\nexport * from './schemas/nullable.ts'\nexport { BaseType, type BaseTypeAny } from './types/base.ts'\nexport type { TSchema } from '@sinclair/typebox'\nexport {\n ArrayType,\n BooleanType,\n CustomType,\n DateType,\n EnumType,\n LiteralType,\n IntegerType,\n NumberType,\n ObjectType,\n StringType,\n IntersactionType,\n UnionType,\n AnyType,\n NeverType,\n}\n\nexport namespace type {\n export namespace infer {\n export type decoded<T extends BaseTypeAny<any>> = StaticOutputDecode<\n T['schema']\n >\n export type encoded<T extends BaseTypeAny<any>> = StaticOutputEncode<\n T['schema']\n >\n export namespace input {\n export type decoded<T extends BaseTypeAny<any>> = StaticInputDecode<\n T['schema']\n >\n export type encoded<T extends BaseTypeAny<any>> = StaticInputEncode<\n T['schema']\n >\n }\n }\n\n export const never = NeverType.factory\n export const boolean = BooleanType.factory\n export const string = StringType.factory\n export const number = NumberType.factory\n export const integer = IntegerType.factory\n export const bitint = BigIntType.factory\n export const literal = LiteralType.factory\n export const objectEnum = ObjectEnumType.factory\n export const arrayEnum = EnumType.factory\n export const date = DateType.factory\n export const array = ArrayType.factory\n export const record = RecordType.factory\n export const any = AnyType.factory\n export const or = UnionType.factory\n export const and = IntersactionType.factory\n export const discriminatedUnion = DiscriminatedUnionType.factory\n export const custom = CustomType.factory\n export const object = Object.assign(ObjectType.factory.bind(ObjectType), {\n keyof,\n partial,\n merge,\n omit,\n extend,\n pick,\n })\n}\n\nexport { type as t }\n"],"names":["AnyType","ArrayType","BooleanType","CustomType","DateType","EnumType","ObjectEnumType","LiteralType","NeverType","BigIntType","IntegerType","NumberType","ObjectType","RecordType","extend","keyof","merge","omit","partial","pick","StringType","DiscriminatedUnionType","IntersactionType","UnionType","BaseType","type","never","factory","boolean","string","number","integer","bitint","literal","objectEnum","arrayEnum","date","array","record","any","or","and","discriminatedUnion","custom","object","Object","assign","bind","t"],"mappings":"AAMA,SAASA,OAAO,QAAQ,iBAAgB;AACxC,SAASC,SAAS,QAAQ,mBAAkB;AAE5C,SAASC,WAAW,QAAQ,qBAAoB;AAChD,SAASC,UAAU,QAAQ,oBAAmB;AAC9C,SAASC,QAAQ,QAAQ,kBAAiB;AAC1C,SAASC,QAAQ,EAAEC,cAAc,QAAQ,kBAAiB;AAC1D,SAASC,WAAW,QAAQ,qBAAoB;AAChD,SAASC,SAAS,QAAQ,mBAAkB;AAC5C,SAASC,UAAU,EAAEC,WAAW,EAAEC,UAAU,QAAQ,oBAAmB;AACvE,SACEC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,KAAK,EACLC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPC,IAAI,QACC,oBAAmB;AAC1B,SAASC,UAAU,QAAQ,oBAAmB;AAC9C,SACEC,sBAAsB,EACtBC,gBAAgB,EAChBC,SAAS,QACJ,mBAAkB;AAEzB,cAAc,wBAAuB;AACrC,SAASC,QAAQ,QAA0B,kBAAiB;AAE5D,SACEvB,SAAS,EACTC,WAAW,EACXC,UAAU,EACVC,QAAQ,EACRC,QAAQ,EACRE,WAAW,EACXG,WAAW,EACXC,UAAU,EACVC,UAAU,EACVQ,UAAU,EACVE,gBAAgB,EAChBC,SAAS,EACTvB,OAAO,EACPQ,SAAS,KACV;;UAEgBiB;SAkBFC,QAAQlB,UAAUmB,OAAO;SACzBC,UAAU1B,YAAYyB,OAAO;SAC7BE,SAAST,WAAWO,OAAO;SAC3BG,SAASnB,WAAWgB,OAAO;SAC3BI,UAAUrB,YAAYiB,OAAO;SAC7BK,SAASvB,WAAWkB,OAAO;SAC3BM,UAAU1B,YAAYoB,OAAO;SAC7BO,aAAa5B,eAAeqB,OAAO;SACnCQ,YAAY9B,SAASsB,OAAO;SAC5BS,OAAOhC,SAASuB,OAAO;SACvBU,QAAQpC,UAAU0B,OAAO;SACzBW,SAASzB,WAAWc,OAAO;SAC3BY,MAAMvC,QAAQ2B,OAAO;SACrBa,KAAKjB,UAAUI,OAAO;SACtBc,MAAMnB,iBAAiBK,OAAO;SAC9Be,qBAAqBrB,uBAAuBM,OAAO;SACnDgB,SAASxC,WAAWwB,OAAO;SAC3BiB,SAASC,OAAOC,MAAM,CAAClC,WAAWe,OAAO,CAACoB,IAAI,CAACnC,aAAa;QACvEG;QACAG;QACAF;QACAC;QACAH;QACAK;IACF;AACF,GA3CiBM,SAAAA;AA6CjB,SAASA,QAAQuB,CAAJ,GAAO"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/inference.ts"],"sourcesContent":["import type { TProperties, TSchema } from '@sinclair/typebox'\nimport type * as Types from '@sinclair/typebox'\nimport type { TDefault } from './schemas/default.ts'\n\nexport type StaticInputEncode<Type extends TSchema> =\n Type extends Types.TOptional<TSchema>\n ? Types.StaticEncode<Type> | undefined\n : Types.StaticEncode<Type>\n\nexport type StaticInputDecode<Type extends TSchema> =\n Type extends Types.TOptional<TSchema>\n ? Types.StaticDecode<Type> | undefined\n : Types.StaticDecode<Type>\n\nexport type StaticOutputEncode<Type extends TSchema> = Types.StaticEncode<\n TMap<Type, StaticOutputMapping>\n>\n\nexport type StaticOutputDecode<Type extends TSchema> = Types.StaticDecode<\n TMap<Type, StaticOutputMapping>\n>\n\ninterface StaticOutputMapping extends TMapping {\n output: this['input']\n}\n\ninterface TMapping {\n input: unknown\n output: unknown\n}\n\ntype TApply<\n Type extends TSchema,\n Mapping extends TMapping,\n Mapped = (Mapping & { input: Type })['output'],\n Result = Mapped extends TSchema ? Mapped : never,\n> = Result\n\ntype TFromProperties<\n Properties extends TProperties,\n Mapping extends TMapping,\n Result extends TProperties = {\n [Key in keyof Properties]: TMap<Properties[Key], Mapping>\n },\n> = Result\n\ntype TFromRest<\n Types extends TSchema[],\n Mapping extends TMapping,\n Result extends TSchema[] = [],\n> = Types extends [infer Left extends TSchema, ...infer Right extends TSchema[]]\n ? TFromRest<Right, Mapping, [...Result, TMap<Left, Mapping>]>\n : Result\n\ntype TFromType<\n Type extends TSchema,\n Mapping extends TMapping,\n Result extends TSchema = TApply<Type, Mapping>,\n> = Result\n\ntype UnwrapDefault<T extends TSchema> = T extends TDefault<infer U>\n ? U extends Types.TOptional<infer V>\n ? V\n : U\n : T\n\ntype TMap<\n Type extends TSchema,\n Mapping extends TMapping,\n // Maps the Exterior Type\n Exterior extends TSchema = TFromType<Type, Mapping>,\n // Maps the Interior Parameterized Types\n Interior extends TSchema = Exterior extends Types.TConstructor<\n infer Parameters extends TSchema[],\n infer ReturnType extends TSchema\n >\n ? Types.TConstructor<\n TFromRest<Parameters, Mapping>,\n TFromType<ReturnType, Mapping>\n >\n : Exterior extends Types.TFunction<\n infer Parameters extends TSchema[],\n infer ReturnType extends TSchema\n >\n ? Types.TFunction<\n TFromRest<Parameters, Mapping>,\n TFromType<ReturnType, Mapping>\n >\n : Exterior extends Types.TIntersect<infer Types extends TSchema[]>\n ? Types.TIntersect<TFromRest<Types, Mapping>>\n : Exterior extends Types.TUnion<infer Types extends TSchema[]>\n ? Types.TUnion<TFromRest<Types, Mapping>>\n : Exterior extends Types.TTuple<infer Types extends TSchema[]>\n ? Types.TTuple<TFromRest<Types, Mapping>>\n : Exterior extends Types.TArray<infer Type extends TSchema>\n ? Types.TArray<TFromType<Type, Mapping>>\n : Exterior extends Types.TAsyncIterator<\n infer Type extends TSchema\n >\n ? Types.TAsyncIterator<TFromType<Type, Mapping>>\n : Exterior extends Types.TIterator<infer Type extends TSchema>\n ? Types.TIterator<TFromType<Type, Mapping>>\n : Exterior extends Types.TPromise<infer Type extends TSchema>\n ? Types.TPromise<TFromType<Type, Mapping>>\n : Exterior extends Types.TObject<\n infer Properties extends TProperties\n >\n ? Types.TObject<TFromProperties<Properties, Mapping>>\n : Exterior extends Types.TRecord<\n infer Key extends TSchema,\n infer Value extends TSchema\n >\n ? Types.TRecordOrObject<\n TFromType<Key, Mapping>,\n TFromType<Value, Mapping>\n >\n : Exterior,\n // Modifiers Derived from Exterior Type Mapping\n IsOptional extends number = Exterior extends Types.TOptional<TSchema> ? 1 : 0,\n IsReadonly extends number = Exterior extends Types.TReadonly<TSchema> ? 1 : 0,\n Result extends TSchema = [IsReadonly, IsOptional] extends [1, 1]\n ? Types.TReadonly<UnwrapDefault<Interior>>\n : [IsReadonly, IsOptional] extends [0, 1]\n ? UnwrapDefault<Interior>\n : [IsReadonly, IsOptional] extends [1, 0]\n ? Types.TReadonly<UnwrapDefault<Interior>>\n : UnwrapDefault<Interior>,\n> = Result\n"],"names":[],"mappings":"AAkBA,WAEC"}
package/dist/parse.js ADDED
@@ -0,0 +1,145 @@
1
+ export function IsAsyncIterator(value) {
2
+ return IsObject(value) && Symbol.asyncIterator in value;
3
+ }
4
+ export function IsIterator(value) {
5
+ return IsObject(value) && Symbol.iterator in value;
6
+ }
7
+ export function IsStandardObject(value) {
8
+ return IsObject(value) && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);
9
+ }
10
+ export function IsInstanceObject(value) {
11
+ return IsObject(value) && !IsArray(value) && IsFunction(value.constructor) && value.constructor.name !== 'Object';
12
+ }
13
+ export function IsPromise(value) {
14
+ return value instanceof Promise;
15
+ }
16
+ export function IsDate(value) {
17
+ return value instanceof Date && Number.isFinite(value.getTime());
18
+ }
19
+ export function IsMap(value) {
20
+ return value instanceof globalThis.Map;
21
+ }
22
+ export function IsSet(value) {
23
+ return value instanceof globalThis.Set;
24
+ }
25
+ export function IsRegExp(value) {
26
+ return value instanceof globalThis.RegExp;
27
+ }
28
+ export function IsTypedArray(value) {
29
+ return ArrayBuffer.isView(value);
30
+ }
31
+ export function IsInt8Array(value) {
32
+ return value instanceof globalThis.Int8Array;
33
+ }
34
+ export function IsUint8Array(value) {
35
+ return value instanceof globalThis.Uint8Array;
36
+ }
37
+ export function IsUint8ClampedArray(value) {
38
+ return value instanceof globalThis.Uint8ClampedArray;
39
+ }
40
+ export function IsInt16Array(value) {
41
+ return value instanceof globalThis.Int16Array;
42
+ }
43
+ export function IsUint16Array(value) {
44
+ return value instanceof globalThis.Uint16Array;
45
+ }
46
+ export function IsInt32Array(value) {
47
+ return value instanceof globalThis.Int32Array;
48
+ }
49
+ export function IsUint32Array(value) {
50
+ return value instanceof globalThis.Uint32Array;
51
+ }
52
+ export function IsFloat32Array(value) {
53
+ return value instanceof globalThis.Float32Array;
54
+ }
55
+ export function IsFloat64Array(value) {
56
+ return value instanceof globalThis.Float64Array;
57
+ }
58
+ export function IsBigInt64Array(value) {
59
+ return value instanceof globalThis.BigInt64Array;
60
+ }
61
+ export function IsBigUint64Array(value) {
62
+ return value instanceof globalThis.BigUint64Array;
63
+ }
64
+ export function HasPropertyKey(value, key) {
65
+ return key in value;
66
+ }
67
+ export function IsObject(value) {
68
+ return value !== null && typeof value === 'object';
69
+ }
70
+ export function IsArray(value) {
71
+ return Array.isArray(value) && !ArrayBuffer.isView(value);
72
+ }
73
+ export function IsUndefined(value) {
74
+ return value === undefined;
75
+ }
76
+ export function IsNull(value) {
77
+ return value === null;
78
+ }
79
+ export function IsBoolean(value) {
80
+ return typeof value === 'boolean';
81
+ }
82
+ export function IsNumber(value) {
83
+ return typeof value === 'number';
84
+ }
85
+ export function IsInteger(value) {
86
+ return Number.isInteger(value);
87
+ }
88
+ export function IsBigInt(value) {
89
+ return typeof value === 'bigint';
90
+ }
91
+ export function IsString(value) {
92
+ return typeof value === 'string';
93
+ }
94
+ export function IsFunction(value) {
95
+ return typeof value === 'function';
96
+ }
97
+ export function IsSymbol(value) {
98
+ return typeof value === 'symbol';
99
+ }
100
+ export function IsValueType(value) {
101
+ return IsBigInt(value) || IsBoolean(value) || IsNull(value) || IsNumber(value) || IsString(value) || IsSymbol(value) || IsUndefined(value);
102
+ }
103
+ function FromObject(value, exclude) {
104
+ const Acc = {};
105
+ for (const key of Object.getOwnPropertyNames(value)){
106
+ Acc[key] = Clone(value[key], exclude);
107
+ }
108
+ for (const key of Object.getOwnPropertySymbols(value)){
109
+ Acc[key] = Clone(value[key], exclude);
110
+ }
111
+ return Acc;
112
+ }
113
+ function FromArray(value, exclude) {
114
+ return value.map((element)=>Clone(element, exclude));
115
+ }
116
+ function FromTypedArray(value) {
117
+ return value.slice();
118
+ }
119
+ function FromMap(value, exclude) {
120
+ return new Map(Clone([
121
+ ...value.entries()
122
+ ], exclude));
123
+ }
124
+ function FromSet(value, exclude) {
125
+ return new Set(Clone([
126
+ ...value.entries()
127
+ ], exclude));
128
+ }
129
+ function FromDate(value) {
130
+ return new Date(value.toISOString());
131
+ }
132
+ function FromValue(value) {
133
+ return value;
134
+ }
135
+ export function Clone(value, exclude) {
136
+ if (IsArray(value)) return FromArray(value, exclude);
137
+ if (IsDate(value)) return FromDate(value);
138
+ if (IsTypedArray(value)) return FromTypedArray(value);
139
+ if (IsMap(value)) return FromMap(value, exclude);
140
+ if (IsSet(value)) return FromSet(value, exclude);
141
+ if (IsObject(value)) return FromObject(value, exclude);
142
+ if (IsValueType(value)) return FromValue(value);
143
+ if (exclude?.has(value.constructor)) return value;
144
+ throw new Error('Cannot clone value');
145
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/parse.ts"],"sourcesContent":["// --------------------------------------------------------------------------\n// Iterators\n// --------------------------------------------------------------------------\n\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && Symbol.asyncIterator in value\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && Symbol.iterator in value\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is not an instance of a class */\nexport function IsStandardObject(value) {\n return (\n IsObject(value) &&\n (Object.getPrototypeOf(value) === Object.prototype ||\n Object.getPrototypeOf(value) === null)\n )\n}\n/** Returns true if this value is an instance of a class */\nexport function IsInstanceObject(value) {\n return (\n IsObject(value) &&\n !IsArray(value) &&\n IsFunction(value.constructor) &&\n value.constructor.name !== 'Object'\n )\n}\n// --------------------------------------------------------------------------\n// JavaScript\n// --------------------------------------------------------------------------\n/** Returns true if this value is a Promise */\nexport function IsPromise(value) {\n return value instanceof Promise\n}\n/** Returns true if this value is a Date */\nexport function IsDate(value) {\n return value instanceof Date && Number.isFinite(value.getTime())\n}\n/** Returns true if this value is an instance of Map<K, T> */\nexport function IsMap(value) {\n return value instanceof globalThis.Map\n}\n/** Returns true if this value is an instance of Set<T> */\nexport function IsSet(value) {\n return value instanceof globalThis.Set\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp\n}\n/** Returns true if this value is a typed array */\nexport function IsTypedArray(value) {\n return ArrayBuffer.isView(value)\n}\n/** Returns true if the value is a Int8Array */\nexport function IsInt8Array(value) {\n return value instanceof globalThis.Int8Array\n}\n/** Returns true if the value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array\n}\n/** Returns true if the value is a Uint8ClampedArray */\nexport function IsUint8ClampedArray(value) {\n return value instanceof globalThis.Uint8ClampedArray\n}\n/** Returns true if the value is a Int16Array */\nexport function IsInt16Array(value) {\n return value instanceof globalThis.Int16Array\n}\n/** Returns true if the value is a Uint16Array */\nexport function IsUint16Array(value) {\n return value instanceof globalThis.Uint16Array\n}\n/** Returns true if the value is a Int32Array */\nexport function IsInt32Array(value) {\n return value instanceof globalThis.Int32Array\n}\n/** Returns true if the value is a Uint32Array */\nexport function IsUint32Array(value) {\n return value instanceof globalThis.Uint32Array\n}\n/** Returns true if the value is a Float32Array */\nexport function IsFloat32Array(value) {\n return value instanceof globalThis.Float32Array\n}\n/** Returns true if the value is a Float64Array */\nexport function IsFloat64Array(value) {\n return value instanceof globalThis.Float64Array\n}\n/** Returns true if the value is a BigInt64Array */\nexport function IsBigInt64Array(value) {\n return value instanceof globalThis.BigInt64Array\n}\n/** Returns true if the value is a BigUint64Array */\nexport function IsBigUint64Array(value) {\n return value instanceof globalThis.BigUint64Array\n}\n// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value\n}\n// --------------------------------------------------------------------------\n// Standard\n// --------------------------------------------------------------------------\n/** Returns true of this value is an object type */\nexport function IsObject(value) {\n return value !== null && typeof value === 'object'\n}\n/** Returns true if this value is an array, but not a typed array */\nexport function IsArray(value) {\n return Array.isArray(value) && !ArrayBuffer.isView(value)\n}\n/** Returns true if this value is an undefined */\nexport function IsUndefined(value) {\n return value === undefined\n}\n/** Returns true if this value is an null */\nexport function IsNull(value) {\n return value === null\n}\n/** Returns true if this value is an boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean'\n}\n/** Returns true if this value is an number */\nexport function IsNumber(value) {\n return typeof value === 'number'\n}\n/** Returns true if this value is an integer */\nexport function IsInteger(value) {\n return Number.isInteger(value)\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint'\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string'\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function'\n}\n/** Returns true if this value is a symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol'\n}\n/** Returns true if this value is a value type such as number, string, boolean */\nexport function IsValueType(value) {\n // prettier-ignore\n return (\n IsBigInt(value) ||\n IsBoolean(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsUndefined(value)\n )\n}\n\n// ------------------------------------------------------------------\n// Clonable\n// ------------------------------------------------------------------\nfunction FromObject(value, exclude) {\n const Acc = {}\n for (const key of Object.getOwnPropertyNames(value)) {\n Acc[key] = Clone(value[key], exclude)\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n Acc[key] = Clone(value[key], exclude)\n }\n return Acc\n}\nfunction FromArray(value, exclude) {\n return value.map((element) => Clone(element, exclude))\n}\nfunction FromTypedArray(value) {\n return value.slice()\n}\nfunction FromMap(value, exclude) {\n return new Map(Clone([...value.entries()], exclude))\n}\nfunction FromSet(value, exclude) {\n return new Set(Clone([...value.entries()], exclude))\n}\nfunction FromDate(value) {\n return new Date(value.toISOString())\n}\nfunction FromValue(value) {\n return value\n}\n// ------------------------------------------------------------------\n// Clone\n// ------------------------------------------------------------------\n/** Returns a clone of the given value */\nexport function Clone(value, exclude?: Set<any>) {\n if (IsArray(value)) return FromArray(value, exclude)\n if (IsDate(value)) return FromDate(value)\n if (IsTypedArray(value)) return FromTypedArray(value)\n if (IsMap(value)) return FromMap(value, exclude)\n if (IsSet(value)) return FromSet(value, exclude)\n if (IsObject(value)) return FromObject(value, exclude)\n if (IsValueType(value)) return FromValue(value)\n if (exclude?.has(value.constructor)) return value\n throw new Error('Cannot clone value')\n}\n"],"names":["IsAsyncIterator","value","IsObject","Symbol","asyncIterator","IsIterator","iterator","IsStandardObject","Object","getPrototypeOf","prototype","IsInstanceObject","IsArray","IsFunction","constructor","name","IsPromise","Promise","IsDate","Date","Number","isFinite","getTime","IsMap","globalThis","Map","IsSet","Set","IsRegExp","RegExp","IsTypedArray","ArrayBuffer","isView","IsInt8Array","Int8Array","IsUint8Array","Uint8Array","IsUint8ClampedArray","Uint8ClampedArray","IsInt16Array","Int16Array","IsUint16Array","Uint16Array","IsInt32Array","Int32Array","IsUint32Array","Uint32Array","IsFloat32Array","Float32Array","IsFloat64Array","Float64Array","IsBigInt64Array","BigInt64Array","IsBigUint64Array","BigUint64Array","HasPropertyKey","key","Array","isArray","IsUndefined","undefined","IsNull","IsBoolean","IsNumber","IsInteger","isInteger","IsBigInt","IsString","IsSymbol","IsValueType","FromObject","exclude","Acc","getOwnPropertyNames","Clone","getOwnPropertySymbols","FromArray","map","element","FromTypedArray","slice","FromMap","entries","FromSet","FromDate","toISOString","FromValue","has","Error"],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { TransformDecode, TransformEncode, Value } from '@sinclair/typebox/value';
2
+ import { register } from "./formats.js";
3
+ import { Clone } from "./parse.js";
4
+ import { IsDiscriminatedUnion } from "./schemas/discriminated-union.js";
5
+ register();
6
+ export function _applyDefaults(schema, value) {
7
+ return Value.Default(schema, value);
8
+ }
9
+ export function _parse(schema, value, cloneOptions) {
10
+ if (cloneOptions?.clone !== false) {
11
+ value = Clone(value, cloneOptions?.exclude);
12
+ }
13
+ return Value.Clean(schema, Value.Convert(schema, value));
14
+ }
15
+ export function _traversErrors(errors) {
16
+ const result = [];
17
+ for (const error of errors){
18
+ if (IsDiscriminatedUnion(error.schema)) {
19
+ const discriminator = error.schema.discriminator;
20
+ const discriminatorValue = error.value?.[discriminator];
21
+ if (discriminatorValue !== undefined) {
22
+ const variantSchema = error.schema.anyOf.find((schema)=>schema.properties[discriminator].const === discriminatorValue);
23
+ if (variantSchema) {
24
+ const propertiesSchemas = [];
25
+ for(const element in variantSchema.properties){
26
+ const propertySchema = variantSchema.properties[element];
27
+ if (propertySchema !== variantSchema.properties[discriminator]) {
28
+ propertiesSchemas.push(propertySchema);
29
+ }
30
+ }
31
+ for (const iter of error.errors){
32
+ for (const err of iter){
33
+ if (!propertiesSchemas.includes(err.schema)) continue;
34
+ result.push({
35
+ path: err.path,
36
+ message: err.message,
37
+ value: err.value
38
+ });
39
+ }
40
+ }
41
+ continue;
42
+ }
43
+ }
44
+ }
45
+ result.push({
46
+ path: error.path,
47
+ message: error.message,
48
+ value: error.value
49
+ });
50
+ for (const nestedError of error.errors){
51
+ result.push(..._traversErrors(nestedError));
52
+ }
53
+ }
54
+ return result;
55
+ }
56
+ export function applyDefaults(type, value) {
57
+ return _applyDefaults(type.schema, value);
58
+ }
59
+ export function parse(type, value, cloneOptions) {
60
+ return _parse(type.schema, value, cloneOptions);
61
+ }
62
+ export function errors(type, value) {
63
+ return _traversErrors(Value.Errors(type.schema, value));
64
+ }
65
+ export function check(type, value) {
66
+ return Value.Check(type.schema, value);
67
+ }
68
+ export function decode(type, value) {
69
+ return TransformDecode(type.schema, [], value);
70
+ }
71
+ export function encode(type, value) {
72
+ return TransformEncode(type.schema, [], value);
73
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime.ts"],"sourcesContent":["import type { ClassConstructor } from '@nmtjs/common'\nimport type { TSchema } from '@sinclair/typebox'\nimport type { ValueErrorIterator } from '@sinclair/typebox/compiler'\nimport {\n TransformDecode,\n TransformEncode,\n Value,\n} from '@sinclair/typebox/value'\nimport { register } from './formats.ts'\nimport type {\n StaticInputEncode,\n StaticOutputDecode,\n StaticOutputEncode,\n} from './inference.ts'\nimport { Clone } from './parse.ts'\nimport { IsDiscriminatedUnion } from './schemas/discriminated-union.ts'\nimport type { BaseType } from './types/base.ts'\n\n// register ajv formats\nregister()\n\nexport type CloneOptions = {\n clone?: boolean\n exclude?: Set<any>\n}\n\nexport type ValidationError = {\n path: string\n message: string\n value: unknown\n}\n\n// TODO: this one is very slow\nexport function _applyDefaults(schema: TSchema, value: any) {\n return Value.Default(schema, value)\n}\n\n// TODO: this one is very slow\n// Clone -> Clean -> Convert\nexport function _parse(\n schema: TSchema,\n value: any,\n cloneOptions?: CloneOptions,\n) {\n if (cloneOptions?.clone !== false) {\n value = Clone(value, cloneOptions?.exclude)\n }\n return Value.Clean(schema, Value.Convert(schema, value))\n}\n\nexport function _traversErrors(errors: ValueErrorIterator) {\n const result: ValidationError[] = []\n\n for (const error of errors) {\n if (IsDiscriminatedUnion(error.schema)) {\n const discriminator = error.schema.discriminator\n const discriminatorValue = error.value?.[discriminator]\n if (discriminatorValue !== undefined) {\n const variantSchema = error.schema.anyOf.find(\n (schema) =>\n schema.properties[discriminator].const === discriminatorValue,\n )\n if (variantSchema) {\n const propertiesSchemas: TSchema[] = []\n for (const element in variantSchema.properties) {\n const propertySchema = variantSchema.properties[element]\n if (propertySchema !== variantSchema.properties[discriminator]) {\n propertiesSchemas.push(propertySchema)\n }\n }\n\n for (const iter of error.errors) {\n for (const err of iter) {\n if (!propertiesSchemas.includes(err.schema)) continue\n result.push({\n path: err.path,\n message: err.message,\n value: err.value,\n })\n }\n }\n\n continue\n }\n }\n }\n\n result.push({\n path: error.path,\n message: error.message,\n value: error.value,\n })\n\n for (const nestedError of error.errors) {\n result.push(..._traversErrors(nestedError))\n }\n }\n\n return result\n}\n\nexport function applyDefaults(type: BaseType, value: unknown) {\n return _applyDefaults(type.schema, value)\n}\n\nexport function parse(\n type: BaseType,\n value: unknown,\n cloneOptions?: CloneOptions,\n) {\n return _parse(type.schema, value, cloneOptions)\n}\n\nexport function errors(type: BaseType, value: unknown): ValidationError[] {\n return _traversErrors(Value.Errors(type.schema, value))\n}\n\nexport function check<T extends BaseType>(\n type: T,\n value: unknown,\n): value is StaticInputEncode<T['schema']> {\n return Value.Check(type.schema, value)\n}\n\nexport function decode<T extends BaseType>(\n type: T,\n value: unknown,\n): StaticOutputDecode<T['schema']> {\n return TransformDecode(type.schema, [], value)\n}\n\nexport function encode<T extends BaseType>(\n type: T,\n value: unknown,\n): StaticOutputEncode<T['schema']> {\n return TransformEncode(type.schema, [], value)\n}\n"],"names":["TransformDecode","TransformEncode","Value","register","Clone","IsDiscriminatedUnion","_applyDefaults","schema","value","Default","_parse","cloneOptions","clone","exclude","Clean","Convert","_traversErrors","errors","result","error","discriminator","discriminatorValue","undefined","variantSchema","anyOf","find","properties","const","propertiesSchemas","element","propertySchema","push","iter","err","includes","path","message","nestedError","applyDefaults","type","parse","Errors","check","Check","decode","encode"],"mappings":"AAGA,SACEA,eAAe,EACfC,eAAe,EACfC,KAAK,QACA,0BAAyB;AAChC,SAASC,QAAQ,QAAQ,eAAc;AAMvC,SAASC,KAAK,QAAQ,aAAY;AAClC,SAASC,oBAAoB,QAAQ,mCAAkC;AAIvEF;AAcA,OAAO,SAASG,eAAeC,MAAe,EAAEC,KAAU;IACxD,OAAON,MAAMO,OAAO,CAACF,QAAQC;AAC/B;AAIA,OAAO,SAASE,OACdH,MAAe,EACfC,KAAU,EACVG,YAA2B;IAE3B,IAAIA,cAAcC,UAAU,OAAO;QACjCJ,QAAQJ,MAAMI,OAAOG,cAAcE;IACrC;IACA,OAAOX,MAAMY,KAAK,CAACP,QAAQL,MAAMa,OAAO,CAACR,QAAQC;AACnD;AAEA,OAAO,SAASQ,eAAeC,MAA0B;IACvD,MAAMC,SAA4B,EAAE;IAEpC,KAAK,MAAMC,SAASF,OAAQ;QAC1B,IAAIZ,qBAAqBc,MAAMZ,MAAM,GAAG;YACtC,MAAMa,gBAAgBD,MAAMZ,MAAM,CAACa,aAAa;YAChD,MAAMC,qBAAqBF,MAAMX,KAAK,EAAE,CAACY,cAAc;YACvD,IAAIC,uBAAuBC,WAAW;gBACpC,MAAMC,gBAAgBJ,MAAMZ,MAAM,CAACiB,KAAK,CAACC,IAAI,CAC3C,CAAClB,SACCA,OAAOmB,UAAU,CAACN,cAAc,CAACO,KAAK,KAAKN;gBAE/C,IAAIE,eAAe;oBACjB,MAAMK,oBAA+B,EAAE;oBACvC,IAAK,MAAMC,WAAWN,cAAcG,UAAU,CAAE;wBAC9C,MAAMI,iBAAiBP,cAAcG,UAAU,CAACG,QAAQ;wBACxD,IAAIC,mBAAmBP,cAAcG,UAAU,CAACN,cAAc,EAAE;4BAC9DQ,kBAAkBG,IAAI,CAACD;wBACzB;oBACF;oBAEA,KAAK,MAAME,QAAQb,MAAMF,MAAM,CAAE;wBAC/B,KAAK,MAAMgB,OAAOD,KAAM;4BACtB,IAAI,CAACJ,kBAAkBM,QAAQ,CAACD,IAAI1B,MAAM,GAAG;4BAC7CW,OAAOa,IAAI,CAAC;gCACVI,MAAMF,IAAIE,IAAI;gCACdC,SAASH,IAAIG,OAAO;gCACpB5B,OAAOyB,IAAIzB,KAAK;4BAClB;wBACF;oBACF;oBAEA;gBACF;YACF;QACF;QAEAU,OAAOa,IAAI,CAAC;YACVI,MAAMhB,MAAMgB,IAAI;YAChBC,SAASjB,MAAMiB,OAAO;YACtB5B,OAAOW,MAAMX,KAAK;QACpB;QAEA,KAAK,MAAM6B,eAAelB,MAAMF,MAAM,CAAE;YACtCC,OAAOa,IAAI,IAAIf,eAAeqB;QAChC;IACF;IAEA,OAAOnB;AACT;AAEA,OAAO,SAASoB,cAAcC,IAAc,EAAE/B,KAAc;IAC1D,OAAOF,eAAeiC,KAAKhC,MAAM,EAAEC;AACrC;AAEA,OAAO,SAASgC,MACdD,IAAc,EACd/B,KAAc,EACdG,YAA2B;IAE3B,OAAOD,OAAO6B,KAAKhC,MAAM,EAAEC,OAAOG;AACpC;AAEA,OAAO,SAASM,OAAOsB,IAAc,EAAE/B,KAAc;IACnD,OAAOQ,eAAed,MAAMuC,MAAM,CAACF,KAAKhC,MAAM,EAAEC;AAClD;AAEA,OAAO,SAASkC,MACdH,IAAO,EACP/B,KAAc;IAEd,OAAON,MAAMyC,KAAK,CAACJ,KAAKhC,MAAM,EAAEC;AAClC;AAEA,OAAO,SAASoC,OACdL,IAAO,EACP/B,KAAc;IAEd,OAAOR,gBAAgBuC,KAAKhC,MAAM,EAAE,EAAE,EAAEC;AAC1C;AAEA,OAAO,SAASqC,OACdN,IAAO,EACP/B,KAAc;IAEd,OAAOP,gBAAgBsC,KAAKhC,MAAM,EAAE,EAAE,EAAEC;AAC1C"}
@@ -0,0 +1,6 @@
1
+ export function Default(type, default_) {
2
+ return {
3
+ ...type,
4
+ default: default_
5
+ };
6
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/schemas/default.ts"],"sourcesContent":["import type { TSchema } from '@sinclair/typebox'\n\nexport type TDefault<Type extends TSchema, Default = unknown> = Type & {\n default: Default\n}\n\nexport function Default<Type extends TSchema, const Default>(\n type: Type,\n default_: Default,\n): TDefault<Type, Default> {\n return { ...type, default: default_ } as never\n}\n"],"names":["Default","type","default_","default"],"mappings":"AAMA,OAAO,SAASA,QACdC,IAAU,EACVC,QAAiB;IAEjB,OAAO;QAAE,GAAGD,IAAI;QAAEE,SAASD;IAAS;AACtC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schemas/discriminated-union.ts"],"sourcesContent":["import {\n KindGuard,\n type TLiteral,\n type TObject,\n type TPropertyKey,\n type TSchema,\n type TUnion,\n Type,\n TypeGuard,\n ValueGuard,\n} from '@sinclair/typebox'\n\nexport function IsDiscriminatedUnion(\n schema: TSchema,\n): schema is TDiscriminatedUnion {\n return (\n TypeGuard.IsUnion(schema) &&\n 'discriminator' in schema &&\n ValueGuard.IsString(schema.discriminator) &&\n schema.anyOf.every(\n (variant) =>\n KindGuard.IsObject(variant) &&\n KindGuard.IsLiteralString(variant.properties[schema.discriminator]),\n )\n )\n}\n\ntype DiscriminatedUnionProperties<K extends string = string> = {\n [OK in K]: TLiteral<any>\n} & {\n [OK in TPropertyKey]: any\n}\n\nexport interface TDiscriminatedUnion<\n K extends string = string,\n T extends TObject<DiscriminatedUnionProperties<K>>[] = TObject<\n DiscriminatedUnionProperties<K>\n >[],\n> extends TUnion<T> {\n discriminator: K\n anyOf: T\n}\n\nexport function DiscriminatedUnion<\n K extends string,\n T extends TObject<DiscriminatedUnionProperties<K>>[],\n>(key: K, types: T): TDiscriminatedUnion<K, T> {\n return Type.Union(types, { discriminator: key }) as any\n}\n"],"names":["KindGuard","Type","TypeGuard","ValueGuard","IsDiscriminatedUnion","schema","IsUnion","IsString","discriminator","anyOf","every","variant","IsObject","IsLiteralString","properties","DiscriminatedUnion","key","types","Union"],"mappings":"AAAA,SACEA,SAAS,EAMTC,IAAI,EACJC,SAAS,EACTC,UAAU,QACL,oBAAmB;AAE1B,OAAO,SAASC,qBACdC,MAAe;IAEf,OACEH,UAAUI,OAAO,CAACD,WAClB,mBAAmBA,UACnBF,WAAWI,QAAQ,CAACF,OAAOG,aAAa,KACxCH,OAAOI,KAAK,CAACC,KAAK,CAChB,CAACC,UACCX,UAAUY,QAAQ,CAACD,YACnBX,UAAUa,eAAe,CAACF,QAAQG,UAAU,CAACT,OAAOG,aAAa,CAAC;AAG1E;AAkBA,OAAO,SAASO,mBAGdC,GAAM,EAAEC,KAAQ;IAChB,OAAOhB,KAAKiB,KAAK,CAACD,OAAO;QAAET,eAAeQ;IAAI;AAChD"}
1
+ {"version":3,"sources":["../../../src/schemas/discriminated-union.ts"],"sourcesContent":["import {\n KindGuard,\n type TLiteral,\n type TObject,\n type TPropertyKey,\n type TSchema,\n type TUnion,\n Type,\n TypeGuard,\n ValueGuard,\n} from '@sinclair/typebox'\n\nexport function IsDiscriminatedUnion(\n schema: TSchema,\n): schema is TDiscriminatedUnion {\n return (\n TypeGuard.IsUnion(schema) &&\n 'discriminator' in schema &&\n ValueGuard.IsString(schema.discriminator) &&\n schema.anyOf.every(\n (variant) =>\n KindGuard.IsObject(variant) &&\n KindGuard.IsLiteralString(variant.properties[schema.discriminator]),\n )\n )\n}\n\nexport type DiscriminatedUnionProperties<K extends string = string> = {\n [OK in K]: TLiteral<any>\n} & {\n [OK in TPropertyKey]: any\n}\n\nexport interface TDiscriminatedUnion<\n K extends string = string,\n T extends TObject<DiscriminatedUnionProperties<K>>[] = TObject<\n DiscriminatedUnionProperties<K>\n >[],\n> extends TUnion<T> {\n discriminator: K\n anyOf: T\n}\n\nexport function DiscriminatedUnion<\n K extends string,\n T extends TObject<DiscriminatedUnionProperties<K>>[],\n>(key: K, types: T): TDiscriminatedUnion<K, T> {\n return Type.Union(types, { discriminator: key }) as any\n}\n"],"names":["KindGuard","Type","TypeGuard","ValueGuard","IsDiscriminatedUnion","schema","IsUnion","IsString","discriminator","anyOf","every","variant","IsObject","IsLiteralString","properties","DiscriminatedUnion","key","types","Union"],"mappings":"AAAA,SACEA,SAAS,EAMTC,IAAI,EACJC,SAAS,EACTC,UAAU,QACL,oBAAmB;AAE1B,OAAO,SAASC,qBACdC,MAAe;IAEf,OACEH,UAAUI,OAAO,CAACD,WAClB,mBAAmBA,UACnBF,WAAWI,QAAQ,CAACF,OAAOG,aAAa,KACxCH,OAAOI,KAAK,CAACC,KAAK,CAChB,CAACC,UACCX,UAAUY,QAAQ,CAACD,YACnBX,UAAUa,eAAe,CAACF,QAAQG,UAAU,CAACT,OAAOG,aAAa,CAAC;AAG1E;AAkBA,OAAO,SAASO,mBAGdC,GAAM,EAAEC,KAAQ;IAChB,OAAOhB,KAAKiB,KAAK,CAACD,OAAO;QAAET,eAAeQ;IAAI;AAChD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schemas/nullable.ts"],"sourcesContent":["import {\n type SchemaOptions,\n type TNull,\n type TOptional,\n type TSchema,\n type TUndefined,\n type TUnion,\n Type,\n} from '@sinclair/typebox/type'\n\nexport type TNullable<T extends TSchema> = TUnion<[T, TNull]>\nexport const Nullable = <T extends TSchema>(\n schema: T,\n options: SchemaOptions = {},\n) => {\n const { default: _default } = schema\n\n return Type.Union([schema, Type.Null()], {\n default: _default,\n ...options,\n })\n}\n\nexport type TOptionalUndefined<T extends TSchema> = TOptional<\n TUnion<[T, TUndefined]>\n>\n"],"names":["Type","Nullable","schema","options","default","_default","Union","Null"],"mappings":"AAAA,SAOEA,IAAI,QACC,yBAAwB;AAG/B,OAAO,MAAMC,WAAW,CACtBC,QACAC,UAAyB,CAAC,CAAC;IAE3B,MAAM,EAAEC,SAASC,QAAQ,EAAE,GAAGH;IAE9B,OAAOF,KAAKM,KAAK,CAAC;QAACJ;QAAQF,KAAKO,IAAI;KAAG,EAAE;QACvCH,SAASC;QACT,GAAGF,OAAO;IACZ;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/schemas/nullable.ts"],"sourcesContent":["import {\n type SchemaOptions,\n type TNull,\n type TSchema,\n type TUnion,\n Type,\n} from '@sinclair/typebox/type'\n\nexport type TNullable<T extends TSchema> = TUnion<[T, TNull]>\nexport const Nullable = <T extends TSchema>(\n schema: T,\n options: SchemaOptions = {},\n) => {\n const { default: _default } = schema\n\n return Type.Union([schema, Type.Null()], {\n default: _default,\n ...options,\n })\n}\n"],"names":["Type","Nullable","schema","options","default","_default","Union","Null"],"mappings":"AAAA,SAKEA,IAAI,QACC,yBAAwB;AAG/B,OAAO,MAAMC,WAAW,CACtBC,QACAC,UAAyB,CAAC,CAAC;IAE3B,MAAM,EAAEC,SAASC,QAAQ,EAAE,GAAGH;IAE9B,OAAOF,KAAKM,KAAK,CAAC;QAACJ;QAAQF,KAAKO,IAAI;KAAG,EAAE;QACvCH,SAASC;QACT,GAAGF,OAAO;IACZ;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/temporal.ts"],"sourcesContent":["import { Temporal } from 'temporal-polyfill'\nimport {\n DurationType,\n PlainDateTimeType,\n PlainDateType,\n PlainMonthDayType,\n PlainTimeType,\n PlainYearMonthType,\n ZonedDateTimeType,\n} from './types/temporal.ts'\n\nexport const plainDate = PlainDateType.factory\nexport const plainDatetime = PlainDateTimeType.factory\nexport const plainTime = PlainTimeType.factory\nexport const zonedDatetime = ZonedDateTimeType.factory\nexport const duration = DurationType.factory\nexport const plainYearMonth = PlainYearMonthType.factory\nexport const plainMonthDay = PlainMonthDayType.factory\n\nexport {\n DurationType,\n PlainDateTimeType,\n PlainDateType,\n PlainMonthDayType,\n PlainTimeType,\n PlainYearMonthType,\n ZonedDateTimeType,\n}\n"],"names":["DurationType","PlainDateTimeType","PlainDateType","PlainMonthDayType","PlainTimeType","PlainYearMonthType","ZonedDateTimeType","plainDate","factory","plainDatetime","plainTime","zonedDatetime","duration","plainYearMonth","plainMonthDay"],"mappings":"AACA,SACEA,YAAY,EACZC,iBAAiB,EACjBC,aAAa,EACbC,iBAAiB,EACjBC,aAAa,EACbC,kBAAkB,EAClBC,iBAAiB,QACZ,sBAAqB;AAE5B,OAAO,MAAMC,YAAYL,cAAcM,OAAO,CAAA;AAC9C,OAAO,MAAMC,gBAAgBR,kBAAkBO,OAAO,CAAA;AACtD,OAAO,MAAME,YAAYN,cAAcI,OAAO,CAAA;AAC9C,OAAO,MAAMG,gBAAgBL,kBAAkBE,OAAO,CAAA;AACtD,OAAO,MAAMI,WAAWZ,aAAaQ,OAAO,CAAA;AAC5C,OAAO,MAAMK,iBAAiBR,mBAAmBG,OAAO,CAAA;AACxD,OAAO,MAAMM,gBAAgBX,kBAAkBK,OAAO,CAAA;AAEtD,SACER,YAAY,EACZC,iBAAiB,EACjBC,aAAa,EACbC,iBAAiB,EACjBC,aAAa,EACbC,kBAAkB,EAClBC,iBAAiB,KAClB"}
1
+ {"version":3,"sources":["../../src/temporal.ts"],"sourcesContent":["import {\n DurationType,\n PlainDateTimeType,\n PlainDateType,\n PlainMonthDayType,\n PlainTimeType,\n PlainYearMonthType,\n ZonedDateTimeType,\n} from './types/temporal.ts'\n\nexport const plainDate = PlainDateType.factory\nexport const plainDatetime = PlainDateTimeType.factory\nexport const plainTime = PlainTimeType.factory\nexport const zonedDatetime = ZonedDateTimeType.factory\nexport const duration = DurationType.factory\nexport const plainYearMonth = PlainYearMonthType.factory\nexport const plainMonthDay = PlainMonthDayType.factory\n\nexport {\n DurationType,\n PlainDateTimeType,\n PlainDateType,\n PlainMonthDayType,\n PlainTimeType,\n PlainYearMonthType,\n ZonedDateTimeType,\n}\n"],"names":["DurationType","PlainDateTimeType","PlainDateType","PlainMonthDayType","PlainTimeType","PlainYearMonthType","ZonedDateTimeType","plainDate","factory","plainDatetime","plainTime","zonedDatetime","duration","plainYearMonth","plainMonthDay"],"mappings":"AAAA,SACEA,YAAY,EACZC,iBAAiB,EACjBC,aAAa,EACbC,iBAAiB,EACjBC,aAAa,EACbC,kBAAkB,EAClBC,iBAAiB,QACZ,sBAAqB;AAE5B,OAAO,MAAMC,YAAYL,cAAcM,OAAO,CAAA;AAC9C,OAAO,MAAMC,gBAAgBR,kBAAkBO,OAAO,CAAA;AACtD,OAAO,MAAME,YAAYN,cAAcI,OAAO,CAAA;AAC9C,OAAO,MAAMG,gBAAgBL,kBAAkBE,OAAO,CAAA;AACtD,OAAO,MAAMI,WAAWZ,aAAaQ,OAAO,CAAA;AAC5C,OAAO,MAAMK,iBAAiBR,mBAAmBG,OAAO,CAAA;AACxD,OAAO,MAAMM,gBAAgBX,kBAAkBK,OAAO,CAAA;AAEtD,SACER,YAAY,EACZC,iBAAiB,EACjBC,aAAa,EACbC,iBAAiB,EACjBC,aAAa,EACbC,kBAAkB,EAClBC,iBAAiB,KAClB"}
package/dist/types/any.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { Type } from '@sinclair/typebox';
2
2
  import { BaseType } from "./base.js";
3
3
  export class AnyType extends BaseType {
4
- _;
5
4
  static factory() {
6
5
  return new AnyType(Type.Any());
7
6
  }