Skip to content

Commit b181a63

Browse files
committed
introduce: keyword errorMessages for custom local error messages
1 parent 9de84a9 commit b181a63

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,6 +1214,22 @@ const myDraft = extendDraft(draft2020, {
12141214
});
12151215
```
12161216

1217+
### errors
1218+
1219+
You can set custom errors messages locally by using the errors-keyword:
1220+
1221+
```ts
1222+
const { errors } = compileSchema({
1223+
type: "array",
1224+
minItems: 2,
1225+
errorMessages: {
1226+
"min-items-error": "Custom error {{minItems}}"
1227+
}
1228+
}).validate([1]);
1229+
1230+
assert.deepEqual(errors[0].message, "Custom error 2");
1231+
```
1232+
12171233
## Breaking Changes
12181234

12191235
### v10.0.0

src/SchemaNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ export const SchemaNodeMethods = {
221221
createError<T extends string = DefaultErrors>(code: T, data: ErrorData, message?: string): JsonError {
222222
let errorMessage = message;
223223
if (errorMessage === undefined) {
224-
const error = this.context.errors[code];
224+
const error = this.schema?.errorMessages?.[code] ?? this.context.errors[code];
225225
if (typeof error === "function") {
226226
return error(data);
227227
}

src/compileSchema.validate.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,3 +1004,35 @@ describe("compileSchema.validate - errorsAsync", () => {
10041004
});
10051005
});
10061006
});
1007+
1008+
describe("compileSchema.validate - custom errors", () => {
1009+
it("should return custom error message for minItems", () => {
1010+
const { errors } = compileSchema({
1011+
type: "array",
1012+
minItems: 2,
1013+
errorMessages: {
1014+
"min-items-error": "Custom error {{minItems}}"
1015+
}
1016+
}).validate([1]);
1017+
assert.deepEqual(errors.length, 1);
1018+
assert.deepEqual(errors[0].message, "Custom error 2");
1019+
});
1020+
1021+
it("should return custom error for oneOf-error", () => {
1022+
const { errors } = compileSchema({
1023+
type: "array",
1024+
items: {
1025+
errorMessages: {
1026+
"one-of-error": "{{value}} does not match any of the options"
1027+
},
1028+
oneOf: [
1029+
{ type: "number" },
1030+
{ type: "object", properties: { a: { type: "string" } }, additionalProperties: false }
1031+
]
1032+
},
1033+
additionalItems: false
1034+
}).validate([100, { a: "correct", b: "not correct" }]);
1035+
assert.deepEqual(errors.length, 1);
1036+
assert.deepEqual(errors[0].message, '{"a":"correct","b":"not correct"} does not match any of the options');
1037+
});
1038+
});

0 commit comments

Comments
 (0)