Skip to content

Commit 5e04e67

Browse files
committed
fix: standalone validation code, tests (fixes #88)
1 parent 47a40b5 commit 5e04e67

File tree

4 files changed

+44
-20
lines changed

4 files changed

+44
-20
lines changed

package.json

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
"scripts": {
1212
"build": "rm -rf dist && tsc",
1313
"eslint": "eslint \"src/**/*.*s\" \"spec/**/*.*s\"",
14-
"prettier:write": "prettier --write \"./**/*.{md,json,ts,js}\"",
15-
"prettier:check": "prettier --list-different \"./**/*.{md,json,ts,js}\"",
14+
"prettier:write": "prettier --write \"./**/*.{json,ts,js}\"",
15+
"prettier:check": "prettier --list-different \"./**/*.{json,ts,js}\"",
1616
"test-spec": "jest \"spec/*.ts\"",
1717
"test-cov": "jest \"spec/*.ts\" --coverage",
1818
"test": "npm run prettier:check && npm run eslint && npm run build && npm run test-cov",
@@ -50,7 +50,6 @@
5050
"husky": "^4.3.0",
5151
"jest": "^26.6.3",
5252
"lint-staged": "^10.5.1",
53-
"pre-commit": "^1.2.2",
5453
"prettier": "^2.1.2",
5554
"ts-jest": "^26.4.4",
5655
"typescript": "^4.0.5"
@@ -62,6 +61,6 @@
6261
}
6362
},
6463
"lint-staged": {
65-
"*.{md,json,yaml,js,ts}": "prettier --write"
64+
"*.{json,yaml,js,ts}": "prettier --write"
6665
}
6766
}

spec/object.spec.ts

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import ajvErrors from ".."
22
import Ajv, {SchemaObject, ErrorObject, ValidateFunction} from "ajv"
3+
import AjvPack from "ajv/dist/standalone/instance"
34
import assert = require("assert")
45

