@spinajs/validation 1.1.3 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,9 @@
1
- export {};
1
+ declare const config: {
2
+ validation: {
3
+ allErrors: boolean;
4
+ removeAdditional: boolean;
5
+ useDefaults: boolean;
6
+ coerceTypes: boolean;
7
+ };
8
+ };
9
+ export default config;
@@ -1,15 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const path_1 = require("path");
4
- function dir(path) {
5
- return (0, path_1.resolve)((0, path_1.normalize)((0, path_1.join)(__dirname, path)));
6
- }
7
- module.exports = {
8
- system: {
9
- dirs: {
10
- schemas: [dir('./../schemas')],
11
- }
12
- },
3
+ const config = {
13
4
  validation: {
14
5
  // enable all errors on validation, not only first one that occurred
15
6
  allErrors: true,
@@ -21,4 +12,5 @@ module.exports = {
21
12
  coerceTypes: true
22
13
  }
23
14
  };
15
+ exports.default = config;
24
16
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACrB,OAAO,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,OAAO,GAAG;IACb,MAAM,EAAE;QACJ,IAAI,EAAE;YACF,OAAO,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;SACjC;KACJ;IACD,UAAU,EAAE;QAER,qEAAqE;QACrE,SAAS,EAAE,IAAI;QAEf,mDAAmD;QACnD,gBAAgB,EAAE,IAAI;QAEtB,iCAAiC;QACjC,WAAW,EAAE,IAAI;QAEjB,wHAAwH;QACxH,WAAW,EAAE,IAAI;KACpB;CACJ,CAAA"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":";;AAAA,MAAM,MAAM,GAAG;IACX,UAAU,EAAE;QACR,qEAAqE;QACrE,SAAS,EAAE,IAAI;QAEf,mDAAmD;QACnD,gBAAgB,EAAE,IAAI;QAEtB,iCAAiC;QACjC,WAAW,EAAE,IAAI;QAEjB,wHAAwH;QACxH,WAAW,EAAE,IAAI;KACpB;CACJ,CAAA;AAED,kBAAe,MAAM,CAAC"}
package/lib/decorators.js CHANGED
@@ -10,7 +10,7 @@ exports.SCHEMA_SYMBOL = Symbol('SCHEMA_SYMBOL');
10
10
  */
11
11
  function Schema(schema) {
12
12
  return (target) => {
13
- Reflect.defineMetadata(exports.SCHEMA_SYMBOL, schema, target);
13
+ Reflect.defineMetadata(exports.SCHEMA_SYMBOL, schema, target.prototype || target);
14
14
  };
15
15
  }
16
16
  exports.Schema = Schema;
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAErD;;;;;GAKG;AACH,SAAgB,MAAM,CAAC,MAAuB;IAC1C,OAAO,CAAC,MAAW,EAAE,EAAE;QACnB,OAAO,CAAC,cAAc,CAAC,qBAAa,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC;AACN,CAAC;AAJD,wBAIC"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAErD;;;;;GAKG;AACH,SAAgB,MAAM,CAAC,MAAuB;IAC1C,OAAO,CAAC,MAAW,EAAE,EAAE;QACnB,OAAO,CAAC,cAAc,CAAC,qBAAa,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;IAC9E,CAAC,CAAC;AACN,CAAC;AAJD,wBAIC"}
@@ -5,7 +5,7 @@ import { ErrorObject } from "ajv";
5
5
  */
6
6
  export declare class ValidationFailed extends Exception {
7
7
  parameter: any;
8
- constructor(message: string, validationErrors: ValidationError[]);
8
+ constructor(message: string, validationErrors: IValidationError[]);
9
9
  }
