typia
Version:
Superfast runtime validators with only one line
101 lines (96 loc) • 3.5 kB
text/typescript
import ts from "typescript";
import { Metadata } from "../../../schemas/metadata/Metadata";
import { MetadataCollection } from "../../MetadataCollection";
import { MetadataFactory } from "../../MetadataFactory";
import { TypeFactory } from "../../TypeFactory";
import { iterate_metadata_alias } from "./iterate_metadata_alias";
import { iterate_metadata_array } from "./iterate_metadata_array";
import { iterate_metadata_atomic } from "./iterate_metadata_atomic";
import { iterate_metadata_coalesce } from "./iterate_metadata_coalesce";
import { iterate_metadata_constant } from "./iterate_metadata_constant";
import { iterate_metadata_escape } from "./iterate_metadata_escape";
import { iterate_metadata_function } from "./iterate_metadata_function";
import { iterate_metadata_intersection } from "./iterate_metadata_intersection";
import { iterate_metadata_map } from "./iterate_metadata_map";
import { iterate_metadata_native } from "./iterate_metadata_native";
import { iterate_metadata_object } from "./iterate_metadata_object";
import { iterate_metadata_set } from "./iterate_metadata_set";
import { iterate_metadata_template } from "./iterate_metadata_template";
import { iterate_metadata_tuple } from "./iterate_metadata_tuple";
import { iterate_metadata_union } from "./iterate_metadata_union";
export const iterate_metadata =
(checker: ts.TypeChecker) =>
(options: MetadataFactory.IOptions) =>
(collection: MetadataCollection) =>
(errors: MetadataFactory.IError[]) =>
(meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore): void => {
if (type.isTypeParameter() === true) {
errors.push({
name: TypeFactory.getFullName(checker)(type),
explore: { ...explore },
messages: ["non-specified generic argument found."],
});
return;
}
// CHECK SPECIAL CASES
else if (
(explore.aliased !== true &&
iterate_metadata_alias(checker)(options)(collection)(errors)(
meta,
type,
explore,
)) ||
iterate_metadata_intersection(checker)(options)(collection)(errors)(
meta,
type,
explore,
) ||
iterate_metadata_union(checker)(options)(collection)(errors)(
meta,
type,
explore,
) ||
iterate_metadata_escape(checker)(options)(collection)(errors)(
meta,
type,
explore,
)
)
return;
// ITERATE CASES
iterate_metadata_coalesce(meta, type) ||
iterate_metadata_function(checker)(options)(collection)(errors)(
meta,
type,
explore,
) ||
iterate_metadata_constant(checker)(options)(meta, type) ||
iterate_metadata_template(checker)(options)(collection)(errors)(
meta,
type,
explore,
) ||
iterate_metadata_atomic(meta, type) ||
iterate_metadata_tuple(checker)(options)(collection)(errors)(
meta,
type as ts.TupleType,
explore,
) ||
iterate_metadata_array(checker)(options)(collection)(errors)(
meta,
type,
explore,
) ||
iterate_metadata_native(checker)(meta, type) ||
iterate_metadata_map(checker)(options)(collection)(errors)(
meta,
type,
explore,
) ||
iterate_metadata_set(checker)(options)(collection)(errors)(
meta,
type,
explore,
) ||
iterate_metadata_object(checker)(options)(collection)(errors)(meta, type);
};