export interface LineColumn { line: number; column: number; offset: number; } export interface LocationWithLineColumn { start?: LineColumn; end?: LineColumn; } export interface LocationOffset { start?: number; end?: number; } export type Location = LocationWithLineColumn | LocationOffset; export interface CoreTypeAnnotations { name?: string; title?: string; description?: string; examples?: string | Array; default?: string; see?: string | Array; comment?: string; loc?: LocationOffset | LocationWithLineColumn; } export interface AndType extends CoreTypeAnnotations { type: 'and'; and: NodeType[]; } export interface OrType extends CoreTypeAnnotations { type: 'or'; or: NodeType[]; } export interface TypeMap { and: void; or: void; ref: string; any: unknown; null: null; string: string; number: number; integer: number; boolean: boolean; object: object; array: Array; tuple: Array; } export type Types = keyof TypeMap; export interface Const { const?: T; } export interface Enum { enum?: Array; } export type GenericTypeInfo = Const & Enum; export interface NodePrimitiveCoreType { type: Type; } export type NodePrimitiveType = NodePrimitiveCoreType & GenericTypeInfo; export type AnyType = NodePrimitiveType<'any'> & CoreTypeAnnotations; export type NullType = NodePrimitiveCoreType<'null'> & CoreTypeAnnotations; export type StringType = NodePrimitiveType<'string'> & CoreTypeAnnotations; export type NumberType = NodePrimitiveType<'number'> & CoreTypeAnnotations; export type IntegerType = NodePrimitiveType<'integer'> & CoreTypeAnnotations; export type BooleanType = NodePrimitiveType<'boolean'> & CoreTypeAnnotations; export type PrimitiveType = NullType | StringType | NumberType | IntegerType | BooleanType; export interface NodeRefCoreType { type: 'ref'; ref: string; } export type RefType = NodeRefCoreType & GenericTypeInfo & CoreTypeAnnotations; export interface ObjectProperty { required: boolean; node: NodeType; } export interface NodeObjectCoreType { type: 'object'; properties: { [name: string]: ObjectProperty; }; additionalProperties: boolean | NodeType; } export type ObjectType = NodeObjectCoreType & GenericTypeInfo & CoreTypeAnnotations; export interface NodeArrayCoreType { type: 'array'; elementType: NodeType; } export type ArrayType = NodeArrayCoreType & GenericTypeInfo> & CoreTypeAnnotations; export interface NodeTupleCoreType { type: 'tuple'; elementTypes: Array; minItems: number; additionalItems: boolean | NodeType; } export type TupleType = NodeTupleCoreType & GenericTypeInfo & CoreTypeAnnotations; export interface NodeTypeMap { and: AndType; or: OrType; ref: RefType; any: AnyType; null: NullType; string: StringType; number: NumberType; integer: IntegerType; boolean: BooleanType; object: ObjectType; array: ArrayType; tuple: TupleType; } export type NodeType = NodeTypeMap[keyof NodeTypeMap]; export type NamedType = T & { name: string; }; export type NodeWithConstEnum = AnyType | StringType | NumberType | IntegerType | BooleanType | ObjectType | ArrayType | TupleType | RefType; export type NodePath = Array; export interface NodeDocument { version: Version; types: Array>; } export interface ConversionResult { data: T; convertedTypes: Array; notConvertedTypes: Array; }