Skip to content

Commit c11aab9

Browse files
authored
Merge pull request #48 from hyperjump-io/number-range-handler
Combine the number range error handlers
2 parents adfc924 + 6e31c4e commit c11aab9

File tree

9 files changed

+257
-186
lines changed

9 files changed

+257
-186
lines changed

src/error-handlers/exclusiveMaximum.js

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/error-handlers/exclusiveMinimum.js

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/error-handlers/maximum.js

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/error-handlers/minimum.js

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { getSchema } from "@hyperjump/json-schema/experimental";
2+
import * as Schema from "@hyperjump/browser";
3+
import * as Instance from "@hyperjump/json-schema/instance/experimental";
4+
5+
/**
6+
* @import { NumberConstraints } from "../localization.js"
7+
* @import { ErrorHandler } from "../index.d.ts"
8+
*/
9+
10+
/** @type ErrorHandler */
11+
const numberRangeHandler = async (normalizedErrors, instance, localization) => {
12+
/** @type NumberConstraints */
13+
const constraints = {};
14+
15+
/** @type string[] */
16+
const failedSchemaLocations = [];
17+
18+
for (const schemaLocation in normalizedErrors["https://json-schema.org/keyword/minimum"]) {
19+
if (!normalizedErrors["https://json-schema.org/keyword/minimum"][schemaLocation]) {
20+
failedSchemaLocations.push(schemaLocation);
21+
}
22+
23+
const keyword = await getSchema(schemaLocation);
24+
/** @type number */
25+
const minimum = Schema.value(keyword);
26+
constraints.minimum = Math.max(constraints.minimum ?? Number.MIN_VALUE, minimum);
27+
}
28+
29+
for (const schemaLocation in normalizedErrors["https://json-schema.org/keyword/exclusiveMinimum"]) {
30+
if (!normalizedErrors["https://json-schema.org/keyword/exclusiveMinimum"][schemaLocation]) {
31+
failedSchemaLocations.push(schemaLocation);
32+
}
33+
34+
const keyword = await getSchema(schemaLocation);
35+
/** @type number */
36+
const minimum = Schema.value(keyword);
37+
constraints.minimum = Math.max(constraints.minimum ?? Number.MIN_VALUE, minimum);
38+
if (constraints.minimum === minimum) {
39+
constraints.exclusiveMinimum = true;
40+
}
41+
}
42+
43+
for (const schemaLocation in normalizedErrors["https://json-schema.org/keyword/maximum"]) {
44+
if (!normalizedErrors["https://json-schema.org/keyword/maximum"][schemaLocation]) {
45+
failedSchemaLocations.push(schemaLocation);
46+
}
47+
48+
const keyword = await getSchema(schemaLocation);
49+
/** @type number */
50+
const maximum = Schema.value(keyword);
51+
constraints.maximum = Math.min(constraints.maximum ?? Number.MAX_VALUE, maximum);
52+
}
53+
54+
for (const schemaLocation in normalizedErrors["https://json-schema.org/keyword/exclusiveMaximum"]) {
55+
if (!normalizedErrors["https://json-schema.org/keyword/exclusiveMaximum"][schemaLocation]) {
56+
failedSchemaLocations.push(schemaLocation);
57+
}
58+
59+
const keyword = await getSchema(schemaLocation);
60+
/** @type number */
61+
const maximum = Schema.value(keyword);
62+
constraints.maximum = Math.min(constraints.maximum ?? Number.MAX_VALUE, maximum);
63+
if (constraints.maximum === maximum) {
64+
constraints.exclusiveMaximum = true;
65+
}
66+
}
67+
68+
if (failedSchemaLocations.length > 0) {
69+
return [
70+
{
71+
message: localization.getNumberErrorMessage(constraints),
72+
instanceLocation: Instance.uri(instance),
73+
schemaLocation: failedSchemaLocations.length > 1 ? failedSchemaLocations : failedSchemaLocations[0]
74+
}
75+
];
76+
}
77+
78+
return [];
79+
};
80+
81+
export default numberRangeHandler;

src/index.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,15 @@ import constErrorHandler from "./error-handlers/const.js";
5050
import containsErrorHandler from "./error-handlers/contains.js";
5151
import dependentRequiredErrorHandler from "./error-handlers/dependentRequired.js";
5252
import enumErrorHandler from "./error-handlers/enum.js";
53-
import exclusiveMaximumErrorHandler from "./error-handlers/exclusiveMaximum.js";
54-
import exclusiveMinimumErrorHandler from "./error-handlers/exclusiveMinimum.js";
5553
import formatErrorHandler from "./error-handlers/format.js";
56-
import maximumErrorHandler from "./error-handlers/maximum.js";
57-
import minimumErrorHandler from "./error-handlers/minimum.js";
5854
import maxItemsErrorHandler from "./error-handlers/maxItems.js";
5955
import minItemsErrorHandler from "./error-handlers/minItems.js";
6056
import maxPropertiesErrorHandler from "./error-handlers/maxProperties.js";
6157
import minPropertiesErrorHandler from "./error-handlers/minProperties.js";
6258
import minLengthErrorHandler from "./error-handlers/minLength.js";
6359
import multipleOfErrorHandler from "./error-handlers/multipleOf.js";
6460
import notErrorHandler from "./error-handlers/not.js";
61+
import numberRangeHandler from "./error-handlers/number-range-handler.js";
6562
import patternErrorHandler from "./error-handlers/pattern.js";
6663
import requiredErrorHandler from "./error-handlers/required.js";
6764
import typeErrorHandler from "./error-handlers/type.js";
@@ -125,11 +122,7 @@ addErrorHandler(constErrorHandler);
125122
addErrorHandler(containsErrorHandler);
126123
addErrorHandler(dependentRequiredErrorHandler);
127124
addErrorHandler(enumErrorHandler);
128-
addErrorHandler(exclusiveMaximumErrorHandler);
129-
addErrorHandler(exclusiveMinimumErrorHandler);
130125
addErrorHandler(formatErrorHandler);
131-
addErrorHandler(maximumErrorHandler);
132-
addErrorHandler(minimumErrorHandler);
133126
addErrorHandler(maxItemsErrorHandler);
134127
addErrorHandler(minItemsErrorHandler);
135128
addErrorHandler(maxPropertiesErrorHandler);
@@ -138,6 +131,7 @@ addErrorHandler(minLengthErrorHandler);
138131
addErrorHandler(maxLengthErrorHandler);
139132
addErrorHandler(multipleOfErrorHandler);
140133
addErrorHandler(notErrorHandler);
134+
addErrorHandler(numberRangeHandler);
141135
addErrorHandler(patternErrorHandler);
142136
addErrorHandler(requiredErrorHandler);
143137
addErrorHandler(typeErrorHandler);

0 commit comments

Comments
 (0)