├── .gitignore ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── src ├── index.d.ts ├── index.ts └── useReactiveForm.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | .rts2_cache_cjs 5 | .rts2_cache_esm 6 | .rts2_cache_umd 7 | .rts2_cache_system 8 | dist 9 | lib 10 | *.tgz 11 | *.idea 12 | yarn.lock 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 MichaelWebHub 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # useReactiveForm 2 | 3 | Declarative React hook for gathering and validating form data without unnecessary re-renders. 4 | 5 | **Links:** 6 | [1. Demo](https://stackblitz.com/edit/react-ts-edmmec?file=Example.tsx) 7 | [2. NPM](https://www.npmjs.com/package/use-reactive-form) 8 | [3. GitHub](https://github.com/Michaeladze/useReactiveForm) 9 | [4. Medium](https://medium.com/swlh/painless-react-form-handling-with-usereactiveform-827312878458?source=friends_link&sk=d86dfa4f1ce34549dc448296fb510dda) 10 | 11 | 12 | ### Install: 13 | ``` 14 | npm install use-reactive-form 15 | ``` 16 | ``` 17 | yarn add use-reactive-form 18 | ``` 19 | 20 | ### Usage: 21 | #### Step 1: Describe initial values and interface. 22 | ```js 23 | interface IFormData = { 24 | user: string; 25 | books: { 26 | title: string; 27 | author: string; 28 | }[] 29 | } 30 | 31 | const fields: IFormData = { 32 | user: '', 33 | books: [ 34 | { 35 | title: '', 36 | author: '', 37 | } 38 | ], 39 | } 40 | ``` 41 | #### Step 2: [Optional] Describe validation schema in Yup syntax. 42 | ```js 43 | import { array, object, string } from 'yup'; 44 | 45 | // ... 46 | 47 | const schema = object().shape({ 48 | user: string().required('This field is required') 49 | .max(20, 'Character limit exceeded'), 50 | books: array().of(object().shape({ 51 | title: string().required('This field is required'), 52 | author: string().required('This field is required'), 53 | })), 54 | }); 55 | ``` 56 | #### Step 3: Create config. 57 | ```js 58 | import { IUseReactiveForm } from 'use-reactive-form'; 59 | 60 | // ... 61 | 62 | const config: IUseReactiveForm = { 63 | fields, 64 | schema, 65 | validateOnChange: true 66 | }; 67 | ``` 68 | ##### Config keys: 69 | ```js 70 | { 71 | fields: T; // Form fields / structure 72 | deps?: any[]; // Array of dependencies that trigger re-render 73 | schema?: any; // Validation schema 74 | separator?: string; // Separator for name property of inputs. _ is set by default 75 | validateOnChange?: boolean; // Validate on input change 76 | actionOnChange?: (values: T) => void; // Fire function on input change 77 | updateTriggers? string[]; // Array of name attributes whose change triggers re-render 78 | } 79 | ``` 80 | #### Step 4: Use Hook 81 | ```js 82 | const { values, ref, update, validate, clear } = useReactiveForm(config); 83 | 84 | /** 85 | values - object with current form state 86 | ref - reference to
tag 87 | errors - object of errors after validation 88 | validate() - function which validates the form 89 | clear() - function which clears form values form and errors 90 | update() - function which re-renders form. It is needed when you dynamically add/remove fields. 91 | **/ 92 | ``` 93 | #### Step 5: Connect hook to the form. 94 | ```js 95 | const onSubmit = (e: React.FormEvent) => { 96 | e.preventDefault(); 97 | if (validate()) { 98 | console.log(values); 99 | } else { 100 | console.log(errors); 101 | } 102 | }; 103 | 104 | return ( 105 | 106 | 107 |
108 | 109 | { errors.user.error &&

{errors.user.error}

} 110 |
111 | 112 | { 113 | values.books.map((b, i: number) => ( 114 |
115 | 116 | 117 |
118 | )) 119 | } 120 | 121 | 122 | 123 |
124 | ) 125 | ``` 126 | Notice, that you have to describe `name` attribute as a path to the key in your form object. 127 | Instead of common separators (`.`, `[]`) use `_` or your separator described in `config`. 128 | 129 | To get error message use `errors`. It is an object with the same structure as your 130 | form object, but instead of just values, it contains object `{ value: string, error: string }`. 131 | Therefore, error message for `user` field located in `errors.user.error`. 132 | 133 | Any action triggered on the `` will provide it with one of the following classes: `touched`, `dirty` or `invalid`. 134 | ___ 135 | #### Dynamic fields. 136 | 137 | If you want to add some fields dynamically, you need to use `update()` function. 138 | Let's say you want to add a new book. You will need to copy `values` and push a new book object to the `values.books` array. 139 | ```js 140 | const addBook = () => { 141 | update({ 142 | ...values, 143 | books: [...values.books, { 144 | title: '', 145 | author: '' 146 | }] 147 | }); 148 | }; 149 | 150 | 151 | ``` 152 | ___ 153 | #### Action on input change. 154 | `actionOnChange` is a parameter, which you may want to set to `true` when you have to fire 155 | a function when any of the inputs value changes. It may be desirable when you submit form dynamically. 156 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "use-reactive-form", 3 | "version": "1.1.8", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.10.4", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", 10 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.4" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.10.4", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 19 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.10.4", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 25 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.10.4", 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 | "@iarna/toml": { 86 | "version": "2.2.5", 87 | "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", 88 | "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", 89 | "dev": true 90 | }, 91 | "@nodelib/fs.scandir": { 92 | "version": "2.1.3", 93 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", 94 | "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", 95 | "dev": true, 96 | "requires": { 97 | "@nodelib/fs.stat": "2.0.3", 98 | "run-parallel": "^1.1.9" 99 | } 100 | }, 101 | "@nodelib/fs.stat": { 102 | "version": "2.0.3", 103 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", 104 | "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", 105 | "dev": true 106 | }, 107 | "@nodelib/fs.walk": { 108 | "version": "1.2.4", 109 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", 110 | "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", 111 | "dev": true, 112 | "requires": { 113 | "@nodelib/fs.scandir": "2.1.3", 114 | "fastq": "^1.6.0" 115 | } 116 | }, 117 | "@octokit/auth-token": { 118 | "version": "2.4.2", 119 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz", 120 | "integrity": "sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ==", 121 | "dev": true, 122 | "requires": { 123 | "@octokit/types": "^5.0.0" 124 | } 125 | }, 126 | "@octokit/core": { 127 | "version": "3.1.2", 128 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.1.2.tgz", 129 | "integrity": "sha512-AInOFULmwOa7+NFi9F8DlDkm5qtZVmDQayi7TUgChE3yeIGPq0Y+6cAEXPexQ3Ea+uZy66hKEazR7DJyU+4wfw==", 130 | "dev": true, 131 | "requires": { 132 | "@octokit/auth-token": "^2.4.0", 133 | "@octokit/graphql": "^4.3.1", 134 | "@octokit/request": "^5.4.0", 135 | "@octokit/types": "^5.0.0", 136 | "before-after-hook": "^2.1.0", 137 | "universal-user-agent": "^6.0.0" 138 | } 139 | }, 140 | "@octokit/endpoint": { 141 | "version": "6.0.5", 142 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.5.tgz", 143 | "integrity": "sha512-70K5u6zd45ItOny6aHQAsea8HHQjlQq85yqOMe+Aj8dkhN2qSJ9T+Q3YjUjEYfPRBcuUWNgMn62DQnP/4LAIiQ==", 144 | "dev": true, 145 | "requires": { 146 | "@octokit/types": "^5.0.0", 147 | "is-plain-object": "^4.0.0", 148 | "universal-user-agent": "^6.0.0" 149 | } 150 | }, 151 | "@octokit/graphql": { 152 | "version": "4.5.3", 153 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.3.tgz", 154 | "integrity": "sha512-JyYvi3j2tOb5ofASEpcg1Advs07H+Ag+I+ez7buuZfNVAmh1IYcDTuxd4gnYH8S2PSGu+f5IdDGxMmkK+5zsdA==", 155 | "dev": true, 156 | "requires": { 157 | "@octokit/request": "^5.3.0", 158 | "@octokit/types": "^5.0.0", 159 | "universal-user-agent": "^6.0.0" 160 | } 161 | }, 162 | "@octokit/plugin-paginate-rest": { 163 | "version": "2.3.0", 164 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.3.0.tgz", 165 | "integrity": "sha512-Ye2ZJreP0ZlqJQz8fz+hXvrEAEYK4ay7br1eDpWzr6j76VXs/gKqxFcH8qRzkB3fo/2xh4Vy9VtGii4ZDc9qlA==", 166 | "dev": true, 167 | "requires": { 168 | "@octokit/types": "^5.2.0" 169 | } 170 | }, 171 | "@octokit/plugin-request-log": { 172 | "version": "1.0.0", 173 | "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz", 174 | "integrity": "sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==", 175 | "dev": true 176 | }, 177 | "@octokit/plugin-rest-endpoint-methods": { 178 | "version": "4.1.2", 179 | "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.1.2.tgz", 180 | "integrity": "sha512-PTI7wpbGEZ2IR87TVh+TNWaLcgX/RsZQalFbQCq8XxYUrQ36RHyERrHSNXFy5gkWpspUAOYRSV707JJv6BhqJA==", 181 | "dev": true, 182 | "requires": { 183 | "@octokit/types": "^5.1.1", 184 | "deprecation": "^2.3.1" 185 | } 186 | }, 187 | "@octokit/request": { 188 | "version": "5.4.7", 189 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.7.tgz", 190 | "integrity": "sha512-FN22xUDP0i0uF38YMbOfx6TotpcENP5W8yJM1e/LieGXn6IoRxDMnBf7tx5RKSW4xuUZ/1P04NFZy5iY3Rax1A==", 191 | "dev": true, 192 | "requires": { 193 | "@octokit/endpoint": "^6.0.1", 194 | "@octokit/request-error": "^2.0.0", 195 | "@octokit/types": "^5.0.0", 196 | "deprecation": "^2.0.0", 197 | "is-plain-object": "^4.0.0", 198 | "node-fetch": "^2.3.0", 199 | "once": "^1.4.0", 200 | "universal-user-agent": "^6.0.0" 201 | } 202 | }, 203 | "@octokit/request-error": { 204 | "version": "2.0.2", 205 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.2.tgz", 206 | "integrity": "sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==", 207 | "dev": true, 208 | "requires": { 209 | "@octokit/types": "^5.0.1", 210 | "deprecation": "^2.0.0", 211 | "once": "^1.4.0" 212 | } 213 | }, 214 | "@octokit/rest": { 215 | "version": "18.0.3", 216 | "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.0.3.tgz", 217 | "integrity": "sha512-GubgemnLvUJlkhouTM2BtX+g/voYT/Mqh0SASGwTnLvSkW1irjt14N911/ABb6m1Hru0TwScOgFgMFggp3igfQ==", 218 | "dev": true, 219 | "requires": { 220 | "@octokit/core": "^3.0.0", 221 | "@octokit/plugin-paginate-rest": "^2.2.0", 222 | "@octokit/plugin-request-log": "^1.0.0", 223 | "@octokit/plugin-rest-endpoint-methods": "4.1.2" 224 | } 225 | }, 226 | "@octokit/types": { 227 | "version": "5.4.0", 228 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-5.4.0.tgz", 229 | "integrity": "sha512-D/uotqF69M50OIlwMqgyIg9PuLT2daOiBAYF0P40I2ekFA2ESwwBY5dxZe/UhXdPvIbNKDzuZmQrO7rMpuFbcg==", 230 | "dev": true, 231 | "requires": { 232 | "@types/node": ">= 8" 233 | } 234 | }, 235 | "@sindresorhus/is": { 236 | "version": "3.1.0", 237 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.1.0.tgz", 238 | "integrity": "sha512-n4J+zu52VdY43kdi/XdI9DzuMr1Mur8zFL5ZRG2opCans9aiFwkPxHYFEb5Xgy7n1Z4K6WfI4FpqUqsh3E8BPQ==", 239 | "dev": true 240 | }, 241 | "@szmarczak/http-timer": { 242 | "version": "4.0.5", 243 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", 244 | "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", 245 | "dev": true, 246 | "requires": { 247 | "defer-to-connect": "^2.0.0" 248 | } 249 | }, 250 | "@types/cacheable-request": { 251 | "version": "6.0.1", 252 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", 253 | "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", 254 | "dev": true, 255 | "requires": { 256 | "@types/http-cache-semantics": "*", 257 | "@types/keyv": "*", 258 | "@types/node": "*", 259 | "@types/responselike": "*" 260 | } 261 | }, 262 | "@types/color-name": { 263 | "version": "1.1.1", 264 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 265 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 266 | "dev": true 267 | }, 268 | "@types/http-cache-semantics": { 269 | "version": "4.0.0", 270 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", 271 | "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", 272 | "dev": true 273 | }, 274 | "@types/keyv": { 275 | "version": "3.1.1", 276 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", 277 | "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", 278 | "dev": true, 279 | "requires": { 280 | "@types/node": "*" 281 | } 282 | }, 283 | "@types/node": { 284 | "version": "14.0.27", 285 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz", 286 | "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==", 287 | "dev": true 288 | }, 289 | "@types/parse-json": { 290 | "version": "4.0.0", 291 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", 292 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", 293 | "dev": true 294 | }, 295 | "@types/responselike": { 296 | "version": "1.0.0", 297 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", 298 | "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", 299 | "dev": true, 300 | "requires": { 301 | "@types/node": "*" 302 | } 303 | }, 304 | "ansi-align": { 305 | "version": "3.0.0", 306 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", 307 | "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", 308 | "dev": true, 309 | "requires": { 310 | "string-width": "^3.0.0" 311 | }, 312 | "dependencies": { 313 | "ansi-regex": { 314 | "version": "4.1.0", 315 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 316 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 317 | "dev": true 318 | }, 319 | "emoji-regex": { 320 | "version": "7.0.3", 321 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 322 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 323 | "dev": true 324 | }, 325 | "is-fullwidth-code-point": { 326 | "version": "2.0.0", 327 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 328 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 329 | "dev": true 330 | }, 331 | "string-width": { 332 | "version": "3.1.0", 333 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 334 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 335 | "dev": true, 336 | "requires": { 337 | "emoji-regex": "^7.0.1", 338 | "is-fullwidth-code-point": "^2.0.0", 339 | "strip-ansi": "^5.1.0" 340 | } 341 | }, 342 | "strip-ansi": { 343 | "version": "5.2.0", 344 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 345 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 346 | "dev": true, 347 | "requires": { 348 | "ansi-regex": "^4.1.0" 349 | } 350 | } 351 | } 352 | }, 353 | "ansi-escapes": { 354 | "version": "4.3.1", 355 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 356 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 357 | "dev": true, 358 | "requires": { 359 | "type-fest": "^0.11.0" 360 | } 361 | }, 362 | "ansi-regex": { 363 | "version": "5.0.0", 364 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 365 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 366 | "dev": true 367 | }, 368 | "ansi-styles": { 369 | "version": "4.2.1", 370 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 371 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 372 | "dev": true, 373 | "requires": { 374 | "@types/color-name": "^1.1.1", 375 | "color-convert": "^2.0.1" 376 | } 377 | }, 378 | "array-union": { 379 | "version": "2.1.0", 380 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 381 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 382 | "dev": true 383 | }, 384 | "async-retry": { 385 | "version": "1.3.1", 386 | "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz", 387 | "integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==", 388 | "dev": true, 389 | "requires": { 390 | "retry": "0.12.0" 391 | } 392 | }, 393 | "asynckit": { 394 | "version": "0.4.0", 395 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 396 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 397 | "dev": true 398 | }, 399 | "balanced-match": { 400 | "version": "1.0.0", 401 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 402 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 403 | "dev": true 404 | }, 405 | "before-after-hook": { 406 | "version": "2.1.0", 407 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", 408 | "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==", 409 | "dev": true 410 | }, 411 | "boxen": { 412 | "version": "4.2.0", 413 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", 414 | "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", 415 | "dev": true, 416 | "requires": { 417 | "ansi-align": "^3.0.0", 418 | "camelcase": "^5.3.1", 419 | "chalk": "^3.0.0", 420 | "cli-boxes": "^2.2.0", 421 | "string-width": "^4.1.0", 422 | "term-size": "^2.1.0", 423 | "type-fest": "^0.8.1", 424 | "widest-line": "^3.1.0" 425 | }, 426 | "dependencies": { 427 | "chalk": { 428 | "version": "3.0.0", 429 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 430 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 431 | "dev": true, 432 | "requires": { 433 | "ansi-styles": "^4.1.0", 434 | "supports-color": "^7.1.0" 435 | } 436 | }, 437 | "type-fest": { 438 | "version": "0.8.1", 439 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 440 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 441 | "dev": true 442 | } 443 | } 444 | }, 445 | "brace-expansion": { 446 | "version": "1.1.11", 447 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 448 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 449 | "dev": true, 450 | "requires": { 451 | "balanced-match": "^1.0.0", 452 | "concat-map": "0.0.1" 453 | } 454 | }, 455 | "braces": { 456 | "version": "3.0.2", 457 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 458 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 459 | "dev": true, 460 | "requires": { 461 | "fill-range": "^7.0.1" 462 | } 463 | }, 464 | "cacheable-lookup": { 465 | "version": "5.0.3", 466 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", 467 | "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==", 468 | "dev": true 469 | }, 470 | "cacheable-request": { 471 | "version": "7.0.1", 472 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", 473 | "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", 474 | "dev": true, 475 | "requires": { 476 | "clone-response": "^1.0.2", 477 | "get-stream": "^5.1.0", 478 | "http-cache-semantics": "^4.0.0", 479 | "keyv": "^4.0.0", 480 | "lowercase-keys": "^2.0.0", 481 | "normalize-url": "^4.1.0", 482 | "responselike": "^2.0.0" 483 | }, 484 | "dependencies": { 485 | "normalize-url": { 486 | "version": "4.5.0", 487 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 488 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 489 | "dev": true 490 | } 491 | } 492 | }, 493 | "callsites": { 494 | "version": "3.1.0", 495 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 496 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 497 | "dev": true 498 | }, 499 | "camelcase": { 500 | "version": "5.3.1", 501 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 502 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 503 | "dev": true 504 | }, 505 | "chalk": { 506 | "version": "4.1.0", 507 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 508 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 509 | "dev": true, 510 | "requires": { 511 | "ansi-styles": "^4.1.0", 512 | "supports-color": "^7.1.0" 513 | } 514 | }, 515 | "changelog-filename-regex": { 516 | "version": "1.1.2", 517 | "resolved": "https://registry.npmjs.org/changelog-filename-regex/-/changelog-filename-regex-1.1.2.tgz", 518 | "integrity": "sha512-kpOfKlZ9x2UpeC4at6FAXHLKfi/JEUqUqkPCb1JUCa5FnNbJIzOHRM9RfeQ1QDcpj+Gxuc/UoHqASgmEeFDejQ==", 519 | "dev": true 520 | }, 521 | "chardet": { 522 | "version": "0.7.0", 523 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 524 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 525 | "dev": true 526 | }, 527 | "ci-info": { 528 | "version": "2.0.0", 529 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", 530 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", 531 | "dev": true 532 | }, 533 | "cli-boxes": { 534 | "version": "2.2.0", 535 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", 536 | "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==", 537 | "dev": true 538 | }, 539 | "cli-cursor": { 540 | "version": "3.1.0", 541 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 542 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 543 | "dev": true, 544 | "requires": { 545 | "restore-cursor": "^3.1.0" 546 | } 547 | }, 548 | "cli-spinners": { 549 | "version": "2.4.0", 550 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.4.0.tgz", 551 | "integrity": "sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==", 552 | "dev": true 553 | }, 554 | "cli-width": { 555 | "version": "3.0.0", 556 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", 557 | "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", 558 | "dev": true 559 | }, 560 | "clone": { 561 | "version": "1.0.4", 562 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 563 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", 564 | "dev": true 565 | }, 566 | "clone-response": { 567 | "version": "1.0.2", 568 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 569 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 570 | "dev": true, 571 | "requires": { 572 | "mimic-response": "^1.0.0" 573 | } 574 | }, 575 | "color-convert": { 576 | "version": "2.0.1", 577 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 578 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 579 | "dev": true, 580 | "requires": { 581 | "color-name": "~1.1.4" 582 | } 583 | }, 584 | "color-name": { 585 | "version": "1.1.4", 586 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 587 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 588 | "dev": true 589 | }, 590 | "combined-stream": { 591 | "version": "1.0.8", 592 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 593 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 594 | "dev": true, 595 | "requires": { 596 | "delayed-stream": "~1.0.0" 597 | } 598 | }, 599 | "concat-map": { 600 | "version": "0.0.1", 601 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 602 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 603 | "dev": true 604 | }, 605 | "configstore": { 606 | "version": "5.0.1", 607 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", 608 | "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", 609 | "dev": true, 610 | "requires": { 611 | "dot-prop": "^5.2.0", 612 | "graceful-fs": "^4.1.2", 613 | "make-dir": "^3.0.0", 614 | "unique-string": "^2.0.0", 615 | "write-file-atomic": "^3.0.0", 616 | "xdg-basedir": "^4.0.0" 617 | } 618 | }, 619 | "cosmiconfig": { 620 | "version": "6.0.0", 621 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", 622 | "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", 623 | "dev": true, 624 | "requires": { 625 | "@types/parse-json": "^4.0.0", 626 | "import-fresh": "^3.1.0", 627 | "parse-json": "^5.0.0", 628 | "path-type": "^4.0.0", 629 | "yaml": "^1.7.2" 630 | } 631 | }, 632 | "cross-spawn": { 633 | "version": "7.0.3", 634 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 635 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 636 | "dev": true, 637 | "requires": { 638 | "path-key": "^3.1.0", 639 | "shebang-command": "^2.0.0", 640 | "which": "^2.0.1" 641 | } 642 | }, 643 | "crypto-random-string": { 644 | "version": "2.0.0", 645 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", 646 | "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", 647 | "dev": true 648 | }, 649 | "debug": { 650 | "version": "4.1.1", 651 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 652 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 653 | "dev": true, 654 | "requires": { 655 | "ms": "^2.1.1" 656 | } 657 | }, 658 | "decamelize": { 659 | "version": "1.2.0", 660 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 661 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 662 | "dev": true 663 | }, 664 | "decompress-response": { 665 | "version": "6.0.0", 666 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 667 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 668 | "dev": true, 669 | "requires": { 670 | "mimic-response": "^3.1.0" 671 | }, 672 | "dependencies": { 673 | "mimic-response": { 674 | "version": "3.1.0", 675 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 676 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 677 | "dev": true 678 | } 679 | } 680 | }, 681 | "deep-extend": { 682 | "version": "0.6.0", 683 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 684 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 685 | "dev": true 686 | }, 687 | "defaults": { 688 | "version": "1.0.3", 689 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 690 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 691 | "dev": true, 692 | "requires": { 693 | "clone": "^1.0.2" 694 | } 695 | }, 696 | "defer-to-connect": { 697 | "version": "2.0.0", 698 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", 699 | "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", 700 | "dev": true 701 | }, 702 | "define-property": { 703 | "version": "1.0.0", 704 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 705 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 706 | "dev": true, 707 | "requires": { 708 | "is-descriptor": "^1.0.0" 709 | } 710 | }, 711 | "delayed-stream": { 712 | "version": "1.0.0", 713 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 714 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 715 | "dev": true 716 | }, 717 | "deprecated-obj": { 718 | "version": "1.0.1", 719 | "resolved": "https://registry.npmjs.org/deprecated-obj/-/deprecated-obj-1.0.1.tgz", 720 | "integrity": "sha512-igs766xNtF7Fv/R//gT644e6dr+bT6kJrg+qyJA9affCyvf70UUNKIUIMUSROBg1sPUrBnENPsDdDHcBLI5wFQ==", 721 | "dev": true, 722 | "requires": { 723 | "flat": "^4.1.0", 724 | "lodash": "^4.17.11" 725 | } 726 | }, 727 | "deprecation": { 728 | "version": "2.3.1", 729 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 730 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", 731 | "dev": true 732 | }, 733 | "detect-repo-changelog": { 734 | "version": "1.0.1", 735 | "resolved": "https://registry.npmjs.org/detect-repo-changelog/-/detect-repo-changelog-1.0.1.tgz", 736 | "integrity": "sha1-whCMu/CWTae8B0ZFtq0dO4CmvW0=", 737 | "dev": true, 738 | "requires": { 739 | "changelog-filename-regex": "^1.1.0", 740 | "is-regular-file": "^1.0.1", 741 | "lodash.find": "^4.6.0", 742 | "pify": "^2.3.0" 743 | } 744 | }, 745 | "dir-glob": { 746 | "version": "3.0.1", 747 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 748 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 749 | "dev": true, 750 | "requires": { 751 | "path-type": "^4.0.0" 752 | } 753 | }, 754 | "dot-prop": { 755 | "version": "5.2.0", 756 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", 757 | "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", 758 | "dev": true, 759 | "requires": { 760 | "is-obj": "^2.0.0" 761 | } 762 | }, 763 | "duplexer3": { 764 | "version": "0.1.4", 765 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 766 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 767 | "dev": true 768 | }, 769 | "emoji-regex": { 770 | "version": "8.0.0", 771 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 772 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 773 | "dev": true 774 | }, 775 | "end-of-stream": { 776 | "version": "1.4.4", 777 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 778 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 779 | "dev": true, 780 | "requires": { 781 | "once": "^1.4.0" 782 | } 783 | }, 784 | "error-ex": { 785 | "version": "1.3.2", 786 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 787 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 788 | "dev": true, 789 | "requires": { 790 | "is-arrayish": "^0.2.1" 791 | } 792 | }, 793 | "escape-goat": { 794 | "version": "2.1.1", 795 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", 796 | "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", 797 | "dev": true 798 | }, 799 | "escape-string-regexp": { 800 | "version": "1.0.5", 801 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 802 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 803 | "dev": true 804 | }, 805 | "execa": { 806 | "version": "4.0.3", 807 | "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", 808 | "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", 809 | "dev": true, 810 | "requires": { 811 | "cross-spawn": "^7.0.0", 812 | "get-stream": "^5.0.0", 813 | "human-signals": "^1.1.1", 814 | "is-stream": "^2.0.0", 815 | "merge-stream": "^2.0.0", 816 | "npm-run-path": "^4.0.0", 817 | "onetime": "^5.1.0", 818 | "signal-exit": "^3.0.2", 819 | "strip-final-newline": "^2.0.0" 820 | } 821 | }, 822 | "external-editor": { 823 | "version": "3.1.0", 824 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 825 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 826 | "dev": true, 827 | "requires": { 828 | "chardet": "^0.7.0", 829 | "iconv-lite": "^0.4.24", 830 | "tmp": "^0.0.33" 831 | } 832 | }, 833 | "fast-glob": { 834 | "version": "3.2.4", 835 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", 836 | "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", 837 | "dev": true, 838 | "requires": { 839 | "@nodelib/fs.stat": "^2.0.2", 840 | "@nodelib/fs.walk": "^1.2.3", 841 | "glob-parent": "^5.1.0", 842 | "merge2": "^1.3.0", 843 | "micromatch": "^4.0.2", 844 | "picomatch": "^2.2.1" 845 | } 846 | }, 847 | "fastq": { 848 | "version": "1.8.0", 849 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", 850 | "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", 851 | "dev": true, 852 | "requires": { 853 | "reusify": "^1.0.4" 854 | } 855 | }, 856 | "figures": { 857 | "version": "3.2.0", 858 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 859 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 860 | "dev": true, 861 | "requires": { 862 | "escape-string-regexp": "^1.0.5" 863 | } 864 | }, 865 | "fill-range": { 866 | "version": "7.0.1", 867 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 868 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 869 | "dev": true, 870 | "requires": { 871 | "to-regex-range": "^5.0.1" 872 | } 873 | }, 874 | "find-up": { 875 | "version": "4.1.0", 876 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 877 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 878 | "dev": true, 879 | "requires": { 880 | "locate-path": "^5.0.0", 881 | "path-exists": "^4.0.0" 882 | } 883 | }, 884 | "flat": { 885 | "version": "4.1.0", 886 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", 887 | "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", 888 | "dev": true, 889 | "requires": { 890 | "is-buffer": "~2.0.3" 891 | } 892 | }, 893 | "form-data": { 894 | "version": "3.0.0", 895 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", 896 | "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", 897 | "dev": true, 898 | "requires": { 899 | "asynckit": "^0.4.0", 900 | "combined-stream": "^1.0.8", 901 | "mime-types": "^2.1.12" 902 | } 903 | }, 904 | "fs.realpath": { 905 | "version": "1.0.0", 906 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 907 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 908 | "dev": true 909 | }, 910 | "get-stream": { 911 | "version": "5.2.0", 912 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 913 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 914 | "dev": true, 915 | "requires": { 916 | "pump": "^3.0.0" 917 | } 918 | }, 919 | "git-up": { 920 | "version": "4.0.2", 921 | "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz", 922 | "integrity": "sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ==", 923 | "dev": true, 924 | "requires": { 925 | "is-ssh": "^1.3.0", 926 | "parse-url": "^5.0.0" 927 | } 928 | }, 929 | "git-url-parse": { 930 | "version": "11.1.2", 931 | "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.1.2.tgz", 932 | "integrity": "sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ==", 933 | "dev": true, 934 | "requires": { 935 | "git-up": "^4.0.0" 936 | } 937 | }, 938 | "glob": { 939 | "version": "7.1.6", 940 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 941 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 942 | "dev": true, 943 | "requires": { 944 | "fs.realpath": "^1.0.0", 945 | "inflight": "^1.0.4", 946 | "inherits": "2", 947 | "minimatch": "^3.0.4", 948 | "once": "^1.3.0", 949 | "path-is-absolute": "^1.0.0" 950 | } 951 | }, 952 | "glob-parent": { 953 | "version": "5.1.1", 954 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 955 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 956 | "dev": true, 957 | "requires": { 958 | "is-glob": "^4.0.1" 959 | } 960 | }, 961 | "global-dirs": { 962 | "version": "2.0.1", 963 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", 964 | "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", 965 | "dev": true, 966 | "requires": { 967 | "ini": "^1.3.5" 968 | } 969 | }, 970 | "globby": { 971 | "version": "11.0.1", 972 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", 973 | "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", 974 | "dev": true, 975 | "requires": { 976 | "array-union": "^2.1.0", 977 | "dir-glob": "^3.0.1", 978 | "fast-glob": "^3.1.1", 979 | "ignore": "^5.1.4", 980 | "merge2": "^1.3.0", 981 | "slash": "^3.0.0" 982 | } 983 | }, 984 | "got": { 985 | "version": "11.5.1", 986 | "resolved": "https://registry.npmjs.org/got/-/got-11.5.1.tgz", 987 | "integrity": "sha512-reQEZcEBMTGnujmQ+Wm97mJs/OK6INtO6HmLI+xt3+9CvnRwWjXutUvb2mqr+Ao4Lu05Rx6+udx9sOQAmExMxA==", 988 | "dev": true, 989 | "requires": { 990 | "@sindresorhus/is": "^3.0.0", 991 | "@szmarczak/http-timer": "^4.0.5", 992 | "@types/cacheable-request": "^6.0.1", 993 | "@types/responselike": "^1.0.0", 994 | "cacheable-lookup": "^5.0.3", 995 | "cacheable-request": "^7.0.1", 996 | "decompress-response": "^6.0.0", 997 | "http2-wrapper": "^1.0.0-beta.5.0", 998 | "lowercase-keys": "^2.0.0", 999 | "p-cancelable": "^2.0.0", 1000 | "responselike": "^2.0.0" 1001 | } 1002 | }, 1003 | "graceful-fs": { 1004 | "version": "4.2.4", 1005 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 1006 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 1007 | "dev": true 1008 | }, 1009 | "has-flag": { 1010 | "version": "4.0.0", 1011 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1012 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1013 | "dev": true 1014 | }, 1015 | "has-yarn": { 1016 | "version": "2.1.0", 1017 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", 1018 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", 1019 | "dev": true 1020 | }, 1021 | "http-cache-semantics": { 1022 | "version": "4.1.0", 1023 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 1024 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 1025 | "dev": true 1026 | }, 1027 | "http2-wrapper": { 1028 | "version": "1.0.0-beta.5.2", 1029 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", 1030 | "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", 1031 | "dev": true, 1032 | "requires": { 1033 | "quick-lru": "^5.1.1", 1034 | "resolve-alpn": "^1.0.0" 1035 | } 1036 | }, 1037 | "human-signals": { 1038 | "version": "1.1.1", 1039 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", 1040 | "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", 1041 | "dev": true 1042 | }, 1043 | "iconv-lite": { 1044 | "version": "0.4.24", 1045 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1046 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1047 | "dev": true, 1048 | "requires": { 1049 | "safer-buffer": ">= 2.1.2 < 3" 1050 | } 1051 | }, 1052 | "ignore": { 1053 | "version": "5.1.8", 1054 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 1055 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 1056 | "dev": true 1057 | }, 1058 | "import-cwd": { 1059 | "version": "3.0.0", 1060 | "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", 1061 | "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", 1062 | "dev": true, 1063 | "requires": { 1064 | "import-from": "^3.0.0" 1065 | } 1066 | }, 1067 | "import-fresh": { 1068 | "version": "3.2.1", 1069 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 1070 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 1071 | "dev": true, 1072 | "requires": { 1073 | "parent-module": "^1.0.0", 1074 | "resolve-from": "^4.0.0" 1075 | } 1076 | }, 1077 | "import-from": { 1078 | "version": "3.0.0", 1079 | "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", 1080 | "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", 1081 | "dev": true, 1082 | "requires": { 1083 | "resolve-from": "^5.0.0" 1084 | }, 1085 | "dependencies": { 1086 | "resolve-from": { 1087 | "version": "5.0.0", 1088 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 1089 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 1090 | "dev": true 1091 | } 1092 | } 1093 | }, 1094 | "import-lazy": { 1095 | "version": "2.1.0", 1096 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 1097 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", 1098 | "dev": true 1099 | }, 1100 | "imurmurhash": { 1101 | "version": "0.1.4", 1102 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1103 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1104 | "dev": true 1105 | }, 1106 | "inflight": { 1107 | "version": "1.0.6", 1108 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1109 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1110 | "dev": true, 1111 | "requires": { 1112 | "once": "^1.3.0", 1113 | "wrappy": "1" 1114 | } 1115 | }, 1116 | "inherits": { 1117 | "version": "2.0.4", 1118 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1119 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1120 | "dev": true 1121 | }, 1122 | "ini": { 1123 | "version": "1.3.5", 1124 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 1125 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 1126 | "dev": true 1127 | }, 1128 | "inquirer": { 1129 | "version": "7.3.3", 1130 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", 1131 | "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", 1132 | "dev": true, 1133 | "requires": { 1134 | "ansi-escapes": "^4.2.1", 1135 | "chalk": "^4.1.0", 1136 | "cli-cursor": "^3.1.0", 1137 | "cli-width": "^3.0.0", 1138 | "external-editor": "^3.0.3", 1139 | "figures": "^3.0.0", 1140 | "lodash": "^4.17.19", 1141 | "mute-stream": "0.0.8", 1142 | "run-async": "^2.4.0", 1143 | "rxjs": "^6.6.0", 1144 | "string-width": "^4.1.0", 1145 | "strip-ansi": "^6.0.0", 1146 | "through": "^2.3.6" 1147 | } 1148 | }, 1149 | "interpret": { 1150 | "version": "1.4.0", 1151 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", 1152 | "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", 1153 | "dev": true 1154 | }, 1155 | "is-accessor-descriptor": { 1156 | "version": "1.0.0", 1157 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1158 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 1159 | "dev": true, 1160 | "requires": { 1161 | "kind-of": "^6.0.0" 1162 | } 1163 | }, 1164 | "is-arrayish": { 1165 | "version": "0.2.1", 1166 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1167 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1168 | "dev": true 1169 | }, 1170 | "is-buffer": { 1171 | "version": "2.0.4", 1172 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", 1173 | "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", 1174 | "dev": true 1175 | }, 1176 | "is-ci": { 1177 | "version": "2.0.0", 1178 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", 1179 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", 1180 | "dev": true, 1181 | "requires": { 1182 | "ci-info": "^2.0.0" 1183 | } 1184 | }, 1185 | "is-data-descriptor": { 1186 | "version": "1.0.0", 1187 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1188 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 1189 | "dev": true, 1190 | "requires": { 1191 | "kind-of": "^6.0.0" 1192 | } 1193 | }, 1194 | "is-descriptor": { 1195 | "version": "1.0.2", 1196 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1197 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 1198 | "dev": true, 1199 | "requires": { 1200 | "is-accessor-descriptor": "^1.0.0", 1201 | "is-data-descriptor": "^1.0.0", 1202 | "kind-of": "^6.0.2" 1203 | } 1204 | }, 1205 | "is-extglob": { 1206 | "version": "2.1.1", 1207 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1208 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1209 | "dev": true 1210 | }, 1211 | "is-fullwidth-code-point": { 1212 | "version": "3.0.0", 1213 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1214 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1215 | "dev": true 1216 | }, 1217 | "is-glob": { 1218 | "version": "4.0.1", 1219 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1220 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1221 | "dev": true, 1222 | "requires": { 1223 | "is-extglob": "^2.1.1" 1224 | } 1225 | }, 1226 | "is-installed-globally": { 1227 | "version": "0.3.2", 1228 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", 1229 | "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", 1230 | "dev": true, 1231 | "requires": { 1232 | "global-dirs": "^2.0.1", 1233 | "is-path-inside": "^3.0.1" 1234 | } 1235 | }, 1236 | "is-interactive": { 1237 | "version": "1.0.0", 1238 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 1239 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", 1240 | "dev": true 1241 | }, 1242 | "is-npm": { 1243 | "version": "4.0.0", 1244 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", 1245 | "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", 1246 | "dev": true 1247 | }, 1248 | "is-number": { 1249 | "version": "7.0.0", 1250 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1251 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1252 | "dev": true 1253 | }, 1254 | "is-obj": { 1255 | "version": "2.0.0", 1256 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 1257 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 1258 | "dev": true 1259 | }, 1260 | "is-path-inside": { 1261 | "version": "3.0.2", 1262 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", 1263 | "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", 1264 | "dev": true 1265 | }, 1266 | "is-plain-object": { 1267 | "version": "4.1.1", 1268 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-4.1.1.tgz", 1269 | "integrity": "sha512-5Aw8LLVsDlZsETVMhoMXzqsXwQqr/0vlnBYzIXJbYo2F4yYlhLHs+Ez7Bod7IIQKWkJbJfxrWD7pA1Dw1TKrwA==", 1270 | "dev": true 1271 | }, 1272 | "is-regular-file": { 1273 | "version": "1.1.1", 1274 | "resolved": "https://registry.npmjs.org/is-regular-file/-/is-regular-file-1.1.1.tgz", 1275 | "integrity": "sha512-+1U3MZrVwC4HM6VUKk3L5fiHtNd2d9kayzEJhmQ+B+uIBPE/p8Fy8QVdkx0HIr3o9J5TOKJY40eI5GfTfBqbdA==", 1276 | "dev": true 1277 | }, 1278 | "is-ssh": { 1279 | "version": "1.3.2", 1280 | "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.2.tgz", 1281 | "integrity": "sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ==", 1282 | "dev": true, 1283 | "requires": { 1284 | "protocols": "^1.1.0" 1285 | } 1286 | }, 1287 | "is-stream": { 1288 | "version": "2.0.0", 1289 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 1290 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", 1291 | "dev": true 1292 | }, 1293 | "is-typedarray": { 1294 | "version": "1.0.0", 1295 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1296 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1297 | "dev": true 1298 | }, 1299 | "is-yarn-global": { 1300 | "version": "0.3.0", 1301 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", 1302 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", 1303 | "dev": true 1304 | }, 1305 | "isexe": { 1306 | "version": "2.0.0", 1307 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1308 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1309 | "dev": true 1310 | }, 1311 | "js-tokens": { 1312 | "version": "4.0.0", 1313 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1314 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1315 | "dev": true 1316 | }, 1317 | "json-buffer": { 1318 | "version": "3.0.1", 1319 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1320 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 1321 | "dev": true 1322 | }, 1323 | "json-parse-better-errors": { 1324 | "version": "1.0.2", 1325 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 1326 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 1327 | "dev": true 1328 | }, 1329 | "keyv": { 1330 | "version": "4.0.1", 1331 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.1.tgz", 1332 | "integrity": "sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw==", 1333 | "dev": true, 1334 | "requires": { 1335 | "json-buffer": "3.0.1" 1336 | } 1337 | }, 1338 | "kind-of": { 1339 | "version": "6.0.3", 1340 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 1341 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 1342 | "dev": true 1343 | }, 1344 | "latest-version": { 1345 | "version": "5.1.0", 1346 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", 1347 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", 1348 | "dev": true, 1349 | "requires": { 1350 | "package-json": "^6.3.0" 1351 | } 1352 | }, 1353 | "lines-and-columns": { 1354 | "version": "1.1.6", 1355 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", 1356 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", 1357 | "dev": true 1358 | }, 1359 | "locate-path": { 1360 | "version": "5.0.0", 1361 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1362 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1363 | "dev": true, 1364 | "requires": { 1365 | "p-locate": "^4.1.0" 1366 | } 1367 | }, 1368 | "lodash": { 1369 | "version": "4.17.19", 1370 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", 1371 | "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", 1372 | "dev": true 1373 | }, 1374 | "lodash.find": { 1375 | "version": "4.6.0", 1376 | "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", 1377 | "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", 1378 | "dev": true 1379 | }, 1380 | "log-symbols": { 1381 | "version": "3.0.0", 1382 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", 1383 | "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", 1384 | "dev": true, 1385 | "requires": { 1386 | "chalk": "^2.4.2" 1387 | }, 1388 | "dependencies": { 1389 | "ansi-styles": { 1390 | "version": "3.2.1", 1391 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1392 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1393 | "dev": true, 1394 | "requires": { 1395 | "color-convert": "^1.9.0" 1396 | } 1397 | }, 1398 | "chalk": { 1399 | "version": "2.4.2", 1400 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1401 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1402 | "dev": true, 1403 | "requires": { 1404 | "ansi-styles": "^3.2.1", 1405 | "escape-string-regexp": "^1.0.5", 1406 | "supports-color": "^5.3.0" 1407 | } 1408 | }, 1409 | "color-convert": { 1410 | "version": "1.9.3", 1411 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1412 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1413 | "dev": true, 1414 | "requires": { 1415 | "color-name": "1.1.3" 1416 | } 1417 | }, 1418 | "color-name": { 1419 | "version": "1.1.3", 1420 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1421 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1422 | "dev": true 1423 | }, 1424 | "has-flag": { 1425 | "version": "3.0.0", 1426 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1427 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1428 | "dev": true 1429 | }, 1430 | "supports-color": { 1431 | "version": "5.5.0", 1432 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1433 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1434 | "dev": true, 1435 | "requires": { 1436 | "has-flag": "^3.0.0" 1437 | } 1438 | } 1439 | } 1440 | }, 1441 | "lowercase-keys": { 1442 | "version": "2.0.0", 1443 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 1444 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 1445 | "dev": true 1446 | }, 1447 | "macos-release": { 1448 | "version": "2.4.1", 1449 | "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz", 1450 | "integrity": "sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg==", 1451 | "dev": true 1452 | }, 1453 | "make-dir": { 1454 | "version": "3.1.0", 1455 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1456 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1457 | "dev": true, 1458 | "requires": { 1459 | "semver": "^6.0.0" 1460 | }, 1461 | "dependencies": { 1462 | "semver": { 1463 | "version": "6.3.0", 1464 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1465 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1466 | "dev": true 1467 | } 1468 | } 1469 | }, 1470 | "merge-stream": { 1471 | "version": "2.0.0", 1472 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1473 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1474 | "dev": true 1475 | }, 1476 | "merge2": { 1477 | "version": "1.4.1", 1478 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1479 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1480 | "dev": true 1481 | }, 1482 | "micromatch": { 1483 | "version": "4.0.2", 1484 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 1485 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 1486 | "dev": true, 1487 | "requires": { 1488 | "braces": "^3.0.1", 1489 | "picomatch": "^2.0.5" 1490 | } 1491 | }, 1492 | "mime-db": { 1493 | "version": "1.44.0", 1494 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 1495 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", 1496 | "dev": true 1497 | }, 1498 | "mime-types": { 1499 | "version": "2.1.27", 1500 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 1501 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 1502 | "dev": true, 1503 | "requires": { 1504 | "mime-db": "1.44.0" 1505 | } 1506 | }, 1507 | "mimic-fn": { 1508 | "version": "2.1.0", 1509 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1510 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1511 | "dev": true 1512 | }, 1513 | "mimic-response": { 1514 | "version": "1.0.1", 1515 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1516 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1517 | "dev": true 1518 | }, 1519 | "minimatch": { 1520 | "version": "3.0.4", 1521 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1522 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1523 | "dev": true, 1524 | "requires": { 1525 | "brace-expansion": "^1.1.7" 1526 | } 1527 | }, 1528 | "minimist": { 1529 | "version": "1.2.5", 1530 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1531 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1532 | "dev": true 1533 | }, 1534 | "ms": { 1535 | "version": "2.1.2", 1536 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1537 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1538 | "dev": true 1539 | }, 1540 | "mute-stream": { 1541 | "version": "0.0.8", 1542 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 1543 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 1544 | "dev": true 1545 | }, 1546 | "nice-try": { 1547 | "version": "1.0.5", 1548 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1549 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 1550 | "dev": true 1551 | }, 1552 | "node-fetch": { 1553 | "version": "2.6.0", 1554 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", 1555 | "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", 1556 | "dev": true 1557 | }, 1558 | "normalize-url": { 1559 | "version": "3.3.0", 1560 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", 1561 | "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", 1562 | "dev": true 1563 | }, 1564 | "npm-run-path": { 1565 | "version": "4.0.1", 1566 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 1567 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 1568 | "dev": true, 1569 | "requires": { 1570 | "path-key": "^3.0.0" 1571 | } 1572 | }, 1573 | "once": { 1574 | "version": "1.4.0", 1575 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1576 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1577 | "dev": true, 1578 | "requires": { 1579 | "wrappy": "1" 1580 | } 1581 | }, 1582 | "onetime": { 1583 | "version": "5.1.2", 1584 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1585 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1586 | "dev": true, 1587 | "requires": { 1588 | "mimic-fn": "^2.1.0" 1589 | } 1590 | }, 1591 | "ora": { 1592 | "version": "4.0.5", 1593 | "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.5.tgz", 1594 | "integrity": "sha512-jCDgm9DqvRcNIAEv2wZPrh7E5PcQiDUnbnWbAfu4NGAE2ZNqPFbDixmWldy1YG2QfLeQhuiu6/h5VRrk6cG50w==", 1595 | "dev": true, 1596 | "requires": { 1597 | "chalk": "^3.0.0", 1598 | "cli-cursor": "^3.1.0", 1599 | "cli-spinners": "^2.2.0", 1600 | "is-interactive": "^1.0.0", 1601 | "log-symbols": "^3.0.0", 1602 | "mute-stream": "0.0.8", 1603 | "strip-ansi": "^6.0.0", 1604 | "wcwidth": "^1.0.1" 1605 | }, 1606 | "dependencies": { 1607 | "chalk": { 1608 | "version": "3.0.0", 1609 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 1610 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 1611 | "dev": true, 1612 | "requires": { 1613 | "ansi-styles": "^4.1.0", 1614 | "supports-color": "^7.1.0" 1615 | } 1616 | } 1617 | } 1618 | }, 1619 | "os-name": { 1620 | "version": "3.1.0", 1621 | "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", 1622 | "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", 1623 | "dev": true, 1624 | "requires": { 1625 | "macos-release": "^2.2.0", 1626 | "windows-release": "^3.1.0" 1627 | } 1628 | }, 1629 | "os-tmpdir": { 1630 | "version": "1.0.2", 1631 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1632 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1633 | "dev": true 1634 | }, 1635 | "p-cancelable": { 1636 | "version": "2.0.0", 1637 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", 1638 | "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", 1639 | "dev": true 1640 | }, 1641 | "p-finally": { 1642 | "version": "1.0.0", 1643 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1644 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 1645 | "dev": true 1646 | }, 1647 | "p-limit": { 1648 | "version": "2.3.0", 1649 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1650 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1651 | "dev": true, 1652 | "requires": { 1653 | "p-try": "^2.0.0" 1654 | } 1655 | }, 1656 | "p-locate": { 1657 | "version": "4.1.0", 1658 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1659 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1660 | "dev": true, 1661 | "requires": { 1662 | "p-limit": "^2.2.0" 1663 | } 1664 | }, 1665 | "p-try": { 1666 | "version": "2.2.0", 1667 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1668 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1669 | "dev": true 1670 | }, 1671 | "package-json": { 1672 | "version": "6.5.0", 1673 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", 1674 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", 1675 | "dev": true, 1676 | "requires": { 1677 | "got": "^9.6.0", 1678 | "registry-auth-token": "^4.0.0", 1679 | "registry-url": "^5.0.0", 1680 | "semver": "^6.2.0" 1681 | }, 1682 | "dependencies": { 1683 | "@sindresorhus/is": { 1684 | "version": "0.14.0", 1685 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 1686 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 1687 | "dev": true 1688 | }, 1689 | "@szmarczak/http-timer": { 1690 | "version": "1.1.2", 1691 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 1692 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 1693 | "dev": true, 1694 | "requires": { 1695 | "defer-to-connect": "^1.0.1" 1696 | } 1697 | }, 1698 | "cacheable-request": { 1699 | "version": "6.1.0", 1700 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 1701 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 1702 | "dev": true, 1703 | "requires": { 1704 | "clone-response": "^1.0.2", 1705 | "get-stream": "^5.1.0", 1706 | "http-cache-semantics": "^4.0.0", 1707 | "keyv": "^3.0.0", 1708 | "lowercase-keys": "^2.0.0", 1709 | "normalize-url": "^4.1.0", 1710 | "responselike": "^1.0.2" 1711 | }, 1712 | "dependencies": { 1713 | "get-stream": { 1714 | "version": "5.2.0", 1715 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 1716 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1717 | "dev": true, 1718 | "requires": { 1719 | "pump": "^3.0.0" 1720 | } 1721 | }, 1722 | "lowercase-keys": { 1723 | "version": "2.0.0", 1724 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 1725 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 1726 | "dev": true 1727 | } 1728 | } 1729 | }, 1730 | "decompress-response": { 1731 | "version": "3.3.0", 1732 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 1733 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 1734 | "dev": true, 1735 | "requires": { 1736 | "mimic-response": "^1.0.0" 1737 | } 1738 | }, 1739 | "defer-to-connect": { 1740 | "version": "1.1.3", 1741 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 1742 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 1743 | "dev": true 1744 | }, 1745 | "get-stream": { 1746 | "version": "4.1.0", 1747 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 1748 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 1749 | "dev": true, 1750 | "requires": { 1751 | "pump": "^3.0.0" 1752 | } 1753 | }, 1754 | "got": { 1755 | "version": "9.6.0", 1756 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 1757 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 1758 | "dev": true, 1759 | "requires": { 1760 | "@sindresorhus/is": "^0.14.0", 1761 | "@szmarczak/http-timer": "^1.1.2", 1762 | "cacheable-request": "^6.0.0", 1763 | "decompress-response": "^3.3.0", 1764 | "duplexer3": "^0.1.4", 1765 | "get-stream": "^4.1.0", 1766 | "lowercase-keys": "^1.0.1", 1767 | "mimic-response": "^1.0.1", 1768 | "p-cancelable": "^1.0.0", 1769 | "to-readable-stream": "^1.0.0", 1770 | "url-parse-lax": "^3.0.0" 1771 | } 1772 | }, 1773 | "json-buffer": { 1774 | "version": "3.0.0", 1775 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1776 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 1777 | "dev": true 1778 | }, 1779 | "keyv": { 1780 | "version": "3.1.0", 1781 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 1782 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 1783 | "dev": true, 1784 | "requires": { 1785 | "json-buffer": "3.0.0" 1786 | } 1787 | }, 1788 | "lowercase-keys": { 1789 | "version": "1.0.1", 1790 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1791 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1792 | "dev": true 1793 | }, 1794 | "normalize-url": { 1795 | "version": "4.5.0", 1796 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 1797 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 1798 | "dev": true 1799 | }, 1800 | "p-cancelable": { 1801 | "version": "1.1.0", 1802 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 1803 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 1804 | "dev": true 1805 | }, 1806 | "responselike": { 1807 | "version": "1.0.2", 1808 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 1809 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 1810 | "dev": true, 1811 | "requires": { 1812 | "lowercase-keys": "^1.0.0" 1813 | } 1814 | }, 1815 | "semver": { 1816 | "version": "6.3.0", 1817 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1818 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1819 | "dev": true 1820 | } 1821 | } 1822 | }, 1823 | "parent-module": { 1824 | "version": "1.0.1", 1825 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1826 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1827 | "dev": true, 1828 | "requires": { 1829 | "callsites": "^3.0.0" 1830 | } 1831 | }, 1832 | "parse-json": { 1833 | "version": "5.0.1", 1834 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", 1835 | "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", 1836 | "dev": true, 1837 | "requires": { 1838 | "@babel/code-frame": "^7.0.0", 1839 | "error-ex": "^1.3.1", 1840 | "json-parse-better-errors": "^1.0.1", 1841 | "lines-and-columns": "^1.1.6" 1842 | } 1843 | }, 1844 | "parse-path": { 1845 | "version": "4.0.2", 1846 | "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.2.tgz", 1847 | "integrity": "sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w==", 1848 | "dev": true, 1849 | "requires": { 1850 | "is-ssh": "^1.3.0", 1851 | "protocols": "^1.4.0" 1852 | } 1853 | }, 1854 | "parse-url": { 1855 | "version": "5.0.2", 1856 | "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.2.tgz", 1857 | "integrity": "sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA==", 1858 | "dev": true, 1859 | "requires": { 1860 | "is-ssh": "^1.3.0", 1861 | "normalize-url": "^3.3.0", 1862 | "parse-path": "^4.0.0", 1863 | "protocols": "^1.4.0" 1864 | } 1865 | }, 1866 | "path-exists": { 1867 | "version": "4.0.0", 1868 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1869 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1870 | "dev": true 1871 | }, 1872 | "path-is-absolute": { 1873 | "version": "1.0.1", 1874 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1875 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1876 | "dev": true 1877 | }, 1878 | "path-key": { 1879 | "version": "3.1.1", 1880 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1881 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1882 | "dev": true 1883 | }, 1884 | "path-parse": { 1885 | "version": "1.0.6", 1886 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1887 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1888 | "dev": true 1889 | }, 1890 | "path-type": { 1891 | "version": "4.0.0", 1892 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1893 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1894 | "dev": true 1895 | }, 1896 | "picomatch": { 1897 | "version": "2.2.2", 1898 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1899 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 1900 | "dev": true 1901 | }, 1902 | "pify": { 1903 | "version": "2.3.0", 1904 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1905 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1906 | "dev": true 1907 | }, 1908 | "prepend-http": { 1909 | "version": "2.0.0", 1910 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1911 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 1912 | "dev": true 1913 | }, 1914 | "protocols": { 1915 | "version": "1.4.8", 1916 | "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", 1917 | "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", 1918 | "dev": true 1919 | }, 1920 | "pump": { 1921 | "version": "3.0.0", 1922 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1923 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1924 | "dev": true, 1925 | "requires": { 1926 | "end-of-stream": "^1.1.0", 1927 | "once": "^1.3.1" 1928 | } 1929 | }, 1930 | "pupa": { 1931 | "version": "2.0.1", 1932 | "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", 1933 | "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", 1934 | "dev": true, 1935 | "requires": { 1936 | "escape-goat": "^2.0.0" 1937 | } 1938 | }, 1939 | "quick-lru": { 1940 | "version": "5.1.1", 1941 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1942 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1943 | "dev": true 1944 | }, 1945 | "rc": { 1946 | "version": "1.2.8", 1947 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1948 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1949 | "dev": true, 1950 | "requires": { 1951 | "deep-extend": "^0.6.0", 1952 | "ini": "~1.3.0", 1953 | "minimist": "^1.2.0", 1954 | "strip-json-comments": "~2.0.1" 1955 | } 1956 | }, 1957 | "rechoir": { 1958 | "version": "0.6.2", 1959 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", 1960 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", 1961 | "dev": true, 1962 | "requires": { 1963 | "resolve": "^1.1.6" 1964 | } 1965 | }, 1966 | "registry-auth-token": { 1967 | "version": "4.2.0", 1968 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", 1969 | "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", 1970 | "dev": true, 1971 | "requires": { 1972 | "rc": "^1.2.8" 1973 | } 1974 | }, 1975 | "registry-url": { 1976 | "version": "5.1.0", 1977 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", 1978 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", 1979 | "dev": true, 1980 | "requires": { 1981 | "rc": "^1.2.8" 1982 | } 1983 | }, 1984 | "release-it": { 1985 | "version": "13.6.6", 1986 | "resolved": "https://registry.npmjs.org/release-it/-/release-it-13.6.6.tgz", 1987 | "integrity": "sha512-tR0RkcMxc0lhtnPGWE2tBcjAG7Z+NXsQZTGiNr6M/XM5tOL4cSkWPrBo9+vEtVS2S7XlBiLtCZ85jCzcovBnBw==", 1988 | "dev": true, 1989 | "requires": { 1990 | "@iarna/toml": "2.2.5", 1991 | "@octokit/rest": "18.0.3", 1992 | "async-retry": "1.3.1", 1993 | "chalk": "4.1.0", 1994 | "cosmiconfig": "6.0.0", 1995 | "debug": "4.1.1", 1996 | "deprecated-obj": "1.0.1", 1997 | "detect-repo-changelog": "1.0.1", 1998 | "execa": "4.0.3", 1999 | "find-up": "4.1.0", 2000 | "form-data": "3.0.0", 2001 | "git-url-parse": "11.1.2", 2002 | "globby": "11.0.1", 2003 | "got": "11.5.1", 2004 | "import-cwd": "3.0.0", 2005 | "inquirer": "7.3.3", 2006 | "is-ci": "2.0.0", 2007 | "lodash": "4.17.19", 2008 | "mime-types": "2.1.27", 2009 | "ora": "4.0.5", 2010 | "os-name": "3.1.0", 2011 | "parse-json": "5.0.1", 2012 | "semver": "7.3.2", 2013 | "shelljs": "0.8.4", 2014 | "supports-color": "7.1.0", 2015 | "update-notifier": "4.1.0", 2016 | "url-join": "4.0.1", 2017 | "uuid": "8.2.0", 2018 | "window-size": "1.1.1", 2019 | "yaml": "1.10.0", 2020 | "yargs-parser": "18.1.3" 2021 | } 2022 | }, 2023 | "resolve": { 2024 | "version": "1.17.0", 2025 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 2026 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 2027 | "dev": true, 2028 | "requires": { 2029 | "path-parse": "^1.0.6" 2030 | } 2031 | }, 2032 | "resolve-alpn": { 2033 | "version": "1.0.0", 2034 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", 2035 | "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", 2036 | "dev": true 2037 | }, 2038 | "resolve-from": { 2039 | "version": "4.0.0", 2040 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2041 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2042 | "dev": true 2043 | }, 2044 | "responselike": { 2045 | "version": "2.0.0", 2046 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", 2047 | "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", 2048 | "dev": true, 2049 | "requires": { 2050 | "lowercase-keys": "^2.0.0" 2051 | } 2052 | }, 2053 | "restore-cursor": { 2054 | "version": "3.1.0", 2055 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 2056 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 2057 | "dev": true, 2058 | "requires": { 2059 | "onetime": "^5.1.0", 2060 | "signal-exit": "^3.0.2" 2061 | } 2062 | }, 2063 | "retry": { 2064 | "version": "0.12.0", 2065 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 2066 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", 2067 | "dev": true 2068 | }, 2069 | "reusify": { 2070 | "version": "1.0.4", 2071 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2072 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2073 | "dev": true 2074 | }, 2075 | "run-async": { 2076 | "version": "2.4.1", 2077 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 2078 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", 2079 | "dev": true 2080 | }, 2081 | "run-parallel": { 2082 | "version": "1.1.9", 2083 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", 2084 | "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", 2085 | "dev": true 2086 | }, 2087 | "rxjs": { 2088 | "version": "6.6.2", 2089 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", 2090 | "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", 2091 | "dev": true, 2092 | "requires": { 2093 | "tslib": "^1.9.0" 2094 | }, 2095 | "dependencies": { 2096 | "tslib": { 2097 | "version": "1.13.0", 2098 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 2099 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", 2100 | "dev": true 2101 | } 2102 | } 2103 | }, 2104 | "safer-buffer": { 2105 | "version": "2.1.2", 2106 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2107 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2108 | "dev": true 2109 | }, 2110 | "semver": { 2111 | "version": "7.3.2", 2112 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", 2113 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", 2114 | "dev": true 2115 | }, 2116 | "semver-diff": { 2117 | "version": "3.1.1", 2118 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", 2119 | "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", 2120 | "dev": true, 2121 | "requires": { 2122 | "semver": "^6.3.0" 2123 | }, 2124 | "dependencies": { 2125 | "semver": { 2126 | "version": "6.3.0", 2127 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2128 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2129 | "dev": true 2130 | } 2131 | } 2132 | }, 2133 | "shebang-command": { 2134 | "version": "2.0.0", 2135 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2136 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2137 | "dev": true, 2138 | "requires": { 2139 | "shebang-regex": "^3.0.0" 2140 | } 2141 | }, 2142 | "shebang-regex": { 2143 | "version": "3.0.0", 2144 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2145 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2146 | "dev": true 2147 | }, 2148 | "shelljs": { 2149 | "version": "0.8.4", 2150 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", 2151 | "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", 2152 | "dev": true, 2153 | "requires": { 2154 | "glob": "^7.0.0", 2155 | "interpret": "^1.0.0", 2156 | "rechoir": "^0.6.2" 2157 | } 2158 | }, 2159 | "signal-exit": { 2160 | "version": "3.0.3", 2161 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 2162 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 2163 | "dev": true 2164 | }, 2165 | "slash": { 2166 | "version": "3.0.0", 2167 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2168 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2169 | "dev": true 2170 | }, 2171 | "string-width": { 2172 | "version": "4.2.0", 2173 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 2174 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 2175 | "dev": true, 2176 | "requires": { 2177 | "emoji-regex": "^8.0.0", 2178 | "is-fullwidth-code-point": "^3.0.0", 2179 | "strip-ansi": "^6.0.0" 2180 | } 2181 | }, 2182 | "strip-ansi": { 2183 | "version": "6.0.0", 2184 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2185 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2186 | "dev": true, 2187 | "requires": { 2188 | "ansi-regex": "^5.0.0" 2189 | } 2190 | }, 2191 | "strip-eof": { 2192 | "version": "1.0.0", 2193 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 2194 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", 2195 | "dev": true 2196 | }, 2197 | "strip-final-newline": { 2198 | "version": "2.0.0", 2199 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2200 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 2201 | "dev": true 2202 | }, 2203 | "strip-json-comments": { 2204 | "version": "2.0.1", 2205 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2206 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 2207 | "dev": true 2208 | }, 2209 | "supports-color": { 2210 | "version": "7.1.0", 2211 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 2212 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 2213 | "dev": true, 2214 | "requires": { 2215 | "has-flag": "^4.0.0" 2216 | } 2217 | }, 2218 | "term-size": { 2219 | "version": "2.2.0", 2220 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", 2221 | "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", 2222 | "dev": true 2223 | }, 2224 | "through": { 2225 | "version": "2.3.8", 2226 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2227 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2228 | "dev": true 2229 | }, 2230 | "tmp": { 2231 | "version": "0.0.33", 2232 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2233 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2234 | "dev": true, 2235 | "requires": { 2236 | "os-tmpdir": "~1.0.2" 2237 | } 2238 | }, 2239 | "to-readable-stream": { 2240 | "version": "1.0.0", 2241 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 2242 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 2243 | "dev": true 2244 | }, 2245 | "to-regex-range": { 2246 | "version": "5.0.1", 2247 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2248 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2249 | "dev": true, 2250 | "requires": { 2251 | "is-number": "^7.0.0" 2252 | } 2253 | }, 2254 | "type-fest": { 2255 | "version": "0.11.0", 2256 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 2257 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", 2258 | "dev": true 2259 | }, 2260 | "typedarray-to-buffer": { 2261 | "version": "3.1.5", 2262 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 2263 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 2264 | "dev": true, 2265 | "requires": { 2266 | "is-typedarray": "^1.0.0" 2267 | } 2268 | }, 2269 | "unique-string": { 2270 | "version": "2.0.0", 2271 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", 2272 | "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", 2273 | "dev": true, 2274 | "requires": { 2275 | "crypto-random-string": "^2.0.0" 2276 | } 2277 | }, 2278 | "universal-user-agent": { 2279 | "version": "6.0.0", 2280 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", 2281 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", 2282 | "dev": true 2283 | }, 2284 | "update-notifier": { 2285 | "version": "4.1.0", 2286 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", 2287 | "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==", 2288 | "dev": true, 2289 | "requires": { 2290 | "boxen": "^4.2.0", 2291 | "chalk": "^3.0.0", 2292 | "configstore": "^5.0.1", 2293 | "has-yarn": "^2.1.0", 2294 | "import-lazy": "^2.1.0", 2295 | "is-ci": "^2.0.0", 2296 | "is-installed-globally": "^0.3.1", 2297 | "is-npm": "^4.0.0", 2298 | "is-yarn-global": "^0.3.0", 2299 | "latest-version": "^5.0.0", 2300 | "pupa": "^2.0.1", 2301 | "semver-diff": "^3.1.1", 2302 | "xdg-basedir": "^4.0.0" 2303 | }, 2304 | "dependencies": { 2305 | "chalk": { 2306 | "version": "3.0.0", 2307 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 2308 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 2309 | "dev": true, 2310 | "requires": { 2311 | "ansi-styles": "^4.1.0", 2312 | "supports-color": "^7.1.0" 2313 | } 2314 | } 2315 | } 2316 | }, 2317 | "url-join": { 2318 | "version": "4.0.1", 2319 | "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", 2320 | "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", 2321 | "dev": true 2322 | }, 2323 | "url-parse-lax": { 2324 | "version": "3.0.0", 2325 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 2326 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 2327 | "dev": true, 2328 | "requires": { 2329 | "prepend-http": "^2.0.0" 2330 | } 2331 | }, 2332 | "uuid": { 2333 | "version": "8.2.0", 2334 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.2.0.tgz", 2335 | "integrity": "sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q==", 2336 | "dev": true 2337 | }, 2338 | "wcwidth": { 2339 | "version": "1.0.1", 2340 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 2341 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", 2342 | "dev": true, 2343 | "requires": { 2344 | "defaults": "^1.0.3" 2345 | } 2346 | }, 2347 | "which": { 2348 | "version": "2.0.2", 2349 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2350 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2351 | "dev": true, 2352 | "requires": { 2353 | "isexe": "^2.0.0" 2354 | } 2355 | }, 2356 | "widest-line": { 2357 | "version": "3.1.0", 2358 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", 2359 | "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", 2360 | "dev": true, 2361 | "requires": { 2362 | "string-width": "^4.0.0" 2363 | } 2364 | }, 2365 | "window-size": { 2366 | "version": "1.1.1", 2367 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", 2368 | "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", 2369 | "dev": true, 2370 | "requires": { 2371 | "define-property": "^1.0.0", 2372 | "is-number": "^3.0.0" 2373 | }, 2374 | "dependencies": { 2375 | "is-buffer": { 2376 | "version": "1.1.6", 2377 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 2378 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 2379 | "dev": true 2380 | }, 2381 | "is-number": { 2382 | "version": "3.0.0", 2383 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 2384 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 2385 | "dev": true, 2386 | "requires": { 2387 | "kind-of": "^3.0.2" 2388 | } 2389 | }, 2390 | "kind-of": { 2391 | "version": "3.2.2", 2392 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2393 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2394 | "dev": true, 2395 | "requires": { 2396 | "is-buffer": "^1.1.5" 2397 | } 2398 | } 2399 | } 2400 | }, 2401 | "windows-release": { 2402 | "version": "3.3.1", 2403 | "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.1.tgz", 2404 | "integrity": "sha512-Pngk/RDCaI/DkuHPlGTdIkDiTAnAkyMjoQMZqRsxydNl1qGXNIoZrB7RK8g53F2tEgQBMqQJHQdYZuQEEAu54A==", 2405 | "dev": true, 2406 | "requires": { 2407 | "execa": "^1.0.0" 2408 | }, 2409 | "dependencies": { 2410 | "cross-spawn": { 2411 | "version": "6.0.5", 2412 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 2413 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 2414 | "dev": true, 2415 | "requires": { 2416 | "nice-try": "^1.0.4", 2417 | "path-key": "^2.0.1", 2418 | "semver": "^5.5.0", 2419 | "shebang-command": "^1.2.0", 2420 | "which": "^1.2.9" 2421 | } 2422 | }, 2423 | "execa": { 2424 | "version": "1.0.0", 2425 | "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", 2426 | "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", 2427 | "dev": true, 2428 | "requires": { 2429 | "cross-spawn": "^6.0.0", 2430 | "get-stream": "^4.0.0", 2431 | "is-stream": "^1.1.0", 2432 | "npm-run-path": "^2.0.0", 2433 | "p-finally": "^1.0.0", 2434 | "signal-exit": "^3.0.0", 2435 | "strip-eof": "^1.0.0" 2436 | } 2437 | }, 2438 | "get-stream": { 2439 | "version": "4.1.0", 2440 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 2441 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 2442 | "dev": true, 2443 | "requires": { 2444 | "pump": "^3.0.0" 2445 | } 2446 | }, 2447 | "is-stream": { 2448 | "version": "1.1.0", 2449 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 2450 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 2451 | "dev": true 2452 | }, 2453 | "npm-run-path": { 2454 | "version": "2.0.2", 2455 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 2456 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 2457 | "dev": true, 2458 | "requires": { 2459 | "path-key": "^2.0.0" 2460 | } 2461 | }, 2462 | "path-key": { 2463 | "version": "2.0.1", 2464 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 2465 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 2466 | "dev": true 2467 | }, 2468 | "semver": { 2469 | "version": "5.7.1", 2470 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2471 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2472 | "dev": true 2473 | }, 2474 | "shebang-command": { 2475 | "version": "1.2.0", 2476 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2477 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2478 | "dev": true, 2479 | "requires": { 2480 | "shebang-regex": "^1.0.0" 2481 | } 2482 | }, 2483 | "shebang-regex": { 2484 | "version": "1.0.0", 2485 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2486 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2487 | "dev": true 2488 | }, 2489 | "which": { 2490 | "version": "1.3.1", 2491 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2492 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2493 | "dev": true, 2494 | "requires": { 2495 | "isexe": "^2.0.0" 2496 | } 2497 | } 2498 | } 2499 | }, 2500 | "wrappy": { 2501 | "version": "1.0.2", 2502 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2503 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2504 | "dev": true 2505 | }, 2506 | "write-file-atomic": { 2507 | "version": "3.0.3", 2508 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", 2509 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", 2510 | "dev": true, 2511 | "requires": { 2512 | "imurmurhash": "^0.1.4", 2513 | "is-typedarray": "^1.0.0", 2514 | "signal-exit": "^3.0.2", 2515 | "typedarray-to-buffer": "^3.1.5" 2516 | } 2517 | }, 2518 | "xdg-basedir": { 2519 | "version": "4.0.0", 2520 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", 2521 | "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", 2522 | "dev": true 2523 | }, 2524 | "yaml": { 2525 | "version": "1.10.0", 2526 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", 2527 | "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", 2528 | "dev": true 2529 | }, 2530 | "yargs-parser": { 2531 | "version": "18.1.3", 2532 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 2533 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 2534 | "dev": true, 2535 | "requires": { 2536 | "camelcase": "^5.0.0", 2537 | "decamelize": "^1.2.0" 2538 | } 2539 | } 2540 | } 2541 | } 2542 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "use-reactive-form", 3 | "version": "1.1.8", 4 | "license": "MIT", 5 | "author": { 6 | "name": "Michael Kutateladze", 7 | "email": "michael.kutateladze@gmail.com" 8 | }, 9 | "contributors": [ 10 | { 11 | "name": "Anton Pugachev", 12 | "url": "https://github.com/mun4kin" 13 | }, 14 | { 15 | "name": "Lena Golovko", 16 | "url": "https://github.com/elenagolovko" 17 | }, 18 | { 19 | "name": "Anna Darina", 20 | "url": "https://github.com/annadarina" 21 | }, 22 | { 23 | "name": "George Kutateladze", 24 | "url": "https://github.com/GeorgKutateladze" 25 | } 26 | ], 27 | "main": "lib/index.js", 28 | "types": "lib/index.d.ts", 29 | "files": [ 30 | "lib" 31 | ], 32 | "repository": { 33 | "type": "git", 34 | "url": "https://github.com/Michaeladze/useReactiveForm" 35 | }, 36 | "homepage": "https://github.com/Michaeladze/useReactiveForm", 37 | "keywords": [ 38 | "react", 39 | "form", 40 | "forms", 41 | "hooks", 42 | "react-hook", 43 | "typescript" 44 | ], 45 | "scripts": { 46 | "build": "rm ./lib/* && tsc", 47 | "npm:publish": "npm pack", 48 | "release": "release-it --no-git.requireCleanWorkingDir", 49 | "test": "jest" 50 | }, 51 | "peerDependencies": { 52 | "react": "*" 53 | }, 54 | "prettier": { 55 | "printWidth": 80, 56 | "semi": true, 57 | "singleQuote": true, 58 | "trailingComma": "es5" 59 | }, 60 | "dependencies": {}, 61 | "devDependencies": { 62 | "@types/react": "^17.0.0", 63 | "react": "16.14.0", 64 | "release-it": "^13.6.6", 65 | "tslib": "^2.0.3", 66 | "typescript": "4.1.2", 67 | "yup": "^0.30.0" 68 | }, 69 | "release-it": { 70 | "github": { 71 | "release": false 72 | } 73 | }, 74 | "jest": { 75 | "preset": "ts-jest", 76 | "modulePathIgnorePatterns": [ 77 | "dist" 78 | ] 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/index.d.ts: -------------------------------------------------------------------------------- 1 | import { IUseReactiveForm, IUseFormResult } from './useReactiveForm'; 2 | 3 | export { IUseReactiveForm, IUseFormResult }; 4 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { IUseReactiveForm, useReactiveForm } from './useReactiveForm'; 2 | 3 | export { useReactiveForm, IUseReactiveForm }; 4 | -------------------------------------------------------------------------------- /src/useReactiveForm.ts: -------------------------------------------------------------------------------- 1 | import { Ref, useEffect, useRef, useState } from 'react'; 2 | 3 | /** In interface of input values */ 4 | export interface IUseReactiveForm { 5 | /** Form fields / structure */ 6 | fields: T; 7 | /** Dependencies */ 8 | deps?: any[]; 9 | /** Validation schema */ 10 | schema?: any; 11 | /** Separator for name property of inputs. _ is set by default */ 12 | separator?: string; 13 | /** Validate input on change */ 14 | validateOnChange?: boolean; 15 | /** Action on change */ 16 | actionOnChange?: (values: T) => void; 17 | /** Update when specific name changes */ 18 | updateTriggers?: string[]; 19 | } 20 | 21 | /** Element type */ 22 | export type IField = HTMLInputElement | HTMLTextAreaElement; 23 | 24 | /** Interface of return values */ 25 | export interface IUseFormResult { 26 | ref: Ref; 27 | values: T; 28 | errors: any; 29 | update: (f: T) => void; 30 | validate: () => boolean; 31 | clear: () => void; 32 | } 33 | 34 | export const useReactiveForm = ({ 35 | fields, 36 | schema, 37 | deps = [], 38 | separator = '_', 39 | validateOnChange = false, 40 | actionOnChange, 41 | updateTriggers = [] 42 | }: IUseReactiveForm): IUseFormResult => { 43 | /** Form reference */ 44 | const ref = useRef(null); 45 | /** Reload function */ 46 | const [time, reload] = useState(0); 47 | /** Form data */ 48 | let form = useRef(fields); 49 | /** Validation object */ 50 | let validationObject = useRef(deepCopy(fields)); 51 | /** Errors map for preventing re-renders on same error on dynamic validation */ 52 | const errorsMap = useRef(new Map()); 53 | 54 | // =================================================================================================================== 55 | 56 | /** Action callback subscription */ 57 | const action = (e: Event) => { 58 | const element = e.target as IField; 59 | const name = element.getAttribute('name'); 60 | 61 | /** Refresh values and errors with new value */ 62 | const keys = name ? name.split(separator) : []; 63 | findKeyAndUpdateValue(keys, form.current, element); 64 | findKeyAndUpdateValue(keys, validationObject.current, element); 65 | 66 | actionOnChange && actionOnChange(form.current); 67 | }; 68 | 69 | // =================================================================================================================== 70 | 71 | /** Event subscription */ 72 | const sub = (e: Event) => { 73 | const element = e.target as IField; 74 | 75 | const type = element.getAttribute('type'); 76 | const name = element.getAttribute('name'); 77 | 78 | /** We don't need blur event on radio or checkboxes */ 79 | if (e.type === 'blur' && (type === 'radio' || type === 'checkbox')) { 80 | return; 81 | } 82 | 83 | if (e.type === 'focus' && (type === 'radio' || type === 'checkbox')) { 84 | const elements: NodeListOf | null = ref.current && ref.current.querySelectorAll(`[name="${name}"]`); 85 | elements && elements.forEach((e: IField) => e.classList.add('touched')); 86 | return; 87 | } 88 | 89 | if (e.type === 'focus' && !element.classList.contains('touched')) { 90 | element.classList.add('touched'); 91 | return; 92 | } 93 | 94 | if (type === 'radio' || type === 'checkbox') { 95 | const elements: NodeListOf | null = ref.current && ref.current.querySelectorAll(`[name="${name}"]`); 96 | elements && elements.forEach((e: IField) => e.classList.add('dirty')); 97 | } else if (e.type === 'change') { 98 | element.classList.add('dirty'); 99 | } 100 | 101 | /** Refresh values and errors with new value */ 102 | const keys = name ? name.split(separator) : []; 103 | findKeyAndUpdateValue(keys, form.current, element); 104 | findKeyAndUpdateValue(keys, validationObject.current, element); 105 | 106 | /** Run validation */ 107 | validateOnChange && dynamicValidation(name, form.current, element); 108 | 109 | /** Update on names change */ 110 | if (updateTriggers && name && updateTriggers.indexOf(name) >= 0) { 111 | update(form.current); 112 | } 113 | }; 114 | 115 | // =================================================================================================================== 116 | 117 | /** Subscribe and resubscribe when update() called */ 118 | useEffect(() => { 119 | let selectors: any = []; 120 | let event = 'change'; 121 | 122 | if (ref.current) { 123 | /** Find inputs and subscribe to value change */ 124 | selectors = ref.current.querySelectorAll('[name]'); 125 | selectors.forEach((field: IField) => { 126 | const name = field.getAttribute('name'); 127 | if (name) { 128 | if (actionOnChange) { 129 | field.addEventListener(event, action); 130 | } else { 131 | field.addEventListener(event, sub); 132 | field.addEventListener('focus', sub); 133 | field.addEventListener('blur', sub); 134 | } 135 | } 136 | }); 137 | } 138 | return () => { 139 | selectors.forEach((field: any) => { 140 | field.removeEventListener(event, sub); 141 | field.removeEventListener('focus', sub); 142 | field.removeEventListener('blur', sub); 143 | field.removeEventListener(event, action); 144 | }); 145 | }; 146 | }, [time]); 147 | 148 | // =================================================================================================================== 149 | 150 | /** Refresh form when visibility changes */ 151 | useEffect(() => { 152 | deps.length && update(fields); 153 | }, [...deps]); 154 | 155 | // =================================================================================================================== 156 | 157 | /** Recursion for updating form value */ 158 | const findKeyAndUpdateValue = (keys: string[], obj: any, element: IField | null, error?: string): any => { 159 | if (!keys.length) { 160 | return; 161 | } 162 | 163 | if (keys.length === 1) { 164 | /** If there is error message (create validationObject) */ 165 | if (error) { 166 | obj[keys[0]] = { 167 | value: obj[keys[0]], 168 | error: error 169 | }; 170 | return obj[keys[0]]; 171 | } 172 | 173 | if (element) { 174 | /** If checkbox then check the presence of the value in array */ 175 | if (element.getAttribute('type') === 'checkbox') { 176 | if (!Array.isArray(obj[keys[0]])) { 177 | obj[keys[0]] = []; 178 | } 179 | const index = obj[keys[0]].indexOf(element.value); 180 | obj[keys[0]] = 181 | index < 0 ? [...obj[keys[0]], element.value] : obj[keys[0]].filter((v: any) => v !== element.value); 182 | } else if (element.getAttribute('type') === 'radio') { 183 | obj[keys[0]] = typeof obj[keys[0]] === 'number' ? +element.value : element.value; 184 | } else if (element.tagName === 'SELECT') { 185 | const multiple = element.getAttribute('multiple'); 186 | if (multiple === '' || multiple) { 187 | if (!Array.isArray(obj[keys[0]])) { 188 | obj[keys[0]] = []; 189 | } 190 | 191 | obj[keys[0]] = Array.from(element.getElementsByTagName('option')) 192 | .filter((o: HTMLOptionElement) => o.selected) 193 | .map((o: HTMLOptionElement) => o.value); 194 | } else { 195 | obj[keys[0]] = element.value; 196 | } 197 | } else { 198 | obj[keys[0]] = element.value; 199 | } 200 | } 201 | 202 | return obj[keys[0]]; 203 | } 204 | 205 | /** Recursion over @param obj */ 206 | for (const k in obj) { 207 | if (obj.hasOwnProperty(k) && k === keys[0]) { 208 | const tmp = [...keys]; 209 | tmp.splice(0, 1); 210 | return findKeyAndUpdateValue(tmp, obj[k], element, error); 211 | } 212 | } 213 | }; 214 | 215 | // =================================================================================================================== 216 | 217 | /** Update subject with new values and fields. Update validation object with new structure. */ 218 | const update = (fields: T) => { 219 | form.current = fields; 220 | validationObject.current = deepCopy(fields, validationObject.current); 221 | reload(Date.now()); 222 | }; 223 | 224 | // =================================================================================================================== 225 | 226 | /** Validate form by schema */ 227 | const validate = (): any => { 228 | if (!schema) { 229 | return true; 230 | } 231 | 232 | const elements: NodeListOf | null = 233 | ref.current && ref.current.querySelectorAll('input.invalid, textarea.invalid'); 234 | elements && elements.forEach((e: IField) => e.classList.remove('invalid')); 235 | 236 | validationObject.current = deepCopy(form.current); 237 | 238 | try { 239 | schema.validateSync(form.current, { abortEarly: false }); 240 | update(form.current); 241 | 242 | return true; 243 | } catch (e) { 244 | e.inner.forEach((item: any) => { 245 | errorsMap.current.set(item.path, e.message); 246 | 247 | /** Fill validationObject with error messages */ 248 | const keys = item.path.split(/\[|].|\./); 249 | findKeyAndUpdateValue(keys, validationObject.current, null, item.message); 250 | 251 | const selector = item.path.replace(/[[.]/g, separator).replace(/]/g, ''); 252 | const elements: NodeListOf | null = ref.current && ref.current.querySelectorAll(`[name="${selector}"]`); 253 | elements && elements.forEach((e: IField) => e.classList.add('invalid')); 254 | }); 255 | 256 | reload(Date.now()); 257 | return false; 258 | } 259 | }; 260 | 261 | // =================================================================================================================== 262 | 263 | /** Validate when value of input changed */ 264 | const dynamicValidation = (name: string | null, values: T, element: IField) => { 265 | let path; 266 | path = name 267 | ? name 268 | .replace(new RegExp(separator, 'g'), '_') 269 | .replace(/(_)/g, (_, sign: string, offset: number) => 270 | /\d/g.test(name[offset + 1]) ? '[' : /\d/g.test(name[offset - 1]) ? ']' : sign 271 | ) 272 | .replace(/(])/g, (_, sign: string, offset: number) => (/\w/g.test(name[offset + 1]) ? '].' : sign)) 273 | : ''; 274 | 275 | const type = element.getAttribute('type'); 276 | let shouldUpdate; 277 | let valid: boolean; 278 | 279 | // Reload for visual change 280 | const isSelect: boolean = element.getAttribute('data-select') === 'true'; 281 | 282 | const errors = validationObject.current; 283 | const keys = name ? name.split(separator) : []; 284 | 285 | try { 286 | schema.validateSyncAt(path, values); 287 | valid = true; 288 | shouldUpdate = errorsMap.current.get(path) !== '' && errorsMap.current.get(path) !== undefined; 289 | errorsMap.current.set(path, ''); 290 | findKeyAndUpdateValue(keys, errors, element); 291 | } catch (e) { 292 | valid = false; 293 | shouldUpdate = errorsMap.current.get(path) !== e.message; 294 | errorsMap.current.set(path, findKeyAndUpdateValue(keys, errors, element, e.message).error); 295 | } 296 | 297 | validationObject.current = errors; 298 | 299 | if (type === 'radio' || type === 'checkbox') { 300 | const elements: NodeListOf | null = ref.current && ref.current.querySelectorAll(`[name="${name}"]`); 301 | elements && 302 | elements.forEach((e: IField) => { 303 | valid ? e.classList.remove('invalid') : e.classList.add('invalid'); 304 | }); 305 | } else { 306 | valid ? element.classList.remove('invalid') : element.classList.add('invalid'); 307 | } 308 | 309 | if (isSelect) { 310 | reload(Date.now()); 311 | } else { 312 | shouldUpdate && reload(Date.now()); 313 | } 314 | }; 315 | 316 | // =================================================================================================================== 317 | 318 | /** Clear fields */ 319 | const clear = () => update(fields); 320 | 321 | // =================================================================================================================== 322 | 323 | return { 324 | values: form.current, 325 | ref, 326 | update, 327 | validate, 328 | clear, 329 | errors: validationObject.current 330 | }; 331 | }; 332 | 333 | /** Deep copy object */ 334 | function deepCopy(obj: any, preserve?: any): any { 335 | let clone: any = {}; 336 | 337 | for (const key in obj) { 338 | if (typeof obj[key] === 'object' && obj[key] !== null && obj[key] !== undefined && !(obj[key] instanceof Date)) { 339 | clone[key] = preserve ? deepCopy(obj[key], preserve[key]) : deepCopy(obj[key]); 340 | } else { 341 | clone[key] = preserve && key ? preserve[key] : obj[key]; 342 | } 343 | } 344 | 345 | return clone; 346 | } 347 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["./src/*", "types"], 3 | "compilerOptions": { 4 | "target": "es6", 5 | "module": "esnext", 6 | "lib": ["dom", "es6"], 7 | "importHelpers": true, 8 | "declaration": true, 9 | "sourceMap": true, 10 | "outDir": "./lib", 11 | "jsx": "react", 12 | "moduleResolution": "node", 13 | "baseUrl": "src", 14 | "strict": true, 15 | "noImplicitAny": true, 16 | "strictNullChecks": true, 17 | "removeComments": true, 18 | "strictFunctionTypes": true, 19 | "strictPropertyInitialization": true, 20 | "noImplicitThis": true, 21 | "alwaysStrict": true, 22 | "noUnusedLocals": true, 23 | "noUnusedParameters": true, 24 | "noImplicitReturns": true, 25 | "noFallthroughCasesInSwitch": true, 26 | "esModuleInterop": true 27 | } 28 | } 29 | --------------------------------------------------------------------------------