├── .eslintrc ├── .gitignore ├── .prettierrc ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Gallery.md ├── ISSUE_TEMPLATE.md ├── LICENSE.md ├── README.md ├── Tutorial.md ├── package-lock.json ├── package.json ├── resources └── logo.png ├── rollup.config.js └── src ├── conditionalConstraints.js ├── index.js └── noPresence.js /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true, 5 | "node": true, 6 | "jest": true 7 | }, 8 | "extends": [ 9 | "eslint:recommended", 10 | "plugin:prettier/recommended", 11 | "plugin:import/errors", 12 | "plugin:import/warnings" 13 | ], 14 | "plugins": ["prettier"], 15 | "globals": { 16 | "Atomics": "readonly", 17 | "SharedArrayBuffer": "readonly" 18 | }, 19 | "parserOptions": { 20 | "ecmaVersion": 2018, 21 | "sourceType": "module" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } 5 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at agustina@rootstrap.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | **IMPORTANT:** replace all the instances of "rootstrap/validate" with the actual library name or remove if doesn't apply 2 | 3 | ## Got a question or problem? 4 | 5 | Please, do not open issues for the general support questions as we want to keep GitHub issues for bug reports and feature requests. You've got much better chances of getting your question answered on [StackOverflow](http://stackoverflow.com/questions/tagged/validate) where maintainers are looking at questions tagged with `rootstrap-validate`. 6 | 7 | StackOverflow is a much better place to ask questions since: 8 | 9 | - there are hundreds of people willing to help on StackOverflow 10 | - questions and answers stay available for public viewing so your question / answer might help someone else 11 | - SO voting system assures that the best answers are prominently visible. 12 | 13 | To save your and our time we will be systematically closing all the issues that are requests for general support and redirecting people to StackOverflow. 14 | 15 | ## You think you've found a bug? 16 | 17 | Oh, we are ashamed and want to fix it asap! But before fixing a bug we need to reproduce and confirm it. In order to reproduce bugs we will systematically ask you to provide what we consider _minimal_ in order to try to reproduce it: 18 | 19 | - version of React used 20 | - version of React Native used 21 | - version of this library that you are using 22 | - 3rd-party libraries used, if any 23 | - and most importantly - a use-case that fails 24 | - If a code example/snippet is possible it is most welcomed 25 | 26 | If there is any other information that you deem useful, please add it as well. 27 | 28 | Having the information to reproduce the scenario, allows us to confirm the bug and then test that the solution actually fixes the problem. 29 | 30 | We will be insisting on a minimal information to reproduce the scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly. 31 | 32 | Unfortunately we are not able to investigate / fix bugs without that minimal information, if the info is not provided and we don't hear back from you we are going to close your issue since don't have enough info to reproduce. 33 | 34 | ## You want to contribute some code? 35 | 36 | We are always looking for the quality contributions and will be happy to accept your Pull Requests as long as those adhere to some basic rules: 37 | 38 | [Add your project contribute rules] 39 | -------------------------------------------------------------------------------- /Gallery.md: -------------------------------------------------------------------------------- 1 | # Gallery 2 | 3 | It looks like there are no entries to the gallery yet. Do you have any custom validations of your own? Be the first one to submit! 4 | 5 | ## How to submit a custom validation? 6 | 7 | Please create a gist with the custom validation and provide documentation of it by using comments on that file or even better, provide a secondary file as a `README.md` so you can better document it. 8 | 9 | Then create a PR adding it to this file providing a `### Title`, link to the gist and small description so it's easier to know at a glace what it is about without having to open the gist. 10 | 11 | ## Custom Validators 12 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Bugs and Questions 2 | 3 | ### Checklist 4 | 5 | - [ ] This is a `@rootstrap/validate` specific issue. 6 | 7 | - [ ] I am using the latest version of `@rootstrap/validate` 8 | 9 | - [ ] I've searched open issues to make sure I'm not opening a duplicate issue 10 | 11 | ### The Problem 12 | 13 | Describe the issue you're seeing, and what you expect the behavior to be. 14 | 15 | ### Reproduction 16 | 17 | Please list steps to reproduce your issue. Include a code sample and exact version number for `@rootstrap/validate`. 18 | 19 | --- 20 | 21 | # Feature Requests 22 | 23 | ### Checklist 24 | 25 | - [ ] My feature request is specific to `@rootstrap/validate`. 26 | 27 | - [ ] I've searched open issues to make sure I'm not opening a duplicate feature request 28 | 29 | ### Description 30 | 31 | Please describe the feature you're requesting in detail. 32 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Rootstrap 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | # @rootstrap/validate 4 | 5 | [![Maintainability](https://api.codeclimate.com/v1/badges/df7ee2a5e9f30beb93ab/maintainability)](https://codeclimate.com/github/rootstrap/validate/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/a878b4be647cd2a9582c/test_coverage)](https://codeclimate.com/github/rootstrap/validate/test_coverage) 6 | 7 | Have you ever had to write your own custom validations? It can be a bit confusing, specially if you have never done it before. Don't worry, we are here to help. 8 | 9 | This library extends the popular library [validate.js](https://validatejs.org) and adds some custom validations that have proven to be very useful and quite commonly needed. Don't reinvent the wheel, next time you need to write a custom validation, check if someone hasn't implemented that custom validation already. 10 | 11 | Aside from common custom validations, this library will also serve as a gallery of all the custom validations that we have had to implement at Rootstrap, although some might not be included out of the box, we intend to showcase them in case you need them. [Here is a link]() to said gallery 12 | 13 | If you need a validation that is not in this library you might be wondering, where do I even start? I've never written a custom validation. Don't worry, we got you covered! We have made available a [tutorial]() so it's easier to understand how to create a custom validation. Don't forget to check out other custom validations in the gallery, they can be really helpful when implementing your own as well. 14 | 15 | ## Installation 16 | 17 | ``` 18 | yarn add @rootstrap/validate 19 | ``` 20 | 21 | or 22 | 23 | ``` 24 | npm install @rootstrap/validate --save 25 | ``` 26 | 27 | ## Usage of custom validators 28 | 29 | Just in case, if you are just trying to figure out how a validate.js validator works, [here is a link](https://validatejs.org/) to their docs. This library only explains the validators it adds. 30 | 31 | ### conditionalConstraints 32 | 33 | This validators allows you to validate certain constraints on a field, given that other fields meet certain validations. 34 | 35 | As an example, it would be useful when trying to validate that a field is present only if a checkbox is checked or not checked. Sounds like a very common use case right? Here is how you can use the validator `conditionalConstraints` to achieve that. 36 | 37 | ```js 38 | // createNewElement is a checkbox 39 | // If createNewElement is true: 40 | // then validate checks the constraints assigned to new element 41 | // else 42 | // validate skips the assigned constraints inside conditional constraints. 43 | const myFancyFormConstraints = { 44 | newElementName: { 45 | conditionalConstraints: { 46 | dependencies: [ 47 | { attribute: 'createNewElement', constraints: { presence: true } }, 48 | ], 49 | constraints: { 50 | presence: true, 51 | }, 52 | }, 53 | }, 54 | }; 55 | ``` 56 | 57 | ### noPresence 58 | 59 | This constraint is more of a helper to `conditionalConstraints` than anything else. When checking a field with some conditionalConstraints you might want to have as a dependency a field actually not being present. 60 | 61 | Let's take the same example that `conditionalConstraints` has but now let's change the checkbox to `useCurrentElement`. With that change, now the new element field would only be required if `useCurrentElement` is not present. 62 | 63 | In case you want to check that a field is not present, the constraint inside the constraints of the dependency should look like: 64 | 65 | ```js 66 | noPresence: true; 67 | ``` 68 | 69 | Optionally, if you want to include false values in the check, you can do so by setting this in the options like this: 70 | 71 | ```js 72 | presence: { 73 | includeFalse: true; 74 | } 75 | ``` 76 | 77 | Full example: 78 | 79 | ```js 80 | // useCurrentElement is a checkbox 81 | // If useCurrentElement is not present or false: 82 | // then validate checks the constraints assigned to new element 83 | // else 84 | // validate skips the assigned constraints inside conditional constraints. 85 | const myFancyFormConstraints = { 86 | newElementName: { 87 | conditionalConstraints: { 88 | dependencies: [ 89 | { 90 | attribute: 'useCurrentElement', 91 | constraints: { noPresence: { includeFalse: true } }, 92 | }, 93 | ], 94 | constraints: { 95 | presence: true, 96 | }, 97 | }, 98 | }, 99 | }; 100 | ``` 101 | 102 | ## Contributing 103 | 104 | If you have an idea that could make this library better we would love to hear it. Please take a look at our [Contributing Guidelines](CONTRIBUTING.md) to get to know the rules and how to get started with your contribution. 105 | 106 | ## License 107 | 108 | **@rootstrap/validate** is available under the MIT license. See [LICENSE](LICENSE.md) file for more info. 109 | 110 | ## Credits 111 | 112 | **@rootstrap/validate** is maintained by [Rootstrap](http://www.rootstrap.com) with the help of our [contributors](https://github.com/rootstrap/validate/contributors). 113 | 114 | [](http://www.rootstrap.com) 115 | -------------------------------------------------------------------------------- /Tutorial.md: -------------------------------------------------------------------------------- 1 | # How to write your own custom validation? 2 | 3 | This tutorial is under construction. 4 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@rootstrap/validate", 3 | "version": "1.0.0", 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 | }, 33 | "@types/color-name": { 34 | "version": "1.1.1", 35 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 36 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 37 | "dev": true 38 | }, 39 | "@types/json5": { 40 | "version": "0.0.29", 41 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", 42 | "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", 43 | "dev": true 44 | }, 45 | "acorn": { 46 | "version": "7.4.0", 47 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", 48 | "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", 49 | "dev": true 50 | }, 51 | "acorn-jsx": { 52 | "version": "5.3.1", 53 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", 54 | "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", 55 | "dev": true 56 | }, 57 | "ajv": { 58 | "version": "6.12.5", 59 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", 60 | "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", 61 | "dev": true, 62 | "requires": { 63 | "fast-deep-equal": "^3.1.1", 64 | "fast-json-stable-stringify": "^2.0.0", 65 | "json-schema-traverse": "^0.4.1", 66 | "uri-js": "^4.2.2" 67 | } 68 | }, 69 | "ansi-escapes": { 70 | "version": "4.3.1", 71 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 72 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 73 | "dev": true, 74 | "requires": { 75 | "type-fest": "^0.11.0" 76 | }, 77 | "dependencies": { 78 | "type-fest": { 79 | "version": "0.11.0", 80 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 81 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", 82 | "dev": true 83 | } 84 | } 85 | }, 86 | "ansi-regex": { 87 | "version": "5.0.0", 88 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 89 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 90 | "dev": true 91 | }, 92 | "ansi-styles": { 93 | "version": "3.2.1", 94 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 95 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 96 | "dev": true, 97 | "requires": { 98 | "color-convert": "^1.9.0" 99 | } 100 | }, 101 | "argparse": { 102 | "version": "1.0.10", 103 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 104 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 105 | "dev": true, 106 | "requires": { 107 | "sprintf-js": "~1.0.2" 108 | } 109 | }, 110 | "array-includes": { 111 | "version": "3.1.1", 112 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", 113 | "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", 114 | "dev": true, 115 | "requires": { 116 | "define-properties": "^1.1.3", 117 | "es-abstract": "^1.17.0", 118 | "is-string": "^1.0.5" 119 | } 120 | }, 121 | "array.prototype.flat": { 122 | "version": "1.2.3", 123 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", 124 | "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", 125 | "dev": true, 126 | "requires": { 127 | "define-properties": "^1.1.3", 128 | "es-abstract": "^1.17.0-next.1" 129 | } 130 | }, 131 | "astral-regex": { 132 | "version": "1.0.0", 133 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 134 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 135 | "dev": true 136 | }, 137 | "balanced-match": { 138 | "version": "1.0.0", 139 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 140 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 141 | "dev": true 142 | }, 143 | "brace-expansion": { 144 | "version": "1.1.11", 145 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 146 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 147 | "dev": true, 148 | "requires": { 149 | "balanced-match": "^1.0.0", 150 | "concat-map": "0.0.1" 151 | } 152 | }, 153 | "callsites": { 154 | "version": "3.1.0", 155 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 156 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 157 | "dev": true 158 | }, 159 | "chalk": { 160 | "version": "2.4.2", 161 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 162 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 163 | "dev": true, 164 | "requires": { 165 | "ansi-styles": "^3.2.1", 166 | "escape-string-regexp": "^1.0.5", 167 | "supports-color": "^5.3.0" 168 | } 169 | }, 170 | "chardet": { 171 | "version": "0.7.0", 172 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 173 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 174 | "dev": true 175 | }, 176 | "cli-cursor": { 177 | "version": "3.1.0", 178 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 179 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 180 | "dev": true, 181 | "requires": { 182 | "restore-cursor": "^3.1.0" 183 | } 184 | }, 185 | "cli-width": { 186 | "version": "3.0.0", 187 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", 188 | "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", 189 | "dev": true 190 | }, 191 | "color-convert": { 192 | "version": "1.9.3", 193 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 194 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 195 | "dev": true, 196 | "requires": { 197 | "color-name": "1.1.3" 198 | } 199 | }, 200 | "color-name": { 201 | "version": "1.1.3", 202 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 203 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 204 | "dev": true 205 | }, 206 | "concat-map": { 207 | "version": "0.0.1", 208 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 209 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 210 | "dev": true 211 | }, 212 | "contains-path": { 213 | "version": "0.1.0", 214 | "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", 215 | "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", 216 | "dev": true 217 | }, 218 | "cross-spawn": { 219 | "version": "6.0.5", 220 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 221 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 222 | "dev": true, 223 | "requires": { 224 | "nice-try": "^1.0.4", 225 | "path-key": "^2.0.1", 226 | "semver": "^5.5.0", 227 | "shebang-command": "^1.2.0", 228 | "which": "^1.2.9" 229 | }, 230 | "dependencies": { 231 | "semver": { 232 | "version": "5.7.1", 233 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 234 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 235 | "dev": true 236 | } 237 | } 238 | }, 239 | "debug": { 240 | "version": "4.2.0", 241 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", 242 | "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", 243 | "dev": true, 244 | "requires": { 245 | "ms": "2.1.2" 246 | } 247 | }, 248 | "deep-is": { 249 | "version": "0.1.3", 250 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 251 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 252 | "dev": true 253 | }, 254 | "define-properties": { 255 | "version": "1.1.3", 256 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 257 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 258 | "dev": true, 259 | "requires": { 260 | "object-keys": "^1.0.12" 261 | } 262 | }, 263 | "doctrine": { 264 | "version": "3.0.0", 265 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 266 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 267 | "dev": true, 268 | "requires": { 269 | "esutils": "^2.0.2" 270 | } 271 | }, 272 | "emoji-regex": { 273 | "version": "8.0.0", 274 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 275 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 276 | "dev": true 277 | }, 278 | "error-ex": { 279 | "version": "1.3.2", 280 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 281 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 282 | "dev": true, 283 | "requires": { 284 | "is-arrayish": "^0.2.1" 285 | } 286 | }, 287 | "es-abstract": { 288 | "version": "1.17.6", 289 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", 290 | "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", 291 | "dev": true, 292 | "requires": { 293 | "es-to-primitive": "^1.2.1", 294 | "function-bind": "^1.1.1", 295 | "has": "^1.0.3", 296 | "has-symbols": "^1.0.1", 297 | "is-callable": "^1.2.0", 298 | "is-regex": "^1.1.0", 299 | "object-inspect": "^1.7.0", 300 | "object-keys": "^1.1.1", 301 | "object.assign": "^4.1.0", 302 | "string.prototype.trimend": "^1.0.1", 303 | "string.prototype.trimstart": "^1.0.1" 304 | } 305 | }, 306 | "es-to-primitive": { 307 | "version": "1.2.1", 308 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 309 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 310 | "dev": true, 311 | "requires": { 312 | "is-callable": "^1.1.4", 313 | "is-date-object": "^1.0.1", 314 | "is-symbol": "^1.0.2" 315 | } 316 | }, 317 | "escape-string-regexp": { 318 | "version": "1.0.5", 319 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 320 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 321 | "dev": true 322 | }, 323 | "eslint": { 324 | "version": "6.8.0", 325 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", 326 | "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", 327 | "dev": true, 328 | "requires": { 329 | "@babel/code-frame": "^7.0.0", 330 | "ajv": "^6.10.0", 331 | "chalk": "^2.1.0", 332 | "cross-spawn": "^6.0.5", 333 | "debug": "^4.0.1", 334 | "doctrine": "^3.0.0", 335 | "eslint-scope": "^5.0.0", 336 | "eslint-utils": "^1.4.3", 337 | "eslint-visitor-keys": "^1.1.0", 338 | "espree": "^6.1.2", 339 | "esquery": "^1.0.1", 340 | "esutils": "^2.0.2", 341 | "file-entry-cache": "^5.0.1", 342 | "functional-red-black-tree": "^1.0.1", 343 | "glob-parent": "^5.0.0", 344 | "globals": "^12.1.0", 345 | "ignore": "^4.0.6", 346 | "import-fresh": "^3.0.0", 347 | "imurmurhash": "^0.1.4", 348 | "inquirer": "^7.0.0", 349 | "is-glob": "^4.0.0", 350 | "js-yaml": "^3.13.1", 351 | "json-stable-stringify-without-jsonify": "^1.0.1", 352 | "levn": "^0.3.0", 353 | "lodash": "^4.17.14", 354 | "minimatch": "^3.0.4", 355 | "mkdirp": "^0.5.1", 356 | "natural-compare": "^1.4.0", 357 | "optionator": "^0.8.3", 358 | "progress": "^2.0.0", 359 | "regexpp": "^2.0.1", 360 | "semver": "^6.1.2", 361 | "strip-ansi": "^5.2.0", 362 | "strip-json-comments": "^3.0.1", 363 | "table": "^5.2.3", 364 | "text-table": "^0.2.0", 365 | "v8-compile-cache": "^2.0.3" 366 | } 367 | }, 368 | "eslint-config-prettier": { 369 | "version": "6.11.0", 370 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", 371 | "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", 372 | "dev": true, 373 | "requires": { 374 | "get-stdin": "^6.0.0" 375 | } 376 | }, 377 | "eslint-import-resolver-node": { 378 | "version": "0.3.4", 379 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", 380 | "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", 381 | "dev": true, 382 | "requires": { 383 | "debug": "^2.6.9", 384 | "resolve": "^1.13.1" 385 | }, 386 | "dependencies": { 387 | "debug": { 388 | "version": "2.6.9", 389 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 390 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 391 | "dev": true, 392 | "requires": { 393 | "ms": "2.0.0" 394 | } 395 | }, 396 | "ms": { 397 | "version": "2.0.0", 398 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 399 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 400 | "dev": true 401 | } 402 | } 403 | }, 404 | "eslint-module-utils": { 405 | "version": "2.6.0", 406 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", 407 | "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", 408 | "dev": true, 409 | "requires": { 410 | "debug": "^2.6.9", 411 | "pkg-dir": "^2.0.0" 412 | }, 413 | "dependencies": { 414 | "debug": { 415 | "version": "2.6.9", 416 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 417 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 418 | "dev": true, 419 | "requires": { 420 | "ms": "2.0.0" 421 | } 422 | }, 423 | "ms": { 424 | "version": "2.0.0", 425 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 426 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 427 | "dev": true 428 | } 429 | } 430 | }, 431 | "eslint-plugin-import": { 432 | "version": "2.22.0", 433 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", 434 | "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", 435 | "dev": true, 436 | "requires": { 437 | "array-includes": "^3.1.1", 438 | "array.prototype.flat": "^1.2.3", 439 | "contains-path": "^0.1.0", 440 | "debug": "^2.6.9", 441 | "doctrine": "1.5.0", 442 | "eslint-import-resolver-node": "^0.3.3", 443 | "eslint-module-utils": "^2.6.0", 444 | "has": "^1.0.3", 445 | "minimatch": "^3.0.4", 446 | "object.values": "^1.1.1", 447 | "read-pkg-up": "^2.0.0", 448 | "resolve": "^1.17.0", 449 | "tsconfig-paths": "^3.9.0" 450 | }, 451 | "dependencies": { 452 | "debug": { 453 | "version": "2.6.9", 454 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 455 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 456 | "dev": true, 457 | "requires": { 458 | "ms": "2.0.0" 459 | } 460 | }, 461 | "doctrine": { 462 | "version": "1.5.0", 463 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", 464 | "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", 465 | "dev": true, 466 | "requires": { 467 | "esutils": "^2.0.2", 468 | "isarray": "^1.0.0" 469 | } 470 | }, 471 | "ms": { 472 | "version": "2.0.0", 473 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 474 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 475 | "dev": true 476 | } 477 | } 478 | }, 479 | "eslint-plugin-prettier": { 480 | "version": "3.1.4", 481 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", 482 | "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", 483 | "dev": true, 484 | "requires": { 485 | "prettier-linter-helpers": "^1.0.0" 486 | } 487 | }, 488 | "eslint-scope": { 489 | "version": "5.1.1", 490 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 491 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 492 | "dev": true, 493 | "requires": { 494 | "esrecurse": "^4.3.0", 495 | "estraverse": "^4.1.1" 496 | } 497 | }, 498 | "eslint-utils": { 499 | "version": "1.4.3", 500 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", 501 | "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", 502 | "dev": true, 503 | "requires": { 504 | "eslint-visitor-keys": "^1.1.0" 505 | } 506 | }, 507 | "eslint-visitor-keys": { 508 | "version": "1.3.0", 509 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 510 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 511 | "dev": true 512 | }, 513 | "espree": { 514 | "version": "6.2.1", 515 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", 516 | "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", 517 | "dev": true, 518 | "requires": { 519 | "acorn": "^7.1.1", 520 | "acorn-jsx": "^5.2.0", 521 | "eslint-visitor-keys": "^1.1.0" 522 | } 523 | }, 524 | "esprima": { 525 | "version": "4.0.1", 526 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 527 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 528 | "dev": true 529 | }, 530 | "esquery": { 531 | "version": "1.3.1", 532 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 533 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 534 | "dev": true, 535 | "requires": { 536 | "estraverse": "^5.1.0" 537 | }, 538 | "dependencies": { 539 | "estraverse": { 540 | "version": "5.2.0", 541 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 542 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 543 | "dev": true 544 | } 545 | } 546 | }, 547 | "esrecurse": { 548 | "version": "4.3.0", 549 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 550 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 551 | "dev": true, 552 | "requires": { 553 | "estraverse": "^5.2.0" 554 | }, 555 | "dependencies": { 556 | "estraverse": { 557 | "version": "5.2.0", 558 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 559 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 560 | "dev": true 561 | } 562 | } 563 | }, 564 | "estraverse": { 565 | "version": "4.3.0", 566 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 567 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 568 | "dev": true 569 | }, 570 | "esutils": { 571 | "version": "2.0.3", 572 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 573 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 574 | "dev": true 575 | }, 576 | "external-editor": { 577 | "version": "3.1.0", 578 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 579 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 580 | "dev": true, 581 | "requires": { 582 | "chardet": "^0.7.0", 583 | "iconv-lite": "^0.4.24", 584 | "tmp": "^0.0.33" 585 | } 586 | }, 587 | "fast-deep-equal": { 588 | "version": "3.1.3", 589 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 590 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 591 | "dev": true 592 | }, 593 | "fast-diff": { 594 | "version": "1.2.0", 595 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", 596 | "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", 597 | "dev": true 598 | }, 599 | "fast-json-stable-stringify": { 600 | "version": "2.1.0", 601 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 602 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 603 | "dev": true 604 | }, 605 | "fast-levenshtein": { 606 | "version": "2.0.6", 607 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 608 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 609 | "dev": true 610 | }, 611 | "figures": { 612 | "version": "3.2.0", 613 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 614 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 615 | "dev": true, 616 | "requires": { 617 | "escape-string-regexp": "^1.0.5" 618 | } 619 | }, 620 | "file-entry-cache": { 621 | "version": "5.0.1", 622 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 623 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 624 | "dev": true, 625 | "requires": { 626 | "flat-cache": "^2.0.1" 627 | } 628 | }, 629 | "find-up": { 630 | "version": "2.1.0", 631 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 632 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 633 | "dev": true, 634 | "requires": { 635 | "locate-path": "^2.0.0" 636 | } 637 | }, 638 | "flat-cache": { 639 | "version": "2.0.1", 640 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 641 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 642 | "dev": true, 643 | "requires": { 644 | "flatted": "^2.0.0", 645 | "rimraf": "2.6.3", 646 | "write": "1.0.3" 647 | } 648 | }, 649 | "flatted": { 650 | "version": "2.0.2", 651 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", 652 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", 653 | "dev": true 654 | }, 655 | "fs.realpath": { 656 | "version": "1.0.0", 657 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 658 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 659 | "dev": true 660 | }, 661 | "fsevents": { 662 | "version": "2.1.3", 663 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 664 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 665 | "dev": true, 666 | "optional": true 667 | }, 668 | "function-bind": { 669 | "version": "1.1.1", 670 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 671 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 672 | "dev": true 673 | }, 674 | "functional-red-black-tree": { 675 | "version": "1.0.1", 676 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 677 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 678 | "dev": true 679 | }, 680 | "get-stdin": { 681 | "version": "6.0.0", 682 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", 683 | "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", 684 | "dev": true 685 | }, 686 | "glob": { 687 | "version": "7.1.6", 688 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 689 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 690 | "dev": true, 691 | "requires": { 692 | "fs.realpath": "^1.0.0", 693 | "inflight": "^1.0.4", 694 | "inherits": "2", 695 | "minimatch": "^3.0.4", 696 | "once": "^1.3.0", 697 | "path-is-absolute": "^1.0.0" 698 | } 699 | }, 700 | "glob-parent": { 701 | "version": "5.1.1", 702 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 703 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 704 | "dev": true, 705 | "requires": { 706 | "is-glob": "^4.0.1" 707 | } 708 | }, 709 | "globals": { 710 | "version": "12.4.0", 711 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 712 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 713 | "dev": true, 714 | "requires": { 715 | "type-fest": "^0.8.1" 716 | } 717 | }, 718 | "graceful-fs": { 719 | "version": "4.2.4", 720 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 721 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 722 | "dev": true 723 | }, 724 | "has": { 725 | "version": "1.0.3", 726 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 727 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 728 | "dev": true, 729 | "requires": { 730 | "function-bind": "^1.1.1" 731 | } 732 | }, 733 | "has-flag": { 734 | "version": "3.0.0", 735 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 736 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 737 | "dev": true 738 | }, 739 | "has-symbols": { 740 | "version": "1.0.1", 741 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 742 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 743 | "dev": true 744 | }, 745 | "hosted-git-info": { 746 | "version": "2.8.8", 747 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", 748 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", 749 | "dev": true 750 | }, 751 | "iconv-lite": { 752 | "version": "0.4.24", 753 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 754 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 755 | "dev": true, 756 | "requires": { 757 | "safer-buffer": ">= 2.1.2 < 3" 758 | } 759 | }, 760 | "ignore": { 761 | "version": "4.0.6", 762 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 763 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 764 | "dev": true 765 | }, 766 | "import-fresh": { 767 | "version": "3.2.1", 768 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 769 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 770 | "dev": true, 771 | "requires": { 772 | "parent-module": "^1.0.0", 773 | "resolve-from": "^4.0.0" 774 | } 775 | }, 776 | "imurmurhash": { 777 | "version": "0.1.4", 778 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 779 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 780 | "dev": true 781 | }, 782 | "inflight": { 783 | "version": "1.0.6", 784 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 785 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 786 | "dev": true, 787 | "requires": { 788 | "once": "^1.3.0", 789 | "wrappy": "1" 790 | } 791 | }, 792 | "inherits": { 793 | "version": "2.0.4", 794 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 795 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 796 | "dev": true 797 | }, 798 | "inquirer": { 799 | "version": "7.3.3", 800 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", 801 | "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", 802 | "dev": true, 803 | "requires": { 804 | "ansi-escapes": "^4.2.1", 805 | "chalk": "^4.1.0", 806 | "cli-cursor": "^3.1.0", 807 | "cli-width": "^3.0.0", 808 | "external-editor": "^3.0.3", 809 | "figures": "^3.0.0", 810 | "lodash": "^4.17.19", 811 | "mute-stream": "0.0.8", 812 | "run-async": "^2.4.0", 813 | "rxjs": "^6.6.0", 814 | "string-width": "^4.1.0", 815 | "strip-ansi": "^6.0.0", 816 | "through": "^2.3.6" 817 | }, 818 | "dependencies": { 819 | "ansi-styles": { 820 | "version": "4.2.1", 821 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 822 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 823 | "dev": true, 824 | "requires": { 825 | "@types/color-name": "^1.1.1", 826 | "color-convert": "^2.0.1" 827 | } 828 | }, 829 | "chalk": { 830 | "version": "4.1.0", 831 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 832 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 833 | "dev": true, 834 | "requires": { 835 | "ansi-styles": "^4.1.0", 836 | "supports-color": "^7.1.0" 837 | } 838 | }, 839 | "color-convert": { 840 | "version": "2.0.1", 841 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 842 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 843 | "dev": true, 844 | "requires": { 845 | "color-name": "~1.1.4" 846 | } 847 | }, 848 | "color-name": { 849 | "version": "1.1.4", 850 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 851 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 852 | "dev": true 853 | }, 854 | "has-flag": { 855 | "version": "4.0.0", 856 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 857 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 858 | "dev": true 859 | }, 860 | "strip-ansi": { 861 | "version": "6.0.0", 862 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 863 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 864 | "dev": true, 865 | "requires": { 866 | "ansi-regex": "^5.0.0" 867 | } 868 | }, 869 | "supports-color": { 870 | "version": "7.2.0", 871 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 872 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 873 | "dev": true, 874 | "requires": { 875 | "has-flag": "^4.0.0" 876 | } 877 | } 878 | } 879 | }, 880 | "is-arrayish": { 881 | "version": "0.2.1", 882 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 883 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 884 | "dev": true 885 | }, 886 | "is-callable": { 887 | "version": "1.2.2", 888 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", 889 | "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", 890 | "dev": true 891 | }, 892 | "is-date-object": { 893 | "version": "1.0.2", 894 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 895 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 896 | "dev": true 897 | }, 898 | "is-extglob": { 899 | "version": "2.1.1", 900 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 901 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 902 | "dev": true 903 | }, 904 | "is-fullwidth-code-point": { 905 | "version": "3.0.0", 906 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 907 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 908 | "dev": true 909 | }, 910 | "is-glob": { 911 | "version": "4.0.1", 912 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 913 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 914 | "dev": true, 915 | "requires": { 916 | "is-extglob": "^2.1.1" 917 | } 918 | }, 919 | "is-negative-zero": { 920 | "version": "2.0.0", 921 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", 922 | "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", 923 | "dev": true 924 | }, 925 | "is-regex": { 926 | "version": "1.1.1", 927 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", 928 | "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", 929 | "dev": true, 930 | "requires": { 931 | "has-symbols": "^1.0.1" 932 | } 933 | }, 934 | "is-string": { 935 | "version": "1.0.5", 936 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", 937 | "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", 938 | "dev": true 939 | }, 940 | "is-symbol": { 941 | "version": "1.0.3", 942 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 943 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 944 | "dev": true, 945 | "requires": { 946 | "has-symbols": "^1.0.1" 947 | } 948 | }, 949 | "isarray": { 950 | "version": "1.0.0", 951 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 952 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 953 | "dev": true 954 | }, 955 | "isexe": { 956 | "version": "2.0.0", 957 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 958 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 959 | "dev": true 960 | }, 961 | "js-tokens": { 962 | "version": "4.0.0", 963 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 964 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 965 | "dev": true 966 | }, 967 | "js-yaml": { 968 | "version": "3.14.0", 969 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", 970 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", 971 | "dev": true, 972 | "requires": { 973 | "argparse": "^1.0.7", 974 | "esprima": "^4.0.0" 975 | } 976 | }, 977 | "json-schema-traverse": { 978 | "version": "0.4.1", 979 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 980 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 981 | "dev": true 982 | }, 983 | "json-stable-stringify-without-jsonify": { 984 | "version": "1.0.1", 985 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 986 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 987 | "dev": true 988 | }, 989 | "json5": { 990 | "version": "1.0.1", 991 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", 992 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", 993 | "dev": true, 994 | "requires": { 995 | "minimist": "^1.2.0" 996 | } 997 | }, 998 | "levn": { 999 | "version": "0.3.0", 1000 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1001 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1002 | "dev": true, 1003 | "requires": { 1004 | "prelude-ls": "~1.1.2", 1005 | "type-check": "~0.3.2" 1006 | } 1007 | }, 1008 | "load-json-file": { 1009 | "version": "2.0.0", 1010 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 1011 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 1012 | "dev": true, 1013 | "requires": { 1014 | "graceful-fs": "^4.1.2", 1015 | "parse-json": "^2.2.0", 1016 | "pify": "^2.0.0", 1017 | "strip-bom": "^3.0.0" 1018 | } 1019 | }, 1020 | "locate-path": { 1021 | "version": "2.0.0", 1022 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 1023 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 1024 | "dev": true, 1025 | "requires": { 1026 | "p-locate": "^2.0.0", 1027 | "path-exists": "^3.0.0" 1028 | } 1029 | }, 1030 | "lodash": { 1031 | "version": "4.17.20", 1032 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 1033 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" 1034 | }, 1035 | "mimic-fn": { 1036 | "version": "2.1.0", 1037 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1038 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1039 | "dev": true 1040 | }, 1041 | "minimatch": { 1042 | "version": "3.0.4", 1043 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1044 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1045 | "dev": true, 1046 | "requires": { 1047 | "brace-expansion": "^1.1.7" 1048 | } 1049 | }, 1050 | "minimist": { 1051 | "version": "1.2.5", 1052 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1053 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1054 | "dev": true 1055 | }, 1056 | "mkdirp": { 1057 | "version": "0.5.5", 1058 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1059 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1060 | "dev": true, 1061 | "requires": { 1062 | "minimist": "^1.2.5" 1063 | } 1064 | }, 1065 | "ms": { 1066 | "version": "2.1.2", 1067 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1068 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1069 | "dev": true 1070 | }, 1071 | "mute-stream": { 1072 | "version": "0.0.8", 1073 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 1074 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 1075 | "dev": true 1076 | }, 1077 | "natural-compare": { 1078 | "version": "1.4.0", 1079 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1080 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1081 | "dev": true 1082 | }, 1083 | "nice-try": { 1084 | "version": "1.0.5", 1085 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1086 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 1087 | "dev": true 1088 | }, 1089 | "normalize-package-data": { 1090 | "version": "2.5.0", 1091 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1092 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1093 | "dev": true, 1094 | "requires": { 1095 | "hosted-git-info": "^2.1.4", 1096 | "resolve": "^1.10.0", 1097 | "semver": "2 || 3 || 4 || 5", 1098 | "validate-npm-package-license": "^3.0.1" 1099 | }, 1100 | "dependencies": { 1101 | "semver": { 1102 | "version": "5.7.1", 1103 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1104 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1105 | "dev": true 1106 | } 1107 | } 1108 | }, 1109 | "object-inspect": { 1110 | "version": "1.8.0", 1111 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", 1112 | "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", 1113 | "dev": true 1114 | }, 1115 | "object-keys": { 1116 | "version": "1.1.1", 1117 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1118 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1119 | "dev": true 1120 | }, 1121 | "object.assign": { 1122 | "version": "4.1.1", 1123 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", 1124 | "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", 1125 | "dev": true, 1126 | "requires": { 1127 | "define-properties": "^1.1.3", 1128 | "es-abstract": "^1.18.0-next.0", 1129 | "has-symbols": "^1.0.1", 1130 | "object-keys": "^1.1.1" 1131 | }, 1132 | "dependencies": { 1133 | "es-abstract": { 1134 | "version": "1.18.0-next.0", 1135 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.0.tgz", 1136 | "integrity": "sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==", 1137 | "dev": true, 1138 | "requires": { 1139 | "es-to-primitive": "^1.2.1", 1140 | "function-bind": "^1.1.1", 1141 | "has": "^1.0.3", 1142 | "has-symbols": "^1.0.1", 1143 | "is-callable": "^1.2.0", 1144 | "is-negative-zero": "^2.0.0", 1145 | "is-regex": "^1.1.1", 1146 | "object-inspect": "^1.8.0", 1147 | "object-keys": "^1.1.1", 1148 | "object.assign": "^4.1.0", 1149 | "string.prototype.trimend": "^1.0.1", 1150 | "string.prototype.trimstart": "^1.0.1" 1151 | } 1152 | } 1153 | } 1154 | }, 1155 | "object.values": { 1156 | "version": "1.1.1", 1157 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", 1158 | "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", 1159 | "dev": true, 1160 | "requires": { 1161 | "define-properties": "^1.1.3", 1162 | "es-abstract": "^1.17.0-next.1", 1163 | "function-bind": "^1.1.1", 1164 | "has": "^1.0.3" 1165 | } 1166 | }, 1167 | "once": { 1168 | "version": "1.4.0", 1169 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1170 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1171 | "dev": true, 1172 | "requires": { 1173 | "wrappy": "1" 1174 | } 1175 | }, 1176 | "onetime": { 1177 | "version": "5.1.2", 1178 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1179 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1180 | "dev": true, 1181 | "requires": { 1182 | "mimic-fn": "^2.1.0" 1183 | } 1184 | }, 1185 | "optionator": { 1186 | "version": "0.8.3", 1187 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1188 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1189 | "dev": true, 1190 | "requires": { 1191 | "deep-is": "~0.1.3", 1192 | "fast-levenshtein": "~2.0.6", 1193 | "levn": "~0.3.0", 1194 | "prelude-ls": "~1.1.2", 1195 | "type-check": "~0.3.2", 1196 | "word-wrap": "~1.2.3" 1197 | } 1198 | }, 1199 | "os-tmpdir": { 1200 | "version": "1.0.2", 1201 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1202 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1203 | "dev": true 1204 | }, 1205 | "p-limit": { 1206 | "version": "1.3.0", 1207 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", 1208 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", 1209 | "dev": true, 1210 | "requires": { 1211 | "p-try": "^1.0.0" 1212 | } 1213 | }, 1214 | "p-locate": { 1215 | "version": "2.0.0", 1216 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 1217 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 1218 | "dev": true, 1219 | "requires": { 1220 | "p-limit": "^1.1.0" 1221 | } 1222 | }, 1223 | "p-try": { 1224 | "version": "1.0.0", 1225 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 1226 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 1227 | "dev": true 1228 | }, 1229 | "parent-module": { 1230 | "version": "1.0.1", 1231 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1232 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1233 | "dev": true, 1234 | "requires": { 1235 | "callsites": "^3.0.0" 1236 | } 1237 | }, 1238 | "parse-json": { 1239 | "version": "2.2.0", 1240 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1241 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 1242 | "dev": true, 1243 | "requires": { 1244 | "error-ex": "^1.2.0" 1245 | } 1246 | }, 1247 | "path-exists": { 1248 | "version": "3.0.0", 1249 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1250 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1251 | "dev": true 1252 | }, 1253 | "path-is-absolute": { 1254 | "version": "1.0.1", 1255 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1256 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1257 | "dev": true 1258 | }, 1259 | "path-key": { 1260 | "version": "2.0.1", 1261 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1262 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1263 | "dev": true 1264 | }, 1265 | "path-parse": { 1266 | "version": "1.0.6", 1267 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1268 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1269 | "dev": true 1270 | }, 1271 | "path-type": { 1272 | "version": "2.0.0", 1273 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 1274 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 1275 | "dev": true, 1276 | "requires": { 1277 | "pify": "^2.0.0" 1278 | } 1279 | }, 1280 | "pify": { 1281 | "version": "2.3.0", 1282 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1283 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1284 | "dev": true 1285 | }, 1286 | "pkg-dir": { 1287 | "version": "2.0.0", 1288 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", 1289 | "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", 1290 | "dev": true, 1291 | "requires": { 1292 | "find-up": "^2.1.0" 1293 | } 1294 | }, 1295 | "prelude-ls": { 1296 | "version": "1.1.2", 1297 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1298 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1299 | "dev": true 1300 | }, 1301 | "prettier": { 1302 | "version": "1.19.1", 1303 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", 1304 | "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", 1305 | "dev": true 1306 | }, 1307 | "prettier-linter-helpers": { 1308 | "version": "1.0.0", 1309 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", 1310 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", 1311 | "dev": true, 1312 | "requires": { 1313 | "fast-diff": "^1.1.2" 1314 | } 1315 | }, 1316 | "progress": { 1317 | "version": "2.0.3", 1318 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1319 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1320 | "dev": true 1321 | }, 1322 | "punycode": { 1323 | "version": "2.1.1", 1324 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1325 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1326 | "dev": true 1327 | }, 1328 | "read-pkg": { 1329 | "version": "2.0.0", 1330 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 1331 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 1332 | "dev": true, 1333 | "requires": { 1334 | "load-json-file": "^2.0.0", 1335 | "normalize-package-data": "^2.3.2", 1336 | "path-type": "^2.0.0" 1337 | } 1338 | }, 1339 | "read-pkg-up": { 1340 | "version": "2.0.0", 1341 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 1342 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 1343 | "dev": true, 1344 | "requires": { 1345 | "find-up": "^2.0.0", 1346 | "read-pkg": "^2.0.0" 1347 | } 1348 | }, 1349 | "regexpp": { 1350 | "version": "2.0.1", 1351 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", 1352 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", 1353 | "dev": true 1354 | }, 1355 | "resolve": { 1356 | "version": "1.17.0", 1357 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 1358 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 1359 | "dev": true, 1360 | "requires": { 1361 | "path-parse": "^1.0.6" 1362 | } 1363 | }, 1364 | "resolve-from": { 1365 | "version": "4.0.0", 1366 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1367 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1368 | "dev": true 1369 | }, 1370 | "restore-cursor": { 1371 | "version": "3.1.0", 1372 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1373 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1374 | "dev": true, 1375 | "requires": { 1376 | "onetime": "^5.1.0", 1377 | "signal-exit": "^3.0.2" 1378 | } 1379 | }, 1380 | "rimraf": { 1381 | "version": "2.6.3", 1382 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1383 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 1384 | "dev": true, 1385 | "requires": { 1386 | "glob": "^7.1.3" 1387 | } 1388 | }, 1389 | "rollup": { 1390 | "version": "2.26.10", 1391 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.10.tgz", 1392 | "integrity": "sha512-dUnjCWOA0h9qNX6qtcHidyatz8FAFZxVxt1dbcGtKdlJkpSxGK3G9+DLCYvtZr9v94D129ij9zUhG+xbRoqepw==", 1393 | "dev": true, 1394 | "requires": { 1395 | "fsevents": "~2.1.2" 1396 | } 1397 | }, 1398 | "run-async": { 1399 | "version": "2.4.1", 1400 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 1401 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", 1402 | "dev": true 1403 | }, 1404 | "rxjs": { 1405 | "version": "6.6.3", 1406 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", 1407 | "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", 1408 | "dev": true, 1409 | "requires": { 1410 | "tslib": "^1.9.0" 1411 | } 1412 | }, 1413 | "safer-buffer": { 1414 | "version": "2.1.2", 1415 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1416 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1417 | "dev": true 1418 | }, 1419 | "semver": { 1420 | "version": "6.3.0", 1421 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1422 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1423 | "dev": true 1424 | }, 1425 | "shebang-command": { 1426 | "version": "1.2.0", 1427 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1428 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1429 | "dev": true, 1430 | "requires": { 1431 | "shebang-regex": "^1.0.0" 1432 | } 1433 | }, 1434 | "shebang-regex": { 1435 | "version": "1.0.0", 1436 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1437 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1438 | "dev": true 1439 | }, 1440 | "signal-exit": { 1441 | "version": "3.0.3", 1442 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 1443 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 1444 | "dev": true 1445 | }, 1446 | "slice-ansi": { 1447 | "version": "2.1.0", 1448 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 1449 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 1450 | "dev": true, 1451 | "requires": { 1452 | "ansi-styles": "^3.2.0", 1453 | "astral-regex": "^1.0.0", 1454 | "is-fullwidth-code-point": "^2.0.0" 1455 | }, 1456 | "dependencies": { 1457 | "is-fullwidth-code-point": { 1458 | "version": "2.0.0", 1459 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1460 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1461 | "dev": true 1462 | } 1463 | } 1464 | }, 1465 | "spdx-correct": { 1466 | "version": "3.1.1", 1467 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 1468 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 1469 | "dev": true, 1470 | "requires": { 1471 | "spdx-expression-parse": "^3.0.0", 1472 | "spdx-license-ids": "^3.0.0" 1473 | } 1474 | }, 1475 | "spdx-exceptions": { 1476 | "version": "2.3.0", 1477 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 1478 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 1479 | "dev": true 1480 | }, 1481 | "spdx-expression-parse": { 1482 | "version": "3.0.1", 1483 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 1484 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 1485 | "dev": true, 1486 | "requires": { 1487 | "spdx-exceptions": "^2.1.0", 1488 | "spdx-license-ids": "^3.0.0" 1489 | } 1490 | }, 1491 | "spdx-license-ids": { 1492 | "version": "3.0.6", 1493 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", 1494 | "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", 1495 | "dev": true 1496 | }, 1497 | "sprintf-js": { 1498 | "version": "1.0.3", 1499 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1500 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1501 | "dev": true 1502 | }, 1503 | "string-width": { 1504 | "version": "4.2.0", 1505 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1506 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1507 | "dev": true, 1508 | "requires": { 1509 | "emoji-regex": "^8.0.0", 1510 | "is-fullwidth-code-point": "^3.0.0", 1511 | "strip-ansi": "^6.0.0" 1512 | }, 1513 | "dependencies": { 1514 | "strip-ansi": { 1515 | "version": "6.0.0", 1516 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1517 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1518 | "dev": true, 1519 | "requires": { 1520 | "ansi-regex": "^5.0.0" 1521 | } 1522 | } 1523 | } 1524 | }, 1525 | "string.prototype.trimend": { 1526 | "version": "1.0.1", 1527 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 1528 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 1529 | "dev": true, 1530 | "requires": { 1531 | "define-properties": "^1.1.3", 1532 | "es-abstract": "^1.17.5" 1533 | } 1534 | }, 1535 | "string.prototype.trimstart": { 1536 | "version": "1.0.1", 1537 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 1538 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 1539 | "dev": true, 1540 | "requires": { 1541 | "define-properties": "^1.1.3", 1542 | "es-abstract": "^1.17.5" 1543 | } 1544 | }, 1545 | "strip-ansi": { 1546 | "version": "5.2.0", 1547 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1548 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1549 | "dev": true, 1550 | "requires": { 1551 | "ansi-regex": "^4.1.0" 1552 | }, 1553 | "dependencies": { 1554 | "ansi-regex": { 1555 | "version": "4.1.0", 1556 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 1557 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 1558 | "dev": true 1559 | } 1560 | } 1561 | }, 1562 | "strip-bom": { 1563 | "version": "3.0.0", 1564 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 1565 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 1566 | "dev": true 1567 | }, 1568 | "strip-json-comments": { 1569 | "version": "3.1.1", 1570 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1571 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1572 | "dev": true 1573 | }, 1574 | "supports-color": { 1575 | "version": "5.5.0", 1576 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1577 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1578 | "dev": true, 1579 | "requires": { 1580 | "has-flag": "^3.0.0" 1581 | } 1582 | }, 1583 | "table": { 1584 | "version": "5.4.6", 1585 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 1586 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 1587 | "dev": true, 1588 | "requires": { 1589 | "ajv": "^6.10.2", 1590 | "lodash": "^4.17.14", 1591 | "slice-ansi": "^2.1.0", 1592 | "string-width": "^3.0.0" 1593 | }, 1594 | "dependencies": { 1595 | "emoji-regex": { 1596 | "version": "7.0.3", 1597 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 1598 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 1599 | "dev": true 1600 | }, 1601 | "is-fullwidth-code-point": { 1602 | "version": "2.0.0", 1603 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1604 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1605 | "dev": true 1606 | }, 1607 | "string-width": { 1608 | "version": "3.1.0", 1609 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1610 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1611 | "dev": true, 1612 | "requires": { 1613 | "emoji-regex": "^7.0.1", 1614 | "is-fullwidth-code-point": "^2.0.0", 1615 | "strip-ansi": "^5.1.0" 1616 | } 1617 | } 1618 | } 1619 | }, 1620 | "text-table": { 1621 | "version": "0.2.0", 1622 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1623 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1624 | "dev": true 1625 | }, 1626 | "through": { 1627 | "version": "2.3.8", 1628 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1629 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1630 | "dev": true 1631 | }, 1632 | "tmp": { 1633 | "version": "0.0.33", 1634 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1635 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1636 | "dev": true, 1637 | "requires": { 1638 | "os-tmpdir": "~1.0.2" 1639 | } 1640 | }, 1641 | "tsconfig-paths": { 1642 | "version": "3.9.0", 1643 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", 1644 | "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", 1645 | "dev": true, 1646 | "requires": { 1647 | "@types/json5": "^0.0.29", 1648 | "json5": "^1.0.1", 1649 | "minimist": "^1.2.0", 1650 | "strip-bom": "^3.0.0" 1651 | } 1652 | }, 1653 | "tslib": { 1654 | "version": "1.13.0", 1655 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 1656 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", 1657 | "dev": true 1658 | }, 1659 | "type-check": { 1660 | "version": "0.3.2", 1661 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1662 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1663 | "dev": true, 1664 | "requires": { 1665 | "prelude-ls": "~1.1.2" 1666 | } 1667 | }, 1668 | "type-fest": { 1669 | "version": "0.8.1", 1670 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 1671 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 1672 | "dev": true 1673 | }, 1674 | "uri-js": { 1675 | "version": "4.4.0", 1676 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", 1677 | "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", 1678 | "dev": true, 1679 | "requires": { 1680 | "punycode": "^2.1.0" 1681 | } 1682 | }, 1683 | "v8-compile-cache": { 1684 | "version": "2.1.1", 1685 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", 1686 | "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", 1687 | "dev": true 1688 | }, 1689 | "validate-npm-package-license": { 1690 | "version": "3.0.4", 1691 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1692 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1693 | "dev": true, 1694 | "requires": { 1695 | "spdx-correct": "^3.0.0", 1696 | "spdx-expression-parse": "^3.0.0" 1697 | } 1698 | }, 1699 | "validate.js": { 1700 | "version": "0.13.1", 1701 | "resolved": "https://registry.npmjs.org/validate.js/-/validate.js-0.13.1.tgz", 1702 | "integrity": "sha512-PnFM3xiZ+kYmLyTiMgTYmU7ZHkjBZz2/+F0DaALc/uUtVzdCt1wAosvYJ5hFQi/hz8O4zb52FQhHZRC+uVkJ+g==" 1703 | }, 1704 | "which": { 1705 | "version": "1.3.1", 1706 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1707 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1708 | "dev": true, 1709 | "requires": { 1710 | "isexe": "^2.0.0" 1711 | } 1712 | }, 1713 | "word-wrap": { 1714 | "version": "1.2.3", 1715 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1716 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1717 | "dev": true 1718 | }, 1719 | "wrappy": { 1720 | "version": "1.0.2", 1721 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1722 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1723 | "dev": true 1724 | }, 1725 | "write": { 1726 | "version": "1.0.3", 1727 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 1728 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 1729 | "dev": true, 1730 | "requires": { 1731 | "mkdirp": "^0.5.1" 1732 | } 1733 | } 1734 | } 1735 | } 1736 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@rootstrap/validate", 3 | "version": "1.0.0", 4 | "description": "An extension of validate.js with useful and common custom validations", 5 | "main": "lib/index.js", 6 | "module": "src/index.js", 7 | "files": [ 8 | "lib", 9 | "README.md" 10 | ], 11 | "scripts": { 12 | "build": "rollup -c", 13 | "prepare": "rollup -c" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/rootstrap/validate.git" 18 | }, 19 | "keywords": [ 20 | "validate.js", 21 | "js", 22 | "react", 23 | "react-native", 24 | "validations", 25 | "rootstrap" 26 | ], 27 | "author": "Agustina Chaer", 28 | "license": "MIT", 29 | "bugs": { 30 | "url": "https://github.com/rootstrap/validate/issues" 31 | }, 32 | "homepage": "https://github.com/rootstrap/validate#readme", 33 | "dependencies": { 34 | "lodash": "4.17.20", 35 | "validate.js": "^0.13.1" 36 | }, 37 | "devDependencies": { 38 | "eslint": "^6.6.0", 39 | "eslint-config-prettier": "^6.11.0", 40 | "eslint-plugin-import": "^2.18.2", 41 | "eslint-plugin-prettier": "^3.1.1", 42 | "prettier": "^1.19.1", 43 | "rollup": "^2.26.10" 44 | }, 45 | "peerDependencies": { 46 | "lodash": "4.17.20" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /resources/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootstrap/validate/212f1e14801be30d6c62e5bf2001583f20349349/resources/logo.png -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import pkg from './package.json'; 2 | 3 | export default { 4 | input: 'src/index.js', 5 | external: ['lodash'], 6 | output: [{ file: pkg.main, format: 'cjs' }], 7 | }; 8 | -------------------------------------------------------------------------------- /src/conditionalConstraints.js: -------------------------------------------------------------------------------- 1 | import validate from 'validate.js'; 2 | import get from 'lodash/get'; 3 | 4 | const conditionalConstraints = ( 5 | value, 6 | { dependencies, constraints }, 7 | key, 8 | attributes, 9 | ) => { 10 | let validDependencies = true; 11 | dependencies.forEach( 12 | ({ attribute: name, constraints: dependencyConstraints }) => { 13 | const errors = validate.single( 14 | get(attributes, name), 15 | dependencyConstraints, 16 | ); 17 | validDependencies = validDependencies && !errors; 18 | }, 19 | ); 20 | if (validDependencies) { 21 | const errors = validate( 22 | attributes, 23 | { [key]: constraints }, 24 | { fullMessages: false }, 25 | ); 26 | if (errors) { 27 | return errors[key]; 28 | } 29 | } 30 | }; 31 | 32 | export default conditionalConstraints; 33 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import validate from 'validate.js'; 2 | 3 | import noPresence from './noPresence'; 4 | import conditionalConstraints from './conditionalConstraints'; 5 | 6 | /* 7 | Overrides allowEmpty for presence default because it makes no sense 8 | 9 | Should you need to set it back to the default you can simply override it 10 | the same way it is overwritten here. 11 | 12 | */ 13 | validate.validators.presence.options = { allowEmpty: false }; 14 | 15 | // CUSTOM, BUT COMMON, VALIDATORS 16 | validate.validators.noPresence = noPresence; 17 | validate.validators.conditionalConstraints = conditionalConstraints; 18 | 19 | export default validate; 20 | -------------------------------------------------------------------------------- /src/noPresence.js: -------------------------------------------------------------------------------- 1 | import validate from 'validate.js'; 2 | 3 | const noPresence = (value, { includeFalse = false }) => { 4 | const isNotPresent = validate.single(value, { 5 | presence: true, 6 | }); 7 | 8 | if (!isNotPresent || (value === false && !includeFalse)) { 9 | return 'ERRORS.noPresence'; 10 | } 11 | }; 12 | 13 | export default noPresence; 14 | --------------------------------------------------------------------------------