pema 0.1.0 → 0.2.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/LICENSE +19 -0
- package/lib/private/ArrayType.d.ts +31 -5
- package/lib/private/ArrayType.js +86 -22
- package/lib/private/BigIntDataType.d.ts +3 -0
- package/lib/private/BigIntDataType.js +2 -0
- package/lib/private/BigIntType.d.ts +8 -3
- package/lib/private/BigIntType.js +7 -4
- package/lib/private/BigUintDataType.d.ts +3 -0
- package/lib/private/BigUintDataType.js +2 -0
- package/lib/private/BigUintType.d.ts +10 -0
- package/lib/private/BigUintType.js +10 -0
- package/lib/private/BlobType.d.ts +12 -2
- package/lib/private/BlobType.js +12 -2
- package/lib/private/BooleanType.d.ts +10 -2
- package/lib/private/BooleanType.js +14 -2
- package/lib/private/BuiltinType.d.ts +7 -5
- package/lib/private/BuiltinType.js +18 -17
- package/lib/private/CoerceKey.d.ts +4 -0
- package/lib/private/CoerceKey.js +3 -0
- package/lib/private/ConstructorType.d.ts +10 -4
- package/lib/private/ConstructorType.js +13 -11
- package/lib/private/DataKey.d.ts +4 -0
- package/lib/private/DataKey.js +2 -0
- package/lib/private/DataType.d.ts +23 -0
- package/lib/private/DataType.js +2 -0
- package/lib/private/DateType.d.ts +12 -2
- package/lib/private/DateType.js +15 -2
- package/lib/private/DecrementDepth.d.ts +3 -0
- package/lib/private/DecrementDepth.js +2 -0
- package/lib/private/DefaultType.d.ts +13 -6
- package/lib/private/DefaultType.js +19 -11
- package/lib/private/FileType.d.ts +12 -2
- package/lib/private/FileType.js +12 -2
- package/lib/private/FloatDataType.d.ts +3 -0
- package/lib/private/FloatDataType.js +2 -0
- package/lib/private/GenericType.d.ts +2 -2
- package/lib/private/GenericType.js +2 -2
- package/lib/private/Id.d.ts +3 -0
- package/lib/private/Id.js +2 -0
- package/lib/private/Infer.d.ts +2 -2
- package/lib/private/InferInputSchema.d.ts +26 -0
- package/lib/private/InferInputSchema.js +2 -0
- package/lib/private/InferSchema.d.ts +5 -5
- package/lib/private/InferStore.d.ts +9 -0
- package/lib/private/InferStore.js +2 -0
- package/lib/private/InferStoreOut.d.ts +8 -0
- package/lib/private/InferStoreOut.js +2 -0
- package/lib/private/IntDataType.d.ts +3 -0
- package/lib/private/IntDataType.js +2 -0
- package/lib/private/IntType.d.ts +10 -5
- package/lib/private/IntType.js +13 -12
- package/lib/private/Issue.d.ts +6 -0
- package/lib/private/Issue.js +2 -0
- package/lib/private/LiteralType.d.ts +9 -2
- package/lib/private/LiteralType.js +17 -9
- package/lib/private/NormalizeSchema.d.ts +12 -7
- package/lib/private/NullType.d.ts +6 -2
- package/lib/private/NullType.js +11 -11
- package/lib/private/NumberType.d.ts +7 -3
- package/lib/private/NumberType.js +7 -4
- package/lib/private/NumericType.d.ts +25 -0
- package/lib/private/NumericType.js +38 -0
- package/lib/private/ObjectType.d.ts +23 -0
- package/lib/private/ObjectType.js +53 -0
- package/lib/private/OptionalType.d.ts +12 -5
- package/lib/private/OptionalType.js +16 -4
- package/lib/private/ParseError.d.ts +10 -0
- package/lib/private/ParseError.js +51 -0
- package/lib/private/ParseIssue.d.ts +5 -0
- package/lib/private/ParseIssue.js +2 -0
- package/lib/private/ParseOptions.d.ts +10 -0
- package/lib/private/ParseOptions.js +3 -0
- package/lib/private/Parsed.d.ts +24 -0
- package/lib/private/Parsed.js +17 -0
- package/lib/private/ParsedKey.d.ts +4 -0
- package/lib/private/ParsedKey.js +3 -0
- package/lib/private/PartialType.d.ts +25 -0
- package/lib/private/PartialType.js +69 -0
- package/lib/private/Partialable.d.ts +5 -0
- package/lib/private/Partialable.js +2 -0
- package/lib/private/PrimaryType.d.ts +14 -0
- package/lib/private/PrimaryType.js +26 -0
- package/lib/private/PrimitiveType.d.ts +12 -4
- package/lib/private/PrimitiveType.js +50 -17
- package/lib/private/PureType.d.ts +15 -0
- package/lib/private/PureType.js +21 -0
- package/lib/private/RecordType.d.ts +19 -4
- package/lib/private/RecordType.js +43 -14
- package/lib/private/RecordTypeKey.d.ts +1 -1
- package/lib/private/Schema.d.ts +3 -3
- package/lib/private/SchemaError.d.ts +4 -0
- package/lib/private/SchemaError.js +8 -0
- package/lib/private/Serialized.d.ts +72 -0
- package/lib/private/Serialized.js +2 -0
- package/lib/private/StoreId.d.ts +6 -0
- package/lib/private/StoreId.js +2 -0
- package/lib/private/StoreSchema.d.ts +8 -0
- package/lib/private/StoreSchema.js +2 -0
- package/lib/private/StoreType.d.ts +21 -0
- package/lib/private/StoreType.js +45 -0
- package/lib/private/Storeable.d.ts +15 -0
- package/lib/private/Storeable.js +7 -0
- package/lib/private/StringType.d.ts +17 -5
- package/lib/private/StringType.js +47 -13
- package/lib/private/SymbolType.d.ts +4 -1
- package/lib/private/SymbolType.js +5 -2
- package/lib/private/TupleType.d.ts +11 -4
- package/lib/private/TupleType.js +16 -22
- package/lib/private/Type.d.ts +5 -3
- package/lib/private/Type.js +2 -2
- package/lib/private/URLType.d.ts +16 -2
- package/lib/private/URLType.js +12 -2
- package/lib/private/UintDataType.d.ts +3 -0
- package/lib/private/UintDataType.js +2 -0
- package/lib/private/UintType.d.ts +14 -7
- package/lib/private/UintType.js +20 -12
- package/lib/private/UndefinedType.d.ts +4 -1
- package/lib/private/UndefinedType.js +7 -2
- package/lib/private/UnionType.d.ts +15 -4
- package/lib/private/UnionType.js +32 -26
- package/lib/private/UnknownType.d.ts +5 -0
- package/lib/private/UnknownType.js +7 -0
- package/lib/private/Validator.d.ts +1 -1
- package/lib/private/VirtualType.d.ts +6 -0
- package/lib/private/VirtualType.js +11 -0
- package/lib/private/array.d.ts +6 -3
- package/lib/private/array.js +7 -1
- package/lib/private/bigint.d.ts +1 -3
- package/lib/private/bigint.js +1 -2
- package/lib/private/biguint.d.ts +2 -0
- package/lib/private/biguint.js +2 -0
- package/lib/private/boolean.d.ts +3 -0
- package/lib/private/boolean.js +3 -0
- package/lib/private/coerce/bigint.d.ts +2 -0
- package/lib/private/coerce/bigint.js +13 -0
- package/lib/private/coerce/date.d.ts +2 -0
- package/lib/private/coerce/date.js +56 -0
- package/lib/private/coerce/int.d.ts +2 -0
- package/lib/private/coerce/int.js +8 -0
- package/lib/private/constructor.d.ts +5 -2
- package/lib/private/constructor.js +3 -0
- package/lib/private/error/fail.d.ts +3 -0
- package/lib/private/error/fail.js +5 -0
- package/lib/private/error/schemafail.d.ts +3 -0
- package/lib/private/error/schemafail.js +5 -0
- package/lib/private/error.d.ts +3 -2
- package/lib/private/error.js +10 -3
- package/lib/private/expect.d.ts +12 -11
- package/lib/private/expect.js +22 -11
- package/lib/private/expected.js +10 -1
- package/lib/private/f32.d.ts +4 -0
- package/lib/private/f32.js +4 -0
- package/lib/private/f64.d.ts +4 -0
- package/lib/private/f64.js +3 -0
- package/lib/private/i128.d.ts +4 -0
- package/lib/private/i128.js +6 -0
- package/lib/private/i16.d.ts +4 -0
- package/lib/private/i16.js +6 -0
- package/lib/private/i32.d.ts +4 -0
- package/lib/private/i32.js +6 -0
- package/lib/private/i64.d.ts +4 -0
- package/lib/private/i64.js +6 -0
- package/lib/private/i8.d.ts +4 -0
- package/lib/private/i8.js +6 -0
- package/lib/private/index.d.ts +4 -2
- package/lib/private/index.js +5 -40
- package/lib/private/int.d.ts +1 -3
- package/lib/private/int.js +1 -2
- package/lib/private/is-parsed-type.d.ts +3 -0
- package/lib/private/is-parsed-type.js +6 -0
- package/lib/private/json/JSONIssue.d.ts +6 -0
- package/lib/private/json/JSONIssue.js +2 -0
- package/lib/private/json/JSONPayload.d.ts +5 -0
- package/lib/private/json/JSONPayload.js +2 -0
- package/lib/private/literal.d.ts +1 -2
- package/lib/private/literal.js +1 -1
- package/lib/private/normalize.d.ts +4 -0
- package/lib/private/normalize.js +42 -0
- package/lib/private/number.d.ts +1 -3
- package/lib/private/number.js +1 -2
- package/lib/private/object.d.ts +11 -0
- package/lib/private/object.js +10 -0
- package/lib/private/optional.d.ts +2 -2
- package/lib/private/partial.d.ts +9 -0
- package/lib/private/partial.js +8 -0
- package/lib/private/path/join.d.ts +3 -0
- package/lib/private/path/join.js +13 -0
- package/lib/private/path/next.d.ts +9 -0
- package/lib/private/path/next.js +9 -0
- package/lib/private/path/rebase.d.ts +3 -0
- package/lib/private/path/rebase.js +9 -0
- package/lib/private/primary.d.ts +4 -0
- package/lib/private/primary.js +3 -0
- package/lib/private/pure.d.ts +3 -0
- package/lib/private/pure.js +5 -0
- package/lib/private/record.d.ts +5 -2
- package/lib/private/record.js +3 -0
- package/lib/private/spec/bigint.d.ts +5 -0
- package/lib/private/spec/bigint.js +73 -0
- package/lib/private/spec/biguint.d.ts +5 -0
- package/lib/private/spec/biguint.js +73 -0
- package/lib/private/spec/int.d.ts +5 -0
- package/lib/private/spec/int.js +70 -0
- package/lib/private/spec/uint.d.ts +5 -0
- package/lib/private/spec/uint.js +73 -0
- package/lib/private/string.d.ts +3 -0
- package/lib/private/string.js +3 -0
- package/lib/private/test/messages-of.d.ts +3 -0
- package/lib/private/test/messages-of.js +4 -0
- package/lib/private/test/paths-of.d.ts +3 -0
- package/lib/private/test/paths-of.js +4 -0
- package/lib/private/test/throws-issues.d.ts +4 -0
- package/lib/private/test/throws-issues.js +13 -0
- package/lib/private/trait/Default.d.ts +9 -0
- package/lib/private/trait/Default.js +4 -0
- package/lib/private/trait/Optional.d.ts +11 -0
- package/lib/private/trait/Optional.js +4 -0
- package/lib/private/tuple.d.ts +6 -2
- package/lib/private/tuple.js +6 -1
- package/lib/private/u128.d.ts +4 -0
- package/lib/private/u128.js +6 -0
- package/lib/private/u16.d.ts +4 -0
- package/lib/private/u16.js +6 -0
- package/lib/private/u32.d.ts +7 -0
- package/lib/private/u32.js +9 -0
- package/lib/private/u64.d.ts +4 -0
- package/lib/private/u64.js +6 -0
- package/lib/private/u8.d.ts +4 -0
- package/lib/private/u8.js +6 -0
- package/lib/private/uint.d.ts +1 -3
- package/lib/private/uint.js +1 -2
- package/lib/private/union.d.ts +6 -5
- package/lib/private/union.js +4 -1
- package/lib/private/unknown.d.ts +7 -0
- package/lib/private/unknown.js +6 -0
- package/lib/private/validator/email.d.ts +3 -0
- package/lib/private/validator/email.js +4 -0
- package/lib/private/validator/ends-with.d.ts +4 -0
- package/lib/private/validator/ends-with.js +11 -0
- package/lib/private/validator/f32.d.ts +2 -0
- package/lib/private/validator/f32.js +11 -0
- package/lib/private/validator/integer.d.ts +3 -0
- package/lib/private/validator/integer.js +12 -0
- package/lib/private/validator/isotime.d.ts +2 -0
- package/lib/private/validator/isotime.js +30 -0
- package/lib/private/validator/length.d.ts +5 -0
- package/lib/private/validator/length.js +29 -0
- package/lib/private/validator/max.d.ts +6 -0
- package/lib/private/validator/max.js +37 -0
- package/lib/private/validator/min.d.ts +6 -0
- package/lib/private/validator/min.js +37 -0
- package/lib/private/validator/port.d.ts +3 -0
- package/lib/private/validator/port.js +15 -0
- package/lib/private/validator/range.d.ts +3 -0
- package/lib/private/validator/range.js +22 -0
- package/lib/private/validator/regex.d.ts +5 -0
- package/lib/private/validator/regex.js +15 -0
- package/lib/private/validator/starts-with.d.ts +4 -0
- package/lib/private/validator/starts-with.js +11 -0
- package/lib/private/validator/unique-by.d.ts +2 -0
- package/lib/private/validator/unique-by.js +23 -0
- package/lib/private/validator/unique-with.d.ts +2 -0
- package/lib/private/validator/unique-with.js +18 -0
- package/lib/private/validator/unique.d.ts +2 -0
- package/lib/private/validator/unique.js +19 -0
- package/lib/private/validator/uuid.d.ts +3 -0
- package/lib/private/validator/uuid.js +4 -0
- package/lib/private/validator/values.d.ts +4 -0
- package/lib/private/validator/values.js +14 -0
- package/lib/public/DataType.d.ts +2 -0
- package/lib/public/DataType.js +2 -0
- package/lib/public/Id.d.ts +2 -0
- package/lib/public/Id.js +2 -0
- package/lib/public/InferStore.d.ts +2 -0
- package/lib/public/InferStore.js +2 -0
- package/lib/public/InferStoreOut.d.ts +2 -0
- package/lib/public/InferStoreOut.js +2 -0
- package/lib/public/Issue.d.ts +2 -0
- package/lib/public/Issue.js +2 -0
- package/lib/public/JSONPayload.d.ts +2 -0
- package/lib/public/JSONPayload.js +2 -0
- package/lib/public/ParseError.d.ts +2 -0
- package/lib/public/ParseError.js +2 -0
- package/lib/public/Serialized.d.ts +2 -0
- package/lib/public/Serialized.js +2 -0
- package/lib/public/StoreId.d.ts +2 -0
- package/lib/public/StoreId.js +2 -0
- package/lib/public/StoreSchema.d.ts +2 -0
- package/lib/public/StoreSchema.js +2 -0
- package/lib/public/StoreType.d.ts +3 -0
- package/lib/public/StoreType.js +2 -0
- package/lib/public/array.d.ts +3 -0
- package/lib/public/array.js +3 -0
- package/lib/public/bigint.d.ts +2 -0
- package/lib/public/bigint.js +2 -0
- package/lib/public/biguint.d.ts +2 -0
- package/lib/public/biguint.js +2 -0
- package/lib/public/boolean.d.ts +1 -0
- package/lib/public/boolean.js +1 -0
- package/lib/public/constructor.d.ts +1 -0
- package/lib/public/constructor.js +1 -0
- package/lib/public/f32.d.ts +2 -0
- package/lib/public/f32.js +2 -0
- package/lib/public/f64.d.ts +2 -0
- package/lib/public/f64.js +2 -0
- package/lib/public/i128.d.ts +2 -0
- package/lib/public/i128.js +2 -0
- package/lib/public/i16.d.ts +2 -0
- package/lib/public/i16.js +2 -0
- package/lib/public/i32.d.ts +2 -0
- package/lib/public/i32.js +2 -0
- package/lib/public/i64.d.ts +2 -0
- package/lib/public/i64.js +2 -0
- package/lib/public/i8.d.ts +2 -0
- package/lib/public/i8.js +2 -0
- package/lib/public/index.d.ts +6 -0
- package/lib/public/index.js +6 -0
- package/lib/public/number.d.ts +1 -0
- package/lib/public/number.js +1 -0
- package/lib/public/primary.d.ts +2 -0
- package/lib/public/primary.js +2 -0
- package/lib/public/pure.d.ts +2 -0
- package/lib/public/pure.js +2 -0
- package/lib/public/record.d.ts +1 -0
- package/lib/public/record.js +1 -0
- package/lib/public/string.d.ts +1 -0
- package/lib/public/string.js +1 -0
- package/lib/public/u128.d.ts +2 -0
- package/lib/public/u128.js +2 -0
- package/lib/public/u16.d.ts +2 -0
- package/lib/public/u16.js +2 -0
- package/lib/public/u32.d.ts +2 -0
- package/lib/public/u32.js +2 -0
- package/lib/public/u64.d.ts +2 -0
- package/lib/public/u64.js +2 -0
- package/lib/public/u8.d.ts +2 -0
- package/lib/public/u8.js +2 -0
- package/lib/public/uint.d.ts +3 -0
- package/lib/public/uint.js +3 -0
- package/lib/public/union.d.ts +1 -0
- package/lib/public/union.js +1 -0
- package/lib/public/unknown.d.ts +3 -0
- package/lib/public/unknown.js +2 -0
- package/package.json +14 -11
- package/lib/private/AbstractConstructor.d.ts +0 -3
- package/lib/private/AbstractConstructor.js +0 -2
- package/lib/private/MaybeInt.d.ts +0 -3
- package/lib/private/MaybeInt.js +0 -2
- package/lib/private/SchemaType.d.ts +0 -13
- package/lib/private/SchemaType.js +0 -63
- package/lib/private/Validated.d.ts +0 -8
- package/lib/private/Validated.js +0 -10
- package/lib/private/ValidatedKey.d.ts +0 -4
- package/lib/private/ValidatedKey.js +0 -3
- package/lib/private/is-int.d.ts +0 -3
- package/lib/private/is-int.js +0 -5
- package/lib/private/is_validated_type.d.ts +0 -4
- package/lib/private/is_validated_type.js +0 -5
package/lib/private/uint.d.ts
CHANGED
package/lib/private/uint.js
CHANGED
package/lib/private/union.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import UnionType from "#UnionType";
|
|
2
|
-
import type Schema from "#Schema";
|
|
3
1
|
import type NormalizeSchema from "#NormalizeSchema";
|
|
4
|
-
type
|
|
2
|
+
import type Schema from "#Schema";
|
|
3
|
+
import UnionType from "#UnionType";
|
|
4
|
+
type NormalizeArray<T extends Schema[]> = {
|
|
5
5
|
[K in keyof T]: NormalizeSchema<T[K]>;
|
|
6
6
|
};
|
|
7
|
-
|
|
8
|
-
export default
|
|
7
|
+
export default function union(): UnionType<[]>;
|
|
8
|
+
export default function union<const T extends Schema[]>(...types: T): UnionType<NormalizeArray<T>>;
|
|
9
|
+
export {};
|
|
9
10
|
//# sourceMappingURL=union.d.ts.map
|
package/lib/private/union.js
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
export default (suffix) => (x) => {
|
|
3
|
+
if (!x.endsWith(suffix)) {
|
|
4
|
+
throw new ParseError([{
|
|
5
|
+
input: x,
|
|
6
|
+
message: `"${x}" does not end with "${suffix}"`,
|
|
7
|
+
path: "",
|
|
8
|
+
}]);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=ends-with.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
import integer from "@rcompat/is/integer";
|
|
3
|
+
export default (x) => {
|
|
4
|
+
if (!integer(x)) {
|
|
5
|
+
throw new ParseError([{
|
|
6
|
+
input: x,
|
|
7
|
+
message: `${x} is not an integer`,
|
|
8
|
+
path: "",
|
|
9
|
+
}]);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=integer.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
import regex from "#validator/regex";
|
|
3
|
+
const ISOTIME = /^T?(?<hour>\d{2}):?(?<minute>\d{2}):?(?<second>\d{2})$/u;
|
|
4
|
+
const RANGE = {
|
|
5
|
+
hour: { max: 23, min: 0 },
|
|
6
|
+
minute: { max: 59, min: 0 },
|
|
7
|
+
second: { max: 60, min: 0 },
|
|
8
|
+
};
|
|
9
|
+
export default function isotime(x) {
|
|
10
|
+
// check format
|
|
11
|
+
regex(ISOTIME, y => `"${y}" is not a valid ISO time`)(x);
|
|
12
|
+
// check range
|
|
13
|
+
const match = ISOTIME.exec(x);
|
|
14
|
+
const g = match.groups;
|
|
15
|
+
const h = Number(g.hour);
|
|
16
|
+
const m = Number(g.minute);
|
|
17
|
+
const s = Number(g.second);
|
|
18
|
+
const inRange = h >= RANGE.hour.min && h <= RANGE.hour.max &&
|
|
19
|
+
m >= RANGE.minute.min && m <= RANGE.minute.max &&
|
|
20
|
+
s >= RANGE.second.min && s <= RANGE.second.max;
|
|
21
|
+
if (!inRange) {
|
|
22
|
+
throw new ParseError([{
|
|
23
|
+
input: x,
|
|
24
|
+
message: `"${x}" is not a valid ISO time`,
|
|
25
|
+
path: "",
|
|
26
|
+
}]);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
;
|
|
30
|
+
//# sourceMappingURL=isotime.js.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import fail from "#error/fail";
|
|
2
|
+
import schemafail from "#error/schemafail";
|
|
3
|
+
import ParseError from "#ParseError";
|
|
4
|
+
import isFinite from "@rcompat/is/finite";
|
|
5
|
+
export default function length(from, to) {
|
|
6
|
+
if (!isFinite(from) || !isFinite(to)) {
|
|
7
|
+
throw schemafail("length: {0} and {1} must be finite numbers", from, to);
|
|
8
|
+
}
|
|
9
|
+
if (from < 0 || to < 0) {
|
|
10
|
+
throw schemafail("length: {0} and {1} must be positive", from, to);
|
|
11
|
+
}
|
|
12
|
+
if (from > to) {
|
|
13
|
+
throw schemafail("length: {0} must be lower than {1}", from, to);
|
|
14
|
+
}
|
|
15
|
+
return (x) => {
|
|
16
|
+
if (typeof x !== "string" && !Array.isArray(x)) {
|
|
17
|
+
throw fail(x, "invalid type");
|
|
18
|
+
}
|
|
19
|
+
if (x.length < from || x.length > to) {
|
|
20
|
+
throw new ParseError([{
|
|
21
|
+
input: x,
|
|
22
|
+
message: "length out of range",
|
|
23
|
+
path: "",
|
|
24
|
+
}]);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
;
|
|
29
|
+
//# sourceMappingURL=length.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import fail from "#error/fail";
|
|
2
|
+
import schemafail from "#error/schemafail";
|
|
3
|
+
import isFinite from "@rcompat/is/finite";
|
|
4
|
+
export default function max(limit) {
|
|
5
|
+
// validate limit once
|
|
6
|
+
if (typeof limit === "number") {
|
|
7
|
+
if (!isFinite(limit)) {
|
|
8
|
+
throw schemafail("max: limit {0} must be a finite number", limit);
|
|
9
|
+
}
|
|
10
|
+
return (x) => {
|
|
11
|
+
if (typeof x === "number") {
|
|
12
|
+
if (x > limit)
|
|
13
|
+
throw fail(x, `${x} is greater than max (${limit})`);
|
|
14
|
+
}
|
|
15
|
+
else if (typeof x === "string" || Array.isArray(x)) {
|
|
16
|
+
if (x.length > limit) {
|
|
17
|
+
const unit = typeof x === "string" ? "characters" : "items";
|
|
18
|
+
throw fail(x, `max ${limit} ${unit}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
throw fail(x, "invalid type");
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// bigint
|
|
27
|
+
return (x) => {
|
|
28
|
+
if (typeof x === "bigint") {
|
|
29
|
+
if (x > limit)
|
|
30
|
+
throw fail(x, `${x} is greater than max (${limit})`);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw fail(x, "invalid type");
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=max.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import fail from "#error/fail";
|
|
2
|
+
import schemafail from "#error/schemafail";
|
|
3
|
+
import isFinite from "@rcompat/is/finite";
|
|
4
|
+
export default function min(limit) {
|
|
5
|
+
// validate limit once
|
|
6
|
+
if (typeof limit === "number") {
|
|
7
|
+
if (!isFinite(limit)) {
|
|
8
|
+
throw schemafail("max: limit {0} must be a finite number", limit);
|
|
9
|
+
}
|
|
10
|
+
return (x) => {
|
|
11
|
+
if (typeof x === "number") {
|
|
12
|
+
if (x < limit)
|
|
13
|
+
throw fail(x, `${x} is lower than min (${limit})`);
|
|
14
|
+
}
|
|
15
|
+
else if (typeof x === "string" || Array.isArray(x)) {
|
|
16
|
+
if (x.length < limit) {
|
|
17
|
+
const unit = typeof x === "string" ? "characters" : "items";
|
|
18
|
+
throw fail(x, `min ${limit} ${unit}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
throw fail(x, "invalid type");
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// bigint
|
|
27
|
+
return (x) => {
|
|
28
|
+
if (typeof x === "bigint") {
|
|
29
|
+
if (x < limit)
|
|
30
|
+
throw fail(x, `${x} is lower than min (${limit})`);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw fail(x, "invalid type");
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=min.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
// 1000
|
|
3
|
+
const min = 2 ** 10;
|
|
4
|
+
// 65535
|
|
5
|
+
const max = 2 ** 16 - 1;
|
|
6
|
+
export default (port) => {
|
|
7
|
+
if (port < min || port > max) {
|
|
8
|
+
throw new ParseError([{
|
|
9
|
+
input: port,
|
|
10
|
+
message: `${port} out of port range (${min} - ${max})`,
|
|
11
|
+
path: "",
|
|
12
|
+
}]);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
import isFinite from "@rcompat/is/finite";
|
|
3
|
+
const fail = (input, msg) => new ParseError([{ input, message: msg, path: "" }]);
|
|
4
|
+
export default function range(from, to) {
|
|
5
|
+
if (!isFinite(from) || !isFinite(to)) {
|
|
6
|
+
throw new TypeError("range(): from and to must be finite numbers");
|
|
7
|
+
}
|
|
8
|
+
return (x) => {
|
|
9
|
+
if (typeof x !== "number" && typeof x !== "bigint") {
|
|
10
|
+
throw fail(x, "invalid type");
|
|
11
|
+
}
|
|
12
|
+
if (x < from || x > to) {
|
|
13
|
+
throw new ParseError([{
|
|
14
|
+
input: x,
|
|
15
|
+
message: `${x} is out of range`,
|
|
16
|
+
path: "",
|
|
17
|
+
}]);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
;
|
|
22
|
+
//# sourceMappingURL=range.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
export default function validateRegex(regex, error) {
|
|
3
|
+
return (x) => {
|
|
4
|
+
if (!regex.test(x)) {
|
|
5
|
+
const message = (error ?? ((y) => `"${y}" is not a valid ${String(regex)}`))(x);
|
|
6
|
+
throw new ParseError([{
|
|
7
|
+
input: x,
|
|
8
|
+
message,
|
|
9
|
+
path: "", // root; the calling type should rebase if needed
|
|
10
|
+
}]);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
;
|
|
15
|
+
//# sourceMappingURL=regex.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
export default (prefix) => (x) => {
|
|
3
|
+
if (!x.startsWith(prefix)) {
|
|
4
|
+
throw new ParseError([{
|
|
5
|
+
input: x,
|
|
6
|
+
message: `"${x}" does not start with "${prefix}"`,
|
|
7
|
+
path: "",
|
|
8
|
+
}]);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=starts-with.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
import join from "#path/join";
|
|
3
|
+
function message(k, i, first) {
|
|
4
|
+
return `duplicate key "${String(k)}" at index ${i} (first ${first})`;
|
|
5
|
+
}
|
|
6
|
+
export default function uniqueBy(selector) {
|
|
7
|
+
return (array) => {
|
|
8
|
+
const seen = new Map();
|
|
9
|
+
for (let i = 0; i < array.length; i++) {
|
|
10
|
+
const k = selector(array[i]);
|
|
11
|
+
if (seen.has(k)) {
|
|
12
|
+
const first = seen.get(k);
|
|
13
|
+
throw new ParseError([{
|
|
14
|
+
input: array,
|
|
15
|
+
message: message(k, i, first),
|
|
16
|
+
path: join("", i),
|
|
17
|
+
}]);
|
|
18
|
+
}
|
|
19
|
+
seen.set(k, i);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=unique-by.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
import join from "#path/join";
|
|
3
|
+
export default function uniqueWith(equals) {
|
|
4
|
+
return (array) => {
|
|
5
|
+
for (let i = 0; i < array.length; i++) {
|
|
6
|
+
for (let j = 0; j < i; j++) {
|
|
7
|
+
if (equals(array[i], array[j])) {
|
|
8
|
+
throw new ParseError([{
|
|
9
|
+
input: array,
|
|
10
|
+
message: `items at ${j} and ${i} considered equal`,
|
|
11
|
+
path: join("", i),
|
|
12
|
+
}]);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=unique-with.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
import join from "#path/join";
|
|
3
|
+
export default function unique(array) {
|
|
4
|
+
const seen = new Map();
|
|
5
|
+
for (let i = 0; i < array.length; i++) {
|
|
6
|
+
const v = array[i];
|
|
7
|
+
if (seen.has(v)) {
|
|
8
|
+
const first = seen.get(v);
|
|
9
|
+
// key = current duplicate index
|
|
10
|
+
throw new ParseError([{
|
|
11
|
+
input: array,
|
|
12
|
+
message: `duplicate value at index ${i} (first seen at ${first})`,
|
|
13
|
+
path: join("", i),
|
|
14
|
+
}]);
|
|
15
|
+
}
|
|
16
|
+
seen.set(v, i);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=unique.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import ParseError from "#ParseError";
|
|
2
|
+
export default function values(input) {
|
|
3
|
+
const allowed = Object.values(input).map(v => String(v)).join(", ");
|
|
4
|
+
return (x) => {
|
|
5
|
+
if (!Object.values(input).includes(x)) {
|
|
6
|
+
throw new ParseError([{
|
|
7
|
+
input: x,
|
|
8
|
+
message: `"${x}" not in given list of values (${allowed})`,
|
|
9
|
+
path: "",
|
|
10
|
+
}]);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=values.js.map
|
package/lib/public/Id.js
ADDED
package/lib/public/boolean.d.ts
CHANGED
package/lib/public/boolean.js
CHANGED