typia
Version:
Superfast runtime validators with only one line
42 lines (36 loc) • 1.17 kB
text/typescript
import ts from "typescript";
import { Metadata } from "../../../schemas/metadata/Metadata";
import { MetadataAlias } from "../../../schemas/metadata/MetadataAlias";
import { ArrayUtil } from "../../../utils/ArrayUtil";
import { MetadataCollection } from "../../MetadataCollection";
import { MetadataFactory } from "../../MetadataFactory";
import { explore_metadata } from "./explore_metadata";
export const emplace_metadata_alias =
(checker: ts.TypeChecker) =>
(options: MetadataFactory.IOptions) =>
(collection: MetadataCollection) =>
(errors: MetadataFactory.IError[]) =>
(
type: ts.Type,
nullable: boolean,
explore: MetadataFactory.IExplore,
): MetadataAlias => {
// CHECK EXISTENCE
const [alias, newbie, closure] = collection.emplaceAlias(
checker,
type,
type.aliasSymbol!,
);
ArrayUtil.add(alias.nullables, nullable);
if (newbie === false) return alias;
// CONSTRUCT VALUE TYPE
const value: Metadata = explore_metadata(checker)(options)(collection)(
errors,
)(type, {
...explore,
escaped: false,
aliased: true,
});
closure(value);
return alias;
};