json-schema-to-decoders
Version:
A utility for converting JSON schema definition to decoders
101 lines (100 loc) • 3.39 kB
TypeScript
interface BaseSchema {
example?: string;
examples?: string[];
description?: string;
title?: string;
allOf?: Partial<Schema>[];
anyOf?: Partial<Schema>[];
oneOf?: Partial<Schema>[];
}
export interface EnumSchema extends BaseSchema {
enum: Array<string | number | null>;
}
export interface ConstSchema extends BaseSchema {
const: string | number | null;
}
interface ImplicitObjectSchemaDef extends BaseSchema {
additionalProperties?: boolean | Schema;
maxProperties?: number;
minProperties?: number;
patternProperties?: Record<string, Schema>;
properties?: Record<string, Schema>;
propertyNames?: {
pattern: string;
};
required?: Array<string>;
}
interface ObjectSchemaDef extends ImplicitObjectSchemaDef {
type: "object";
}
export declare type ObjectSchema = ImplicitObjectSchemaDef | ObjectSchemaDef;
export declare type ObjectLike = ObjectSchema | "object";
export interface IntegerSchemaDef extends BaseSchema {
type: "integer";
multipleOf?: number;
minimum?: number;
maximum?: number;
exclusiveMinimum?: number;
exclusiveMaximum?: number;
}
export interface NumberSchemaDef extends BaseSchema {
type: "number";
multipleOf?: number;
minimum?: number;
maximum?: number;
exclusiveMinimum?: number;
exclusiveMaximum?: number;
}
export declare type NumericSchema = IntegerSchemaDef | NumberSchemaDef;
export declare type NumericLike = NumericSchema | "integer" | "number";
interface ArraySchemaDef extends BaseSchema {
type: "array";
items?: Schema;
maxItems?: number;
minItems?: number;
prefixItems?: Schema[];
uniqueItems?: boolean;
}
export declare type ArraySchema = ArraySchemaDef;
export declare type ArrayLike = ArraySchema | "array";
export interface StringSchemaDef extends BaseSchema {
type: "string";
minLength?: number;
maxLength?: number;
pattern?: string;
format?: string;
}
export declare type StringSchema = StringSchemaDef;
export declare type StringLike = StringSchema | "string";
export interface BooleanSchemaDef extends BaseSchema {
type: "boolean";
}
export declare type BooleanSchema = BooleanSchemaDef;
export declare type BooleanLike = StringSchema | "boolean";
export interface NullSchemaDef extends BaseSchema {
type: "null";
}
export declare type NullSchema = NullSchemaDef;
export declare type NullLike = NullSchema | "null";
export interface AnySchemaDef extends BaseSchema {
type: "any";
}
export declare type AnySchema = AnySchemaDef;
export declare type AnyLike = AnySchema | "any";
export declare type AllOfLikeSchema = Omit<SchemaDef, "allOf"> & {
allOf: Partial<Schema>[];
};
export declare type OneOfLikeSchema = Omit<SchemaDef, "oneOf"> & {
oneOf: Partial<Schema>[];
};
export declare type AnyOfShorthandDef = Schema[];
export declare type AnyOfLikeSchema = AnyOfShorthandDef | (Omit<SchemaDef, "anyOf"> & {
anyOf: Partial<Schema>[];
});
export declare type RefSchema = {
$ref: string;
};
export declare type SchemaStr = "object" | "array" | "integer" | "number" | "string" | "boolean" | "null" | "any";
export declare type SchemaDef = ObjectSchema | ArraySchema | StringSchema | NumericSchema | AnySchema | BooleanSchema | NullSchema | EnumSchema | ConstSchema;
export declare type Schema = SchemaDef | AnyOfShorthandDef | SchemaStr | RefSchema;
export {};