UNPKG

json-schema-describes-subset

Version:

Tools for static JSON schema analysis, including functions to determine if one schema describes a subset of another or if a schema describes the empty set or to convert a schema to its disjunctive normal form (DNF).

68 lines (67 loc) 4.41 kB
import type { JSONSchema } from '../json-schema/index.js'; import { type BuiltInSimplificationPlugin, type BuiltInSimplificationPluginOverrides } from '../built-in-plugins/index.js'; import { type ExtractionPlugin, type SimplificationPlugin, type SimplificationPluginWithType, type ValidationPlugin, type Plugin } from '../plugin/index.js'; import { type ValidateFunction } from '../validate/index.js'; import type { JSONSchemaType } from '../json-schema-type/index.js'; export type Options = { /** * If a schema does not have an `$id` or the `$id` is a relative URI, a * `baseURI` can be provided in the `Options` object. For example, this could * be the schema's retrieval URI. * * Providing a non relative baseURI (either as part of the `Options` object or * `$id`) is important if the schema contains relative `$ref`s. * * In functions that accept more than one schema as arguments (like * {@link schemaDescribesSubset} or {@link schemasAreEquivalent}) `baseURI` * can be an array of strings which correspond to each schema. * */ baseURI?: string | (string | null | undefined)[] | undefined; /** * Referenced schema resources (`$ref`) are not retrieved via their url. If a * referenced resource is not part of the schema itself, it needs to be * provided here. * * TODO: make this also accept an object with retrieval urls as keys. This * would also support referenced to boolean schemas better. * */ definitions?: /* Awkward `Exclude` on purpose instead of simply using * JSONSchemaObject. This will generate a better documentation, * since JSONSchema is well documented */ Exclude<JSONSchema, boolean>[] | undefined; /** * Support non standard custom keywords by adding {@link Plugin | plugins}. * There is one predefined custom plugin: {@link formatPlugin}. * */ plugins?: Plugin[] | undefined; }; export type OptionsPlugin<Options_ extends Options | undefined> = OptionsSimplificationPlugin<Options_> | ExtractionPlugin | ValidationPlugin; export declare function getOptionsPlugins<const Options_ extends Options | undefined>(options: Options_): OptionsPlugin<Options_>[]; export type ExtractSimplificationPlugin<Plugins> = Plugins extends Plugin[] | undefined ? Extract<FlatArray<Exclude<Plugins, undefined>, 1>, SimplificationPlugin> : SimplificationPlugin; export type OptionsSimplificationPlugin<Options_> = Options_ extends undefined ? never : Options_ extends { plugins?: Plugin[] | undefined; } | undefined ? ExtractSimplificationPlugin<Exclude<Options_, undefined>['plugins']> : SimplificationPlugin; export declare function getOptionsSimplificationPlugins<const Options_ extends Options | undefined>(options: Options_): OptionsSimplificationPlugin<Options_>[]; export type OptionsSimplificationPluginOverrides<Options_ extends Options> = Options_ extends { builtInPluginOverrides: { simplifications: infer SimplificationPluginOverrides extends BuiltInSimplificationPluginOverrides; }; } ? SimplificationPluginOverrides : object; /** * An internally used, differently structured version of {@link Options}. * */ export interface InternalOptions<SimplificationPlugin_ extends SimplificationPlugin = SimplificationPlugin> { validate: ValidateFunction; plugins: { extractions: ExtractionPlugin[]; simplifications: (BuiltInSimplificationPlugin | SimplificationPlugin_)[]; }; } export declare function toInternalOptions<Options_ extends Options | undefined>(options: Options_): InternalOptions<OptionsSimplificationPlugin<Options_>>; export declare function getBuiltInAndOptionsExtractionPlugins(options: Options | undefined): ExtractionPlugin[]; export type BuiltInOrOptionsSimplificationPlugin<Options_ extends Options | undefined> = BuiltInSimplificationPlugin | OptionsSimplificationPlugin<Options_>; export declare function getBuiltInAndOptionsSimplificationPlugins<Options_ extends Options | undefined>(options: Options_): BuiltInOrOptionsSimplificationPlugin<Options_>[]; export declare function getSimplificationPluginsForTypeFromInternalOptions<Type extends JSONSchemaType, SimplificationPlugin_ extends SimplificationPlugin>(options: InternalOptions<SimplificationPlugin_>, type: Type): SimplificationPluginWithType<SimplificationPlugin_, Type>[];