@sinclair/typebox 0.32.15 → 0.32.17

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.
@@ -15,80 +15,86 @@ import { IsTransform, IsSchema } from '../../type/guard/type.mjs';
15
15
  // ------------------------------------------------------------------
16
16
  // Errors
17
17
  // ------------------------------------------------------------------
18
+ // prettier-ignore
18
19
  export class TransformEncodeCheckError extends TypeBoxError {
19
20
  schema;
20
21
  value;
21
22
  error;
22
23
  constructor(schema, value, error) {
23
- super(`Unable to encode due to invalid value`);
24
+ super(`The encoded value does not match the expected schema`);
24
25
  this.schema = schema;
25
26
  this.value = value;
26
27
  this.error = error;
27
28
  }
28
29
  }
30
+ // prettier-ignore
29
31
  export class TransformEncodeError extends TypeBoxError {
30
32
  schema;
33
+ path;
31
34
  value;
32
- constructor(schema, value, error) {
35
+ error;
36
+ constructor(schema, path, value, error) {
33
37
  super(`${error instanceof Error ? error.message : 'Unknown error'}`);
34
38
  this.schema = schema;
39
+ this.path = path;
35
40
  this.value = value;
41
+ this.error = error;
36
42
  }
37
43
  }
38
44
  // ------------------------------------------------------------------
39
45
  // Encode
40
46
  // ------------------------------------------------------------------
41
47
  // prettier-ignore
42
- function Default(schema, value) {
48
+ function Default(schema, path, value) {
43
49
  try {
44
50
  return IsTransform(schema) ? schema[TransformKind].Encode(value) : value;
45
51
  }
46
52
  catch (error) {
47
- throw new TransformEncodeError(schema, value, error);
53
+ throw new TransformEncodeError(schema, path, value, error);
48
54
  }
49
55
  }
50
56
  // prettier-ignore
51
- function FromArray(schema, references, value) {
52
- const defaulted = Default(schema, value);
57
+ function FromArray(schema, references, path, value) {
58
+ const defaulted = Default(schema, path, value);
53
59
  return IsArray(defaulted)
54
- ? defaulted.map((value) => Visit(schema.items, references, value))
60
+ ? defaulted.map((value, index) => Visit(schema.items, references, `${path}/${index}`, value))
55
61
  : defaulted;
56
62
  }
57
63
  // prettier-ignore
58
- function FromIntersect(schema, references, value) {
59
- const defaulted = Default(schema, value);
64
+ function FromIntersect(schema, references, path, value) {
65
+ const defaulted = Default(schema, path, value);
60
66
  if (!IsStandardObject(value) || IsValueType(value))
61
67
  return defaulted;
62
68
  const knownKeys = KeyOfPropertyKeys(schema);
63
69
  const knownProperties = knownKeys.reduce((value, key) => {
64
70
  return key in defaulted
65
- ? { ...value, [key]: Visit(Index(schema, [key]), references, value[key]) }
71
+ ? { ...value, [key]: Visit(Index(schema, [key]), references, `${path}/${key}`, value[key]) }
66
72
  : value;
67
73
  }, defaulted);
68
74
  if (!IsTransform(schema.unevaluatedProperties)) {
69
- return Default(schema, knownProperties);
75
+ return Default(schema, path, knownProperties);
70
76
  }
71
77
  const unknownKeys = Object.getOwnPropertyNames(knownProperties);
72
78
  const unevaluatedProperties = schema.unevaluatedProperties;
73
79
  return unknownKeys.reduce((value, key) => {
74
80
  return !knownKeys.includes(key)
75
- ? { ...value, [key]: Default(unevaluatedProperties, value[key]) }
81
+ ? { ...value, [key]: Default(unevaluatedProperties, `${path}/${key}`, value[key]) }
76
82
  : value;
77
83
  }, knownProperties);
78
84
  }
79
85
  // prettier-ignore
80
- function FromNot(schema, references, value) {
81
- return Default(schema.not, Default(schema, value));
86
+ function FromNot(schema, references, path, value) {
87
+ return Default(schema.not, path, Default(schema, path, value));
82
88
  }
83
89
  // prettier-ignore
84
- function FromObject(schema, references, value) {
85
- const defaulted = Default(schema, value);
90
+ function FromObject(schema, references, path, value) {
91
+ const defaulted = Default(schema, path, value);
86
92
  if (!IsStandardObject(value))
87
93
  return defaulted;
88
94
  const knownKeys = KeyOfPropertyKeys(schema);
89
95
  const knownProperties = knownKeys.reduce((value, key) => {
90
96
  return key in value
91
- ? { ...value, [key]: Visit(schema.properties[key], references, value[key]) }
97
+ ? { ...value, [key]: Visit(schema.properties[key], references, `${path}/${key}`, value[key]) }
92
98
  : value;
93
99
  }, defaulted);
94
100
  if (!IsSchema(schema.additionalProperties)) {
@@ -98,93 +104,93 @@ function FromObject(schema, references, value) {
98
104
  const additionalProperties = schema.additionalProperties;
99
105
  return unknownKeys.reduce((value, key) => {
100
106
  return !knownKeys.includes(key)
101
- ? { ...value, [key]: Default(additionalProperties, value[key]) }
107
+ ? { ...value, [key]: Default(additionalProperties, `${path}/${key}`, value[key]) }
102
108
  : value;
103
109
  }, knownProperties);
104
110
  }
105
111
  // prettier-ignore
106
- function FromRecord(schema, references, value) {
107
- const defaulted = Default(schema, value);
112
+ function FromRecord(schema, references, path, value) {
113
+ const defaulted = Default(schema, path, value);
108
114
  if (!IsStandardObject(value))
109
115
  return defaulted;
110
116
  const pattern = Object.getOwnPropertyNames(schema.patternProperties)[0];
111
117
  const knownKeys = new RegExp(pattern);
112
118
  const knownProperties = Object.getOwnPropertyNames(value).reduce((value, key) => {
113
119
  return knownKeys.test(key)
114
- ? { ...value, [key]: Visit(schema.patternProperties[pattern], references, value[key]) }
120
+ ? { ...value, [key]: Visit(schema.patternProperties[pattern], references, `${path}/${key}`, value[key]) }
115
121
  : value;
116
122
  }, defaulted);
117
123
  if (!IsSchema(schema.additionalProperties)) {
118
- return Default(schema, knownProperties);
124
+ return Default(schema, path, knownProperties);
119
125
  }
120
126
  const unknownKeys = Object.getOwnPropertyNames(knownProperties);
121
127
  const additionalProperties = schema.additionalProperties;
122
128
  return unknownKeys.reduce((value, key) => {
123
129
  return !knownKeys.test(key)
124
- ? { ...value, [key]: Default(additionalProperties, value[key]) }
130
+ ? { ...value, [key]: Default(additionalProperties, `${path}/${key}`, value[key]) }
125
131
  : value;
126
132
  }, knownProperties);
127
133
  }
128
134
  // prettier-ignore
129
- function FromRef(schema, references, value) {
135
+ function FromRef(schema, references, path, value) {
130
136
  const target = Deref(schema, references);
131
- const resolved = Visit(target, references, value);
132
- return Default(schema, resolved);
137
+ const resolved = Visit(target, references, path, value);
138
+ return Default(schema, path, resolved);
133
139
  }
134
140
  // prettier-ignore
135
- function FromThis(schema, references, value) {
141
+ function FromThis(schema, references, path, value) {
136
142
  const target = Deref(schema, references);
137
- const resolved = Visit(target, references, value);
138
- return Default(schema, resolved);
143
+ const resolved = Visit(target, references, path, value);
144
+ return Default(schema, path, resolved);
139
145
  }
140
146
  // prettier-ignore
141
- function FromTuple(schema, references, value) {
142
- const value1 = Default(schema, value);
143
- return IsArray(schema.items) ? schema.items.map((schema, index) => Visit(schema, references, value1[index])) : [];
147
+ function FromTuple(schema, references, path, value) {
148
+ const value1 = Default(schema, path, value);
149
+ return IsArray(schema.items) ? schema.items.map((schema, index) => Visit(schema, references, `${path}/${index}`, value1[index])) : [];
144
150
  }
145
151
  // prettier-ignore
146
- function FromUnion(schema, references, value) {
152
+ function FromUnion(schema, references, path, value) {
147
153
  // test value against union variants
148
154
  for (const subschema of schema.anyOf) {
149
155
  if (!Check(subschema, references, value))
150
156
  continue;
151
- const value1 = Visit(subschema, references, value);
152
- return Default(schema, value1);
157
+ const value1 = Visit(subschema, references, path, value);
158
+ return Default(schema, path, value1);
153
159
  }
154
160
  // test transformed value against union variants
155
161
  for (const subschema of schema.anyOf) {
156
- const value1 = Visit(subschema, references, value);
162
+ const value1 = Visit(subschema, references, path, value);
157
163
  if (!Check(schema, references, value1))
158
164
  continue;
159
- return Default(schema, value1);
165
+ return Default(schema, path, value1);
160
166
  }
161
- return Default(schema, value);
167
+ return Default(schema, path, value);
162
168
  }
163
169
  // prettier-ignore
164
- function Visit(schema, references, value) {
170
+ function Visit(schema, references, path, value) {
165
171
  const references_ = typeof schema.$id === 'string' ? [...references, schema] : references;
166
172
  const schema_ = schema;
167
173
  switch (schema[Kind]) {
168
174
  case 'Array':
169
- return FromArray(schema_, references_, value);
175
+ return FromArray(schema_, references_, path, value);
170
176
  case 'Intersect':
171
- return FromIntersect(schema_, references_, value);
177
+ return FromIntersect(schema_, references_, path, value);
172
178
  case 'Not':
173
- return FromNot(schema_, references_, value);
179
+ return FromNot(schema_, references_, path, value);
174
180
  case 'Object':
175
- return FromObject(schema_, references_, value);
181
+ return FromObject(schema_, references_, path, value);
176
182
  case 'Record':
177
- return FromRecord(schema_, references_, value);
183
+ return FromRecord(schema_, references_, path, value);
178
184
  case 'Ref':
179
- return FromRef(schema_, references_, value);
185
+ return FromRef(schema_, references_, path, value);
180
186
  case 'This':
181
- return FromThis(schema_, references_, value);
187
+ return FromThis(schema_, references_, path, value);
182
188
  case 'Tuple':
183
- return FromTuple(schema_, references_, value);
189
+ return FromTuple(schema_, references_, path, value);
184
190
  case 'Union':
185
- return FromUnion(schema_, references_, value);
191
+ return FromUnion(schema_, references_, path, value);
186
192
  default:
187
- return Default(schema_, value);
193
+ return Default(schema_, path, value);
188
194
  }
189
195
  }
190
196
  /**
@@ -194,5 +200,5 @@ function Visit(schema, references, value) {
194
200
  * `Value.Encode()` function for implementation details.
195
201
  */
196
202
  export function TransformEncode(schema, references, value) {
197
- return Visit(schema, references, value);
203
+ return Visit(schema, references, '', value);
198
204
  }
@@ -51,7 +51,7 @@ export function Encode(...args) {
51
51
  const [schema, references, value] = args.length === 3 ? [args[0], args[1], args[2]] : [args[0], [], args[1]];
52
52
  const encoded = TransformEncode(schema, references, value);
53
53
  if (!Check(schema, references, encoded))
54
- throw new TransformEncodeCheckError(schema, value, Errors(schema, references, value).First());
54
+ throw new TransformEncodeCheckError(schema, encoded, Errors(schema, references, encoded).First());
55
55
  return encoded;
56
56
  }
57
57
  /** Returns an iterator for each error in this value. */
@@ -8,7 +8,7 @@ export declare class TypeSystemDuplicateFormat extends TypeBoxError {
8
8
  /** Creates user defined types and formats and provides overrides for value checking behaviours */
9
9
  export declare namespace TypeSystem {
10
10
  /** Creates a new type */
11
- function Type<Type, Options = Record<PropertyKey, unknown>>(kind: string, check: (options: Options, value: unknown) => boolean): (options?: Partial<Options>) => import("../type/unsafe/unsafe").TUnsafe<Type>;
11
+ function Type<Type, Options = Record<PropertyKey, unknown>>(kind: string, check: (options: Options, value: unknown) => boolean): (options?: Partial<Options>) => import("src/type/unsafe/unsafe").TUnsafe<Type>;
12
12
  /** Creates a new string format */
13
13
  function Format<F extends string>(format: F, check: (value: string) => boolean): F;
14
14
  }
@@ -16,7 +16,7 @@ import { type TIndexFromMappedResult } from './indexed-from-mapped-result';
16
16
  type TFromRest<T extends TSchema[], K extends PropertyKey, Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromRest<R, K, [...Acc, Assert<TIndexFromPropertyKey<L, K>, TSchema>]> : Acc);
17
17
  type TFromIntersectRest<T extends TSchema[], Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? L extends TNever ? TFromIntersectRest<R, [...Acc]> : TFromIntersectRest<R, [...Acc, L]> : Acc);
18
18
  type TFromIntersect<T extends TSchema[], K extends PropertyKey> = (TIntersectEvaluated<TFromIntersectRest<TFromRest<T, K>>>);
19
- type TFromUnionRest<T extends TSchema[]> = T;
19
+ type TFromUnionRest<T extends TSchema[], Acc extends TSchema[] = []> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? L extends TNever ? [] : TFromUnionRest<R, [L, ...Acc]> : Acc;
20
20
  type TFromUnion<T extends TSchema[], K extends PropertyKey> = (TUnionEvaluated<TFromUnionRest<TFromRest<T, K>>>);
21
21
  type TFromTuple<T extends TSchema[], K extends PropertyKey> = (K extends keyof T ? T[K] : K extends '[number]' ? TUnionEvaluated<T> : TNever);
22
22
  type TFromArray<T extends TSchema, K extends PropertyKey> = (K extends '[number]' ? T : TNever);
@@ -27,7 +27,9 @@ function FromIntersect(T, K) {
27
27
  }
28
28
  // prettier-ignore
29
29
  function FromUnionRest(T) {
30
- return T; // review this
30
+ return (T.some(L => (0, type_2.IsNever)(L))
31
+ ? []
32
+ : T);
31
33
  }
32
34
  // prettier-ignore
33
35
  function FromUnion(T, K) {
@@ -24,8 +24,9 @@ export type TDecodeProperties<T extends TProperties> = {
24
24
  };
25
25
  export type TDecodeRest<T extends TSchema[], Acc extends TSchema[] = []> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TDecodeRest<R, [...Acc, TDecodeType<L>]> : Acc;
26
26
  export type TDecodeType<T extends TSchema> = (T extends TOptional<infer S extends TSchema> ? TOptional<TDecodeType<S>> : T extends TReadonly<infer S extends TSchema> ? TReadonly<TDecodeType<S>> : T extends TTransform<infer _, infer R> ? TUnsafe<R> : T extends TArray<infer S extends TSchema> ? TArray<TDecodeType<S>> : T extends TAsyncIterator<infer S extends TSchema> ? TAsyncIterator<TDecodeType<S>> : T extends TConstructor<infer P extends TSchema[], infer R extends TSchema> ? TConstructor<TDecodeRest<P>, TDecodeType<R>> : T extends TEnum<infer S> ? TEnum<S> : T extends TFunction<infer P extends TSchema[], infer R extends TSchema> ? TFunction<TDecodeRest<P>, TDecodeType<R>> : T extends TIntersect<infer S extends TSchema[]> ? TIntersect<TDecodeRest<S>> : T extends TIterator<infer S extends TSchema> ? TIterator<TDecodeType<S>> : T extends TNot<infer S extends TSchema> ? TNot<TDecodeType<S>> : T extends TObject<infer S> ? TObject<Evaluate<TDecodeProperties<S>>> : T extends TPromise<infer S extends TSchema> ? TPromise<TDecodeType<S>> : T extends TRecord<infer K, infer S> ? TRecord<K, TDecodeType<S>> : T extends TRecursive<infer S extends TSchema> ? TRecursive<TDecodeType<S>> : T extends TRef<infer S extends TSchema> ? TRef<TDecodeType<S>> : T extends TTuple<infer S extends TSchema[]> ? TTuple<TDecodeRest<S>> : T extends TUnion<infer S extends TSchema[]> ? TUnion<TDecodeRest<S>> : T);
27
+ export type StaticDecodeIsAny<T> = boolean extends (T extends TSchema ? true : false) ? true : false;
27
28
  /** Creates an decoded static type from a TypeBox type */
28
- export type StaticDecode<T extends TSchema, P extends unknown[] = []> = Static<TDecodeType<T>, P>;
29
+ export type StaticDecode<T extends TSchema, P extends unknown[] = []> = StaticDecodeIsAny<T> extends true ? unknown : Static<TDecodeType<T>, P>;
29
30
  /** Creates an encoded static type from a TypeBox type */
30
31
  export type StaticEncode<T extends TSchema, P extends unknown[] = []> = Static<T, P>;
31
32
  /** Creates a static type from a TypeBox type */
@@ -9,23 +9,42 @@ const index_1 = require("../error/index");
9
9
  class TemplateLiteralParserError extends index_1.TypeBoxError {
10
10
  }
11
11
  exports.TemplateLiteralParserError = TemplateLiteralParserError;
12
+ // -------------------------------------------------------------------
13
+ // Unescape
14
+ //
15
+ // Unescape for these control characters specifically. Note that this
16
+ // function is only called on non union group content, and where we
17
+ // still want to allow the user to embed control characters in that
18
+ // content. For review.
19
+ // -------------------------------------------------------------------
12
20
  // prettier-ignore
21
+ function Unescape(pattern) {
22
+ return pattern
23
+ .replace(/\\\$/g, '$')
24
+ .replace(/\\\*/g, '*')
25
+ .replace(/\\\^/g, '^')
26
+ .replace(/\\\|/g, '|')
27
+ .replace(/\\\(/g, '(')
28
+ .replace(/\\\)/g, ')');
29
+ }
30
+ // -------------------------------------------------------------------
31
+ // Control Characters
32
+ // -------------------------------------------------------------------
13
33
  function IsNonEscaped(pattern, index, char) {
14
34
  return pattern[index] === char && pattern.charCodeAt(index - 1) !== 92;
15
35
  }
16
- // prettier-ignore
17
36
  function IsOpenParen(pattern, index) {
18
37
  return IsNonEscaped(pattern, index, '(');
19
38
  }
20
- // prettier-ignore
21
39
  function IsCloseParen(pattern, index) {
22
40
  return IsNonEscaped(pattern, index, ')');
23
41
  }
24
- // prettier-ignore
25
42
  function IsSeparator(pattern, index) {
26
43
  return IsNonEscaped(pattern, index, '|');
27
44
  }
28
- // prettier-ignore
45
+ // -------------------------------------------------------------------
46
+ // Control Groups
47
+ // -------------------------------------------------------------------
29
48
  function IsGroup(pattern) {
30
49
  if (!(IsOpenParen(pattern, 0) && IsCloseParen(pattern, pattern.length - 1)))
31
50
  return false;
@@ -142,7 +161,7 @@ function TemplateLiteralParse(pattern) {
142
161
  return (IsGroup(pattern) ? TemplateLiteralParse(InGroup(pattern)) :
143
162
  IsPrecedenceOr(pattern) ? Or(pattern) :
144
163
  IsPrecedenceAnd(pattern) ? And(pattern) :
145
- { type: 'const', const: pattern });
164
+ { type: 'const', const: Unescape(pattern) });
146
165
  }
147
166
  exports.TemplateLiteralParse = TemplateLiteralParse;
148
167
  // ------------------------------------------------------------------
@@ -12,7 +12,7 @@ type FromUnionLiteral<T extends string> = T extends `${infer L}|${infer R}` ? [T
12
12
  ];
13
13
  type FromUnion<T extends string> = TUnionEvaluated<FromUnionLiteral<T>>;
14
14
  type FromTerminal<T extends string> = T extends 'boolean' ? TBoolean : T extends 'bigint' ? TBigInt : T extends 'number' ? TNumber : T extends 'string' ? TString : FromUnion<T>;
15
- type FromString<T extends string> = T extends `{${infer L}}${infer R}` ? [FromTerminal<L>, ...FromString<R>] : T extends `${infer L}$${infer R}` ? [TLiteral<L>, ...FromString<R>] : T extends `${infer L}` ? [TLiteral<L>] : [
15
+ type FromString<T extends string> = T extends `{${infer L}}${infer R}` ? [FromTerminal<L>, ...FromString<R>] : T extends `${infer L}$\{${infer R1}\}${infer R2}` ? [TLiteral<L>, ...FromString<`{${R1}}`>, ...FromString<R2>] : T extends `${infer L}$\{${infer R1}\}` ? [TLiteral<L>, ...FromString<`{${R1}}`>] : T extends `${infer L}` ? [TLiteral<L>] : [
16
16
  ];
17
17
  export type TTemplateLiteralSyntax<T extends string> = (TTemplateLiteral<Assert<FromString<T>, TTemplateLiteralKind[]>>);
18
18
  /** Parses TemplateLiteralSyntax and returns a tuple of TemplateLiteralKinds */
@@ -3,44 +3,41 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.Convert = void 0;
5
5
  const index_1 = require("../clone/index");
6
- const index_2 = require("../check/index");
7
- const index_3 = require("../deref/index");
8
- const type_1 = require("../../type/guard/type");
9
- const index_4 = require("../../type/symbols/index");
10
- const index_5 = require("../../type/composite/index");
6
+ const index_2 = require("../deref/index");
7
+ const index_3 = require("../../type/symbols/index");
11
8
  // ------------------------------------------------------------------
12
9
  // ValueGuard
13
10
  // ------------------------------------------------------------------
14
- const index_6 = require("../guard/index");
11
+ const index_4 = require("../guard/index");
15
12
  // ------------------------------------------------------------------
16
13
  // Conversions
17
14
  // ------------------------------------------------------------------
18
15
  function IsStringNumeric(value) {
19
- return (0, index_6.IsString)(value) && !isNaN(value) && !isNaN(parseFloat(value));
16
+ return (0, index_4.IsString)(value) && !isNaN(value) && !isNaN(parseFloat(value));
20
17
  }
21
18
  function IsValueToString(value) {
22
- return (0, index_6.IsBigInt)(value) || (0, index_6.IsBoolean)(value) || (0, index_6.IsNumber)(value);
19
+ return (0, index_4.IsBigInt)(value) || (0, index_4.IsBoolean)(value) || (0, index_4.IsNumber)(value);
23
20
  }
24
21
  function IsValueTrue(value) {
25
- return value === true || ((0, index_6.IsNumber)(value) && value === 1) || ((0, index_6.IsBigInt)(value) && value === BigInt('1')) || ((0, index_6.IsString)(value) && (value.toLowerCase() === 'true' || value === '1'));
22
+ return value === true || ((0, index_4.IsNumber)(value) && value === 1) || ((0, index_4.IsBigInt)(value) && value === BigInt('1')) || ((0, index_4.IsString)(value) && (value.toLowerCase() === 'true' || value === '1'));
26
23
  }
27
24
  function IsValueFalse(value) {
28
- return value === false || ((0, index_6.IsNumber)(value) && (value === 0 || Object.is(value, -0))) || ((0, index_6.IsBigInt)(value) && value === BigInt('0')) || ((0, index_6.IsString)(value) && (value.toLowerCase() === 'false' || value === '0' || value === '-0'));
25
+ return value === false || ((0, index_4.IsNumber)(value) && (value === 0 || Object.is(value, -0))) || ((0, index_4.IsBigInt)(value) && value === BigInt('0')) || ((0, index_4.IsString)(value) && (value.toLowerCase() === 'false' || value === '0' || value === '-0'));
29
26
  }
30
27
  function IsTimeStringWithTimeZone(value) {
31
- return (0, index_6.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
28
+ return (0, index_4.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
32
29
  }
33
30
  function IsTimeStringWithoutTimeZone(value) {
34
- return (0, index_6.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
31
+ return (0, index_4.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
35
32
  }
36
33
  function IsDateTimeStringWithTimeZone(value) {
37
- return (0, index_6.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
34
+ return (0, index_4.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
38
35
  }
39
36
  function IsDateTimeStringWithoutTimeZone(value) {
40
- return (0, index_6.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
37
+ return (0, index_4.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
41
38
  }
42
39
  function IsDateString(value) {
43
- return (0, index_6.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\d$/i.test(value);
40
+ return (0, index_4.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\d$/i.test(value);
44
41
  }
45
42
  // ------------------------------------------------------------------
46
43
  // Convert
@@ -59,31 +56,31 @@ function TryConvertLiteralBoolean(value, target) {
59
56
  }
60
57
  // prettier-ignore
61
58
  function TryConvertLiteral(schema, value) {
62
- return ((0, index_6.IsString)(schema.const) ? TryConvertLiteralString(value, schema.const) :
63
- (0, index_6.IsNumber)(schema.const) ? TryConvertLiteralNumber(value, schema.const) :
64
- (0, index_6.IsBoolean)(schema.const) ? TryConvertLiteralBoolean(value, schema.const) :
59
+ return ((0, index_4.IsString)(schema.const) ? TryConvertLiteralString(value, schema.const) :
60
+ (0, index_4.IsNumber)(schema.const) ? TryConvertLiteralNumber(value, schema.const) :
61
+ (0, index_4.IsBoolean)(schema.const) ? TryConvertLiteralBoolean(value, schema.const) :
65
62
  (0, index_1.Clone)(value));
66
63
  }
67
64
  function TryConvertBoolean(value) {
68
65
  return IsValueTrue(value) ? true : IsValueFalse(value) ? false : value;
69
66
  }
70
67
  function TryConvertBigInt(value) {
71
- return IsStringNumeric(value) ? BigInt(parseInt(value)) : (0, index_6.IsNumber)(value) ? BigInt(value | 0) : IsValueFalse(value) ? BigInt(0) : IsValueTrue(value) ? BigInt(1) : value;
68
+ return IsStringNumeric(value) ? BigInt(parseInt(value)) : (0, index_4.IsNumber)(value) ? BigInt(value | 0) : IsValueFalse(value) ? BigInt(0) : IsValueTrue(value) ? BigInt(1) : value;
72
69
  }
73
70
  function TryConvertString(value) {
74
- return IsValueToString(value) ? value.toString() : (0, index_6.IsSymbol)(value) && value.description !== undefined ? value.description.toString() : value;
71
+ return IsValueToString(value) ? value.toString() : (0, index_4.IsSymbol)(value) && value.description !== undefined ? value.description.toString() : value;
75
72
  }
76
73
  function TryConvertNumber(value) {
77
74
  return IsStringNumeric(value) ? parseFloat(value) : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
78
75
  }
79
76
  function TryConvertInteger(value) {
80
- return IsStringNumeric(value) ? parseInt(value) : (0, index_6.IsNumber)(value) ? value | 0 : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
77
+ return IsStringNumeric(value) ? parseInt(value) : (0, index_4.IsNumber)(value) ? value | 0 : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
81
78
  }
82
79
  function TryConvertNull(value) {
83
- return (0, index_6.IsString)(value) && value.toLowerCase() === 'null' ? null : value;
80
+ return (0, index_4.IsString)(value) && value.toLowerCase() === 'null' ? null : value;
84
81
  }
85
82
  function TryConvertUndefined(value) {
86
- return (0, index_6.IsString)(value) && value === 'undefined' ? undefined : value;
83
+ return (0, index_4.IsString)(value) && value === 'undefined' ? undefined : value;
87
84
  }
88
85
  // ------------------------------------------------------------------
89
86
  // note: this function may return an invalid dates for the regex
@@ -94,8 +91,8 @@ function TryConvertUndefined(value) {
94
91
  // ------------------------------------------------------------------
95
92
  // prettier-ignore
96
93
  function TryConvertDate(value) {
97
- return ((0, index_6.IsDate)(value) ? value :
98
- (0, index_6.IsNumber)(value) ? new Date(value) :
94
+ return ((0, index_4.IsDate)(value) ? value :
95
+ (0, index_4.IsNumber)(value) ? new Date(value) :
99
96
  IsValueTrue(value) ? new Date(1) :
100
97
  IsValueFalse(value) ? new Date(0) :
101
98
  IsStringNumeric(value) ? new Date(parseInt(value)) :
@@ -116,7 +113,7 @@ function Default(value) {
116
113
  // Convert
117
114
  // ------------------------------------------------------------------
118
115
  function FromArray(schema, references, value) {
119
- if ((0, index_6.IsArray)(value)) {
116
+ if ((0, index_4.IsArray)(value)) {
120
117
  return value.map((value) => Visit(schema.items, references, value));
121
118
  }
122
119
  return value;
@@ -133,12 +130,8 @@ function FromDate(schema, references, value) {
133
130
  function FromInteger(schema, references, value) {
134
131
  return TryConvertInteger(value);
135
132
  }
136
- // prettier-ignore
137
133
  function FromIntersect(schema, references, value) {
138
- const allObjects = schema.allOf.every(schema => (0, type_1.IsObject)(schema));
139
- if (allObjects)
140
- return Visit((0, index_5.Composite)(schema.allOf), references, value);
141
- return Visit(schema.allOf[0], references, value); // todo: fix this
134
+ return schema.allOf.reduce((value, schema) => Visit(schema, references, value), value);
142
135
  }
143
136
  function FromLiteral(schema, references, value) {
144
137
  return TryConvertLiteral(schema, value);
@@ -151,11 +144,11 @@ function FromNumber(schema, references, value) {
151
144
  }
152
145
  // prettier-ignore
153
146
  function FromObject(schema, references, value) {
154
- const isConvertable = (0, index_6.IsObject)(value);
147
+ const isConvertable = (0, index_4.IsObject)(value);
155
148
  if (!isConvertable)
156
149
  return value;
157
150
  return Object.getOwnPropertyNames(schema.properties).reduce((value, key) => {
158
- return !(0, index_6.IsUndefined)(value[key])
151
+ return !(0, index_4.IsUndefined)(value[key])
159
152
  ? ({ ...value, [key]: Visit(schema.properties[key], references, value[key]) })
160
153
  : ({ ...value });
161
154
  }, value);
@@ -170,20 +163,20 @@ function FromRecord(schema, references, value) {
170
163
  return result;
171
164
  }
172
165
  function FromRef(schema, references, value) {
173
- return Visit((0, index_3.Deref)(schema, references), references, value);
166
+ return Visit((0, index_2.Deref)(schema, references), references, value);
174
167
  }
175
168
  function FromString(schema, references, value) {
176
169
  return TryConvertString(value);
177
170
  }
178
171
  function FromSymbol(schema, references, value) {
179
- return (0, index_6.IsString)(value) || (0, index_6.IsNumber)(value) ? Symbol(value) : value;
172
+ return (0, index_4.IsString)(value) || (0, index_4.IsNumber)(value) ? Symbol(value) : value;
180
173
  }
181
174
  function FromThis(schema, references, value) {
182
- return Visit((0, index_3.Deref)(schema, references), references, value);
175
+ return Visit((0, index_2.Deref)(schema, references), references, value);
183
176
  }
184
177
  // prettier-ignore
185
178
  function FromTuple(schema, references, value) {
186
- const isConvertable = (0, index_6.IsArray)(value) && !(0, index_6.IsUndefined)(schema.items);
179
+ const isConvertable = (0, index_4.IsArray)(value) && !(0, index_4.IsUndefined)(schema.items);
187
180
  if (!isConvertable)
188
181
  return value;
189
182
  return value.map((value, index) => {
@@ -196,18 +189,12 @@ function FromUndefined(schema, references, value) {
196
189
  return TryConvertUndefined(value);
197
190
  }
198
191
  function FromUnion(schema, references, value) {
199
- for (const subschema of schema.anyOf) {
200
- const converted = Visit(subschema, references, value);
201
- if ((0, index_2.Check)(subschema, references, converted)) {
202
- return converted;
203
- }
204
- }
205
- return value;
192
+ return schema.anyOf.reduce((value, schema) => Visit(schema, references, value), value);
206
193
  }
207
194
  function Visit(schema, references, value) {
208
- const references_ = (0, index_6.IsString)(schema.$id) ? [...references, schema] : references;
195
+ const references_ = (0, index_4.IsString)(schema.$id) ? [...references, schema] : references;
209
196
  const schema_ = schema;
210
- switch (schema[index_4.Kind]) {
197
+ switch (schema[index_3.Kind]) {
211
198
  case 'Array':
212
199
  return FromArray(schema_, references_, value);
213
200
  case 'BigInt':
@@ -1,34 +1,34 @@
1
1
  import type { Static } from '../../type/static/index';
2
2
  import { TypeBoxError } from '../../type/error/index';
3
3
  export type Insert = Static<typeof Insert>;
4
- export declare const Insert: import("../../type/object/object").TObject<{
5
- type: import("../../type/literal/literal").TLiteral<"insert">;
6
- path: import("../../type/string/string").TString;
7
- value: import("../../type/unknown/unknown").TUnknown;
4
+ export declare const Insert: import("src/type/object/object").TObject<{
5
+ type: import("src/type/literal/literal").TLiteral<"insert">;
6
+ path: import("src/type/string/string").TString;
7
+ value: import("src/type/unknown/unknown").TUnknown;
8
8
  }>;
9
9
  export type Update = Static<typeof Update>;
10
- export declare const Update: import("../../type/object/object").TObject<{
11
- type: import("../../type/literal/literal").TLiteral<"update">;
12
- path: import("../../type/string/string").TString;
13
- value: import("../../type/unknown/unknown").TUnknown;
10
+ export declare const Update: import("src/type/object/object").TObject<{
11
+ type: import("src/type/literal/literal").TLiteral<"update">;
12
+ path: import("src/type/string/string").TString;
13
+ value: import("src/type/unknown/unknown").TUnknown;
14
14
  }>;
15
15
  export type Delete = Static<typeof Delete>;
16
- export declare const Delete: import("../../type/object/object").TObject<{
17
- type: import("../../type/literal/literal").TLiteral<"delete">;
18
- path: import("../../type/string/string").TString;
16
+ export declare const Delete: import("src/type/object/object").TObject<{
17
+ type: import("src/type/literal/literal").TLiteral<"delete">;
18
+ path: import("src/type/string/string").TString;
19
19
  }>;
20
20
  export type Edit = Static<typeof Edit>;
21
- export declare const Edit: import("../../type/union/union-type").TUnion<[import("../../type/object/object").TObject<{
22
- type: import("../../type/literal/literal").TLiteral<"insert">;
23
- path: import("../../type/string/string").TString;
24
- value: import("../../type/unknown/unknown").TUnknown;
25
- }>, import("../../type/object/object").TObject<{
26
- type: import("../../type/literal/literal").TLiteral<"update">;
27
- path: import("../../type/string/string").TString;
28
- value: import("../../type/unknown/unknown").TUnknown;
29
- }>, import("../../type/object/object").TObject<{
30
- type: import("../../type/literal/literal").TLiteral<"delete">;
31
- path: import("../../type/string/string").TString;
21
+ export declare const Edit: import("src/type/union/union-type").TUnion<[import("src/type/object/object").TObject<{
22
+ type: import("src/type/literal/literal").TLiteral<"insert">;
23
+ path: import("src/type/string/string").TString;
24
+ value: import("src/type/unknown/unknown").TUnknown;
25
+ }>, import("src/type/object/object").TObject<{
26
+ type: import("src/type/literal/literal").TLiteral<"update">;
27
+ path: import("src/type/string/string").TString;
28
+ value: import("src/type/unknown/unknown").TUnknown;
29
+ }>, import("src/type/object/object").TObject<{
30
+ type: import("src/type/literal/literal").TLiteral<"delete">;
31
+ path: import("src/type/string/string").TString;
32
32
  }>]>;
33
33
  export declare class ValueDeltaError extends TypeBoxError {
34
34
  readonly value: unknown;
@@ -9,8 +9,10 @@ export declare class TransformDecodeCheckError extends TypeBoxError {
9
9
  }
10
10
  export declare class TransformDecodeError extends TypeBoxError {
11
11
  readonly schema: TSchema;
12
+ readonly path: string;
12
13
  readonly value: unknown;
13
- constructor(schema: TSchema, value: unknown, error: any);
14
+ readonly error: Error;
15
+ constructor(schema: TSchema, path: string, value: unknown, error: Error);
14
16
  }
15
17
  /**
16
18
  * `[Internal]` Decodes the value and returns the result. This function requires that