typia
Version:
Superfast runtime validators with only one line
38 lines (32 loc) • 1.18 kB
text/typescript
import ts from "typescript";
import { Metadata } from "../../../schemas/metadata/Metadata";
import { MetadataTuple } from "../../../schemas/metadata/MetadataTuple";
import { MetadataTupleType } from "../../../schemas/metadata/MetadataTupleType";
import { ArrayUtil } from "../../../utils/ArrayUtil";
import { MetadataCollection } from "../../MetadataCollection";
import { MetadataFactory } from "../../MetadataFactory";
import { emplace_metadata_tuple } from "./emplace_metadata_tuple";
export const iterate_metadata_tuple =
(checker: ts.TypeChecker) =>
(options: MetadataFactory.IOptions) =>
(collection: MetadataCollection) =>
(errors: MetadataFactory.IError[]) =>
(
meta: Metadata,
type: ts.TupleType,
explore: MetadataFactory.IExplore,
): boolean => {
if (!checker.isTupleType(type)) return false;
const tupleType: MetadataTupleType = emplace_metadata_tuple(checker)(
options,
)(collection)(errors)(type, meta.nullable, explore);
ArrayUtil.add(
meta.tuples,
MetadataTuple.create({
type: tupleType,
tags: [],
}),
(elem) => elem.type.name === tupleType.name,
);
return true;
};