@sinclair/typebox 0.31.28 → 0.32.0-dev-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compiler/compiler.d.ts +25 -18
- package/compiler/compiler.js +118 -107
- package/errors/errors.d.ts +7 -7
- package/errors/errors.js +48 -44
- package/index.d.ts +71 -0
- package/index.js +205 -0
- package/package.json +8 -19
- package/readme.md +183 -155
- package/system/errors.d.ts +14 -0
- package/system/errors.js +192 -0
- package/system/index.d.ts +3 -1
- package/system/index.js +10 -16
- package/system/policy.d.ts +21 -0
- package/system/policy.js +74 -0
- package/system/system.d.ts +3 -38
- package/system/system.js +15 -218
- package/type/any/any.d.ts +8 -0
- package/type/any/any.js +36 -0
- package/type/any/index.d.ts +1 -0
- package/type/any/index.js +44 -0
- package/type/array/array.d.ts +25 -0
- package/type/array/array.js +42 -0
- package/type/array/index.d.ts +1 -0
- package/type/array/index.js +44 -0
- package/type/async-iterator/async-iterator.d.ts +11 -0
- package/type/async-iterator/async-iterator.js +42 -0
- package/type/async-iterator/index.d.ts +1 -0
- package/type/async-iterator/index.js +44 -0
- package/type/awaited/awaited.d.ts +12 -0
- package/type/awaited/awaited.js +66 -0
- package/type/awaited/index.d.ts +1 -0
- package/type/awaited/index.js +44 -0
- package/type/bigint/bigint.d.ts +16 -0
- package/type/bigint/bigint.js +40 -0
- package/type/bigint/index.d.ts +1 -0
- package/type/bigint/index.js +44 -0
- package/type/boolean/boolean.d.ts +9 -0
- package/type/boolean/boolean.js +40 -0
- package/type/boolean/index.d.ts +1 -0
- package/type/boolean/index.js +44 -0
- package/type/clone/index.d.ts +2 -0
- package/type/clone/index.js +32 -0
- package/type/clone/type.d.ts +5 -0
- package/type/clone/type.js +41 -0
- package/type/clone/value.d.ts +2 -0
- package/type/clone/value.js +58 -0
- package/type/composite/composite.d.ts +15 -0
- package/type/composite/composite.js +47 -0
- package/type/composite/index.d.ts +1 -0
- package/type/composite/index.js +44 -0
- package/type/const/const.d.ts +30 -0
- package/type/const/const.js +84 -0
- package/type/const/index.d.ts +1 -0
- package/type/const/index.js +44 -0
- package/type/constructor/constructor.d.ts +17 -0
- package/type/constructor/constructor.js +43 -0
- package/type/constructor/index.d.ts +1 -0
- package/type/constructor/index.js +44 -0
- package/type/constructor-parameters/constructor-parameters.d.ts +7 -0
- package/type/constructor-parameters/constructor-parameters.js +37 -0
- package/type/constructor-parameters/index.d.ts +1 -0
- package/type/constructor-parameters/index.js +44 -0
- package/type/date/date.d.ts +21 -0
- package/type/date/date.js +40 -0
- package/type/date/index.d.ts +1 -0
- package/type/date/index.js +44 -0
- package/type/deref/deref.d.ts +24 -0
- package/type/deref/deref.js +136 -0
- package/type/deref/index.d.ts +1 -0
- package/type/deref/index.js +44 -0
- package/type/discard/discard.d.ts +1 -0
- package/type/discard/discard.js +38 -0
- package/type/discard/index.d.ts +1 -0
- package/type/discard/index.js +44 -0
- package/type/enum/enum.d.ts +14 -0
- package/type/enum/enum.js +46 -0
- package/type/enum/index.d.ts +1 -0
- package/type/enum/index.js +44 -0
- package/type/exclude/exclude.d.ts +21 -0
- package/type/exclude/exclude.js +54 -0
- package/type/exclude/index.d.ts +1 -0
- package/type/exclude/index.js +44 -0
- package/type/extends/extends-check.d.ts +9 -0
- package/type/extends/extends-check.js +654 -0
- package/type/extends/extends-undefined.d.ts +3 -0
- package/type/extends/extends-undefined.js +51 -0
- package/type/extends/extends.d.ts +9 -0
- package/type/extends/extends.js +47 -0
- package/type/extends/index.d.ts +3 -0
- package/type/extends/index.js +46 -0
- package/type/extract/extract.d.ts +20 -0
- package/type/extract/extract.js +54 -0
- package/type/extract/index.d.ts +1 -0
- package/type/extract/index.js +44 -0
- package/type/function/function.d.ts +17 -0
- package/type/function/function.js +43 -0
- package/type/function/index.d.ts +1 -0
- package/type/function/index.js +44 -0
- package/type/guard/index.d.ts +2 -0
- package/type/guard/index.js +32 -0
- package/type/guard/type.d.ts +130 -0
- package/type/guard/type.js +515 -0
- package/type/guard/value.d.ts +28 -0
- package/type/guard/value.js +100 -0
- package/type/helpers/helpers.d.ts +42 -0
- package/type/helpers/helpers.js +35 -0
- package/type/helpers/index.d.ts +1 -0
- package/type/helpers/index.js +44 -0
- package/type/index.d.ts +70 -0
- package/type/index.js +113 -0
- package/type/indexed/index.d.ts +3 -0
- package/type/indexed/index.js +46 -0
- package/type/indexed/indexed-key.d.ts +17 -0
- package/type/indexed/indexed-key.js +65 -0
- package/type/indexed/indexed-type.d.ts +33 -0
- package/type/indexed/indexed-type.js +106 -0
- package/type/indexed/indexed.d.ts +8 -0
- package/type/indexed/indexed.js +41 -0
- package/type/instance-type/index.d.ts +1 -0
- package/type/instance-type/index.js +44 -0
- package/type/instance-type/instance-type.d.ts +5 -0
- package/type/instance-type/instance-type.js +36 -0
- package/type/integer/index.d.ts +1 -0
- package/type/integer/index.js +44 -0
- package/type/integer/integer.d.ts +16 -0
- package/type/integer/integer.js +40 -0
- package/type/intersect/index.d.ts +1 -0
- package/type/intersect/index.js +44 -0
- package/type/intersect/intersect.d.ts +22 -0
- package/type/intersect/intersect.js +59 -0
- package/type/intrinsic/index.d.ts +1 -0
- package/type/intrinsic/index.js +44 -0
- package/type/intrinsic/intrinsic.d.ts +27 -0
- package/type/intrinsic/intrinsic.js +106 -0
- package/type/iterator/index.d.ts +1 -0
- package/type/iterator/index.js +44 -0
- package/type/iterator/iterator.d.ts +11 -0
- package/type/iterator/iterator.js +42 -0
- package/type/keyof/index.d.ts +3 -0
- package/type/keyof/index.js +46 -0
- package/type/keyof/keyof-string.d.ts +30 -0
- package/type/keyof/keyof-string.js +103 -0
- package/type/keyof/keyof-type.d.ts +11 -0
- package/type/keyof/keyof-type.js +48 -0
- package/type/keyof/keyof.d.ts +5 -0
- package/type/keyof/keyof.js +38 -0
- package/type/literal/index.d.ts +1 -0
- package/type/literal/index.js +44 -0
- package/type/literal/literal.d.ts +10 -0
- package/type/literal/literal.js +41 -0
- package/type/mapped/index.d.ts +1 -0
- package/type/mapped/index.js +44 -0
- package/type/mapped/mapped.d.ts +26 -0
- package/type/mapped/mapped.js +47 -0
- package/type/modifiers/index.d.ts +1 -0
- package/type/modifiers/index.js +44 -0
- package/type/modifiers/modifiers.d.ts +18 -0
- package/type/modifiers/modifiers.js +78 -0
- package/type/never/index.d.ts +1 -0
- package/type/never/index.js +44 -0
- package/type/never/never.d.ts +9 -0
- package/type/never/never.js +40 -0
- package/type/not/index.d.ts +1 -0
- package/type/not/index.js +44 -0
- package/type/not/not.d.ts +10 -0
- package/type/not/not.js +41 -0
- package/type/null/index.d.ts +1 -0
- package/type/null/index.js +44 -0
- package/type/null/null.d.ts +9 -0
- package/type/null/null.js +40 -0
- package/type/number/index.d.ts +1 -0
- package/type/number/index.js +44 -0
- package/type/number/number.d.ts +16 -0
- package/type/number/number.js +40 -0
- package/type/object/index.d.ts +1 -0
- package/type/object/index.js +44 -0
- package/type/object/object.d.ts +44 -0
- package/type/object/object.js +47 -0
- package/type/omit/index.d.ts +1 -0
- package/type/omit/index.js +44 -0
- package/type/omit/omit.d.ts +21 -0
- package/type/omit/omit.js +75 -0
- package/type/operators/index.d.ts +1 -0
- package/type/operators/index.js +44 -0
- package/type/operators/operators.d.ts +24 -0
- package/type/operators/operators.js +119 -0
- package/type/optional/index.d.ts +1 -0
- package/type/optional/index.js +44 -0
- package/type/optional/optional.d.ts +7 -0
- package/type/optional/optional.js +37 -0
- package/type/parameters/index.d.ts +1 -0
- package/type/parameters/index.js +44 -0
- package/type/parameters/parameters.d.ts +7 -0
- package/type/parameters/parameters.js +37 -0
- package/type/partial/index.d.ts +1 -0
- package/type/partial/index.js +44 -0
- package/type/partial/partial.d.ts +23 -0
- package/type/partial/partial.js +73 -0
- package/type/patterns/index.d.ts +1 -0
- package/type/patterns/index.js +44 -0
- package/type/patterns/patterns.d.ts +6 -0
- package/type/patterns/patterns.js +36 -0
- package/type/pick/index.d.ts +1 -0
- package/type/pick/index.js +44 -0
- package/type/pick/pick.d.ts +21 -0
- package/type/pick/pick.js +66 -0
- package/type/promise/index.d.ts +1 -0
- package/type/promise/index.js +44 -0
- package/type/promise/promise.d.ts +11 -0
- package/type/promise/promise.js +42 -0
- package/type/readonly/index.d.ts +1 -0
- package/type/readonly/index.js +44 -0
- package/type/readonly/readonly.d.ts +7 -0
- package/type/readonly/readonly.js +37 -0
- package/type/readonly-optional/index.d.ts +1 -0
- package/type/readonly-optional/index.js +44 -0
- package/type/readonly-optional/readonly-optional.d.ts +6 -0
- package/type/readonly-optional/readonly-optional.js +37 -0
- package/type/record/index.d.ts +1 -0
- package/type/record/index.js +44 -0
- package/type/record/record.d.ts +55 -0
- package/type/record/record.js +97 -0
- package/type/recursive/index.d.ts +1 -0
- package/type/recursive/index.js +44 -0
- package/type/recursive/recursive.d.ts +15 -0
- package/type/recursive/recursive.js +48 -0
- package/type/ref/index.d.ts +1 -0
- package/type/ref/index.js +44 -0
- package/type/ref/ref.d.ts +12 -0
- package/type/ref/ref.js +45 -0
- package/type/regexp/index.d.ts +1 -0
- package/type/regexp/index.js +44 -0
- package/type/regexp/regexp.d.ts +7 -0
- package/type/regexp/regexp.js +38 -0
- package/type/registry/format.d.ts +13 -0
- package/type/registry/format.js +62 -0
- package/type/registry/index.d.ts +2 -0
- package/type/registry/index.js +32 -0
- package/type/registry/type.d.ts +13 -0
- package/type/registry/type.js +62 -0
- package/type/required/index.d.ts +1 -0
- package/type/required/index.js +44 -0
- package/type/required/required.d.ts +23 -0
- package/type/required/required.js +72 -0
- package/type/rest/index.d.ts +1 -0
- package/type/rest/index.js +44 -0
- package/type/rest/rest.d.ts +10 -0
- package/type/rest/rest.js +41 -0
- package/type/return-type/index.d.ts +1 -0
- package/type/return-type/index.js +44 -0
- package/type/return-type/return-type.d.ts +5 -0
- package/type/return-type/return-type.js +36 -0
- package/type/schema/anyschema.d.ts +32 -0
- package/type/schema/anyschema.js +29 -0
- package/type/schema/index.d.ts +2 -0
- package/type/schema/index.js +45 -0
- package/type/schema/schema.d.ts +29 -0
- package/type/schema/schema.js +30 -0
- package/type/static/index.d.ts +1 -0
- package/type/static/index.js +44 -0
- package/type/static/static.d.ts +34 -0
- package/type/static/static.js +29 -0
- package/type/strict/index.d.ts +1 -0
- package/type/strict/index.js +44 -0
- package/type/strict/strict.d.ts +3 -0
- package/type/strict/strict.js +35 -0
- package/type/string/index.d.ts +1 -0
- package/type/string/index.js +44 -0
- package/type/string/string.d.ts +25 -0
- package/type/string/string.js +36 -0
- package/type/symbol/index.d.ts +1 -0
- package/type/symbol/index.js +44 -0
- package/type/symbol/symbol.d.ts +10 -0
- package/type/symbol/symbol.js +36 -0
- package/type/symbols/index.d.ts +1 -0
- package/type/symbols/index.js +44 -0
- package/type/symbols/symbols.d.ts +10 -0
- package/type/symbols/symbols.js +40 -0
- package/type/template-literal/finite.d.ts +16 -0
- package/type/template-literal/finite.js +71 -0
- package/type/template-literal/generate.d.ts +15 -0
- package/type/template-literal/generate.js +74 -0
- package/type/template-literal/index.d.ts +7 -0
- package/type/template-literal/index.js +50 -0
- package/type/template-literal/parser.d.ts +19 -0
- package/type/template-literal/parser.js +175 -0
- package/type/template-literal/pattern.d.ts +4 -0
- package/type/template-literal/pattern.js +61 -0
- package/type/template-literal/syntax.d.ts +20 -0
- package/type/template-literal/syntax.js +87 -0
- package/type/template-literal/template-literal.d.ts +30 -0
- package/type/template-literal/template-literal.js +43 -0
- package/type/template-literal/union.d.ts +7 -0
- package/type/template-literal/union.js +48 -0
- package/type/transform/index.d.ts +1 -0
- package/type/transform/index.js +44 -0
- package/type/transform/transform.d.ts +29 -0
- package/type/transform/transform.js +72 -0
- package/type/tuple/index.d.ts +1 -0
- package/type/tuple/index.js +44 -0
- package/type/tuple/tuple.d.ts +15 -0
- package/type/tuple/tuple.js +42 -0
- package/type/type/index.d.ts +6 -0
- package/type/type/index.js +44 -0
- package/type/type/javascript.d.ts +58 -0
- package/type/type/javascript.js +120 -0
- package/type/type/json.d.ts +139 -0
- package/type/type/json.js +255 -0
- package/type/type/type.d.ts +58 -0
- package/type/type/type.js +153 -0
- package/type/uint8array/index.d.ts +1 -0
- package/type/uint8array/index.js +44 -0
- package/type/uint8array/uint8array.d.ts +13 -0
- package/type/uint8array/uint8array.js +36 -0
- package/type/undefined/index.d.ts +1 -0
- package/type/undefined/index.js +44 -0
- package/type/undefined/undefined.d.ts +9 -0
- package/type/undefined/undefined.js +36 -0
- package/type/union/index.d.ts +1 -0
- package/type/union/index.js +44 -0
- package/type/union/union.d.ts +16 -0
- package/type/union/union.js +50 -0
- package/type/unknown/index.d.ts +1 -0
- package/type/unknown/index.js +44 -0
- package/type/unknown/unknown.d.ts +8 -0
- package/type/unknown/unknown.js +39 -0
- package/type/unsafe/index.d.ts +1 -0
- package/type/unsafe/index.js +44 -0
- package/type/unsafe/unsafe.d.ts +11 -0
- package/type/unsafe/unsafe.js +39 -0
- package/type/void/index.d.ts +1 -0
- package/type/void/index.js +44 -0
- package/type/void/void.d.ts +9 -0
- package/type/void/void.js +40 -0
- package/value/cast/cast.d.ts +23 -0
- package/value/{cast.js → cast/cast.js} +62 -83
- package/value/cast/index.d.ts +1 -0
- package/value/cast/index.js +44 -0
- package/value/check/check.d.ts +10 -0
- package/value/{check.js → check/check.js} +50 -45
- package/value/check/index.d.ts +1 -0
- package/value/check/index.js +44 -0
- package/value/clean/clean.d.ts +5 -0
- package/value/clean/clean.js +167 -0
- package/value/clean/index.d.ts +1 -0
- package/value/clean/index.js +44 -0
- package/value/{clone.js → clone/clone.js} +6 -6
- package/value/clone/index.d.ts +1 -0
- package/value/clone/index.js +44 -0
- package/value/convert/convert.d.ts +9 -0
- package/value/{convert.js → convert/convert.js} +93 -116
- package/value/convert/index.d.ts +1 -0
- package/value/convert/index.js +44 -0
- package/value/create/create.d.ts +31 -0
- package/value/{create.js → create/create.js} +69 -62
- package/value/create/index.d.ts +1 -0
- package/value/create/index.js +44 -0
- package/value/default/default.d.ts +5 -0
- package/value/default/default.js +175 -0
- package/value/default/index.d.ts +1 -0
- package/value/default/index.js +44 -0
- package/value/delta/delta.d.ts +41 -0
- package/value/{delta.js → delta/delta.js} +57 -53
- package/value/delta/index.d.ts +1 -0
- package/value/delta/index.js +44 -0
- package/value/{deref.d.ts → deref/deref.d.ts} +4 -2
- package/value/{deref.js → deref/deref.js} +1 -2
- package/value/deref/index.d.ts +1 -0
- package/value/deref/index.js +44 -0
- package/value/{equal.js → equal/equal.js} +14 -14
- package/value/equal/index.d.ts +1 -0
- package/value/equal/index.js +44 -0
- package/value/guard/index.d.ts +1 -0
- package/value/guard/index.js +44 -0
- package/value/{hash.d.ts → hash/hash.d.ts} +0 -13
- package/value/{hash.js → hash/hash.js} +26 -26
- package/value/hash/index.d.ts +1 -0
- package/value/hash/index.js +44 -0
- package/value/index.d.ts +17 -4
- package/value/index.js +91 -10
- package/value/mutate/index.d.ts +1 -0
- package/value/mutate/index.js +44 -0
- package/value/{mutate.d.ts → mutate/mutate.d.ts} +1 -1
- package/value/{mutate.js → mutate/mutate.js} +25 -25
- package/value/pointer/index.d.ts +1 -0
- package/value/pointer/index.js +31 -0
- package/value/pointer/pointer.d.ts +21 -0
- package/value/pointer/pointer.js +151 -0
- package/value/transform/decode.d.ts +19 -0
- package/value/transform/decode.js +211 -0
- package/value/transform/encode.d.ts +20 -0
- package/value/transform/encode.js +219 -0
- package/value/transform/has.d.ts +3 -0
- package/value/transform/has.js +146 -0
- package/value/transform/index.d.ts +3 -0
- package/value/transform/index.js +46 -0
- package/value/value/index.d.ts +1 -0
- package/value/value/index.js +31 -0
- package/value/value/value.d.ts +53 -0
- package/value/value/value.js +125 -0
- package/typebox.d.ts +0 -962
- package/typebox.js +0 -2364
- package/value/cast.d.ts +0 -24
- package/value/check.d.ts +0 -9
- package/value/convert.d.ts +0 -10
- package/value/create.d.ts +0 -30
- package/value/delta.d.ts +0 -41
- package/value/pointer.d.ts +0 -24
- package/value/pointer.js +0 -148
- package/value/transform.d.ts +0 -37
- package/value/transform.js +0 -473
- package/value/value.d.ts +0 -47
- package/value/value.js +0 -117
- /package/value/{clone.d.ts → clone/clone.d.ts} +0 -0
- /package/value/{equal.d.ts → equal/equal.d.ts} +0 -0
- /package/value/{guard.d.ts → guard/guard.d.ts} +0 -0
- /package/value/{guard.js → guard/guard.js} +0 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TSchema } from '../../type/schema/index';
|
|
2
|
+
/** `[Mutable]` Removes excess properties from a value and returns the result. This function does not check the value and returns an unknown type. You should Check the result before use. Clean is a mutable operation. To avoid mutation, Clone the value first. */
|
|
3
|
+
export declare function Clean<T extends TSchema>(schema: T, references: TSchema[], value: unknown): unknown;
|
|
4
|
+
/** `[Mutable]` Removes excess properties from a value and returns the result. This function does not check the value and returns an unknown type. You should Check the result before use. Clean is a mutable operation. To avoid mutation, Clone the value first. */
|
|
5
|
+
export declare function Clean<T extends TSchema>(schema: T): unknown;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*--------------------------------------------------------------------------
|
|
3
|
+
|
|
4
|
+
@sinclair/typebox/value
|
|
5
|
+
|
|
6
|
+
The MIT License (MIT)
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2017-2023 Haydn Paterson (sinclair) <haydn.developer@gmail.com>
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in
|
|
18
|
+
all copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
26
|
+
THE SOFTWARE.
|
|
27
|
+
|
|
28
|
+
---------------------------------------------------------------------------*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.Clean = void 0;
|
|
31
|
+
const index_1 = require("../guard/index");
|
|
32
|
+
const type_1 = require("../../type/guard/type");
|
|
33
|
+
const keyof_string_1 = require("../../type/keyof/keyof-string");
|
|
34
|
+
const index_2 = require("../check/index");
|
|
35
|
+
const index_3 = require("../clone/index");
|
|
36
|
+
const index_4 = require("../deref/index");
|
|
37
|
+
const index_5 = require("../../type/symbols/index");
|
|
38
|
+
// ------------------------------------------------------------------
|
|
39
|
+
// IsSchema
|
|
40
|
+
// ------------------------------------------------------------------
|
|
41
|
+
function IsSchema(schema) {
|
|
42
|
+
return (0, type_1.TSchema)(schema);
|
|
43
|
+
}
|
|
44
|
+
// ------------------------------------------------------------------
|
|
45
|
+
// IsCheckable
|
|
46
|
+
// ------------------------------------------------------------------
|
|
47
|
+
function IsCheckable(schema) {
|
|
48
|
+
return (0, type_1.TSchema)(schema) && schema[index_5.Kind] !== 'Unsafe';
|
|
49
|
+
}
|
|
50
|
+
// ------------------------------------------------------------------
|
|
51
|
+
// Types
|
|
52
|
+
// ------------------------------------------------------------------
|
|
53
|
+
function TArray(schema, references, value) {
|
|
54
|
+
if (!(0, index_1.IsArray)(value))
|
|
55
|
+
return value;
|
|
56
|
+
return value.map((value) => Visit(schema.items, references, value));
|
|
57
|
+
}
|
|
58
|
+
function TIntersect(schema, references, value) {
|
|
59
|
+
const unevaluatedProperties = schema.unevaluatedProperties;
|
|
60
|
+
const intersections = schema.allOf.map((schema) => Visit(schema, references, (0, index_3.Clone)(value)));
|
|
61
|
+
const composite = intersections.reduce((acc, value) => ((0, index_1.IsObject)(value) ? { ...acc, ...value } : value), {});
|
|
62
|
+
if (!(0, index_1.IsObject)(value) || !(0, index_1.IsObject)(composite) || !IsSchema(unevaluatedProperties))
|
|
63
|
+
return composite;
|
|
64
|
+
const knownkeys = (0, keyof_string_1.KeyOfStringResolve)(schema);
|
|
65
|
+
for (const key of Object.getOwnPropertyNames(value)) {
|
|
66
|
+
if (knownkeys.includes(key))
|
|
67
|
+
continue;
|
|
68
|
+
if ((0, index_2.Check)(unevaluatedProperties, references, value[key])) {
|
|
69
|
+
composite[key] = Visit(unevaluatedProperties, references, value[key]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return composite;
|
|
73
|
+
}
|
|
74
|
+
function TObject(schema, references, value) {
|
|
75
|
+
if (!(0, index_1.IsObject)(value) || (0, index_1.IsArray)(value))
|
|
76
|
+
return value; // Check IsArray for AllowArrayObject configuration
|
|
77
|
+
const additionalProperties = schema.additionalProperties;
|
|
78
|
+
for (const key of Object.getOwnPropertyNames(value)) {
|
|
79
|
+
if (key in schema.properties) {
|
|
80
|
+
value[key] = Visit(schema.properties[key], references, value[key]);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (IsSchema(additionalProperties) && (0, index_2.Check)(additionalProperties, references, value[key])) {
|
|
84
|
+
value[key] = Visit(additionalProperties, references, value[key]);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
delete value[key];
|
|
88
|
+
}
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
function TRecord(schema, references, value) {
|
|
92
|
+
if (!(0, index_1.IsObject)(value))
|
|
93
|
+
return value;
|
|
94
|
+
const additionalProperties = schema.additionalProperties;
|
|
95
|
+
const propertyKeys = Object.keys(value);
|
|
96
|
+
const [propertyKey, propertySchema] = Object.entries(schema.patternProperties)[0];
|
|
97
|
+
const propertyKeyTest = new RegExp(propertyKey);
|
|
98
|
+
for (const key of propertyKeys) {
|
|
99
|
+
if (propertyKeyTest.test(key)) {
|
|
100
|
+
value[key] = Visit(propertySchema, references, value[key]);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (IsSchema(additionalProperties) && (0, index_2.Check)(additionalProperties, references, value[key])) {
|
|
104
|
+
value[key] = Visit(additionalProperties, references, value[key]);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
delete value[key];
|
|
108
|
+
}
|
|
109
|
+
return value;
|
|
110
|
+
}
|
|
111
|
+
function TRef(schema, references, value) {
|
|
112
|
+
return Visit((0, index_4.Deref)(schema, references), references, value);
|
|
113
|
+
}
|
|
114
|
+
function TThis(schema, references, value) {
|
|
115
|
+
return Visit((0, index_4.Deref)(schema, references), references, value);
|
|
116
|
+
}
|
|
117
|
+
function TTuple(schema, references, value) {
|
|
118
|
+
if (!(0, index_1.IsArray)(value))
|
|
119
|
+
return value;
|
|
120
|
+
if ((0, index_1.IsUndefined)(schema.items))
|
|
121
|
+
return [];
|
|
122
|
+
const length = Math.min(value.length, schema.items.length);
|
|
123
|
+
for (let i = 0; i < length; i++) {
|
|
124
|
+
value[i] = Visit(schema.items[i], references, value[i]);
|
|
125
|
+
}
|
|
126
|
+
// prettier-ignore
|
|
127
|
+
return value.length > length
|
|
128
|
+
? value.slice(0, length)
|
|
129
|
+
: value;
|
|
130
|
+
}
|
|
131
|
+
function TUnion(schema, references, value) {
|
|
132
|
+
for (const inner of schema.anyOf) {
|
|
133
|
+
if (IsCheckable(inner) && (0, index_2.Check)(inner, value)) {
|
|
134
|
+
return Visit(inner, references, value);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return value;
|
|
138
|
+
}
|
|
139
|
+
function Visit(schema, references, value) {
|
|
140
|
+
const references_ = (0, index_1.IsString)(schema.$id) ? [...references, schema] : references;
|
|
141
|
+
const schema_ = schema;
|
|
142
|
+
switch (schema_[index_5.Kind]) {
|
|
143
|
+
case 'Array':
|
|
144
|
+
return TArray(schema_, references_, value);
|
|
145
|
+
case 'Intersect':
|
|
146
|
+
return TIntersect(schema_, references_, value);
|
|
147
|
+
case 'Object':
|
|
148
|
+
return TObject(schema_, references_, value);
|
|
149
|
+
case 'Record':
|
|
150
|
+
return TRecord(schema_, references_, value);
|
|
151
|
+
case 'Ref':
|
|
152
|
+
return TRef(schema_, references_, value);
|
|
153
|
+
case 'This':
|
|
154
|
+
return TThis(schema_, references_, value);
|
|
155
|
+
case 'Tuple':
|
|
156
|
+
return TTuple(schema_, references_, value);
|
|
157
|
+
case 'Union':
|
|
158
|
+
return TUnion(schema_, references_, value);
|
|
159
|
+
default:
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/** `[Mutable]` Removes excess properties from a value and returns the result. This function does not check the value and returns an unknown type. You should Check the result before use. Clean is a mutable operation. To avoid mutation, Clone the value first. */
|
|
164
|
+
function Clean(...args) {
|
|
165
|
+
return args.length === 3 ? Visit(args[0], args[1], args[2]) : Visit(args[0], [], args[1]);
|
|
166
|
+
}
|
|
167
|
+
exports.Clean = Clean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './clean';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*--------------------------------------------------------------------------
|
|
3
|
+
|
|
4
|
+
@sinclair/typebox/value
|
|
5
|
+
|
|
6
|
+
The MIT License (MIT)
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2017-2023 Haydn Paterson (sinclair) <haydn.developer@gmail.com>
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in
|
|
18
|
+
all copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
26
|
+
THE SOFTWARE.
|
|
27
|
+
|
|
28
|
+
---------------------------------------------------------------------------*/
|
|
29
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
32
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
33
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
34
|
+
}
|
|
35
|
+
Object.defineProperty(o, k2, desc);
|
|
36
|
+
}) : (function(o, m, k, k2) {
|
|
37
|
+
if (k2 === undefined) k2 = k;
|
|
38
|
+
o[k2] = m[k];
|
|
39
|
+
}));
|
|
40
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
41
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
42
|
+
};
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
__exportStar(require("./clean"), exports);
|
|
@@ -28,7 +28,7 @@ THE SOFTWARE.
|
|
|
28
28
|
---------------------------------------------------------------------------*/
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
30
|
exports.Clone = void 0;
|
|
31
|
-
const
|
|
31
|
+
const index_1 = require("../guard/index");
|
|
32
32
|
// --------------------------------------------------------------------------
|
|
33
33
|
// Clonable
|
|
34
34
|
// --------------------------------------------------------------------------
|
|
@@ -53,15 +53,15 @@ function ValueType(value) {
|
|
|
53
53
|
// --------------------------------------------------------------------------
|
|
54
54
|
/** Returns a clone of the given value */
|
|
55
55
|
function Clone(value) {
|
|
56
|
-
if ((0,
|
|
56
|
+
if ((0, index_1.IsArray)(value))
|
|
57
57
|
return ArrayType(value);
|
|
58
|
-
if ((0,
|
|
58
|
+
if ((0, index_1.IsDate)(value))
|
|
59
59
|
return DateType(value);
|
|
60
|
-
if ((0,
|
|
60
|
+
if ((0, index_1.IsPlainObject)(value))
|
|
61
61
|
return ObjectType(value);
|
|
62
|
-
if ((0,
|
|
62
|
+
if ((0, index_1.IsTypedArray)(value))
|
|
63
63
|
return TypedArrayType(value);
|
|
64
|
-
if ((0,
|
|
64
|
+
if ((0, index_1.IsValueType)(value))
|
|
65
65
|
return ValueType(value);
|
|
66
66
|
throw new Error('ValueClone: Unable to clone value');
|
|
67
67
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './clone';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*--------------------------------------------------------------------------
|
|
3
|
+
|
|
4
|
+
@sinclair/typebox/value
|
|
5
|
+
|
|
6
|
+
The MIT License (MIT)
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2017-2023 Haydn Paterson (sinclair) <haydn.developer@gmail.com>
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in
|
|
18
|
+
all copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
26
|
+
THE SOFTWARE.
|
|
27
|
+
|
|
28
|
+
---------------------------------------------------------------------------*/
|
|
29
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
30
|
+
if (k2 === undefined) k2 = k;
|
|
31
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
32
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
33
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
34
|
+
}
|
|
35
|
+
Object.defineProperty(o, k2, desc);
|
|
36
|
+
}) : (function(o, m, k, k2) {
|
|
37
|
+
if (k2 === undefined) k2 = k;
|
|
38
|
+
o[k2] = m[k];
|
|
39
|
+
}));
|
|
40
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
41
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
42
|
+
};
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
__exportStar(require("./clone"), exports);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TSchema } from '../../type/schema/index';
|
|
2
|
+
export declare class ValueConvertUnknownTypeError extends Error {
|
|
3
|
+
readonly schema: TSchema;
|
|
4
|
+
constructor(schema: TSchema);
|
|
5
|
+
}
|
|
6
|
+
/** Converts any type mismatched values to their target type if a reasonable conversion is possible. */
|
|
7
|
+
export declare function Convert<T extends TSchema>(schema: T, references: TSchema[], value: unknown): unknown;
|
|
8
|
+
/** Converts any type mismatched values to their target type if a reasonable conversion is possible. */
|
|
9
|
+
export declare function Convert<T extends TSchema>(schema: T, value: unknown): unknown;
|
|
@@ -27,55 +27,57 @@ THE SOFTWARE.
|
|
|
27
27
|
|
|
28
28
|
---------------------------------------------------------------------------*/
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.Convert = exports.
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
30
|
+
exports.Convert = exports.ValueConvertUnknownTypeError = void 0;
|
|
31
|
+
const index_1 = require("../guard/index");
|
|
32
|
+
const index_2 = require("../clone/index");
|
|
33
|
+
const index_3 = require("../check/index");
|
|
34
|
+
const index_4 = require("../deref/index");
|
|
35
|
+
const type_1 = require("../../type/guard/type");
|
|
36
|
+
const index_5 = require("../../type/symbols/index");
|
|
37
|
+
const index_6 = require("../../type/composite/index");
|
|
38
|
+
// ------------------------------------------------------------------
|
|
37
39
|
// Errors
|
|
38
|
-
//
|
|
39
|
-
class ValueConvertUnknownTypeError extends
|
|
40
|
+
// ------------------------------------------------------------------
|
|
41
|
+
class ValueConvertUnknownTypeError extends Error {
|
|
40
42
|
constructor(schema) {
|
|
41
43
|
super('Unknown type');
|
|
42
44
|
this.schema = schema;
|
|
43
45
|
}
|
|
44
46
|
}
|
|
45
47
|
exports.ValueConvertUnknownTypeError = ValueConvertUnknownTypeError;
|
|
46
|
-
//
|
|
48
|
+
// ------------------------------------------------------------------
|
|
47
49
|
// Conversions
|
|
48
|
-
//
|
|
50
|
+
// ------------------------------------------------------------------
|
|
49
51
|
function IsStringNumeric(value) {
|
|
50
|
-
return (0,
|
|
52
|
+
return (0, index_1.IsString)(value) && !isNaN(value) && !isNaN(parseFloat(value));
|
|
51
53
|
}
|
|
52
54
|
function IsValueToString(value) {
|
|
53
|
-
return (0,
|
|
55
|
+
return (0, index_1.IsBigInt)(value) || (0, index_1.IsBoolean)(value) || (0, index_1.IsNumber)(value);
|
|
54
56
|
}
|
|
55
57
|
function IsValueTrue(value) {
|
|
56
|
-
return value === true || ((0,
|
|
58
|
+
return value === true || ((0, index_1.IsNumber)(value) && value === 1) || ((0, index_1.IsBigInt)(value) && value === BigInt('1')) || ((0, index_1.IsString)(value) && (value.toLowerCase() === 'true' || value === '1'));
|
|
57
59
|
}
|
|
58
60
|
function IsValueFalse(value) {
|
|
59
|
-
return value === false || ((0,
|
|
61
|
+
return value === false || ((0, index_1.IsNumber)(value) && (value === 0 || Object.is(value, -0))) || ((0, index_1.IsBigInt)(value) && value === BigInt('0')) || ((0, index_1.IsString)(value) && (value.toLowerCase() === 'false' || value === '0' || value === '-0'));
|
|
60
62
|
}
|
|
61
63
|
function IsTimeStringWithTimeZone(value) {
|
|
62
|
-
return (0,
|
|
64
|
+
return (0, index_1.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
|
|
63
65
|
}
|
|
64
66
|
function IsTimeStringWithoutTimeZone(value) {
|
|
65
|
-
return (0,
|
|
67
|
+
return (0, index_1.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
|
|
66
68
|
}
|
|
67
69
|
function IsDateTimeStringWithTimeZone(value) {
|
|
68
|
-
return (0,
|
|
70
|
+
return (0, index_1.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);
|
|
69
71
|
}
|
|
70
72
|
function IsDateTimeStringWithoutTimeZone(value) {
|
|
71
|
-
return (0,
|
|
73
|
+
return (0, index_1.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);
|
|
72
74
|
}
|
|
73
75
|
function IsDateString(value) {
|
|
74
|
-
return (0,
|
|
76
|
+
return (0, index_1.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\d$/i.test(value);
|
|
75
77
|
}
|
|
76
|
-
//
|
|
78
|
+
// ------------------------------------------------------------------
|
|
77
79
|
// Convert
|
|
78
|
-
//
|
|
80
|
+
// ------------------------------------------------------------------
|
|
79
81
|
function TryConvertLiteralString(value, target) {
|
|
80
82
|
const conversion = TryConvertString(value);
|
|
81
83
|
return conversion === target ? conversion : value;
|
|
@@ -88,82 +90,66 @@ function TryConvertLiteralBoolean(value, target) {
|
|
|
88
90
|
const conversion = TryConvertBoolean(value);
|
|
89
91
|
return conversion === target ? conversion : value;
|
|
90
92
|
}
|
|
93
|
+
// prettier-ignore
|
|
91
94
|
function TryConvertLiteral(schema, value) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return TryConvertLiteralNumber(value, schema.const);
|
|
97
|
-
}
|
|
98
|
-
else if (typeof schema.const === 'boolean') {
|
|
99
|
-
return TryConvertLiteralBoolean(value, schema.const);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
return (0, clone_1.Clone)(value);
|
|
103
|
-
}
|
|
95
|
+
return ((0, index_1.IsString)(schema.const) ? TryConvertLiteralString(value, schema.const) :
|
|
96
|
+
(0, index_1.IsNumber)(schema.const) ? TryConvertLiteralNumber(value, schema.const) :
|
|
97
|
+
(0, index_1.IsBoolean)(schema.const) ? TryConvertLiteralBoolean(value, schema.const) :
|
|
98
|
+
(0, index_2.Clone)(value));
|
|
104
99
|
}
|
|
105
100
|
function TryConvertBoolean(value) {
|
|
106
101
|
return IsValueTrue(value) ? true : IsValueFalse(value) ? false : value;
|
|
107
102
|
}
|
|
108
103
|
function TryConvertBigInt(value) {
|
|
109
|
-
return IsStringNumeric(value) ? BigInt(parseInt(value)) : (0,
|
|
104
|
+
return IsStringNumeric(value) ? BigInt(parseInt(value)) : (0, index_1.IsNumber)(value) ? BigInt(value | 0) : IsValueFalse(value) ? BigInt(0) : IsValueTrue(value) ? BigInt(1) : value;
|
|
110
105
|
}
|
|
111
106
|
function TryConvertString(value) {
|
|
112
|
-
return IsValueToString(value) ? value.toString() : (0,
|
|
107
|
+
return IsValueToString(value) ? value.toString() : (0, index_1.IsSymbol)(value) && value.description !== undefined ? value.description.toString() : value;
|
|
113
108
|
}
|
|
114
109
|
function TryConvertNumber(value) {
|
|
115
110
|
return IsStringNumeric(value) ? parseFloat(value) : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
|
|
116
111
|
}
|
|
117
112
|
function TryConvertInteger(value) {
|
|
118
|
-
return IsStringNumeric(value) ? parseInt(value) : (0,
|
|
113
|
+
return IsStringNumeric(value) ? parseInt(value) : (0, index_1.IsNumber)(value) ? value | 0 : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
|
|
119
114
|
}
|
|
120
115
|
function TryConvertNull(value) {
|
|
121
|
-
return (0,
|
|
116
|
+
return (0, index_1.IsString)(value) && value.toLowerCase() === 'null' ? null : value;
|
|
122
117
|
}
|
|
123
118
|
function TryConvertUndefined(value) {
|
|
124
|
-
return (0,
|
|
125
|
-
}
|
|
119
|
+
return (0, index_1.IsString)(value) && value === 'undefined' ? undefined : value;
|
|
120
|
+
}
|
|
121
|
+
// ------------------------------------------------------------------
|
|
122
|
+
// note: this function may return an invalid dates for the regex
|
|
123
|
+
// tests above. Invalid dates will however be checked during the
|
|
124
|
+
// casting function and will return a epoch date if invalid.
|
|
125
|
+
// Consider better string parsing for the iso dates in future
|
|
126
|
+
// revisions.
|
|
127
|
+
// ------------------------------------------------------------------
|
|
128
|
+
// prettier-ignore
|
|
126
129
|
function TryConvertDate(value) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
? new Date(0)
|
|
141
|
-
: IsStringNumeric(value)
|
|
142
|
-
? new Date(parseInt(value))
|
|
143
|
-
: IsTimeStringWithoutTimeZone(value)
|
|
144
|
-
? new Date(`1970-01-01T${value}.000Z`)
|
|
145
|
-
: IsTimeStringWithTimeZone(value)
|
|
146
|
-
? new Date(`1970-01-01T${value}`)
|
|
147
|
-
: IsDateTimeStringWithoutTimeZone(value)
|
|
148
|
-
? new Date(`${value}.000Z`)
|
|
149
|
-
: IsDateTimeStringWithTimeZone(value)
|
|
150
|
-
? new Date(value)
|
|
151
|
-
: IsDateString(value)
|
|
152
|
-
? new Date(`${value}T00:00:00.000Z`)
|
|
153
|
-
: value;
|
|
154
|
-
}
|
|
155
|
-
// --------------------------------------------------------------------------
|
|
130
|
+
return ((0, index_1.IsDate)(value) ? value :
|
|
131
|
+
(0, index_1.IsNumber)(value) ? new Date(value) :
|
|
132
|
+
IsValueTrue(value) ? new Date(1) :
|
|
133
|
+
IsValueFalse(value) ? new Date(0) :
|
|
134
|
+
IsStringNumeric(value) ? new Date(parseInt(value)) :
|
|
135
|
+
IsTimeStringWithoutTimeZone(value) ? new Date(`1970-01-01T${value}.000Z`) :
|
|
136
|
+
IsTimeStringWithTimeZone(value) ? new Date(`1970-01-01T${value}`) :
|
|
137
|
+
IsDateTimeStringWithoutTimeZone(value) ? new Date(`${value}.000Z`) :
|
|
138
|
+
IsDateTimeStringWithTimeZone(value) ? new Date(value) :
|
|
139
|
+
IsDateString(value) ? new Date(`${value}T00:00:00.000Z`) :
|
|
140
|
+
value);
|
|
141
|
+
}
|
|
142
|
+
// ------------------------------------------------------------------
|
|
156
143
|
// Default
|
|
157
|
-
//
|
|
144
|
+
// ------------------------------------------------------------------
|
|
158
145
|
function Default(value) {
|
|
159
146
|
return value;
|
|
160
147
|
}
|
|
161
|
-
|
|
162
|
-
// --------------------------------------------------------------------------
|
|
148
|
+
// ------------------------------------------------------------------
|
|
163
149
|
// Convert
|
|
164
|
-
//
|
|
150
|
+
// ------------------------------------------------------------------
|
|
165
151
|
function TArray(schema, references, value) {
|
|
166
|
-
if ((0,
|
|
152
|
+
if ((0, index_1.IsArray)(value)) {
|
|
167
153
|
return value.map((value) => Visit(schema.items, references, value));
|
|
168
154
|
}
|
|
169
155
|
return value;
|
|
@@ -180,11 +166,12 @@ function TDate(schema, references, value) {
|
|
|
180
166
|
function TInteger(schema, references, value) {
|
|
181
167
|
return TryConvertInteger(value);
|
|
182
168
|
}
|
|
169
|
+
// prettier-ignore
|
|
183
170
|
function TIntersect(schema, references, value) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
171
|
+
const allObjects = schema.allOf.every(schema => (0, type_1.TObject)(schema));
|
|
172
|
+
if (allObjects)
|
|
173
|
+
return Visit((0, index_6.Composite)(schema.allOf), references, value);
|
|
174
|
+
return Visit(schema.allOf[0], references, value); // todo: fix this
|
|
188
175
|
}
|
|
189
176
|
function TLiteral(schema, references, value) {
|
|
190
177
|
return TryConvertLiteral(schema, value);
|
|
@@ -195,12 +182,16 @@ function TNull(schema, references, value) {
|
|
|
195
182
|
function TNumber(schema, references, value) {
|
|
196
183
|
return TryConvertNumber(value);
|
|
197
184
|
}
|
|
185
|
+
// prettier-ignore
|
|
198
186
|
function TObject(schema, references, value) {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
187
|
+
const isConvertable = (0, index_1.IsObject)(value);
|
|
188
|
+
if (!isConvertable)
|
|
189
|
+
return value;
|
|
190
|
+
return Object.getOwnPropertyNames(schema.properties).reduce((value, key) => {
|
|
191
|
+
return !(0, index_1.IsUndefined)(value[key])
|
|
192
|
+
? ({ ...value, [key]: Visit(schema.properties[key], references, value[key]) })
|
|
193
|
+
: ({ ...value });
|
|
194
|
+
}, value);
|
|
204
195
|
}
|
|
205
196
|
function TRecord(schema, references, value) {
|
|
206
197
|
const propertyKey = Object.getOwnPropertyNames(schema.patternProperties)[0];
|
|
@@ -212,24 +203,27 @@ function TRecord(schema, references, value) {
|
|
|
212
203
|
return result;
|
|
213
204
|
}
|
|
214
205
|
function TRef(schema, references, value) {
|
|
215
|
-
return Visit((0,
|
|
206
|
+
return Visit((0, index_4.Deref)(schema, references), references, value);
|
|
216
207
|
}
|
|
217
208
|
function TString(schema, references, value) {
|
|
218
209
|
return TryConvertString(value);
|
|
219
210
|
}
|
|
220
211
|
function TSymbol(schema, references, value) {
|
|
221
|
-
return (0,
|
|
212
|
+
return (0, index_1.IsString)(value) || (0, index_1.IsNumber)(value) ? Symbol(value) : value;
|
|
222
213
|
}
|
|
223
214
|
function TThis(schema, references, value) {
|
|
224
|
-
return Visit((0,
|
|
215
|
+
return Visit((0, index_4.Deref)(schema, references), references, value);
|
|
225
216
|
}
|
|
217
|
+
// prettier-ignore
|
|
226
218
|
function TTuple(schema, references, value) {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
219
|
+
const isConvertable = (0, index_1.IsArray)(value) && !(0, index_1.IsUndefined)(schema.items);
|
|
220
|
+
if (!isConvertable)
|
|
221
|
+
return value;
|
|
222
|
+
return value.map((value, index) => {
|
|
223
|
+
return (index < schema.items.length)
|
|
224
|
+
? Visit(schema.items[index], references, value)
|
|
225
|
+
: value;
|
|
226
|
+
});
|
|
233
227
|
}
|
|
234
228
|
function TUndefined(schema, references, value) {
|
|
235
229
|
return TryConvertUndefined(value);
|
|
@@ -237,19 +231,16 @@ function TUndefined(schema, references, value) {
|
|
|
237
231
|
function TUnion(schema, references, value) {
|
|
238
232
|
for (const subschema of schema.anyOf) {
|
|
239
233
|
const converted = Visit(subschema, references, value);
|
|
240
|
-
if ((0,
|
|
234
|
+
if ((0, index_3.Check)(subschema, references, converted)) {
|
|
241
235
|
return converted;
|
|
242
236
|
}
|
|
243
237
|
}
|
|
244
238
|
return value;
|
|
245
239
|
}
|
|
246
240
|
function Visit(schema, references, value) {
|
|
247
|
-
const references_ = (0,
|
|
241
|
+
const references_ = (0, index_1.IsString)(schema.$id) ? [...references, schema] : references;
|
|
248
242
|
const schema_ = schema;
|
|
249
|
-
switch (schema[
|
|
250
|
-
// ------------------------------------------------------
|
|
251
|
-
// Structural
|
|
252
|
-
// ------------------------------------------------------
|
|
243
|
+
switch (schema[index_5.Kind]) {
|
|
253
244
|
case 'Array':
|
|
254
245
|
return TArray(schema_, references_, value);
|
|
255
246
|
case 'BigInt':
|
|
@@ -286,29 +277,15 @@ function Visit(schema, references, value) {
|
|
|
286
277
|
return TUndefined(schema_, references_, value);
|
|
287
278
|
case 'Union':
|
|
288
279
|
return TUnion(schema_, references_, value);
|
|
289
|
-
// ------------------------------------------------------
|
|
290
|
-
// Default
|
|
291
|
-
// ------------------------------------------------------
|
|
292
|
-
case 'Any':
|
|
293
|
-
case 'AsyncIterator':
|
|
294
|
-
case 'Constructor':
|
|
295
|
-
case 'Function':
|
|
296
|
-
case 'Iterator':
|
|
297
|
-
case 'Never':
|
|
298
|
-
case 'Promise':
|
|
299
|
-
case 'TemplateLiteral':
|
|
300
|
-
case 'Uint8Array':
|
|
301
|
-
case 'Unknown':
|
|
302
|
-
case 'Void':
|
|
303
|
-
return Default(value);
|
|
304
280
|
default:
|
|
305
|
-
if (!Types.TypeRegistry.Has(schema_[Types.Kind]))
|
|
306
|
-
throw new ValueConvertUnknownTypeError(schema_);
|
|
307
281
|
return Default(value);
|
|
308
282
|
}
|
|
309
283
|
}
|
|
310
284
|
/** Converts any type mismatched values to their target type if a reasonable conversion is possible. */
|
|
285
|
+
// prettier-ignore
|
|
311
286
|
function Convert(...args) {
|
|
312
|
-
return args.length === 3
|
|
287
|
+
return args.length === 3
|
|
288
|
+
? Visit(args[0], args[1], args[2])
|
|
289
|
+
: Visit(args[0], [], args[1]);
|
|
313
290
|
}
|
|
314
291
|
exports.Convert = Convert;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './convert';
|