├── .dependabot └── config.yml ├── .editorconfig ├── .eslintrc.json ├── .github └── workflows │ └── nodejs.yml ├── .gitignore ├── .npmrc ├── .prettierrc ├── .travis.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE.md ├── README.md ├── appveyor.yml ├── degit ├── help.md ├── package-lock.json ├── package.json ├── rollup.config.js ├── src ├── bin.js ├── index.js └── utils.js └── test └── test.js /.dependabot/config.yml: -------------------------------------------------------------------------------- 1 | version: 1 2 | update_configs: 3 | - package_manager: 'javascript' 4 | directory: '/' 5 | update_schedule: 'weekly' 6 | target_branch: 'master' 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_size = 2 7 | indent_style = tab 8 | end_of_line = lf 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | indent_style = tab 14 | trim_trailing_whitespace = false 15 | 16 | [{*.json,*.yml}] 17 | indent_style = tab 18 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "rules": { 4 | "no-cond-assign": 0, 5 | "no-unused-vars": 2, 6 | "object-shorthand": [2, "always"], 7 | "no-console": 0, 8 | "no-const-assign": 2, 9 | "no-class-assign": 2, 10 | "no-this-before-super": 2, 11 | "no-var": 2, 12 | "no-unreachable": 2, 13 | "valid-typeof": 2, 14 | "one-var": [2, "never"], 15 | "prefer-arrow-callback": 2, 16 | "prefer-const": [2, { "destructuring": "all" }], 17 | "no-inner-declarations": 0 18 | }, 19 | "env": { 20 | "es6": true, 21 | "node": true, 22 | "mocha": true 23 | }, 24 | "extends": [ 25 | "eslint:recommended", 26 | "plugin:import/errors", 27 | "plugin:import/warnings", 28 | "prettier" 29 | ], 30 | "parserOptions": { 31 | "ecmaVersion": 8, 32 | "sourceType": "module" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /.github/workflows/nodejs.yml: -------------------------------------------------------------------------------- 1 | name: Node.js CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | strategy: 11 | matrix: 12 | node-version: [8.x, 10.x, 12.x] 13 | 14 | steps: 15 | - uses: actions/checkout@v2 16 | - name: Use Node.js ${{ matrix.node-version }} 17 | uses: actions/setup-node@v1 18 | with: 19 | node-version: ${{ matrix.node-version }} 20 | - run: npm ci 21 | - run: npm run build 22 | - run: npm test 23 | - run: npm run lint 24 | env: 25 | CI: true 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | .tmp 4 | dist -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact=true 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "bracketSpacing": true, 4 | "endOfLine": "lf", 5 | "htmlWhitespaceSensitivity": "css", 6 | "insertPragma": false, 7 | "printWidth": 80, 8 | "proseWrap": "preserve", 9 | "requirePragma": false, 10 | "quoteProps": "as-needed", 11 | "semi": true, 12 | "singleQuote": true, 13 | "tabWidth": 2, 14 | "trailingComma": false, 15 | "useTabs": true 16 | } 17 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '8' 4 | - '10' 5 | - lts/* 6 | - node 7 | 8 | addons: 9 | apt: 10 | sources: 11 | - ubuntu-toolchain-r-test 12 | packages: 13 | - libstdc++-4.9-dev 14 | 15 | script: 16 | - npm run lint 17 | - npm test -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # degit changelog 2 | 3 | ## 2.8.4 4 | 5 | * Whoops 6 | 7 | ## 2.8.3 8 | 9 | * Reinstate `#!/usr/bin/env node` ([#273](https://github.com/Rich-Harris/degit/issues/273)) 10 | 11 | ## 2.8.2 12 | 13 | * Fix `bin`/`main` locations ([#273](https://github.com/Rich-Harris/degit/issues/273)) 14 | * Update dependencies 15 | 16 | ## 2.8.1 17 | 18 | * Use `HEAD` instead of `master` ([#243](https://github.com/Rich-Harris/degit/pull/243)]) 19 | 20 | ## 2.8.0 21 | 22 | * Sort by recency in interactive mode 23 | 24 | ## 2.7.0 25 | 26 | * Bundle for a faster install 27 | 28 | ## 2.6.0 29 | 30 | * Add an interactive mode ([#4](https://github.com/Rich-Harris/degit/issues/4)) 31 | 32 | ## 2.5.0 33 | 34 | * Add `--mode=git` for cloning private repos ([#29](https://github.com/Rich-Harris/degit/pull/29)) 35 | 36 | ## 2.4.0 37 | 38 | * Clone subdirectories from repos (`user/repo/subdir`) 39 | 40 | ## 2.3.0 41 | 42 | * Support HTTPS proxying where `https_proxy` env var is supplied ([#26](https://github.com/Rich-Harris/degit/issues/26)) 43 | 44 | ## 2.2.2 45 | 46 | - Improve CLI error logging ([#49](https://github.com/Rich-Harris/degit/pull/49)) 47 | 48 | ## 2.2.1 49 | 50 | - Update `help.md` for Sourcehut support 51 | 52 | ## 2.2.0 53 | 54 | - Sourcehut support ([#85](https://github.com/Rich-Harris/degit/pull/85)) 55 | 56 | ## 2.1.4 57 | 58 | - Fix actions ([#65](https://github.com/Rich-Harris/degit/pull/65)) 59 | - Improve CLI error logging ([#46](https://github.com/Rich-Harris/degit/pull/46)) 60 | 61 | ## 2.1.3 62 | 63 | - Install `sander` ([#34](https://github.com/Rich-Harris/degit/issues/34)) 64 | 65 | ## 2.1.2 66 | 67 | - Remove `console.log` 68 | 69 | ## 2.1.1 70 | 71 | - Oops, managed to publish 2.1.0 without building 72 | 73 | ## 2.1.0 74 | 75 | - Add actions ([#28](https://github.com/Rich-Harris/degit/pull/28)) 76 | 77 | ## 2.0.2 78 | 79 | - Allow flags like `-v` before argument ([#25](https://github.com/Rich-Harris/degit/issues/25)) 80 | 81 | ## 2.0.1 82 | 83 | - Update node-tar for Node 9 compatibility 84 | 85 | ## 2.0.0 86 | 87 | - Expose API for use in Node scripts ([#23](https://github.com/Rich-Harris/degit/issues/23)) 88 | 89 | ## 1.2.2 90 | 91 | - Fix `files` in package.json 92 | 93 | ## 1.2.1 94 | 95 | - Add `engines` field ([#17](https://github.com/Rich-Harris/degit/issues/17)) 96 | 97 | ## 1.2.0 98 | 99 | - Windows support ([#1](https://github.com/Rich-Harris/degit/issues/1)) 100 | - Offline support and `--cache` flag ([#8](https://github.com/Rich-Harris/degit/issues/8)) 101 | - `degit --help` ([#5](https://github.com/Rich-Harris/degit/issues/5)) 102 | - `--verbose` flag 103 | 104 | ## 1.1.0 105 | 106 | - Use HTTPS, not SSH ([#11](https://github.com/Rich-Harris/degit/issues/11)) 107 | 108 | ## 1.0.0 109 | 110 | - First release 111 | -------------------------------------------------------------------------------- /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 yogiboaron@gmail.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 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019 [these people](https://github.com/Rich-Harris/degit/graphs/contributors) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # degit — straightforward project scaffolding 2 | 3 | [![Travis CI build status](https://badgen.net/travis/Rich-Harris/degit/master)](https://travis-ci.org/Rich-Harris/degit) 4 | [![AppVeyor build status](https://badgen.net/appveyor/ci/Rich-Harris/degit/master)](https://ci.appveyor.com/project/Rich-Harris/degit/branch/master) 5 | [![Known Vulnerabilities](https://snyk.io/test/npm/degit/badge.svg)](https://snyk.io/test/npm/degit) 6 | [![install size](https://badgen.net/packagephobia/install/degit)](https://packagephobia.now.sh/result?p=degit) 7 | [![npm package version](https://badgen.net/npm/v/degit)](https://npm.im/degit) 8 | [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v1.4%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) 9 | [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](http://makeapullrequest.com) 10 | 11 | **degit** makes copies of git repositories. When you run `degit some-user/some-repo`, it will find the latest commit on https://github.com/some-user/some-repo and download the associated tar file to `~/.degit/some-user/some-repo/commithash.tar.gz` if it doesn't already exist locally. (This is much quicker than using `git clone`, because you're not downloading the entire git history.) 12 | 13 | _Requires Node 8 or above, because `async` and `await` are the cat's pyjamas_ 14 | 15 | ## Installation 16 | 17 | ```bash 18 | npm install -g degit 19 | ``` 20 | 21 | ## Usage 22 | 23 | ### Basics 24 | 25 | The simplest use of degit is to download the master branch of a repo from GitHub to the current working directory: 26 | 27 | ```bash 28 | degit user/repo 29 | 30 | # these commands are equivalent 31 | degit github:user/repo 32 | degit git@github.com:user/repo 33 | degit https://github.com/user/repo 34 | ``` 35 | 36 | Or you can download from GitLab and BitBucket: 37 | 38 | ```bash 39 | # download from GitLab 40 | degit gitlab:user/repo 41 | degit git@gitlab.com:user/repo 42 | degit https://gitlab.com/user/repo 43 | 44 | # download from BitBucket 45 | degit bitbucket:user/repo 46 | degit git@bitbucket.org:user/repo 47 | degit https://bitbucket.org/user/repo 48 | 49 | # download from Sourcehut 50 | degit git.sr.ht/user/repo 51 | degit git@git.sr.ht:user/repo 52 | degit https://git.sr.ht/user/repo 53 | ``` 54 | 55 | ### Specify a tag, branch or commit 56 | 57 | The default branch is `master`. 58 | 59 | ```bash 60 | degit user/repo#dev # branch 61 | degit user/repo#v1.2.3 # release tag 62 | degit user/repo#1234abcd # commit hash 63 | ```` 64 | 65 | ### Create a new folder for the project 66 | 67 | If the second argument is omitted, the repo will be cloned to the current directory. 68 | 69 | ```bash 70 | degit user/repo my-new-project 71 | ``` 72 | 73 | ### Specify a subdirectory 74 | 75 | To clone a specific subdirectory instead of the entire repo, just add it to the argument: 76 | 77 | ```bash 78 | degit user/repo/subdirectory 79 | ``` 80 | 81 | ### HTTPS proxying 82 | 83 | If you have an `https_proxy` environment variable, Degit will use it. 84 | 85 | ### Private repositories 86 | 87 | Private repos can be cloned by specifying `--mode=git` (the default is `tar`). In this mode, Degit will use `git` under the hood. It's much slower than fetching a tarball, which is why it's not the default. 88 | 89 | Note: this clones over SSH, not HTTPS. 90 | 91 | ### See all options 92 | 93 | ```bash 94 | degit --help 95 | ``` 96 | 97 | ## Not supported 98 | 99 | - Private repositories 100 | 101 | Pull requests are very welcome! 102 | 103 | ## Wait, isn't this just `git clone --depth 1`? 104 | 105 | A few salient differences: 106 | 107 | - If you `git clone`, you get a `.git` folder that pertains to the project template, rather than your project. You can easily forget to re-init the repository, and end up confusing yourself 108 | - Caching and offline support (if you already have a `.tar.gz` file for a specific commit, you don't need to fetch it again). 109 | - Less to type (`degit user/repo` instead of `git clone --depth 1 git@github.com:user/repo`) 110 | - Composability via [actions](#actions) 111 | - Future capabilities — [interactive mode](https://github.com/Rich-Harris/degit/issues/4), [friendly onboarding and postinstall scripts](https://github.com/Rich-Harris/degit/issues/6) 112 | 113 | ## JavaScript API 114 | 115 | You can also use degit inside a Node script: 116 | 117 | ```js 118 | const degit = require('degit'); 119 | 120 | const emitter = degit('user/repo', { 121 | cache: true, 122 | force: true, 123 | verbose: true, 124 | }); 125 | 126 | emitter.on('info', info => { 127 | console.log(info.message); 128 | }); 129 | 130 | emitter.clone('path/to/dest').then(() => { 131 | console.log('done'); 132 | }); 133 | ``` 134 | 135 | ## Actions 136 | 137 | You can manipulate repositories after they have been cloned with _actions_, specified in a `degit.json` file that lives at the top level of the working directory. Currently, there are two actions — `clone` and `remove`. Additional actions may be added in future. 138 | 139 | ### clone 140 | 141 | ```json 142 | // degit.json 143 | [ 144 | { 145 | "action": "clone", 146 | "src": "user/another-repo" 147 | } 148 | ] 149 | ``` 150 | 151 | This will clone `user/another-repo`, preserving the contents of the existing working directory. This allows you to, say, add a new README.md or starter file to a repo that you do not control. The cloned repo can contain its own `degit.json` actions. 152 | 153 | ### remove 154 | 155 | ```json 156 | // degit.json 157 | [ 158 | { 159 | "action": "remove", 160 | "files": ["LICENSE"] 161 | } 162 | ] 163 | ``` 164 | 165 | Remove a file at the specified path. 166 | 167 | ## See also 168 | 169 | - [zel](https://github.com/vutran/zel) by [Vu Tran](https://twitter.com/tranvu) 170 | - [gittar](https://github.com/lukeed/gittar) by [Luke Edwards](https://twitter.com/lukeed05) 171 | 172 | ## License 173 | 174 | [MIT](LICENSE.md). 175 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | # http://www.appveyor.com/docs/appveyor-yml 2 | 3 | version: '{build}' 4 | 5 | clone_depth: 10 6 | 7 | init: 8 | - git config --global core.autocrlf false 9 | 10 | environment: 11 | matrix: 12 | # node.js 13 | - nodejs_version: 8 14 | 15 | install: 16 | - ps: Install-Product node $env:nodejs_version 17 | - npm install 18 | 19 | build: off 20 | 21 | test_script: 22 | - node --version && npm --version 23 | - npm run lint 24 | - npm test 25 | 26 | matrix: 27 | fast_finish: false 28 | # cache: 29 | # - C:\Users\appveyor\AppData\Roaming\npm-cache -> package.json # npm cache 30 | # - node_modules -> package.json # local npm modules 31 | -------------------------------------------------------------------------------- /degit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require('./dist/bin.js'); 3 | -------------------------------------------------------------------------------- /help.md: -------------------------------------------------------------------------------- 1 | # _degit_ 2 | 3 | Usage: 4 | 5 | `degit [#ref] [] [options]` 6 | 7 | Fetches the `src` repo, and extracts it to `dest` (or the current directory). 8 | 9 | The `src` argument can be any of the following: 10 | 11 | ## GitHub repos 12 | 13 | user/repo 14 | github:user/repo 15 | https://github.com/user/repo 16 | 17 | ## GitLab repos 18 | 19 | gitlab:user/repo 20 | https://gitlab.com/user/repo 21 | 22 | ## BitBucket repos 23 | 24 | bitbucket:user/repo 25 | https://bitbucket.com/user/repo 26 | 27 | ## Sourcehut repos 28 | 29 | git.sr.ht/user/repo 30 | git@git.sr.ht:user/repo 31 | https://git.sr.ht/user/repo 32 | 33 | You can append a #ref to any of the above: 34 | 35 | ## Branches (defaults to master) 36 | 37 | user/repo#dev 38 | 39 | ## Tags 40 | 41 | user/repo#v1.2.3 42 | 43 | ## Commit hashes 44 | 45 | user/repo#abcd1234 46 | 47 | The `dest` directory (or the current directory, if unspecified) must be empty 48 | unless the `--force` option is used. 49 | 50 | Options: 51 | 52 | `--help`, `-h` Show this message 53 | `--cache`, `-c` Only use local cache 54 | `--force`, `-f` Allow non-empty destination directory 55 | `--verbose`, `-v` Extra logging 56 | `--mode=`, `-m=` Force the mode by which degit clones the repo 57 | Valid options are `tar` or `git` (uses SSH) 58 | 59 | See https://github.com/Rich-Harris/degit for more information 60 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "degit", 3 | "version": "2.8.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.12.11", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 10 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.4" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.12.11", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", 19 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.13.10", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", 25 | "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.12.11", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | }, 32 | "dependencies": { 33 | "ansi-styles": { 34 | "version": "3.2.1", 35 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 36 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 37 | "dev": true, 38 | "requires": { 39 | "color-convert": "^1.9.0" 40 | } 41 | }, 42 | "chalk": { 43 | "version": "2.4.2", 44 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 45 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 46 | "dev": true, 47 | "requires": { 48 | "ansi-styles": "^3.2.1", 49 | "escape-string-regexp": "^1.0.5", 50 | "supports-color": "^5.3.0" 51 | } 52 | }, 53 | "color-convert": { 54 | "version": "1.9.3", 55 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 56 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 57 | "dev": true, 58 | "requires": { 59 | "color-name": "1.1.3" 60 | } 61 | }, 62 | "color-name": { 63 | "version": "1.1.3", 64 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 65 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 66 | "dev": true 67 | }, 68 | "has-flag": { 69 | "version": "3.0.0", 70 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 71 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 72 | "dev": true 73 | }, 74 | "supports-color": { 75 | "version": "5.5.0", 76 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 77 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 78 | "dev": true, 79 | "requires": { 80 | "has-flag": "^3.0.0" 81 | } 82 | } 83 | } 84 | }, 85 | "@eslint/eslintrc": { 86 | "version": "0.4.0", 87 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", 88 | "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", 89 | "dev": true, 90 | "requires": { 91 | "ajv": "^6.12.4", 92 | "debug": "^4.1.1", 93 | "espree": "^7.3.0", 94 | "globals": "^12.1.0", 95 | "ignore": "^4.0.6", 96 | "import-fresh": "^3.2.1", 97 | "js-yaml": "^3.13.1", 98 | "minimatch": "^3.0.4", 99 | "strip-json-comments": "^3.1.1" 100 | }, 101 | "dependencies": { 102 | "globals": { 103 | "version": "12.4.0", 104 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 105 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 106 | "dev": true, 107 | "requires": { 108 | "type-fest": "^0.8.1" 109 | } 110 | } 111 | } 112 | }, 113 | "@rollup/plugin-commonjs": { 114 | "version": "18.0.0", 115 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-18.0.0.tgz", 116 | "integrity": "sha512-fj92shhg8luw7XbA0HowAqz90oo7qtLGwqTKbyZ8pmOyH8ui5e+u0wPEgeHLH3djcVma6gUCUrjY6w5R2o1u6g==", 117 | "dev": true, 118 | "requires": { 119 | "@rollup/pluginutils": "^3.1.0", 120 | "commondir": "^1.0.1", 121 | "estree-walker": "^2.0.1", 122 | "glob": "^7.1.6", 123 | "is-reference": "^1.2.1", 124 | "magic-string": "^0.25.7", 125 | "resolve": "^1.17.0" 126 | }, 127 | "dependencies": { 128 | "estree-walker": { 129 | "version": "2.0.2", 130 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 131 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 132 | "dev": true 133 | }, 134 | "is-reference": { 135 | "version": "1.2.1", 136 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 137 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 138 | "dev": true, 139 | "requires": { 140 | "@types/estree": "*" 141 | } 142 | }, 143 | "magic-string": { 144 | "version": "0.25.7", 145 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 146 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 147 | "dev": true, 148 | "requires": { 149 | "sourcemap-codec": "^1.4.4" 150 | } 151 | }, 152 | "resolve": { 153 | "version": "1.20.0", 154 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 155 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 156 | "dev": true, 157 | "requires": { 158 | "is-core-module": "^2.2.0", 159 | "path-parse": "^1.0.6" 160 | } 161 | } 162 | } 163 | }, 164 | "@rollup/plugin-node-resolve": { 165 | "version": "11.2.1", 166 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", 167 | "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", 168 | "dev": true, 169 | "requires": { 170 | "@rollup/pluginutils": "^3.1.0", 171 | "@types/resolve": "1.17.1", 172 | "builtin-modules": "^3.1.0", 173 | "deepmerge": "^4.2.2", 174 | "is-module": "^1.0.0", 175 | "resolve": "^1.19.0" 176 | }, 177 | "dependencies": { 178 | "resolve": { 179 | "version": "1.20.0", 180 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 181 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 182 | "dev": true, 183 | "requires": { 184 | "is-core-module": "^2.2.0", 185 | "path-parse": "^1.0.6" 186 | } 187 | } 188 | } 189 | }, 190 | "@rollup/pluginutils": { 191 | "version": "3.1.0", 192 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 193 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 194 | "dev": true, 195 | "requires": { 196 | "@types/estree": "0.0.39", 197 | "estree-walker": "^1.0.1", 198 | "picomatch": "^2.2.2" 199 | }, 200 | "dependencies": { 201 | "estree-walker": { 202 | "version": "1.0.1", 203 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 204 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 205 | "dev": true 206 | } 207 | } 208 | }, 209 | "@types/estree": { 210 | "version": "0.0.39", 211 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 212 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 213 | "dev": true 214 | }, 215 | "@types/json5": { 216 | "version": "0.0.29", 217 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", 218 | "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", 219 | "dev": true 220 | }, 221 | "@types/node": { 222 | "version": "14.14.37", 223 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", 224 | "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", 225 | "dev": true 226 | }, 227 | "@types/parse-json": { 228 | "version": "4.0.0", 229 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", 230 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", 231 | "dev": true 232 | }, 233 | "@types/resolve": { 234 | "version": "1.17.1", 235 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 236 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 237 | "dev": true, 238 | "requires": { 239 | "@types/node": "*" 240 | } 241 | }, 242 | "@ungap/promise-all-settled": { 243 | "version": "1.1.2", 244 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 245 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 246 | "dev": true 247 | }, 248 | "acorn": { 249 | "version": "7.4.1", 250 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 251 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 252 | "dev": true 253 | }, 254 | "acorn-jsx": { 255 | "version": "5.3.1", 256 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", 257 | "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", 258 | "dev": true 259 | }, 260 | "agent-base": { 261 | "version": "6.0.2", 262 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 263 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 264 | "dev": true, 265 | "requires": { 266 | "debug": "4" 267 | } 268 | }, 269 | "aggregate-error": { 270 | "version": "3.1.0", 271 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 272 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 273 | "dev": true, 274 | "requires": { 275 | "clean-stack": "^2.0.0", 276 | "indent-string": "^4.0.0" 277 | } 278 | }, 279 | "ajv": { 280 | "version": "6.12.6", 281 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 282 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 283 | "dev": true, 284 | "requires": { 285 | "fast-deep-equal": "^3.1.1", 286 | "fast-json-stable-stringify": "^2.0.0", 287 | "json-schema-traverse": "^0.4.1", 288 | "uri-js": "^4.2.2" 289 | } 290 | }, 291 | "ansi-colors": { 292 | "version": "4.1.1", 293 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 294 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 295 | "dev": true 296 | }, 297 | "ansi-escapes": { 298 | "version": "4.3.2", 299 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 300 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 301 | "dev": true, 302 | "requires": { 303 | "type-fest": "^0.21.3" 304 | }, 305 | "dependencies": { 306 | "type-fest": { 307 | "version": "0.21.3", 308 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 309 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 310 | "dev": true 311 | } 312 | } 313 | }, 314 | "ansi-regex": { 315 | "version": "5.0.0", 316 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 317 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 318 | "dev": true 319 | }, 320 | "ansi-styles": { 321 | "version": "4.3.0", 322 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 323 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 324 | "dev": true, 325 | "requires": { 326 | "color-convert": "^2.0.1" 327 | } 328 | }, 329 | "anymatch": { 330 | "version": "3.1.1", 331 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 332 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 333 | "dev": true, 334 | "requires": { 335 | "normalize-path": "^3.0.0", 336 | "picomatch": "^2.0.4" 337 | } 338 | }, 339 | "argparse": { 340 | "version": "1.0.10", 341 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 342 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 343 | "dev": true, 344 | "requires": { 345 | "sprintf-js": "~1.0.2" 346 | } 347 | }, 348 | "array-includes": { 349 | "version": "3.1.3", 350 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", 351 | "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", 352 | "dev": true, 353 | "requires": { 354 | "call-bind": "^1.0.2", 355 | "define-properties": "^1.1.3", 356 | "es-abstract": "^1.18.0-next.2", 357 | "get-intrinsic": "^1.1.1", 358 | "is-string": "^1.0.5" 359 | } 360 | }, 361 | "array.prototype.flat": { 362 | "version": "1.2.4", 363 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", 364 | "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", 365 | "dev": true, 366 | "requires": { 367 | "call-bind": "^1.0.0", 368 | "define-properties": "^1.1.3", 369 | "es-abstract": "^1.18.0-next.1" 370 | } 371 | }, 372 | "astral-regex": { 373 | "version": "2.0.0", 374 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 375 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 376 | "dev": true 377 | }, 378 | "balanced-match": { 379 | "version": "1.0.0", 380 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 381 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 382 | "dev": true 383 | }, 384 | "binary-extensions": { 385 | "version": "2.2.0", 386 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 387 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 388 | "dev": true 389 | }, 390 | "brace-expansion": { 391 | "version": "1.1.11", 392 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 393 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 394 | "dev": true, 395 | "requires": { 396 | "balanced-match": "^1.0.0", 397 | "concat-map": "0.0.1" 398 | } 399 | }, 400 | "braces": { 401 | "version": "3.0.2", 402 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 403 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 404 | "dev": true, 405 | "requires": { 406 | "fill-range": "^7.0.1" 407 | } 408 | }, 409 | "browser-stdout": { 410 | "version": "1.3.1", 411 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 412 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 413 | "dev": true 414 | }, 415 | "buffer-from": { 416 | "version": "1.1.1", 417 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 418 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 419 | "dev": true 420 | }, 421 | "builtin-modules": { 422 | "version": "3.2.0", 423 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", 424 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", 425 | "dev": true 426 | }, 427 | "call-bind": { 428 | "version": "1.0.2", 429 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 430 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 431 | "dev": true, 432 | "requires": { 433 | "function-bind": "^1.1.1", 434 | "get-intrinsic": "^1.0.2" 435 | } 436 | }, 437 | "callsites": { 438 | "version": "3.1.0", 439 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 440 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 441 | "dev": true 442 | }, 443 | "camelcase": { 444 | "version": "6.2.0", 445 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", 446 | "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", 447 | "dev": true 448 | }, 449 | "chalk": { 450 | "version": "4.1.0", 451 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 452 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 453 | "dev": true, 454 | "requires": { 455 | "ansi-styles": "^4.1.0", 456 | "supports-color": "^7.1.0" 457 | } 458 | }, 459 | "chokidar": { 460 | "version": "3.5.1", 461 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", 462 | "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", 463 | "dev": true, 464 | "requires": { 465 | "anymatch": "~3.1.1", 466 | "braces": "~3.0.2", 467 | "fsevents": "~2.3.1", 468 | "glob-parent": "~5.1.0", 469 | "is-binary-path": "~2.1.0", 470 | "is-glob": "~4.0.1", 471 | "normalize-path": "~3.0.0", 472 | "readdirp": "~3.5.0" 473 | } 474 | }, 475 | "chownr": { 476 | "version": "2.0.0", 477 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 478 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", 479 | "dev": true 480 | }, 481 | "clean-stack": { 482 | "version": "2.2.0", 483 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 484 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 485 | "dev": true 486 | }, 487 | "cli-cursor": { 488 | "version": "3.1.0", 489 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 490 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 491 | "dev": true, 492 | "requires": { 493 | "restore-cursor": "^3.1.0" 494 | } 495 | }, 496 | "cli-truncate": { 497 | "version": "2.1.0", 498 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", 499 | "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", 500 | "dev": true, 501 | "requires": { 502 | "slice-ansi": "^3.0.0", 503 | "string-width": "^4.2.0" 504 | }, 505 | "dependencies": { 506 | "slice-ansi": { 507 | "version": "3.0.0", 508 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", 509 | "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", 510 | "dev": true, 511 | "requires": { 512 | "ansi-styles": "^4.0.0", 513 | "astral-regex": "^2.0.0", 514 | "is-fullwidth-code-point": "^3.0.0" 515 | } 516 | } 517 | } 518 | }, 519 | "cliui": { 520 | "version": "7.0.4", 521 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 522 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 523 | "dev": true, 524 | "requires": { 525 | "string-width": "^4.2.0", 526 | "strip-ansi": "^6.0.0", 527 | "wrap-ansi": "^7.0.0" 528 | } 529 | }, 530 | "color-convert": { 531 | "version": "2.0.1", 532 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 533 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 534 | "dev": true, 535 | "requires": { 536 | "color-name": "~1.1.4" 537 | } 538 | }, 539 | "color-name": { 540 | "version": "1.1.4", 541 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 542 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 543 | "dev": true 544 | }, 545 | "commander": { 546 | "version": "6.2.1", 547 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", 548 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", 549 | "dev": true 550 | }, 551 | "commondir": { 552 | "version": "1.0.1", 553 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 554 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 555 | "dev": true 556 | }, 557 | "concat-map": { 558 | "version": "0.0.1", 559 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 560 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 561 | "dev": true 562 | }, 563 | "contains-path": { 564 | "version": "0.1.0", 565 | "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", 566 | "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", 567 | "dev": true 568 | }, 569 | "cosmiconfig": { 570 | "version": "7.0.0", 571 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", 572 | "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", 573 | "dev": true, 574 | "requires": { 575 | "@types/parse-json": "^4.0.0", 576 | "import-fresh": "^3.2.1", 577 | "parse-json": "^5.0.0", 578 | "path-type": "^4.0.0", 579 | "yaml": "^1.10.0" 580 | }, 581 | "dependencies": { 582 | "parse-json": { 583 | "version": "5.2.0", 584 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 585 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 586 | "dev": true, 587 | "requires": { 588 | "@babel/code-frame": "^7.0.0", 589 | "error-ex": "^1.3.1", 590 | "json-parse-even-better-errors": "^2.3.0", 591 | "lines-and-columns": "^1.1.6" 592 | } 593 | }, 594 | "path-type": { 595 | "version": "4.0.0", 596 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 597 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 598 | "dev": true 599 | } 600 | } 601 | }, 602 | "cross-spawn": { 603 | "version": "7.0.3", 604 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 605 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 606 | "dev": true, 607 | "requires": { 608 | "path-key": "^3.1.0", 609 | "shebang-command": "^2.0.0", 610 | "which": "^2.0.1" 611 | } 612 | }, 613 | "debug": { 614 | "version": "4.3.1", 615 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 616 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 617 | "dev": true, 618 | "requires": { 619 | "ms": "2.1.2" 620 | } 621 | }, 622 | "decamelize": { 623 | "version": "4.0.0", 624 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 625 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 626 | "dev": true 627 | }, 628 | "dedent": { 629 | "version": "0.7.0", 630 | "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", 631 | "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", 632 | "dev": true 633 | }, 634 | "deep-is": { 635 | "version": "0.1.3", 636 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 637 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 638 | "dev": true 639 | }, 640 | "deepmerge": { 641 | "version": "4.2.2", 642 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 643 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 644 | "dev": true 645 | }, 646 | "define-properties": { 647 | "version": "1.1.3", 648 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 649 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 650 | "dev": true, 651 | "requires": { 652 | "object-keys": "^1.0.12" 653 | } 654 | }, 655 | "diff": { 656 | "version": "5.0.0", 657 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 658 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 659 | "dev": true 660 | }, 661 | "doctrine": { 662 | "version": "3.0.0", 663 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 664 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 665 | "dev": true, 666 | "requires": { 667 | "esutils": "^2.0.2" 668 | } 669 | }, 670 | "emoji-regex": { 671 | "version": "8.0.0", 672 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 673 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 674 | "dev": true 675 | }, 676 | "end-of-stream": { 677 | "version": "1.4.4", 678 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 679 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 680 | "dev": true, 681 | "requires": { 682 | "once": "^1.4.0" 683 | } 684 | }, 685 | "enquirer": { 686 | "version": "2.3.6", 687 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 688 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 689 | "dev": true, 690 | "requires": { 691 | "ansi-colors": "^4.1.1" 692 | } 693 | }, 694 | "error-ex": { 695 | "version": "1.3.2", 696 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 697 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 698 | "dev": true, 699 | "requires": { 700 | "is-arrayish": "^0.2.1" 701 | } 702 | }, 703 | "es-abstract": { 704 | "version": "1.18.0", 705 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", 706 | "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", 707 | "dev": true, 708 | "requires": { 709 | "call-bind": "^1.0.2", 710 | "es-to-primitive": "^1.2.1", 711 | "function-bind": "^1.1.1", 712 | "get-intrinsic": "^1.1.1", 713 | "has": "^1.0.3", 714 | "has-symbols": "^1.0.2", 715 | "is-callable": "^1.2.3", 716 | "is-negative-zero": "^2.0.1", 717 | "is-regex": "^1.1.2", 718 | "is-string": "^1.0.5", 719 | "object-inspect": "^1.9.0", 720 | "object-keys": "^1.1.1", 721 | "object.assign": "^4.1.2", 722 | "string.prototype.trimend": "^1.0.4", 723 | "string.prototype.trimstart": "^1.0.4", 724 | "unbox-primitive": "^1.0.0" 725 | } 726 | }, 727 | "es-to-primitive": { 728 | "version": "1.2.1", 729 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 730 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 731 | "dev": true, 732 | "requires": { 733 | "is-callable": "^1.1.4", 734 | "is-date-object": "^1.0.1", 735 | "is-symbol": "^1.0.2" 736 | } 737 | }, 738 | "escalade": { 739 | "version": "3.1.1", 740 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 741 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 742 | "dev": true 743 | }, 744 | "escape-string-regexp": { 745 | "version": "1.0.5", 746 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 747 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 748 | "dev": true 749 | }, 750 | "eslint": { 751 | "version": "7.23.0", 752 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", 753 | "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", 754 | "dev": true, 755 | "requires": { 756 | "@babel/code-frame": "7.12.11", 757 | "@eslint/eslintrc": "^0.4.0", 758 | "ajv": "^6.10.0", 759 | "chalk": "^4.0.0", 760 | "cross-spawn": "^7.0.2", 761 | "debug": "^4.0.1", 762 | "doctrine": "^3.0.0", 763 | "enquirer": "^2.3.5", 764 | "eslint-scope": "^5.1.1", 765 | "eslint-utils": "^2.1.0", 766 | "eslint-visitor-keys": "^2.0.0", 767 | "espree": "^7.3.1", 768 | "esquery": "^1.4.0", 769 | "esutils": "^2.0.2", 770 | "file-entry-cache": "^6.0.1", 771 | "functional-red-black-tree": "^1.0.1", 772 | "glob-parent": "^5.0.0", 773 | "globals": "^13.6.0", 774 | "ignore": "^4.0.6", 775 | "import-fresh": "^3.0.0", 776 | "imurmurhash": "^0.1.4", 777 | "is-glob": "^4.0.0", 778 | "js-yaml": "^3.13.1", 779 | "json-stable-stringify-without-jsonify": "^1.0.1", 780 | "levn": "^0.4.1", 781 | "lodash": "^4.17.21", 782 | "minimatch": "^3.0.4", 783 | "natural-compare": "^1.4.0", 784 | "optionator": "^0.9.1", 785 | "progress": "^2.0.0", 786 | "regexpp": "^3.1.0", 787 | "semver": "^7.2.1", 788 | "strip-ansi": "^6.0.0", 789 | "strip-json-comments": "^3.1.0", 790 | "table": "^6.0.4", 791 | "text-table": "^0.2.0", 792 | "v8-compile-cache": "^2.0.3" 793 | } 794 | }, 795 | "eslint-config-prettier": { 796 | "version": "8.1.0", 797 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz", 798 | "integrity": "sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw==", 799 | "dev": true 800 | }, 801 | "eslint-import-resolver-node": { 802 | "version": "0.3.4", 803 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", 804 | "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", 805 | "dev": true, 806 | "requires": { 807 | "debug": "^2.6.9", 808 | "resolve": "^1.13.1" 809 | }, 810 | "dependencies": { 811 | "debug": { 812 | "version": "2.6.9", 813 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 814 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 815 | "dev": true, 816 | "requires": { 817 | "ms": "2.0.0" 818 | } 819 | }, 820 | "ms": { 821 | "version": "2.0.0", 822 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 823 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 824 | "dev": true 825 | }, 826 | "resolve": { 827 | "version": "1.20.0", 828 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 829 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 830 | "dev": true, 831 | "requires": { 832 | "is-core-module": "^2.2.0", 833 | "path-parse": "^1.0.6" 834 | } 835 | } 836 | } 837 | }, 838 | "eslint-module-utils": { 839 | "version": "2.6.0", 840 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", 841 | "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", 842 | "dev": true, 843 | "requires": { 844 | "debug": "^2.6.9", 845 | "pkg-dir": "^2.0.0" 846 | }, 847 | "dependencies": { 848 | "debug": { 849 | "version": "2.6.9", 850 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 851 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 852 | "dev": true, 853 | "requires": { 854 | "ms": "2.0.0" 855 | } 856 | }, 857 | "ms": { 858 | "version": "2.0.0", 859 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 860 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 861 | "dev": true 862 | } 863 | } 864 | }, 865 | "eslint-plugin-import": { 866 | "version": "2.22.1", 867 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", 868 | "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", 869 | "dev": true, 870 | "requires": { 871 | "array-includes": "^3.1.1", 872 | "array.prototype.flat": "^1.2.3", 873 | "contains-path": "^0.1.0", 874 | "debug": "^2.6.9", 875 | "doctrine": "1.5.0", 876 | "eslint-import-resolver-node": "^0.3.4", 877 | "eslint-module-utils": "^2.6.0", 878 | "has": "^1.0.3", 879 | "minimatch": "^3.0.4", 880 | "object.values": "^1.1.1", 881 | "read-pkg-up": "^2.0.0", 882 | "resolve": "^1.17.0", 883 | "tsconfig-paths": "^3.9.0" 884 | }, 885 | "dependencies": { 886 | "debug": { 887 | "version": "2.6.9", 888 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 889 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 890 | "dev": true, 891 | "requires": { 892 | "ms": "2.0.0" 893 | } 894 | }, 895 | "doctrine": { 896 | "version": "1.5.0", 897 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", 898 | "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", 899 | "dev": true, 900 | "requires": { 901 | "esutils": "^2.0.2", 902 | "isarray": "^1.0.0" 903 | } 904 | }, 905 | "ms": { 906 | "version": "2.0.0", 907 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 908 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 909 | "dev": true 910 | }, 911 | "resolve": { 912 | "version": "1.20.0", 913 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 914 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 915 | "dev": true, 916 | "requires": { 917 | "is-core-module": "^2.2.0", 918 | "path-parse": "^1.0.6" 919 | } 920 | } 921 | } 922 | }, 923 | "eslint-scope": { 924 | "version": "5.1.1", 925 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 926 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 927 | "dev": true, 928 | "requires": { 929 | "esrecurse": "^4.3.0", 930 | "estraverse": "^4.1.1" 931 | } 932 | }, 933 | "eslint-utils": { 934 | "version": "2.1.0", 935 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 936 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 937 | "dev": true, 938 | "requires": { 939 | "eslint-visitor-keys": "^1.1.0" 940 | }, 941 | "dependencies": { 942 | "eslint-visitor-keys": { 943 | "version": "1.3.0", 944 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 945 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 946 | "dev": true 947 | } 948 | } 949 | }, 950 | "eslint-visitor-keys": { 951 | "version": "2.0.0", 952 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", 953 | "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", 954 | "dev": true 955 | }, 956 | "espree": { 957 | "version": "7.3.1", 958 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", 959 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", 960 | "dev": true, 961 | "requires": { 962 | "acorn": "^7.4.0", 963 | "acorn-jsx": "^5.3.1", 964 | "eslint-visitor-keys": "^1.3.0" 965 | }, 966 | "dependencies": { 967 | "eslint-visitor-keys": { 968 | "version": "1.3.0", 969 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 970 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 971 | "dev": true 972 | } 973 | } 974 | }, 975 | "esprima": { 976 | "version": "4.0.1", 977 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 978 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 979 | "dev": true 980 | }, 981 | "esquery": { 982 | "version": "1.4.0", 983 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 984 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 985 | "dev": true, 986 | "requires": { 987 | "estraverse": "^5.1.0" 988 | }, 989 | "dependencies": { 990 | "estraverse": { 991 | "version": "5.2.0", 992 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 993 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 994 | "dev": true 995 | } 996 | } 997 | }, 998 | "esrecurse": { 999 | "version": "4.3.0", 1000 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1001 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1002 | "dev": true, 1003 | "requires": { 1004 | "estraverse": "^5.2.0" 1005 | }, 1006 | "dependencies": { 1007 | "estraverse": { 1008 | "version": "5.2.0", 1009 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 1010 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 1011 | "dev": true 1012 | } 1013 | } 1014 | }, 1015 | "estraverse": { 1016 | "version": "4.3.0", 1017 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1018 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1019 | "dev": true 1020 | }, 1021 | "estree-walker": { 1022 | "version": "0.6.1", 1023 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1024 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 1025 | "dev": true 1026 | }, 1027 | "esutils": { 1028 | "version": "2.0.3", 1029 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1030 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1031 | "dev": true 1032 | }, 1033 | "execa": { 1034 | "version": "4.1.0", 1035 | "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", 1036 | "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", 1037 | "dev": true, 1038 | "requires": { 1039 | "cross-spawn": "^7.0.0", 1040 | "get-stream": "^5.0.0", 1041 | "human-signals": "^1.1.1", 1042 | "is-stream": "^2.0.0", 1043 | "merge-stream": "^2.0.0", 1044 | "npm-run-path": "^4.0.0", 1045 | "onetime": "^5.1.0", 1046 | "signal-exit": "^3.0.2", 1047 | "strip-final-newline": "^2.0.0" 1048 | } 1049 | }, 1050 | "fast-deep-equal": { 1051 | "version": "3.1.3", 1052 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1053 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1054 | "dev": true 1055 | }, 1056 | "fast-json-stable-stringify": { 1057 | "version": "2.1.0", 1058 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1059 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1060 | "dev": true 1061 | }, 1062 | "fast-levenshtein": { 1063 | "version": "2.0.6", 1064 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1065 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1066 | "dev": true 1067 | }, 1068 | "figures": { 1069 | "version": "3.2.0", 1070 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 1071 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 1072 | "dev": true, 1073 | "requires": { 1074 | "escape-string-regexp": "^1.0.5" 1075 | } 1076 | }, 1077 | "file-entry-cache": { 1078 | "version": "6.0.1", 1079 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1080 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1081 | "dev": true, 1082 | "requires": { 1083 | "flat-cache": "^3.0.4" 1084 | } 1085 | }, 1086 | "fill-range": { 1087 | "version": "7.0.1", 1088 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1089 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1090 | "dev": true, 1091 | "requires": { 1092 | "to-regex-range": "^5.0.1" 1093 | } 1094 | }, 1095 | "find-up": { 1096 | "version": "2.1.0", 1097 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 1098 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 1099 | "dev": true, 1100 | "requires": { 1101 | "locate-path": "^2.0.0" 1102 | } 1103 | }, 1104 | "flat": { 1105 | "version": "5.0.2", 1106 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 1107 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 1108 | "dev": true 1109 | }, 1110 | "flat-cache": { 1111 | "version": "3.0.4", 1112 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1113 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1114 | "dev": true, 1115 | "requires": { 1116 | "flatted": "^3.1.0", 1117 | "rimraf": "^3.0.2" 1118 | } 1119 | }, 1120 | "flatted": { 1121 | "version": "3.1.1", 1122 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", 1123 | "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", 1124 | "dev": true 1125 | }, 1126 | "fs-minipass": { 1127 | "version": "2.1.0", 1128 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 1129 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 1130 | "dev": true, 1131 | "requires": { 1132 | "minipass": "^3.0.0" 1133 | } 1134 | }, 1135 | "fs.realpath": { 1136 | "version": "1.0.0", 1137 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1138 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1139 | "dev": true 1140 | }, 1141 | "fsevents": { 1142 | "version": "2.3.2", 1143 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1144 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1145 | "dev": true, 1146 | "optional": true 1147 | }, 1148 | "function-bind": { 1149 | "version": "1.1.1", 1150 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1151 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1152 | "dev": true 1153 | }, 1154 | "functional-red-black-tree": { 1155 | "version": "1.0.1", 1156 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1157 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1158 | "dev": true 1159 | }, 1160 | "fuzzysearch": { 1161 | "version": "1.0.3", 1162 | "resolved": "https://registry.npmjs.org/fuzzysearch/-/fuzzysearch-1.0.3.tgz", 1163 | "integrity": "sha1-3/yA9tawQiPyImqnndGUIxCW0Ag=", 1164 | "dev": true 1165 | }, 1166 | "get-caller-file": { 1167 | "version": "2.0.5", 1168 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1169 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1170 | "dev": true 1171 | }, 1172 | "get-intrinsic": { 1173 | "version": "1.1.1", 1174 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1175 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1176 | "dev": true, 1177 | "requires": { 1178 | "function-bind": "^1.1.1", 1179 | "has": "^1.0.3", 1180 | "has-symbols": "^1.0.1" 1181 | } 1182 | }, 1183 | "get-own-enumerable-property-symbols": { 1184 | "version": "3.0.2", 1185 | "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", 1186 | "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", 1187 | "dev": true 1188 | }, 1189 | "get-stream": { 1190 | "version": "5.2.0", 1191 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 1192 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1193 | "dev": true, 1194 | "requires": { 1195 | "pump": "^3.0.0" 1196 | } 1197 | }, 1198 | "glob": { 1199 | "version": "7.1.6", 1200 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1201 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1202 | "dev": true, 1203 | "requires": { 1204 | "fs.realpath": "^1.0.0", 1205 | "inflight": "^1.0.4", 1206 | "inherits": "2", 1207 | "minimatch": "^3.0.4", 1208 | "once": "^1.3.0", 1209 | "path-is-absolute": "^1.0.0" 1210 | } 1211 | }, 1212 | "glob-parent": { 1213 | "version": "5.1.2", 1214 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1215 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1216 | "dev": true, 1217 | "requires": { 1218 | "is-glob": "^4.0.1" 1219 | } 1220 | }, 1221 | "globals": { 1222 | "version": "13.7.0", 1223 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz", 1224 | "integrity": "sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==", 1225 | "dev": true, 1226 | "requires": { 1227 | "type-fest": "^0.20.2" 1228 | }, 1229 | "dependencies": { 1230 | "type-fest": { 1231 | "version": "0.20.2", 1232 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1233 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1234 | "dev": true 1235 | } 1236 | } 1237 | }, 1238 | "globalyzer": { 1239 | "version": "0.1.0", 1240 | "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", 1241 | "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", 1242 | "dev": true 1243 | }, 1244 | "globrex": { 1245 | "version": "0.1.2", 1246 | "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", 1247 | "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", 1248 | "dev": true 1249 | }, 1250 | "graceful-fs": { 1251 | "version": "4.1.11", 1252 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1253 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1254 | "dev": true 1255 | }, 1256 | "growl": { 1257 | "version": "1.10.5", 1258 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 1259 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 1260 | "dev": true 1261 | }, 1262 | "has": { 1263 | "version": "1.0.3", 1264 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1265 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1266 | "dev": true, 1267 | "requires": { 1268 | "function-bind": "^1.1.1" 1269 | } 1270 | }, 1271 | "has-bigints": { 1272 | "version": "1.0.1", 1273 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", 1274 | "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", 1275 | "dev": true 1276 | }, 1277 | "has-flag": { 1278 | "version": "4.0.0", 1279 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1280 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1281 | "dev": true 1282 | }, 1283 | "has-symbols": { 1284 | "version": "1.0.2", 1285 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 1286 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 1287 | "dev": true 1288 | }, 1289 | "he": { 1290 | "version": "1.2.0", 1291 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1292 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1293 | "dev": true 1294 | }, 1295 | "home-or-tmp": { 1296 | "version": "3.0.0", 1297 | "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-3.0.0.tgz", 1298 | "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=", 1299 | "dev": true 1300 | }, 1301 | "hosted-git-info": { 1302 | "version": "2.8.8", 1303 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", 1304 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", 1305 | "dev": true 1306 | }, 1307 | "https-proxy-agent": { 1308 | "version": "5.0.0", 1309 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 1310 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 1311 | "dev": true, 1312 | "requires": { 1313 | "agent-base": "6", 1314 | "debug": "4" 1315 | } 1316 | }, 1317 | "human-signals": { 1318 | "version": "1.1.1", 1319 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", 1320 | "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", 1321 | "dev": true 1322 | }, 1323 | "husky": { 1324 | "version": "6.0.0", 1325 | "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", 1326 | "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", 1327 | "dev": true 1328 | }, 1329 | "ignore": { 1330 | "version": "4.0.6", 1331 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1332 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1333 | "dev": true 1334 | }, 1335 | "import-fresh": { 1336 | "version": "3.3.0", 1337 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1338 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1339 | "dev": true, 1340 | "requires": { 1341 | "parent-module": "^1.0.0", 1342 | "resolve-from": "^4.0.0" 1343 | } 1344 | }, 1345 | "imurmurhash": { 1346 | "version": "0.1.4", 1347 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1348 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1349 | "dev": true 1350 | }, 1351 | "indent-string": { 1352 | "version": "4.0.0", 1353 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1354 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 1355 | "dev": true 1356 | }, 1357 | "inflight": { 1358 | "version": "1.0.6", 1359 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1360 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1361 | "dev": true, 1362 | "requires": { 1363 | "once": "^1.3.0", 1364 | "wrappy": "1" 1365 | } 1366 | }, 1367 | "inherits": { 1368 | "version": "2.0.3", 1369 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1370 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1371 | "dev": true 1372 | }, 1373 | "is-arrayish": { 1374 | "version": "0.2.1", 1375 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1376 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1377 | "dev": true 1378 | }, 1379 | "is-bigint": { 1380 | "version": "1.0.1", 1381 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", 1382 | "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", 1383 | "dev": true 1384 | }, 1385 | "is-binary-path": { 1386 | "version": "2.1.0", 1387 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1388 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1389 | "dev": true, 1390 | "requires": { 1391 | "binary-extensions": "^2.0.0" 1392 | } 1393 | }, 1394 | "is-boolean-object": { 1395 | "version": "1.1.0", 1396 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", 1397 | "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", 1398 | "dev": true, 1399 | "requires": { 1400 | "call-bind": "^1.0.0" 1401 | } 1402 | }, 1403 | "is-callable": { 1404 | "version": "1.2.3", 1405 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", 1406 | "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", 1407 | "dev": true 1408 | }, 1409 | "is-core-module": { 1410 | "version": "2.2.0", 1411 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", 1412 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", 1413 | "dev": true, 1414 | "requires": { 1415 | "has": "^1.0.3" 1416 | } 1417 | }, 1418 | "is-date-object": { 1419 | "version": "1.0.2", 1420 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 1421 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 1422 | "dev": true 1423 | }, 1424 | "is-extglob": { 1425 | "version": "2.1.1", 1426 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1427 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1428 | "dev": true 1429 | }, 1430 | "is-fullwidth-code-point": { 1431 | "version": "3.0.0", 1432 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1433 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1434 | "dev": true 1435 | }, 1436 | "is-glob": { 1437 | "version": "4.0.1", 1438 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1439 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1440 | "dev": true, 1441 | "requires": { 1442 | "is-extglob": "^2.1.1" 1443 | } 1444 | }, 1445 | "is-module": { 1446 | "version": "1.0.0", 1447 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1448 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 1449 | "dev": true 1450 | }, 1451 | "is-negative-zero": { 1452 | "version": "2.0.1", 1453 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", 1454 | "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", 1455 | "dev": true 1456 | }, 1457 | "is-number": { 1458 | "version": "7.0.0", 1459 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1460 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1461 | "dev": true 1462 | }, 1463 | "is-number-object": { 1464 | "version": "1.0.4", 1465 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", 1466 | "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", 1467 | "dev": true 1468 | }, 1469 | "is-obj": { 1470 | "version": "1.0.1", 1471 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 1472 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 1473 | "dev": true 1474 | }, 1475 | "is-plain-obj": { 1476 | "version": "2.1.0", 1477 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1478 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 1479 | "dev": true 1480 | }, 1481 | "is-reference": { 1482 | "version": "1.1.3", 1483 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.3.tgz", 1484 | "integrity": "sha512-W1iHHv/oyBb2pPxkBxtaewxa1BC58Pn5J0hogyCdefwUIvb6R+TGbAcIa4qPNYLqLhb3EnOgUf2MQkkF76BcKw==", 1485 | "dev": true, 1486 | "requires": { 1487 | "@types/estree": "0.0.39" 1488 | } 1489 | }, 1490 | "is-regex": { 1491 | "version": "1.1.2", 1492 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", 1493 | "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", 1494 | "dev": true, 1495 | "requires": { 1496 | "call-bind": "^1.0.2", 1497 | "has-symbols": "^1.0.1" 1498 | } 1499 | }, 1500 | "is-regexp": { 1501 | "version": "1.0.0", 1502 | "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", 1503 | "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", 1504 | "dev": true 1505 | }, 1506 | "is-stream": { 1507 | "version": "2.0.0", 1508 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 1509 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", 1510 | "dev": true 1511 | }, 1512 | "is-string": { 1513 | "version": "1.0.5", 1514 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", 1515 | "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", 1516 | "dev": true 1517 | }, 1518 | "is-symbol": { 1519 | "version": "1.0.3", 1520 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 1521 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 1522 | "dev": true, 1523 | "requires": { 1524 | "has-symbols": "^1.0.1" 1525 | } 1526 | }, 1527 | "is-unicode-supported": { 1528 | "version": "0.1.0", 1529 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1530 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1531 | "dev": true 1532 | }, 1533 | "isarray": { 1534 | "version": "1.0.0", 1535 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1536 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1537 | "dev": true 1538 | }, 1539 | "isexe": { 1540 | "version": "2.0.0", 1541 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1542 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1543 | "dev": true 1544 | }, 1545 | "js-tokens": { 1546 | "version": "4.0.0", 1547 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1548 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1549 | "dev": true 1550 | }, 1551 | "js-yaml": { 1552 | "version": "3.14.1", 1553 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1554 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1555 | "dev": true, 1556 | "requires": { 1557 | "argparse": "^1.0.7", 1558 | "esprima": "^4.0.0" 1559 | } 1560 | }, 1561 | "json-parse-even-better-errors": { 1562 | "version": "2.3.1", 1563 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1564 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1565 | "dev": true 1566 | }, 1567 | "json-schema-traverse": { 1568 | "version": "0.4.1", 1569 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1570 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1571 | "dev": true 1572 | }, 1573 | "json-stable-stringify-without-jsonify": { 1574 | "version": "1.0.1", 1575 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1576 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1577 | "dev": true 1578 | }, 1579 | "json5": { 1580 | "version": "1.0.1", 1581 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", 1582 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", 1583 | "dev": true, 1584 | "requires": { 1585 | "minimist": "^1.2.0" 1586 | }, 1587 | "dependencies": { 1588 | "minimist": { 1589 | "version": "1.2.5", 1590 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1591 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1592 | "dev": true 1593 | } 1594 | } 1595 | }, 1596 | "levn": { 1597 | "version": "0.4.1", 1598 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1599 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1600 | "dev": true, 1601 | "requires": { 1602 | "prelude-ls": "^1.2.1", 1603 | "type-check": "~0.4.0" 1604 | } 1605 | }, 1606 | "lines-and-columns": { 1607 | "version": "1.1.6", 1608 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", 1609 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", 1610 | "dev": true 1611 | }, 1612 | "lint-staged": { 1613 | "version": "10.5.4", 1614 | "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz", 1615 | "integrity": "sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==", 1616 | "dev": true, 1617 | "requires": { 1618 | "chalk": "^4.1.0", 1619 | "cli-truncate": "^2.1.0", 1620 | "commander": "^6.2.0", 1621 | "cosmiconfig": "^7.0.0", 1622 | "debug": "^4.2.0", 1623 | "dedent": "^0.7.0", 1624 | "enquirer": "^2.3.6", 1625 | "execa": "^4.1.0", 1626 | "listr2": "^3.2.2", 1627 | "log-symbols": "^4.0.0", 1628 | "micromatch": "^4.0.2", 1629 | "normalize-path": "^3.0.0", 1630 | "please-upgrade-node": "^3.2.0", 1631 | "string-argv": "0.3.1", 1632 | "stringify-object": "^3.3.0" 1633 | } 1634 | }, 1635 | "listr2": { 1636 | "version": "3.4.4", 1637 | "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.4.4.tgz", 1638 | "integrity": "sha512-okQwtieCHDX5erlxcEn2xwNfVQhV+/YiD+U0v+6DQamXnknE7mc6B5fopHl96v1PuZjTpaoChctf96PB6K4XRg==", 1639 | "dev": true, 1640 | "requires": { 1641 | "chalk": "^4.1.0", 1642 | "cli-truncate": "^2.1.0", 1643 | "figures": "^3.2.0", 1644 | "indent-string": "^4.0.0", 1645 | "log-update": "^4.0.0", 1646 | "p-map": "^4.0.0", 1647 | "rxjs": "^6.6.7", 1648 | "through": "^2.3.8", 1649 | "wrap-ansi": "^7.0.0" 1650 | } 1651 | }, 1652 | "load-json-file": { 1653 | "version": "2.0.0", 1654 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 1655 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 1656 | "dev": true, 1657 | "requires": { 1658 | "graceful-fs": "^4.1.2", 1659 | "parse-json": "^2.2.0", 1660 | "pify": "^2.0.0", 1661 | "strip-bom": "^3.0.0" 1662 | } 1663 | }, 1664 | "locate-path": { 1665 | "version": "2.0.0", 1666 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 1667 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 1668 | "dev": true, 1669 | "requires": { 1670 | "p-locate": "^2.0.0", 1671 | "path-exists": "^3.0.0" 1672 | } 1673 | }, 1674 | "lodash": { 1675 | "version": "4.17.21", 1676 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1677 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1678 | "dev": true 1679 | }, 1680 | "lodash.clonedeep": { 1681 | "version": "4.5.0", 1682 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 1683 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", 1684 | "dev": true 1685 | }, 1686 | "lodash.flatten": { 1687 | "version": "4.4.0", 1688 | "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", 1689 | "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", 1690 | "dev": true 1691 | }, 1692 | "lodash.truncate": { 1693 | "version": "4.4.2", 1694 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 1695 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", 1696 | "dev": true 1697 | }, 1698 | "log-symbols": { 1699 | "version": "4.1.0", 1700 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1701 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1702 | "dev": true, 1703 | "requires": { 1704 | "chalk": "^4.1.0", 1705 | "is-unicode-supported": "^0.1.0" 1706 | } 1707 | }, 1708 | "log-update": { 1709 | "version": "4.0.0", 1710 | "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", 1711 | "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", 1712 | "dev": true, 1713 | "requires": { 1714 | "ansi-escapes": "^4.3.0", 1715 | "cli-cursor": "^3.1.0", 1716 | "slice-ansi": "^4.0.0", 1717 | "wrap-ansi": "^6.2.0" 1718 | }, 1719 | "dependencies": { 1720 | "wrap-ansi": { 1721 | "version": "6.2.0", 1722 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 1723 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 1724 | "dev": true, 1725 | "requires": { 1726 | "ansi-styles": "^4.0.0", 1727 | "string-width": "^4.1.0", 1728 | "strip-ansi": "^6.0.0" 1729 | } 1730 | } 1731 | } 1732 | }, 1733 | "lru-cache": { 1734 | "version": "6.0.0", 1735 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1736 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1737 | "dev": true, 1738 | "requires": { 1739 | "yallist": "^4.0.0" 1740 | } 1741 | }, 1742 | "magic-string": { 1743 | "version": "0.25.3", 1744 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz", 1745 | "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==", 1746 | "dev": true, 1747 | "requires": { 1748 | "sourcemap-codec": "^1.4.4" 1749 | } 1750 | }, 1751 | "merge-stream": { 1752 | "version": "2.0.0", 1753 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1754 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1755 | "dev": true 1756 | }, 1757 | "micromatch": { 1758 | "version": "4.0.2", 1759 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 1760 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 1761 | "dev": true, 1762 | "requires": { 1763 | "braces": "^3.0.1", 1764 | "picomatch": "^2.0.5" 1765 | } 1766 | }, 1767 | "mimic-fn": { 1768 | "version": "2.1.0", 1769 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1770 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1771 | "dev": true 1772 | }, 1773 | "minimatch": { 1774 | "version": "3.0.4", 1775 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1776 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1777 | "dev": true, 1778 | "requires": { 1779 | "brace-expansion": "^1.1.7" 1780 | } 1781 | }, 1782 | "minimist": { 1783 | "version": "0.0.8", 1784 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1785 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1786 | "dev": true 1787 | }, 1788 | "minipass": { 1789 | "version": "3.1.3", 1790 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", 1791 | "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", 1792 | "dev": true, 1793 | "requires": { 1794 | "yallist": "^4.0.0" 1795 | } 1796 | }, 1797 | "minizlib": { 1798 | "version": "2.1.2", 1799 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 1800 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 1801 | "dev": true, 1802 | "requires": { 1803 | "minipass": "^3.0.0", 1804 | "yallist": "^4.0.0" 1805 | } 1806 | }, 1807 | "mkdirp": { 1808 | "version": "0.5.1", 1809 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1810 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1811 | "dev": true, 1812 | "requires": { 1813 | "minimist": "0.0.8" 1814 | } 1815 | }, 1816 | "mocha": { 1817 | "version": "8.3.2", 1818 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", 1819 | "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", 1820 | "dev": true, 1821 | "requires": { 1822 | "@ungap/promise-all-settled": "1.1.2", 1823 | "ansi-colors": "4.1.1", 1824 | "browser-stdout": "1.3.1", 1825 | "chokidar": "3.5.1", 1826 | "debug": "4.3.1", 1827 | "diff": "5.0.0", 1828 | "escape-string-regexp": "4.0.0", 1829 | "find-up": "5.0.0", 1830 | "glob": "7.1.6", 1831 | "growl": "1.10.5", 1832 | "he": "1.2.0", 1833 | "js-yaml": "4.0.0", 1834 | "log-symbols": "4.0.0", 1835 | "minimatch": "3.0.4", 1836 | "ms": "2.1.3", 1837 | "nanoid": "3.1.20", 1838 | "serialize-javascript": "5.0.1", 1839 | "strip-json-comments": "3.1.1", 1840 | "supports-color": "8.1.1", 1841 | "which": "2.0.2", 1842 | "wide-align": "1.1.3", 1843 | "workerpool": "6.1.0", 1844 | "yargs": "16.2.0", 1845 | "yargs-parser": "20.2.4", 1846 | "yargs-unparser": "2.0.0" 1847 | }, 1848 | "dependencies": { 1849 | "argparse": { 1850 | "version": "2.0.1", 1851 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1852 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1853 | "dev": true 1854 | }, 1855 | "escape-string-regexp": { 1856 | "version": "4.0.0", 1857 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1858 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1859 | "dev": true 1860 | }, 1861 | "find-up": { 1862 | "version": "5.0.0", 1863 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1864 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1865 | "dev": true, 1866 | "requires": { 1867 | "locate-path": "^6.0.0", 1868 | "path-exists": "^4.0.0" 1869 | } 1870 | }, 1871 | "js-yaml": { 1872 | "version": "4.0.0", 1873 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", 1874 | "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", 1875 | "dev": true, 1876 | "requires": { 1877 | "argparse": "^2.0.1" 1878 | } 1879 | }, 1880 | "locate-path": { 1881 | "version": "6.0.0", 1882 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1883 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1884 | "dev": true, 1885 | "requires": { 1886 | "p-locate": "^5.0.0" 1887 | } 1888 | }, 1889 | "log-symbols": { 1890 | "version": "4.0.0", 1891 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", 1892 | "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", 1893 | "dev": true, 1894 | "requires": { 1895 | "chalk": "^4.0.0" 1896 | } 1897 | }, 1898 | "ms": { 1899 | "version": "2.1.3", 1900 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1901 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1902 | "dev": true 1903 | }, 1904 | "p-limit": { 1905 | "version": "3.1.0", 1906 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1907 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1908 | "dev": true, 1909 | "requires": { 1910 | "yocto-queue": "^0.1.0" 1911 | } 1912 | }, 1913 | "p-locate": { 1914 | "version": "5.0.0", 1915 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1916 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1917 | "dev": true, 1918 | "requires": { 1919 | "p-limit": "^3.0.2" 1920 | } 1921 | }, 1922 | "path-exists": { 1923 | "version": "4.0.0", 1924 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1925 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1926 | "dev": true 1927 | }, 1928 | "supports-color": { 1929 | "version": "8.1.1", 1930 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1931 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1932 | "dev": true, 1933 | "requires": { 1934 | "has-flag": "^4.0.0" 1935 | } 1936 | } 1937 | } 1938 | }, 1939 | "mri": { 1940 | "version": "1.1.6", 1941 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", 1942 | "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", 1943 | "dev": true 1944 | }, 1945 | "ms": { 1946 | "version": "2.1.2", 1947 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1948 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1949 | "dev": true 1950 | }, 1951 | "nanoid": { 1952 | "version": "3.1.20", 1953 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", 1954 | "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", 1955 | "dev": true 1956 | }, 1957 | "natural-compare": { 1958 | "version": "1.4.0", 1959 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1960 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1961 | "dev": true 1962 | }, 1963 | "normalize-package-data": { 1964 | "version": "2.5.0", 1965 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1966 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1967 | "dev": true, 1968 | "requires": { 1969 | "hosted-git-info": "^2.1.4", 1970 | "resolve": "^1.10.0", 1971 | "semver": "2 || 3 || 4 || 5", 1972 | "validate-npm-package-license": "^3.0.1" 1973 | }, 1974 | "dependencies": { 1975 | "semver": { 1976 | "version": "5.7.1", 1977 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1978 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1979 | "dev": true 1980 | } 1981 | } 1982 | }, 1983 | "normalize-path": { 1984 | "version": "3.0.0", 1985 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1986 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1987 | "dev": true 1988 | }, 1989 | "npm-run-path": { 1990 | "version": "4.0.1", 1991 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 1992 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 1993 | "dev": true, 1994 | "requires": { 1995 | "path-key": "^3.0.0" 1996 | } 1997 | }, 1998 | "object-inspect": { 1999 | "version": "1.9.0", 2000 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", 2001 | "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", 2002 | "dev": true 2003 | }, 2004 | "object-keys": { 2005 | "version": "1.1.1", 2006 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2007 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2008 | "dev": true 2009 | }, 2010 | "object.assign": { 2011 | "version": "4.1.2", 2012 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 2013 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 2014 | "dev": true, 2015 | "requires": { 2016 | "call-bind": "^1.0.0", 2017 | "define-properties": "^1.1.3", 2018 | "has-symbols": "^1.0.1", 2019 | "object-keys": "^1.1.1" 2020 | } 2021 | }, 2022 | "object.values": { 2023 | "version": "1.1.3", 2024 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", 2025 | "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", 2026 | "dev": true, 2027 | "requires": { 2028 | "call-bind": "^1.0.2", 2029 | "define-properties": "^1.1.3", 2030 | "es-abstract": "^1.18.0-next.2", 2031 | "has": "^1.0.3" 2032 | } 2033 | }, 2034 | "once": { 2035 | "version": "1.4.0", 2036 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2037 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2038 | "dev": true, 2039 | "requires": { 2040 | "wrappy": "1" 2041 | } 2042 | }, 2043 | "onetime": { 2044 | "version": "5.1.2", 2045 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2046 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2047 | "dev": true, 2048 | "requires": { 2049 | "mimic-fn": "^2.1.0" 2050 | } 2051 | }, 2052 | "optionator": { 2053 | "version": "0.9.1", 2054 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 2055 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 2056 | "dev": true, 2057 | "requires": { 2058 | "deep-is": "^0.1.3", 2059 | "fast-levenshtein": "^2.0.6", 2060 | "levn": "^0.4.1", 2061 | "prelude-ls": "^1.2.1", 2062 | "type-check": "^0.4.0", 2063 | "word-wrap": "^1.2.3" 2064 | } 2065 | }, 2066 | "p-limit": { 2067 | "version": "1.3.0", 2068 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", 2069 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", 2070 | "dev": true, 2071 | "requires": { 2072 | "p-try": "^1.0.0" 2073 | } 2074 | }, 2075 | "p-locate": { 2076 | "version": "2.0.0", 2077 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 2078 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 2079 | "dev": true, 2080 | "requires": { 2081 | "p-limit": "^1.1.0" 2082 | } 2083 | }, 2084 | "p-map": { 2085 | "version": "4.0.0", 2086 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 2087 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 2088 | "dev": true, 2089 | "requires": { 2090 | "aggregate-error": "^3.0.0" 2091 | } 2092 | }, 2093 | "p-try": { 2094 | "version": "1.0.0", 2095 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 2096 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 2097 | "dev": true 2098 | }, 2099 | "parent-module": { 2100 | "version": "1.0.1", 2101 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2102 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2103 | "dev": true, 2104 | "requires": { 2105 | "callsites": "^3.0.0" 2106 | } 2107 | }, 2108 | "parse-json": { 2109 | "version": "2.2.0", 2110 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 2111 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 2112 | "dev": true, 2113 | "requires": { 2114 | "error-ex": "^1.2.0" 2115 | } 2116 | }, 2117 | "path-exists": { 2118 | "version": "3.0.0", 2119 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2120 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 2121 | "dev": true 2122 | }, 2123 | "path-is-absolute": { 2124 | "version": "1.0.1", 2125 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2126 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2127 | "dev": true 2128 | }, 2129 | "path-key": { 2130 | "version": "3.1.1", 2131 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2132 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2133 | "dev": true 2134 | }, 2135 | "path-parse": { 2136 | "version": "1.0.6", 2137 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 2138 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 2139 | "dev": true 2140 | }, 2141 | "path-type": { 2142 | "version": "2.0.0", 2143 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 2144 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 2145 | "dev": true, 2146 | "requires": { 2147 | "pify": "^2.0.0" 2148 | } 2149 | }, 2150 | "picomatch": { 2151 | "version": "2.2.2", 2152 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 2153 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 2154 | "dev": true 2155 | }, 2156 | "pify": { 2157 | "version": "2.3.0", 2158 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2159 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 2160 | "dev": true 2161 | }, 2162 | "pkg-dir": { 2163 | "version": "2.0.0", 2164 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", 2165 | "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", 2166 | "dev": true, 2167 | "requires": { 2168 | "find-up": "^2.1.0" 2169 | } 2170 | }, 2171 | "please-upgrade-node": { 2172 | "version": "3.2.0", 2173 | "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", 2174 | "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", 2175 | "dev": true, 2176 | "requires": { 2177 | "semver-compare": "^1.0.0" 2178 | } 2179 | }, 2180 | "prelude-ls": { 2181 | "version": "1.2.1", 2182 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2183 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2184 | "dev": true 2185 | }, 2186 | "prettier": { 2187 | "version": "2.2.1", 2188 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", 2189 | "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", 2190 | "dev": true 2191 | }, 2192 | "progress": { 2193 | "version": "2.0.3", 2194 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2195 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2196 | "dev": true 2197 | }, 2198 | "pump": { 2199 | "version": "3.0.0", 2200 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2201 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2202 | "dev": true, 2203 | "requires": { 2204 | "end-of-stream": "^1.1.0", 2205 | "once": "^1.3.1" 2206 | } 2207 | }, 2208 | "punycode": { 2209 | "version": "2.1.1", 2210 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2211 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2212 | "dev": true 2213 | }, 2214 | "randombytes": { 2215 | "version": "2.1.0", 2216 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2217 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2218 | "dev": true, 2219 | "requires": { 2220 | "safe-buffer": "^5.1.0" 2221 | } 2222 | }, 2223 | "read-pkg": { 2224 | "version": "2.0.0", 2225 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 2226 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 2227 | "dev": true, 2228 | "requires": { 2229 | "load-json-file": "^2.0.0", 2230 | "normalize-package-data": "^2.3.2", 2231 | "path-type": "^2.0.0" 2232 | } 2233 | }, 2234 | "read-pkg-up": { 2235 | "version": "2.0.0", 2236 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 2237 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 2238 | "dev": true, 2239 | "requires": { 2240 | "find-up": "^2.0.0", 2241 | "read-pkg": "^2.0.0" 2242 | } 2243 | }, 2244 | "readdirp": { 2245 | "version": "3.5.0", 2246 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", 2247 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", 2248 | "dev": true, 2249 | "requires": { 2250 | "picomatch": "^2.2.1" 2251 | } 2252 | }, 2253 | "regexpp": { 2254 | "version": "3.1.0", 2255 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", 2256 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", 2257 | "dev": true 2258 | }, 2259 | "require-directory": { 2260 | "version": "2.1.1", 2261 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2262 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 2263 | "dev": true 2264 | }, 2265 | "require-from-string": { 2266 | "version": "2.0.2", 2267 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2268 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2269 | "dev": true 2270 | }, 2271 | "resolve": { 2272 | "version": "1.11.1", 2273 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", 2274 | "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", 2275 | "dev": true, 2276 | "requires": { 2277 | "path-parse": "^1.0.6" 2278 | } 2279 | }, 2280 | "resolve-from": { 2281 | "version": "4.0.0", 2282 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2283 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2284 | "dev": true 2285 | }, 2286 | "restore-cursor": { 2287 | "version": "3.1.0", 2288 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 2289 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 2290 | "dev": true, 2291 | "requires": { 2292 | "onetime": "^5.1.0", 2293 | "signal-exit": "^3.0.2" 2294 | } 2295 | }, 2296 | "rimraf": { 2297 | "version": "3.0.2", 2298 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2299 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2300 | "dev": true, 2301 | "requires": { 2302 | "glob": "^7.1.3" 2303 | } 2304 | }, 2305 | "rollup": { 2306 | "version": "2.44.0", 2307 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.44.0.tgz", 2308 | "integrity": "sha512-rGSF4pLwvuaH/x4nAS+zP6UNn5YUDWf/TeEU5IoXSZKBbKRNTCI3qMnYXKZgrC0D2KzS2baiOZt1OlqhMu5rnQ==", 2309 | "dev": true, 2310 | "requires": { 2311 | "fsevents": "~2.3.1" 2312 | } 2313 | }, 2314 | "rollup-plugin-commonjs": { 2315 | "version": "10.1.0", 2316 | "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", 2317 | "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", 2318 | "dev": true, 2319 | "requires": { 2320 | "estree-walker": "^0.6.1", 2321 | "is-reference": "^1.1.2", 2322 | "magic-string": "^0.25.2", 2323 | "resolve": "^1.11.0", 2324 | "rollup-pluginutils": "^2.8.1" 2325 | }, 2326 | "dependencies": { 2327 | "rollup-pluginutils": { 2328 | "version": "2.8.1", 2329 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", 2330 | "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", 2331 | "dev": true, 2332 | "requires": { 2333 | "estree-walker": "^0.6.1" 2334 | } 2335 | } 2336 | } 2337 | }, 2338 | "rxjs": { 2339 | "version": "6.6.7", 2340 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 2341 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 2342 | "dev": true, 2343 | "requires": { 2344 | "tslib": "^1.9.0" 2345 | } 2346 | }, 2347 | "safe-buffer": { 2348 | "version": "5.2.1", 2349 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2350 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2351 | "dev": true 2352 | }, 2353 | "sander": { 2354 | "version": "0.6.0", 2355 | "resolved": "https://registry.npmjs.org/sander/-/sander-0.6.0.tgz", 2356 | "integrity": "sha1-rxYkzX+2362Y6+9WUxn5IAeNqSU=", 2357 | "dev": true, 2358 | "requires": { 2359 | "graceful-fs": "^4.1.3", 2360 | "mkdirp": "^0.5.1", 2361 | "rimraf": "^2.5.2" 2362 | }, 2363 | "dependencies": { 2364 | "rimraf": { 2365 | "version": "2.7.1", 2366 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 2367 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 2368 | "dev": true, 2369 | "requires": { 2370 | "glob": "^7.1.3" 2371 | } 2372 | } 2373 | } 2374 | }, 2375 | "semver": { 2376 | "version": "7.3.5", 2377 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 2378 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 2379 | "dev": true, 2380 | "requires": { 2381 | "lru-cache": "^6.0.0" 2382 | } 2383 | }, 2384 | "semver-compare": { 2385 | "version": "1.0.0", 2386 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 2387 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", 2388 | "dev": true 2389 | }, 2390 | "serialize-javascript": { 2391 | "version": "5.0.1", 2392 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", 2393 | "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", 2394 | "dev": true, 2395 | "requires": { 2396 | "randombytes": "^2.1.0" 2397 | } 2398 | }, 2399 | "shebang-command": { 2400 | "version": "2.0.0", 2401 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2402 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2403 | "dev": true, 2404 | "requires": { 2405 | "shebang-regex": "^3.0.0" 2406 | } 2407 | }, 2408 | "shebang-regex": { 2409 | "version": "3.0.0", 2410 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2411 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2412 | "dev": true 2413 | }, 2414 | "signal-exit": { 2415 | "version": "3.0.3", 2416 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 2417 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 2418 | "dev": true 2419 | }, 2420 | "slice-ansi": { 2421 | "version": "4.0.0", 2422 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 2423 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 2424 | "dev": true, 2425 | "requires": { 2426 | "ansi-styles": "^4.0.0", 2427 | "astral-regex": "^2.0.0", 2428 | "is-fullwidth-code-point": "^3.0.0" 2429 | } 2430 | }, 2431 | "source-map": { 2432 | "version": "0.6.1", 2433 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2434 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2435 | "dev": true 2436 | }, 2437 | "source-map-support": { 2438 | "version": "0.5.19", 2439 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 2440 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 2441 | "dev": true, 2442 | "requires": { 2443 | "buffer-from": "^1.0.0", 2444 | "source-map": "^0.6.0" 2445 | } 2446 | }, 2447 | "sourcemap-codec": { 2448 | "version": "1.4.6", 2449 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz", 2450 | "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==", 2451 | "dev": true 2452 | }, 2453 | "spdx-correct": { 2454 | "version": "3.1.1", 2455 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 2456 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 2457 | "dev": true, 2458 | "requires": { 2459 | "spdx-expression-parse": "^3.0.0", 2460 | "spdx-license-ids": "^3.0.0" 2461 | } 2462 | }, 2463 | "spdx-exceptions": { 2464 | "version": "2.3.0", 2465 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 2466 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 2467 | "dev": true 2468 | }, 2469 | "spdx-expression-parse": { 2470 | "version": "3.0.1", 2471 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 2472 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 2473 | "dev": true, 2474 | "requires": { 2475 | "spdx-exceptions": "^2.1.0", 2476 | "spdx-license-ids": "^3.0.0" 2477 | } 2478 | }, 2479 | "spdx-license-ids": { 2480 | "version": "3.0.7", 2481 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", 2482 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", 2483 | "dev": true 2484 | }, 2485 | "sprintf-js": { 2486 | "version": "1.0.3", 2487 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2488 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2489 | "dev": true 2490 | }, 2491 | "string-argv": { 2492 | "version": "0.3.1", 2493 | "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", 2494 | "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", 2495 | "dev": true 2496 | }, 2497 | "string-width": { 2498 | "version": "4.2.2", 2499 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", 2500 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", 2501 | "dev": true, 2502 | "requires": { 2503 | "emoji-regex": "^8.0.0", 2504 | "is-fullwidth-code-point": "^3.0.0", 2505 | "strip-ansi": "^6.0.0" 2506 | } 2507 | }, 2508 | "string.prototype.trimend": { 2509 | "version": "1.0.4", 2510 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", 2511 | "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", 2512 | "dev": true, 2513 | "requires": { 2514 | "call-bind": "^1.0.2", 2515 | "define-properties": "^1.1.3" 2516 | } 2517 | }, 2518 | "string.prototype.trimstart": { 2519 | "version": "1.0.4", 2520 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", 2521 | "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", 2522 | "dev": true, 2523 | "requires": { 2524 | "call-bind": "^1.0.2", 2525 | "define-properties": "^1.1.3" 2526 | } 2527 | }, 2528 | "stringify-object": { 2529 | "version": "3.3.0", 2530 | "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", 2531 | "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", 2532 | "dev": true, 2533 | "requires": { 2534 | "get-own-enumerable-property-symbols": "^3.0.0", 2535 | "is-obj": "^1.0.1", 2536 | "is-regexp": "^1.0.0" 2537 | } 2538 | }, 2539 | "strip-ansi": { 2540 | "version": "6.0.0", 2541 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2542 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2543 | "dev": true, 2544 | "requires": { 2545 | "ansi-regex": "^5.0.0" 2546 | } 2547 | }, 2548 | "strip-bom": { 2549 | "version": "3.0.0", 2550 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 2551 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 2552 | "dev": true 2553 | }, 2554 | "strip-final-newline": { 2555 | "version": "2.0.0", 2556 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2557 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 2558 | "dev": true 2559 | }, 2560 | "strip-json-comments": { 2561 | "version": "3.1.1", 2562 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2563 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2564 | "dev": true 2565 | }, 2566 | "supports-color": { 2567 | "version": "7.2.0", 2568 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2569 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2570 | "dev": true, 2571 | "requires": { 2572 | "has-flag": "^4.0.0" 2573 | } 2574 | }, 2575 | "table": { 2576 | "version": "6.0.9", 2577 | "resolved": "https://registry.npmjs.org/table/-/table-6.0.9.tgz", 2578 | "integrity": "sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ==", 2579 | "dev": true, 2580 | "requires": { 2581 | "ajv": "^8.0.1", 2582 | "is-boolean-object": "^1.1.0", 2583 | "is-number-object": "^1.0.4", 2584 | "is-string": "^1.0.5", 2585 | "lodash.clonedeep": "^4.5.0", 2586 | "lodash.flatten": "^4.4.0", 2587 | "lodash.truncate": "^4.4.2", 2588 | "slice-ansi": "^4.0.0", 2589 | "string-width": "^4.2.0" 2590 | }, 2591 | "dependencies": { 2592 | "ajv": { 2593 | "version": "8.0.2", 2594 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.0.2.tgz", 2595 | "integrity": "sha512-V0HGxJd0PiDF0ecHYIesTOqfd1gJguwQUOYfMfAWnRsWQEXfc5ifbUFhD3Wjc+O+y7VAqL+g07prq9gHQ/JOZQ==", 2596 | "dev": true, 2597 | "requires": { 2598 | "fast-deep-equal": "^3.1.1", 2599 | "json-schema-traverse": "^1.0.0", 2600 | "require-from-string": "^2.0.2", 2601 | "uri-js": "^4.2.2" 2602 | } 2603 | }, 2604 | "json-schema-traverse": { 2605 | "version": "1.0.0", 2606 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2607 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2608 | "dev": true 2609 | } 2610 | } 2611 | }, 2612 | "tar": { 2613 | "version": "6.1.0", 2614 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", 2615 | "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", 2616 | "dev": true, 2617 | "requires": { 2618 | "chownr": "^2.0.0", 2619 | "fs-minipass": "^2.0.0", 2620 | "minipass": "^3.0.0", 2621 | "minizlib": "^2.1.1", 2622 | "mkdirp": "^1.0.3", 2623 | "yallist": "^4.0.0" 2624 | }, 2625 | "dependencies": { 2626 | "mkdirp": { 2627 | "version": "1.0.4", 2628 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 2629 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 2630 | "dev": true 2631 | } 2632 | } 2633 | }, 2634 | "text-table": { 2635 | "version": "0.2.0", 2636 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2637 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2638 | "dev": true 2639 | }, 2640 | "through": { 2641 | "version": "2.3.8", 2642 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2643 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2644 | "dev": true 2645 | }, 2646 | "tiny-glob": { 2647 | "version": "0.2.8", 2648 | "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.8.tgz", 2649 | "integrity": "sha512-vkQP7qOslq63XRX9kMswlby99kyO5OvKptw7AMwBVMjXEI7Tb61eoI5DydyEMOseyGS5anDN1VPoVxEvH01q8w==", 2650 | "dev": true, 2651 | "requires": { 2652 | "globalyzer": "0.1.0", 2653 | "globrex": "^0.1.2" 2654 | } 2655 | }, 2656 | "to-regex-range": { 2657 | "version": "5.0.1", 2658 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2659 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2660 | "dev": true, 2661 | "requires": { 2662 | "is-number": "^7.0.0" 2663 | } 2664 | }, 2665 | "tsconfig-paths": { 2666 | "version": "3.9.0", 2667 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", 2668 | "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", 2669 | "dev": true, 2670 | "requires": { 2671 | "@types/json5": "^0.0.29", 2672 | "json5": "^1.0.1", 2673 | "minimist": "^1.2.0", 2674 | "strip-bom": "^3.0.0" 2675 | }, 2676 | "dependencies": { 2677 | "minimist": { 2678 | "version": "1.2.5", 2679 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 2680 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 2681 | "dev": true 2682 | } 2683 | } 2684 | }, 2685 | "tslib": { 2686 | "version": "1.14.1", 2687 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 2688 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 2689 | "dev": true 2690 | }, 2691 | "type-check": { 2692 | "version": "0.4.0", 2693 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2694 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2695 | "dev": true, 2696 | "requires": { 2697 | "prelude-ls": "^1.2.1" 2698 | } 2699 | }, 2700 | "type-fest": { 2701 | "version": "0.8.1", 2702 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 2703 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 2704 | "dev": true 2705 | }, 2706 | "unbox-primitive": { 2707 | "version": "1.0.1", 2708 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", 2709 | "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", 2710 | "dev": true, 2711 | "requires": { 2712 | "function-bind": "^1.1.1", 2713 | "has-bigints": "^1.0.1", 2714 | "has-symbols": "^1.0.2", 2715 | "which-boxed-primitive": "^1.0.2" 2716 | } 2717 | }, 2718 | "uri-js": { 2719 | "version": "4.4.1", 2720 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2721 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2722 | "dev": true, 2723 | "requires": { 2724 | "punycode": "^2.1.0" 2725 | } 2726 | }, 2727 | "v8-compile-cache": { 2728 | "version": "2.3.0", 2729 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 2730 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 2731 | "dev": true 2732 | }, 2733 | "validate-npm-package-license": { 2734 | "version": "3.0.4", 2735 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 2736 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 2737 | "dev": true, 2738 | "requires": { 2739 | "spdx-correct": "^3.0.0", 2740 | "spdx-expression-parse": "^3.0.0" 2741 | } 2742 | }, 2743 | "which": { 2744 | "version": "2.0.2", 2745 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2746 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2747 | "dev": true, 2748 | "requires": { 2749 | "isexe": "^2.0.0" 2750 | } 2751 | }, 2752 | "which-boxed-primitive": { 2753 | "version": "1.0.2", 2754 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 2755 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 2756 | "dev": true, 2757 | "requires": { 2758 | "is-bigint": "^1.0.1", 2759 | "is-boolean-object": "^1.1.0", 2760 | "is-number-object": "^1.0.4", 2761 | "is-string": "^1.0.5", 2762 | "is-symbol": "^1.0.3" 2763 | } 2764 | }, 2765 | "wide-align": { 2766 | "version": "1.1.3", 2767 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 2768 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 2769 | "dev": true, 2770 | "requires": { 2771 | "string-width": "^1.0.2 || 2" 2772 | }, 2773 | "dependencies": { 2774 | "ansi-regex": { 2775 | "version": "3.0.0", 2776 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2777 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 2778 | "dev": true 2779 | }, 2780 | "is-fullwidth-code-point": { 2781 | "version": "2.0.0", 2782 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2783 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2784 | "dev": true 2785 | }, 2786 | "string-width": { 2787 | "version": "2.1.1", 2788 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2789 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2790 | "dev": true, 2791 | "requires": { 2792 | "is-fullwidth-code-point": "^2.0.0", 2793 | "strip-ansi": "^4.0.0" 2794 | } 2795 | }, 2796 | "strip-ansi": { 2797 | "version": "4.0.0", 2798 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2799 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2800 | "dev": true, 2801 | "requires": { 2802 | "ansi-regex": "^3.0.0" 2803 | } 2804 | } 2805 | } 2806 | }, 2807 | "word-wrap": { 2808 | "version": "1.2.3", 2809 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2810 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2811 | "dev": true 2812 | }, 2813 | "workerpool": { 2814 | "version": "6.1.0", 2815 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", 2816 | "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", 2817 | "dev": true 2818 | }, 2819 | "wrap-ansi": { 2820 | "version": "7.0.0", 2821 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2822 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2823 | "dev": true, 2824 | "requires": { 2825 | "ansi-styles": "^4.0.0", 2826 | "string-width": "^4.1.0", 2827 | "strip-ansi": "^6.0.0" 2828 | } 2829 | }, 2830 | "wrappy": { 2831 | "version": "1.0.2", 2832 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2833 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2834 | "dev": true 2835 | }, 2836 | "y18n": { 2837 | "version": "5.0.5", 2838 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", 2839 | "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", 2840 | "dev": true 2841 | }, 2842 | "yallist": { 2843 | "version": "4.0.0", 2844 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2845 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2846 | "dev": true 2847 | }, 2848 | "yaml": { 2849 | "version": "1.10.2", 2850 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 2851 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 2852 | "dev": true 2853 | }, 2854 | "yargs": { 2855 | "version": "16.2.0", 2856 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2857 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2858 | "dev": true, 2859 | "requires": { 2860 | "cliui": "^7.0.2", 2861 | "escalade": "^3.1.1", 2862 | "get-caller-file": "^2.0.5", 2863 | "require-directory": "^2.1.1", 2864 | "string-width": "^4.2.0", 2865 | "y18n": "^5.0.5", 2866 | "yargs-parser": "^20.2.2" 2867 | } 2868 | }, 2869 | "yargs-parser": { 2870 | "version": "20.2.4", 2871 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 2872 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 2873 | "dev": true 2874 | }, 2875 | "yargs-unparser": { 2876 | "version": "2.0.0", 2877 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 2878 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 2879 | "dev": true, 2880 | "requires": { 2881 | "camelcase": "^6.0.0", 2882 | "decamelize": "^4.0.0", 2883 | "flat": "^5.0.2", 2884 | "is-plain-obj": "^2.1.0" 2885 | } 2886 | }, 2887 | "yocto-queue": { 2888 | "version": "0.1.0", 2889 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2890 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2891 | "dev": true 2892 | } 2893 | } 2894 | } 2895 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "degit", 3 | "version": "2.8.4", 4 | "engines": { 5 | "node": ">=8.0.0" 6 | }, 7 | "description": "Straightforward project scaffolding", 8 | "main": "dist/index.js", 9 | "bin": { 10 | "degit": "degit" 11 | }, 12 | "scripts": { 13 | "lint": "eslint --color --ignore-path .gitignore .", 14 | "dev": "npm run build -- --watch", 15 | "build": "rollup -c", 16 | "test": "mocha", 17 | "pretest": "npm run build", 18 | "prepublishOnly": "npm test" 19 | }, 20 | "repository": { 21 | "type": "git", 22 | "url": "git+https://github.com/Rich-Harris/degit.git" 23 | }, 24 | "keywords": [ 25 | "scaffolding", 26 | "template", 27 | "git" 28 | ], 29 | "author": "Rich Harris", 30 | "license": "MIT", 31 | "bugs": { 32 | "url": "https://github.com/Rich-Harris/degit/issues" 33 | }, 34 | "homepage": "https://github.com/Rich-Harris/degit#readme", 35 | "devDependencies": { 36 | "@rollup/plugin-commonjs": "18.0.0", 37 | "@rollup/plugin-node-resolve": "11.2.1", 38 | "chalk": "4.1.0", 39 | "enquirer": "2.3.6", 40 | "eslint": "7.23.0", 41 | "eslint-config-prettier": "8.1.0", 42 | "eslint-plugin-import": "2.22.1", 43 | "fuzzysearch": "1.0.3", 44 | "home-or-tmp": "3.0.0", 45 | "https-proxy-agent": "5.0.0", 46 | "husky": "6.0.0", 47 | "lint-staged": "10.5.4", 48 | "mocha": "8.3.2", 49 | "mri": "1.1.6", 50 | "prettier": "2.2.1", 51 | "rimraf": "3.0.2", 52 | "rollup": "2.44.0", 53 | "rollup-plugin-commonjs": "10.1.0", 54 | "sander": "0.6.0", 55 | "source-map-support": "0.5.19", 56 | "tar": "6.1.0", 57 | "tiny-glob": "0.2.8" 58 | }, 59 | "files": [ 60 | "help.md", 61 | "dist" 62 | ], 63 | "husky": { 64 | "hooks": { 65 | "pre-commit": "lint-staged" 66 | } 67 | }, 68 | "lint-staged": { 69 | "*.{js}": [ 70 | "eslint --fix", 71 | "git add" 72 | ], 73 | "*.{js, json, yml, md}": [ 74 | "prettier --write", 75 | "git add" 76 | ] 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import resolve from '@rollup/plugin-node-resolve'; 2 | import commonjs from '@rollup/plugin-commonjs'; 3 | import { builtinModules } from 'module'; 4 | import pkg from './package.json'; 5 | 6 | export default { 7 | input: { 8 | index: 'src/index.js', 9 | bin: 'src/bin.js' 10 | }, 11 | output: { 12 | dir: 'dist', 13 | entryFileNames: '[name].js', 14 | chunkFileNames: '[name]-[hash].js', 15 | format: 'cjs', 16 | exports: 'auto', 17 | sourcemap: true 18 | }, 19 | external: Object.keys(pkg.dependencies || {}).concat(builtinModules), 20 | plugins: [resolve(), commonjs()] 21 | }; 22 | -------------------------------------------------------------------------------- /src/bin.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import chalk from 'chalk'; 4 | import mri from 'mri'; 5 | import glob from 'tiny-glob/sync.js'; 6 | import fuzzysearch from 'fuzzysearch'; 7 | import enquirer from 'enquirer'; 8 | import degit from './index.js'; 9 | import { tryRequire, base } from './utils.js'; 10 | 11 | const args = mri(process.argv.slice(2), { 12 | alias: { 13 | f: 'force', 14 | c: 'cache', 15 | v: 'verbose', 16 | m: 'mode' 17 | }, 18 | boolean: ['force', 'cache', 'verbose'] 19 | }); 20 | 21 | const [src, dest = '.'] = args._; 22 | 23 | async function main() { 24 | if (args.help) { 25 | const help = fs 26 | .readFileSync(path.join(__dirname, 'help.md'), 'utf-8') 27 | .replace(/^(\s*)#+ (.+)/gm, (m, s, _) => s + chalk.bold(_)) 28 | .replace(/_([^_]+)_/g, (m, _) => chalk.underline(_)) 29 | .replace(/`([^`]+)`/g, (m, _) => chalk.cyan(_)); 30 | 31 | process.stdout.write(`\n${help}\n`); 32 | } else if (!src) { 33 | // interactive mode 34 | 35 | const accessLookup = new Map(); 36 | 37 | glob(`**/access.json`, { cwd: base }).forEach(file => { 38 | const [host, user, repo] = file.split(path.sep); 39 | 40 | const json = fs.readFileSync(`${base}/${file}`, 'utf-8'); 41 | const logs = JSON.parse(json); 42 | 43 | Object.entries(logs).forEach(([ref, timestamp]) => { 44 | const id = `${host}:${user}/${repo}#${ref}`; 45 | accessLookup.set(id, new Date(timestamp).getTime()); 46 | }); 47 | }); 48 | 49 | const getChoice = file => { 50 | const [host, user, repo] = file.split(path.sep); 51 | 52 | return Object.entries(tryRequire(`${base}/${file}`)).map( 53 | ([ref, hash]) => ({ 54 | name: hash, 55 | message: `${host}:${user}/${repo}#${ref}`, 56 | value: `${host}:${user}/${repo}#${ref}` 57 | }) 58 | ); 59 | }; 60 | 61 | const choices = glob(`**/map.json`, { cwd: base }) 62 | .map(getChoice) 63 | .reduce( 64 | (accumulator, currentValue) => accumulator.concat(currentValue), 65 | [] 66 | ) 67 | .sort((a, b) => { 68 | const aTime = accessLookup.get(a.value) || 0; 69 | const bTime = accessLookup.get(b.value) || 0; 70 | 71 | return bTime - aTime; 72 | }); 73 | 74 | const options = await enquirer.prompt([ 75 | { 76 | type: 'autocomplete', 77 | name: 'src', 78 | message: 'Repo to clone?', 79 | suggest: (input, choices) => 80 | choices.filter(({ value }) => fuzzysearch(input, value)), 81 | choices 82 | }, 83 | { 84 | type: 'input', 85 | name: 'dest', 86 | message: 'Destination directory?', 87 | initial: '.' 88 | }, 89 | { 90 | type: 'toggle', 91 | name: 'cache', 92 | message: 'Use cached version?' 93 | } 94 | ]); 95 | 96 | const empty = 97 | !fs.existsSync(options.dest) || fs.readdirSync(options.dest).length === 0; 98 | 99 | if (!empty) { 100 | const { force } = await enquirer.prompt([ 101 | { 102 | type: 'toggle', 103 | name: 'force', 104 | message: 'Overwrite existing files?' 105 | } 106 | ]); 107 | 108 | if (!force) { 109 | console.error(chalk.magenta(`! Directory not empty — aborting`)); 110 | return; 111 | } 112 | } 113 | 114 | run(options.src, options.dest, { 115 | force: true, 116 | cache: options.cache 117 | }); 118 | } else { 119 | run(src, dest, args); 120 | } 121 | } 122 | 123 | function run(src, dest, args) { 124 | const d = degit(src, args); 125 | 126 | d.on('info', event => { 127 | console.error(chalk.cyan(`> ${event.message.replace('options.', '--')}`)); 128 | }); 129 | 130 | d.on('warn', event => { 131 | console.error( 132 | chalk.magenta(`! ${event.message.replace('options.', '--')}`) 133 | ); 134 | }); 135 | 136 | d.clone(dest).catch(err => { 137 | console.error(chalk.red(`! ${err.message.replace('options.', '--')}`)); 138 | process.exit(1); 139 | }); 140 | } 141 | 142 | main(); 143 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import tar from 'tar'; 4 | import EventEmitter from 'events'; 5 | import chalk from 'chalk'; 6 | import { rimrafSync } from 'sander'; 7 | import { 8 | DegitError, 9 | exec, 10 | fetch, 11 | mkdirp, 12 | tryRequire, 13 | stashFiles, 14 | unstashFiles, 15 | degitConfigName, 16 | base 17 | } from './utils.js'; 18 | 19 | const validModes = new Set(['tar', 'git']); 20 | 21 | export default function degit(src, opts) { 22 | return new Degit(src, opts); 23 | } 24 | 25 | class Degit extends EventEmitter { 26 | constructor(src, opts = {}) { 27 | super(); 28 | 29 | this.src = src; 30 | this.cache = opts.cache; 31 | this.force = opts.force; 32 | this.verbose = opts.verbose; 33 | this.proxy = process.env.https_proxy; // TODO allow setting via --proxy 34 | 35 | this.repo = parse(src); 36 | this.mode = opts.mode || this.repo.mode; 37 | 38 | if (!validModes.has(this.mode)) { 39 | throw new Error(`Valid modes are ${Array.from(validModes).join(', ')}`); 40 | } 41 | 42 | this._hasStashed = false; 43 | 44 | this.directiveActions = { 45 | clone: async (dir, dest, action) => { 46 | if (this._hasStashed === false) { 47 | stashFiles(dir, dest); 48 | this._hasStashed = true; 49 | } 50 | const opts = Object.assign( 51 | { force: true }, 52 | { cache: action.cache, verbose: action.verbose } 53 | ); 54 | const d = degit(action.src, opts); 55 | 56 | d.on('info', event => { 57 | console.error( 58 | chalk.cyan(`> ${event.message.replace('options.', '--')}`) 59 | ); 60 | }); 61 | 62 | d.on('warn', event => { 63 | console.error( 64 | chalk.magenta(`! ${event.message.replace('options.', '--')}`) 65 | ); 66 | }); 67 | 68 | await d.clone(dest).catch(err => { 69 | console.error(chalk.red(`! ${err.message}`)); 70 | process.exit(1); 71 | }); 72 | }, 73 | remove: this.remove.bind(this) 74 | }; 75 | } 76 | 77 | _getDirectives(dest) { 78 | const directivesPath = path.resolve(dest, degitConfigName); 79 | const directives = 80 | tryRequire(directivesPath, { clearCache: true }) || false; 81 | if (directives) { 82 | fs.unlinkSync(directivesPath); 83 | } 84 | 85 | return directives; 86 | } 87 | 88 | async clone(dest) { 89 | this._checkDirIsEmpty(dest); 90 | 91 | const { repo } = this; 92 | 93 | const dir = path.join(base, repo.site, repo.user, repo.name); 94 | 95 | if (this.mode === 'tar') { 96 | await this._cloneWithTar(dir, dest); 97 | } else { 98 | await this._cloneWithGit(dir, dest); 99 | } 100 | 101 | this._info({ 102 | code: 'SUCCESS', 103 | message: `cloned ${chalk.bold(repo.user + '/' + repo.name)}#${chalk.bold( 104 | repo.ref 105 | )}${dest !== '.' ? ` to ${dest}` : ''}`, 106 | repo, 107 | dest 108 | }); 109 | 110 | const directives = this._getDirectives(dest); 111 | if (directives) { 112 | for (const d of directives) { 113 | // TODO, can this be a loop with an index to pass for better error messages? 114 | await this.directiveActions[d.action](dir, dest, d); 115 | } 116 | if (this._hasStashed === true) { 117 | unstashFiles(dir, dest); 118 | } 119 | } 120 | } 121 | 122 | remove(dir, dest, action) { 123 | let files = action.files; 124 | if (!Array.isArray(files)) { 125 | files = [files]; 126 | } 127 | const removedFiles = files 128 | .map(file => { 129 | const filePath = path.resolve(dest, file); 130 | if (fs.existsSync(filePath)) { 131 | const isDir = fs.lstatSync(filePath).isDirectory(); 132 | if (isDir) { 133 | rimrafSync(filePath); 134 | return file + '/'; 135 | } else { 136 | fs.unlinkSync(filePath); 137 | return file; 138 | } 139 | } else { 140 | this._warn({ 141 | code: 'FILE_DOES_NOT_EXIST', 142 | message: `action wants to remove ${chalk.bold( 143 | file 144 | )} but it does not exist` 145 | }); 146 | return null; 147 | } 148 | }) 149 | .filter(d => d); 150 | 151 | if (removedFiles.length > 0) { 152 | this._info({ 153 | code: 'REMOVED', 154 | message: `removed: ${chalk.bold( 155 | removedFiles.map(d => chalk.bold(d)).join(', ') 156 | )}` 157 | }); 158 | } 159 | } 160 | 161 | _checkDirIsEmpty(dir) { 162 | try { 163 | const files = fs.readdirSync(dir); 164 | if (files.length > 0) { 165 | if (this.force) { 166 | this._info({ 167 | code: 'DEST_NOT_EMPTY', 168 | message: `destination directory is not empty. Using options.force, continuing` 169 | }); 170 | } else { 171 | throw new DegitError( 172 | `destination directory is not empty, aborting. Use options.force to override`, 173 | { 174 | code: 'DEST_NOT_EMPTY' 175 | } 176 | ); 177 | } 178 | } else { 179 | this._verbose({ 180 | code: 'DEST_IS_EMPTY', 181 | message: `destination directory is empty` 182 | }); 183 | } 184 | } catch (err) { 185 | if (err.code !== 'ENOENT') throw err; 186 | } 187 | } 188 | 189 | _info(info) { 190 | this.emit('info', info); 191 | } 192 | 193 | _warn(info) { 194 | this.emit('warn', info); 195 | } 196 | 197 | _verbose(info) { 198 | if (this.verbose) this._info(info); 199 | } 200 | 201 | async _getHash(repo, cached) { 202 | try { 203 | const refs = await fetchRefs(repo); 204 | if (repo.ref === 'HEAD') { 205 | return refs.find(ref => ref.type === 'HEAD').hash; 206 | } 207 | return this._selectRef(refs, repo.ref); 208 | } catch (err) { 209 | this._warn(err); 210 | this._verbose(err.original); 211 | 212 | return this._getHashFromCache(repo, cached); 213 | } 214 | } 215 | 216 | _getHashFromCache(repo, cached) { 217 | if (repo.ref in cached) { 218 | const hash = cached[repo.ref]; 219 | this._info({ 220 | code: 'USING_CACHE', 221 | message: `using cached commit hash ${hash}` 222 | }); 223 | return hash; 224 | } 225 | } 226 | 227 | _selectRef(refs, selector) { 228 | for (const ref of refs) { 229 | if (ref.name === selector) { 230 | this._verbose({ 231 | code: 'FOUND_MATCH', 232 | message: `found matching commit hash: ${ref.hash}` 233 | }); 234 | return ref.hash; 235 | } 236 | } 237 | 238 | if (selector.length < 8) return null; 239 | 240 | for (const ref of refs) { 241 | if (ref.hash.startsWith(selector)) return ref.hash; 242 | } 243 | } 244 | 245 | async _cloneWithTar(dir, dest) { 246 | const { repo } = this; 247 | 248 | const cached = tryRequire(path.join(dir, 'map.json')) || {}; 249 | 250 | const hash = this.cache 251 | ? this._getHashFromCache(repo, cached) 252 | : await this._getHash(repo, cached); 253 | 254 | const subdir = repo.subdir ? `${repo.name}-${hash}${repo.subdir}` : null; 255 | 256 | if (!hash) { 257 | // TODO 'did you mean...?' 258 | throw new DegitError(`could not find commit hash for ${repo.ref}`, { 259 | code: 'MISSING_REF', 260 | ref: repo.ref 261 | }); 262 | } 263 | 264 | const file = `${dir}/${hash}.tar.gz`; 265 | const url = 266 | repo.site === 'gitlab' 267 | ? `${repo.url}/repository/archive.tar.gz?ref=${hash}` 268 | : repo.site === 'bitbucket' 269 | ? `${repo.url}/get/${hash}.tar.gz` 270 | : `${repo.url}/archive/${hash}.tar.gz`; 271 | 272 | try { 273 | if (!this.cache) { 274 | try { 275 | fs.statSync(file); 276 | this._verbose({ 277 | code: 'FILE_EXISTS', 278 | message: `${file} already exists locally` 279 | }); 280 | } catch (err) { 281 | mkdirp(path.dirname(file)); 282 | 283 | if (this.proxy) { 284 | this._verbose({ 285 | code: 'PROXY', 286 | message: `using proxy ${this.proxy}` 287 | }); 288 | } 289 | 290 | this._verbose({ 291 | code: 'DOWNLOADING', 292 | message: `downloading ${url} to ${file}` 293 | }); 294 | 295 | await fetch(url, file, this.proxy); 296 | } 297 | } 298 | } catch (err) { 299 | throw new DegitError(`could not download ${url}`, { 300 | code: 'COULD_NOT_DOWNLOAD', 301 | url, 302 | original: err 303 | }); 304 | } 305 | 306 | updateCache(dir, repo, hash, cached); 307 | 308 | this._verbose({ 309 | code: 'EXTRACTING', 310 | message: `extracting ${ 311 | subdir ? repo.subdir + ' from ' : '' 312 | }${file} to ${dest}` 313 | }); 314 | 315 | mkdirp(dest); 316 | await untar(file, dest, subdir); 317 | } 318 | 319 | async _cloneWithGit(dir, dest) { 320 | await exec(`git clone ${this.repo.ssh} ${dest}`); 321 | await exec(`rm -rf ${path.resolve(dest, '.git')}`); 322 | } 323 | } 324 | 325 | const supported = new Set(['github', 'gitlab', 'bitbucket', 'git.sr.ht']); 326 | 327 | function parse(src) { 328 | const match = /^(?:(?:https:\/\/)?([^:/]+\.[^:/]+)\/|git@([^:/]+)[:/]|([^/]+):)?([^/\s]+)\/([^/\s#]+)(?:((?:\/[^/\s#]+)+))?(?:\/)?(?:#(.+))?/.exec( 329 | src 330 | ); 331 | if (!match) { 332 | throw new DegitError(`could not parse ${src}`, { 333 | code: 'BAD_SRC' 334 | }); 335 | } 336 | 337 | const site = (match[1] || match[2] || match[3] || 'github').replace( 338 | /\.(com|org)$/, 339 | '' 340 | ); 341 | if (!supported.has(site)) { 342 | throw new DegitError( 343 | `degit supports GitHub, GitLab, Sourcehut and BitBucket`, 344 | { 345 | code: 'UNSUPPORTED_HOST' 346 | } 347 | ); 348 | } 349 | 350 | const user = match[4]; 351 | const name = match[5].replace(/\.git$/, ''); 352 | const subdir = match[6]; 353 | const ref = match[7] || 'HEAD'; 354 | 355 | const domain = `${site}.${ 356 | site === 'bitbucket' ? 'org' : site === 'git.sr.ht' ? '' : 'com' 357 | }`; 358 | const url = `https://${domain}/${user}/${name}`; 359 | const ssh = `git@${domain}:${user}/${name}`; 360 | 361 | const mode = supported.has(site) ? 'tar' : 'git'; 362 | 363 | return { site, user, name, ref, url, ssh, subdir, mode }; 364 | } 365 | 366 | async function untar(file, dest, subdir = null) { 367 | return tar.extract( 368 | { 369 | file, 370 | strip: subdir ? subdir.split('/').length : 1, 371 | C: dest 372 | }, 373 | subdir ? [subdir] : [] 374 | ); 375 | } 376 | 377 | async function fetchRefs(repo) { 378 | try { 379 | const { stdout } = await exec(`git ls-remote ${repo.url}`); 380 | 381 | return stdout 382 | .split('\n') 383 | .filter(Boolean) 384 | .map(row => { 385 | const [hash, ref] = row.split('\t'); 386 | 387 | if (ref === 'HEAD') { 388 | return { 389 | type: 'HEAD', 390 | hash 391 | }; 392 | } 393 | 394 | const match = /refs\/(\w+)\/(.+)/.exec(ref); 395 | if (!match) 396 | throw new DegitError(`could not parse ${ref}`, { 397 | code: 'BAD_REF' 398 | }); 399 | 400 | return { 401 | type: 402 | match[1] === 'heads' 403 | ? 'branch' 404 | : match[1] === 'refs' 405 | ? 'ref' 406 | : match[1], 407 | name: match[2], 408 | hash 409 | }; 410 | }); 411 | } catch (error) { 412 | throw new DegitError(`could not fetch remote ${repo.url}`, { 413 | code: 'COULD_NOT_FETCH', 414 | url: repo.url, 415 | original: error 416 | }); 417 | } 418 | } 419 | 420 | function updateCache(dir, repo, hash, cached) { 421 | // update access logs 422 | const logs = tryRequire(path.join(dir, 'access.json')) || {}; 423 | logs[repo.ref] = new Date().toISOString(); 424 | fs.writeFileSync( 425 | path.join(dir, 'access.json'), 426 | JSON.stringify(logs, null, ' ') 427 | ); 428 | 429 | if (cached[repo.ref] === hash) return; 430 | 431 | const oldHash = cached[repo.ref]; 432 | if (oldHash) { 433 | let used = false; 434 | for (const key in cached) { 435 | if (cached[key] === hash) { 436 | used = true; 437 | break; 438 | } 439 | } 440 | 441 | if (!used) { 442 | // we no longer need this tar file 443 | try { 444 | fs.unlinkSync(path.join(dir, `${oldHash}.tar.gz`)); 445 | } catch (err) { 446 | // ignore 447 | } 448 | } 449 | } 450 | 451 | cached[repo.ref] = hash; 452 | fs.writeFileSync( 453 | path.join(dir, 'map.json'), 454 | JSON.stringify(cached, null, ' ') 455 | ); 456 | } 457 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import homeOrTmp from 'home-or-tmp'; 4 | import https from 'https'; 5 | import child_process from 'child_process'; 6 | import URL from 'url'; 7 | import Agent from 'https-proxy-agent'; 8 | import { rimrafSync, copydirSync } from 'sander'; 9 | 10 | const tmpDirName = 'tmp'; 11 | const degitConfigName = 'degit.json'; 12 | 13 | export { degitConfigName }; 14 | 15 | export class DegitError extends Error { 16 | constructor(message, opts) { 17 | super(message); 18 | Object.assign(this, opts); 19 | } 20 | } 21 | 22 | export function tryRequire(file, opts) { 23 | try { 24 | if (opts && opts.clearCache === true) { 25 | delete require.cache[require.resolve(file)]; 26 | } 27 | return require(file); 28 | } catch (err) { 29 | return null; 30 | } 31 | } 32 | 33 | export function exec(command) { 34 | return new Promise((fulfil, reject) => { 35 | child_process.exec(command, (err, stdout, stderr) => { 36 | if (err) { 37 | reject(err); 38 | return; 39 | } 40 | 41 | fulfil({ stdout, stderr }); 42 | }); 43 | }); 44 | } 45 | 46 | export function mkdirp(dir) { 47 | const parent = path.dirname(dir); 48 | if (parent === dir) return; 49 | 50 | mkdirp(parent); 51 | 52 | try { 53 | fs.mkdirSync(dir); 54 | } catch (err) { 55 | if (err.code !== 'EEXIST') throw err; 56 | } 57 | } 58 | 59 | export function fetch(url, dest, proxy) { 60 | return new Promise((fulfil, reject) => { 61 | let options = url; 62 | 63 | if (proxy) { 64 | const parsedUrl = URL.parse(url); 65 | options = { 66 | hostname: parsedUrl.host, 67 | path: parsedUrl.path, 68 | agent: new Agent(proxy) 69 | }; 70 | } 71 | 72 | https 73 | .get(options, response => { 74 | const code = response.statusCode; 75 | if (code >= 400) { 76 | reject({ code, message: response.statusMessage }); 77 | } else if (code >= 300) { 78 | fetch(response.headers.location, dest, proxy).then(fulfil, reject); 79 | } else { 80 | response 81 | .pipe(fs.createWriteStream(dest)) 82 | .on('finish', () => fulfil()) 83 | .on('error', reject); 84 | } 85 | }) 86 | .on('error', reject); 87 | }); 88 | } 89 | 90 | export function stashFiles(dir, dest) { 91 | const tmpDir = path.join(dir, tmpDirName); 92 | rimrafSync(tmpDir); 93 | mkdirp(tmpDir); 94 | fs.readdirSync(dest).forEach(file => { 95 | const filePath = path.join(dest, file); 96 | const targetPath = path.join(tmpDir, file); 97 | const isDir = fs.lstatSync(filePath).isDirectory(); 98 | if (isDir) { 99 | copydirSync(filePath).to(targetPath); 100 | rimrafSync(filePath); 101 | } else { 102 | fs.copyFileSync(filePath, targetPath); 103 | fs.unlinkSync(filePath); 104 | } 105 | }); 106 | } 107 | 108 | export function unstashFiles(dir, dest) { 109 | const tmpDir = path.join(dir, tmpDirName); 110 | fs.readdirSync(tmpDir).forEach(filename => { 111 | const tmpFile = path.join(tmpDir, filename); 112 | const targetPath = path.join(dest, filename); 113 | const isDir = fs.lstatSync(tmpFile).isDirectory(); 114 | if (isDir) { 115 | copydirSync(tmpFile).to(targetPath); 116 | rimrafSync(tmpFile); 117 | } else { 118 | if (filename !== 'degit.json') { 119 | fs.copyFileSync(tmpFile, targetPath); 120 | } 121 | fs.unlinkSync(tmpFile); 122 | } 123 | }); 124 | rimrafSync(tmpDir); 125 | } 126 | 127 | export const base = path.join(homeOrTmp, '.degit'); 128 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | require('source-map-support').install(); 2 | 3 | const fs = require('fs'); 4 | const path = require('path'); 5 | const glob = require('tiny-glob/sync'); 6 | const rimraf = require('rimraf').sync; 7 | const assert = require('assert'); 8 | const child_process = require('child_process'); 9 | 10 | const degit = require('../dist/index.js'); 11 | const degitPath = path.resolve('dist/bin.js'); 12 | 13 | const timeout = 30000; 14 | 15 | function exec(cmd) { 16 | return new Promise((fulfil, reject) => { 17 | child_process.exec(cmd, (err, stdout, stderr) => { 18 | if (err) return reject(err); 19 | console.log(stdout); 20 | console.error(stderr); 21 | fulfil(); 22 | }); 23 | }); 24 | } 25 | 26 | describe('degit', function() { 27 | this.timeout(timeout); 28 | 29 | function compare(dir, files) { 30 | const expected = glob('**', { cwd: dir }); 31 | assert.deepEqual(Object.keys(files).sort(), expected.sort()); 32 | 33 | expected.forEach(file => { 34 | if (!fs.lstatSync(`${dir}/${file}`).isDirectory()) { 35 | assert.equal(files[file].trim(), read(`${dir}/${file}`).trim()); 36 | } 37 | }); 38 | } 39 | 40 | beforeEach(async () => await rimraf('.tmp')); 41 | afterEach(async () => await rimraf('.tmp')); 42 | 43 | describe('github', () => { 44 | [ 45 | 'mhkeller/degit-test-repo-compose', 46 | 'Rich-Harris/degit-test-repo', 47 | 'github:Rich-Harris/degit-test-repo', 48 | 'git@github.com:Rich-Harris/degit-test-repo', 49 | 'https://github.com/Rich-Harris/degit-test-repo.git' 50 | ].forEach(src => { 51 | it(src, async () => { 52 | await exec(`node ${degitPath} ${src} .tmp/test-repo -v`); 53 | compare(`.tmp/test-repo`, { 54 | 'file.txt': 'hello from github!', 55 | subdir: null, 56 | 'subdir/file.txt': 'hello from a subdirectory!' 57 | }); 58 | }); 59 | }); 60 | }); 61 | 62 | describe('gitlab', () => { 63 | [ 64 | 'gitlab:Rich-Harris/degit-test-repo', 65 | 'git@gitlab.com:Rich-Harris/degit-test-repo', 66 | 'https://gitlab.com/Rich-Harris/degit-test-repo.git' 67 | ].forEach(src => { 68 | it(src, async () => { 69 | await exec(`node ${degitPath} ${src} .tmp/test-repo -v`); 70 | compare(`.tmp/test-repo`, { 71 | 'file.txt': 'hello from gitlab!' 72 | }); 73 | }); 74 | }); 75 | }); 76 | 77 | describe('bitbucket', () => { 78 | [ 79 | 'bitbucket:Rich_Harris/degit-test-repo', 80 | 'git@bitbucket.org:Rich_Harris/degit-test-repo', 81 | 'https://bitbucket.org/Rich_Harris/degit-test-repo.git' 82 | ].forEach(src => { 83 | it(src, async () => { 84 | await exec(`node ${degitPath} ${src} .tmp/test-repo -v`); 85 | compare(`.tmp/test-repo`, { 86 | 'file.txt': 'hello from bitbucket' 87 | }); 88 | }); 89 | }); 90 | }); 91 | 92 | describe('Sourcehut', () => { 93 | [ 94 | 'git.sr.ht/~satotake/degit-test-repo', 95 | 'https://git.sr.ht/~satotake/degit-test-repo', 96 | 'git@git.sr.ht:~satotake/degit-test-repo' 97 | ].forEach(src => { 98 | it(src, async () => { 99 | await exec(`node ${degitPath} ${src} .tmp/test-repo -v`); 100 | compare(`.tmp/test-repo`, { 101 | 'file.txt': 'hello from sourcehut!' 102 | }); 103 | }); 104 | }); 105 | }); 106 | 107 | describe('Subdirectories', () => { 108 | [ 109 | 'Rich-Harris/degit-test-repo/subdir', 110 | 'github:Rich-Harris/degit-test-repo/subdir', 111 | 'git@github.com:Rich-Harris/degit-test-repo/subdir', 112 | 'https://github.com/Rich-Harris/degit-test-repo.git/subdir' 113 | ].forEach(src => { 114 | it(src, async () => { 115 | await exec(`node ${degitPath} ${src} .tmp/test-repo -v`); 116 | compare(`.tmp/test-repo`, { 117 | 'file.txt': 'hello from a subdirectory!' 118 | }); 119 | }); 120 | }); 121 | }); 122 | 123 | describe('non-empty directories', () => { 124 | it('fails without --force', async () => { 125 | let succeeded; 126 | 127 | try { 128 | await exec(`mkdir -p .tmp/test-repo`); 129 | await exec(`echo "not empty" > .tmp/test-repo/file.txt`); 130 | await exec( 131 | `node ${degitPath} Rich-Harris/degit-test-repo .tmp/test-repo -v` 132 | ); 133 | succeeded = true; 134 | } catch (err) { 135 | assert.ok(/destination directory is not empty/.test(err.message)); 136 | } 137 | 138 | assert.ok(!succeeded); 139 | }); 140 | 141 | it('succeeds with --force', async () => { 142 | await exec( 143 | `node ${degitPath} Rich-Harris/degit-test-repo .tmp/test-repo -fv` 144 | ); 145 | }); 146 | }); 147 | 148 | describe('command line arguments', () => { 149 | it('allows flags wherever', async () => { 150 | await exec( 151 | `node ${degitPath} -v Rich-Harris/degit-test-repo .tmp/test-repo` 152 | ); 153 | compare(`.tmp/test-repo`, { 154 | 'file.txt': 'hello from github!', 155 | subdir: null, 156 | 'subdir/file.txt': 'hello from a subdirectory!' 157 | }); 158 | }); 159 | }); 160 | 161 | describe('api', () => { 162 | it('is usable from node scripts', async () => { 163 | await degit('Rich-Harris/degit-test-repo', { force: true }).clone( 164 | '.tmp/test-repo' 165 | ); 166 | 167 | compare(`.tmp/test-repo`, { 168 | 'file.txt': 'hello from github!', 169 | subdir: null, 170 | 'subdir/file.txt': 'hello from a subdirectory!' 171 | }); 172 | }); 173 | }); 174 | 175 | describe('actions', () => { 176 | it('removes specified file', async () => { 177 | await exec( 178 | `node ${degitPath} -v mhkeller/degit-test-repo-remove-only .tmp/test-repo` 179 | ); 180 | compare(`.tmp/test-repo`, {}); 181 | }); 182 | 183 | it('clones repo and removes specified file', async () => { 184 | await exec( 185 | `node ${degitPath} -v mhkeller/degit-test-repo-remove .tmp/test-repo` 186 | ); 187 | compare(`.tmp/test-repo`, { 188 | 'other.txt': 'hello from github!', 189 | subdir: null, 190 | 'subdir/file.txt': 'hello from a subdirectory!' 191 | }); 192 | }); 193 | 194 | it('removes and adds nested files', async () => { 195 | await rimraf('.tmp'); 196 | 197 | await exec( 198 | `node ${degitPath} -v mhkeller/degit-test-repo-nested-actions .tmp/test-repo` 199 | ); 200 | compare(`.tmp/test-repo`, { 201 | dir: null, 202 | folder: null, 203 | subdir: null, 204 | 'folder/file.txt': 'hello from clobber file!', 205 | 'folder/other.txt': 'hello from other file!', 206 | 'subdir/file.txt': 'hello from a subdirectory!' 207 | }); 208 | }); 209 | }); 210 | 211 | describe('git mode', () => { 212 | it('is able to clone correctly using git mode', async () => { 213 | await rimraf('.tmp'); 214 | 215 | await exec( 216 | `node ${degitPath} --mode=git https://github.com/Rich-Harris/degit-test-repo-private.git .tmp/test-repo` 217 | ); 218 | compare('.tmp/test-repo', { 219 | 'file.txt': 'hello from a private repo!' 220 | }); 221 | }); 222 | }); 223 | }); 224 | 225 | function read(file) { 226 | return fs.readFileSync(file, 'utf-8'); 227 | } 228 | --------------------------------------------------------------------------------