Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
31 lines
857 B
Plaintext
31 lines
857 B
Plaintext
import type {MacroKeywordDefinition} from "ajv"
|
|
import type {GetDefinition} from "./_types"
|
|
|
|
type RangeKwd = "range" | "exclusiveRange"
|
|
|
|
export default function getRangeDef(keyword: RangeKwd): GetDefinition<MacroKeywordDefinition> {
|
|
return () => ({
|
|
keyword,
|
|
type: "number",
|
|
schemaType: "array",
|
|
macro: function ([min, max]: [number, number]) {
|
|
validateRangeSchema(min, max)
|
|
return keyword === "range"
|
|
? {minimum: min, maximum: max}
|
|
: {exclusiveMinimum: min, exclusiveMaximum: max}
|
|
},
|
|
metaSchema: {
|
|
type: "array",
|
|
minItems: 2,
|
|
maxItems: 2,
|
|
items: {type: "number"},
|
|
},
|
|
})
|
|
|
|
function validateRangeSchema(min: number, max: number): void {
|
|
if (min > max || (keyword === "exclusiveRange" && min === max)) {
|
|
throw new Error("There are no numbers in range")
|
|
}
|
|
}
|
|
}
|