10
- export interface ValidationError extends ErrorObject {
10
+ export interface IValidationError extends ErrorObject {
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":";;;AAAA,oDAAgD;AAEhD;;GAEG;AACF,MAAa,gBAAiB,SAAQ,sBAAS;IAG5C,YAAY,OAAe,EAAE,gBAAmC;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;IACpC,CAAC;CACF;AAPF,4CAOE"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":";;;AAAA,oDAAgD;AAEhD;;GAEG;AACF,MAAa,gBAAiB,SAAQ,sBAAS;IAG5C,YAAY,OAAe,EAAE,gBAAoC;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;IACpC,CAAC;CACF;AAPF,4CAOE"}
@@ -0,0 +1,12 @@
1
+ interface ISchema {
2
+ schema: any;
3
+ file?: string;
4
+ }
5
+ export declare abstract class SchemaSource {
6
+ abstract Load(): ISchema[];
7
+ }
8
+ export declare class FileSystemSource extends SchemaSource {
9
+ SchemaDirs: string[];
10
+ Load(): ISchema[];
11
+ }
12
+ export {};
package/lib/sources.js ADDED
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ };
20
+ var __importStar = (this && this.__importStar) || function (mod) {
21
+ if (mod && mod.__esModule) return mod;
22
+ var result = {};
23
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
24
+ __setModuleDefault(result, mod);
25
+ return result;
26
+ };
27
+ var __metadata = (this && this.__metadata) || function (k, v) {
28
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
29
+ };
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.FileSystemSource = exports.SchemaSource = void 0;
32
+ const lib_1 = require("@spinajs/configuration/lib");
33
+ const di_1 = require("@spinajs/di");
34
+ const log_1 = require("@spinajs/log/lib/log");
35
+ const fs = __importStar(require("fs"));
36
+ const glob = __importStar(require("glob"));
37
+ const path = __importStar(require("path"));
38
+ class SchemaSource {
39
+ }
40
+ exports.SchemaSource = SchemaSource;
41
+ let FileSystemSource = class FileSystemSource extends SchemaSource {
42
+ Load() {
43
+ return this.SchemaDirs.filter(dir => fs.existsSync(dir))
44
+ .flatMap((d) => glob.sync(path.join(d, "/**/*.+(json|js)")))
45
+ .map(f => {
46
+ log_1.Log.trace(`Found schema at: ${f}`, "validation");
47
+ return {
48
+ schema: require(f),
49
+ file: path.basename(f)
50
+ };
51
+ });
52
+ }
53
+ };
54
+ __decorate([
55
+ (0, lib_1.Config)("system.dirs.schemas"),
56
+ __metadata("design:type", Array)
57
+ ], FileSystemSource.prototype, "SchemaDirs", void 0);
58
+ FileSystemSource = __decorate([
59
+ (0, di_1.Injectable)(SchemaSource)
60
+ ], FileSystemSource);
61
+ exports.FileSystemSource = FileSystemSource;
62
+ //# sourceMappingURL=sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.js","sourceRoot":"","sources":["../src/sources.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAoD;AACpD,oCAAyC;AACzC,8CAA2C;AAC3C,uCAAyB;AACzB,2CAA6B;AAC7B,2CAA6B;AAO7B,MAAsB,YAAY;CAEjC;AAFD,oCAEC;AAGD,IAAa,gBAAgB,GAA7B,MAAa,gBAAiB,SAAQ,YAAY;IAKvC,IAAI;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACnD,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC;aACnE,GAAG,CAAC,CAAC,CAAC,EAAE;YAEL,SAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAEjD,OAAO;gBACH,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aACzB,CAAC;QACN,CAAC,CAAC,CAAA;IACV,CAAC;CAEJ,CAAA;AAhBG;IADC,IAAA,YAAM,EAAC,qBAAqB,CAAC;;oDACF;AAHnB,gBAAgB;IAD5B,IAAA,eAAU,EAAC,YAAY,CAAC;GACZ,gBAAgB,CAmB5B;AAnBY,4CAAgB"}
@@ -1,14 +1,22 @@
1
1
  import { SyncModule, IContainer } from "@spinajs/di";
2
2
  import Ajv from "ajv";
