UNPKG

typia

Version:

Superfast runtime validators with only one line

45 lines (38 loc) 1.5 kB
import ts from "typescript"; import { Metadata } from "../../../schemas/metadata/Metadata"; import { MetadataTemplate } from "../../../schemas/metadata/MetadataTemplate"; import { MetadataCollection } from "../../MetadataCollection"; import { MetadataFactory } from "../../MetadataFactory"; import { MetadataHelper } from "./MetadataHelper"; import { explore_metadata } from "./explore_metadata"; export const iterate_metadata_template = (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => ( meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore, ): boolean => { const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0; if (!filter(ts.TypeFlags.TemplateLiteral)) return false; const template: ts.TemplateLiteralType = type as ts.TemplateLiteralType; const row: Metadata[] = []; template.texts.forEach((text, i) => { // TEXT LITERAL TYPE if (text !== "") row.push(MetadataHelper.literal_to_metadata(text)); // BINDED TEMPLATE TYPE const binded: ts.Type | undefined = template.types[i]; if (binded) row.push( explore_metadata(checker)(options)(collection)(errors)(binded, { ...explore, escaped: false, aliased: false, }), ); }); meta.templates.push(MetadataTemplate.create({ row, tags: undefined })); return true; };