json-schema-library
Version:
Customizable and hackable json-validator and json-schema utilities for traversal, data generation and validation
62 lines (53 loc) • 2.08 kB
text/typescript
import type { SchemaNode, JsonError } from "./types";
export type ValidationPath = {
pointer: string;
node: SchemaNode;
}[];
export type JsonSchemaReducerParams = {
/** data of current node */
data: unknown;
/** optional key to used to resolve by property without having data */
key?: string | number;
/** node to reduce */
node: SchemaNode;
/** JSON pointer to data */
pointer: string;
/** passed through path for schema resolution, will be changed by reference */
path: ValidationPath;
};
export interface JsonSchemaReducer {
toJSON?: () => string;
order?: number;
(options: JsonSchemaReducerParams): SchemaNode | JsonError | undefined;
}
export type JsonSchemaResolverParams = { key: string | number; data: unknown; node: SchemaNode };
export interface JsonSchemaResolver {
toJSON?: () => string;
order?: number;
(options: JsonSchemaResolverParams): SchemaNode | JsonError | undefined;
}
export type ValidationResult = JsonError | Promise<JsonError>;
export type JsonSchemaValidatorParams = { pointer?: string; data: unknown; node: SchemaNode; path?: ValidationPath };
export interface JsonSchemaValidator {
toJSON?: () => string;
order?: number;
(options: JsonSchemaValidatorParams): undefined | ValidationResult | ValidationResult[];
}
export type Keyword = {
id: string;
/** unique keyword corresponding to JSON Schema keywords (or custom) */
keyword: string;
/** sort order of keyword. Lower numbers will be processed last. Default is 0 */
order?: number;
/** called with compileSchema */
parse?: (node: SchemaNode) => void;
addResolve?: (node: SchemaNode) => boolean;
/** return node corresponding to passed in key or do nothing */
resolve?: JsonSchemaResolver;
addValidate?: (node: SchemaNode) => boolean;
/** validate data using node */
validate?: JsonSchemaValidator;
addReduce?: (node: SchemaNode) => boolean;
/** remove dynamic schema-keywords by merging valid sub-schemas */
reduce?: JsonSchemaReducer;
};