Skip to content

Commit 88dfcf5

Browse files
authored
Merge pull request #146 from ajv-validator/keyword-types
define keyword error types
2 parents 8673bdd + f43df79 commit 88dfcf5

File tree

6 files changed

+35
-11
lines changed

6 files changed

+35
-11
lines changed

package.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,17 @@
3535
},
3636
"homepage": "https://github.com/epoberezkin/ajv-keywords#readme",
3737
"peerDependencies": {
38-
"ajv": "^7.0.0-beta.8"
38+
"ajv": "^7.0.0-rc.1"
3939
},
4040
"devDependencies": {
4141
"@ajv-validator/config": "^0.2.3",
42+
"@types/chai": "^4.2.14",
4243
"@types/jest": "^26.0.14",
4344
"@types/node": "^14.11.10",
4445
"@types/uuid": "^8.3.0",
4546
"@typescript-eslint/eslint-plugin": "^4.4.1",
4647
"@typescript-eslint/parser": "^4.4.1",
47-
"ajv": "^7.0.0-beta.8",
48+
"ajv": "^7.0.0-rc.1",
4849
"ajv-formats": "^0.3.4",
4950
"chai": "^4.2.0",
5051
"dot": "^1.1.1",
@@ -69,8 +70,5 @@
6970
},
7071
"lint-staged": {
7172
"*.{md,json,yaml,js,ts}": "prettier --write"
72-
},
73-
"dependencies": {
74-
"@types/chai": "^4.2.14"
7573
}
7674
}

src/definitions/index.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type {Vocabulary, KeywordDefinition} from "ajv"
1+
import type {Vocabulary, KeywordDefinition, ErrorNoParams} from "ajv"
22
import type {DefinitionOptions, GetDefinition} from "./_types"
33
import typeofDef from "./typeof"
44
import instanceofDef from "./instanceof"
@@ -10,12 +10,12 @@ import uniqueItemProperties from "./uniqueItemProperties"
1010
import allRequired from "./allRequired"
1111
import anyRequired from "./anyRequired"
1212
import oneRequired from "./oneRequired"
13-
import patternRequired from "./patternRequired"
13+
import patternRequired, {PatternRequiredError} from "./patternRequired"
1414
import prohibited from "./prohibited"
1515
import deepProperties from "./deepProperties"
1616
import deepRequired from "./deepRequired"
1717
import dynamicDefaults from "./dynamicDefaults"
18-
import selectDef from "./select"
18+
import selectDef, {SelectError} from "./select"
1919

2020
const definitions: GetDefinition<KeywordDefinition>[] = [
2121
typeofDef,
@@ -38,4 +38,24 @@ const definitions: GetDefinition<KeywordDefinition>[] = [
3838
export default function ajvKeywords(opts?: DefinitionOptions): Vocabulary {
3939
return definitions.map((d) => d(opts)).concat(selectDef(opts))
4040
}
41+
42+
export type AjvKeywordsError =
43+
| PatternRequiredError
44+
| SelectError
45+
| ErrorNoParams<
46+
| "range"
47+
| "exclusiveRange"
48+
| "anyRequired"
49+
| "oneRequired"
50+
| "allRequired"
51+
| "deepProperties"
52+
| "deepRequired"
53+
| "dynamicDefaults"
54+
| "instanceof"
55+
| "prohibited"
56+
| "regexp"
57+
| "transform"
58+
| "uniqueItemProperties"
59+
>
60+
4161
module.exports = ajvKeywords

src/definitions/patternRequired.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import type {CodeKeywordDefinition, KeywordCxt, KeywordErrorDefinition} from "ajv"
1+
import type {CodeKeywordDefinition, KeywordCxt, KeywordErrorDefinition, ErrorObject} from "ajv"
22
import {_, str, and} from "ajv/dist/compile/codegen"
33
import {usePattern} from "./_util"
44

5+
export type PatternRequiredError = ErrorObject<"patternRequired", {missingPattern: string}>
6+
57
const error: KeywordErrorDefinition = {
68
message: ({params: {missingPattern}}) =>
79
str`should have property matching pattern '${missingPattern}'`,

src/definitions/select.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import type {KeywordDefinition, KeywordErrorDefinition, KeywordCxt} from "ajv"
1+
import type {KeywordDefinition, KeywordErrorDefinition, KeywordCxt, ErrorObject} from "ajv"
22
import {_, str, nil, Name} from "ajv"
33
import type {DefinitionOptions} from "./_types"
44
import {metaSchemaRef} from "./_util"
55

6+
export type SelectError = ErrorObject<"select", {failingCase?: string; failingDefault?: true}>
7+
68
const error: KeywordErrorDefinition = {
79
message: ({params: {schemaProp}}) =>
810
schemaProp

src/definitions/transform.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ function _getDef(): CodeKeywordDefinition {
5959
if (!(t in transform)) throw new Error(`transform: unknown transformation ${t}`)
6060
const func = gen.scopeValue("func", {
6161
ref: transform[t as TransformName],
62-
code: _`require("ajv-keywords/dist/definitions/transform").transform${getProperty(t)}`
62+
code: _`require("ajv-keywords/dist/definitions/transform").transform${getProperty(t)}`,
6363
})
6464
const arg = transformExpr(ts)
6565
return cfg && t === "toEnumCase" ? _`${func}(${arg}, ${cfg})` : _`${func}(${arg})`

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import Ajv from "ajv"
22
import {Plugin} from "ajv"
33
import plugins from "./keywords"
44

5+
export {AjvKeywordsError} from "./definitions"
6+
57
const ajvKeywords: Plugin<string | string[]> = (ajv: Ajv, keyword?: string | string[]): Ajv => {
68
if (Array.isArray(keyword)) {
79
for (const k of keyword) get(k)(ajv)

0 commit comments

Comments
 (0)