From ad434b236d46ada11137f303d6d70c2e9bca6782 Mon Sep 17 00:00:00 2001 From: Simon Chan Date: Thu, 13 Dec 2018 17:57:52 +0800 Subject: [PATCH 1/3] docs: fix type definition for errors --- lib/ajv.d.ts | 68 ++++++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/lib/ajv.d.ts b/lib/ajv.d.ts index 763a09b..7ef76d3 100644 --- a/lib/ajv.d.ts +++ b/lib/ajv.d.ts @@ -1,12 +1,36 @@ declare var ajv: { (options?: ajv.Options): ajv.Ajv; - new (options?: ajv.Options): ajv.Ajv; - ValidationError: ValidationError; - MissingRefError: MissingRefError; + new(options?: ajv.Options): ajv.Ajv; + ValidationError: typeof AjvErrors.ValidationError; + MissingRefError: typeof AjvErrors.MissingRefError; $dataMetaSchema: object; } +declare namespace AjvErrors { + class ValidationError extends Error { + constructor(errors: Array); + + message: string; + errors: Array; + ajv: true; + validation: true; + } + + class MissingRefError extends Error { + constructor(baseId: string, ref: string, message?: string); + static message: (baseId: string, ref: string) => string; + + message: string; + missingRef: string; + missingSchema: string; + } +} + declare namespace ajv { + type ValidationError = AjvErrors.ValidationError; + + type MissingRefError = AjvErrors.MissingRefError; + interface Ajv { /** * Validate data using schema @@ -15,7 +39,7 @@ declare namespace ajv { * @param {Any} data to be validated * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). */ - validate(schemaKeyRef: object | string | boolean, data: any): boolean | PromiseLike; + validate(schemaKeyRef: object | string | boolean, data: T): boolean | PromiseLike; /** * Create validating function for passed schema. * @param {object|Boolean} schema schema object @@ -114,13 +138,13 @@ declare namespace ajv { } interface ValidateFunction { - ( - data: any, + ( + data: T, dataPath?: string, parentData?: object | Array, parentDataProperty?: string | number, rootData?: object | Array - ): boolean | PromiseLike; + ): boolean | PromiseLike; schema?: object | boolean; errors?: null | Array; refs?: object; @@ -268,11 +292,11 @@ declare namespace ajv { } type ErrorParameters = RefParams | LimitParams | AdditionalPropertiesParams | - DependenciesParams | FormatParams | ComparisonParams | - MultipleOfParams | PatternParams | RequiredParams | - TypeParams | UniqueItemsParams | CustomParams | - PatternRequiredParams | PropertyNamesParams | - IfParams | SwitchParams | NoParams | EnumParams; + DependenciesParams | FormatParams | ComparisonParams | + MultipleOfParams | PatternParams | RequiredParams | + TypeParams | UniqueItemsParams | CustomParams | + PatternRequiredParams | PropertyNamesParams | + IfParams | SwitchParams | NoParams | EnumParams; interface RefParams { ref: string; @@ -344,29 +368,11 @@ declare namespace ajv { caseIndex: number; } - interface NoParams {} + interface NoParams { } interface EnumParams { allowedValues: Array; } } -declare class ValidationError extends Error { - constructor(errors: Array); - - message: string; - errors: Array; - ajv: true; - validation: true; -} - -declare class MissingRefError extends Error { - constructor(baseId: string, ref: string, message?: string); - static message: (baseId: string, ref: string) => string; - - message: string; - missingRef: string; - missingSchema: string; -} - export = ajv; From d048cfc979dc24494e2d2d18b9d2645b02b4f3ea Mon Sep 17 00:00:00 2001 From: Simon Chan Date: Thu, 13 Dec 2018 17:55:00 +0800 Subject: [PATCH 2/3] test: add tests for typescript definition --- package.json | 2 +- spec/typescript/index.ts | 60 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 spec/typescript/index.ts diff --git a/package.json b/package.json index 0646971..6fbbd53 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "test-fast": "AJV_FAST_TEST=true npm run test-spec", "test-debug": "mocha spec/*.spec.js --debug-brk -R spec", "test-cov": "nyc npm run test-spec", - "test-ts": "tsc --target ES5 --noImplicitAny lib/ajv.d.ts", + "test-ts": "tsc --target ES5 --noImplicitAny --noEmit spec/typescript/index.ts", "bundle": "del-cli dist && node ./scripts/bundle.js . Ajv pure_getters", "bundle-beautify": "node ./scripts/bundle.js js-beautify", "build": "del-cli lib/dotjs/*.js '!lib/dotjs/index.js' && node scripts/compile-dots.js", diff --git a/spec/typescript/index.ts b/spec/typescript/index.ts new file mode 100644 index 0000000..0858180 --- /dev/null +++ b/spec/typescript/index.ts @@ -0,0 +1,60 @@ +import ajv = require("../.."); + +// #region new() +const options: ajv.Options = { + verbose: true, +}; + +let instance: ajv.Ajv; + +instance = ajv(); +instance = ajv(options); + +instance = new ajv(); +instance = new ajv(options); +// #endregion new() + +// #region validate() +let data = { + foo: 42, +} + +let result = instance.validate("", data); + +if (typeof result === "boolean") { + // sync + console.log(result); +} else { + // async + result.then(value => { + data = value; + }); +} +// #endregion validate() + +// #region compile() +const validator = instance.compile({}); +result = validator(data); + +if (typeof result === "boolean") { + // sync + console.log(result); +} else { + // async + result.then(value => { + data = value; + }); +} +// #endregion compile() + +// #region errors +const validationError: ajv.ValidationError = new ajv.ValidationError([]); +validationError instanceof ajv.ValidationError; +validationError.ajv === true; +validationError.validation === true; + +ajv.MissingRefError.message("", ""); +const missingRefError: ajv.MissingRefError = new ajv.MissingRefError("", "", ""); +missingRefError instanceof ajv.MissingRefError; +missingRefError.missingRef; +// #endregion From b65d61aa524d1928c634a250c6a363da58893a1d Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 3 Jan 2019 20:34:39 +0000 Subject: [PATCH 3/3] remove generic argument type --- lib/ajv.d.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ajv.d.ts b/lib/ajv.d.ts index 7ef76d3..6593d07 100644 --- a/lib/ajv.d.ts +++ b/lib/ajv.d.ts @@ -39,7 +39,7 @@ declare namespace ajv { * @param {Any} data to be validated * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). */ - validate(schemaKeyRef: object | string | boolean, data: T): boolean | PromiseLike; + validate(schemaKeyRef: object | string | boolean, data: any): boolean | PromiseLike; /** * Create validating function for passed schema. * @param {object|Boolean} schema schema object @@ -138,13 +138,13 @@ declare namespace ajv { } interface ValidateFunction { - ( - data: T, + ( + data: any, dataPath?: string, parentData?: object | Array, parentDataProperty?: string | number, rootData?: object | Array - ): boolean | PromiseLike; + ): boolean | PromiseLike; schema?: object | boolean; errors?: null | Array; refs?: object;