├── .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 | [](https://codeclimate.com/github/rootstrap/validate/maintainability) [](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 |
--------------------------------------------------------------------------------