3
- import { Configuration } from "@spinajs/configuration";
4
- import { ValidationError } from "./exceptions";
3
+ import { IValidationError } from "./exceptions";
4
+ import { SchemaSource } from "./sources";
5
5
  export declare class DataValidator extends SyncModule {
6
6
  Options: any;
7
- SchemaDirs: string[];
7
+ protected Sources: SchemaSource[];
8
8
  protected Validator: Ajv;
9
- protected Configuration: Configuration;
10
9
  protected Container: IContainer;
11
10
  resolve(container: IContainer): void;
11
+ addSchema(schemaObject: any, identifier: string): void;
12
+ /**
13
+ *
14
+ * Checks if schema is loaded ( from file )
15
+ *
16
+ * @param schemaId schema id to check
17
+ * @returns { boolean } true if schema is loaded, false otherwise
18
+ */
19
+ hasSchema(schemaId: string): boolean;
12
20
  /**
13
21
  * Tries to validate given data
14
22
  *
@@ -16,7 +24,7 @@ export declare class DataValidator extends SyncModule {
16
24
  * @return { array : [boolean, ValidationError[]]} [0] true if data is valid, false otherwise, [1] list of all errors. If
17
25
  * set in config validation.allErrors is set to false, only firs error is returned
18
26
  */
19
- tryValidate(data: any): [boolean, ValidationError[]];
27
+ tryValidate(data: any): [boolean, IValidationError[]];
20
28
  /**
21
29
  * Tries to validate given data
22
30
  *
@@ -25,7 +33,7 @@ export declare class DataValidator extends SyncModule {
25
33
  * @return { array : [boolean, ValidationError[]]} [0] true if data is valid, false otherwise, [1] list of all errors. If
26
34
  * set in config validation.allErrors is set to false, only firs error is returned
27
35
  */
28
- tryValidate(schema: object | string, data: any): [boolean, ValidationError[]];
36
+ tryValidate(schema: object | string, data: any): [boolean, IValidationError[]];
29
37
  /**
30
38
  * Validate given data. When failed, exception is thrown
31
39
  *
package/lib/validator.js CHANGED
@@ -1,29 +1,10 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
2
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
15
3
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
4
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
19
7
  };
20
- var __importStar = (this && this.__importStar) || function (mod) {
21
- if (mod && mod.__esModule) return mod;
22
- var result = {};
23
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
24
- __setModuleDefault(result, mod);
25
- return result;
26
- };
27
8
  var __metadata = (this && this.__metadata) || function (k, v) {
28
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
29
10
  };
@@ -35,34 +16,68 @@ exports.DataValidator = void 0;
35
16
  const di_1 = require("@spinajs/di");
36
17
  const ajv_1 = __importDefault(require("ajv"));
37
18
  const configuration_1 = require("@spinajs/configuration");
38
- const fs = __importStar(require("fs"));
39
- const glob = __importStar(require("glob"));
40
- const path = __importStar(require("path"));
41
19
  const exceptions_1 = require("./exceptions");
42
20
  const exceptions_2 = require("@spinajs/exceptions");
43
21
  const decorators_1 = require("./decorators");
22
+ const log_1 = require("@spinajs/log/lib/log");
23
+ const sources_1 = require("./sources");
44
24
  class DataValidator extends di_1.SyncModule {
45
25
  resolve(container) {
46
- this.Container = container;
47
- this.Validator = new ajv_1.default(this.Options);
26
+ this.Sources = container.resolve(Array.ofType(sources_1.SchemaSource));
27
+ if (!this.Sources || this.Sources.length === 0) {
28
+ throw new exceptions_2.InvalidOperation("No schema sources avaible. Register any in DI container");
29
+ }
30
+ const ajvConfig = Object.assign({ logger: {
31
+ log: (msg) => log_1.Log.info(msg, "validation"),
32
+ warn: (msg) => log_1.Log.warn(msg, "validation"),
33
+ error: (msg) => log_1.Log.error(msg, "validation")
34
+ } }, this.Options);
35
+ this.Validator = new ajv_1.default(ajvConfig);
48
36
  // add $merge & $patch for json schema
49
37
  require("ajv-merge-patch")(this.Validator);
50
38
  // add common formats validation eg: date time
51
39
  require("ajv-formats")(this.Validator);
52
40
  // add keywords
53
41
  require("ajv-keywords")(this.Validator);
54
- this.SchemaDirs.filter(dir => fs.existsSync(dir))
55
- .flatMap((d) => glob.sync(path.join(d, "/**/*.+(json|js)")))
56
- .map(f => {
57
- return {
58
- schema: require(f),
59
- file: path.basename(f)
60
- };
61
- })
62
- .filter(s => this.Validator.validateSchema(s.schema))
63
- .forEach(s => { var _a; return this.Validator.addSchema(s.schema, (_a = s.schema.$id) !== null && _a !== void 0 ? _a : path.basename(s.file)); });
42
+ this.Sources.map(x => x.Load()).reduce((prev, curr) => {
43
+ return prev.concat(curr);
44
+ }, []).filter(s => {
45
+ // validate schema can throw sometimes
46
+ try {
47
+ const vResult = this.Validator.validateSchema(s.schema, true);
48
+ if (!vResult) {
49
+ log_1.Log.error(`Schema at ${s.file} invalid`, "validator");
50
+ return false;
51
+ }
52
+ return true;
53
+ }
54
+ catch (err) {
55
+ log_1.Log.error(`Schema at ${s.file} invalid, reason: ${err.message}`, "validator");
56
+ return false;
57
+ }
58
+ }).forEach(s => {
59
+ this.addSchema(s.schema, s.schema.$id);
60
+ });
61
+ super.resolve(container);
62
+ }
63
+ addSchema(schemaObject, identifier) {
64
+ if (!this.hasSchema(identifier)) {
65
+ this.Validator.addSchema(schemaObject, identifier);
66
+ log_1.Log.trace(`Schema ${identifier} added !`, "validator");
67
+ }
68
+ }
69
+ /**
70
+ *
71
+ * Checks if schema is loaded ( from file )
72
+ *
73
+ * @param schemaId schema id to check
74
+ * @returns { boolean } true if schema is loaded, false otherwise
75
+ */
76
+ hasSchema(schemaId) {
77
+ return !!this.Validator.getSchema(schemaId);
64
78
  }
