typebox 1.1.11 → 1.1.12
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.
|
@@ -10,6 +10,6 @@ type TNormalizeLiteral<Value extends TLiteralValue, Result extends TSchema = TLi
|
|
|
10
10
|
type TNormalizeIndexerTypes<Types extends TSchema[], Result extends TSchema[] = []> = (Types extends [infer Left extends TSchema, ...infer Right extends TSchema[]] ? TNormalizeIndexerTypes<Right, [...Result, TNormalizeIndexer<Left>]> : Result);
|
|
11
11
|
export type TNormalizeIndexer<Type extends TSchema, Result extends TSchema = (Type extends TIntersect<infer Types extends TSchema[]> ? TIntersect<TNormalizeIndexerTypes<Types>> : Type extends TUnion<infer Types extends TSchema[]> ? TUnion<TNormalizeIndexerTypes<Types>> : Type extends TLiteral<infer Value extends TLiteralValue> ? TNormalizeLiteral<Value> : Type)> = Result;
|
|
12
12
|
export declare function NormalizeIndexer<Type extends TSchema>(type: Type): TNormalizeIndexer<Type>;
|
|
13
|
-
export type TFromArray<Type extends TSchema, Indexer extends TSchema, NormalizedIndexer extends TSchema = TNormalizeIndexer<Indexer>, Check extends ExtendsResult.TResult = TExtends<{}, NormalizedIndexer, TNumber>, Result extends TSchema = Check extends ExtendsResult.TExtendsTrueLike ? Type : TNever> = Result;
|
|
13
|
+
export type TFromArray<Type extends TSchema, Indexer extends TSchema, NormalizedIndexer extends TSchema = TNormalizeIndexer<Indexer>, Check extends ExtendsResult.TResult = TExtends<{}, NormalizedIndexer, TNumber>, Result extends TSchema = (Check extends ExtendsResult.TExtendsTrueLike ? Type : Indexer extends TLiteral<infer _ extends 'length'> ? TNumber : TNever)> = Result;
|
|
14
14
|
export declare function FromArray<Type extends TSchema, Indexer extends TSchema>(type: Type, indexer: Indexer): TFromArray<Type, Indexer>;
|
|
15
15
|
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
|
+
import { Guard } from '../../../guard/index.mjs';
|
|
2
3
|
import { Intersect, IsIntersect } from '../../types/intersect.mjs';
|
|
3
4
|
import { Union, IsUnion } from '../../types/union.mjs';
|
|
4
5
|
import { Literal, IsLiteral } from '../../types/literal.mjs';
|
|
@@ -21,6 +22,13 @@ export function NormalizeIndexer(type) {
|
|
|
21
22
|
export function FromArray(type, indexer) {
|
|
22
23
|
const normalizedIndexer = NormalizeIndexer(indexer);
|
|
23
24
|
const check = Extends({}, normalizedIndexer, Number());
|
|
24
|
-
const result =
|
|
25
|
+
const result = (
|
|
26
|
+
// indexer
|
|
27
|
+
ExtendsResult.IsExtendsTrueLike(check)
|
|
28
|
+
? type
|
|
29
|
+
// length (intrinsic)
|
|
30
|
+
: IsLiteral(indexer) && Guard.IsEqual(indexer.const, 'length')
|
|
31
|
+
? Number()
|
|
32
|
+
: Never());
|
|
25
33
|
return result;
|
|
26
34
|
}
|
|
@@ -8,6 +8,6 @@ import { type TFormatArrayIndexer } from './array-indexer.mjs';
|
|
|
8
8
|
type TIndexElementsWithIndexer<Types extends TSchema[], Indexer extends TSchema, Result extends TSchema[] = []> = (Types extends [...infer Left extends TSchema[], infer Right extends TSchema] ? TExtends<{}, TLiteral<Left['length']>, Indexer> extends ExtendsResult.TExtendsTrueLike ? TIndexElementsWithIndexer<Left, Indexer, [Right, ...Result]> : TIndexElementsWithIndexer<Left, Indexer, Result> : Result);
|
|
9
9
|
type TFromTupleWithIndexer<Types extends TSchema[], Indexer extends TSchema, ArrayIndexer extends TSchema = TFormatArrayIndexer<Indexer>, Elements extends TSchema[] = TIndexElementsWithIndexer<Types, ArrayIndexer>, Result extends TSchema = TEvaluateUnionFast<Elements>> = Result;
|
|
10
10
|
type TFromTupleWithoutIndexer<Types extends TSchema[], Result extends TSchema = TEvaluateUnionFast<Types>> = Result;
|
|
11
|
-
export type TFromTuple<Types extends TSchema[], Indexer extends TSchema, Result extends TSchema = (Indexer extends TNumber | TInteger ? TFromTupleWithoutIndexer<Types> : TFromTupleWithIndexer<Types, Indexer>)> = Result;
|
|
11
|
+
export type TFromTuple<Types extends TSchema[], Indexer extends TSchema, Result extends TSchema = (Indexer extends TLiteral<infer _ extends 'length'> ? TLiteral<Types['length']> : Indexer extends TNumber | TInteger ? TFromTupleWithoutIndexer<Types> : TFromTupleWithIndexer<Types, Indexer>)> = Result;
|
|
12
12
|
export declare function FromTuple<Types extends TSchema[], Indexer extends TSchema>(types: [...Types], indexer: Indexer): TFromTuple<Types, Indexer>;
|
|
13
13
|
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
|
-
import {
|
|
2
|
+
import { Guard } from '../../../guard/index.mjs';
|
|
3
|
+
import { Literal, IsLiteral } from '../../types/literal.mjs';
|
|
3
4
|
import { IsNumber } from '../../types/number.mjs';
|
|
4
5
|
import { IsInteger } from '../../types/integer.mjs';
|
|
5
6
|
import { EvaluateUnionFast } from '../evaluate/evaluate.mjs';
|
|
@@ -22,7 +23,12 @@ function FromTupleWithoutIndexer(types) {
|
|
|
22
23
|
return EvaluateUnionFast(types);
|
|
23
24
|
}
|
|
24
25
|
export function FromTuple(types, indexer) {
|
|
25
|
-
return (
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
return (
|
|
27
|
+
// length (intrinsic)
|
|
28
|
+
IsLiteral(indexer) && Guard.IsEqual(indexer.const, 'length')
|
|
29
|
+
? Literal(types.length)
|
|
30
|
+
// indexer
|
|
31
|
+
: IsNumber(indexer) || IsInteger(indexer)
|
|
32
|
+
? FromTupleWithoutIndexer(types)
|
|
33
|
+
: FromTupleWithIndexer(types, indexer));
|
|
28
34
|
}
|