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).

58 lines 2.58 kB
import includes from 'lodash/includes.js'; import { getBuiltInExtractionPlugins, getBuiltInSimplificationPlugins, } from '../built-in-plugins/index.js'; import { pluginIsExtractionPlugin, pluginIsSimplificationPlugin, pluginIsValidationPlugin, } from '../plugin/index.js'; import { createValidate } from '../validate/index.js'; export function getOptionsPlugins(options) { return (options?.plugins ?? []).flat(); } export function getOptionsSimplificationPlugins(options) { return getOptionsPlugins(options).filter(pluginIsSimplificationPlugin); } export function toInternalOptions(options) { return { validate: createValidate((options?.plugins ?? []).flat().filter(pluginIsValidationPlugin), options?.definitions ?? []), plugins: { extractions: getBuiltInAndOptionsExtractionPlugins(options), simplifications: getBuiltInAndOptionsSimplificationPlugins(options), }, }; } export function getBuiltInAndOptionsExtractionPlugins(options) { const extractionPluginOverrides = {}; const extractionPlugins = getOptionsPlugins(options) .filter(pluginIsExtractionPlugin) .filter((plugin) => { if (plugin.overrides === undefined) { return true; } extractionPluginOverrides[plugin.overrides] = plugin; return false; }); return [ ...getBuiltInExtractionPlugins(extractionPluginOverrides), ...extractionPlugins, ]; } export function getBuiltInAndOptionsSimplificationPlugins(options) { const simplificationPluginOverrides = {}; const simplificationPlugins = getOptionsSimplificationPlugins(options).filter((plugin) => { if (plugin.overrides === undefined) { return true; } simplificationPluginOverrides[plugin.overrides] = plugin; return false; }); const builtInSimplificationPlugins = getBuiltInSimplificationPlugins(simplificationPluginOverrides); return [ ...builtInSimplificationPlugins, ...simplificationPlugins, ]; } export function getSimplificationPluginsForTypeFromInternalOptions(options, type) { const simplificationPlugins = options.plugins.simplifications; return simplificationPlugins.filter((simplificationPlugin) => simplificationPlugin.appliesToJSONSchemaType === undefined || simplificationPlugin.appliesToJSONSchemaType === type || (Array.isArray(simplificationPlugin.appliesToJSONSchemaType) && includes(simplificationPlugin.appliesToJSONSchemaType, type))); } //# sourceMappingURL=options.js.map