typia
Version:
Superfast runtime validators with only one line
29 lines (24 loc) • 1.03 kB
text/typescript
import ts from "typescript";
import { Metadata } from "../../../schemas/metadata/Metadata";
import { MetadataCollection } from "../../MetadataCollection";
import { MetadataFactory } from "../../MetadataFactory";
import { emend_metadata_atomics } from "./emend_metadata_atomics";
import { iterate_metadata } from "./iterate_metadata";
export const explore_metadata =
(checker: ts.TypeChecker) =>
(options: MetadataFactory.IOptions) =>
(collection: MetadataCollection) =>
(errors: MetadataFactory.IError[]) =>
(type: ts.Type | null, explore: MetadataFactory.IExplore): Metadata => {
// CONSTRUCT METADATA
const meta: Metadata = Metadata.initialize(explore.escaped);
if (type === null) return meta;
// ITERATE TYPESCRIPT TYPES
iterate_metadata(checker)(options)(collection)(errors)(meta, type, explore);
emend_metadata_atomics(meta);
if (meta.escaped) {
emend_metadata_atomics(meta.escaped.original);
emend_metadata_atomics(meta.escaped.returns);
}
return meta;
};