@sinclair/typebox 0.31.26 → 0.31.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/readme.md +5 -5
- package/typebox.d.ts +4 -0
- package/typebox.js +24 -6
- package/value/create.js +1 -1
- package/value/transform.d.ts +0 -5
- package/value/transform.js +136 -180
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1719,11 +1719,11 @@ The following table lists esbuild compiled and minified sizes for each TypeBox m
|
|
|
1719
1719
|
┌──────────────────────┬────────────┬────────────┬─────────────┐
|
|
1720
1720
|
│ (index) │ Compiled │ Minified │ Compression │
|
|
1721
1721
|
├──────────────────────┼────────────┼────────────┼─────────────┤
|
|
1722
|
-
│ typebox/compiler │ '
|
|
1723
|
-
│ typebox/errors │ '
|
|
1724
|
-
│ typebox/system │ '
|
|
1725
|
-
│ typebox/value │ '
|
|
1726
|
-
│ typebox │ '
|
|
1722
|
+
│ typebox/compiler │ '163.6 kb' │ ' 71.6 kb' │ '2.28 x' │
|
|
1723
|
+
│ typebox/errors │ '113.3 kb' │ ' 50.1 kb' │ '2.26 x' │
|
|
1724
|
+
│ typebox/system │ ' 83.9 kb' │ ' 37.5 kb' │ '2.24 x' │
|
|
1725
|
+
│ typebox/value │ '191.1 kb' │ ' 82.3 kb' │ '2.32 x' │
|
|
1726
|
+
│ typebox │ ' 73.8 kb' │ ' 32.3 kb' │ '2.29 x' │
|
|
1727
1727
|
└──────────────────────┴────────────┴────────────┴─────────────┘
|
|
1728
1728
|
```
|
|
1729
1729
|
|
package/typebox.d.ts
CHANGED
|
@@ -560,6 +560,8 @@ export declare namespace ValueGuard {
|
|
|
560
560
|
function IsBigInt(value: unknown): value is bigint;
|
|
561
561
|
/** Returns true if this value is a boolean */
|
|
562
562
|
function IsBoolean(value: unknown): value is boolean;
|
|
563
|
+
/** Returns true if this value is a Date object */
|
|
564
|
+
function IsDate(value: unknown): value is Date;
|
|
563
565
|
/** Returns true if this value is null */
|
|
564
566
|
function IsNull(value: unknown): value is null;
|
|
565
567
|
/** Returns true if this value is number */
|
|
@@ -568,6 +570,8 @@ export declare namespace ValueGuard {
|
|
|
568
570
|
function IsObject(value: unknown): value is Record<PropertyKey, unknown>;
|
|
569
571
|
/** Returns true if this value is string */
|
|
570
572
|
function IsString(value: unknown): value is string;
|
|
573
|
+
/** Returns true if this value is a Uint8Array */
|
|
574
|
+
function IsUint8Array(value: unknown): value is Uint8Array;
|
|
571
575
|
/** Returns true if this value is undefined */
|
|
572
576
|
function IsUndefined(value: unknown): value is undefined;
|
|
573
577
|
}
|
package/typebox.js
CHANGED
|
@@ -145,6 +145,11 @@ var ValueGuard;
|
|
|
145
145
|
return typeof value === 'boolean';
|
|
146
146
|
}
|
|
147
147
|
ValueGuard.IsBoolean = IsBoolean;
|
|
148
|
+
/** Returns true if this value is a Date object */
|
|
149
|
+
function IsDate(value) {
|
|
150
|
+
return value instanceof globalThis.Date;
|
|
151
|
+
}
|
|
152
|
+
ValueGuard.IsDate = IsDate;
|
|
148
153
|
/** Returns true if this value is null */
|
|
149
154
|
function IsNull(value) {
|
|
150
155
|
return value === null;
|
|
@@ -165,6 +170,11 @@ var ValueGuard;
|
|
|
165
170
|
return typeof value === 'string';
|
|
166
171
|
}
|
|
167
172
|
ValueGuard.IsString = IsString;
|
|
173
|
+
/** Returns true if this value is a Uint8Array */
|
|
174
|
+
function IsUint8Array(value) {
|
|
175
|
+
return value instanceof globalThis.Uint8Array;
|
|
176
|
+
}
|
|
177
|
+
ValueGuard.IsUint8Array = IsUint8Array;
|
|
168
178
|
/** Returns true if this value is undefined */
|
|
169
179
|
function IsUndefined(value) {
|
|
170
180
|
return value === undefined;
|
|
@@ -1252,19 +1262,27 @@ var TypeExtends;
|
|
|
1252
1262
|
/** Specialized Clone for Types */
|
|
1253
1263
|
var TypeClone;
|
|
1254
1264
|
(function (TypeClone) {
|
|
1265
|
+
function ArrayType(value) {
|
|
1266
|
+
return value.map((value) => Visit(value));
|
|
1267
|
+
}
|
|
1268
|
+
function DateType(value) {
|
|
1269
|
+
return new Date(value.getTime());
|
|
1270
|
+
}
|
|
1271
|
+
function Uint8ArrayType(value) {
|
|
1272
|
+
return new Uint8Array(value);
|
|
1273
|
+
}
|
|
1255
1274
|
function ObjectType(value) {
|
|
1256
1275
|
const clonedProperties = Object.getOwnPropertyNames(value).reduce((acc, key) => ({ ...acc, [key]: Visit(value[key]) }), {});
|
|
1257
1276
|
const clonedSymbols = Object.getOwnPropertySymbols(value).reduce((acc, key) => ({ ...acc, [key]: Visit(value[key]) }), {});
|
|
1258
1277
|
return { ...clonedProperties, ...clonedSymbols };
|
|
1259
1278
|
}
|
|
1260
|
-
function ArrayType(value) {
|
|
1261
|
-
return value.map((value) => Visit(value));
|
|
1262
|
-
}
|
|
1263
1279
|
function Visit(value) {
|
|
1264
1280
|
// prettier-ignore
|
|
1265
|
-
return ValueGuard.IsArray(value) ? ArrayType(value) :
|
|
1266
|
-
ValueGuard.
|
|
1267
|
-
value
|
|
1281
|
+
return (ValueGuard.IsArray(value) ? ArrayType(value) :
|
|
1282
|
+
ValueGuard.IsDate(value) ? DateType(value) :
|
|
1283
|
+
ValueGuard.IsUint8Array(value) ? Uint8ArrayType(value) :
|
|
1284
|
+
ValueGuard.IsObject(value) ? ObjectType(value) :
|
|
1285
|
+
value);
|
|
1268
1286
|
}
|
|
1269
1287
|
/** Clones a Rest */
|
|
1270
1288
|
function Rest(schemas) {
|
package/value/create.js
CHANGED
package/value/transform.d.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { ValueError } from '../errors/errors';
|
|
2
2
|
import * as Types from '../typebox';
|
|
3
|
-
export type CheckFunction = (schema: Types.TSchema, references: Types.TSchema[], value: unknown) => boolean;
|
|
4
|
-
export declare class TransformUnknownTypeError extends Types.TypeBoxError {
|
|
5
|
-
readonly schema: Types.TRef | Types.TThis;
|
|
6
|
-
constructor(schema: Types.TRef | Types.TThis);
|
|
7
|
-
}
|
|
8
3
|
export declare class TransformDecodeCheckError extends Types.TypeBoxError {
|
|
9
4
|
readonly schema: Types.TSchema;
|
|
10
5
|
readonly value: unknown;
|
package/value/transform.js
CHANGED
|
@@ -27,7 +27,7 @@ THE SOFTWARE.
|
|
|
27
27
|
|
|
28
28
|
---------------------------------------------------------------------------*/
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.EncodeTransform = exports.DecodeTransform = exports.HasTransform = exports.TransformEncodeError = exports.TransformDecodeError = exports.TransformEncodeCheckError = exports.TransformDecodeCheckError =
|
|
30
|
+
exports.EncodeTransform = exports.DecodeTransform = exports.HasTransform = exports.TransformEncodeError = exports.TransformDecodeError = exports.TransformEncodeCheckError = exports.TransformDecodeCheckError = void 0;
|
|
31
31
|
const guard_1 = require("./guard");
|
|
32
32
|
const deref_1 = require("./deref");
|
|
33
33
|
const check_1 = require("./check");
|
|
@@ -35,13 +35,6 @@ const Types = require("../typebox");
|
|
|
35
35
|
// -------------------------------------------------------------------------
|
|
36
36
|
// Errors
|
|
37
37
|
// -------------------------------------------------------------------------
|
|
38
|
-
class TransformUnknownTypeError extends Types.TypeBoxError {
|
|
39
|
-
constructor(schema) {
|
|
40
|
-
super(`Unknown type`);
|
|
41
|
-
this.schema = schema;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
exports.TransformUnknownTypeError = TransformUnknownTypeError;
|
|
45
38
|
class TransformDecodeCheckError extends Types.TypeBoxError {
|
|
46
39
|
constructor(schema, value, error) {
|
|
47
40
|
super(`Unable to decode due to invalid value`);
|
|
@@ -76,9 +69,9 @@ class TransformEncodeError extends Types.TypeBoxError {
|
|
|
76
69
|
}
|
|
77
70
|
}
|
|
78
71
|
exports.TransformEncodeError = TransformEncodeError;
|
|
79
|
-
//
|
|
72
|
+
// ------------------------------------------------------------------
|
|
80
73
|
// HasTransform
|
|
81
|
-
//
|
|
74
|
+
// ------------------------------------------------------------------
|
|
82
75
|
/** Recursively checks a schema for transform codecs */
|
|
83
76
|
var HasTransform;
|
|
84
77
|
(function (HasTransform) {
|
|
@@ -139,9 +132,6 @@ var HasTransform;
|
|
|
139
132
|
if (schema.$id)
|
|
140
133
|
visited.add(schema.$id);
|
|
141
134
|
switch (schema[Types.Kind]) {
|
|
142
|
-
// ------------------------------------------------------
|
|
143
|
-
// Structural
|
|
144
|
-
// ------------------------------------------------------
|
|
145
135
|
case 'Array':
|
|
146
136
|
return TArray(schema_, references_);
|
|
147
137
|
case 'AsyncIterator':
|
|
@@ -170,29 +160,7 @@ var HasTransform;
|
|
|
170
160
|
return TTuple(schema_, references_);
|
|
171
161
|
case 'Union':
|
|
172
162
|
return TUnion(schema_, references_);
|
|
173
|
-
// ------------------------------------------------------
|
|
174
|
-
// Default
|
|
175
|
-
// ------------------------------------------------------
|
|
176
|
-
case 'Any':
|
|
177
|
-
case 'BigInt':
|
|
178
|
-
case 'Boolean':
|
|
179
|
-
case 'Date':
|
|
180
|
-
case 'Integer':
|
|
181
|
-
case 'Literal':
|
|
182
|
-
case 'Never':
|
|
183
|
-
case 'Null':
|
|
184
|
-
case 'Number':
|
|
185
|
-
case 'String':
|
|
186
|
-
case 'Symbol':
|
|
187
|
-
case 'TemplateLiteral':
|
|
188
|
-
case 'Undefined':
|
|
189
|
-
case 'Uint8Array':
|
|
190
|
-
case 'Unknown':
|
|
191
|
-
case 'Void':
|
|
192
|
-
return Types.TypeGuard.TTransform(schema);
|
|
193
163
|
default:
|
|
194
|
-
if (!Types.TypeRegistry.Has(schema_[Types.Kind]))
|
|
195
|
-
throw new TransformUnknownTypeError(schema_);
|
|
196
164
|
return Types.TypeGuard.TTransform(schema);
|
|
197
165
|
}
|
|
198
166
|
}
|
|
@@ -204,9 +172,9 @@ var HasTransform;
|
|
|
204
172
|
}
|
|
205
173
|
HasTransform.Has = Has;
|
|
206
174
|
})(HasTransform || (exports.HasTransform = HasTransform = {}));
|
|
207
|
-
//
|
|
175
|
+
// ------------------------------------------------------------------
|
|
208
176
|
// DecodeTransform
|
|
209
|
-
//
|
|
177
|
+
// ------------------------------------------------------------------
|
|
210
178
|
/** Decodes a value using transform decoders if available. Does not ensure correct results. */
|
|
211
179
|
var DecodeTransform;
|
|
212
180
|
(function (DecodeTransform) {
|
|
@@ -218,89 +186,109 @@ var DecodeTransform;
|
|
|
218
186
|
throw new TransformDecodeError(schema, value, error);
|
|
219
187
|
}
|
|
220
188
|
}
|
|
189
|
+
// prettier-ignore
|
|
221
190
|
function TArray(schema, references, value) {
|
|
222
|
-
|
|
223
|
-
|
|
191
|
+
return ((0, guard_1.IsArray)(value))
|
|
192
|
+
? Default(schema, value.map((value) => Visit(schema.items, references, value)))
|
|
193
|
+
: Default(schema, value);
|
|
224
194
|
}
|
|
195
|
+
// prettier-ignore
|
|
225
196
|
function TIntersect(schema, references, value) {
|
|
226
197
|
if (!(0, guard_1.IsPlainObject)(value) || (0, guard_1.IsValueType)(value))
|
|
227
198
|
return Default(schema, value);
|
|
228
|
-
const
|
|
229
|
-
const
|
|
230
|
-
return
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
return
|
|
236
|
-
}
|
|
237
|
-
|
|
199
|
+
const knownKeys = Types.KeyResolver.ResolveKeys(schema, { includePatterns: false });
|
|
200
|
+
const knownProperties = knownKeys.reduce((value, key) => {
|
|
201
|
+
return (key in value)
|
|
202
|
+
? { ...value, [key]: Visit(Types.IndexedAccessor.Resolve(schema, [key]), references, value[key]) }
|
|
203
|
+
: value;
|
|
204
|
+
}, value);
|
|
205
|
+
if (!Types.TypeGuard.TTransform(schema.unevaluatedProperties)) {
|
|
206
|
+
return Default(schema, knownProperties);
|
|
207
|
+
}
|
|
208
|
+
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
209
|
+
const unevaluatedProperties = schema.unevaluatedProperties;
|
|
210
|
+
const unknownProperties = unknownKeys.reduce((value, key) => {
|
|
211
|
+
return !knownKeys.includes(key)
|
|
212
|
+
? { ...value, [key]: Default(unevaluatedProperties, value[key]) }
|
|
213
|
+
: value;
|
|
214
|
+
}, knownProperties);
|
|
215
|
+
return Default(schema, unknownProperties);
|
|
238
216
|
}
|
|
239
217
|
function TNot(schema, references, value) {
|
|
240
|
-
|
|
241
|
-
return Default(schema, value1);
|
|
218
|
+
return Default(schema, Visit(schema.not, references, value));
|
|
242
219
|
}
|
|
220
|
+
// prettier-ignore
|
|
243
221
|
function TObject(schema, references, value) {
|
|
244
222
|
if (!(0, guard_1.IsPlainObject)(value))
|
|
245
223
|
return Default(schema, value);
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
224
|
+
const knownKeys = Types.KeyResolver.ResolveKeys(schema, { includePatterns: false });
|
|
225
|
+
const knownProperties = knownKeys.reduce((value, key) => {
|
|
226
|
+
return (key in value)
|
|
227
|
+
? { ...value, [key]: Visit(schema.properties[key], references, value[key]) }
|
|
228
|
+
: value;
|
|
229
|
+
}, value);
|
|
230
|
+
if (!Types.TypeGuard.TSchema(schema.additionalProperties)) {
|
|
231
|
+
return Default(schema, knownProperties);
|
|
232
|
+
}
|
|
233
|
+
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
251
234
|
const additionalProperties = schema.additionalProperties;
|
|
252
|
-
const
|
|
253
|
-
return
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
235
|
+
const unknownProperties = unknownKeys.reduce((value, key) => {
|
|
236
|
+
return !knownKeys.includes(key)
|
|
237
|
+
? { ...value, [key]: Default(additionalProperties, value[key]) }
|
|
238
|
+
: value;
|
|
239
|
+
}, knownProperties);
|
|
240
|
+
return Default(schema, unknownProperties);
|
|
241
|
+
}
|
|
242
|
+
// prettier-ignore
|
|
257
243
|
function TRecord(schema, references, value) {
|
|
258
244
|
if (!(0, guard_1.IsPlainObject)(value))
|
|
259
245
|
return Default(schema, value);
|
|
260
246
|
const pattern = Object.getOwnPropertyNames(schema.patternProperties)[0];
|
|
261
|
-
const
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
247
|
+
const knownKeys = new RegExp(pattern);
|
|
248
|
+
const knownProperties = Object.getOwnPropertyNames(value).reduce((value, key) => {
|
|
249
|
+
return knownKeys.test(key)
|
|
250
|
+
? { ...value, [key]: Visit(schema.patternProperties[pattern], references, value[key]) }
|
|
251
|
+
: value;
|
|
252
|
+
}, value);
|
|
253
|
+
if (!Types.TypeGuard.TSchema(schema.additionalProperties)) {
|
|
254
|
+
return Default(schema, knownProperties);
|
|
255
|
+
}
|
|
256
|
+
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
268
257
|
const additionalProperties = schema.additionalProperties;
|
|
269
|
-
const
|
|
270
|
-
return
|
|
271
|
-
|
|
272
|
-
|
|
258
|
+
const unknownProperties = unknownKeys.reduce((value, key) => {
|
|
259
|
+
return !knownKeys.test(key)
|
|
260
|
+
? { ...value, [key]: Default(additionalProperties, value[key]) }
|
|
261
|
+
: value;
|
|
262
|
+
}, knownProperties);
|
|
263
|
+
return Default(schema, unknownProperties);
|
|
273
264
|
}
|
|
274
265
|
function TRef(schema, references, value) {
|
|
275
266
|
const target = (0, deref_1.Deref)(schema, references);
|
|
276
|
-
|
|
277
|
-
return Default(schema, resolved);
|
|
267
|
+
return Default(schema, Visit(target, references, value));
|
|
278
268
|
}
|
|
279
269
|
function TThis(schema, references, value) {
|
|
280
270
|
const target = (0, deref_1.Deref)(schema, references);
|
|
281
|
-
|
|
282
|
-
return Default(schema, resolved);
|
|
271
|
+
return Default(schema, Visit(target, references, value));
|
|
283
272
|
}
|
|
273
|
+
// prettier-ignore
|
|
284
274
|
function TTuple(schema, references, value) {
|
|
285
|
-
|
|
286
|
-
|
|
275
|
+
return ((0, guard_1.IsArray)(value) && (0, guard_1.IsArray)(schema.items))
|
|
276
|
+
? Default(schema, schema.items.map((schema, index) => Visit(schema, references, value[index])))
|
|
277
|
+
: Default(schema, value);
|
|
287
278
|
}
|
|
288
279
|
function TUnion(schema, references, value) {
|
|
289
|
-
const
|
|
280
|
+
const defaulted = Default(schema, value);
|
|
290
281
|
for (const subschema of schema.anyOf) {
|
|
291
|
-
if (!(0, check_1.Check)(subschema, references,
|
|
282
|
+
if (!(0, check_1.Check)(subschema, references, defaulted))
|
|
292
283
|
continue;
|
|
293
|
-
return Visit(subschema, references,
|
|
284
|
+
return Visit(subschema, references, defaulted);
|
|
294
285
|
}
|
|
295
|
-
return
|
|
286
|
+
return defaulted;
|
|
296
287
|
}
|
|
297
288
|
function Visit(schema, references, value) {
|
|
298
289
|
const references_ = typeof schema.$id === 'string' ? [...references, schema] : references;
|
|
299
290
|
const schema_ = schema;
|
|
300
291
|
switch (schema[Types.Kind]) {
|
|
301
|
-
// ------------------------------------------------------
|
|
302
|
-
// Structural
|
|
303
|
-
// ------------------------------------------------------
|
|
304
292
|
case 'Array':
|
|
305
293
|
return TArray(schema_, references_, value);
|
|
306
294
|
case 'Intersect':
|
|
@@ -321,33 +309,7 @@ var DecodeTransform;
|
|
|
321
309
|
return TTuple(schema_, references_, value);
|
|
322
310
|
case 'Union':
|
|
323
311
|
return TUnion(schema_, references_, value);
|
|
324
|
-
// ------------------------------------------------------
|
|
325
|
-
// Default
|
|
326
|
-
// ------------------------------------------------------
|
|
327
|
-
case 'Any':
|
|
328
|
-
case 'AsyncIterator':
|
|
329
|
-
case 'BigInt':
|
|
330
|
-
case 'Boolean':
|
|
331
|
-
case 'Constructor':
|
|
332
|
-
case 'Date':
|
|
333
|
-
case 'Function':
|
|
334
|
-
case 'Integer':
|
|
335
|
-
case 'Iterator':
|
|
336
|
-
case 'Literal':
|
|
337
|
-
case 'Never':
|
|
338
|
-
case 'Null':
|
|
339
|
-
case 'Number':
|
|
340
|
-
case 'Promise':
|
|
341
|
-
case 'String':
|
|
342
|
-
case 'TemplateLiteral':
|
|
343
|
-
case 'Undefined':
|
|
344
|
-
case 'Uint8Array':
|
|
345
|
-
case 'Unknown':
|
|
346
|
-
case 'Void':
|
|
347
|
-
return Default(schema_, value);
|
|
348
312
|
default:
|
|
349
|
-
if (!Types.TypeRegistry.Has(schema_[Types.Kind]))
|
|
350
|
-
throw new TransformUnknownTypeError(schema_);
|
|
351
313
|
return Default(schema_, value);
|
|
352
314
|
}
|
|
353
315
|
}
|
|
@@ -356,9 +318,9 @@ var DecodeTransform;
|
|
|
356
318
|
}
|
|
357
319
|
DecodeTransform.Decode = Decode;
|
|
358
320
|
})(DecodeTransform || (exports.DecodeTransform = DecodeTransform = {}));
|
|
359
|
-
//
|
|
321
|
+
// ------------------------------------------------------------------
|
|
360
322
|
// DecodeTransform
|
|
361
|
-
//
|
|
323
|
+
// ------------------------------------------------------------------
|
|
362
324
|
/** Encodes a value using transform encoders if available. Does not ensure correct results. */
|
|
363
325
|
var EncodeTransform;
|
|
364
326
|
(function (EncodeTransform) {
|
|
@@ -370,58 +332,82 @@ var EncodeTransform;
|
|
|
370
332
|
throw new TransformEncodeError(schema, value, error);
|
|
371
333
|
}
|
|
372
334
|
}
|
|
335
|
+
// prettier-ignore
|
|
373
336
|
function TArray(schema, references, value) {
|
|
374
|
-
const
|
|
375
|
-
return
|
|
337
|
+
const defaulted = Default(schema, value);
|
|
338
|
+
return (0, guard_1.IsArray)(defaulted)
|
|
339
|
+
? defaulted.map((value) => Visit(schema.items, references, value))
|
|
340
|
+
: defaulted;
|
|
376
341
|
}
|
|
342
|
+
// prettier-ignore
|
|
377
343
|
function TIntersect(schema, references, value) {
|
|
378
|
-
const
|
|
344
|
+
const defaulted = Default(schema, value);
|
|
379
345
|
if (!(0, guard_1.IsPlainObject)(value) || (0, guard_1.IsValueType)(value))
|
|
380
|
-
return
|
|
381
|
-
const
|
|
382
|
-
const
|
|
383
|
-
return
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
return
|
|
389
|
-
}
|
|
346
|
+
return defaulted;
|
|
347
|
+
const knownKeys = Types.KeyResolver.ResolveKeys(schema, { includePatterns: false });
|
|
348
|
+
const knownProperties = knownKeys.reduce((value, key) => {
|
|
349
|
+
return key in defaulted
|
|
350
|
+
? { ...value, [key]: Visit(Types.IndexedAccessor.Resolve(schema, [key]), references, value[key]) }
|
|
351
|
+
: value;
|
|
352
|
+
}, defaulted);
|
|
353
|
+
if (!Types.TypeGuard.TTransform(schema.unevaluatedProperties)) {
|
|
354
|
+
return Default(schema, knownProperties);
|
|
355
|
+
}
|
|
356
|
+
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
357
|
+
const unevaluatedProperties = schema.unevaluatedProperties;
|
|
358
|
+
return unknownKeys.reduce((value, key) => {
|
|
359
|
+
return !knownKeys.includes(key)
|
|
360
|
+
? { ...value, [key]: Default(unevaluatedProperties, value[key]) }
|
|
361
|
+
: value;
|
|
362
|
+
}, knownProperties);
|
|
390
363
|
}
|
|
391
364
|
function TNot(schema, references, value) {
|
|
392
|
-
|
|
393
|
-
return Default(schema.not, value1);
|
|
365
|
+
return Default(schema.not, Default(schema, value));
|
|
394
366
|
}
|
|
367
|
+
// prettier-ignore
|
|
395
368
|
function TObject(schema, references, value) {
|
|
396
|
-
const
|
|
369
|
+
const defaulted = Default(schema, value);
|
|
397
370
|
if (!(0, guard_1.IsPlainObject)(value))
|
|
398
|
-
return
|
|
399
|
-
const
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
371
|
+
return defaulted;
|
|
372
|
+
const knownKeys = Types.KeyResolver.ResolveKeys(schema, { includePatterns: false });
|
|
373
|
+
const knownProperties = knownKeys.reduce((value, key) => {
|
|
374
|
+
return key in value
|
|
375
|
+
? { ...value, [key]: Visit(schema.properties[key], references, value[key]) }
|
|
376
|
+
: value;
|
|
377
|
+
}, defaulted);
|
|
378
|
+
if (!Types.TypeGuard.TSchema(schema.additionalProperties)) {
|
|
379
|
+
return knownProperties;
|
|
380
|
+
}
|
|
381
|
+
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
404
382
|
const additionalProperties = schema.additionalProperties;
|
|
405
|
-
return
|
|
406
|
-
return
|
|
407
|
-
|
|
383
|
+
return unknownKeys.reduce((value, key) => {
|
|
384
|
+
return !knownKeys.includes(key)
|
|
385
|
+
? { ...value, [key]: Default(additionalProperties, value[key]) }
|
|
386
|
+
: value;
|
|
387
|
+
}, knownProperties);
|
|
408
388
|
}
|
|
389
|
+
// prettier-ignore
|
|
409
390
|
function TRecord(schema, references, value) {
|
|
410
|
-
const
|
|
391
|
+
const defaulted = Default(schema, value);
|
|
411
392
|
if (!(0, guard_1.IsPlainObject)(value))
|
|
412
|
-
return
|
|
393
|
+
return defaulted;
|
|
413
394
|
const pattern = Object.getOwnPropertyNames(schema.patternProperties)[0];
|
|
414
|
-
const
|
|
415
|
-
const
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
395
|
+
const knownKeys = new RegExp(pattern);
|
|
396
|
+
const knownProperties = Object.getOwnPropertyNames(value).reduce((value, key) => {
|
|
397
|
+
return knownKeys.test(key)
|
|
398
|
+
? { ...value, [key]: Visit(schema.patternProperties[pattern], references, value[key]) }
|
|
399
|
+
: value;
|
|
400
|
+
}, defaulted);
|
|
401
|
+
if (!Types.TypeGuard.TSchema(schema.additionalProperties)) {
|
|
402
|
+
return Default(schema, knownProperties);
|
|
403
|
+
}
|
|
404
|
+
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
421
405
|
const additionalProperties = schema.additionalProperties;
|
|
422
|
-
return
|
|
423
|
-
return
|
|
424
|
-
|
|
406
|
+
return unknownKeys.reduce((value, key) => {
|
|
407
|
+
return !knownKeys.test(key)
|
|
408
|
+
? { ...value, [key]: Default(additionalProperties, value[key]) }
|
|
409
|
+
: value;
|
|
410
|
+
}, knownProperties);
|
|
425
411
|
}
|
|
426
412
|
function TRef(schema, references, value) {
|
|
427
413
|
const target = (0, deref_1.Deref)(schema, references);
|
|
@@ -458,9 +444,6 @@ var EncodeTransform;
|
|
|
458
444
|
const references_ = typeof schema.$id === 'string' ? [...references, schema] : references;
|
|
459
445
|
const schema_ = schema;
|
|
460
446
|
switch (schema[Types.Kind]) {
|
|
461
|
-
// ------------------------------------------------------
|
|
462
|
-
// Structural
|
|
463
|
-
// ------------------------------------------------------
|
|
464
447
|
case 'Array':
|
|
465
448
|
return TArray(schema_, references_, value);
|
|
466
449
|
case 'Intersect':
|
|
@@ -479,34 +462,7 @@ var EncodeTransform;
|
|
|
479
462
|
return TTuple(schema_, references_, value);
|
|
480
463
|
case 'Union':
|
|
481
464
|
return TUnion(schema_, references_, value);
|
|
482
|
-
// ------------------------------------------------------
|
|
483
|
-
// Apply
|
|
484
|
-
// ------------------------------------------------------
|
|
485
|
-
case 'Any':
|
|
486
|
-
case 'AsyncIterator':
|
|
487
|
-
case 'BigInt':
|
|
488
|
-
case 'Boolean':
|
|
489
|
-
case 'Constructor':
|
|
490
|
-
case 'Date':
|
|
491
|
-
case 'Function':
|
|
492
|
-
case 'Integer':
|
|
493
|
-
case 'Iterator':
|
|
494
|
-
case 'Literal':
|
|
495
|
-
case 'Never':
|
|
496
|
-
case 'Null':
|
|
497
|
-
case 'Number':
|
|
498
|
-
case 'Promise':
|
|
499
|
-
case 'String':
|
|
500
|
-
case 'Symbol':
|
|
501
|
-
case 'TemplateLiteral':
|
|
502
|
-
case 'Undefined':
|
|
503
|
-
case 'Uint8Array':
|
|
504
|
-
case 'Unknown':
|
|
505
|
-
case 'Void':
|
|
506
|
-
return Default(schema_, value);
|
|
507
465
|
default:
|
|
508
|
-
if (!Types.TypeRegistry.Has(schema_[Types.Kind]))
|
|
509
|
-
throw new TransformUnknownTypeError(schema_);
|
|
510
466
|
return Default(schema_, value);
|
|
511
467
|
}
|
|
512
468
|
}
|