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).
41 lines • 1.33 kB
JavaScript
import { AnyOfSchema, AtomicSchemaObject, NotSchema, } from '../atomic-schema/index.js';
export class ConstAtomicSchema extends AtomicSchemaObject {
const;
constructor(constValue) {
super();
this.const = constValue;
}
negate() {
return new NotSchema(this);
}
toJSONSchema() {
return { const: this.const };
}
}
export const constExtraction = {
extract: ({ schema: { const: constValue, enum: enumValues } }) => {
if (constValue !== undefined) {
if (!enumValues ||
(Array.isArray(enumValues) && enumValues.includes(constValue))) {
return new ConstAtomicSchema(constValue);
}
return false;
}
if (Array.isArray(enumValues)) {
return new AnyOfSchema(enumValues.map((value) => new ConstAtomicSchema(value)));
}
return true;
},
};
export const constSimplification = {
appliesToJSONSchemaType: undefined,
mergeableKeywords: [],
simplify({ atomicSchemasByConstructor, validateConst, }) {
const [constSchema] = atomicSchemasByConstructor.get(ConstAtomicSchema);
if (constSchema !== undefined) {
return validateConst(constSchema.const);
}
return true;
},
};
//# sourceMappingURL=const.js.map