/*! * TSBuffer Validator v2.1.2 * ----------------------------------------- * MIT LICENSE * KingWorks (C) Copyright 2023 * https://github.com/k8w/tsbuffer-validator */ import { InterfaceReference } from 'tsbuffer-schema'; import { InterfaceTypeSchema } from 'tsbuffer-schema'; import { IntersectionTypeSchema } from 'tsbuffer-schema'; import { OmitTypeSchema } from 'tsbuffer-schema'; import { OverwriteTypeSchema } from 'tsbuffer-schema'; import { PartialTypeSchema } from 'tsbuffer-schema'; import { PickTypeSchema } from 'tsbuffer-schema'; import { TSBufferProto } from 'tsbuffer-schema'; import { TSBufferSchema } from 'tsbuffer-schema'; import { TypeReference } from 'tsbuffer-schema'; import { UnionTypeSchema } from 'tsbuffer-schema'; /** @public */ export declare interface FlatInterfaceTypeSchema { type: InterfaceTypeSchema['type']; properties: NonNullable; indexSignature?: InterfaceTypeSchema['indexSignature']; } export declare class ProtoHelper { readonly proto: TSBufferProto; constructor(proto: TSBufferProto); /** 将ReferenceTypeSchema层层转换为它最终实际引用的类型 */ parseReference(schema: TSBufferSchema): Exclude; isInterface(schema: TSBufferSchema, excludeReference?: boolean): schema is InterfaceTypeSchema | InterfaceReference; isMappedType(schema: TSBufferSchema): schema is Exclude; isTypeReference(schema: TSBufferSchema): schema is TypeReference; getUnionProperties(schema: UnionTypeSchema | IntersectionTypeSchema): string[]; /** * unionProperties: 在Union或Intersection类型中,出现在任意member中的字段 */ /** * 将unionProperties 扩展到 InterfaceTypeSchema中(optional的any类型) * 以此来跳过对它们的检查(用于Intersection/Union) */ applyUnionProperties(schema: FlatInterfaceTypeSchema, unionProperties: string[]): FlatInterfaceTypeSchema; /** * 将interface及其引用转换为展平的schema */ getFlatInterfaceSchema(schema: InterfaceTypeSchema | InterfaceReference): FlatInterfaceTypeSchema; /** * 展平interface */ /** 将MappedTypeSchema转换为展平的Interface */ parseMappedType(schema: PickTypeSchema | OmitTypeSchema | PartialTypeSchema | OverwriteTypeSchema): InterfaceTypeSchema | UnionTypeSchema | IntersectionTypeSchema; } /** @public */ export declare type PruneOutput = { isSucc: true; pruneOutput: T; errMsg?: undefined; } | { isSucc: false; errMsg: string; pruneOutput?: undefined; }; /** * TSBuffer Schema Validator * @public */ export declare class TSBufferValidator { /** * Default options */ options: TSBufferValidatorOptions; proto: Proto; readonly protoHelper: ProtoHelper; constructor(proto: Proto, options?: Partial); /** * Validate whether the value is valid to the schema * @param value - Value to be validated. * @param schemaId - Schema or schema ID. * For example, the schema ID for type `Test` in `a/b.ts` may be `a/b/Test`. */ validate(value: any, schemaOrId: keyof Proto | TSBufferSchema, options?: Partial): ValidateOutput; /** * 修剪 Object,移除 Schema 中未定义的 Key * 需要确保 value 类型合法 * @param value - value to be validated * @param schemaOrId -Schema or schema ID. * @returns Validate result and pruned value. if validate failed, `pruneOutput` would be undefined. */ prune(value: T, schemaOrId: string | TSBufferSchema, options?: Partial): PruneOutput; } /** @public */ export declare interface TSBufferValidatorOptions { /** * 检查interface中是否包含Schema之外的字段 * * 例1: * ``` * type AB = { a: string, b: string }; * let ab: AB = { a: 'x', b: 'x', c: 'x' } * ``` * 字段 `c` 为 excess property,当 `excessPropertyChecks` 启用时将会报错。 * * 例2: * ``` * type AB = { a: string} | { b: string }; * let ab: AB = { a: 'x', b: 'x', c: 'x' } * ``` * 字段 `c` 为 excess property,当 `excessPropertyChecks` 启用时将会报错。 * * 默认:`true` */ excessPropertyChecks: boolean; /** * 同 `tsconfig.json` 中的 `strictNullChecks` * 是否使用严格等于去判定 `undefined` 和 `null` * @defaultValue false */ strictNullChecks: boolean; /** * Clone the proto, don't change this if you don't know what it is. * @defaultValue true */ cloneProto?: boolean; } /** * 单次validate的选项,会向下透传 * @public */ export declare interface ValidateOptions extends TSBufferValidatorOptions { /** * Common properties from Union/Intersection type * ( In case of they are treated as excess property and lead to validation error ) */ unionProperties?: string[]; } /** @public */ export declare type ValidateOutput = { isSucc: true; errMsg?: undefined; } | { isSucc: false; errMsg: string; }; export { }