tynder
Version:
TypeScript friendly Data validator for JavaScript.
162 lines (161 loc) • 5.17 kB
TypeScript
export declare type PrimitiveValueTypes = number | bigint | string | boolean | null | undefined;
export declare type PrimitiveValueTypeNames = 'number' | 'integer' | 'bigint' | 'string' | 'boolean' | 'null' | 'undefined';
export declare type OptionalPrimitiveValueTypeNames = 'number?' | 'integer?' | 'bigint?' | 'string?' | 'boolean?' | 'null?' | 'undefined?';
export declare type PlaceholderTypeNames = 'never' | 'any' | 'unknown';
export declare type OptionalPlaceholderTypeNames = 'never?' | 'any?' | 'unknown?';
export declare enum ErrorTypes {
InvalidDefinition = 1,
Required = 2,
TypeUnmatched = 3,
AdditionalPropUnmatched = 4,
RepeatQtyUnmatched = 5,
SequenceUnmatched = 6,
ValueRangeUnmatched = 7,
ValuePatternUnmatched = 8,
ValueLengthUnmatched = 9,
ValueUnmatched = 10
}
export declare type ErrorMessages = Partial<{
invalidDefinition: string;
required: string;
typeUnmatched: string;
additionalPropUnmatched: string;
repeatQtyUnmatched: string;
sequenceUnmatched: string;
valueRangeUnmatched: string;
valuePatternUnmatched: string;
valueLengthUnmatched: string;
valueUnmatched: string;
}>;
export interface TypeAssertionBase {
messageId?: string;
message?: string;
messages?: ErrorMessages;
name?: string;
typeName?: string;
originalTypeName?: string;
stereotype?: string;
customConstraints?: string[];
customConstraintsArgs?: {
[constraintName: string]: any;
};
forceCast?: boolean;
isRecordTypeField?: boolean;
meta?: any;
docComment?: string;
passThruCodeBlock?: string;
noOutput?: boolean;
}
export interface NeverTypeAssertion extends TypeAssertionBase {
kind: 'never';
}
export interface AnyTypeAssertion extends TypeAssertionBase {
kind: 'any';
}
export interface UnknownTypeAssertion extends TypeAssertionBase {
kind: 'unknown';
}
export interface PrimitiveTypeAssertionConstraints {
minValue?: number | string | null;
maxValue?: number | string | null;
greaterThanValue?: number | string | null;
lessThanValue?: number | string | null;
minLength?: number | null;
maxLength?: number | null;
pattern?: RegExp | null;
}
export interface PrimitiveTypeAssertion extends TypeAssertionBase, PrimitiveTypeAssertionConstraints {
kind: 'primitive';
primitiveName: PrimitiveValueTypeNames;
}
export interface PrimitiveValueTypeAssertion extends TypeAssertionBase {
kind: 'primitive-value';
value: PrimitiveValueTypes;
primitiveName?: 'bigint';
}
export interface RepeatedAssertionConstraints {
min: number | null;
max: number | null;
}
export interface RepeatedAssertion extends TypeAssertionBase, RepeatedAssertionConstraints {
kind: 'repeated';
repeated: TypeAssertion;
}
export interface SpreadAssertion extends TypeAssertionBase, RepeatedAssertionConstraints {
kind: 'spread';
spread: TypeAssertion;
}
export interface SequenceAssertion extends TypeAssertionBase {
kind: 'sequence';
sequence: TypeAssertion[];
}
export interface OneOfAssertion extends TypeAssertionBase {
kind: 'one-of';
oneOf: TypeAssertion[];
}
export interface OptionalAssertion extends TypeAssertionBase {
kind: 'optional';
optional: TypeAssertion;
}
export interface EnumAssertion extends TypeAssertionBase {
kind: 'enum';
values: Array<[
string,
// enum key
number | string,
string?
]>;
isConst?: boolean;
}
export declare type ObjectAssertionMember = [
string,
TypeAssertion
] | [
string,
TypeAssertion,
boolean
] | [
string,
TypeAssertion,
boolean,
string
];
export declare type AdditionalPropsKey = Array<'string' | 'number' | RegExp>;
export declare type AdditionalPropsMember = [
AdditionalPropsKey,
TypeAssertion
] | [
AdditionalPropsKey,
TypeAssertion,
boolean
] | [
AdditionalPropsKey,
TypeAssertion,
boolean,
string
];
export interface ObjectAssertion extends TypeAssertionBase {
kind: 'object';
members: ObjectAssertionMember[];
additionalProps?: AdditionalPropsMember[];
baseTypes?: Array<ObjectAssertion | AssertionSymlink>;
}
export interface AssertionSymlink extends TypeAssertionBase {
kind: 'symlink';
symlinkTargetName: string;
memberTree?: string[];
}
export interface AssertionOperator extends TypeAssertionBase {
kind: 'operator';
operator: string;
operands: Array<TypeAssertion | string>;
}
export declare type TypeAssertion = NeverTypeAssertion | AnyTypeAssertion | UnknownTypeAssertion | PrimitiveTypeAssertion | PrimitiveValueTypeAssertion | RepeatedAssertion | SpreadAssertion | SequenceAssertion | OneOfAssertion | OptionalAssertion | EnumAssertion | ObjectAssertion | AssertionSymlink | AssertionOperator;
export interface SerializedSchemaInfo {
version: string;
ns: {
[namespaceName: string]: {
[typeName: string]: TypeAssertion;
};
};
}