65
79
  tryValidate(schemaOrData, data) {
80
+ var _a, _b;
66
81
  if (arguments.length === 1) {
67
82
  const schema = Reflect.getMetadata(decorators_1.SCHEMA_SYMBOL, schemaOrData);
68
83
  if (!schema) {
@@ -75,7 +90,7 @@ class DataValidator extends di_1.SyncModule {
75
90
  }
76
91
  const result = this.Validator.validate(schema, schemaOrData);
77
92
  if (!result) {
78
- return [false, this.Validator.errors];
93
+ return [false, (_a = this.Validator.errors) !== null && _a !== void 0 ? _a : null];
79
94
  }
80
95
  }
81
96
  else {
@@ -108,10 +123,10 @@ class DataValidator extends di_1.SyncModule {
108
123
  }
109
124
  const result = this.Validator.validate(schema, data);
110
125
  if (!result) {
111
- return [false, this.Validator.errors];
126
+ return [false, (_b = this.Validator.errors) !== null && _b !== void 0 ? _b : null];
112
127
  }
113
128
  }
114
- return [true, undefined];
129
+ return [true, null];
115
130
  }
116
131
  validate(schemaOrData, data) {
117
132
  const [isValid, errors] = this.tryValidate(schemaOrData, data);
@@ -131,9 +146,5 @@ __decorate([
131
146
  (0, configuration_1.Config)("validation"),
132
147
  __metadata("design:type", Object)
133
148
  ], DataValidator.prototype, "Options", void 0);
134
- __decorate([
135
- (0, configuration_1.Config)("system.dirs.schemas"),
136
- __metadata("design:type", Array)
137
- ], DataValidator.prototype, "SchemaDirs", void 0);
138
149
  exports.DataValidator = DataValidator;
139
150
  //# sourceMappingURL=validator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spinajs/validation",
3
- "version": "1.1.3",
3
+ "version": "1.1.5",
4
4
  "description": "validation library for spinajs framework",
5
5
  "main": "lib/index.js",
6
6
  "private": false,
@@ -12,7 +12,7 @@
12
12
  "prepare": "npm run build",
13
13
  "format": "prettier --write \"src/**/*.ts\" \"src/**/*.js\"",
14
14
  "lint": "tslint -p tsconfig.json",
15
- "prepublishOnly": "",
15
+ "prepublishOnly": "npm test && npm run lint",
16
16
  "preversion": "npm run lint",
17
17
  "version": "npm run format && git add -A src",
18
18
  "postversion": "git push && git push --tags"
@@ -36,10 +36,10 @@
36
36
  },
37
37
  "homepage": "https://github.com/spinajs/validation#readme",
38
38
  "dependencies": {
39
- "@spinajs/configuration": "^1.1.4",
39
+ "@spinajs/configuration": "^1.1.6",
40
40
  "@spinajs/di": "^1.1.7",
41
41
  "@spinajs/exceptions": "^1.0.5",
42
- "@spinajs/log": "^1.1.1",
42
+ "@spinajs/log": "^1.1.5",
43
43
  "ajv": "^8.8.2",
44
44
  "ajv-formats": "^2.1.1",
45
45
  "ajv-keywords": "^5.1.0",
@@ -1 +0,0 @@
1
- export {};
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const path_1 = require("path");
4
- function dir(path) {
5
- return (0, path_1.resolve)((0, path_1.normalize)((0, path_1.join)(__dirname, path)));
6
- }
7
- module.exports = {
8
- system: {
9
- dirs: {
10
- schemas: [dir('./../schemas')],
11
- }
12
- },
13
- validation: {
14
- // enable all errors on validation, not only first one that occurred
15
- allErrors: true,
16
- // remove properties that are not defined in schema
17
- removeAdditional: true,
18
- // set default values if possible
19
- useDefaults: true,
20
- // The option coerceTypes allows you to have your data types coerced to the types specified in your schema type keywords
21
- coerceTypes: true
22
- }
23
- };
24
- //# sourceMappingURL=validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/config/validation.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACrB,OAAO,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,OAAO,GAAG;IACb,MAAM,EAAE;QACJ,IAAI,EAAE;YACF,OAAO,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;SACjC;KACJ;IACD,UAAU,EAAE;QAER,qEAAqE;QACrE,SAAS,EAAE,IAAI;QAEf,mDAAmD;QACnD,gBAAgB,EAAE,IAAI;QAEtB,iCAAiC;QACjC,WAAW,EAAE,IAAI;QAEjB,wHAAwH;QACxH,WAAW,EAAE,IAAI;KACpB;CACJ,CAAA"}
@@ -1,8 +0,0 @@
1
- export declare const SCHEMA_SYMBOL: unique symbol;
2
- /**
3
- *
4
- * Add schema for object eg. model or dto.
5
- *
6
- * @param schema schema for object or schema name
7
- */
8
- export declare function Schema(schema: object | string): (target: any) => void;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Schema = exports.SCHEMA_SYMBOL = void 0;
4
- exports.SCHEMA_SYMBOL = Symbol('SCHEMA_SYMBOL');
5
- /**
6
- *
7
- * Add schema for object eg. model or dto.
8
- *
9
- * @param schema schema for object or schema name
10
- */
11
- function Schema(schema) {
12
- return (target) => {
13
- Reflect.defineMetadata(exports.SCHEMA_SYMBOL, schema, target.prototype || target);
14
- };
15
- }
16
- exports.Schema = Schema;
17
- //# sourceMappingURL=decorators.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAErD;;;;;GAKG;AACH,SAAgB,MAAM,CAAC,MAAuB;IAC1C,OAAO,CAAC,MAAW,EAAE,EAAE;QACnB,OAAO,CAAC,cAAc,CAAC,qBAAa,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;IAC9E,CAAC,CAAC;AACN,CAAC;AAJD,wBAIC"}
@@ -1,11 +0,0 @@
1
- import { Exception } from "@spinajs/exceptions";
2
- import { ErrorObject } from "ajv";
3
- /**
4
- * The exception that is thrown when JSON entity is checked against schema and is invalid
5
- */
6
- export declare class ValidationFailed extends Exception {
7
- parameter: any;
8
- constructor(message: string, validationErrors: ValidationError[]);
9
- }
10
- export interface ValidationError extends ErrorObject {
11
- }
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ValidationFailed = void 0;
4
- const exceptions_1 = require("@spinajs/exceptions");
5
- /**
6
- * The exception that is thrown when JSON entity is checked against schema and is invalid
7
- */
8
- class ValidationFailed extends exceptions_1.Exception {
9
- constructor(message, validationErrors) {
10
- super(message);
11
- this.parameter = validationErrors;
12
- }
13
- }
14
- exports.ValidationFailed = ValidationFailed;
15
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/exceptions/index.ts"],"names":[],"mappings":";;;AAAA,oDAAgD;AAEhD;;GAEG;AACF,MAAa,gBAAiB,SAAQ,sBAAS;IAG5C,YAAY,OAAe,EAAE,gBAAmC;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;IACpC,CAAC;CACF;AAPF,4CAOE"}
@@ -1,3 +0,0 @@
1
- export * from "./decorators";
2
- export * from "./exceptions";
3
- export * from "./validator";
package/lib/src/index.js DELETED
@@ -1,16 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./decorators"), exports);
14
- __exportStar(require("./exceptions"), exports);
15
- __exportStar(require("./validator"), exports);
16
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA6B;AAC7B,+CAA6B;AAC7B,8CAA4B"}
@@ -1,51 +0,0 @@
1
- import { SyncModule, IContainer } from "@spinajs/di";
2
- import Ajv from "ajv";
3
- import { ValidationError } from "./exceptions";
4
- export declare class DataValidator extends SyncModule {
5
- Options: any;
6
- SchemaDirs: string[];
7
- protected Validator: Ajv;
8
- protected Container: IContainer;
9
- resolve(container: IContainer): void;
10
- addSchema(schemaObject: any, identifier: string): void;
11
- /**
12
- *
13
- * Checks if schema is loaded ( from file )
14
- *
15
- * @param schemaId schema id to check
16
- * @returns { boolean } true if schema is loaded, false otherwise
17
- */
18
- hasSchema(schemaId: string): boolean;
19
- /**
20
- * Tries to validate given data
21
- *
22
- * @param data data to validate. Function will try to extract schema attached to object via @Schema decorator
23
- * @return { array : [boolean, ValidationError[]]} [0] true if data is valid, false otherwise, [1] list of all errors. If
24
- * set in config validation.allErrors is set to false, only firs error is returned
25
- */
26
- tryValidate(data: any): [boolean, ValidationError[]];
27
- /**
28
- * Tries to validate given data
29
- *
30
- * @param {string|object|Boolean} schemaKeyRef key, ref or schema object
31
- * @param {Any} data to be validated
32
- * @return { array : [boolean, ValidationError[]]} [0] true if data is valid, false otherwise, [1] list of all errors. If
33
- * set in config validation.allErrors is set to false, only firs error is returned
34
- */
35
- tryValidate(schema: object | string, data: any): [boolean, ValidationError[]];
36
- /**
37
- * Validate given data. When failed, exception is thrown
38
- *
39
- * @param data data to validate. Function will try to extract schema attached to object via @Schema decorator
40
- * @throws {InvalidArgument | ValidationFailed }
41
- */
42
- validate(data: any): void;
43
- /**
44
- * Validate given data
45
- *
46
- * @param {string|object|Boolean} schemaKeyRef key, ref or schema object
47
- * @param {Any} data to be validated
48
- * @throws {InvalidArgumen | ValidationFailed }
49
- */
50
- validate(schema: object | string, data: any): void;
51
- }
@@ -1,181 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
15
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
- return c > 3 && r && Object.defineProperty(target, key, r), r;
19
- };
20
- var __importStar = (this && this.__importStar) || function (mod) {
21
- if (mod && mod.__esModule) return mod;
22
- var result = {};
23
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
24
- __setModuleDefault(result, mod);
25
- return result;
26
- };
27
- var __metadata = (this && this.__metadata) || function (k, v) {
28
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
29
- };
30
- var __importDefault = (this && this.__importDefault) || function (mod) {
31
- return (mod && mod.__esModule) ? mod : { "default": mod };
32
- };
33
- Object.defineProperty(exports, "__esModule", { value: true });
34
- exports.DataValidator = void 0;
35
- const di_1 = require("@spinajs/di");
36
- const ajv_1 = __importDefault(require("ajv"));
37
- const configuration_1 = require("@spinajs/configuration");
38
- const fs = __importStar(require("fs"));
39
- const glob = __importStar(require("glob"));
40
- const path = __importStar(require("path"));
41
- const exceptions_1 = require("./exceptions");
42
- const exceptions_2 = require("@spinajs/exceptions");
43
- const decorators_1 = require("./decorators");
44
- const log_1 = require("@spinajs/log");
45
- class DataValidator extends di_1.SyncModule {
46
- resolve(container) {
47
- this.Container = container;
48
- const ajvConfig = Object.assign({ logger: {
49
- log: (msg) => log_1.Log.info(msg, "validation"),
50
- warn: (msg) => log_1.Log.warn(msg, "validation"),
51
- error: (msg) => log_1.Log.error(msg, "validation")
52
- } }, this.Options);
53
- this.Validator = new ajv_1.default(ajvConfig);
54
- // add $merge & $patch for json schema
55
- require("ajv-merge-patch")(this.Validator);
56
- // add common formats validation eg: date time
57
- require("ajv-formats")(this.Validator);
58
- // add keywords
59
- require("ajv-keywords")(this.Validator);
60
- this.SchemaDirs.filter(dir => fs.existsSync(dir))
61
- .flatMap((d) => glob.sync(path.join(d, "/**/*.+(json|js)")))
62
- .map(f => {
63
- log_1.Log.trace(`Found schema at: ${f}`, "validation");
64
- return {
65
- schema: require(f),
66
- file: path.basename(f)
67
- };
68
- })
69
- .filter(s => {
70
- // validate schema can throw sometimes
71
- try {
72
- const vResult = this.Validator.validateSchema(s.schema, true);
73
- if (!vResult) {
74
- log_1.Log.error(`Schema at ${s.file} invalid`, "validator");
75
- return false;
76
- }
77
- return true;
78
- }
79
- catch (err) {
80
- log_1.Log.error(`Schema at ${s.file} invalid, reason: ${err.message}`, "validator");
81
- return false;
82
- }
83
- })
84
- .forEach(s => {
85
- var _a;
86
- this.addSchema(s.schema, (_a = s.schema.$id) !== null && _a !== void 0 ? _a : path.basename(s.file));
87
- });
88
- super.resolve(container);
89
- }
90
- addSchema(schemaObject, identifier) {
91
- if (!this.hasSchema(identifier)) {
92
- this.Validator.addSchema(schemaObject, identifier);
93
- log_1.Log.trace(`Schema ${identifier} added !`, "validator");
94
- }
95
- }
96
- /**
97
- *
98
- * Checks if schema is loaded ( from file )
99
- *
100
- * @param schemaId schema id to check
101
- * @returns { boolean } true if schema is loaded, false otherwise
102
- */
103
- hasSchema(schemaId) {
104
- return !!this.Validator.getSchema(schemaId);
105
- }
106
- tryValidate(schemaOrData, data) {
107
- var _a, _b;
108
- if (arguments.length === 1) {
109
- const schema = Reflect.getMetadata(decorators_1.SCHEMA_SYMBOL, schemaOrData);
110
- if (!schema) {
111
- return [false, [{
112
- keyword: "empty_schema",
113
- instancePath: "./",
114
- schemaPath: "",
115
- params: { "data": "" }
116
- }]];
117
- }
118
- const result = this.Validator.validate(schema, schemaOrData);
119
- if (!result) {
120
- return [false, (_a = this.Validator.errors) !== null && _a !== void 0 ? _a : null];
121
- }
122
- }
123
- else {
124
- if (!data) {
125
- return [false, [{
126
- keyword: "invalid_argument",
127
- instancePath: "./",
128
- schemaPath: "",
129
- params: { "data": "" }
130
- }]];
131
- }
132
- let schema = null;
133
- if (typeof schemaOrData === "object") {
134
- schema = schemaOrData;
135
- }
136
- else if (typeof schemaOrData === 'string') {
137
- const s = this.Validator.getSchema(schemaOrData);
138
- schema = s === null || s === void 0 ? void 0 : s.schema;
139
- }
140
- else {
141
- schema = Reflect.getMetadata(decorators_1.SCHEMA_SYMBOL, schemaOrData);
142
- }
143
- if (!schema) {
144
- return [false, [{
145
- keyword: "empty_schema",
146
- instancePath: "./",
147
- schemaPath: "",
148
- params: { "data": "" }
149
- }]];
150
- }
151
- const result = this.Validator.validate(schema, data);
152
- if (!result) {
153
- return [false, (_b = this.Validator.errors) !== null && _b !== void 0 ? _b : null];
154
- }
155
- }
156
- return [true, null];
157
- }
158
- validate(schemaOrData, data) {
159
- const [isValid, errors] = this.tryValidate(schemaOrData, data);
160
- if (!isValid) {
161
- switch (errors[0].keyword) {
162
- case "invalid_argument":
163
- throw new exceptions_2.InvalidArgument("data is null or undefined");
164
- case "empty_schema":
165
- throw new exceptions_2.InvalidArgument("objects schema is not set");
166
- default:
167
- throw new exceptions_1.ValidationFailed("validation error", errors);
168
- }
169
- }
170
- }
171
- }
172
- __decorate([
173
- (0, configuration_1.Config)("validation"),
174
- __metadata("design:type", Object)
175
- ], DataValidator.prototype, "Options", void 0);
176
- __decorate([
177
- (0, configuration_1.Config)("system.dirs.schemas"),
178
- __metadata("design:type", Array)
179
- ], DataValidator.prototype, "SchemaDirs", void 0);
180
- exports.DataValidator = DataValidator;
181
- //# sourceMappingURL=validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/validator.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- import 'mocha';
@@ -1,138 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- require("mocha");
13
- const di_1 = require("@spinajs/di");
14
- const configuration_1 = require("@spinajs/configuration");
15
- const sinon_1 = __importDefault(require("sinon"));
16
- const chai_1 = require("chai");
17
- const lodash_1 = __importDefault(require("lodash"));
18
- const path_1 = require("path");
19
- const validator_1 = require("../src/validator");
20
- const src_1 = require("../src");
21
- function dir(path) {
22
- return (0, path_1.resolve)((0, path_1.normalize)((0, path_1.join)(__dirname, path)));
23
- }
24
- class TestConfiguration extends configuration_1.FrameworkConfiguration {
25
- async resolveAsync(container) {
26
- await super.resolveAsync(container);
27
- lodash_1.default.merge(this.Config, {
28
- system: {
29
- dirs: {
30
- schemas: [dir('./../test/schemas')],
31
- }
32
- },
33
- validation: {
34
- // enable all errors on validation, not only first one that occurred
35
- allErrors: true,
36
- // remove properties that are not defined in schema
37
- removeAdditional: true,
38
- // set default values if possible
39
- useDefaults: true,
40
- // The option coerceTypes allows you to have your data types coerced to the types specified in your schema type keywords
41
- coerceTypes: true
42
- }
43
- });
44
- }
45
- }
46
- function val() {
47
- return di_1.DI.resolve(validator_1.DataValidator);
48
- }
49
- describe("validator tests", function () {
50
- this.timeout(15000);
51
- before(async () => {
52
- di_1.DI.clearCache();
53
- di_1.DI.register(TestConfiguration).as(configuration_1.Configuration);
54
- await di_1.DI.resolve(configuration_1.Configuration);
55
- });
56
- afterEach(() => {
57
- sinon_1.default.restore();
58
- });
59
- it("should resolve validator", async () => {
60
- const v = val();
61
- (0, chai_1.expect)(v).to.be.not.null;
62
- });
63
- it("should load schemas from json and js files", async () => {
64
- const v = val();
65
- (0, chai_1.expect)(v.hasSchema("http://spinajs/example_js.schema.js")).to.be.true;
66
- (0, chai_1.expect)(v.hasSchema("http://spinajs/example_json.schema.json")).to.be.true;
67
- });
68
- it("should try to validate object with schema from file", async () => {
69
- const v = val();
70
- const [result, errors] = v.tryValidate("http://spinajs/example_json.schema.json", {
71
- productId: 1
72
- });
73
- (0, chai_1.expect)(result).to.be.true;
74
- (0, chai_1.expect)(errors).to.be.null;
75
- });
76
- it("should validate object with schema from file", async () => {
77
- const v = val();
78
- const func = () => v.validate("http://spinajs/example_json.schema.json", {
79
- productId: 1
80
- });
81
- (0, chai_1.expect)(func).not.to.throw;
82
- });
83
- it("should validate object with schema from decorator", async () => {
84
- let foo = class foo {
85
- };
86
- foo = __decorate([
87
- (0, src_1.Schema)({
88
- properties: {
89
- foo: { type: "string" }
90
- }
91
- })
92
- ], foo);
93
- const data = new foo();
94
- data.foo = "test";
95
- const v = val();
96
- const [result, errors] = v.tryValidate(data);
97
- (0, chai_1.expect)(result).to.be.true;
98
- (0, chai_1.expect)(errors).to.be.null;
99
- });
100
- it("Should valide object with schema name from decorator", async () => {
101
- let foo = class foo {
102
- };
103
- foo = __decorate([
104
- (0, src_1.Schema)("http://spinajs/example_json.schema.json")
105
- ], foo);
106
- const data = new foo();
107
- data.productId = 1;
108
- const v = val();
109
- const [result, errors] = v.tryValidate(data);
110
- (0, chai_1.expect)(result).to.be.true;
111
- (0, chai_1.expect)(errors).to.be.null;
112
- });
113
- it("trying to validate shouhld fail with proper error", async () => {
114
- const v = val();
115
- const [result, errors] = v.tryValidate("http://spinajs/example_json.schema.json", {
116
- productId: "dasdas"
117
- });
118
- (0, chai_1.expect)(result).to.be.false;
119
- (0, chai_1.expect)(errors).to.be.not.null;
120
- (0, chai_1.expect)(errors).to.be.an("array").to.have.deep.members([{
121
- instancePath: '/productId',
122
- keyword: 'type',
123
- message: 'must be integer',
124
- schemaPath: '#/properties/productId/type',
125
- params: {
126
- type: "integer"
127
- }
128
- }]);
129
- });
130
- it("validate should throw on invalid data", async () => {
131
- const v = val();
132
- const func = () => v.validate("http://spinajs/example_json.schema.json", {
133
- productId: "sss"
134
- });
135
- (0, chai_1.expect)(func).to.throw("validation error");
136
- });
137
- });
138
- //# sourceMappingURL=validator.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validator.test.js","sourceRoot":"","sources":["../../test/validator.test.ts"],"names":[],"mappings":"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"}