├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── src ├── index.ts └── tests │ └── index.ts ├── tsconfig.json └── tslint.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | .vscode 4 | package 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "tabWidth": 2, 4 | "printWidth": 80, 5 | "bracketSpacing": true, 6 | "semi": true, 7 | "singleQuote": false, 8 | "useTabs": false, 9 | "arrowParens": "avoid" 10 | } 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017-2020 Michał Lytek 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # class-transformer-validator 2 | 3 | [![npm version](https://badge.fury.io/js/class-transformer-validator.svg)](https://badge.fury.io/js/class-transformer-validator) 4 | [![Dependency Status](https://david-dm.org/MichalLytek/class-transformer-validator.svg)](https://david-dm.org/MichalLytek/class-transformer-validator) 5 | [![devDependency Status](https://david-dm.org/MichalLytek/class-transformer-validator/dev-status.svg)](https://david-dm.org/MichalLytek/class-transformer-validator#info=devDependencies) 6 | [![peerDependency Status](https://david-dm.org/MichalLytek/class-transformer-validator/peer-status.svg)](https://david-dm.org/MichalLytek/class-transformer-validator#info=devDependencies) 7 | 8 | A simple plugin for [class-transformer](https://github.com/typestack/class-transformer) and [class-validator](https://github.com/typestack/class-validator) which combines them in a nice and programmer-friendly API. 9 | 10 | ## Installation 11 | 12 | #### Module installation 13 | 14 | `npm install class-transformer-validator --save` 15 | 16 | (or the short way): 17 | 18 | `npm i -S class-transformer-validator` 19 | 20 | #### Peer dependencies 21 | 22 | This package is only a simple plugin/wrapper, so you have to install the required modules too because it can't work without them. See detailed installation instruction for the modules installation: 23 | 24 | - [class-transformer](https://github.com/typestack/class-transformer#installation) 25 | - [class-validator](https://github.com/typestack/class-validator#installation) 26 | 27 | ## Usage 28 | 29 | The usage of this module is very simple. 30 | 31 | ```ts 32 | import { IsEmail } from "class-validator"; 33 | import { transformAndValidate } from "class-transformer-validator"; 34 | 35 | // declare the class using class-validator decorators 36 | class User { 37 | @IsEmail() 38 | public email: string; 39 | 40 | public hello(): string { 41 | return "World!"; 42 | } 43 | } 44 | 45 | // then load the JSON string from any part of your app 46 | const userJson: string = loadJsonFromSomething(); 47 | 48 | // transform the JSON to class instance and validate it correctness 49 | transformAndValidate(User, userJson) 50 | .then((userObject: User) => { 51 | // now you can access all your class prototype method 52 | console.log(`Hello ${userObject.hello()}`); // prints "Hello World!" on console 53 | }) 54 | .catch(err => { 55 | // here you can handle error on transformation (invalid JSON) 56 | // or validation error (e.g. invalid email property) 57 | console.error(err); 58 | }); 59 | ``` 60 | 61 | You can also transform and validate plain JS object (e.g. from express req.body). Using ES7 async/await syntax: 62 | 63 | ```ts 64 | async (req, res) => { 65 | try { 66 | // transform and validate request body 67 | const userObject = await transformAndValidate(User, req.body); 68 | // infered type of userObject is User, you can access all class prototype properties and methods 69 | } catch (err) { 70 | // your error handling 71 | console.error(err); 72 | } 73 | }; 74 | ``` 75 | 76 | And since release `0.3.0` you can also pass array of objects - all of them will be validated using given class validation constraints: 77 | 78 | ```ts 79 | async (req, res) => { 80 | try { 81 | // transform and validate request body - array of User objects 82 | const userObjects = await transformAndValidate(User, req.body); 83 | userObjects.forEach(user => console.log(`Hello ${user.hello()}`)); 84 | } catch (err) { 85 | // your error handling 86 | } 87 | }; 88 | ``` 89 | 90 | ## API reference 91 | 92 | #### Function signatures 93 | 94 | There is available the `transformAndValidate` function with three overloads: 95 | 96 | ```ts 97 | function transformAndValidate( 98 | classType: ClassType, 99 | jsonString: string, 100 | options?: TransformValidationOptions, 101 | ): Promise; 102 | ``` 103 | 104 | ```ts 105 | function transformAndValidate( 106 | classType: ClassType, 107 | object: object, 108 | options?: TransformValidationOptions, 109 | ): Promise; 110 | ``` 111 | 112 | ```ts 113 | function transformAndValidate( 114 | classType: ClassType, 115 | array: object[], 116 | options?: TransformValidationOptions, 117 | ): Promise; 118 | ``` 119 | 120 | Be aware that if you validate json string, the return type is a `Promise` of `T` or `T[]` so you need to assert the returned type if you know the shape of json: 121 | 122 | ```ts 123 | const users = (await transformAndValidate( 124 | User, 125 | JSON.stringify([{ email: "test@test.test" }]), 126 | )) as User[]; 127 | ``` 128 | 129 | Or you can just check the type in runtime using `Array.isArray` method. 130 | 131 | #### Synchronous transformation and validation 132 | 133 | If you need sync validation, use `transformAndValidateSync` function instead (available since v0.4.0). It will synchronously return `T` or `T[]`, not a Promise. 134 | 135 | #### Parameters and types 136 | 137 | - `classType` - an class symbol, a constructor function which can be called with `new` 138 | 139 | ```ts 140 | type ClassType = { 141 | new (...args: any[]): T; 142 | }; 143 | ``` 144 | 145 | - `jsonString` - a normal string containing JSON 146 | 147 | - `object` - plain JS object of type `object` (introduced in TypeScript 2.2), you will have compile-time error while trying to pass number, boolean, null or undefined but unfortunately run-time error when passing a function 148 | 149 | - `array` - array of plain JS objects like described above 150 | 151 | - `options` - optional options object, it has two optional properties 152 | 153 | ```ts 154 | interface TransformValidationOptions { 155 | validator?: ValidatorOptions; 156 | transformer?: ClassTransformOptions; 157 | } 158 | ``` 159 | 160 | You can use it to pass options for `class-validator` ([more info](https://github.com/pleerock/class-validator/blob/master/src/validation/ValidatorOptions.ts)) and for `class-transformer` ([more info](https://github.com/pleerock/class-transformer/blob/master/src/ClassTransformOptions.ts)). 161 | 162 | ## More info 163 | 164 | The [class-transformer](https://github.com/pleerock/class-transformer) and [class-validator](https://github.com/pleerock/class-validator) are more powerful than it was showed in the simple usage sample, so go to their github page and check out they capabilities! 165 | 166 | ## Release notes 167 | 168 | **0.9.1** 169 | 170 | - widen `class-transformer` peer dependency version range to `>=0.2.3` 171 | - updated all dev dependencies 172 | 173 | **0.9.0** 174 | 175 | - bump `class-validator` peer dependency to version `>=0.12.0` 176 | - updated TypeScript dependency to version `^3.9.5` 177 | - updated all dev dependencies 178 | 179 | **0.8.0** 180 | 181 | - updated `class-transformer` dependency to version `^0.2.3` 182 | - updated `class-validator` dependency to version `^0.10.1` 183 | - updated TypeScript dependency to version `^3.6.3` 184 | - built code is now emitted as ES2015 (dropped es5 support) 185 | - updated all dev dependencies 186 | 187 | **0.7.1** 188 | 189 | - updated `class-transformer` dependency to version `^0.2.0` 190 | 191 | **0.6.0** 192 | 193 | - updated `class-validator` dependency to version `^0.9.1` 194 | 195 | **0.5.0** 196 | 197 | - remove deprecated `TransformValdiationOptions` interface (typo) 198 | - updated `class-validator` dependency to version `^0.8.1` and `class-transformer` to `^0.1.9` 199 | 200 | **0.4.1** 201 | 202 | - fix `TransformValdiationOptions` interface name typo (deprecate in favour of `TransformValidationOptions`) 203 | 204 | **0.4.0** 205 | 206 | - added `transformAndValidateSync` function for synchronous validation 207 | - changed return type for JSON's transform and validation to `Promise` of `T` or `T[]` 208 | - updated `class-validator` dependency to version `^0.7.2` and `class-transformer` to `^0.1.7` 209 | 210 | **0.3.0** 211 | 212 | - added support for transform and validate array of objects given class 213 | - updated `class-validator` dependency to version `^0.7.1` 214 | 215 | **0.2.0** 216 | 217 | - changed object parameter type declaration to `object` (introduced in TS 2.2) 218 | - throwing error when passed array, undefined or null 219 | 220 | **0.1.1** 221 | 222 | - changed throwing error (rejecting promise) [from string to `Error` with message](https://github.com/MichalLytek/class-transformer-validator/commit/e0ed33f9f8feb58d52bfdbc78f8150cdfd0ebe77#diff-f41e9d04a45c83f3b6f6e630f10117feR39) 223 | 224 | **0.1.0** 225 | 226 | - initial version with `transformAndValidate` function 227 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "class-transformer-validator", 3 | "version": "0.9.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.10.1", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", 10 | "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.1" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.10.1", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", 19 | "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.10.1", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", 25 | "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.10.1", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | }, 32 | "dependencies": { 33 | "ansi-styles": { 34 | "version": "3.2.1", 35 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 36 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 37 | "dev": true, 38 | "requires": { 39 | "color-convert": "^1.9.0" 40 | } 41 | }, 42 | "chalk": { 43 | "version": "2.4.2", 44 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 45 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 46 | "dev": true, 47 | "requires": { 48 | "ansi-styles": "^3.2.1", 49 | "escape-string-regexp": "^1.0.5", 50 | "supports-color": "^5.3.0" 51 | } 52 | }, 53 | "color-convert": { 54 | "version": "1.9.3", 55 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 56 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 57 | "dev": true, 58 | "requires": { 59 | "color-name": "1.1.3" 60 | } 61 | }, 62 | "color-name": { 63 | "version": "1.1.3", 64 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 65 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 66 | "dev": true 67 | }, 68 | "has-flag": { 69 | "version": "3.0.0", 70 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 71 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 72 | "dev": true 73 | }, 74 | "supports-color": { 75 | "version": "5.5.0", 76 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 77 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 78 | "dev": true, 79 | "requires": { 80 | "has-flag": "^3.0.0" 81 | } 82 | } 83 | } 84 | }, 85 | "@types/chai": { 86 | "version": "4.2.12", 87 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.12.tgz", 88 | "integrity": "sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ==", 89 | "dev": true 90 | }, 91 | "@types/chai-as-promised": { 92 | "version": "7.1.3", 93 | "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.3.tgz", 94 | "integrity": "sha512-FQnh1ohPXJELpKhzjuDkPLR2BZCAqed+a6xV4MI/T3XzHfd2FlarfUGUdZYgqYe8oxkYn0fchHEeHfHqdZ96sg==", 95 | "dev": true, 96 | "requires": { 97 | "@types/chai": "*" 98 | } 99 | }, 100 | "@types/color-name": { 101 | "version": "1.1.1", 102 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 103 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 104 | "dev": true 105 | }, 106 | "@types/mocha": { 107 | "version": "8.0.2", 108 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.0.2.tgz", 109 | "integrity": "sha512-5cv8rmqT3KX9XtWDvSgGYfS4OwrKM2eei90GWLnTYz+AXRiBv5uYcKBjnkQ4katNvfYk3+o2bHGZUsDhdcoUyg==", 110 | "dev": true 111 | }, 112 | "@types/parse-json": { 113 | "version": "4.0.0", 114 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", 115 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", 116 | "dev": true 117 | }, 118 | "@types/validator": { 119 | "version": "13.0.0", 120 | "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.0.0.tgz", 121 | "integrity": "sha512-WAy5txG7aFX8Vw3sloEKp5p/t/Xt8jD3GRD9DacnFv6Vo8ubudAsRTXgxpQwU0mpzY/H8U4db3roDuCMjShBmw==", 122 | "dev": true 123 | }, 124 | "aggregate-error": { 125 | "version": "3.0.1", 126 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", 127 | "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", 128 | "dev": true, 129 | "requires": { 130 | "clean-stack": "^2.0.0", 131 | "indent-string": "^4.0.0" 132 | } 133 | }, 134 | "ansi-colors": { 135 | "version": "4.1.1", 136 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 137 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 138 | "dev": true 139 | }, 140 | "ansi-escapes": { 141 | "version": "4.3.1", 142 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 143 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 144 | "dev": true, 145 | "requires": { 146 | "type-fest": "^0.11.0" 147 | } 148 | }, 149 | "ansi-regex": { 150 | "version": "5.0.0", 151 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 152 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 153 | "dev": true 154 | }, 155 | "ansi-styles": { 156 | "version": "4.2.1", 157 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 158 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 159 | "dev": true, 160 | "requires": { 161 | "@types/color-name": "^1.1.1", 162 | "color-convert": "^2.0.1" 163 | } 164 | }, 165 | "anymatch": { 166 | "version": "3.1.1", 167 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 168 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 169 | "dev": true, 170 | "requires": { 171 | "normalize-path": "^3.0.0", 172 | "picomatch": "^2.0.4" 173 | } 174 | }, 175 | "argparse": { 176 | "version": "1.0.10", 177 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 178 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 179 | "dev": true, 180 | "requires": { 181 | "sprintf-js": "~1.0.2" 182 | } 183 | }, 184 | "array.prototype.map": { 185 | "version": "1.0.2", 186 | "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", 187 | "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", 188 | "dev": true, 189 | "requires": { 190 | "define-properties": "^1.1.3", 191 | "es-abstract": "^1.17.0-next.1", 192 | "es-array-method-boxes-properly": "^1.0.0", 193 | "is-string": "^1.0.4" 194 | } 195 | }, 196 | "assertion-error": { 197 | "version": "1.1.0", 198 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 199 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 200 | "dev": true 201 | }, 202 | "astral-regex": { 203 | "version": "2.0.0", 204 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 205 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 206 | "dev": true 207 | }, 208 | "balanced-match": { 209 | "version": "1.0.0", 210 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 211 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 212 | "dev": true 213 | }, 214 | "binary-extensions": { 215 | "version": "2.1.0", 216 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", 217 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", 218 | "dev": true 219 | }, 220 | "brace-expansion": { 221 | "version": "1.1.11", 222 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 223 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 224 | "dev": true, 225 | "requires": { 226 | "balanced-match": "^1.0.0", 227 | "concat-map": "0.0.1" 228 | } 229 | }, 230 | "braces": { 231 | "version": "3.0.2", 232 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 233 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 234 | "dev": true, 235 | "requires": { 236 | "fill-range": "^7.0.1" 237 | } 238 | }, 239 | "browser-stdout": { 240 | "version": "1.3.1", 241 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 242 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 243 | "dev": true 244 | }, 245 | "builtin-modules": { 246 | "version": "1.1.1", 247 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 248 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 249 | "dev": true 250 | }, 251 | "callsites": { 252 | "version": "3.1.0", 253 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 254 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 255 | "dev": true 256 | }, 257 | "camelcase": { 258 | "version": "5.3.1", 259 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 260 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 261 | "dev": true 262 | }, 263 | "chai": { 264 | "version": "4.2.0", 265 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", 266 | "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", 267 | "dev": true, 268 | "requires": { 269 | "assertion-error": "^1.1.0", 270 | "check-error": "^1.0.2", 271 | "deep-eql": "^3.0.1", 272 | "get-func-name": "^2.0.0", 273 | "pathval": "^1.1.0", 274 | "type-detect": "^4.0.5" 275 | } 276 | }, 277 | "chai-as-promised": { 278 | "version": "7.1.1", 279 | "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", 280 | "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", 281 | "dev": true, 282 | "requires": { 283 | "check-error": "^1.0.2" 284 | } 285 | }, 286 | "chalk": { 287 | "version": "4.0.0", 288 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", 289 | "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", 290 | "dev": true, 291 | "requires": { 292 | "ansi-styles": "^4.1.0", 293 | "supports-color": "^7.1.0" 294 | } 295 | }, 296 | "check-error": { 297 | "version": "1.0.2", 298 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 299 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", 300 | "dev": true 301 | }, 302 | "chokidar": { 303 | "version": "3.3.1", 304 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", 305 | "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", 306 | "dev": true, 307 | "requires": { 308 | "anymatch": "~3.1.1", 309 | "braces": "~3.0.2", 310 | "fsevents": "~2.1.2", 311 | "glob-parent": "~5.1.0", 312 | "is-binary-path": "~2.1.0", 313 | "is-glob": "~4.0.1", 314 | "normalize-path": "~3.0.0", 315 | "readdirp": "~3.3.0" 316 | } 317 | }, 318 | "ci-info": { 319 | "version": "2.0.0", 320 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", 321 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", 322 | "dev": true 323 | }, 324 | "class-transformer": { 325 | "version": "0.3.1", 326 | "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.3.1.tgz", 327 | "integrity": "sha512-cKFwohpJbuMovS8xVLmn8N2AUbAuc8pVo4zEfsUVo8qgECOogns1WVk/FkOZoxhOPTyTYFckuoH+13FO+MQ8GA==", 328 | "dev": true 329 | }, 330 | "class-validator": { 331 | "version": "0.12.2", 332 | "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.12.2.tgz", 333 | "integrity": "sha512-TDzPzp8BmpsbPhQpccB3jMUE/3pK0TyqamrK0kcx+ZeFytMA+O6q87JZZGObHHnoo9GM8vl/JppIyKWeEA/EVw==", 334 | "dev": true, 335 | "requires": { 336 | "@types/validator": "13.0.0", 337 | "google-libphonenumber": "^3.2.8", 338 | "tslib": ">=1.9.0", 339 | "validator": "13.0.0" 340 | } 341 | }, 342 | "clean-stack": { 343 | "version": "2.2.0", 344 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 345 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 346 | "dev": true 347 | }, 348 | "cli-cursor": { 349 | "version": "3.1.0", 350 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 351 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 352 | "dev": true, 353 | "requires": { 354 | "restore-cursor": "^3.1.0" 355 | } 356 | }, 357 | "cli-truncate": { 358 | "version": "2.1.0", 359 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", 360 | "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", 361 | "dev": true, 362 | "requires": { 363 | "slice-ansi": "^3.0.0", 364 | "string-width": "^4.2.0" 365 | } 366 | }, 367 | "cliui": { 368 | "version": "5.0.0", 369 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 370 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 371 | "dev": true, 372 | "requires": { 373 | "string-width": "^3.1.0", 374 | "strip-ansi": "^5.2.0", 375 | "wrap-ansi": "^5.1.0" 376 | }, 377 | "dependencies": { 378 | "ansi-regex": { 379 | "version": "4.1.0", 380 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 381 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 382 | "dev": true 383 | }, 384 | "ansi-styles": { 385 | "version": "3.2.1", 386 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 387 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 388 | "dev": true, 389 | "requires": { 390 | "color-convert": "^1.9.0" 391 | } 392 | }, 393 | "color-convert": { 394 | "version": "1.9.3", 395 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 396 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 397 | "dev": true, 398 | "requires": { 399 | "color-name": "1.1.3" 400 | } 401 | }, 402 | "color-name": { 403 | "version": "1.1.3", 404 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 405 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 406 | "dev": true 407 | }, 408 | "emoji-regex": { 409 | "version": "7.0.3", 410 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 411 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 412 | "dev": true 413 | }, 414 | "is-fullwidth-code-point": { 415 | "version": "2.0.0", 416 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 417 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 418 | "dev": true 419 | }, 420 | "string-width": { 421 | "version": "3.1.0", 422 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 423 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 424 | "dev": true, 425 | "requires": { 426 | "emoji-regex": "^7.0.1", 427 | "is-fullwidth-code-point": "^2.0.0", 428 | "strip-ansi": "^5.1.0" 429 | } 430 | }, 431 | "strip-ansi": { 432 | "version": "5.2.0", 433 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 434 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 435 | "dev": true, 436 | "requires": { 437 | "ansi-regex": "^4.1.0" 438 | } 439 | }, 440 | "wrap-ansi": { 441 | "version": "5.1.0", 442 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 443 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 444 | "dev": true, 445 | "requires": { 446 | "ansi-styles": "^3.2.0", 447 | "string-width": "^3.0.0", 448 | "strip-ansi": "^5.0.0" 449 | } 450 | } 451 | } 452 | }, 453 | "color-convert": { 454 | "version": "2.0.1", 455 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 456 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 457 | "dev": true, 458 | "requires": { 459 | "color-name": "~1.1.4" 460 | } 461 | }, 462 | "color-name": { 463 | "version": "1.1.4", 464 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 465 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 466 | "dev": true 467 | }, 468 | "commander": { 469 | "version": "5.1.0", 470 | "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", 471 | "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", 472 | "dev": true 473 | }, 474 | "compare-versions": { 475 | "version": "3.6.0", 476 | "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", 477 | "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", 478 | "dev": true 479 | }, 480 | "concat-map": { 481 | "version": "0.0.1", 482 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 483 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 484 | "dev": true 485 | }, 486 | "cosmiconfig": { 487 | "version": "6.0.0", 488 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", 489 | "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", 490 | "dev": true, 491 | "requires": { 492 | "@types/parse-json": "^4.0.0", 493 | "import-fresh": "^3.1.0", 494 | "parse-json": "^5.0.0", 495 | "path-type": "^4.0.0", 496 | "yaml": "^1.7.2" 497 | } 498 | }, 499 | "cross-spawn": { 500 | "version": "7.0.3", 501 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 502 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 503 | "dev": true, 504 | "requires": { 505 | "path-key": "^3.1.0", 506 | "shebang-command": "^2.0.0", 507 | "which": "^2.0.1" 508 | } 509 | }, 510 | "debug": { 511 | "version": "4.1.1", 512 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 513 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 514 | "dev": true, 515 | "requires": { 516 | "ms": "^2.1.1" 517 | } 518 | }, 519 | "decamelize": { 520 | "version": "1.2.0", 521 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 522 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 523 | "dev": true 524 | }, 525 | "dedent": { 526 | "version": "0.7.0", 527 | "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", 528 | "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", 529 | "dev": true 530 | }, 531 | "deep-eql": { 532 | "version": "3.0.1", 533 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", 534 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", 535 | "dev": true, 536 | "requires": { 537 | "type-detect": "^4.0.0" 538 | } 539 | }, 540 | "define-properties": { 541 | "version": "1.1.3", 542 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 543 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 544 | "dev": true, 545 | "requires": { 546 | "object-keys": "^1.0.12" 547 | } 548 | }, 549 | "diff": { 550 | "version": "4.0.2", 551 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 552 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 553 | "dev": true 554 | }, 555 | "emoji-regex": { 556 | "version": "8.0.0", 557 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 558 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 559 | "dev": true 560 | }, 561 | "end-of-stream": { 562 | "version": "1.4.4", 563 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 564 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 565 | "dev": true, 566 | "requires": { 567 | "once": "^1.4.0" 568 | } 569 | }, 570 | "enquirer": { 571 | "version": "2.3.6", 572 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 573 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 574 | "dev": true, 575 | "requires": { 576 | "ansi-colors": "^4.1.1" 577 | } 578 | }, 579 | "error-ex": { 580 | "version": "1.3.2", 581 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 582 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 583 | "dev": true, 584 | "requires": { 585 | "is-arrayish": "^0.2.1" 586 | } 587 | }, 588 | "es-abstract": { 589 | "version": "1.17.6", 590 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", 591 | "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", 592 | "dev": true, 593 | "requires": { 594 | "es-to-primitive": "^1.2.1", 595 | "function-bind": "^1.1.1", 596 | "has": "^1.0.3", 597 | "has-symbols": "^1.0.1", 598 | "is-callable": "^1.2.0", 599 | "is-regex": "^1.1.0", 600 | "object-inspect": "^1.7.0", 601 | "object-keys": "^1.1.1", 602 | "object.assign": "^4.1.0", 603 | "string.prototype.trimend": "^1.0.1", 604 | "string.prototype.trimstart": "^1.0.1" 605 | } 606 | }, 607 | "es-array-method-boxes-properly": { 608 | "version": "1.0.0", 609 | "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", 610 | "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", 611 | "dev": true 612 | }, 613 | "es-get-iterator": { 614 | "version": "1.1.0", 615 | "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", 616 | "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", 617 | "dev": true, 618 | "requires": { 619 | "es-abstract": "^1.17.4", 620 | "has-symbols": "^1.0.1", 621 | "is-arguments": "^1.0.4", 622 | "is-map": "^2.0.1", 623 | "is-set": "^2.0.1", 624 | "is-string": "^1.0.5", 625 | "isarray": "^2.0.5" 626 | } 627 | }, 628 | "es-to-primitive": { 629 | "version": "1.2.1", 630 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 631 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 632 | "dev": true, 633 | "requires": { 634 | "is-callable": "^1.1.4", 635 | "is-date-object": "^1.0.1", 636 | "is-symbol": "^1.0.2" 637 | } 638 | }, 639 | "escape-string-regexp": { 640 | "version": "1.0.5", 641 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 642 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 643 | "dev": true 644 | }, 645 | "esprima": { 646 | "version": "4.0.1", 647 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 648 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 649 | "dev": true 650 | }, 651 | "execa": { 652 | "version": "4.0.3", 653 | "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", 654 | "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", 655 | "dev": true, 656 | "requires": { 657 | "cross-spawn": "^7.0.0", 658 | "get-stream": "^5.0.0", 659 | "human-signals": "^1.1.1", 660 | "is-stream": "^2.0.0", 661 | "merge-stream": "^2.0.0", 662 | "npm-run-path": "^4.0.0", 663 | "onetime": "^5.1.0", 664 | "signal-exit": "^3.0.2", 665 | "strip-final-newline": "^2.0.0" 666 | } 667 | }, 668 | "figures": { 669 | "version": "3.2.0", 670 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 671 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 672 | "dev": true, 673 | "requires": { 674 | "escape-string-regexp": "^1.0.5" 675 | } 676 | }, 677 | "fill-range": { 678 | "version": "7.0.1", 679 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 680 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 681 | "dev": true, 682 | "requires": { 683 | "to-regex-range": "^5.0.1" 684 | } 685 | }, 686 | "find-up": { 687 | "version": "4.1.0", 688 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 689 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 690 | "dev": true, 691 | "requires": { 692 | "locate-path": "^5.0.0", 693 | "path-exists": "^4.0.0" 694 | } 695 | }, 696 | "find-versions": { 697 | "version": "3.2.0", 698 | "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", 699 | "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", 700 | "dev": true, 701 | "requires": { 702 | "semver-regex": "^2.0.0" 703 | } 704 | }, 705 | "flat": { 706 | "version": "4.1.0", 707 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", 708 | "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", 709 | "dev": true, 710 | "requires": { 711 | "is-buffer": "~2.0.3" 712 | } 713 | }, 714 | "fs.realpath": { 715 | "version": "1.0.0", 716 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 717 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 718 | "dev": true 719 | }, 720 | "fsevents": { 721 | "version": "2.1.3", 722 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 723 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 724 | "dev": true, 725 | "optional": true 726 | }, 727 | "function-bind": { 728 | "version": "1.1.1", 729 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 730 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 731 | "dev": true 732 | }, 733 | "get-caller-file": { 734 | "version": "2.0.5", 735 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 736 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 737 | "dev": true 738 | }, 739 | "get-func-name": { 740 | "version": "2.0.0", 741 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 742 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", 743 | "dev": true 744 | }, 745 | "get-own-enumerable-property-symbols": { 746 | "version": "3.0.2", 747 | "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", 748 | "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", 749 | "dev": true 750 | }, 751 | "get-stream": { 752 | "version": "5.1.0", 753 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", 754 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", 755 | "dev": true, 756 | "requires": { 757 | "pump": "^3.0.0" 758 | } 759 | }, 760 | "glob": { 761 | "version": "7.1.6", 762 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 763 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 764 | "dev": true, 765 | "requires": { 766 | "fs.realpath": "^1.0.0", 767 | "inflight": "^1.0.4", 768 | "inherits": "2", 769 | "minimatch": "^3.0.4", 770 | "once": "^1.3.0", 771 | "path-is-absolute": "^1.0.0" 772 | } 773 | }, 774 | "glob-parent": { 775 | "version": "5.1.1", 776 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 777 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 778 | "dev": true, 779 | "requires": { 780 | "is-glob": "^4.0.1" 781 | } 782 | }, 783 | "google-libphonenumber": { 784 | "version": "3.2.10", 785 | "resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.10.tgz", 786 | "integrity": "sha512-TsckE9O8QgqaIeaOXPjcJa4/kX3BzFdO1oCbMfmUpRZckml4xJhjJVxaT9Mdt/VrZZkT9lX44eHAEWfJK1tHtw==", 787 | "dev": true 788 | }, 789 | "growl": { 790 | "version": "1.10.5", 791 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 792 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 793 | "dev": true 794 | }, 795 | "has": { 796 | "version": "1.0.3", 797 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 798 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 799 | "dev": true, 800 | "requires": { 801 | "function-bind": "^1.1.1" 802 | } 803 | }, 804 | "has-flag": { 805 | "version": "4.0.0", 806 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 807 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 808 | "dev": true 809 | }, 810 | "has-symbols": { 811 | "version": "1.0.1", 812 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 813 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 814 | "dev": true 815 | }, 816 | "he": { 817 | "version": "1.2.0", 818 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 819 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 820 | "dev": true 821 | }, 822 | "human-signals": { 823 | "version": "1.1.1", 824 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", 825 | "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", 826 | "dev": true 827 | }, 828 | "husky": { 829 | "version": "4.2.5", 830 | "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz", 831 | "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==", 832 | "dev": true, 833 | "requires": { 834 | "chalk": "^4.0.0", 835 | "ci-info": "^2.0.0", 836 | "compare-versions": "^3.6.0", 837 | "cosmiconfig": "^6.0.0", 838 | "find-versions": "^3.2.0", 839 | "opencollective-postinstall": "^2.0.2", 840 | "pkg-dir": "^4.2.0", 841 | "please-upgrade-node": "^3.2.0", 842 | "slash": "^3.0.0", 843 | "which-pm-runs": "^1.0.0" 844 | } 845 | }, 846 | "import-fresh": { 847 | "version": "3.2.1", 848 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 849 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 850 | "dev": true, 851 | "requires": { 852 | "parent-module": "^1.0.0", 853 | "resolve-from": "^4.0.0" 854 | } 855 | }, 856 | "indent-string": { 857 | "version": "4.0.0", 858 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 859 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 860 | "dev": true 861 | }, 862 | "inflight": { 863 | "version": "1.0.6", 864 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 865 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 866 | "dev": true, 867 | "requires": { 868 | "once": "^1.3.0", 869 | "wrappy": "1" 870 | } 871 | }, 872 | "inherits": { 873 | "version": "2.0.4", 874 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 875 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 876 | "dev": true 877 | }, 878 | "is-arguments": { 879 | "version": "1.0.4", 880 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", 881 | "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", 882 | "dev": true 883 | }, 884 | "is-arrayish": { 885 | "version": "0.2.1", 886 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 887 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 888 | "dev": true 889 | }, 890 | "is-binary-path": { 891 | "version": "2.1.0", 892 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 893 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 894 | "dev": true, 895 | "requires": { 896 | "binary-extensions": "^2.0.0" 897 | } 898 | }, 899 | "is-buffer": { 900 | "version": "2.0.4", 901 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", 902 | "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", 903 | "dev": true 904 | }, 905 | "is-callable": { 906 | "version": "1.2.0", 907 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", 908 | "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", 909 | "dev": true 910 | }, 911 | "is-date-object": { 912 | "version": "1.0.2", 913 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 914 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 915 | "dev": true 916 | }, 917 | "is-extglob": { 918 | "version": "2.1.1", 919 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 920 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 921 | "dev": true 922 | }, 923 | "is-fullwidth-code-point": { 924 | "version": "3.0.0", 925 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 926 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 927 | "dev": true 928 | }, 929 | "is-glob": { 930 | "version": "4.0.1", 931 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 932 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 933 | "dev": true, 934 | "requires": { 935 | "is-extglob": "^2.1.1" 936 | } 937 | }, 938 | "is-map": { 939 | "version": "2.0.1", 940 | "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", 941 | "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", 942 | "dev": true 943 | }, 944 | "is-number": { 945 | "version": "7.0.0", 946 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 947 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 948 | "dev": true 949 | }, 950 | "is-obj": { 951 | "version": "1.0.1", 952 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 953 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 954 | "dev": true 955 | }, 956 | "is-plain-obj": { 957 | "version": "1.1.0", 958 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 959 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", 960 | "dev": true 961 | }, 962 | "is-regex": { 963 | "version": "1.1.1", 964 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", 965 | "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", 966 | "dev": true, 967 | "requires": { 968 | "has-symbols": "^1.0.1" 969 | } 970 | }, 971 | "is-regexp": { 972 | "version": "1.0.0", 973 | "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", 974 | "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", 975 | "dev": true 976 | }, 977 | "is-set": { 978 | "version": "2.0.1", 979 | "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", 980 | "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", 981 | "dev": true 982 | }, 983 | "is-stream": { 984 | "version": "2.0.0", 985 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 986 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", 987 | "dev": true 988 | }, 989 | "is-string": { 990 | "version": "1.0.5", 991 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", 992 | "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", 993 | "dev": true 994 | }, 995 | "is-symbol": { 996 | "version": "1.0.3", 997 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 998 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 999 | "dev": true, 1000 | "requires": { 1001 | "has-symbols": "^1.0.1" 1002 | } 1003 | }, 1004 | "isarray": { 1005 | "version": "2.0.5", 1006 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 1007 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 1008 | "dev": true 1009 | }, 1010 | "isexe": { 1011 | "version": "2.0.0", 1012 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1013 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1014 | "dev": true 1015 | }, 1016 | "iterate-iterator": { 1017 | "version": "1.0.1", 1018 | "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", 1019 | "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", 1020 | "dev": true 1021 | }, 1022 | "iterate-value": { 1023 | "version": "1.0.2", 1024 | "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", 1025 | "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", 1026 | "dev": true, 1027 | "requires": { 1028 | "es-get-iterator": "^1.0.2", 1029 | "iterate-iterator": "^1.0.1" 1030 | } 1031 | }, 1032 | "js-tokens": { 1033 | "version": "4.0.0", 1034 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1035 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1036 | "dev": true 1037 | }, 1038 | "js-yaml": { 1039 | "version": "3.13.1", 1040 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 1041 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 1042 | "dev": true, 1043 | "requires": { 1044 | "argparse": "^1.0.7", 1045 | "esprima": "^4.0.0" 1046 | } 1047 | }, 1048 | "json-parse-better-errors": { 1049 | "version": "1.0.2", 1050 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 1051 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 1052 | "dev": true 1053 | }, 1054 | "lines-and-columns": { 1055 | "version": "1.1.6", 1056 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", 1057 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", 1058 | "dev": true 1059 | }, 1060 | "lint-staged": { 1061 | "version": "10.2.11", 1062 | "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.2.11.tgz", 1063 | "integrity": "sha512-LRRrSogzbixYaZItE2APaS4l2eJMjjf5MbclRZpLJtcQJShcvUzKXsNeZgsLIZ0H0+fg2tL4B59fU9wHIHtFIA==", 1064 | "dev": true, 1065 | "requires": { 1066 | "chalk": "^4.0.0", 1067 | "cli-truncate": "2.1.0", 1068 | "commander": "^5.1.0", 1069 | "cosmiconfig": "^6.0.0", 1070 | "debug": "^4.1.1", 1071 | "dedent": "^0.7.0", 1072 | "enquirer": "^2.3.5", 1073 | "execa": "^4.0.1", 1074 | "listr2": "^2.1.0", 1075 | "log-symbols": "^4.0.0", 1076 | "micromatch": "^4.0.2", 1077 | "normalize-path": "^3.0.0", 1078 | "please-upgrade-node": "^3.2.0", 1079 | "string-argv": "0.3.1", 1080 | "stringify-object": "^3.3.0" 1081 | } 1082 | }, 1083 | "listr2": { 1084 | "version": "2.5.1", 1085 | "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.5.1.tgz", 1086 | "integrity": "sha512-qkNRW70SwfwWLD/eiaTf2tfgWT/ZvjmMsnEFJOCzac0cjcc8rYHDBr1eQhRxopj6lZO7Oa5sS/pZzS6q+BsX+w==", 1087 | "dev": true, 1088 | "requires": { 1089 | "chalk": "^4.1.0", 1090 | "cli-truncate": "^2.1.0", 1091 | "figures": "^3.2.0", 1092 | "indent-string": "^4.0.0", 1093 | "log-update": "^4.0.0", 1094 | "p-map": "^4.0.0", 1095 | "rxjs": "^6.6.2", 1096 | "through": "^2.3.8" 1097 | }, 1098 | "dependencies": { 1099 | "chalk": { 1100 | "version": "4.1.0", 1101 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 1102 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 1103 | "dev": true, 1104 | "requires": { 1105 | "ansi-styles": "^4.1.0", 1106 | "supports-color": "^7.1.0" 1107 | } 1108 | } 1109 | } 1110 | }, 1111 | "locate-path": { 1112 | "version": "5.0.0", 1113 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1114 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1115 | "dev": true, 1116 | "requires": { 1117 | "p-locate": "^4.1.0" 1118 | } 1119 | }, 1120 | "log-symbols": { 1121 | "version": "4.0.0", 1122 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", 1123 | "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", 1124 | "dev": true, 1125 | "requires": { 1126 | "chalk": "^4.0.0" 1127 | } 1128 | }, 1129 | "log-update": { 1130 | "version": "4.0.0", 1131 | "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", 1132 | "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", 1133 | "dev": true, 1134 | "requires": { 1135 | "ansi-escapes": "^4.3.0", 1136 | "cli-cursor": "^3.1.0", 1137 | "slice-ansi": "^4.0.0", 1138 | "wrap-ansi": "^6.2.0" 1139 | }, 1140 | "dependencies": { 1141 | "slice-ansi": { 1142 | "version": "4.0.0", 1143 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 1144 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 1145 | "dev": true, 1146 | "requires": { 1147 | "ansi-styles": "^4.0.0", 1148 | "astral-regex": "^2.0.0", 1149 | "is-fullwidth-code-point": "^3.0.0" 1150 | } 1151 | } 1152 | } 1153 | }, 1154 | "merge-stream": { 1155 | "version": "2.0.0", 1156 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1157 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1158 | "dev": true 1159 | }, 1160 | "micromatch": { 1161 | "version": "4.0.2", 1162 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 1163 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 1164 | "dev": true, 1165 | "requires": { 1166 | "braces": "^3.0.1", 1167 | "picomatch": "^2.0.5" 1168 | } 1169 | }, 1170 | "mimic-fn": { 1171 | "version": "2.1.0", 1172 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1173 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1174 | "dev": true 1175 | }, 1176 | "minimatch": { 1177 | "version": "3.0.4", 1178 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1179 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1180 | "dev": true, 1181 | "requires": { 1182 | "brace-expansion": "^1.1.7" 1183 | } 1184 | }, 1185 | "minimist": { 1186 | "version": "1.2.5", 1187 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1188 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1189 | "dev": true 1190 | }, 1191 | "mkdirp": { 1192 | "version": "0.5.5", 1193 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1194 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1195 | "dev": true, 1196 | "requires": { 1197 | "minimist": "^1.2.5" 1198 | } 1199 | }, 1200 | "mocha": { 1201 | "version": "8.1.1", 1202 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.1.tgz", 1203 | "integrity": "sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ==", 1204 | "dev": true, 1205 | "requires": { 1206 | "ansi-colors": "4.1.1", 1207 | "browser-stdout": "1.3.1", 1208 | "chokidar": "3.3.1", 1209 | "debug": "3.2.6", 1210 | "diff": "4.0.2", 1211 | "escape-string-regexp": "1.0.5", 1212 | "find-up": "4.1.0", 1213 | "glob": "7.1.6", 1214 | "growl": "1.10.5", 1215 | "he": "1.2.0", 1216 | "js-yaml": "3.13.1", 1217 | "log-symbols": "3.0.0", 1218 | "minimatch": "3.0.4", 1219 | "ms": "2.1.2", 1220 | "object.assign": "4.1.0", 1221 | "promise.allsettled": "1.0.2", 1222 | "serialize-javascript": "4.0.0", 1223 | "strip-json-comments": "3.0.1", 1224 | "supports-color": "7.1.0", 1225 | "which": "2.0.2", 1226 | "wide-align": "1.1.3", 1227 | "workerpool": "6.0.0", 1228 | "yargs": "13.3.2", 1229 | "yargs-parser": "13.1.2", 1230 | "yargs-unparser": "1.6.1" 1231 | }, 1232 | "dependencies": { 1233 | "ansi-styles": { 1234 | "version": "3.2.1", 1235 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1236 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1237 | "dev": true, 1238 | "requires": { 1239 | "color-convert": "^1.9.0" 1240 | } 1241 | }, 1242 | "chalk": { 1243 | "version": "2.4.2", 1244 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1245 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1246 | "dev": true, 1247 | "requires": { 1248 | "ansi-styles": "^3.2.1", 1249 | "escape-string-regexp": "^1.0.5", 1250 | "supports-color": "^5.3.0" 1251 | }, 1252 | "dependencies": { 1253 | "supports-color": { 1254 | "version": "5.5.0", 1255 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1256 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1257 | "dev": true, 1258 | "requires": { 1259 | "has-flag": "^3.0.0" 1260 | } 1261 | } 1262 | } 1263 | }, 1264 | "color-convert": { 1265 | "version": "1.9.3", 1266 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1267 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1268 | "dev": true, 1269 | "requires": { 1270 | "color-name": "1.1.3" 1271 | } 1272 | }, 1273 | "color-name": { 1274 | "version": "1.1.3", 1275 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1276 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1277 | "dev": true 1278 | }, 1279 | "debug": { 1280 | "version": "3.2.6", 1281 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 1282 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 1283 | "dev": true, 1284 | "requires": { 1285 | "ms": "^2.1.1" 1286 | } 1287 | }, 1288 | "has-flag": { 1289 | "version": "3.0.0", 1290 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1291 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1292 | "dev": true 1293 | }, 1294 | "log-symbols": { 1295 | "version": "3.0.0", 1296 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", 1297 | "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", 1298 | "dev": true, 1299 | "requires": { 1300 | "chalk": "^2.4.2" 1301 | } 1302 | } 1303 | } 1304 | }, 1305 | "ms": { 1306 | "version": "2.1.2", 1307 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1308 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1309 | "dev": true 1310 | }, 1311 | "normalize-path": { 1312 | "version": "3.0.0", 1313 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1314 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1315 | "dev": true 1316 | }, 1317 | "npm-run-path": { 1318 | "version": "4.0.1", 1319 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 1320 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 1321 | "dev": true, 1322 | "requires": { 1323 | "path-key": "^3.0.0" 1324 | } 1325 | }, 1326 | "object-inspect": { 1327 | "version": "1.8.0", 1328 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", 1329 | "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", 1330 | "dev": true 1331 | }, 1332 | "object-keys": { 1333 | "version": "1.1.1", 1334 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1335 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1336 | "dev": true 1337 | }, 1338 | "object.assign": { 1339 | "version": "4.1.0", 1340 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1341 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1342 | "dev": true, 1343 | "requires": { 1344 | "define-properties": "^1.1.2", 1345 | "function-bind": "^1.1.1", 1346 | "has-symbols": "^1.0.0", 1347 | "object-keys": "^1.0.11" 1348 | } 1349 | }, 1350 | "once": { 1351 | "version": "1.4.0", 1352 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1353 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1354 | "dev": true, 1355 | "requires": { 1356 | "wrappy": "1" 1357 | } 1358 | }, 1359 | "onetime": { 1360 | "version": "5.1.2", 1361 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1362 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1363 | "dev": true, 1364 | "requires": { 1365 | "mimic-fn": "^2.1.0" 1366 | } 1367 | }, 1368 | "opencollective-postinstall": { 1369 | "version": "2.0.3", 1370 | "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", 1371 | "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", 1372 | "dev": true 1373 | }, 1374 | "p-limit": { 1375 | "version": "2.3.0", 1376 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1377 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1378 | "dev": true, 1379 | "requires": { 1380 | "p-try": "^2.0.0" 1381 | } 1382 | }, 1383 | "p-locate": { 1384 | "version": "4.1.0", 1385 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1386 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1387 | "dev": true, 1388 | "requires": { 1389 | "p-limit": "^2.2.0" 1390 | } 1391 | }, 1392 | "p-map": { 1393 | "version": "4.0.0", 1394 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 1395 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 1396 | "dev": true, 1397 | "requires": { 1398 | "aggregate-error": "^3.0.0" 1399 | } 1400 | }, 1401 | "p-try": { 1402 | "version": "2.2.0", 1403 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1404 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1405 | "dev": true 1406 | }, 1407 | "parent-module": { 1408 | "version": "1.0.1", 1409 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1410 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1411 | "dev": true, 1412 | "requires": { 1413 | "callsites": "^3.0.0" 1414 | } 1415 | }, 1416 | "parse-json": { 1417 | "version": "5.0.0", 1418 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", 1419 | "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", 1420 | "dev": true, 1421 | "requires": { 1422 | "@babel/code-frame": "^7.0.0", 1423 | "error-ex": "^1.3.1", 1424 | "json-parse-better-errors": "^1.0.1", 1425 | "lines-and-columns": "^1.1.6" 1426 | } 1427 | }, 1428 | "path-exists": { 1429 | "version": "4.0.0", 1430 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1431 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1432 | "dev": true 1433 | }, 1434 | "path-is-absolute": { 1435 | "version": "1.0.1", 1436 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1437 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1438 | "dev": true 1439 | }, 1440 | "path-key": { 1441 | "version": "3.1.1", 1442 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1443 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1444 | "dev": true 1445 | }, 1446 | "path-parse": { 1447 | "version": "1.0.6", 1448 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1449 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1450 | "dev": true 1451 | }, 1452 | "path-type": { 1453 | "version": "4.0.0", 1454 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1455 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1456 | "dev": true 1457 | }, 1458 | "pathval": { 1459 | "version": "1.1.0", 1460 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", 1461 | "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", 1462 | "dev": true 1463 | }, 1464 | "picomatch": { 1465 | "version": "2.2.2", 1466 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1467 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 1468 | "dev": true 1469 | }, 1470 | "pkg-dir": { 1471 | "version": "4.2.0", 1472 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1473 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1474 | "dev": true, 1475 | "requires": { 1476 | "find-up": "^4.0.0" 1477 | } 1478 | }, 1479 | "please-upgrade-node": { 1480 | "version": "3.2.0", 1481 | "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", 1482 | "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", 1483 | "dev": true, 1484 | "requires": { 1485 | "semver-compare": "^1.0.0" 1486 | } 1487 | }, 1488 | "prettier": { 1489 | "version": "2.0.5", 1490 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", 1491 | "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", 1492 | "dev": true 1493 | }, 1494 | "promise.allsettled": { 1495 | "version": "1.0.2", 1496 | "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", 1497 | "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", 1498 | "dev": true, 1499 | "requires": { 1500 | "array.prototype.map": "^1.0.1", 1501 | "define-properties": "^1.1.3", 1502 | "es-abstract": "^1.17.0-next.1", 1503 | "function-bind": "^1.1.1", 1504 | "iterate-value": "^1.0.0" 1505 | } 1506 | }, 1507 | "pump": { 1508 | "version": "3.0.0", 1509 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1510 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1511 | "dev": true, 1512 | "requires": { 1513 | "end-of-stream": "^1.1.0", 1514 | "once": "^1.3.1" 1515 | } 1516 | }, 1517 | "randombytes": { 1518 | "version": "2.1.0", 1519 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1520 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1521 | "dev": true, 1522 | "requires": { 1523 | "safe-buffer": "^5.1.0" 1524 | } 1525 | }, 1526 | "readdirp": { 1527 | "version": "3.3.0", 1528 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", 1529 | "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", 1530 | "dev": true, 1531 | "requires": { 1532 | "picomatch": "^2.0.7" 1533 | } 1534 | }, 1535 | "require-directory": { 1536 | "version": "2.1.1", 1537 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1538 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1539 | "dev": true 1540 | }, 1541 | "require-main-filename": { 1542 | "version": "2.0.0", 1543 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1544 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 1545 | "dev": true 1546 | }, 1547 | "resolve": { 1548 | "version": "1.17.0", 1549 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 1550 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 1551 | "dev": true, 1552 | "requires": { 1553 | "path-parse": "^1.0.6" 1554 | } 1555 | }, 1556 | "resolve-from": { 1557 | "version": "4.0.0", 1558 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1559 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1560 | "dev": true 1561 | }, 1562 | "restore-cursor": { 1563 | "version": "3.1.0", 1564 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1565 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1566 | "dev": true, 1567 | "requires": { 1568 | "onetime": "^5.1.0", 1569 | "signal-exit": "^3.0.2" 1570 | } 1571 | }, 1572 | "rxjs": { 1573 | "version": "6.6.2", 1574 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", 1575 | "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", 1576 | "dev": true, 1577 | "requires": { 1578 | "tslib": "^1.9.0" 1579 | }, 1580 | "dependencies": { 1581 | "tslib": { 1582 | "version": "1.13.0", 1583 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 1584 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", 1585 | "dev": true 1586 | } 1587 | } 1588 | }, 1589 | "safe-buffer": { 1590 | "version": "5.2.1", 1591 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1592 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1593 | "dev": true 1594 | }, 1595 | "semver": { 1596 | "version": "5.7.1", 1597 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1598 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1599 | "dev": true 1600 | }, 1601 | "semver-compare": { 1602 | "version": "1.0.0", 1603 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 1604 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", 1605 | "dev": true 1606 | }, 1607 | "semver-regex": { 1608 | "version": "2.0.0", 1609 | "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", 1610 | "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", 1611 | "dev": true 1612 | }, 1613 | "serialize-javascript": { 1614 | "version": "4.0.0", 1615 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1616 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1617 | "dev": true, 1618 | "requires": { 1619 | "randombytes": "^2.1.0" 1620 | } 1621 | }, 1622 | "set-blocking": { 1623 | "version": "2.0.0", 1624 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1625 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 1626 | "dev": true 1627 | }, 1628 | "shebang-command": { 1629 | "version": "2.0.0", 1630 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1631 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1632 | "dev": true, 1633 | "requires": { 1634 | "shebang-regex": "^3.0.0" 1635 | } 1636 | }, 1637 | "shebang-regex": { 1638 | "version": "3.0.0", 1639 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1640 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1641 | "dev": true 1642 | }, 1643 | "signal-exit": { 1644 | "version": "3.0.3", 1645 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 1646 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 1647 | "dev": true 1648 | }, 1649 | "slash": { 1650 | "version": "3.0.0", 1651 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1652 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1653 | "dev": true 1654 | }, 1655 | "slice-ansi": { 1656 | "version": "3.0.0", 1657 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", 1658 | "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", 1659 | "dev": true, 1660 | "requires": { 1661 | "ansi-styles": "^4.0.0", 1662 | "astral-regex": "^2.0.0", 1663 | "is-fullwidth-code-point": "^3.0.0" 1664 | } 1665 | }, 1666 | "sprintf-js": { 1667 | "version": "1.0.3", 1668 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1669 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1670 | "dev": true 1671 | }, 1672 | "string-argv": { 1673 | "version": "0.3.1", 1674 | "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", 1675 | "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", 1676 | "dev": true 1677 | }, 1678 | "string-width": { 1679 | "version": "4.2.0", 1680 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1681 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1682 | "dev": true, 1683 | "requires": { 1684 | "emoji-regex": "^8.0.0", 1685 | "is-fullwidth-code-point": "^3.0.0", 1686 | "strip-ansi": "^6.0.0" 1687 | } 1688 | }, 1689 | "string.prototype.trimend": { 1690 | "version": "1.0.1", 1691 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 1692 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 1693 | "dev": true, 1694 | "requires": { 1695 | "define-properties": "^1.1.3", 1696 | "es-abstract": "^1.17.5" 1697 | } 1698 | }, 1699 | "string.prototype.trimstart": { 1700 | "version": "1.0.1", 1701 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 1702 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 1703 | "dev": true, 1704 | "requires": { 1705 | "define-properties": "^1.1.3", 1706 | "es-abstract": "^1.17.5" 1707 | } 1708 | }, 1709 | "stringify-object": { 1710 | "version": "3.3.0", 1711 | "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", 1712 | "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", 1713 | "dev": true, 1714 | "requires": { 1715 | "get-own-enumerable-property-symbols": "^3.0.0", 1716 | "is-obj": "^1.0.1", 1717 | "is-regexp": "^1.0.0" 1718 | } 1719 | }, 1720 | "strip-ansi": { 1721 | "version": "6.0.0", 1722 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1723 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1724 | "dev": true, 1725 | "requires": { 1726 | "ansi-regex": "^5.0.0" 1727 | } 1728 | }, 1729 | "strip-final-newline": { 1730 | "version": "2.0.0", 1731 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 1732 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 1733 | "dev": true 1734 | }, 1735 | "strip-json-comments": { 1736 | "version": "3.0.1", 1737 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", 1738 | "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", 1739 | "dev": true 1740 | }, 1741 | "supports-color": { 1742 | "version": "7.1.0", 1743 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 1744 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 1745 | "dev": true, 1746 | "requires": { 1747 | "has-flag": "^4.0.0" 1748 | } 1749 | }, 1750 | "through": { 1751 | "version": "2.3.8", 1752 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1753 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1754 | "dev": true 1755 | }, 1756 | "to-regex-range": { 1757 | "version": "5.0.1", 1758 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1759 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1760 | "dev": true, 1761 | "requires": { 1762 | "is-number": "^7.0.0" 1763 | } 1764 | }, 1765 | "tslib": { 1766 | "version": "2.0.0", 1767 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz", 1768 | "integrity": "sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==", 1769 | "dev": true 1770 | }, 1771 | "tslint": { 1772 | "version": "6.1.3", 1773 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", 1774 | "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", 1775 | "dev": true, 1776 | "requires": { 1777 | "@babel/code-frame": "^7.0.0", 1778 | "builtin-modules": "^1.1.1", 1779 | "chalk": "^2.3.0", 1780 | "commander": "^2.12.1", 1781 | "diff": "^4.0.1", 1782 | "glob": "^7.1.1", 1783 | "js-yaml": "^3.13.1", 1784 | "minimatch": "^3.0.4", 1785 | "mkdirp": "^0.5.3", 1786 | "resolve": "^1.3.2", 1787 | "semver": "^5.3.0", 1788 | "tslib": "^1.13.0", 1789 | "tsutils": "^2.29.0" 1790 | }, 1791 | "dependencies": { 1792 | "ansi-styles": { 1793 | "version": "3.2.1", 1794 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1795 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1796 | "dev": true, 1797 | "requires": { 1798 | "color-convert": "^1.9.0" 1799 | } 1800 | }, 1801 | "chalk": { 1802 | "version": "2.4.2", 1803 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1804 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1805 | "dev": true, 1806 | "requires": { 1807 | "ansi-styles": "^3.2.1", 1808 | "escape-string-regexp": "^1.0.5", 1809 | "supports-color": "^5.3.0" 1810 | } 1811 | }, 1812 | "color-convert": { 1813 | "version": "1.9.3", 1814 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1815 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1816 | "dev": true, 1817 | "requires": { 1818 | "color-name": "1.1.3" 1819 | } 1820 | }, 1821 | "color-name": { 1822 | "version": "1.1.3", 1823 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1824 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1825 | "dev": true 1826 | }, 1827 | "commander": { 1828 | "version": "2.20.3", 1829 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1830 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1831 | "dev": true 1832 | }, 1833 | "has-flag": { 1834 | "version": "3.0.0", 1835 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1836 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1837 | "dev": true 1838 | }, 1839 | "supports-color": { 1840 | "version": "5.5.0", 1841 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1842 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1843 | "dev": true, 1844 | "requires": { 1845 | "has-flag": "^3.0.0" 1846 | } 1847 | }, 1848 | "tslib": { 1849 | "version": "1.13.0", 1850 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 1851 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", 1852 | "dev": true 1853 | } 1854 | } 1855 | }, 1856 | "tslint-config-prettier": { 1857 | "version": "1.18.0", 1858 | "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", 1859 | "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", 1860 | "dev": true 1861 | }, 1862 | "tsutils": { 1863 | "version": "2.29.0", 1864 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", 1865 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", 1866 | "dev": true, 1867 | "requires": { 1868 | "tslib": "^1.8.1" 1869 | }, 1870 | "dependencies": { 1871 | "tslib": { 1872 | "version": "1.13.0", 1873 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 1874 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", 1875 | "dev": true 1876 | } 1877 | } 1878 | }, 1879 | "type-detect": { 1880 | "version": "4.0.8", 1881 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 1882 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 1883 | "dev": true 1884 | }, 1885 | "type-fest": { 1886 | "version": "0.11.0", 1887 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 1888 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", 1889 | "dev": true 1890 | }, 1891 | "typescript": { 1892 | "version": "3.9.7", 1893 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", 1894 | "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", 1895 | "dev": true 1896 | }, 1897 | "validator": { 1898 | "version": "13.0.0", 1899 | "resolved": "https://registry.npmjs.org/validator/-/validator-13.0.0.tgz", 1900 | "integrity": "sha512-anYx5fURbgF04lQV18nEQWZ/3wHGnxiKdG4aL8J+jEDsm98n/sU/bey+tYk6tnGJzm7ioh5FoqrAiQ6m03IgaA==", 1901 | "dev": true 1902 | }, 1903 | "which": { 1904 | "version": "2.0.2", 1905 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1906 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1907 | "dev": true, 1908 | "requires": { 1909 | "isexe": "^2.0.0" 1910 | } 1911 | }, 1912 | "which-module": { 1913 | "version": "2.0.0", 1914 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1915 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 1916 | "dev": true 1917 | }, 1918 | "which-pm-runs": { 1919 | "version": "1.0.0", 1920 | "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", 1921 | "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", 1922 | "dev": true 1923 | }, 1924 | "wide-align": { 1925 | "version": "1.1.3", 1926 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 1927 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 1928 | "dev": true, 1929 | "requires": { 1930 | "string-width": "^1.0.2 || 2" 1931 | }, 1932 | "dependencies": { 1933 | "ansi-regex": { 1934 | "version": "3.0.0", 1935 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1936 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1937 | "dev": true 1938 | }, 1939 | "is-fullwidth-code-point": { 1940 | "version": "2.0.0", 1941 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1942 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1943 | "dev": true 1944 | }, 1945 | "string-width": { 1946 | "version": "2.1.1", 1947 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1948 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1949 | "dev": true, 1950 | "requires": { 1951 | "is-fullwidth-code-point": "^2.0.0", 1952 | "strip-ansi": "^4.0.0" 1953 | } 1954 | }, 1955 | "strip-ansi": { 1956 | "version": "4.0.0", 1957 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1958 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1959 | "dev": true, 1960 | "requires": { 1961 | "ansi-regex": "^3.0.0" 1962 | } 1963 | } 1964 | } 1965 | }, 1966 | "workerpool": { 1967 | "version": "6.0.0", 1968 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", 1969 | "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", 1970 | "dev": true 1971 | }, 1972 | "wrap-ansi": { 1973 | "version": "6.2.0", 1974 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 1975 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 1976 | "dev": true, 1977 | "requires": { 1978 | "ansi-styles": "^4.0.0", 1979 | "string-width": "^4.1.0", 1980 | "strip-ansi": "^6.0.0" 1981 | } 1982 | }, 1983 | "wrappy": { 1984 | "version": "1.0.2", 1985 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1986 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1987 | "dev": true 1988 | }, 1989 | "y18n": { 1990 | "version": "4.0.0", 1991 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", 1992 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", 1993 | "dev": true 1994 | }, 1995 | "yaml": { 1996 | "version": "1.10.0", 1997 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", 1998 | "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", 1999 | "dev": true 2000 | }, 2001 | "yargs": { 2002 | "version": "13.3.2", 2003 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", 2004 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", 2005 | "dev": true, 2006 | "requires": { 2007 | "cliui": "^5.0.0", 2008 | "find-up": "^3.0.0", 2009 | "get-caller-file": "^2.0.1", 2010 | "require-directory": "^2.1.1", 2011 | "require-main-filename": "^2.0.0", 2012 | "set-blocking": "^2.0.0", 2013 | "string-width": "^3.0.0", 2014 | "which-module": "^2.0.0", 2015 | "y18n": "^4.0.0", 2016 | "yargs-parser": "^13.1.2" 2017 | }, 2018 | "dependencies": { 2019 | "ansi-regex": { 2020 | "version": "4.1.0", 2021 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 2022 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 2023 | "dev": true 2024 | }, 2025 | "emoji-regex": { 2026 | "version": "7.0.3", 2027 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 2028 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 2029 | "dev": true 2030 | }, 2031 | "find-up": { 2032 | "version": "3.0.0", 2033 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 2034 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 2035 | "dev": true, 2036 | "requires": { 2037 | "locate-path": "^3.0.0" 2038 | } 2039 | }, 2040 | "is-fullwidth-code-point": { 2041 | "version": "2.0.0", 2042 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2043 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2044 | "dev": true 2045 | }, 2046 | "locate-path": { 2047 | "version": "3.0.0", 2048 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 2049 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 2050 | "dev": true, 2051 | "requires": { 2052 | "p-locate": "^3.0.0", 2053 | "path-exists": "^3.0.0" 2054 | } 2055 | }, 2056 | "p-locate": { 2057 | "version": "3.0.0", 2058 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 2059 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 2060 | "dev": true, 2061 | "requires": { 2062 | "p-limit": "^2.0.0" 2063 | } 2064 | }, 2065 | "path-exists": { 2066 | "version": "3.0.0", 2067 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2068 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 2069 | "dev": true 2070 | }, 2071 | "string-width": { 2072 | "version": "3.1.0", 2073 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2074 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2075 | "dev": true, 2076 | "requires": { 2077 | "emoji-regex": "^7.0.1", 2078 | "is-fullwidth-code-point": "^2.0.0", 2079 | "strip-ansi": "^5.1.0" 2080 | } 2081 | }, 2082 | "strip-ansi": { 2083 | "version": "5.2.0", 2084 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2085 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2086 | "dev": true, 2087 | "requires": { 2088 | "ansi-regex": "^4.1.0" 2089 | } 2090 | } 2091 | } 2092 | }, 2093 | "yargs-parser": { 2094 | "version": "13.1.2", 2095 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", 2096 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", 2097 | "dev": true, 2098 | "requires": { 2099 | "camelcase": "^5.0.0", 2100 | "decamelize": "^1.2.0" 2101 | } 2102 | }, 2103 | "yargs-unparser": { 2104 | "version": "1.6.1", 2105 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", 2106 | "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", 2107 | "dev": true, 2108 | "requires": { 2109 | "camelcase": "^5.3.1", 2110 | "decamelize": "^1.2.0", 2111 | "flat": "^4.1.0", 2112 | "is-plain-obj": "^1.1.0", 2113 | "yargs": "^14.2.3" 2114 | }, 2115 | "dependencies": { 2116 | "ansi-regex": { 2117 | "version": "4.1.0", 2118 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 2119 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 2120 | "dev": true 2121 | }, 2122 | "emoji-regex": { 2123 | "version": "7.0.3", 2124 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 2125 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 2126 | "dev": true 2127 | }, 2128 | "find-up": { 2129 | "version": "3.0.0", 2130 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 2131 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 2132 | "dev": true, 2133 | "requires": { 2134 | "locate-path": "^3.0.0" 2135 | } 2136 | }, 2137 | "is-fullwidth-code-point": { 2138 | "version": "2.0.0", 2139 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2140 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2141 | "dev": true 2142 | }, 2143 | "locate-path": { 2144 | "version": "3.0.0", 2145 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 2146 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 2147 | "dev": true, 2148 | "requires": { 2149 | "p-locate": "^3.0.0", 2150 | "path-exists": "^3.0.0" 2151 | } 2152 | }, 2153 | "p-locate": { 2154 | "version": "3.0.0", 2155 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 2156 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 2157 | "dev": true, 2158 | "requires": { 2159 | "p-limit": "^2.0.0" 2160 | } 2161 | }, 2162 | "path-exists": { 2163 | "version": "3.0.0", 2164 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2165 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 2166 | "dev": true 2167 | }, 2168 | "string-width": { 2169 | "version": "3.1.0", 2170 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2171 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2172 | "dev": true, 2173 | "requires": { 2174 | "emoji-regex": "^7.0.1", 2175 | "is-fullwidth-code-point": "^2.0.0", 2176 | "strip-ansi": "^5.1.0" 2177 | } 2178 | }, 2179 | "strip-ansi": { 2180 | "version": "5.2.0", 2181 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2182 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2183 | "dev": true, 2184 | "requires": { 2185 | "ansi-regex": "^4.1.0" 2186 | } 2187 | }, 2188 | "yargs": { 2189 | "version": "14.2.3", 2190 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", 2191 | "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", 2192 | "dev": true, 2193 | "requires": { 2194 | "cliui": "^5.0.0", 2195 | "decamelize": "^1.2.0", 2196 | "find-up": "^3.0.0", 2197 | "get-caller-file": "^2.0.1", 2198 | "require-directory": "^2.1.1", 2199 | "require-main-filename": "^2.0.0", 2200 | "set-blocking": "^2.0.0", 2201 | "string-width": "^3.0.0", 2202 | "which-module": "^2.0.0", 2203 | "y18n": "^4.0.0", 2204 | "yargs-parser": "^15.0.1" 2205 | } 2206 | }, 2207 | "yargs-parser": { 2208 | "version": "15.0.1", 2209 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", 2210 | "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", 2211 | "dev": true, 2212 | "requires": { 2213 | "camelcase": "^5.0.0", 2214 | "decamelize": "^1.2.0" 2215 | } 2216 | } 2217 | } 2218 | } 2219 | } 2220 | } 2221 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "class-transformer-validator", 3 | "version": "0.9.1", 4 | "scripts": { 5 | "pretest": "npm run build", 6 | "test": "mocha build/tests/index.js", 7 | "build": "tsc" 8 | }, 9 | "peerDependencies": { 10 | "class-transformer": ">=0.2.3", 11 | "class-validator": ">=0.12.0" 12 | }, 13 | "devDependencies": { 14 | "@types/chai": "^4.2.12", 15 | "@types/chai-as-promised": "^7.1.3", 16 | "@types/mocha": "^8.0.2", 17 | "chai": "^4.2.0", 18 | "chai-as-promised": "^7.1.1", 19 | "class-transformer": "^0.3.1", 20 | "class-validator": "^0.12.2", 21 | "husky": "^4.2.5", 22 | "lint-staged": "^10.2.11", 23 | "mocha": "^8.1.1", 24 | "prettier": "^2.0.5", 25 | "tslint": "^6.1.3", 26 | "tslint-config-prettier": "^1.18.0", 27 | "typescript": "^3.9.7" 28 | }, 29 | "husky": { 30 | "hooks": { 31 | "pre-commit": "lint-staged" 32 | } 33 | }, 34 | "lint-staged": { 35 | "{src}/**/*.ts": [ 36 | "tslint --fix", 37 | "prettier --write", 38 | "git add" 39 | ] 40 | }, 41 | "main": "index.js", 42 | "types": "index.d.ts", 43 | "author": { 44 | "name": "Michał Lytek", 45 | "url": "https://github.com/MichalLytek" 46 | }, 47 | "description": "A simple wrapper around class-transformer and class-validator which provides nice and programmer-friendly API.", 48 | "readmeFilename": "README.md", 49 | "license": "MIT", 50 | "repository": { 51 | "type": "git", 52 | "url": "https://github.com/MichalLytek/class-transformer-validator.git" 53 | }, 54 | "bugs": { 55 | "url": "https://github.com/MichalLytek/class-transformer-validator/issues" 56 | }, 57 | "tags": [ 58 | "class-validator", 59 | "validator", 60 | "validation", 61 | "typescript-validator", 62 | "class-transformer", 63 | "serialization", 64 | "deserialization", 65 | "serializer", 66 | "typescript", 67 | "object-to-class", 68 | "typescript-serializer" 69 | ], 70 | "keywords": [ 71 | "class-validator", 72 | "validator", 73 | "validation", 74 | "typescript-validator", 75 | "class-transformer", 76 | "serialization", 77 | "deserialization", 78 | "serializer", 79 | "typescript", 80 | "object-to-class", 81 | "typescript-serializer" 82 | ], 83 | "private": true 84 | } 85 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | validate, 3 | validateSync, 4 | validateOrReject, 5 | ValidatorOptions, 6 | } from "class-validator"; 7 | import { plainToClass, ClassTransformOptions } from "class-transformer"; 8 | 9 | export type ClassType = new (...args: any[]) => T; 10 | 11 | export interface TransformValidationOptions { 12 | validator?: ValidatorOptions; 13 | transformer?: ClassTransformOptions; 14 | } 15 | 16 | /** 17 | * Asynchronously converts JSON string to class (constructor) object. 18 | * Reject the promise if the object parsed from string doesn't pass validation. 19 | * 20 | * @param {ClassType} classType The Class to parse and convert JSON to 21 | * @param {string} jsonString The string containing JSON 22 | * @param {TransformValidationOptions} [options] Optional options object for class-validator and class-transformer 23 | * @returns {Promise} Promise of object of given class T or array of objects given class T 24 | */ 25 | export function transformAndValidate( 26 | classType: ClassType, 27 | jsonString: string, 28 | options?: TransformValidationOptions, 29 | ): Promise; 30 | /** 31 | * Asynchronously converts array of plain objects to array of class (constructor) objects. 32 | * Reject the promise if any of the objects in array doesn't pass validation. 33 | * 34 | * @param {ClassType} classType The Class to convert object to 35 | * @param {object} array The array of objects to instantiate and validate 36 | * @param {TransformValidationOptions} [options] Optional options object for class-validator and class-transformer 37 | * @returns {Promise} Promise of object of given class T 38 | */ 39 | export function transformAndValidate( 40 | classType: ClassType, 41 | array: object[], 42 | options?: TransformValidationOptions, 43 | ): Promise; 44 | /** 45 | * Asynchronously converts plain object to class (constructor) object. 46 | * Reject the promise if the object doesn't pass validation. 47 | * 48 | * @param {ClassType} classType The Class to convert object to 49 | * @param {object} object The object to instantiate and validate 50 | * @param {TransformValidationOptions} [options] Optional options object for class-validator and class-transformer 51 | * @returns {Promise} Promise of object of given class T 52 | */ 53 | export function transformAndValidate( 54 | classType: ClassType, 55 | object: object, 56 | options?: TransformValidationOptions, 57 | ): Promise; 58 | 59 | export function transformAndValidate( 60 | classType: ClassType, 61 | somethingToTransform: string | object | object[], 62 | options?: TransformValidationOptions, 63 | ): Promise { 64 | return new Promise((resolve, reject) => { 65 | let object: object; 66 | if (typeof somethingToTransform === "string") { 67 | object = JSON.parse(somethingToTransform); 68 | } else if ( 69 | somethingToTransform != null && 70 | typeof somethingToTransform === "object" 71 | ) { 72 | object = somethingToTransform; 73 | } else { 74 | return reject( 75 | new Error( 76 | "Incorrect object param type! Only string, plain object and array of plain objects are valid.", 77 | ), 78 | ); 79 | } 80 | 81 | const classObject = plainToClass( 82 | classType, 83 | object, 84 | options ? options.transformer : void 0, 85 | ); 86 | if (Array.isArray(classObject)) { 87 | Promise.all( 88 | classObject.map(objectElement => 89 | validate(objectElement, options ? options.validator : void 0), 90 | ), 91 | ).then(errors => 92 | errors.every(error => error.length === 0) 93 | ? resolve(classObject) 94 | : reject(errors), 95 | ); 96 | } else { 97 | validateOrReject(classObject, options ? options.validator : void 0) 98 | .then(() => resolve(classObject)) 99 | .catch(reject); 100 | } 101 | }); 102 | } 103 | 104 | /** 105 | * Synchronously converts JSON string to class (constructor) object. 106 | * Throws error if the object parsed from string doesn't pass validation. 107 | * 108 | * @param {ClassType} classType The Class to parse and convert JSON to 109 | * @param {string} jsonString The string containing JSON 110 | * @param {TransformValidationOptions} [options] Optional options object for class-validator and class-transformer 111 | * @returns {T|T[]} Object of given class T or array of objects given class T 112 | */ 113 | export function transformAndValidateSync( 114 | classType: ClassType, 115 | jsonString: string, 116 | options?: TransformValidationOptions, 117 | ): T | T[]; 118 | /** 119 | * Synchronously converts array of plain objects to array of class (constructor) objects. 120 | * Throws error if any of the objects in array doesn't pass validation. 121 | * 122 | * @param {ClassType} classType The Class to convert object to 123 | * @param {object} array The array of objects to instantiate and validate 124 | * @param {TransformValidationOptions} [options] Optional options object for class-validator and class-transformer 125 | * @returns {T[]} Array of objects of given class T 126 | */ 127 | export function transformAndValidateSync( 128 | classType: ClassType, 129 | array: object[], 130 | options?: TransformValidationOptions, 131 | ): T[]; 132 | /** 133 | * Synchronously converts plain object to class (constructor) object. 134 | * Throws error if the object doesn't pass validation. 135 | * 136 | * @param {ClassType} classType The Class to convert object to 137 | * @param {object} object The object to instantiate and validate 138 | * @param {TransformValidationOptions} [options] Optional options object for class-validator and class-transformer 139 | * @returns {T} Object of given class T 140 | */ 141 | export function transformAndValidateSync( 142 | classType: ClassType, 143 | object: object, 144 | options?: TransformValidationOptions, 145 | ): T; 146 | 147 | export function transformAndValidateSync( 148 | classType: ClassType, 149 | somethingToTransform: string | object | object[], 150 | options?: TransformValidationOptions, 151 | ): T { 152 | let object: object; 153 | if (typeof somethingToTransform === "string") { 154 | object = JSON.parse(somethingToTransform); 155 | } else if ( 156 | somethingToTransform != null && 157 | typeof somethingToTransform === "object" 158 | ) { 159 | object = somethingToTransform; 160 | } else { 161 | throw new Error( 162 | "Incorrect object param type! Only string, plain object and array of plain objects are valid.", 163 | ); 164 | } 165 | 166 | const classObject = plainToClass( 167 | classType, 168 | object, 169 | options ? options.transformer : void 0, 170 | ); 171 | if (Array.isArray(classObject)) { 172 | const errorsArray = classObject.map(objectElement => 173 | validateSync(objectElement, options ? options.validator : void 0), 174 | ); 175 | if (errorsArray.some(errors => errors.length !== 0)) { 176 | throw errorsArray; 177 | } 178 | return classObject; 179 | } else { 180 | const errors = validateSync( 181 | classObject, 182 | options ? options.validator : void 0, 183 | ); 184 | if (errors.length) { 185 | throw errors; 186 | } 187 | return classObject; 188 | } 189 | } 190 | -------------------------------------------------------------------------------- /src/tests/index.ts: -------------------------------------------------------------------------------- 1 | import { ValidationError, IsEmail } from "class-validator"; 2 | import { expect, use } from "chai"; 3 | import chaiAsPromised from "chai-as-promised"; 4 | use(chaiAsPromised); 5 | 6 | import { transformAndValidate, transformAndValidateSync } from "../index"; 7 | 8 | class User { 9 | @IsEmail() 10 | public email!: string; 11 | 12 | public greet(): string { 13 | return "Greeting"; 14 | } 15 | } 16 | 17 | describe("transformAndValidate()", () => { 18 | let user: User; 19 | const rejectMessage = 20 | "Incorrect object param type! Only string, plain object and array of plain objects are valid."; 21 | 22 | beforeEach(() => { 23 | user = { 24 | email: "test@test.com", 25 | } as User; 26 | }); 27 | 28 | it("should successfully transform and validate User plain object", async () => { 29 | const transformedUser: User = await transformAndValidate(User, user); 30 | 31 | expect(transformedUser).to.exist; 32 | expect(transformedUser.email).to.equals("test@test.com"); 33 | expect(transformedUser.greet()).to.equals("Greeting"); 34 | }); 35 | 36 | it("should successfully transform and validate JSON with User object", async () => { 37 | const userJson: string = JSON.stringify(user); 38 | 39 | const transformedUser = (await transformAndValidate( 40 | User, 41 | userJson, 42 | )) as User; 43 | 44 | expect(transformedUser).to.exist; 45 | expect(transformedUser.email).to.equals("test@test.com"); 46 | expect(transformedUser.greet()).to.equals("Greeting"); 47 | }); 48 | 49 | it("should successfully transform and validate JSON with array of Users", async () => { 50 | const userJson: string = JSON.stringify([user]); 51 | 52 | const transformedUsers = (await transformAndValidate( 53 | User, 54 | userJson, 55 | )) as User[]; 56 | 57 | expect(transformedUsers).to.exist; 58 | expect(transformedUsers).to.be.an.instanceof(Array); 59 | expect(transformedUsers).to.have.lengthOf(1); 60 | expect(transformedUsers[0].email).to.equals("test@test.com"); 61 | expect(transformedUsers[0].greet()).to.equals("Greeting"); 62 | }); 63 | 64 | it("should successfully transform and validate array of User objects", async () => { 65 | const users = [user, user, user]; 66 | 67 | const transformedUsers: User[] = await transformAndValidate(User, users); 68 | 69 | expect(transformedUsers).to.exist; 70 | expect(transformedUsers).to.have.lengthOf(3); 71 | expect(transformedUsers[0].email).to.equals("test@test.com"); 72 | expect(transformedUsers[1].greet()).to.equals("Greeting"); 73 | }); 74 | 75 | it("should throw ValidationError array when object property is not passing validation", async () => { 76 | const sampleUser = { 77 | email: "test@test", 78 | } as User; 79 | 80 | const error: ValidationError[] = await expect( 81 | transformAndValidate(User, sampleUser), 82 | ).to.be.rejected; 83 | 84 | expect(error).to.have.lengthOf(1); 85 | expect(error[0]).to.be.instanceOf(ValidationError); 86 | }); 87 | 88 | it("should throw ValidationError array when json's property is not passing validation", async () => { 89 | const sampleUser = { 90 | email: "test@test", 91 | } as User; 92 | const userJson: string = JSON.stringify(sampleUser); 93 | 94 | const error: ValidationError[] = await expect( 95 | transformAndValidate(User, userJson), 96 | ).to.be.rejected; 97 | 98 | expect(error).to.have.lengthOf(1); 99 | expect(error[0]).to.be.instanceOf(ValidationError); 100 | }); 101 | 102 | it("should throw array of ValidationError arrays when properties of objects from array are not passing validation", async () => { 103 | const sampleUser = { 104 | email: "test@test", 105 | } as User; 106 | const users = [sampleUser, sampleUser, sampleUser]; 107 | 108 | const error: ValidationError[][] = await expect( 109 | transformAndValidate(User, users), 110 | ).to.be.rejected; 111 | 112 | expect(error).to.have.lengthOf(users.length); 113 | expect(error[0]).to.have.lengthOf(1); 114 | expect(error[0][0]).to.be.instanceOf(ValidationError); 115 | }); 116 | 117 | it("should throw SyntaxError while parsing invalid JSON string", async () => { 118 | const userJson = JSON.stringify(user) + "error"; 119 | 120 | const error: SyntaxError = await expect( 121 | transformAndValidate(User, userJson), 122 | ).to.be.rejected; 123 | 124 | expect(error).to.be.instanceOf(SyntaxError); 125 | }); 126 | 127 | it("should throw Error when object parameter is a number", async () => { 128 | const error: Error = await expect(transformAndValidate(User, 2 as any)).to 129 | .be.rejected; 130 | 131 | expect(error).to.exist; 132 | expect(error.message).to.equals(rejectMessage); 133 | }); 134 | 135 | it("should throw Error when object parameter is a function", async () => { 136 | const func = () => ({ email: "test@test.com" }); 137 | 138 | const error: Error = await expect(transformAndValidate(User, func)).to.be 139 | .rejected; 140 | 141 | expect(error).to.exist; 142 | expect(error.message).to.equals(rejectMessage); 143 | }); 144 | 145 | it("should throw Error when object parameter is a boolean value", async () => { 146 | const error: Error = await expect(transformAndValidate(User, true as any)) 147 | .to.be.rejected; 148 | 149 | expect(error).to.exist; 150 | expect(error.message).to.equals(rejectMessage); 151 | }); 152 | 153 | it("should throw Error when object parameter is a null", async () => { 154 | const error: Error = await expect(transformAndValidate(User, null as any)) 155 | .to.be.rejected; 156 | 157 | expect(error).to.exist; 158 | expect(error.message).to.equals(rejectMessage); 159 | }); 160 | 161 | it("should throw Error when object parameter is an undefined", async () => { 162 | const error: Error = await expect(transformAndValidate(User, void 0 as any)) 163 | .to.be.rejected; 164 | 165 | expect(error).to.exist; 166 | expect(error.message).to.equals(rejectMessage); 167 | }); 168 | }); 169 | 170 | describe("transformAndValidateSync()", () => { 171 | let user: User; 172 | const rejectMessage = 173 | "Incorrect object param type! Only string, plain object and array of plain objects are valid."; 174 | 175 | beforeEach(() => { 176 | user = { 177 | email: "test@test.com", 178 | } as User; 179 | }); 180 | 181 | it("should successfully transform and validate User plain object", async () => { 182 | const transformedUser: User = transformAndValidateSync(User, user); 183 | 184 | expect(transformedUser).to.exist; 185 | expect(transformedUser.email).to.equals("test@test.com"); 186 | expect(transformedUser.greet()).to.equals("Greeting"); 187 | }); 188 | 189 | it("should successfully transform and validate JSON with User object", async () => { 190 | const userJson: string = JSON.stringify(user); 191 | 192 | const transformedUser = transformAndValidateSync(User, userJson) as User; 193 | 194 | expect(transformedUser).to.exist; 195 | expect(transformedUser.email).to.equals("test@test.com"); 196 | expect(transformedUser.greet()).to.equals("Greeting"); 197 | }); 198 | 199 | it("should successfully transform and validate JSON with array of Users", async () => { 200 | const userJson: string = JSON.stringify([user]); 201 | 202 | const transformedUsers = transformAndValidateSync(User, userJson) as User[]; 203 | 204 | expect(transformedUsers).to.exist; 205 | expect(transformedUsers).to.be.an.instanceof(Array); 206 | expect(transformedUsers).to.have.lengthOf(1); 207 | expect(transformedUsers[0].email).to.equals("test@test.com"); 208 | expect(transformedUsers[0].greet()).to.equals("Greeting"); 209 | }); 210 | 211 | it("should successfully transform and validate array of User objects", async () => { 212 | const users = [user, user, user]; 213 | 214 | const transformedUsers: User[] = transformAndValidateSync(User, users); 215 | 216 | expect(transformedUsers).to.exist; 217 | expect(transformedUsers).to.have.lengthOf(3); 218 | expect(transformedUsers[0].email).to.equals("test@test.com"); 219 | expect(transformedUsers[1].greet()).to.equals("Greeting"); 220 | }); 221 | 222 | it("should throw ValidationError array when object property is not passing validation", async () => { 223 | const sampleUser = { 224 | email: "test@test", 225 | } as User; 226 | 227 | try { 228 | transformAndValidateSync(User, sampleUser); 229 | throw new Error("error should be thrown"); 230 | } catch (error) { 231 | expect(error).to.have.lengthOf(1); 232 | expect(error[0]).to.be.instanceOf(ValidationError); 233 | } 234 | }); 235 | 236 | it("should throw ValidationError array when json's property is not passing validation", async () => { 237 | const sampleUser = { 238 | email: "test@test", 239 | } as User; 240 | const userJson: string = JSON.stringify(sampleUser); 241 | 242 | try { 243 | transformAndValidateSync(User, userJson); 244 | throw new Error("error should be thrown"); 245 | } catch (error) { 246 | expect(error).to.have.lengthOf(1); 247 | expect(error[0]).to.be.instanceOf(ValidationError); 248 | } 249 | }); 250 | 251 | it("should throw array of ValidationError arrays when properties of objects from array are not passing validation", async () => { 252 | const sampleUser = { 253 | email: "test@test", 254 | } as User; 255 | const users = [sampleUser, sampleUser, sampleUser]; 256 | 257 | try { 258 | transformAndValidateSync(User, users); 259 | throw new Error("error should be thrown"); 260 | } catch (error) { 261 | expect(error).to.have.lengthOf(users.length); 262 | expect(error[0]).to.have.lengthOf(1); 263 | expect(error[0][0]).to.be.instanceOf(ValidationError); 264 | } 265 | }); 266 | 267 | it("should throw SyntaxError while parsing invalid JSON string", async () => { 268 | const userJson = JSON.stringify(user) + "error"; 269 | 270 | try { 271 | transformAndValidateSync(User, userJson); 272 | throw new Error("error should be thrown"); 273 | } catch (error) { 274 | expect(error).to.be.instanceOf(SyntaxError); 275 | } 276 | }); 277 | 278 | it("should throw Error when object parameter is a number", async () => { 279 | try { 280 | transformAndValidateSync(User, 2 as any); 281 | throw new Error("error should be thrown"); 282 | } catch (error) { 283 | expect(error).to.exist; 284 | expect(error.message).to.equals(rejectMessage); 285 | } 286 | }); 287 | 288 | it("should throw Error when object parameter is a function", async () => { 289 | const func = () => ({ email: "test@test.com" }); 290 | 291 | try { 292 | transformAndValidateSync(User, func); 293 | throw new Error("error should be thrown"); 294 | } catch (error) { 295 | expect(error).to.exist; 296 | expect(error.message).to.equals(rejectMessage); 297 | } 298 | }); 299 | 300 | it("should throw Error when object parameter is a boolean value", async () => { 301 | try { 302 | transformAndValidateSync(User, true as any); 303 | throw new Error("error should be thrown"); 304 | } catch (error) { 305 | expect(error).to.exist; 306 | expect(error.message).to.equals(rejectMessage); 307 | } 308 | }); 309 | 310 | it("should throw Error when object parameter is a null", async () => { 311 | try { 312 | transformAndValidateSync(User, null as any); 313 | throw new Error("error should be thrown"); 314 | } catch (error) { 315 | expect(error).to.exist; 316 | expect(error.message).to.equals(rejectMessage); 317 | } 318 | }); 319 | 320 | it("should throw Error when object parameter is an undefined", async () => { 321 | try { 322 | transformAndValidateSync(User, void 0 as any); 323 | throw new Error("error should be thrown"); 324 | } catch (error) { 325 | expect(error).to.exist; 326 | expect(error.message).to.equals(rejectMessage); 327 | } 328 | }); 329 | }); 330 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | // "incremental": true, /* Enable incremental compilation */ 5 | "target": "es2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ 6 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 7 | // "lib": [], /* Specify library files to be included in the compilation. */ 8 | // "allowJs": true, /* Allow javascript files to be compiled. */ 9 | // "checkJs": true, /* Report errors in .js files. */ 10 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 11 | "declaration": true, /* Generates corresponding '.d.ts' file. */ 12 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 13 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 14 | // "outFile": "./", /* Concatenate and emit output to single file. */ 15 | "outDir": "./build", /* Redirect output structure to the directory. */ 16 | "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 17 | // "composite": true, /* Enable project compilation */ 18 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 19 | // "removeComments": true, /* Do not emit comments to output. */ 20 | // "noEmit": true, /* Do not emit outputs. */ 21 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 22 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 23 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 24 | 25 | /* Strict Type-Checking Options */ 26 | "strict": true, /* Enable all strict type-checking options. */ 27 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 28 | // "strictNullChecks": true, /* Enable strict null checks. */ 29 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 30 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 31 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 32 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 33 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 34 | 35 | /* Additional Checks */ 36 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 37 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 38 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 39 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 40 | 41 | /* Module Resolution Options */ 42 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 43 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 44 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 45 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 46 | // "typeRoots": [], /* List of folders to include type definitions from. */ 47 | // "types": [], /* Type declaration files to be included in compilation. */ 48 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 49 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 50 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 51 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 52 | 53 | /* Source Map Options */ 54 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 55 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 56 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 57 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 58 | 59 | /* Experimental Options */ 60 | "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 61 | "emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */ 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultSeverity": "error", 3 | "extends": ["tslint:recommended", "tslint-config-prettier"], 4 | "jsRules": {}, 5 | "rules": { 6 | "unified-signatures": false, 7 | "interface-name": [true, "never-prefix"], 8 | "ordered-imports": false, 9 | "no-unused-expression": false 10 | }, 11 | "rulesDirectory": [] 12 | } 13 | --------------------------------------------------------------------------------