6+
function _ajv(verbose?: boolean): Ajv {
7+
return ajvErrors(new Ajv({allErrors: true, verbose, code: {source: true}}))
8+
}
9+
510
describe("errorMessage value is an object", () => {
6-
let ajvs: Ajv[]
11+
let ajvs: (Ajv | AjvPack)[]
712

813
beforeEach(() => {
9-
ajvs = [
10-
ajvErrors(new Ajv({allErrors: true})),
11-
ajvErrors(new Ajv({allErrors: true, verbose: true})),
12-
]
14+
ajvs = [_ajv(), _ajv(true), new AjvPack(_ajv()), new AjvPack(_ajv(true))]
1315
})
1416

1517
describe("keywords", () => {
@@ -50,7 +52,10 @@ describe("errorMessage value is an object", () => {
5052
assert.strictEqual(err.dataPath, "")
5153
assert.strictEqual(err.schemaPath, "#/errorMessage")
5254
const replacedKeywords = err.params.errors.map((e: ErrorObject) => e.keyword)
53-
assert.deepStrictEqual(replacedKeywords.sort(), expectedErr.sort())
55+
assert.deepStrictEqual(
56+
Array.from(replacedKeywords.sort()),
57+
Array.from(expectedErr.sort())
58+
)
5459
} else {
5560
// original error
5661
assert.strictEqual(err.keyword, expectedErr)
@@ -134,7 +139,10 @@ describe("errorMessage value is an object", () => {
134139
assert.strictEqual(err.dataPath, "/foo")
135140
assert.strictEqual(err.schemaPath, "#/properties/foo/errorMessage")
136141
const replacedKeywords = err.params.errors.map((e: ErrorObject) => e.keyword)
137-
assert.deepStrictEqual(replacedKeywords.sort(), expectedErr.sort())
142+
assert.deepStrictEqual(
143+
Array.from(replacedKeywords.sort()),
144+
Array.from(expectedErr.sort())
145+
)
138146
} else {
139147
// original error
140148
assert.strictEqual(err.keyword, expectedErr)
@@ -281,7 +289,10 @@ describe("errorMessage value is an object", () => {
281289
assert.strictEqual(err.dataPath, "")
282290
assert.strictEqual(err.schemaPath, "#/errorMessage")
283291
const replacedKeywords = err.params.errors.map((e: ErrorObject) => e.keyword)
284-
assert.deepStrictEqual(replacedKeywords, Object.keys(expectedErr))
292+
assert.deepStrictEqual(
293+
Array.from(replacedKeywords),
294+
Array.from(Object.keys(expectedErr))
295+
)
285296
} else {
286297
// original error
287298
assert.strictEqual(err.keyword, expectedErr)
@@ -570,7 +581,10 @@ describe("errorMessage value is an object", () => {
570581
assert((Array.isArray(data) ? /^\/(0|1)$/ : /^\/(foo|bar)$/).test(err.dataPath))
571582
assert.strictEqual(err.schemaPath, "#/errorMessage")
572583
const replacedKeywords = err.params.errors.map((e: ErrorObject) => e.keyword)
573-
assert.deepStrictEqual(replacedKeywords.sort(), expectedErr.sort())
584+
assert.deepStrictEqual(
585+
Array.from(replacedKeywords.sort()),
586+
Array.from(expectedErr.sort())
587+
)
574588
} else {
575589
// original error
576590
assert.strictEqual(err.keyword, expectedErr)
@@ -620,7 +634,10 @@ describe("errorMessage value is an object", () => {
620634
: schema.errorMessage[expectedErr[0] === "required" ? "required" : "_"]
621635
assert.strictEqual(err.message, expectedMessage)
622636
const replacedKeywords = err.params.errors.map((e: ErrorObject) => e.keyword)
623-
assert.deepStrictEqual(replacedKeywords.sort(), expectedErr.sort())
637+
assert.deepStrictEqual(
638+
Array.from(replacedKeywords.sort()),
639+
Array.from(expectedErr.sort())
640+
)
624641
} else {
625642
// original error
626643
assert.strictEqual(err.keyword, expectedErr)

spec/string.spec.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import ajvErrors from ".."
22
import Ajv, {ErrorObject} from "ajv"
3+
import AjvPack from "ajv/dist/standalone/instance"
34
import assert = require("assert")
45

6+
function _ajv(verbose?: boolean): Ajv {
7+
return ajvErrors(new Ajv({allErrors: true, verbose, code: {source: true}}))
8+
}
9+
510
describe("errorMessage value is a string", () => {
611
it("should replace all errors with custom error message", () => {
7-
const ajvs = [
8-
ajvErrors(new Ajv({allErrors: true})),
9-
ajvErrors(new Ajv({allErrors: true, verbose: true})),
10-
]
12+
const ajvs = [_ajv(), _ajv(true), new AjvPack(_ajv()), new AjvPack(_ajv(true))]
1113

1214
const schema = {
1315
type: "object",
@@ -40,7 +42,10 @@ describe("errorMessage value is a string", () => {
4042
const replacedKeywords = err.params.errors.map((e: ErrorObject) => {
4143
return e.keyword
4244
})
43-
assert.deepStrictEqual(replacedKeywords.sort(), expectedReplacedKeywords.sort())
45+
assert.deepStrictEqual(
46+
Array.from(replacedKeywords.sort()),
47+
Array.from(expectedReplacedKeywords.sort())
48+
)
4449
}
4550
})
4651
})

src/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,10 @@ function errorMessage(options: ErrorMessageOptions): CodeKeywordDefinition {
292292
_`${err}.dataPath.indexOf(${dataPath}) === 0`
293293
),
294294
() => {
295-
const childRegex = gen.scopeValue("pattern", {ref: /^\/([^/]*)(?:\/|$)/})
295+
const childRegex = gen.scopeValue("pattern", {
296+
ref: /^\/([^/]*)(?:\/|$)/,
297+
code: _`new RegExp("^\\\/([^/]*)(?:\\\/|$)")`,
298+
})
296299
const matches = gen.const(
297300
"emMatches",
298301
_`${childRegex}.exec(${err}.dataPath.slice(${dataPath}.length))`

0 commit comments

Comments
 (0)