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
JavaScript
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