├── .github └── workflows │ └── main.yml ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── bin ├── gitm ├── gitm-checkout ├── gitm-clone ├── gitm-execute ├── gitm-fetch ├── gitm-init ├── gitm-pull ├── gitm-push ├── gitm-recursion └── gitm-util ├── docs └── img │ ├── branch.png │ ├── checkout.png │ ├── repo.png │ ├── workflow0.png │ └── workflow1.png ├── examples ├── repositories │ ├── branch.gitm │ └── repo.gitm ├── repository-dir │ ├── branch.gitm │ └── repo.gitm └── repository │ ├── branch.gitm │ └── repo.gitm ├── index.js ├── package-lock.json ├── package.json └── test └── test.js /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Node.js Package Gitm 2 | on: 3 | push: 4 | tags: 5 | - "*" 6 | pull_request: 7 | tags: 8 | - "*" 9 | workflow_dispatch: 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | permissions: 14 | contents: read 15 | packages: write 16 | steps: 17 | - uses: actions/checkout@v2 18 | # Setup .npmrc file to publish to npm 19 | - uses: actions/setup-node@v2 20 | with: 21 | node-version: '10.x' 22 | registry-url: 'https://registry.npmjs.org' 23 | - run: npm install 24 | # Publish to npm 25 | - run: npm publish --access public 26 | env: 27 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 28 | # Setup .npmrc file to publish to GitHub Packages 29 | # - uses: actions/setup-node@v2 30 | # with: 31 | # registry-url: "https://npm.pkg.github.com" 32 | # # Defaults to the user or organization that owns the workflow file 33 | # scope: "@snowdream" 34 | # # Publish to GitHub Packages 35 | # - run: npm publish 36 | # env: 37 | # NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by http://www.gitignore.io 2 | 3 | #!! ERROR: ec is undefined. Use list command to see defined gitignore types !!# 4 | 5 | ### Node ### 6 | # Logs 7 | logs 8 | *.log 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | 15 | # Directory for instrumented libs generated by jscoverage/JSCover 16 | lib-cov 17 | 18 | # Coverage directory used by tools like istanbul 19 | coverage 20 | 21 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 22 | .grunt 23 | 24 | # Compiled binary addons (http://nodejs.org/api/addons.html) 25 | build/Release 26 | 27 | # Dependency directory 28 | # Commenting this out is preferred by some people, see 29 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- 30 | node_modules 31 | 32 | # Users Environment Variables 33 | .lock-wscript 34 | 35 | 36 | ### Eclipse ### 37 | *.pydevproject 38 | .metadata 39 | .gradle 40 | tmp/ 41 | *.tmp 42 | *.bak 43 | *.swp 44 | *~.nib 45 | local.properties 46 | .settings/ 47 | .loadpath 48 | 49 | # External tool builders 50 | .externalToolBuilders/ 51 | 52 | # Locally stored "Eclipse launch configurations" 53 | *.launch 54 | 55 | # CDT-specific 56 | .cproject 57 | 58 | # PDT-specific 59 | .buildpath 60 | 61 | # sbteclipse plugin 62 | .target 63 | 64 | # TeXlipse plugin 65 | .texlipse 66 | 67 | 68 | ### WebStorm ### 69 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm 70 | 71 | ## Directory-based project format 72 | .idea/ 73 | /*.iml 74 | # if you remove the above rule, at least ignore user-specific stuff: 75 | # .idea/workspace.xml 76 | # .idea/tasks.xml 77 | # .idea/dictionaries 78 | # and these sensitive or high-churn files: 79 | # .idea/dataSources.ids 80 | # .idea/dataSources.xml 81 | # .idea/sqlDataSources.xml 82 | # .idea/dynamic.xml 83 | # and, if using gradle:: 84 | # .idea/gradle.xml 85 | # .idea/libraries 86 | 87 | ## File-based project format 88 | *.ipr 89 | *.iws 90 | 91 | ## Additional for IntelliJ 92 | out/ 93 | 94 | # generated by mpeltonen/sbt-idea plugin 95 | .idea_modules/ 96 | 97 | # generated by JIRA plugin 98 | atlassian-ide-plugin.xml 99 | 100 | # generated by Crashlytics plugin (for Android Studio and Intellij) 101 | com_crashlytics_export_strings.xml 102 | 103 | 104 | ### Windows ### 105 | # Windows image file caches 106 | Thumbs.db 107 | ehthumbs.db 108 | 109 | # Folder config file 110 | Desktop.ini 111 | 112 | # Recycle Bin used on file shares 113 | $RECYCLE.BIN/ 114 | 115 | # Windows Installer files 116 | *.cab 117 | *.msi 118 | *.msm 119 | *.msp 120 | 121 | # Windows shortcuts 122 | *.lnk 123 | 124 | 125 | ### Linux ### 126 | *~ 127 | 128 | # KDE directory preferences 129 | .directory 130 | 131 | 132 | ### SVN ### 133 | .svn/ 134 | 135 | 136 | ### Gradle ### 137 | .gradle 138 | build/ 139 | 140 | # Ignore Gradle GUI config 141 | gradle-app.setting 142 | 143 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "6" 4 | before_script: 5 | - npm install -g mocha 6 | script: mocha -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, and 10 | distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by the copyright 13 | owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all other entities 16 | that control, are controlled by, or are under common control with that entity. 17 | For the purposes of this definition, "control" means (i) the power, direct or 18 | indirect, to cause the direction or management of such entity, whether by 19 | contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the 20 | outstanding shares, or (iii) beneficial ownership of such entity. 21 | 22 | "You" (or "Your") shall mean an individual or Legal Entity exercising 23 | permissions granted by this License. 24 | 25 | "Source" form shall mean the preferred form for making modifications, including 26 | but not limited to software source code, documentation source, and configuration 27 | files. 28 | 29 | "Object" form shall mean any form resulting from mechanical transformation or 30 | translation of a Source form, including but not limited to compiled object code, 31 | generated documentation, and conversions to other media types. 32 | 33 | "Work" shall mean the work of authorship, whether in Source or Object form, made 34 | available under the License, as indicated by a copyright notice that is included 35 | in or attached to the work (an example is provided in the Appendix below). 36 | 37 | "Derivative Works" shall mean any work, whether in Source or Object form, that 38 | is based on (or derived from) the Work and for which the editorial revisions, 39 | annotations, elaborations, or other modifications represent, as a whole, an 40 | original work of authorship. For the purposes of this License, Derivative Works 41 | shall not include works that remain separable from, or merely link (or bind by 42 | name) to the interfaces of, the Work and Derivative Works thereof. 43 | 44 | "Contribution" shall mean any work of authorship, including the original version 45 | of the Work and any modifications or additions to that Work or Derivative Works 46 | thereof, that is intentionally submitted to Licensor for inclusion in the Work 47 | by the copyright owner or by an individual or Legal Entity authorized to submit 48 | on behalf of the copyright owner. For the purposes of this definition, 49 | "submitted" means any form of electronic, verbal, or written communication sent 50 | to the Licensor or its representatives, including but not limited to 51 | communication on electronic mailing lists, source code control systems, and 52 | issue tracking systems that are managed by, or on behalf of, the Licensor for 53 | the purpose of discussing and improving the Work, but excluding communication 54 | that is conspicuously marked or otherwise designated in writing by the copyright 55 | owner as "Not a Contribution." 56 | 57 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf 58 | of whom a Contribution has been received by Licensor and subsequently 59 | incorporated within the Work. 60 | 61 | 2. Grant of Copyright License. 62 | 63 | Subject to the terms and conditions of this License, each Contributor hereby 64 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 65 | irrevocable copyright license to reproduce, prepare Derivative Works of, 66 | publicly display, publicly perform, sublicense, and distribute the Work and such 67 | Derivative Works in Source or Object form. 68 | 69 | 3. Grant of Patent License. 70 | 71 | Subject to the terms and conditions of this License, each Contributor hereby 72 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 73 | irrevocable (except as stated in this section) patent license to make, have 74 | made, use, offer to sell, sell, import, and otherwise transfer the Work, where 75 | such license applies only to those patent claims licensable by such Contributor 76 | that are necessarily infringed by their Contribution(s) alone or by combination 77 | of their Contribution(s) with the Work to which such Contribution(s) was 78 | submitted. If You institute patent litigation against any entity (including a 79 | cross-claim or counterclaim in a lawsuit) alleging that the Work or a 80 | Contribution incorporated within the Work constitutes direct or contributory 81 | patent infringement, then any patent licenses granted to You under this License 82 | for that Work shall terminate as of the date such litigation is filed. 83 | 84 | 4. Redistribution. 85 | 86 | You may reproduce and distribute copies of the Work or Derivative Works thereof 87 | in any medium, with or without modifications, and in Source or Object form, 88 | provided that You meet the following conditions: 89 | 90 | You must give any other recipients of the Work or Derivative Works a copy of 91 | this License; and 92 | You must cause any modified files to carry prominent notices stating that You 93 | changed the files; and 94 | You must retain, in the Source form of any Derivative Works that You distribute, 95 | all copyright, patent, trademark, and attribution notices from the Source form 96 | of the Work, excluding those notices that do not pertain to any part of the 97 | Derivative Works; and 98 | If the Work includes a "NOTICE" text file as part of its distribution, then any 99 | Derivative Works that You distribute must include a readable copy of the 100 | attribution notices contained within such NOTICE file, excluding those notices 101 | that do not pertain to any part of the Derivative Works, in at least one of the 102 | following places: within a NOTICE text file distributed as part of the 103 | Derivative Works; within the Source form or documentation, if provided along 104 | with the Derivative Works; or, within a display generated by the Derivative 105 | Works, if and wherever such third-party notices normally appear. The contents of 106 | the NOTICE file are for informational purposes only and do not modify the 107 | License. You may add Your own attribution notices within Derivative Works that 108 | You distribute, alongside or as an addendum to the NOTICE text from the Work, 109 | provided that such additional attribution notices cannot be construed as 110 | modifying the License. 111 | You may add Your own copyright statement to Your modifications and may provide 112 | additional or different license terms and conditions for use, reproduction, or 113 | distribution of Your modifications, or for any such Derivative Works as a whole, 114 | provided Your use, reproduction, and distribution of the Work otherwise complies 115 | with the conditions stated in this License. 116 | 117 | 5. Submission of Contributions. 118 | 119 | Unless You explicitly state otherwise, any Contribution intentionally submitted 120 | for inclusion in the Work by You to the Licensor shall be under the terms and 121 | conditions of this License, without any additional terms or conditions. 122 | Notwithstanding the above, nothing herein shall supersede or modify the terms of 123 | any separate license agreement you may have executed with Licensor regarding 124 | such Contributions. 125 | 126 | 6. Trademarks. 127 | 128 | This License does not grant permission to use the trade names, trademarks, 129 | service marks, or product names of the Licensor, except as required for 130 | reasonable and customary use in describing the origin of the Work and 131 | reproducing the content of the NOTICE file. 132 | 133 | 7. Disclaimer of Warranty. 134 | 135 | Unless required by applicable law or agreed to in writing, Licensor provides the 136 | Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, 137 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, 138 | including, without limitation, any warranties or conditions of TITLE, 139 | NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are 140 | solely responsible for determining the appropriateness of using or 141 | redistributing the Work and assume any risks associated with Your exercise of 142 | permissions under this License. 143 | 144 | 8. Limitation of Liability. 145 | 146 | In no event and under no legal theory, whether in tort (including negligence), 147 | contract, or otherwise, unless required by applicable law (such as deliberate 148 | and grossly negligent acts) or agreed to in writing, shall any Contributor be 149 | liable to You for damages, including any direct, indirect, special, incidental, 150 | or consequential damages of any character arising as a result of this License or 151 | out of the use or inability to use the Work (including but not limited to 152 | damages for loss of goodwill, work stoppage, computer failure or malfunction, or 153 | any and all other commercial damages or losses), even if such Contributor has 154 | been advised of the possibility of such damages. 155 | 156 | 9. Accepting Warranty or Additional Liability. 157 | 158 | While redistributing the Work or Derivative Works thereof, You may choose to 159 | offer, and charge a fee for, acceptance of support, warranty, indemnity, or 160 | other liability obligations and/or rights consistent with this License. However, 161 | in accepting such obligations, You may act only on Your own behalf and on Your 162 | sole responsibility, not on behalf of any other Contributor, and only if You 163 | agree to indemnify, defend, and hold each Contributor harmless for any liability 164 | incurred by, or claims asserted against, such Contributor by reason of your 165 | accepting any such warranty or additional liability. 166 | 167 | END OF TERMS AND CONDITIONS 168 | 169 | APPENDIX: How to apply the Apache License to your work 170 | 171 | To apply the Apache License to your work, attach the following boilerplate 172 | notice, with the fields enclosed by brackets "[]" replaced with your own 173 | identifying information. (Don't include the brackets!) The text should be 174 | enclosed in the appropriate comment syntax for the file format. We also 175 | recommend that a file or class name and description of purpose be included on 176 | the same "printed page" as the copyright notice for easier identification within 177 | third-party archives. 178 | 179 | Copyright [yyyy] [name of copyright owner] 180 | 181 | Licensed under the Apache License, Version 2.0 (the "License"); 182 | you may not use this file except in compliance with the License. 183 | You may obtain a copy of the License at 184 | 185 | http://www.apache.org/licenses/LICENSE-2.0 186 | 187 | Unless required by applicable law or agreed to in writing, software 188 | distributed under the License is distributed on an "AS IS" BASIS, 189 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 190 | See the License for the specific language governing permissions and 191 | limitations under the License. 192 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gitm 2 | [![NPM Version][npm-image]][npm-url] 3 | [![NPM Downloads][downloads-image]][downloads-url] 4 | [![Build Status][travis-image]][travis-url] 5 | [![Test Coverage][coveralls-image]][coveralls-url] 6 | [![Gratipay][gratipay-image]][gratipay-url] 7 | 8 | ## Introduction 9 | A simple but useful tool to manage multiple git repositories. 10 | Be similar to repo, git submodule. 11 | 12 | ## System requirements 13 | Node.js v0.12.0+ 14 | 15 | ## Installation 16 | ```bash 17 | npm install @snowdream/gitm -g 18 | ``` 19 | 20 | ## ChangeLog 21 | ### 0.3.6 22 | 1. use "git pull --rebase" instead of "git pull" as the default option. 23 | 24 | 25 | ## Scene 26 | ### Scene One 27 | ![Scene One](https://raw.githubusercontent.com/snowdream/gitm/master/docs/img/workflow0.png) 28 | 29 | If you have a project A on the left. 30 | Now, you want to modularize it to the project A on the right. 31 | 32 | For the project A on the left, It is a git repository. 33 | For the project A on the right, project A is not a git repository, project Main and project Module ** are all git repositories. 34 | 35 | Browse the example at [repositories](examples/repositories) 36 | 37 | ### Scene Two 38 | ![Scene One](https://raw.githubusercontent.com/snowdream/gitm/master/docs/img/workflow1.png) 39 | 40 | If you have a project B on the left. 41 | Now, you want to modularize it to the project B on the right. 42 | 43 | For the project B on the left, It is a git repository. 44 | For the project B on the right, project B, project Main and project Module ** are all git repositories. 45 | 46 | Browse the example at [repository](examples/repository) 47 | 48 | ## Config 49 | Usually, gitm needs two config files. **repo.gitm** and **branch.gitm** 50 | 51 | ### **repo.gitm** 52 | ![repo.gitm](https://raw.githubusercontent.com/snowdream/gitm/master/docs/img/repo.png) 53 | 54 | 1. **repository**, required,represent the outermost project is a git repository. 55 | 1. **url**, required,represent url for the git repository. 56 | 1. **branches**, optional,represent local branches for the git repository. the first branch will be the default branch. 57 | 1. **name**, optional,represent local name for the git repository. if this is not provided, then try to guess it from the url. 58 | 1. **repositories**, optional,represent the git repository has sub git repositories. 59 | 60 | ### **branch.gitm** 61 | ![branch.gitm](https://raw.githubusercontent.com/snowdream/gitm/master/docs/img/branch.png) 62 | 63 | 1. **new/develop/master**, required,represent the group name of the branches. 64 | 1. **gitmA**, required,represent local name for the git repository. 65 | 1. **new:develop**, **new** is required,**develop** is optional,**new** represent local branch for the git repository. **develop** represent the local branch **new** may be created from the branch **develop** or the branch **origin/develop**. 66 | 67 | ## Usage 68 | **Warning: All the commands as follows should be executed in the root path.** 69 | **For Scene One, the root path is Project A.** 70 | **For Scene Two, the root path is Project B.** 71 | 72 | ### gitm init 73 | * If **repo.gitm** does not exist in the root path, try to create it. 74 | * If **branch.gitm** does not exist in the root path, try to create it. 75 | * If **.gitignore** does not exist in every git repository, try to create it. If sub git repository exist, try to add them name into the file .gitignore. 76 | 77 | ### gitm clone 78 | ```bash 79 | gitm clone 80 | ``` 81 | Read the file **repo.gitm** in the current directory, and clone every git repository. 82 | If the property **branches** exist, every branch will be checkout. The fisrt branch will be the default branch. 83 | 84 | ```bash 85 | gitm clone https://raw.githubusercontent.com/snowdream/gitm/master/examples/repository/repo.gitm 86 | ``` 87 | Read the file **repo.gitm** from the url, other operation is the same as the command `gitm clone` 88 | 89 | ### gitm checkout [name] 90 | 91 | Check the file **branch.gitm**,if the **name** does not exist in the names of group, then `git checkout [name]` will be executed in every git repository.else deal it with the following rules. 92 | ![gitm checkout](https://raw.githubusercontent.com/snowdream/gitm/master/docs/img/checkout.png) 93 | ```bash 94 | gitm checkout new 95 | ``` 96 | 97 | `git checkout new` will be executed in every git repository. such as **gitmA**. 98 | 99 | 1. if the branch **new** exist, excute `git checkout new` 100 | 1. if the branch **origin/new** exist, excute `git checkout –b new origin/new` 101 | 1. if the branch **develop** exist, excute `git checkout –b new develop` 102 | 1. if the branch **origin/develop** exist, excute `git checkout –b new origin/develop` 103 | 1. if all the branch up does not exist, excute `git checkout –b new` 104 | 105 | All the steps will be taken in order. once a step has been taken, then the command is finished, and the rest steps will not be taken. 106 | 107 | ### gitm fetch 108 | ```bash 109 | gitm fetch 110 | ``` 111 | Check the file **repo.gitm**,execute the following command in every git repository. 112 | ```bash 113 | git fetch --all --progress -v 114 | ``` 115 | 116 | If `gitm fetch` has any other parameters, such as `gitm fetch origin master` 117 | Then `git fetch origin master` will be executed in every git repository. 118 | 119 | ### gitm pull 120 | ```bash 121 | gitm pull 122 | ``` 123 | Check the file **repo.gitm**,execute the following command in every git repository. 124 | ```bash 125 | git pull origin branch --progress -v 126 | ``` 127 | **branch** is the current branch of the git repository. 128 | 129 | If `gitm pull` has any other parameters, such as `gitm pull origin master` 130 | Then `git pull origin master` will be executed in every git repository. 131 | 132 | ### gitm push 133 | ```bash 134 | gitm push 135 | ``` 136 | Check the file **repo.gitm**,execute the following command in every git repository. 137 | ```bash 138 | git push origin branch:branch --progress -v 139 | ``` 140 | **branch** is the current branch of the git repository. 141 | 142 | If `gitm push` has any other parameters, such as `gitm push origin master` 143 | Then `git push origin master` will be executed in every git repository. 144 | 145 | 146 | ### gitm help [cmd] 147 | Such as `gitm help clone`. It will execute the following command only once. 148 | ```bash 149 | git help clone 150 | ``` 151 | 152 | ### gitm -h / gitm --help 153 | show helps for gitm 154 | 155 | ### gitm -V / gitm --version 156 | show version for gitm 157 | 158 | ### Other git commands which have not been list here, such as `gitm tag v0.1` 159 | Use git in place of gitm, then execute the command in every git repository. 160 | 161 | 162 | ## License 163 | ``` 164 | Copyright (C) 2015 Snowdream Mobile 165 | 166 | Licensed under the Apache License, Version 2.0 (the "License"); 167 | you may not use this file except in compliance with the License. 168 | You may obtain a copy of the License at 169 | 170 | http://www.apache.org/licenses/LICENSE-2.0 171 | 172 | Unless required by applicable law or agreed to in writing, software 173 | distributed under the License is distributed on an "AS IS" BASIS, 174 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 175 | See the License for the specific language governing permissions and 176 | limitations under the License. 177 | ``` 178 | 179 | [npm-image]: https://img.shields.io/npm/v/gitm.svg 180 | [npm-url]: https://npmjs.org/package/gitm 181 | [travis-image]: https://img.shields.io/travis/snowdream/node-gitm/master.svg 182 | [travis-url]: https://travis-ci.org/snowdream/node-gitm 183 | [coveralls-image]: https://img.shields.io/coveralls/snowdream/node-gitm/master.svg 184 | [coveralls-url]: https://coveralls.io/r/snowdream/node-gitm?branch=master 185 | [downloads-image]: https://img.shields.io/npm/dm/gitm.svg 186 | [downloads-url]: https://npmjs.org/package/gitm 187 | [gratipay-image]: https://img.shields.io/gratipay/snowdream.svg 188 | [gratipay-url]: https://www.gratipay.com/snowdream/ 189 | 190 | -------------------------------------------------------------------------------- /bin/gitm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var pjson = require('../package.json'); 4 | var program = require('commander'); 5 | //var asciimo = require('asciimo/lib/asciimo').Figlet; 6 | //var colors = require('asciimo/lib/colors'); // add colors for fun 7 | var gitm_recursion = require('./gitm-recursion'); 8 | var gitm_execute = require('./gitm-execute'); 9 | var gitm_util = require('./gitm-util'); 10 | 11 | 12 | main(); 13 | 14 | /** 15 | * main 16 | */ 17 | function main() { 18 | switch (gitm_util.getType()) { 19 | case 0: 20 | git_main(false); 21 | break; 22 | case 1: 23 | git_main(true); 24 | break; 25 | case 2: 26 | gitm_main(); 27 | break; 28 | default: 29 | break; 30 | } 31 | } 32 | 33 | /** 34 | * gitm main 35 | */ 36 | function gitm_main() { 37 | //// pick the font file 38 | //var font = 'larry3d'; 39 | //// set text we are writeing to turn into leet ascii art 40 | //var text = "SNOWDREAM"; 41 | //asciimo.write(text, font, function (art) { 42 | //var version = "gitm version " + pjson.version + "\n\n" + art.green; 43 | var version = pjson.version; 44 | 45 | program 46 | .version(version,"-v, --version") 47 | .command('init', 'init gitm') 48 | .command('clone [url]', 'clone all git repositories.') 49 | .command('checkout [group]', 'checkout all git repositories.') 50 | .command('fetch', 'fetch all git repositories.') 51 | .command('pull', 'pull current branch for all git repositories.') 52 | .command('push', 'push current branch for all git repositories.') 53 | .parse(process.argv); 54 | //}); 55 | } 56 | 57 | /** 58 | * git main 59 | * 60 | * @param isrecursive 61 | */ 62 | function git_main(isrecursive) { 63 | var command = gitm_util.gitm2git(); 64 | if (!command) return; 65 | 66 | if (isrecursive) { 67 | gitm_recursion.git_recursion(command); 68 | } else { 69 | gitm_execute.execSync(command); 70 | } 71 | } -------------------------------------------------------------------------------- /bin/gitm-checkout: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var fs = require('fs'); 4 | var request = require('sync-request'); 5 | var program = require('commander'); 6 | var gitm_execute = require('./gitm-execute'); 7 | var os = require('os'); 8 | var gitm_util = require('./gitm-util'); 9 | const assert = require('assert'); 10 | 11 | program 12 | .parse(process.argv); 13 | 14 | var args = program.args; 15 | 16 | var groups; 17 | if(args.length == 1) { 18 | groups = args[0]; 19 | } else { 20 | console.error('invalid parameters.'); 21 | process.exit(1); 22 | } 23 | 24 | var repo; 25 | var branches; 26 | try { 27 | repo = JSON.parse(fs.readFileSync('./repo.gitm')); 28 | }catch(error){ 29 | console.warn(error); 30 | process.exit(1); 31 | } 32 | 33 | try { 34 | branches = JSON.parse(fs.readFileSync('./branch.gitm')); 35 | }catch(error){ 36 | console.warn(error); 37 | } 38 | 39 | if (!repo) { 40 | console.info("The file repo.gitm does not exist."); 41 | return; 42 | } 43 | 44 | if (!repo.repository && !repo.repositories) { 45 | console.info("The file repo.gitm is not valid."); 46 | return; 47 | } 48 | 49 | if (repo.repository) { 50 | if(!repo.repository.name){ 51 | repo.repository.name = getRepoName( repo.repository.url); 52 | } 53 | console.log(os.EOL); 54 | console.log('$ cd ' + repo.repository.name); 55 | git_checkout(repo.repository); 56 | } else if (repo.repositories) { 57 | for (var i = 0, len = repo.repositories.length; i < len; i++) { 58 | if(!repo.repository[i].name){ 59 | repo.repository[i].name = getRepoName( repo.repository[i].url); 60 | } 61 | console.log(os.EOL); 62 | console.log('$ cd ' + repo.repositories[i].name); 63 | git_checkout(repo.repositories[i]); 64 | } 65 | } 66 | 67 | function git_checkout(repo) { 68 | if (!repo) { 69 | return; 70 | } 71 | 72 | if (!repo.name) { 73 | repo.name = getRepoName(repo.url); 74 | } 75 | 76 | var branch; 77 | var upBranch; 78 | 79 | if(!branches || !branches[groups] || !branches[groups][repo.name] ){ 80 | branch = groups; 81 | }else{ 82 | branch = branches[groups][repo.name]; 83 | var array = branch.split(":"); 84 | if(array.length > 0){ 85 | branch = array[0]; 86 | } 87 | 88 | if(array.length > 1){ 89 | upBranch = array[1]; 90 | } 91 | } 92 | 93 | 94 | if(branch){ 95 | if(gitm_util.isLocalBranchExist(branch)){ 96 | gitm_execute.execSync("git checkout "+ branch); 97 | }else{ 98 | gitm_execute.execSync("git fetch --all --progress -v"); 99 | 100 | if(gitm_util.isRemoteBranchExist("origin/"+branch)){ 101 | gitm_execute.execSync("git checkout -b " + branch+" origin/" + branch); 102 | }else if(gitm_util.isLocalBranchExist(upBranch)){ 103 | gitm_execute.execSync("git checkout -b " + branch+" " + upBranch); 104 | }else if(gitm_util.isRemoteBranchExist("origin/"+ upBranch)){ 105 | gitm_execute.execSync("git checkout -b " + branch+" origin/" + upBranch); 106 | }else{ 107 | gitm_execute.execSync("git checkout -b " + branch); 108 | } 109 | } 110 | } 111 | 112 | if (repo.repositories) { 113 | for (var i = 0, len = repo.repositories.length; i < len; i++) { 114 | if(!repo.repositories[i].name){ 115 | repo.repositories[i].name = getRepoName(repo.repositories[i].url); 116 | } 117 | 118 | 119 | var current_dir = process.cwd(); 120 | assert(current_dir); 121 | 122 | gitm_util.chdirRepo(repo.repositories[i]); 123 | 124 | 125 | git_checkout(repo.repositories[i]); 126 | 127 | try { 128 | process.chdir(current_dir); 129 | console.log('$ cd '+ current_dir); 130 | }catch (err) { 131 | console.log('chdir: ' + err); 132 | } 133 | } 134 | 135 | } 136 | } 137 | 138 | /** 139 | * get repo name from url 140 | * 141 | * @param url 142 | * @returns {string} 143 | */ 144 | function getRepoName(url) { 145 | if (!url) { 146 | return; 147 | } 148 | 149 | var sep = '/'; 150 | if (!url.match(sep) && !url.match('\\\\')) { 151 | sep = '/'; 152 | } 153 | 154 | var index = url.lastIndexOf(sep); 155 | if (index == url.length - 1) { 156 | url = url.substring(0, index); 157 | index = url.lastIndexOf(sep); 158 | } 159 | 160 | var name = url.substring(index + 1); 161 | name = name.replace(/\.git/g, ""); 162 | 163 | return name; 164 | } 165 | -------------------------------------------------------------------------------- /bin/gitm-clone: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var fs = require('fs'); 4 | var request = require('sync-request'); 5 | var program = require('commander'); 6 | var gitm_execute = require('./gitm-execute'); 7 | var os = require('os'); 8 | var gitm_util = require('./gitm-util'); 9 | const assert = require('assert'); 10 | 11 | program 12 | .parse(process.argv); 13 | 14 | var args = program.args; 15 | 16 | 17 | var repo; 18 | if (!args.length) { 19 | try{ 20 | repo = JSON.parse(fs.readFileSync('./repo.gitm')); 21 | }catch(error){ 22 | console.error(error); 23 | process.exit(1); 24 | } 25 | } else if (args.length == 1) { 26 | try{ 27 | var res = request('GET', args[0]); 28 | repo = JSON.parse(res.getBody()); 29 | }catch(error){ 30 | console.error(error); 31 | process.exit(1); 32 | } 33 | } else { 34 | console.error('invalid parameters.'); 35 | process.exit(1); 36 | } 37 | 38 | if (!repo) { 39 | console.info("The file repo.gitm does not exist."); 40 | return; 41 | } 42 | 43 | if (!repo.repository && !repo.repositories) { 44 | console.info("The file repo.gitm is not valid."); 45 | return; 46 | } 47 | 48 | if (repo.repository) { 49 | clone(repo.repository, __dirname); 50 | } else if (repo.repositories) { 51 | for (var i = 0, len = repo.repositories.length; i < len; i++) { 52 | clone(repo.repositories[i], __dirname); 53 | } 54 | } 55 | 56 | function clone(repo, dir) { 57 | if (!repo) { 58 | return; 59 | } 60 | 61 | if (!repo.name) { 62 | repo.name = getRepoName(repo.url); 63 | } 64 | 65 | var directory = gitm_util.getdirFromRepo(repo); 66 | gitm_execute.execSync("git clone " + repo.url + " " + directory + " --progress -v"); 67 | 68 | if(repo.branches || repo.repositories){ 69 | var current_dir = process.cwd(); 70 | assert(current_dir); 71 | 72 | gitm_util.chdirRepo(repo); 73 | 74 | //checkout branches 75 | if (repo.branches) { 76 | for (var len = repo.branches.length, i = len - 1; i >= 0; i--) { 77 | var branch = repo.branches[i]; 78 | if (branch == "master") { 79 | if (i != 0) { 80 | continue; 81 | } 82 | gitm_execute.execSync("git checkout " + branch); 83 | } 84 | gitm_execute.execSync("git checkout -b " + branch + " origin/" + branch); 85 | } 86 | } 87 | 88 | //clone sub project 89 | if (repo.repositories) { 90 | for (var i = 0, len = repo.repositories.length; i < len; i++) { 91 | clone(repo.repositories[i]); 92 | } 93 | } 94 | 95 | try { 96 | process.chdir(current_dir); 97 | console.log('$ cd '+ current_dir); 98 | }catch (err) { 99 | console.log('chdir: ' + err); 100 | } 101 | } 102 | } 103 | 104 | function getRepoName(url) { 105 | if (!url) { 106 | return; 107 | } 108 | 109 | var sep = '/'; 110 | if (!url.match(sep) && !url.match('\\\\')) { 111 | sep = '/'; 112 | } 113 | 114 | var index = url.lastIndexOf(sep); 115 | if (index == url.length - 1) { 116 | url = url.substring(0, index); 117 | index = url.lastIndexOf(sep); 118 | } 119 | 120 | var name = url.substring(index + 1); 121 | name= name.replace(/\.git/g, ""); 122 | 123 | return name; 124 | } 125 | 126 | 127 | function isArray(obj) { 128 | return Object.prototype.toString.call(obj) == '[object Array]'; 129 | } 130 | 131 | -------------------------------------------------------------------------------- /bin/gitm-execute: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | 4 | exports.execSync = function (cmd) { 5 | var cp = require('child_process'); 6 | var execSync = cp.execSync; 7 | 8 | if (!cmd) { 9 | console.info("command should not be null or empty.") 10 | return; 11 | } 12 | 13 | var command = cmd; 14 | if(cmd instanceof Function){ 15 | command = cmd(); 16 | } 17 | 18 | console.info("$ " + command); 19 | 20 | var out = execSync(command); 21 | if(out){ 22 | console.info(out.toString("UTF-8")); 23 | return out.toString("UTF-8").replace(/[\r\n]+/g,'');; 24 | } 25 | 26 | }; 27 | 28 | exports.exec = function (cmd) { 29 | var cp = require('child_process'); 30 | var exec = cp.exec; 31 | 32 | if (!cmd) { 33 | console.info("command should not be null or empty.") 34 | return; 35 | } 36 | 37 | var command = cmd; 38 | if(cmd instanceof Function){ 39 | command = cmd(); 40 | } 41 | 42 | console.info("$ " + command); 43 | 44 | 45 | var child = exec(command); 46 | child.stdout.on('data', function (data) { 47 | console.info(data); 48 | }); 49 | child.stderr.on('data', function (data) { 50 | console.info(data); 51 | }); 52 | child.on('error', function (data) { 53 | console.info(data); 54 | }); 55 | }; 56 | -------------------------------------------------------------------------------- /bin/gitm-fetch: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var gitm_util = require('./gitm-util'); 4 | var gitm_recursion = require('./gitm-recursion'); 5 | 6 | 7 | gitm_recursion.git_recursion(command); 8 | 9 | function command() { 10 | var command = "git fetch " + gitm_util.gitm2argv(); 11 | 12 | if (process.argv.length <= 2) { 13 | command = ("git fetch --all --progress -v"); 14 | } 15 | 16 | return command; 17 | } -------------------------------------------------------------------------------- /bin/gitm-init: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | var fs = require('fs'); 3 | var os = require('os'); 4 | var path = require('path'); 5 | var gitm_util = require('./gitm-util'); 6 | var ignore = require('ignore'); 7 | 8 | init(); 9 | 10 | 11 | /** 12 | * gitm init 13 | */ 14 | function init() { 15 | initRepo(); 16 | initBranch(); 17 | initIgnore(); 18 | } 19 | 20 | /** 21 | * for json.stringify 22 | * see: http://stackoverflow.com/a/4910689 23 | * @param key 24 | * @param value 25 | * @returns {*} 26 | */ 27 | function replacer(key, value) { 28 | if (!value) return undefined; 29 | if (value instanceof Array && value.length == 0) return undefined; 30 | else return value; 31 | } 32 | 33 | /** 34 | * check whether the repo.gitm exist. 35 | * if not ,try to create it. 36 | */ 37 | function initRepo() { 38 | if (fs.existsSync('./repo.gitm')) { 39 | console.info("The repo.gitm does exist."); 40 | return; 41 | } 42 | 43 | var repo= {}; 44 | walk = function (isRoot, dir, parent) { 45 | var files = fs.readdirSync(dir); 46 | if (files.contains('.git')) { 47 | var item; 48 | var sub; 49 | 50 | if (isRoot) { 51 | if (!repo) { 52 | repo = {}; 53 | } 54 | 55 | if (!files.contains('.git')) { 56 | item = sub = repo.repositories = []; 57 | } else { 58 | item = repo.repository = {}; 59 | sub = item.repositories = []; 60 | } 61 | } else { 62 | item = {}; 63 | sub = item.repositories = []; 64 | } 65 | 66 | if (!isRoot) { 67 | try { 68 | process.chdir(dir); 69 | console.log(os.EOL); 70 | console.log('$ cd ' + dir); 71 | } 72 | catch (err) { 73 | console.log('chdir: ' + err); 74 | } 75 | } 76 | 77 | if (!(item instanceof Array)) { 78 | item.url = gitm_util.currentRemoteUrl(); 79 | } 80 | 81 | if (parent) { 82 | if (parent instanceof Array) { 83 | parent.push(item); 84 | } 85 | } 86 | 87 | if (!isRoot) { 88 | process.chdir(".."); 89 | console.log('$ cd ..'); 90 | } 91 | }else{ 92 | if(!isRoot){ 93 | return; 94 | }else{ 95 | sub = repo.repositories = []; 96 | } 97 | } 98 | 99 | files.forEach(function (file) { 100 | var tmpPath = dir + '/' + file, 101 | stats = fs.statSync(tmpPath); 102 | 103 | if (stats.isDirectory()) { 104 | walk(false, tmpPath, sub); 105 | } 106 | }); 107 | }; 108 | 109 | console.log('$ cd ' + process.cwd()); 110 | walk(true, process.cwd(), repo); 111 | 112 | if (!repo) { 113 | return; 114 | } 115 | 116 | var outputFilename = './repo.gitm'; 117 | 118 | fs.writeFile(outputFilename, JSON.stringify(repo, replacer, 4), function (err) { 119 | if (err) throw err; 120 | console.info("The repo.gitm has been created.."); 121 | }); 122 | } 123 | 124 | 125 | /** 126 | * check whether the branch.gitm exist. 127 | * if not ,try to create it. 128 | */ 129 | function initBranch() { 130 | if (fs.existsSync('./branch.gitm')) { 131 | console.info("The branch.gitm does exist."); 132 | return; 133 | } 134 | 135 | var branchInfos = []; 136 | var branchInfo = {}; 137 | var default_group_name = 'current'; 138 | walk = function (isRoot, dir, branchInfo) { 139 | var files = fs.readdirSync(dir); 140 | if (files.contains('.git')) { 141 | if (!branchInfo) { 142 | branchInfo = {}; 143 | } 144 | 145 | if (!branchInfo[default_group_name]) { 146 | branchInfo[default_group_name] = {}; 147 | } 148 | 149 | if (!isRoot) { 150 | try { 151 | process.chdir(dir); 152 | console.log(os.EOL); 153 | console.log('$ cd ' + dir); 154 | } 155 | catch (err) { 156 | console.log('chdir: ' + err); 157 | } 158 | } 159 | 160 | branchInfo[default_group_name][path.basename(process.cwd())] = gitm_util.currentBranch(); 161 | 162 | if (!isRoot) { 163 | process.chdir(".."); 164 | console.log('$ cd ..'); 165 | } 166 | }else{ 167 | if(!isRoot){ 168 | return; 169 | } 170 | } 171 | 172 | files.forEach(function (item) { 173 | var tmpPath = dir + '/' + item, 174 | stats = fs.statSync(tmpPath); 175 | 176 | if (stats.isDirectory()) { 177 | walk(false, tmpPath, branchInfo); 178 | } 179 | }); 180 | }; 181 | 182 | console.log('$ cd ' + process.cwd()); 183 | walk(true, process.cwd(), branchInfo); 184 | branchInfos.push(branchInfo); 185 | 186 | if (!branchInfo) { 187 | return; 188 | } 189 | 190 | var outputFilename = './branch.gitm'; 191 | 192 | fs.writeFile(outputFilename, JSON.stringify(branchInfo, replacer, 4), function (err) { 193 | if (err) throw err; 194 | console.info("The branch.gitm has been created.."); 195 | }); 196 | } 197 | 198 | /** 199 | * check whether the .gitignore exist. 200 | * if not or not valid,try to create it. 201 | */ 202 | function initIgnore() { 203 | walk = function (isRoot, dir) { 204 | var files = fs.readdirSync(dir); 205 | if (!files.contains('.git')) { 206 | return; 207 | } 208 | 209 | if (!isRoot) { 210 | try { 211 | process.chdir(dir); 212 | //console.log(os.EOL); 213 | //console.log('$ cd ' + dir); 214 | } 215 | catch (err) { 216 | console.log('chdir: ' + err); 217 | } 218 | } 219 | var patterns = []; 220 | 221 | files.forEach(function (file) { 222 | var tmpPath = dir + '/' + file; 223 | var stats = fs.statSync(tmpPath); 224 | 225 | if (stats.isDirectory()) { 226 | var tmpFiles = fs.readdirSync(tmpPath); 227 | 228 | if (tmpFiles && tmpFiles.contains('.git')) { 229 | patterns.push(file); 230 | } 231 | } 232 | }); 233 | var ig = ignore().addIgnoreFile('.gitignore'); 234 | patterns = ig.filter(patterns); 235 | 236 | patterns.forEach(function (pattern) { 237 | var msg = '' + pattern + os.EOL; 238 | fs.appendFileSync('.gitignore', msg) 239 | }); 240 | 241 | if (!isRoot) { 242 | process.chdir(".."); 243 | //console.log('$ cd ..'); 244 | } 245 | 246 | files.forEach(function (file) { 247 | var tmpPath = dir + '/' + file, 248 | stats = fs.statSync(tmpPath); 249 | 250 | if (stats.isDirectory()) { 251 | walk(false, tmpPath); 252 | } 253 | }); 254 | }; 255 | 256 | //console.log('$ cd ' + process.cwd()); 257 | walk(true, process.cwd()); 258 | console.log('The files which be named after .gitignore have been done. '); 259 | } 260 | -------------------------------------------------------------------------------- /bin/gitm-pull: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | var gitm_util = require('./gitm-util'); 3 | var gitm_recursion = require('./gitm-recursion'); 4 | 5 | 6 | gitm_recursion.git_recursion(command); 7 | 8 | function command() { 9 | var command = "git pull " + gitm_util.gitm2argv(); 10 | 11 | if(process.argv.length <= 2){ 12 | var branch = gitm_util.currentBranch(); 13 | if (branch) { 14 | command = ("git pull origin " + branch + " --rebase --progress -v"); 15 | } else { 16 | command = ("git pull origin --rebase--progress -v"); 17 | } 18 | } 19 | 20 | return command; 21 | } -------------------------------------------------------------------------------- /bin/gitm-push: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | var gitm_util = require('./gitm-util'); 3 | var gitm_recursion = require('./gitm-recursion'); 4 | 5 | 6 | gitm_recursion.git_recursion(command); 7 | 8 | function command() { 9 | var command = "git push " + gitm_util.gitm2argv(); 10 | 11 | if (process.argv.length <= 2) { 12 | var branch = gitm_util.currentBranch(); 13 | if (branch) { 14 | command = ("git push origin " + branch + ":" + branch + " --progress -v"); 15 | } else { 16 | command = ("git push origin --progress -v"); 17 | } 18 | } 19 | return command; 20 | } -------------------------------------------------------------------------------- /bin/gitm-recursion: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var fs = require('fs'); 4 | var request = require('sync-request'); 5 | var gitm_execute = require('./gitm-execute'); 6 | var os = require('os'); 7 | var gitm_util = require('./gitm-util'); 8 | const assert = require('assert'); 9 | 10 | var repo; 11 | try{ 12 | repo = JSON.parse(fs.readFileSync('./repo.gitm')); 13 | }catch(error){ 14 | //console.warn(error); 15 | } 16 | 17 | //if (!repo) { 18 | // console.info("The file repo.gitm does not exist."); 19 | // return; 20 | //} 21 | // 22 | //if (!repo.repository && !repo.repositories) { 23 | // console.info("The file repo.gitm is not valid."); 24 | // return; 25 | //} 26 | 27 | exports.git_recursion = function (command) { 28 | if (!repo) { 29 | if (command) { 30 | gitm_execute.execSync(command); 31 | } 32 | return; 33 | } 34 | 35 | if (!command) { 36 | return; 37 | } 38 | 39 | if (repo.repository) { 40 | if(!repo.repository.name){ 41 | repo.repository.name = getRepoName( repo.repository.url); 42 | } 43 | console.log(os.EOL); 44 | console.log('$ cd ' + repo.repository.name); 45 | git_command(repo.repository,command); 46 | } else if (repo.repositories) { 47 | for (var i = 0, len = repo.repositories.length; i < len; i++) { 48 | if(!repo.repository[i].name){ 49 | repo.repository[i].name = getRepoName( repo.repository[i].url); 50 | } 51 | console.log(os.EOL); 52 | console.log('$ cd ' + repo.repositories[i].name); 53 | git_command(repo.repositories[i], command); 54 | } 55 | } 56 | }; 57 | 58 | function git_command(repo,command) { 59 | if (!repo) { 60 | if (command) { 61 | gitm_execute.execSync(command); 62 | } 63 | return; 64 | } 65 | 66 | if (!command) { 67 | return; 68 | } 69 | 70 | if (!repo.name) { 71 | repo.name = getRepoName(repo.url); 72 | } 73 | 74 | gitm_execute.execSync(command); 75 | //var branch = gitm_execute.execSync("git branch"); 76 | //branch = branch.substring() 77 | //console.info('branch: ' + branch); 78 | 79 | 80 | if (repo.repositories) { 81 | for (var i = 0, len = repo.repositories.length; i < len; i++) { 82 | if(!repo.repositories[i].name){ 83 | repo.repositories[i].name = getRepoName(repo.repositories[i].url); 84 | } 85 | 86 | var current_dir = process.cwd(); 87 | assert(current_dir); 88 | 89 | gitm_util.chdirRepo(repo.repositories[i]); 90 | 91 | git_command(repo.repositories[i],command); 92 | 93 | try { 94 | process.chdir(current_dir); 95 | console.log('$ cd '+ current_dir); 96 | }catch (err) { 97 | console.log('chdir: ' + err); 98 | } 99 | } 100 | 101 | } 102 | } 103 | 104 | function getRepoName(url) { 105 | if (!url) { 106 | return; 107 | } 108 | 109 | var sep = '/'; 110 | if (!url.match(sep) && !url.match('\\\\')) { 111 | sep = '/'; 112 | } 113 | 114 | var index = url.lastIndexOf(sep); 115 | if (index == url.length - 1) { 116 | url = url.substring(0, index); 117 | index = url.lastIndexOf(sep); 118 | } 119 | 120 | var name = url.substring(index + 1); 121 | name = name.replace(/\.git/g, ""); 122 | 123 | return name; 124 | } 125 | -------------------------------------------------------------------------------- /bin/gitm-util: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var gitm_execute = require('./gitm-execute'); 4 | var fs = require('fs'); 5 | var os = require('os'); 6 | var path = require('path'); 7 | 8 | /** 9 | * change command from gitm style to git style 10 | * 11 | * @returns {string} command 12 | */ 13 | exports.gitm2git = function () { 14 | var argv = process.argv.slice(2); 15 | if (argv) { 16 | return 'git ' + argv.join(' '); 17 | } 18 | }; 19 | 20 | /** 21 | * get argv except git sub comnmand 22 | * 23 | * @returns {string} command 24 | */ 25 | exports.gitm2argv = function () { 26 | var argv = process.argv.slice(2); 27 | if (argv) { 28 | return argv.join(' '); 29 | } 30 | }; 31 | 32 | /** 33 | * 0 execute with git, but not recursively 34 | * 1 execute with git, recursively 35 | * 2 execute with gitm 36 | * 37 | * @returns {number} type 38 | */ 39 | exports.getType = function () { 40 | var type = 2; 41 | var arg = process.argv.slice(2,3); 42 | var gitm_support = ['init','pull','push','fetch','checkout','clone','-h', '--help', '-V', "-v",'--version']; 43 | var git_support_one =['help']; 44 | 45 | if(process.argv.length > 3 && process.argv.contains('--help')){ 46 | type = 0; 47 | return type; 48 | } 49 | 50 | if (arg) { 51 | if(gitm_support.contains(arg)){ 52 | type = 2; 53 | }else if(git_support_one.contains(arg)){ 54 | type = 0; 55 | }else{ 56 | type = 1; 57 | } 58 | } 59 | return type; 60 | }; 61 | 62 | 63 | 64 | /** 65 | * get current git branch name 66 | */ 67 | exports.currentBranch = function(){ 68 | return gitm_execute.execSync('git rev-parse --abbrev-ref HEAD'); 69 | }; 70 | 71 | /** 72 | * get current git remote name 73 | */ 74 | exports.currentRemoteBranch = function(){ 75 | var localBranch = currentBranch(); 76 | var command = 'git config branch.'+ localBranch+ '.remote'; 77 | return gitm_execute.execSync(command); 78 | }; 79 | 80 | /** 81 | * get current git remote repo url 82 | */ 83 | exports.currentRemoteUrl = function(){ 84 | return gitm_execute.execSync('git config remote.origin.url'); 85 | }; 86 | 87 | /** 88 | * isLocalBranchExist 89 | */ 90 | exports.isLocalBranchExist = function(branch){ 91 | var isExist = false; 92 | if(!branch){ 93 | return isExist; 94 | } 95 | 96 | var branches = gitm_execute.execSync('git branch'); 97 | if(branches){ 98 | branches = branches.replace("*"," ").replace(/(^\s*)|(\s*$)/g, "").split(/\s{2,}/); 99 | isExist = branches.contains(branch); 100 | } 101 | 102 | return isExist; 103 | }; 104 | 105 | 106 | /** 107 | * isRemoteBranchExist 108 | */ 109 | exports.isRemoteBranchExist = function(branch){ 110 | var isExist = false; 111 | if(!branch){ 112 | return isExist; 113 | } 114 | 115 | var branches = gitm_execute.execSync('git branch -r'); 116 | if(branches){ 117 | branches = branches.replace("*"," ").replace(/(^\s*)|(\s*$)/g, "").split(/\s{2,}/); 118 | isExist = branches.contains(branch); 119 | } 120 | 121 | return isExist; 122 | }; 123 | 124 | /** 125 | * get remote origin url 126 | */ 127 | exports.getOriginUrl = function(){ 128 | var url = gitm_execute.execSync('git config --local --get remote.origin.url'); 129 | return url; 130 | }; 131 | 132 | /** 133 | * chdir to the repo dir 134 | * 135 | * @param repo 136 | */ 137 | exports.chdirRepo = function(repo){ 138 | if(!repo){ 139 | console.log(os.EOL); 140 | console.log('Invalid repo.'); 141 | return; 142 | } 143 | 144 | try { 145 | var dir; 146 | if(repo.dir){ 147 | dir = path.join(repo.dir,repo.name); 148 | }else{ 149 | dir = repo.name; 150 | } 151 | 152 | process.chdir(dir); 153 | console.log(os.EOL); 154 | console.log('$ cd ' + dir); 155 | }catch (err) { 156 | console.log('chdir: ' + err); 157 | } 158 | }; 159 | 160 | 161 | /** 162 | * get dir from repo 163 | * 164 | * @param repo 165 | * @returns {*} 166 | */ 167 | exports.getdirFromRepo = function(repo){ 168 | if(!repo){ 169 | console.log(os.EOL); 170 | console.log('Invalid repo.'); 171 | return; 172 | } 173 | 174 | var dir; 175 | if(repo.dir){ 176 | dir = path.join(repo.dir,repo.name); 177 | }else{ 178 | dir = repo.name; 179 | } 180 | 181 | return dir; 182 | }; 183 | 184 | 185 | /** 186 | * see http://outofmemory.cn/code-snippet/1818/expand-javascript-Array-plus-contains-method 187 | * 188 | * 189 | * @param obj 190 | * @returns {boolean} 191 | */ 192 | Array.prototype.contains = function(obj) { 193 | var i = this.length; 194 | while (i--) { 195 | if (this[i] == obj) { 196 | return true; 197 | } 198 | } 199 | return false; 200 | }; -------------------------------------------------------------------------------- /docs/img/branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdream/node-gitm/c15fcc384e8e32effda73431c64db4cd08340538/docs/img/branch.png -------------------------------------------------------------------------------- /docs/img/checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdream/node-gitm/c15fcc384e8e32effda73431c64db4cd08340538/docs/img/checkout.png -------------------------------------------------------------------------------- /docs/img/repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdream/node-gitm/c15fcc384e8e32effda73431c64db4cd08340538/docs/img/repo.png -------------------------------------------------------------------------------- /docs/img/workflow0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdream/node-gitm/c15fcc384e8e32effda73431c64db4cd08340538/docs/img/workflow0.png -------------------------------------------------------------------------------- /docs/img/workflow1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdream/node-gitm/c15fcc384e8e32effda73431c64db4cd08340538/docs/img/workflow1.png -------------------------------------------------------------------------------- /examples/repositories/branch.gitm: -------------------------------------------------------------------------------- 1 | { 2 | "develop":{ 3 | "gitmA": "develop", 4 | "gitmB": "develop", 5 | "gitmC": "develop" 6 | }, 7 | "master":{ 8 | "gitmA": "master", 9 | "gitmB": "master", 10 | "gitmC": "master" 11 | } 12 | } -------------------------------------------------------------------------------- /examples/repositories/repo.gitm: -------------------------------------------------------------------------------- 1 | { 2 | "repositories": [ 3 | { 4 | "url": "https://github.com/snowdream/gitm.git", 5 | "branches": [ 6 | "develop", 7 | "master" 8 | ], 9 | "name": "gitmA" 10 | }, 11 | { 12 | "url": "https://github.com/snowdream/gitm.git", 13 | "branches": [ 14 | "develop", 15 | "master" 16 | ], 17 | "name": "gitmB" 18 | }, 19 | { 20 | "url": "https://github.com/snowdream/gitm.git", 21 | "branches": [ 22 | "develop", 23 | "master" 24 | ], 25 | "name": "gitmC" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /examples/repository-dir/branch.gitm: -------------------------------------------------------------------------------- 1 | { 2 | "new":{ 3 | "gitmA": "new:develop", 4 | "gitmB": "new:develop", 5 | "gitmC": "new:develop", 6 | "gitmO": "new:develop" 7 | }, 8 | "develop":{ 9 | "gitmA": "develop", 10 | "gitmB": "develop", 11 | "gitmC": "develop", 12 | "gitmO": "develop" 13 | }, 14 | "master":{ 15 | "gitmA": "master", 16 | "gitmB": "master", 17 | "gitmC": "master", 18 | "gitmO": "master" 19 | } 20 | } -------------------------------------------------------------------------------- /examples/repository-dir/repo.gitm: -------------------------------------------------------------------------------- 1 | { 2 | "repository": { 3 | "url": "https://github.com/snowdream/gitm.git", 4 | "branches": [ 5 | "develop", 6 | "master" 7 | ], 8 | "name": "gitmO", 9 | "repositories": [ 10 | { 11 | "url": "https://github.com/snowdream/gitm.git", 12 | "branches": [ 13 | "develop", 14 | "master" 15 | ], 16 | "name": "gitmA", 17 | "dir":"gitm0and/gitm0andgitmA" 18 | }, 19 | { 20 | "url": "https://github.com/snowdream/gitm.git", 21 | "branches": [ 22 | "develop", 23 | "master" 24 | ], 25 | "name": "gitmB", 26 | "dir":"gitm0and/gitm1and/gitm0andgitmB" 27 | }, 28 | { 29 | "url": "https://github.com/snowdream/gitm.git", 30 | "branches": [ 31 | "develop", 32 | "master" 33 | ], 34 | "name": "gitmC", 35 | "dir":"gitm0andgitmC" 36 | } 37 | ] 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /examples/repository/branch.gitm: -------------------------------------------------------------------------------- 1 | { 2 | "new":{ 3 | "gitmA": "new:develop", 4 | "gitmB": "new:develop", 5 | "gitmC": "new:develop", 6 | "gitmO": "new:develop" 7 | }, 8 | "develop":{ 9 | "gitmA": "develop", 10 | "gitmB": "develop", 11 | "gitmC": "develop", 12 | "gitmO": "develop" 13 | }, 14 | "master":{ 15 | "gitmA": "master", 16 | "gitmB": "master", 17 | "gitmC": "master", 18 | "gitmO": "master" 19 | } 20 | } -------------------------------------------------------------------------------- /examples/repository/repo.gitm: -------------------------------------------------------------------------------- 1 | { 2 | "repository": { 3 | "url": "https://github.com/snowdream/gitm.git", 4 | "branches": [ 5 | "develop", 6 | "master" 7 | ], 8 | "name": "gitmO", 9 | "repositories": [ 10 | { 11 | "url": "https://github.com/snowdream/gitm.git", 12 | "branches": [ 13 | "develop", 14 | "master" 15 | ], 16 | "name": "gitmA" 17 | }, 18 | { 19 | "url": "https://github.com/snowdream/gitm.git", 20 | "branches": [ 21 | "develop", 22 | "master" 23 | ], 24 | "name": "gitmB" 25 | }, 26 | { 27 | "url": "https://github.com/snowdream/gitm.git", 28 | "branches": [ 29 | "develop", 30 | "master" 31 | ], 32 | "name": "gitmC" 33 | } 34 | ] 35 | } 36 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = function () { 3 | }; 4 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@snowdream/gitm", 3 | "version": "0.4.7", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@snowdream/gitm", 9 | "version": "0.4.7", 10 | "dependencies": { 11 | "asciimo": "^0.3.1", 12 | "commander": "^10.0.0", 13 | "config": "^3.3.9", 14 | "ignore": "^5.2.4", 15 | "sync-request": "^6.1.0" 16 | }, 17 | "bin": { 18 | "gitm": "bin/gitm" 19 | }, 20 | "devDependencies": { 21 | "istanbul": "^0.4.4", 22 | "mocha": "^10.2.0" 23 | } 24 | }, 25 | "node_modules/@types/concat-stream": { 26 | "version": "1.6.0", 27 | "resolved": "https://registry.npm.taobao.org/@types/concat-stream/download/@types/concat-stream-1.6.0.tgz", 28 | "integrity": "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=", 29 | "dependencies": { 30 | "@types/node": "*" 31 | } 32 | }, 33 | "node_modules/@types/form-data": { 34 | "version": "0.0.33", 35 | "resolved": "https://registry.npm.taobao.org/@types/form-data/download/@types/form-data-0.0.33.tgz", 36 | "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", 37 | "dependencies": { 38 | "@types/node": "*" 39 | } 40 | }, 41 | "node_modules/@types/node": { 42 | "version": "10.17.56", 43 | "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-10.17.56.tgz?cache=0&sync_timestamp=1616803552865&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.17.56.tgz", 44 | "integrity": "sha1-AQyeBHw/8J3c0Ry7bPWRJyXNwrM=" 45 | }, 46 | "node_modules/@types/qs": { 47 | "version": "6.9.6", 48 | "resolved": "https://registry.npm.taobao.org/@types/qs/download/@types/qs-6.9.6.tgz", 49 | "integrity": "sha1-35w8izGiR+wxXmmWVmvjFx30s7E=" 50 | }, 51 | "node_modules/abbrev": { 52 | "version": "1.0.9", 53 | "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.0.9.tgz", 54 | "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", 55 | "dev": true 56 | }, 57 | "node_modules/amdefine": { 58 | "version": "1.0.1", 59 | "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", 60 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 61 | "dev": true, 62 | "optional": true, 63 | "engines": { 64 | "node": ">=0.4.2" 65 | } 66 | }, 67 | "node_modules/ansi-colors": { 68 | "version": "4.1.1", 69 | "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz", 70 | "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=", 71 | "dev": true, 72 | "engines": { 73 | "node": ">=6" 74 | } 75 | }, 76 | "node_modules/ansi-styles": { 77 | "version": "4.3.0", 78 | "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz", 79 | "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", 80 | "dev": true, 81 | "dependencies": { 82 | "color-convert": "^2.0.1" 83 | }, 84 | "engines": { 85 | "node": ">=8" 86 | } 87 | }, 88 | "node_modules/anymatch": { 89 | "version": "3.1.3", 90 | "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", 91 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 92 | "dev": true, 93 | "dependencies": { 94 | "normalize-path": "^3.0.0", 95 | "picomatch": "^2.0.4" 96 | }, 97 | "engines": { 98 | "node": ">= 8" 99 | } 100 | }, 101 | "node_modules/argparse": { 102 | "version": "1.0.10", 103 | "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", 104 | "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", 105 | "dev": true, 106 | "dependencies": { 107 | "sprintf-js": "~1.0.2" 108 | } 109 | }, 110 | "node_modules/asap": { 111 | "version": "2.0.6", 112 | "resolved": "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", 113 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 114 | }, 115 | "node_modules/asciimo": { 116 | "version": "0.3.1", 117 | "resolved": "https://registry.npm.taobao.org/asciimo/download/asciimo-0.3.1.tgz", 118 | "integrity": "sha1-1kBGvz1nAklq3ONFxsS/nNBcDo8=", 119 | "dependencies": { 120 | "colors": ">= 0.3.0" 121 | }, 122 | "bin": { 123 | "asciimo": "bin/asciimo" 124 | }, 125 | "engines": { 126 | "node": ">= 0.1.98" 127 | } 128 | }, 129 | "node_modules/async": { 130 | "version": "1.5.2", 131 | "resolved": "https://registry.npm.taobao.org/async/download/async-1.5.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync%2Fdownload%2Fasync-1.5.2.tgz", 132 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 133 | "dev": true 134 | }, 135 | "node_modules/asynckit": { 136 | "version": "0.4.0", 137 | "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", 138 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 139 | }, 140 | "node_modules/balanced-match": { 141 | "version": "1.0.0", 142 | "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", 143 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 144 | "dev": true 145 | }, 146 | "node_modules/binary-extensions": { 147 | "version": "2.2.0", 148 | "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", 149 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 150 | "dev": true, 151 | "engines": { 152 | "node": ">=8" 153 | } 154 | }, 155 | "node_modules/brace-expansion": { 156 | "version": "1.1.11", 157 | "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1614010709807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz", 158 | "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", 159 | "dev": true, 160 | "dependencies": { 161 | "balanced-match": "^1.0.0", 162 | "concat-map": "0.0.1" 163 | } 164 | }, 165 | "node_modules/braces": { 166 | "version": "3.0.2", 167 | "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", 168 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 169 | "dev": true, 170 | "dependencies": { 171 | "fill-range": "^7.0.1" 172 | }, 173 | "engines": { 174 | "node": ">=8" 175 | } 176 | }, 177 | "node_modules/browser-stdout": { 178 | "version": "1.3.1", 179 | "resolved": "https://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz", 180 | "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", 181 | "dev": true 182 | }, 183 | "node_modules/buffer-from": { 184 | "version": "1.1.1", 185 | "resolved": "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", 186 | "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=" 187 | }, 188 | "node_modules/call-bind": { 189 | "version": "1.0.2", 190 | "resolved": "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.2.tgz?cache=0&sync_timestamp=1610405478355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.2.tgz", 191 | "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=", 192 | "dependencies": { 193 | "function-bind": "^1.1.1", 194 | "get-intrinsic": "^1.0.2" 195 | } 196 | }, 197 | "node_modules/camelcase": { 198 | "version": "6.2.0", 199 | "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.2.0.tgz?cache=0&sync_timestamp=1603921884289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-6.2.0.tgz", 200 | "integrity": "sha1-kkr4gcnVJaydh/QNlk5c6pgqGAk=", 201 | "dev": true, 202 | "engines": { 203 | "node": ">=10" 204 | } 205 | }, 206 | "node_modules/caseless": { 207 | "version": "0.12.0", 208 | "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", 209 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 210 | }, 211 | "node_modules/chalk": { 212 | "version": "4.1.2", 213 | "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", 214 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 215 | "dev": true, 216 | "dependencies": { 217 | "ansi-styles": "^4.1.0", 218 | "supports-color": "^7.1.0" 219 | }, 220 | "engines": { 221 | "node": ">=10" 222 | } 223 | }, 224 | "node_modules/chalk/node_modules/has-flag": { 225 | "version": "4.0.0", 226 | "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", 227 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 228 | "dev": true, 229 | "engines": { 230 | "node": ">=8" 231 | } 232 | }, 233 | "node_modules/chalk/node_modules/supports-color": { 234 | "version": "7.2.0", 235 | "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", 236 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 237 | "dev": true, 238 | "dependencies": { 239 | "has-flag": "^4.0.0" 240 | }, 241 | "engines": { 242 | "node": ">=8" 243 | } 244 | }, 245 | "node_modules/chokidar": { 246 | "version": "3.5.3", 247 | "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", 248 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 249 | "dev": true, 250 | "dependencies": { 251 | "anymatch": "~3.1.2", 252 | "braces": "~3.0.2", 253 | "glob-parent": "~5.1.2", 254 | "is-binary-path": "~2.1.0", 255 | "is-glob": "~4.0.1", 256 | "normalize-path": "~3.0.0", 257 | "readdirp": "~3.6.0" 258 | }, 259 | "engines": { 260 | "node": ">= 8.10.0" 261 | }, 262 | "optionalDependencies": { 263 | "fsevents": "~2.3.2" 264 | } 265 | }, 266 | "node_modules/cliui": { 267 | "version": "7.0.4", 268 | "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-7.0.4.tgz", 269 | "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=", 270 | "dev": true, 271 | "dependencies": { 272 | "string-width": "^4.2.0", 273 | "strip-ansi": "^6.0.0", 274 | "wrap-ansi": "^7.0.0" 275 | } 276 | }, 277 | "node_modules/cliui/node_modules/ansi-regex": { 278 | "version": "5.0.0", 279 | "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1570188570027&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz", 280 | "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", 281 | "dev": true, 282 | "engines": { 283 | "node": ">=8" 284 | } 285 | }, 286 | "node_modules/cliui/node_modules/is-fullwidth-code-point": { 287 | "version": "3.0.0", 288 | "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", 289 | "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", 290 | "dev": true, 291 | "engines": { 292 | "node": ">=8" 293 | } 294 | }, 295 | "node_modules/cliui/node_modules/string-width": { 296 | "version": "4.2.2", 297 | "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1614522241573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz", 298 | "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", 299 | "dev": true, 300 | "dependencies": { 301 | "emoji-regex": "^8.0.0", 302 | "is-fullwidth-code-point": "^3.0.0", 303 | "strip-ansi": "^6.0.0" 304 | }, 305 | "engines": { 306 | "node": ">=8" 307 | } 308 | }, 309 | "node_modules/cliui/node_modules/strip-ansi": { 310 | "version": "6.0.0", 311 | "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", 312 | "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", 313 | "dev": true, 314 | "dependencies": { 315 | "ansi-regex": "^5.0.0" 316 | }, 317 | "engines": { 318 | "node": ">=8" 319 | } 320 | }, 321 | "node_modules/color-convert": { 322 | "version": "2.0.1", 323 | "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-2.0.1.tgz", 324 | "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", 325 | "dev": true, 326 | "dependencies": { 327 | "color-name": "~1.1.4" 328 | }, 329 | "engines": { 330 | "node": ">=7.0.0" 331 | } 332 | }, 333 | "node_modules/color-name": { 334 | "version": "1.1.4", 335 | "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", 336 | "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", 337 | "dev": true 338 | }, 339 | "node_modules/colors": { 340 | "version": "1.4.0", 341 | "resolved": "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz", 342 | "integrity": "sha1-xQSRR51MG9rtLJztMs98fcI2D3g=", 343 | "engines": { 344 | "node": ">=0.1.90" 345 | } 346 | }, 347 | "node_modules/combined-stream": { 348 | "version": "1.0.8", 349 | "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz", 350 | "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", 351 | "dependencies": { 352 | "delayed-stream": "~1.0.0" 353 | }, 354 | "engines": { 355 | "node": ">= 0.8" 356 | } 357 | }, 358 | "node_modules/commander": { 359 | "version": "10.0.0", 360 | "resolved": "https://registry.npmmirror.com/commander/-/commander-10.0.0.tgz", 361 | "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", 362 | "engines": { 363 | "node": ">=14" 364 | } 365 | }, 366 | "node_modules/concat-map": { 367 | "version": "0.0.1", 368 | "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", 369 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 370 | "dev": true 371 | }, 372 | "node_modules/concat-stream": { 373 | "version": "1.6.2", 374 | "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", 375 | "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", 376 | "engines": [ 377 | "node >= 0.8" 378 | ], 379 | "dependencies": { 380 | "buffer-from": "^1.0.0", 381 | "inherits": "^2.0.3", 382 | "readable-stream": "^2.2.2", 383 | "typedarray": "^0.0.6" 384 | } 385 | }, 386 | "node_modules/config": { 387 | "version": "3.3.9", 388 | "resolved": "https://registry.npmmirror.com/config/-/config-3.3.9.tgz", 389 | "integrity": "sha512-G17nfe+cY7kR0wVpc49NCYvNtelm/pPy8czHoFkAgtV1lkmcp7DHtWCdDu+C9Z7gb2WVqa9Tm3uF9aKaPbCfhg==", 390 | "dependencies": { 391 | "json5": "^2.2.3" 392 | }, 393 | "engines": { 394 | "node": ">= 10.0.0" 395 | } 396 | }, 397 | "node_modules/core-util-is": { 398 | "version": "1.0.2", 399 | "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", 400 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 401 | }, 402 | "node_modules/debug": { 403 | "version": "4.3.4", 404 | "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", 405 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 406 | "dev": true, 407 | "dependencies": { 408 | "ms": "2.1.2" 409 | }, 410 | "engines": { 411 | "node": ">=6.0" 412 | }, 413 | "peerDependenciesMeta": { 414 | "supports-color": { 415 | "optional": true 416 | } 417 | } 418 | }, 419 | "node_modules/debug/node_modules/ms": { 420 | "version": "2.1.2", 421 | "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", 422 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 423 | "dev": true 424 | }, 425 | "node_modules/decamelize": { 426 | "version": "4.0.0", 427 | "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-4.0.0.tgz?cache=0&sync_timestamp=1610348666353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-4.0.0.tgz", 428 | "integrity": "sha1-qkcte/Zg6xXzSU79UxyrfypwmDc=", 429 | "dev": true, 430 | "engines": { 431 | "node": ">=10" 432 | } 433 | }, 434 | "node_modules/deep-is": { 435 | "version": "0.1.3", 436 | "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", 437 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 438 | "dev": true 439 | }, 440 | "node_modules/delayed-stream": { 441 | "version": "1.0.0", 442 | "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", 443 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 444 | "engines": { 445 | "node": ">=0.4.0" 446 | } 447 | }, 448 | "node_modules/diff": { 449 | "version": "5.0.0", 450 | "resolved": "https://registry.npm.taobao.org/diff/download/diff-5.0.0.tgz?cache=0&sync_timestamp=1604803633979&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-5.0.0.tgz", 451 | "integrity": "sha1-ftatdthZ0DB4fsNYVfWx2vMdhSs=", 452 | "dev": true, 453 | "engines": { 454 | "node": ">=0.3.1" 455 | } 456 | }, 457 | "node_modules/emoji-regex": { 458 | "version": "8.0.0", 459 | "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1614682725186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz", 460 | "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", 461 | "dev": true 462 | }, 463 | "node_modules/escalade": { 464 | "version": "3.1.1", 465 | "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz", 466 | "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", 467 | "dev": true, 468 | "engines": { 469 | "node": ">=6" 470 | } 471 | }, 472 | "node_modules/escape-string-regexp": { 473 | "version": "4.0.0", 474 | "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz", 475 | "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", 476 | "dev": true, 477 | "engines": { 478 | "node": ">=10" 479 | } 480 | }, 481 | "node_modules/escodegen": { 482 | "version": "1.8.1", 483 | "resolved": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.8.1.tgz", 484 | "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", 485 | "dev": true, 486 | "dependencies": { 487 | "esprima": "^2.7.1", 488 | "estraverse": "^1.9.1", 489 | "esutils": "^2.0.2", 490 | "optionator": "^0.8.1" 491 | }, 492 | "bin": { 493 | "escodegen": "bin/escodegen.js", 494 | "esgenerate": "bin/esgenerate.js" 495 | }, 496 | "engines": { 497 | "node": ">=0.12.0" 498 | }, 499 | "optionalDependencies": { 500 | "source-map": "~0.2.0" 501 | } 502 | }, 503 | "node_modules/esprima": { 504 | "version": "2.7.3", 505 | "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz", 506 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 507 | "dev": true, 508 | "bin": { 509 | "esparse": "bin/esparse.js", 510 | "esvalidate": "bin/esvalidate.js" 511 | }, 512 | "engines": { 513 | "node": ">=0.10.0" 514 | } 515 | }, 516 | "node_modules/estraverse": { 517 | "version": "1.9.3", 518 | "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-1.9.3.tgz?cache=0&sync_timestamp=1596641300398&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-1.9.3.tgz", 519 | "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", 520 | "dev": true, 521 | "engines": { 522 | "node": ">=0.10.0" 523 | } 524 | }, 525 | "node_modules/esutils": { 526 | "version": "2.0.3", 527 | "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz", 528 | "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", 529 | "dev": true, 530 | "engines": { 531 | "node": ">=0.10.0" 532 | } 533 | }, 534 | "node_modules/fast-levenshtein": { 535 | "version": "2.0.6", 536 | "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", 537 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 538 | "dev": true 539 | }, 540 | "node_modules/fill-range": { 541 | "version": "7.0.1", 542 | "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", 543 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 544 | "dev": true, 545 | "dependencies": { 546 | "to-regex-range": "^5.0.1" 547 | }, 548 | "engines": { 549 | "node": ">=8" 550 | } 551 | }, 552 | "node_modules/find-up": { 553 | "version": "5.0.0", 554 | "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-5.0.0.tgz?cache=0&sync_timestamp=1597169882796&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-5.0.0.tgz", 555 | "integrity": "sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=", 556 | "dev": true, 557 | "dependencies": { 558 | "locate-path": "^6.0.0", 559 | "path-exists": "^4.0.0" 560 | }, 561 | "engines": { 562 | "node": ">=10" 563 | } 564 | }, 565 | "node_modules/flat": { 566 | "version": "5.0.2", 567 | "resolved": "https://registry.npm.taobao.org/flat/download/flat-5.0.2.tgz", 568 | "integrity": "sha1-jKb+MyBp/6nTJMMnGYxZglnOskE=", 569 | "dev": true, 570 | "bin": { 571 | "flat": "cli.js" 572 | } 573 | }, 574 | "node_modules/form-data": { 575 | "version": "2.5.1", 576 | "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.5.1.tgz", 577 | "integrity": "sha1-8svsV7XlniNxbhKP5E1OXdI4lfQ=", 578 | "dependencies": { 579 | "asynckit": "^0.4.0", 580 | "combined-stream": "^1.0.6", 581 | "mime-types": "^2.1.12" 582 | }, 583 | "engines": { 584 | "node": ">= 0.12" 585 | } 586 | }, 587 | "node_modules/fs.realpath": { 588 | "version": "1.0.0", 589 | "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", 590 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 591 | "dev": true 592 | }, 593 | "node_modules/fsevents": { 594 | "version": "2.3.2", 595 | "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", 596 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 597 | "dev": true, 598 | "hasInstallScript": true, 599 | "optional": true, 600 | "os": [ 601 | "darwin" 602 | ], 603 | "engines": { 604 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 605 | } 606 | }, 607 | "node_modules/function-bind": { 608 | "version": "1.1.1", 609 | "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", 610 | "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" 611 | }, 612 | "node_modules/get-caller-file": { 613 | "version": "2.0.5", 614 | "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", 615 | "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", 616 | "dev": true, 617 | "engines": { 618 | "node": "6.* || 8.* || >= 10.*" 619 | } 620 | }, 621 | "node_modules/get-intrinsic": { 622 | "version": "1.1.1", 623 | "resolved": "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.1.1.tgz?cache=0&sync_timestamp=1612364352840&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-intrinsic%2Fdownload%2Fget-intrinsic-1.1.1.tgz", 624 | "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=", 625 | "dependencies": { 626 | "function-bind": "^1.1.1", 627 | "has": "^1.0.3", 628 | "has-symbols": "^1.0.1" 629 | } 630 | }, 631 | "node_modules/get-port": { 632 | "version": "3.2.0", 633 | "resolved": "https://registry.npm.taobao.org/get-port/download/get-port-3.2.0.tgz?cache=0&sync_timestamp=1596723349303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-port%2Fdownload%2Fget-port-3.2.0.tgz", 634 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", 635 | "engines": { 636 | "node": ">=4" 637 | } 638 | }, 639 | "node_modules/glob": { 640 | "version": "5.0.15", 641 | "resolved": "https://registry.npm.taobao.org/glob/download/glob-5.0.15.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-5.0.15.tgz", 642 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 643 | "dev": true, 644 | "dependencies": { 645 | "inflight": "^1.0.4", 646 | "inherits": "2", 647 | "minimatch": "2 || 3", 648 | "once": "^1.3.0", 649 | "path-is-absolute": "^1.0.0" 650 | }, 651 | "engines": { 652 | "node": "*" 653 | } 654 | }, 655 | "node_modules/glob-parent": { 656 | "version": "5.1.2", 657 | "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", 658 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 659 | "dev": true, 660 | "dependencies": { 661 | "is-glob": "^4.0.1" 662 | }, 663 | "engines": { 664 | "node": ">= 6" 665 | } 666 | }, 667 | "node_modules/handlebars": { 668 | "version": "4.7.7", 669 | "resolved": "https://registry.npm.taobao.org/handlebars/download/handlebars-4.7.7.tgz", 670 | "integrity": "sha1-nOM0FqrQLb1sj6+oJA1dmABJRaE=", 671 | "dev": true, 672 | "dependencies": { 673 | "minimist": "^1.2.5", 674 | "neo-async": "^2.6.0", 675 | "source-map": "^0.6.1", 676 | "wordwrap": "^1.0.0" 677 | }, 678 | "bin": { 679 | "handlebars": "bin/handlebars" 680 | }, 681 | "engines": { 682 | "node": ">=0.4.7" 683 | }, 684 | "optionalDependencies": { 685 | "uglify-js": "^3.1.4" 686 | } 687 | }, 688 | "node_modules/handlebars/node_modules/source-map": { 689 | "version": "0.6.1", 690 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", 691 | "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", 692 | "dev": true, 693 | "engines": { 694 | "node": ">=0.10.0" 695 | } 696 | }, 697 | "node_modules/has": { 698 | "version": "1.0.3", 699 | "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz", 700 | "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", 701 | "dependencies": { 702 | "function-bind": "^1.1.1" 703 | }, 704 | "engines": { 705 | "node": ">= 0.4.0" 706 | } 707 | }, 708 | "node_modules/has-flag": { 709 | "version": "1.0.0", 710 | "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", 711 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 712 | "dev": true, 713 | "engines": { 714 | "node": ">=0.10.0" 715 | } 716 | }, 717 | "node_modules/has-symbols": { 718 | "version": "1.0.2", 719 | "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.2.tgz", 720 | "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=", 721 | "engines": { 722 | "node": ">= 0.4" 723 | } 724 | }, 725 | "node_modules/he": { 726 | "version": "1.2.0", 727 | "resolved": "http://registry.npm.taobao.org/he/download/he-1.2.0.tgz", 728 | "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", 729 | "dev": true, 730 | "bin": { 731 | "he": "bin/he" 732 | } 733 | }, 734 | "node_modules/http-basic": { 735 | "version": "8.1.3", 736 | "resolved": "https://registry.npm.taobao.org/http-basic/download/http-basic-8.1.3.tgz", 737 | "integrity": "sha1-p8q+51Joabm3EBNpcIBbEAQmG78=", 738 | "dependencies": { 739 | "caseless": "^0.12.0", 740 | "concat-stream": "^1.6.2", 741 | "http-response-object": "^3.0.1", 742 | "parse-cache-control": "^1.0.1" 743 | }, 744 | "engines": { 745 | "node": ">=6.0.0" 746 | } 747 | }, 748 | "node_modules/http-response-object": { 749 | "version": "3.0.2", 750 | "resolved": "https://registry.npm.taobao.org/http-response-object/download/http-response-object-3.0.2.tgz", 751 | "integrity": "sha1-f0NbshBFTkNg0HTvH5idXqiqmBA=", 752 | "dependencies": { 753 | "@types/node": "^10.0.3" 754 | } 755 | }, 756 | "node_modules/ignore": { 757 | "version": "5.2.4", 758 | "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", 759 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 760 | "engines": { 761 | "node": ">= 4" 762 | } 763 | }, 764 | "node_modules/inflight": { 765 | "version": "1.0.6", 766 | "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", 767 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 768 | "dev": true, 769 | "dependencies": { 770 | "once": "^1.3.0", 771 | "wrappy": "1" 772 | } 773 | }, 774 | "node_modules/inherits": { 775 | "version": "2.0.4", 776 | "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", 777 | "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" 778 | }, 779 | "node_modules/is-binary-path": { 780 | "version": "2.1.0", 781 | "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", 782 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 783 | "dev": true, 784 | "dependencies": { 785 | "binary-extensions": "^2.0.0" 786 | }, 787 | "engines": { 788 | "node": ">=8" 789 | } 790 | }, 791 | "node_modules/is-extglob": { 792 | "version": "2.1.1", 793 | "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", 794 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 795 | "dev": true, 796 | "engines": { 797 | "node": ">=0.10.0" 798 | } 799 | }, 800 | "node_modules/is-glob": { 801 | "version": "4.0.3", 802 | "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", 803 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 804 | "dev": true, 805 | "dependencies": { 806 | "is-extglob": "^2.1.1" 807 | }, 808 | "engines": { 809 | "node": ">=0.10.0" 810 | } 811 | }, 812 | "node_modules/is-number": { 813 | "version": "7.0.0", 814 | "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", 815 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 816 | "dev": true, 817 | "engines": { 818 | "node": ">=0.12.0" 819 | } 820 | }, 821 | "node_modules/is-plain-obj": { 822 | "version": "2.1.0", 823 | "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-2.1.0.tgz", 824 | "integrity": "sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=", 825 | "dev": true, 826 | "engines": { 827 | "node": ">=8" 828 | } 829 | }, 830 | "node_modules/is-unicode-supported": { 831 | "version": "0.1.0", 832 | "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 833 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 834 | "dev": true, 835 | "engines": { 836 | "node": ">=10" 837 | } 838 | }, 839 | "node_modules/isarray": { 840 | "version": "1.0.0", 841 | "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz", 842 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 843 | }, 844 | "node_modules/isexe": { 845 | "version": "2.0.0", 846 | "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", 847 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 848 | "dev": true 849 | }, 850 | "node_modules/istanbul": { 851 | "version": "0.4.5", 852 | "resolved": "http://registry.npm.taobao.org/istanbul/download/istanbul-0.4.5.tgz", 853 | "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", 854 | "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", 855 | "dev": true, 856 | "dependencies": { 857 | "abbrev": "1.0.x", 858 | "async": "1.x", 859 | "escodegen": "1.8.x", 860 | "esprima": "2.7.x", 861 | "glob": "^5.0.15", 862 | "handlebars": "^4.0.1", 863 | "js-yaml": "3.x", 864 | "mkdirp": "0.5.x", 865 | "nopt": "3.x", 866 | "once": "1.x", 867 | "resolve": "1.1.x", 868 | "supports-color": "^3.1.0", 869 | "which": "^1.1.1", 870 | "wordwrap": "^1.0.0" 871 | }, 872 | "bin": { 873 | "istanbul": "lib/cli.js" 874 | } 875 | }, 876 | "node_modules/js-yaml": { 877 | "version": "3.14.1", 878 | "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.1.tgz?cache=0&sync_timestamp=1609680109116&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.1.tgz", 879 | "integrity": "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=", 880 | "dev": true, 881 | "dependencies": { 882 | "argparse": "^1.0.7", 883 | "esprima": "^4.0.0" 884 | }, 885 | "bin": { 886 | "js-yaml": "bin/js-yaml.js" 887 | } 888 | }, 889 | "node_modules/js-yaml/node_modules/esprima": { 890 | "version": "4.0.1", 891 | "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz", 892 | "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", 893 | "dev": true, 894 | "bin": { 895 | "esparse": "bin/esparse.js", 896 | "esvalidate": "bin/esvalidate.js" 897 | }, 898 | "engines": { 899 | "node": ">=4" 900 | } 901 | }, 902 | "node_modules/json5": { 903 | "version": "2.2.3", 904 | "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", 905 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 906 | "bin": { 907 | "json5": "lib/cli.js" 908 | }, 909 | "engines": { 910 | "node": ">=6" 911 | } 912 | }, 913 | "node_modules/levn": { 914 | "version": "0.3.0", 915 | "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", 916 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 917 | "dev": true, 918 | "dependencies": { 919 | "prelude-ls": "~1.1.2", 920 | "type-check": "~0.3.2" 921 | }, 922 | "engines": { 923 | "node": ">= 0.8.0" 924 | } 925 | }, 926 | "node_modules/locate-path": { 927 | "version": "6.0.0", 928 | "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-6.0.0.tgz?cache=0&sync_timestamp=1597081764621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-6.0.0.tgz", 929 | "integrity": "sha1-VTIeswn+u8WcSAHZMackUqaB0oY=", 930 | "dev": true, 931 | "dependencies": { 932 | "p-locate": "^5.0.0" 933 | }, 934 | "engines": { 935 | "node": ">=10" 936 | } 937 | }, 938 | "node_modules/log-symbols": { 939 | "version": "4.1.0", 940 | "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", 941 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 942 | "dev": true, 943 | "dependencies": { 944 | "chalk": "^4.1.0", 945 | "is-unicode-supported": "^0.1.0" 946 | }, 947 | "engines": { 948 | "node": ">=10" 949 | } 950 | }, 951 | "node_modules/mime-db": { 952 | "version": "1.47.0", 953 | "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.47.0.tgz?cache=0&sync_timestamp=1617306025156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.47.0.tgz", 954 | "integrity": "sha1-jLMT5Zll08Bc+/iYkVomevRqM1w=", 955 | "engines": { 956 | "node": ">= 0.6" 957 | } 958 | }, 959 | "node_modules/mime-types": { 960 | "version": "2.1.30", 961 | "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.30.tgz", 962 | "integrity": "sha1-bnvotMR5gl+F7WMmaV23P5MF1i0=", 963 | "dependencies": { 964 | "mime-db": "1.47.0" 965 | }, 966 | "engines": { 967 | "node": ">= 0.6" 968 | } 969 | }, 970 | "node_modules/minimatch": { 971 | "version": "3.0.4", 972 | "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", 973 | "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", 974 | "dev": true, 975 | "dependencies": { 976 | "brace-expansion": "^1.1.7" 977 | }, 978 | "engines": { 979 | "node": "*" 980 | } 981 | }, 982 | "node_modules/minimist": { 983 | "version": "1.2.5", 984 | "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz", 985 | "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", 986 | "dev": true 987 | }, 988 | "node_modules/mkdirp": { 989 | "version": "0.5.5", 990 | "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1593529694459&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz", 991 | "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", 992 | "dev": true, 993 | "dependencies": { 994 | "minimist": "^1.2.5" 995 | }, 996 | "bin": { 997 | "mkdirp": "bin/cmd.js" 998 | } 999 | }, 1000 | "node_modules/mocha": { 1001 | "version": "10.2.0", 1002 | "resolved": "https://registry.npmmirror.com/mocha/-/mocha-10.2.0.tgz", 1003 | "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", 1004 | "dev": true, 1005 | "dependencies": { 1006 | "ansi-colors": "4.1.1", 1007 | "browser-stdout": "1.3.1", 1008 | "chokidar": "3.5.3", 1009 | "debug": "4.3.4", 1010 | "diff": "5.0.0", 1011 | "escape-string-regexp": "4.0.0", 1012 | "find-up": "5.0.0", 1013 | "glob": "7.2.0", 1014 | "he": "1.2.0", 1015 | "js-yaml": "4.1.0", 1016 | "log-symbols": "4.1.0", 1017 | "minimatch": "5.0.1", 1018 | "ms": "2.1.3", 1019 | "nanoid": "3.3.3", 1020 | "serialize-javascript": "6.0.0", 1021 | "strip-json-comments": "3.1.1", 1022 | "supports-color": "8.1.1", 1023 | "workerpool": "6.2.1", 1024 | "yargs": "16.2.0", 1025 | "yargs-parser": "20.2.4", 1026 | "yargs-unparser": "2.0.0" 1027 | }, 1028 | "bin": { 1029 | "_mocha": "bin/_mocha", 1030 | "mocha": "bin/mocha.js" 1031 | }, 1032 | "engines": { 1033 | "node": ">= 14.0.0" 1034 | } 1035 | }, 1036 | "node_modules/mocha/node_modules/argparse": { 1037 | "version": "2.0.1", 1038 | "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", 1039 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1040 | "dev": true 1041 | }, 1042 | "node_modules/mocha/node_modules/glob": { 1043 | "version": "7.2.0", 1044 | "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz", 1045 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1046 | "dev": true, 1047 | "dependencies": { 1048 | "fs.realpath": "^1.0.0", 1049 | "inflight": "^1.0.4", 1050 | "inherits": "2", 1051 | "minimatch": "^3.0.4", 1052 | "once": "^1.3.0", 1053 | "path-is-absolute": "^1.0.0" 1054 | }, 1055 | "engines": { 1056 | "node": "*" 1057 | } 1058 | }, 1059 | "node_modules/mocha/node_modules/glob/node_modules/minimatch": { 1060 | "version": "3.1.2", 1061 | "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", 1062 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1063 | "dev": true, 1064 | "dependencies": { 1065 | "brace-expansion": "^1.1.7" 1066 | }, 1067 | "engines": { 1068 | "node": "*" 1069 | } 1070 | }, 1071 | "node_modules/mocha/node_modules/has-flag": { 1072 | "version": "4.0.0", 1073 | "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", 1074 | "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", 1075 | "dev": true, 1076 | "engines": { 1077 | "node": ">=8" 1078 | } 1079 | }, 1080 | "node_modules/mocha/node_modules/js-yaml": { 1081 | "version": "4.1.0", 1082 | "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", 1083 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1084 | "dev": true, 1085 | "dependencies": { 1086 | "argparse": "^2.0.1" 1087 | }, 1088 | "bin": { 1089 | "js-yaml": "bin/js-yaml.js" 1090 | } 1091 | }, 1092 | "node_modules/mocha/node_modules/minimatch": { 1093 | "version": "5.0.1", 1094 | "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.0.1.tgz", 1095 | "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", 1096 | "dev": true, 1097 | "dependencies": { 1098 | "brace-expansion": "^2.0.1" 1099 | }, 1100 | "engines": { 1101 | "node": ">=10" 1102 | } 1103 | }, 1104 | "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { 1105 | "version": "2.0.1", 1106 | "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", 1107 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1108 | "dev": true, 1109 | "dependencies": { 1110 | "balanced-match": "^1.0.0" 1111 | } 1112 | }, 1113 | "node_modules/mocha/node_modules/supports-color": { 1114 | "version": "8.1.1", 1115 | "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-8.1.1.tgz", 1116 | "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=", 1117 | "dev": true, 1118 | "dependencies": { 1119 | "has-flag": "^4.0.0" 1120 | }, 1121 | "engines": { 1122 | "node": ">=10" 1123 | } 1124 | }, 1125 | "node_modules/ms": { 1126 | "version": "2.1.3", 1127 | "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433872491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz", 1128 | "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", 1129 | "dev": true 1130 | }, 1131 | "node_modules/nanoid": { 1132 | "version": "3.3.3", 1133 | "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.3.tgz", 1134 | "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", 1135 | "dev": true, 1136 | "bin": { 1137 | "nanoid": "bin/nanoid.cjs" 1138 | }, 1139 | "engines": { 1140 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1141 | } 1142 | }, 1143 | "node_modules/neo-async": { 1144 | "version": "2.6.2", 1145 | "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz?cache=0&sync_timestamp=1594317447342&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz", 1146 | "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=", 1147 | "dev": true 1148 | }, 1149 | "node_modules/nopt": { 1150 | "version": "3.0.6", 1151 | "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz?cache=0&sync_timestamp=1597649892953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnopt%2Fdownload%2Fnopt-3.0.6.tgz", 1152 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 1153 | "dev": true, 1154 | "dependencies": { 1155 | "abbrev": "1" 1156 | }, 1157 | "bin": { 1158 | "nopt": "bin/nopt.js" 1159 | } 1160 | }, 1161 | "node_modules/normalize-path": { 1162 | "version": "3.0.0", 1163 | "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", 1164 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1165 | "dev": true, 1166 | "engines": { 1167 | "node": ">=0.10.0" 1168 | } 1169 | }, 1170 | "node_modules/object-inspect": { 1171 | "version": "1.9.0", 1172 | "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.9.0.tgz?cache=0&sync_timestamp=1606804307501&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.9.0.tgz", 1173 | "integrity": "sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo=" 1174 | }, 1175 | "node_modules/once": { 1176 | "version": "1.4.0", 1177 | "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", 1178 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1179 | "dev": true, 1180 | "dependencies": { 1181 | "wrappy": "1" 1182 | } 1183 | }, 1184 | "node_modules/optionator": { 1185 | "version": "0.8.3", 1186 | "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz", 1187 | "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", 1188 | "dev": true, 1189 | "dependencies": { 1190 | "deep-is": "~0.1.3", 1191 | "fast-levenshtein": "~2.0.6", 1192 | "levn": "~0.3.0", 1193 | "prelude-ls": "~1.1.2", 1194 | "type-check": "~0.3.2", 1195 | "word-wrap": "~1.2.3" 1196 | }, 1197 | "engines": { 1198 | "node": ">= 0.8.0" 1199 | } 1200 | }, 1201 | "node_modules/p-limit": { 1202 | "version": "3.1.0", 1203 | "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1606288809092&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz", 1204 | "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=", 1205 | "dev": true, 1206 | "dependencies": { 1207 | "yocto-queue": "^0.1.0" 1208 | }, 1209 | "engines": { 1210 | "node": ">=10" 1211 | } 1212 | }, 1213 | "node_modules/p-locate": { 1214 | "version": "5.0.0", 1215 | "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-5.0.0.tgz?cache=0&sync_timestamp=1597081508945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-5.0.0.tgz", 1216 | "integrity": "sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ=", 1217 | "dev": true, 1218 | "dependencies": { 1219 | "p-limit": "^3.0.2" 1220 | }, 1221 | "engines": { 1222 | "node": ">=10" 1223 | } 1224 | }, 1225 | "node_modules/parse-cache-control": { 1226 | "version": "1.0.1", 1227 | "resolved": "https://registry.npm.taobao.org/parse-cache-control/download/parse-cache-control-1.0.1.tgz", 1228 | "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" 1229 | }, 1230 | "node_modules/path-exists": { 1231 | "version": "4.0.0", 1232 | "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", 1233 | "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", 1234 | "dev": true, 1235 | "engines": { 1236 | "node": ">=8" 1237 | } 1238 | }, 1239 | "node_modules/path-is-absolute": { 1240 | "version": "1.0.1", 1241 | "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", 1242 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1243 | "dev": true, 1244 | "engines": { 1245 | "node": ">=0.10.0" 1246 | } 1247 | }, 1248 | "node_modules/picomatch": { 1249 | "version": "2.3.1", 1250 | "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", 1251 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1252 | "dev": true, 1253 | "engines": { 1254 | "node": ">=8.6" 1255 | } 1256 | }, 1257 | "node_modules/prelude-ls": { 1258 | "version": "1.1.2", 1259 | "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", 1260 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1261 | "dev": true, 1262 | "engines": { 1263 | "node": ">= 0.8.0" 1264 | } 1265 | }, 1266 | "node_modules/process-nextick-args": { 1267 | "version": "2.0.1", 1268 | "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess-nextick-args%2Fdownload%2Fprocess-nextick-args-2.0.1.tgz", 1269 | "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" 1270 | }, 1271 | "node_modules/promise": { 1272 | "version": "8.1.0", 1273 | "resolved": "https://registry.npm.taobao.org/promise/download/promise-8.1.0.tgz", 1274 | "integrity": "sha1-aXwlw9/nQ13Xn81Yw4oTWIjq8F4=", 1275 | "dependencies": { 1276 | "asap": "~2.0.6" 1277 | } 1278 | }, 1279 | "node_modules/qs": { 1280 | "version": "6.10.1", 1281 | "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.10.1.tgz?cache=0&sync_timestamp=1616385328325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.10.1.tgz", 1282 | "integrity": "sha1-STFIL6jWR6Wqt5nFJx0hM7mB+2o=", 1283 | "dependencies": { 1284 | "side-channel": "^1.0.4" 1285 | }, 1286 | "engines": { 1287 | "node": ">=0.6" 1288 | } 1289 | }, 1290 | "node_modules/randombytes": { 1291 | "version": "2.1.0", 1292 | "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", 1293 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1294 | "dev": true, 1295 | "dependencies": { 1296 | "safe-buffer": "^5.1.0" 1297 | } 1298 | }, 1299 | "node_modules/readable-stream": { 1300 | "version": "2.3.7", 1301 | "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz", 1302 | "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", 1303 | "dependencies": { 1304 | "core-util-is": "~1.0.0", 1305 | "inherits": "~2.0.3", 1306 | "isarray": "~1.0.0", 1307 | "process-nextick-args": "~2.0.0", 1308 | "safe-buffer": "~5.1.1", 1309 | "string_decoder": "~1.1.1", 1310 | "util-deprecate": "~1.0.1" 1311 | } 1312 | }, 1313 | "node_modules/readable-stream/node_modules/safe-buffer": { 1314 | "version": "5.1.2", 1315 | "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", 1316 | "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" 1317 | }, 1318 | "node_modules/readdirp": { 1319 | "version": "3.6.0", 1320 | "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", 1321 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1322 | "dev": true, 1323 | "dependencies": { 1324 | "picomatch": "^2.2.1" 1325 | }, 1326 | "engines": { 1327 | "node": ">=8.10.0" 1328 | } 1329 | }, 1330 | "node_modules/require-directory": { 1331 | "version": "2.1.1", 1332 | "resolved": "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", 1333 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1334 | "dev": true, 1335 | "engines": { 1336 | "node": ">=0.10.0" 1337 | } 1338 | }, 1339 | "node_modules/resolve": { 1340 | "version": "1.1.7", 1341 | "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz", 1342 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 1343 | "dev": true 1344 | }, 1345 | "node_modules/safe-buffer": { 1346 | "version": "5.2.1", 1347 | "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", 1348 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1349 | "dev": true 1350 | }, 1351 | "node_modules/serialize-javascript": { 1352 | "version": "6.0.0", 1353 | "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 1354 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 1355 | "dev": true, 1356 | "dependencies": { 1357 | "randombytes": "^2.1.0" 1358 | } 1359 | }, 1360 | "node_modules/side-channel": { 1361 | "version": "1.0.4", 1362 | "resolved": "https://registry.npm.taobao.org/side-channel/download/side-channel-1.0.4.tgz", 1363 | "integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=", 1364 | "dependencies": { 1365 | "call-bind": "^1.0.0", 1366 | "get-intrinsic": "^1.0.2", 1367 | "object-inspect": "^1.9.0" 1368 | } 1369 | }, 1370 | "node_modules/source-map": { 1371 | "version": "0.2.0", 1372 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.2.0.tgz", 1373 | "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", 1374 | "dev": true, 1375 | "optional": true, 1376 | "dependencies": { 1377 | "amdefine": ">=0.0.4" 1378 | }, 1379 | "engines": { 1380 | "node": ">=0.8.0" 1381 | } 1382 | }, 1383 | "node_modules/sprintf-js": { 1384 | "version": "1.0.3", 1385 | "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", 1386 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1387 | "dev": true 1388 | }, 1389 | "node_modules/string_decoder": { 1390 | "version": "1.1.1", 1391 | "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", 1392 | "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", 1393 | "dependencies": { 1394 | "safe-buffer": "~5.1.0" 1395 | } 1396 | }, 1397 | "node_modules/string_decoder/node_modules/safe-buffer": { 1398 | "version": "5.1.2", 1399 | "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", 1400 | "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" 1401 | }, 1402 | "node_modules/strip-json-comments": { 1403 | "version": "3.1.1", 1404 | "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567555399&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz", 1405 | "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", 1406 | "dev": true, 1407 | "engines": { 1408 | "node": ">=8" 1409 | } 1410 | }, 1411 | "node_modules/supports-color": { 1412 | "version": "3.2.3", 1413 | "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", 1414 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", 1415 | "dev": true, 1416 | "dependencies": { 1417 | "has-flag": "^1.0.0" 1418 | }, 1419 | "engines": { 1420 | "node": ">=0.8.0" 1421 | } 1422 | }, 1423 | "node_modules/sync-request": { 1424 | "version": "6.1.0", 1425 | "resolved": "https://registry.npm.taobao.org/sync-request/download/sync-request-6.1.0.tgz", 1426 | "integrity": "sha1-6WIXVlteULv/4XmGi6dVMvtZfmg=", 1427 | "dependencies": { 1428 | "http-response-object": "^3.0.1", 1429 | "sync-rpc": "^1.2.1", 1430 | "then-request": "^6.0.0" 1431 | }, 1432 | "engines": { 1433 | "node": ">=8.0.0" 1434 | } 1435 | }, 1436 | "node_modules/sync-rpc": { 1437 | "version": "1.3.6", 1438 | "resolved": "https://registry.npm.taobao.org/sync-rpc/download/sync-rpc-1.3.6.tgz", 1439 | "integrity": "sha1-suiyVQoSzLxx34ZEgQUp3raGZac=", 1440 | "dependencies": { 1441 | "get-port": "^3.1.0" 1442 | } 1443 | }, 1444 | "node_modules/then-request": { 1445 | "version": "6.0.2", 1446 | "resolved": "https://registry.npm.taobao.org/then-request/download/then-request-6.0.2.tgz", 1447 | "integrity": "sha1-7Bjdi1ykOq7ly5L35MFjDpUNTww=", 1448 | "dependencies": { 1449 | "@types/concat-stream": "^1.6.0", 1450 | "@types/form-data": "0.0.33", 1451 | "@types/node": "^8.0.0", 1452 | "@types/qs": "^6.2.31", 1453 | "caseless": "~0.12.0", 1454 | "concat-stream": "^1.6.0", 1455 | "form-data": "^2.2.0", 1456 | "http-basic": "^8.1.1", 1457 | "http-response-object": "^3.0.1", 1458 | "promise": "^8.0.0", 1459 | "qs": "^6.4.0" 1460 | }, 1461 | "engines": { 1462 | "node": ">=6.0.0" 1463 | } 1464 | }, 1465 | "node_modules/then-request/node_modules/@types/node": { 1466 | "version": "8.10.66", 1467 | "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.10.66.tgz?cache=0&sync_timestamp=1616803552865&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-8.10.66.tgz", 1468 | "integrity": "sha1-3QNdQJ3zIqzIPf9ipgLxKleDu7M=" 1469 | }, 1470 | "node_modules/to-regex-range": { 1471 | "version": "5.0.1", 1472 | "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", 1473 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1474 | "dev": true, 1475 | "dependencies": { 1476 | "is-number": "^7.0.0" 1477 | }, 1478 | "engines": { 1479 | "node": ">=8.0" 1480 | } 1481 | }, 1482 | "node_modules/type-check": { 1483 | "version": "0.3.2", 1484 | "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", 1485 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1486 | "dev": true, 1487 | "dependencies": { 1488 | "prelude-ls": "~1.1.2" 1489 | }, 1490 | "engines": { 1491 | "node": ">= 0.8.0" 1492 | } 1493 | }, 1494 | "node_modules/typedarray": { 1495 | "version": "0.0.6", 1496 | "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", 1497 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 1498 | }, 1499 | "node_modules/uglify-js": { 1500 | "version": "3.13.3", 1501 | "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.13.3.tgz?cache=0&sync_timestamp=1616975941247&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.13.3.tgz", 1502 | "integrity": "sha1-znKhrRVDSOoq9h9Qkzx2zIgCJ24=", 1503 | "dev": true, 1504 | "optional": true, 1505 | "bin": { 1506 | "uglifyjs": "bin/uglifyjs" 1507 | }, 1508 | "engines": { 1509 | "node": ">=0.8.0" 1510 | } 1511 | }, 1512 | "node_modules/util-deprecate": { 1513 | "version": "1.0.2", 1514 | "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", 1515 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1516 | }, 1517 | "node_modules/which": { 1518 | "version": "1.3.1", 1519 | "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz", 1520 | "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", 1521 | "dev": true, 1522 | "dependencies": { 1523 | "isexe": "^2.0.0" 1524 | }, 1525 | "bin": { 1526 | "which": "bin/which" 1527 | } 1528 | }, 1529 | "node_modules/word-wrap": { 1530 | "version": "1.2.3", 1531 | "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz", 1532 | "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", 1533 | "dev": true, 1534 | "engines": { 1535 | "node": ">=0.10.0" 1536 | } 1537 | }, 1538 | "node_modules/wordwrap": { 1539 | "version": "1.0.0", 1540 | "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", 1541 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 1542 | "dev": true 1543 | }, 1544 | "node_modules/workerpool": { 1545 | "version": "6.2.1", 1546 | "resolved": "https://registry.npmmirror.com/workerpool/-/workerpool-6.2.1.tgz", 1547 | "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", 1548 | "dev": true 1549 | }, 1550 | "node_modules/wrap-ansi": { 1551 | "version": "7.0.0", 1552 | "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz", 1553 | "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", 1554 | "dev": true, 1555 | "dependencies": { 1556 | "ansi-styles": "^4.0.0", 1557 | "string-width": "^4.1.0", 1558 | "strip-ansi": "^6.0.0" 1559 | }, 1560 | "engines": { 1561 | "node": ">=10" 1562 | } 1563 | }, 1564 | "node_modules/wrap-ansi/node_modules/ansi-regex": { 1565 | "version": "5.0.0", 1566 | "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1570188570027&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz", 1567 | "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", 1568 | "dev": true, 1569 | "engines": { 1570 | "node": ">=8" 1571 | } 1572 | }, 1573 | "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { 1574 | "version": "3.0.0", 1575 | "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", 1576 | "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", 1577 | "dev": true, 1578 | "engines": { 1579 | "node": ">=8" 1580 | } 1581 | }, 1582 | "node_modules/wrap-ansi/node_modules/string-width": { 1583 | "version": "4.2.2", 1584 | "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1614522241573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz", 1585 | "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", 1586 | "dev": true, 1587 | "dependencies": { 1588 | "emoji-regex": "^8.0.0", 1589 | "is-fullwidth-code-point": "^3.0.0", 1590 | "strip-ansi": "^6.0.0" 1591 | }, 1592 | "engines": { 1593 | "node": ">=8" 1594 | } 1595 | }, 1596 | "node_modules/wrap-ansi/node_modules/strip-ansi": { 1597 | "version": "6.0.0", 1598 | "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", 1599 | "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", 1600 | "dev": true, 1601 | "dependencies": { 1602 | "ansi-regex": "^5.0.0" 1603 | }, 1604 | "engines": { 1605 | "node": ">=8" 1606 | } 1607 | }, 1608 | "node_modules/wrappy": { 1609 | "version": "1.0.2", 1610 | "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", 1611 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1612 | "dev": true 1613 | }, 1614 | "node_modules/y18n": { 1615 | "version": "5.0.5", 1616 | "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.5.tgz?cache=0&sync_timestamp=1609798693274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.5.tgz", 1617 | "integrity": "sha1-h2nsCNA7HqLfJQCs71YXQ7u5qxg=", 1618 | "dev": true, 1619 | "engines": { 1620 | "node": ">=10" 1621 | } 1622 | }, 1623 | "node_modules/yargs": { 1624 | "version": "16.2.0", 1625 | "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-16.2.0.tgz?cache=0&sync_timestamp=1617506342166&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-16.2.0.tgz", 1626 | "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=", 1627 | "dev": true, 1628 | "dependencies": { 1629 | "cliui": "^7.0.2", 1630 | "escalade": "^3.1.1", 1631 | "get-caller-file": "^2.0.5", 1632 | "require-directory": "^2.1.1", 1633 | "string-width": "^4.2.0", 1634 | "y18n": "^5.0.5", 1635 | "yargs-parser": "^20.2.2" 1636 | }, 1637 | "engines": { 1638 | "node": ">=10" 1639 | } 1640 | }, 1641 | "node_modules/yargs-parser": { 1642 | "version": "20.2.4", 1643 | "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-20.2.4.tgz", 1644 | "integrity": "sha1-tCiQ8UVmeW+Fro46JSkNIF8VSlQ=", 1645 | "dev": true, 1646 | "engines": { 1647 | "node": ">=10" 1648 | } 1649 | }, 1650 | "node_modules/yargs-unparser": { 1651 | "version": "2.0.0", 1652 | "resolved": "https://registry.npm.taobao.org/yargs-unparser/download/yargs-unparser-2.0.0.tgz", 1653 | "integrity": "sha1-8TH5ImkRrl2a04xDL+gJNmwjJes=", 1654 | "dev": true, 1655 | "dependencies": { 1656 | "camelcase": "^6.0.0", 1657 | "decamelize": "^4.0.0", 1658 | "flat": "^5.0.2", 1659 | "is-plain-obj": "^2.1.0" 1660 | }, 1661 | "engines": { 1662 | "node": ">=10" 1663 | } 1664 | }, 1665 | "node_modules/yargs/node_modules/ansi-regex": { 1666 | "version": "5.0.0", 1667 | "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1570188570027&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz", 1668 | "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", 1669 | "dev": true, 1670 | "engines": { 1671 | "node": ">=8" 1672 | } 1673 | }, 1674 | "node_modules/yargs/node_modules/is-fullwidth-code-point": { 1675 | "version": "3.0.0", 1676 | "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", 1677 | "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", 1678 | "dev": true, 1679 | "engines": { 1680 | "node": ">=8" 1681 | } 1682 | }, 1683 | "node_modules/yargs/node_modules/string-width": { 1684 | "version": "4.2.2", 1685 | "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1614522241573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz", 1686 | "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", 1687 | "dev": true, 1688 | "dependencies": { 1689 | "emoji-regex": "^8.0.0", 1690 | "is-fullwidth-code-point": "^3.0.0", 1691 | "strip-ansi": "^6.0.0" 1692 | }, 1693 | "engines": { 1694 | "node": ">=8" 1695 | } 1696 | }, 1697 | "node_modules/yargs/node_modules/strip-ansi": { 1698 | "version": "6.0.0", 1699 | "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", 1700 | "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", 1701 | "dev": true, 1702 | "dependencies": { 1703 | "ansi-regex": "^5.0.0" 1704 | }, 1705 | "engines": { 1706 | "node": ">=8" 1707 | } 1708 | }, 1709 | "node_modules/yocto-queue": { 1710 | "version": "0.1.0", 1711 | "resolved": "https://registry.npm.taobao.org/yocto-queue/download/yocto-queue-0.1.0.tgz?cache=0&sync_timestamp=1606290282107&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyocto-queue%2Fdownload%2Fyocto-queue-0.1.0.tgz", 1712 | "integrity": "sha1-ApTrPe4FAo0x7hpfosVWpqrxChs=", 1713 | "dev": true, 1714 | "engines": { 1715 | "node": ">=10" 1716 | } 1717 | } 1718 | }, 1719 | "dependencies": { 1720 | "@types/concat-stream": { 1721 | "version": "1.6.0", 1722 | "resolved": "https://registry.npm.taobao.org/@types/concat-stream/download/@types/concat-stream-1.6.0.tgz", 1723 | "integrity": "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=", 1724 | "requires": { 1725 | "@types/node": "*" 1726 | } 1727 | }, 1728 | "@types/form-data": { 1729 | "version": "0.0.33", 1730 | "resolved": "https://registry.npm.taobao.org/@types/form-data/download/@types/form-data-0.0.33.tgz", 1731 | "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", 1732 | "requires": { 1733 | "@types/node": "*" 1734 | } 1735 | }, 1736 | "@types/node": { 1737 | "version": "10.17.56", 1738 | "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-10.17.56.tgz?cache=0&sync_timestamp=1616803552865&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.17.56.tgz", 1739 | "integrity": "sha1-AQyeBHw/8J3c0Ry7bPWRJyXNwrM=" 1740 | }, 1741 | "@types/qs": { 1742 | "version": "6.9.6", 1743 | "resolved": "https://registry.npm.taobao.org/@types/qs/download/@types/qs-6.9.6.tgz", 1744 | "integrity": "sha1-35w8izGiR+wxXmmWVmvjFx30s7E=" 1745 | }, 1746 | "abbrev": { 1747 | "version": "1.0.9", 1748 | "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.0.9.tgz", 1749 | "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", 1750 | "dev": true 1751 | }, 1752 | "amdefine": { 1753 | "version": "1.0.1", 1754 | "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", 1755 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 1756 | "dev": true, 1757 | "optional": true 1758 | }, 1759 | "ansi-colors": { 1760 | "version": "4.1.1", 1761 | "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz", 1762 | "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=", 1763 | "dev": true 1764 | }, 1765 | "ansi-styles": { 1766 | "version": "4.3.0", 1767 | "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz", 1768 | "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", 1769 | "dev": true, 1770 | "requires": { 1771 | "color-convert": "^2.0.1" 1772 | } 1773 | }, 1774 | "anymatch": { 1775 | "version": "3.1.3", 1776 | "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", 1777 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1778 | "dev": true, 1779 | "requires": { 1780 | "normalize-path": "^3.0.0", 1781 | "picomatch": "^2.0.4" 1782 | } 1783 | }, 1784 | "argparse": { 1785 | "version": "1.0.10", 1786 | "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", 1787 | "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", 1788 | "dev": true, 1789 | "requires": { 1790 | "sprintf-js": "~1.0.2" 1791 | } 1792 | }, 1793 | "asap": { 1794 | "version": "2.0.6", 1795 | "resolved": "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", 1796 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 1797 | }, 1798 | "asciimo": { 1799 | "version": "0.3.1", 1800 | "resolved": "https://registry.npm.taobao.org/asciimo/download/asciimo-0.3.1.tgz", 1801 | "integrity": "sha1-1kBGvz1nAklq3ONFxsS/nNBcDo8=", 1802 | "requires": { 1803 | "colors": ">= 0.3.0" 1804 | } 1805 | }, 1806 | "async": { 1807 | "version": "1.5.2", 1808 | "resolved": "https://registry.npm.taobao.org/async/download/async-1.5.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync%2Fdownload%2Fasync-1.5.2.tgz", 1809 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 1810 | "dev": true 1811 | }, 1812 | "asynckit": { 1813 | "version": "0.4.0", 1814 | "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", 1815 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 1816 | }, 1817 | "balanced-match": { 1818 | "version": "1.0.0", 1819 | "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", 1820 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 1821 | "dev": true 1822 | }, 1823 | "binary-extensions": { 1824 | "version": "2.2.0", 1825 | "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", 1826 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1827 | "dev": true 1828 | }, 1829 | "brace-expansion": { 1830 | "version": "1.1.11", 1831 | "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1614010709807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz", 1832 | "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", 1833 | "dev": true, 1834 | "requires": { 1835 | "balanced-match": "^1.0.0", 1836 | "concat-map": "0.0.1" 1837 | } 1838 | }, 1839 | "braces": { 1840 | "version": "3.0.2", 1841 | "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", 1842 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1843 | "dev": true, 1844 | "requires": { 1845 | "fill-range": "^7.0.1" 1846 | } 1847 | }, 1848 | "browser-stdout": { 1849 | "version": "1.3.1", 1850 | "resolved": "https://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz", 1851 | "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", 1852 | "dev": true 1853 | }, 1854 | "buffer-from": { 1855 | "version": "1.1.1", 1856 | "resolved": "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", 1857 | "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=" 1858 | }, 1859 | "call-bind": { 1860 | "version": "1.0.2", 1861 | "resolved": "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.2.tgz?cache=0&sync_timestamp=1610405478355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.2.tgz", 1862 | "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=", 1863 | "requires": { 1864 | "function-bind": "^1.1.1", 1865 | "get-intrinsic": "^1.0.2" 1866 | } 1867 | }, 1868 | "camelcase": { 1869 | "version": "6.2.0", 1870 | "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.2.0.tgz?cache=0&sync_timestamp=1603921884289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-6.2.0.tgz", 1871 | "integrity": "sha1-kkr4gcnVJaydh/QNlk5c6pgqGAk=", 1872 | "dev": true 1873 | }, 1874 | "caseless": { 1875 | "version": "0.12.0", 1876 | "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", 1877 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 1878 | }, 1879 | "chalk": { 1880 | "version": "4.1.2", 1881 | "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", 1882 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1883 | "dev": true, 1884 | "requires": { 1885 | "ansi-styles": "^4.1.0", 1886 | "supports-color": "^7.1.0" 1887 | }, 1888 | "dependencies": { 1889 | "has-flag": { 1890 | "version": "4.0.0", 1891 | "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", 1892 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1893 | "dev": true 1894 | }, 1895 | "supports-color": { 1896 | "version": "7.2.0", 1897 | "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", 1898 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1899 | "dev": true, 1900 | "requires": { 1901 | "has-flag": "^4.0.0" 1902 | } 1903 | } 1904 | } 1905 | }, 1906 | "chokidar": { 1907 | "version": "3.5.3", 1908 | "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", 1909 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1910 | "dev": true, 1911 | "requires": { 1912 | "anymatch": "~3.1.2", 1913 | "braces": "~3.0.2", 1914 | "fsevents": "~2.3.2", 1915 | "glob-parent": "~5.1.2", 1916 | "is-binary-path": "~2.1.0", 1917 | "is-glob": "~4.0.1", 1918 | "normalize-path": "~3.0.0", 1919 | "readdirp": "~3.6.0" 1920 | } 1921 | }, 1922 | "cliui": { 1923 | "version": "7.0.4", 1924 | "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-7.0.4.tgz", 1925 | "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=", 1926 | "dev": true, 1927 | "requires": { 1928 | "string-width": "^4.2.0", 1929 | "strip-ansi": "^6.0.0", 1930 | "wrap-ansi": "^7.0.0" 1931 | }, 1932 | "dependencies": { 1933 | "ansi-regex": { 1934 | "version": "5.0.0", 1935 | "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1570188570027&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz", 1936 | "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", 1937 | "dev": true 1938 | }, 1939 | "is-fullwidth-code-point": { 1940 | "version": "3.0.0", 1941 | "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", 1942 | "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", 1943 | "dev": true 1944 | }, 1945 | "string-width": { 1946 | "version": "4.2.2", 1947 | "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1614522241573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz", 1948 | "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", 1949 | "dev": true, 1950 | "requires": { 1951 | "emoji-regex": "^8.0.0", 1952 | "is-fullwidth-code-point": "^3.0.0", 1953 | "strip-ansi": "^6.0.0" 1954 | } 1955 | }, 1956 | "strip-ansi": { 1957 | "version": "6.0.0", 1958 | "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", 1959 | "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", 1960 | "dev": true, 1961 | "requires": { 1962 | "ansi-regex": "^5.0.0" 1963 | } 1964 | } 1965 | } 1966 | }, 1967 | "color-convert": { 1968 | "version": "2.0.1", 1969 | "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-2.0.1.tgz", 1970 | "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", 1971 | "dev": true, 1972 | "requires": { 1973 | "color-name": "~1.1.4" 1974 | } 1975 | }, 1976 | "color-name": { 1977 | "version": "1.1.4", 1978 | "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", 1979 | "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", 1980 | "dev": true 1981 | }, 1982 | "colors": { 1983 | "version": "1.4.0", 1984 | "resolved": "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz", 1985 | "integrity": "sha1-xQSRR51MG9rtLJztMs98fcI2D3g=" 1986 | }, 1987 | "combined-stream": { 1988 | "version": "1.0.8", 1989 | "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz", 1990 | "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", 1991 | "requires": { 1992 | "delayed-stream": "~1.0.0" 1993 | } 1994 | }, 1995 | "commander": { 1996 | "version": "10.0.0", 1997 | "resolved": "https://registry.npmmirror.com/commander/-/commander-10.0.0.tgz", 1998 | "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==" 1999 | }, 2000 | "concat-map": { 2001 | "version": "0.0.1", 2002 | "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", 2003 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 2004 | "dev": true 2005 | }, 2006 | "concat-stream": { 2007 | "version": "1.6.2", 2008 | "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", 2009 | "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", 2010 | "requires": { 2011 | "buffer-from": "^1.0.0", 2012 | "inherits": "^2.0.3", 2013 | "readable-stream": "^2.2.2", 2014 | "typedarray": "^0.0.6" 2015 | } 2016 | }, 2017 | "config": { 2018 | "version": "3.3.9", 2019 | "resolved": "https://registry.npmmirror.com/config/-/config-3.3.9.tgz", 2020 | "integrity": "sha512-G17nfe+cY7kR0wVpc49NCYvNtelm/pPy8czHoFkAgtV1lkmcp7DHtWCdDu+C9Z7gb2WVqa9Tm3uF9aKaPbCfhg==", 2021 | "requires": { 2022 | "json5": "^2.2.3" 2023 | } 2024 | }, 2025 | "core-util-is": { 2026 | "version": "1.0.2", 2027 | "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", 2028 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 2029 | }, 2030 | "debug": { 2031 | "version": "4.3.4", 2032 | "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", 2033 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2034 | "dev": true, 2035 | "requires": { 2036 | "ms": "2.1.2" 2037 | }, 2038 | "dependencies": { 2039 | "ms": { 2040 | "version": "2.1.2", 2041 | "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", 2042 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2043 | "dev": true 2044 | } 2045 | } 2046 | }, 2047 | "decamelize": { 2048 | "version": "4.0.0", 2049 | "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-4.0.0.tgz?cache=0&sync_timestamp=1610348666353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-4.0.0.tgz", 2050 | "integrity": "sha1-qkcte/Zg6xXzSU79UxyrfypwmDc=", 2051 | "dev": true 2052 | }, 2053 | "deep-is": { 2054 | "version": "0.1.3", 2055 | "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", 2056 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 2057 | "dev": true 2058 | }, 2059 | "delayed-stream": { 2060 | "version": "1.0.0", 2061 | "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", 2062 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 2063 | }, 2064 | "diff": { 2065 | "version": "5.0.0", 2066 | "resolved": "https://registry.npm.taobao.org/diff/download/diff-5.0.0.tgz?cache=0&sync_timestamp=1604803633979&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-5.0.0.tgz", 2067 | "integrity": "sha1-ftatdthZ0DB4fsNYVfWx2vMdhSs=", 2068 | "dev": true 2069 | }, 2070 | "emoji-regex": { 2071 | "version": "8.0.0", 2072 | "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1614682725186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz", 2073 | "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", 2074 | "dev": true 2075 | }, 2076 | "escalade": { 2077 | "version": "3.1.1", 2078 | "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz", 2079 | "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", 2080 | "dev": true 2081 | }, 2082 | "escape-string-regexp": { 2083 | "version": "4.0.0", 2084 | "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz", 2085 | "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", 2086 | "dev": true 2087 | }, 2088 | "escodegen": { 2089 | "version": "1.8.1", 2090 | "resolved": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.8.1.tgz", 2091 | "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", 2092 | "dev": true, 2093 | "requires": { 2094 | "esprima": "^2.7.1", 2095 | "estraverse": "^1.9.1", 2096 | "esutils": "^2.0.2", 2097 | "optionator": "^0.8.1", 2098 | "source-map": "~0.2.0" 2099 | } 2100 | }, 2101 | "esprima": { 2102 | "version": "2.7.3", 2103 | "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz", 2104 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 2105 | "dev": true 2106 | }, 2107 | "estraverse": { 2108 | "version": "1.9.3", 2109 | "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-1.9.3.tgz?cache=0&sync_timestamp=1596641300398&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-1.9.3.tgz", 2110 | "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", 2111 | "dev": true 2112 | }, 2113 | "esutils": { 2114 | "version": "2.0.3", 2115 | "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz", 2116 | "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", 2117 | "dev": true 2118 | }, 2119 | "fast-levenshtein": { 2120 | "version": "2.0.6", 2121 | "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", 2122 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 2123 | "dev": true 2124 | }, 2125 | "fill-range": { 2126 | "version": "7.0.1", 2127 | "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", 2128 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2129 | "dev": true, 2130 | "requires": { 2131 | "to-regex-range": "^5.0.1" 2132 | } 2133 | }, 2134 | "find-up": { 2135 | "version": "5.0.0", 2136 | "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-5.0.0.tgz?cache=0&sync_timestamp=1597169882796&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-5.0.0.tgz", 2137 | "integrity": "sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=", 2138 | "dev": true, 2139 | "requires": { 2140 | "locate-path": "^6.0.0", 2141 | "path-exists": "^4.0.0" 2142 | } 2143 | }, 2144 | "flat": { 2145 | "version": "5.0.2", 2146 | "resolved": "https://registry.npm.taobao.org/flat/download/flat-5.0.2.tgz", 2147 | "integrity": "sha1-jKb+MyBp/6nTJMMnGYxZglnOskE=", 2148 | "dev": true 2149 | }, 2150 | "form-data": { 2151 | "version": "2.5.1", 2152 | "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.5.1.tgz", 2153 | "integrity": "sha1-8svsV7XlniNxbhKP5E1OXdI4lfQ=", 2154 | "requires": { 2155 | "asynckit": "^0.4.0", 2156 | "combined-stream": "^1.0.6", 2157 | "mime-types": "^2.1.12" 2158 | } 2159 | }, 2160 | "fs.realpath": { 2161 | "version": "1.0.0", 2162 | "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", 2163 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2164 | "dev": true 2165 | }, 2166 | "fsevents": { 2167 | "version": "2.3.2", 2168 | "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", 2169 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2170 | "dev": true, 2171 | "optional": true 2172 | }, 2173 | "function-bind": { 2174 | "version": "1.1.1", 2175 | "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", 2176 | "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" 2177 | }, 2178 | "get-caller-file": { 2179 | "version": "2.0.5", 2180 | "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", 2181 | "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", 2182 | "dev": true 2183 | }, 2184 | "get-intrinsic": { 2185 | "version": "1.1.1", 2186 | "resolved": "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.1.1.tgz?cache=0&sync_timestamp=1612364352840&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-intrinsic%2Fdownload%2Fget-intrinsic-1.1.1.tgz", 2187 | "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=", 2188 | "requires": { 2189 | "function-bind": "^1.1.1", 2190 | "has": "^1.0.3", 2191 | "has-symbols": "^1.0.1" 2192 | } 2193 | }, 2194 | "get-port": { 2195 | "version": "3.2.0", 2196 | "resolved": "https://registry.npm.taobao.org/get-port/download/get-port-3.2.0.tgz?cache=0&sync_timestamp=1596723349303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-port%2Fdownload%2Fget-port-3.2.0.tgz", 2197 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" 2198 | }, 2199 | "glob": { 2200 | "version": "5.0.15", 2201 | "resolved": "https://registry.npm.taobao.org/glob/download/glob-5.0.15.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-5.0.15.tgz", 2202 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 2203 | "dev": true, 2204 | "requires": { 2205 | "inflight": "^1.0.4", 2206 | "inherits": "2", 2207 | "minimatch": "2 || 3", 2208 | "once": "^1.3.0", 2209 | "path-is-absolute": "^1.0.0" 2210 | } 2211 | }, 2212 | "glob-parent": { 2213 | "version": "5.1.2", 2214 | "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", 2215 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2216 | "dev": true, 2217 | "requires": { 2218 | "is-glob": "^4.0.1" 2219 | } 2220 | }, 2221 | "handlebars": { 2222 | "version": "4.7.7", 2223 | "resolved": "https://registry.npm.taobao.org/handlebars/download/handlebars-4.7.7.tgz", 2224 | "integrity": "sha1-nOM0FqrQLb1sj6+oJA1dmABJRaE=", 2225 | "dev": true, 2226 | "requires": { 2227 | "minimist": "^1.2.5", 2228 | "neo-async": "^2.6.0", 2229 | "source-map": "^0.6.1", 2230 | "uglify-js": "^3.1.4", 2231 | "wordwrap": "^1.0.0" 2232 | }, 2233 | "dependencies": { 2234 | "source-map": { 2235 | "version": "0.6.1", 2236 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", 2237 | "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", 2238 | "dev": true 2239 | } 2240 | } 2241 | }, 2242 | "has": { 2243 | "version": "1.0.3", 2244 | "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz", 2245 | "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", 2246 | "requires": { 2247 | "function-bind": "^1.1.1" 2248 | } 2249 | }, 2250 | "has-flag": { 2251 | "version": "1.0.0", 2252 | "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", 2253 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 2254 | "dev": true 2255 | }, 2256 | "has-symbols": { 2257 | "version": "1.0.2", 2258 | "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.2.tgz", 2259 | "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=" 2260 | }, 2261 | "he": { 2262 | "version": "1.2.0", 2263 | "resolved": "http://registry.npm.taobao.org/he/download/he-1.2.0.tgz", 2264 | "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", 2265 | "dev": true 2266 | }, 2267 | "http-basic": { 2268 | "version": "8.1.3", 2269 | "resolved": "https://registry.npm.taobao.org/http-basic/download/http-basic-8.1.3.tgz", 2270 | "integrity": "sha1-p8q+51Joabm3EBNpcIBbEAQmG78=", 2271 | "requires": { 2272 | "caseless": "^0.12.0", 2273 | "concat-stream": "^1.6.2", 2274 | "http-response-object": "^3.0.1", 2275 | "parse-cache-control": "^1.0.1" 2276 | } 2277 | }, 2278 | "http-response-object": { 2279 | "version": "3.0.2", 2280 | "resolved": "https://registry.npm.taobao.org/http-response-object/download/http-response-object-3.0.2.tgz", 2281 | "integrity": "sha1-f0NbshBFTkNg0HTvH5idXqiqmBA=", 2282 | "requires": { 2283 | "@types/node": "^10.0.3" 2284 | } 2285 | }, 2286 | "ignore": { 2287 | "version": "5.2.4", 2288 | "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", 2289 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" 2290 | }, 2291 | "inflight": { 2292 | "version": "1.0.6", 2293 | "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", 2294 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2295 | "dev": true, 2296 | "requires": { 2297 | "once": "^1.3.0", 2298 | "wrappy": "1" 2299 | } 2300 | }, 2301 | "inherits": { 2302 | "version": "2.0.4", 2303 | "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", 2304 | "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" 2305 | }, 2306 | "is-binary-path": { 2307 | "version": "2.1.0", 2308 | "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", 2309 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2310 | "dev": true, 2311 | "requires": { 2312 | "binary-extensions": "^2.0.0" 2313 | } 2314 | }, 2315 | "is-extglob": { 2316 | "version": "2.1.1", 2317 | "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", 2318 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2319 | "dev": true 2320 | }, 2321 | "is-glob": { 2322 | "version": "4.0.3", 2323 | "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", 2324 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2325 | "dev": true, 2326 | "requires": { 2327 | "is-extglob": "^2.1.1" 2328 | } 2329 | }, 2330 | "is-number": { 2331 | "version": "7.0.0", 2332 | "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", 2333 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2334 | "dev": true 2335 | }, 2336 | "is-plain-obj": { 2337 | "version": "2.1.0", 2338 | "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-2.1.0.tgz", 2339 | "integrity": "sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=", 2340 | "dev": true 2341 | }, 2342 | "is-unicode-supported": { 2343 | "version": "0.1.0", 2344 | "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 2345 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 2346 | "dev": true 2347 | }, 2348 | "isarray": { 2349 | "version": "1.0.0", 2350 | "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz", 2351 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 2352 | }, 2353 | "isexe": { 2354 | "version": "2.0.0", 2355 | "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", 2356 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2357 | "dev": true 2358 | }, 2359 | "istanbul": { 2360 | "version": "0.4.5", 2361 | "resolved": "http://registry.npm.taobao.org/istanbul/download/istanbul-0.4.5.tgz", 2362 | "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", 2363 | "dev": true, 2364 | "requires": { 2365 | "abbrev": "1.0.x", 2366 | "async": "1.x", 2367 | "escodegen": "1.8.x", 2368 | "esprima": "2.7.x", 2369 | "glob": "^5.0.15", 2370 | "handlebars": "^4.0.1", 2371 | "js-yaml": "3.x", 2372 | "mkdirp": "0.5.x", 2373 | "nopt": "3.x", 2374 | "once": "1.x", 2375 | "resolve": "1.1.x", 2376 | "supports-color": "^3.1.0", 2377 | "which": "^1.1.1", 2378 | "wordwrap": "^1.0.0" 2379 | } 2380 | }, 2381 | "js-yaml": { 2382 | "version": "3.14.1", 2383 | "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.1.tgz?cache=0&sync_timestamp=1609680109116&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.1.tgz", 2384 | "integrity": "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=", 2385 | "dev": true, 2386 | "requires": { 2387 | "argparse": "^1.0.7", 2388 | "esprima": "^4.0.0" 2389 | }, 2390 | "dependencies": { 2391 | "esprima": { 2392 | "version": "4.0.1", 2393 | "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz", 2394 | "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", 2395 | "dev": true 2396 | } 2397 | } 2398 | }, 2399 | "json5": { 2400 | "version": "2.2.3", 2401 | "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", 2402 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" 2403 | }, 2404 | "levn": { 2405 | "version": "0.3.0", 2406 | "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", 2407 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 2408 | "dev": true, 2409 | "requires": { 2410 | "prelude-ls": "~1.1.2", 2411 | "type-check": "~0.3.2" 2412 | } 2413 | }, 2414 | "locate-path": { 2415 | "version": "6.0.0", 2416 | "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-6.0.0.tgz?cache=0&sync_timestamp=1597081764621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-6.0.0.tgz", 2417 | "integrity": "sha1-VTIeswn+u8WcSAHZMackUqaB0oY=", 2418 | "dev": true, 2419 | "requires": { 2420 | "p-locate": "^5.0.0" 2421 | } 2422 | }, 2423 | "log-symbols": { 2424 | "version": "4.1.0", 2425 | "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", 2426 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 2427 | "dev": true, 2428 | "requires": { 2429 | "chalk": "^4.1.0", 2430 | "is-unicode-supported": "^0.1.0" 2431 | } 2432 | }, 2433 | "mime-db": { 2434 | "version": "1.47.0", 2435 | "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.47.0.tgz?cache=0&sync_timestamp=1617306025156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.47.0.tgz", 2436 | "integrity": "sha1-jLMT5Zll08Bc+/iYkVomevRqM1w=" 2437 | }, 2438 | "mime-types": { 2439 | "version": "2.1.30", 2440 | "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.30.tgz", 2441 | "integrity": "sha1-bnvotMR5gl+F7WMmaV23P5MF1i0=", 2442 | "requires": { 2443 | "mime-db": "1.47.0" 2444 | } 2445 | }, 2446 | "minimatch": { 2447 | "version": "3.0.4", 2448 | "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", 2449 | "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", 2450 | "dev": true, 2451 | "requires": { 2452 | "brace-expansion": "^1.1.7" 2453 | } 2454 | }, 2455 | "minimist": { 2456 | "version": "1.2.5", 2457 | "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz", 2458 | "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", 2459 | "dev": true 2460 | }, 2461 | "mkdirp": { 2462 | "version": "0.5.5", 2463 | "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1593529694459&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz", 2464 | "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", 2465 | "dev": true, 2466 | "requires": { 2467 | "minimist": "^1.2.5" 2468 | } 2469 | }, 2470 | "mocha": { 2471 | "version": "10.2.0", 2472 | "resolved": "https://registry.npmmirror.com/mocha/-/mocha-10.2.0.tgz", 2473 | "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", 2474 | "dev": true, 2475 | "requires": { 2476 | "ansi-colors": "4.1.1", 2477 | "browser-stdout": "1.3.1", 2478 | "chokidar": "3.5.3", 2479 | "debug": "4.3.4", 2480 | "diff": "5.0.0", 2481 | "escape-string-regexp": "4.0.0", 2482 | "find-up": "5.0.0", 2483 | "glob": "7.2.0", 2484 | "he": "1.2.0", 2485 | "js-yaml": "4.1.0", 2486 | "log-symbols": "4.1.0", 2487 | "minimatch": "5.0.1", 2488 | "ms": "2.1.3", 2489 | "nanoid": "3.3.3", 2490 | "serialize-javascript": "6.0.0", 2491 | "strip-json-comments": "3.1.1", 2492 | "supports-color": "8.1.1", 2493 | "workerpool": "6.2.1", 2494 | "yargs": "16.2.0", 2495 | "yargs-parser": "20.2.4", 2496 | "yargs-unparser": "2.0.0" 2497 | }, 2498 | "dependencies": { 2499 | "argparse": { 2500 | "version": "2.0.1", 2501 | "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", 2502 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2503 | "dev": true 2504 | }, 2505 | "glob": { 2506 | "version": "7.2.0", 2507 | "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz", 2508 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 2509 | "dev": true, 2510 | "requires": { 2511 | "fs.realpath": "^1.0.0", 2512 | "inflight": "^1.0.4", 2513 | "inherits": "2", 2514 | "minimatch": "^3.0.4", 2515 | "once": "^1.3.0", 2516 | "path-is-absolute": "^1.0.0" 2517 | }, 2518 | "dependencies": { 2519 | "minimatch": { 2520 | "version": "3.1.2", 2521 | "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", 2522 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2523 | "dev": true, 2524 | "requires": { 2525 | "brace-expansion": "^1.1.7" 2526 | } 2527 | } 2528 | } 2529 | }, 2530 | "has-flag": { 2531 | "version": "4.0.0", 2532 | "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", 2533 | "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", 2534 | "dev": true 2535 | }, 2536 | "js-yaml": { 2537 | "version": "4.1.0", 2538 | "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", 2539 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2540 | "dev": true, 2541 | "requires": { 2542 | "argparse": "^2.0.1" 2543 | } 2544 | }, 2545 | "minimatch": { 2546 | "version": "5.0.1", 2547 | "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.0.1.tgz", 2548 | "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", 2549 | "dev": true, 2550 | "requires": { 2551 | "brace-expansion": "^2.0.1" 2552 | }, 2553 | "dependencies": { 2554 | "brace-expansion": { 2555 | "version": "2.0.1", 2556 | "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", 2557 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 2558 | "dev": true, 2559 | "requires": { 2560 | "balanced-match": "^1.0.0" 2561 | } 2562 | } 2563 | } 2564 | }, 2565 | "supports-color": { 2566 | "version": "8.1.1", 2567 | "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-8.1.1.tgz", 2568 | "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=", 2569 | "dev": true, 2570 | "requires": { 2571 | "has-flag": "^4.0.0" 2572 | } 2573 | } 2574 | } 2575 | }, 2576 | "ms": { 2577 | "version": "2.1.3", 2578 | "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433872491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz", 2579 | "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", 2580 | "dev": true 2581 | }, 2582 | "nanoid": { 2583 | "version": "3.3.3", 2584 | "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.3.tgz", 2585 | "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", 2586 | "dev": true 2587 | }, 2588 | "neo-async": { 2589 | "version": "2.6.2", 2590 | "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz?cache=0&sync_timestamp=1594317447342&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz", 2591 | "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=", 2592 | "dev": true 2593 | }, 2594 | "nopt": { 2595 | "version": "3.0.6", 2596 | "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz?cache=0&sync_timestamp=1597649892953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnopt%2Fdownload%2Fnopt-3.0.6.tgz", 2597 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 2598 | "dev": true, 2599 | "requires": { 2600 | "abbrev": "1" 2601 | } 2602 | }, 2603 | "normalize-path": { 2604 | "version": "3.0.0", 2605 | "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", 2606 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2607 | "dev": true 2608 | }, 2609 | "object-inspect": { 2610 | "version": "1.9.0", 2611 | "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.9.0.tgz?cache=0&sync_timestamp=1606804307501&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.9.0.tgz", 2612 | "integrity": "sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo=" 2613 | }, 2614 | "once": { 2615 | "version": "1.4.0", 2616 | "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", 2617 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2618 | "dev": true, 2619 | "requires": { 2620 | "wrappy": "1" 2621 | } 2622 | }, 2623 | "optionator": { 2624 | "version": "0.8.3", 2625 | "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz", 2626 | "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", 2627 | "dev": true, 2628 | "requires": { 2629 | "deep-is": "~0.1.3", 2630 | "fast-levenshtein": "~2.0.6", 2631 | "levn": "~0.3.0", 2632 | "prelude-ls": "~1.1.2", 2633 | "type-check": "~0.3.2", 2634 | "word-wrap": "~1.2.3" 2635 | } 2636 | }, 2637 | "p-limit": { 2638 | "version": "3.1.0", 2639 | "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1606288809092&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz", 2640 | "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=", 2641 | "dev": true, 2642 | "requires": { 2643 | "yocto-queue": "^0.1.0" 2644 | } 2645 | }, 2646 | "p-locate": { 2647 | "version": "5.0.0", 2648 | "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-5.0.0.tgz?cache=0&sync_timestamp=1597081508945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-5.0.0.tgz", 2649 | "integrity": "sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ=", 2650 | "dev": true, 2651 | "requires": { 2652 | "p-limit": "^3.0.2" 2653 | } 2654 | }, 2655 | "parse-cache-control": { 2656 | "version": "1.0.1", 2657 | "resolved": "https://registry.npm.taobao.org/parse-cache-control/download/parse-cache-control-1.0.1.tgz", 2658 | "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" 2659 | }, 2660 | "path-exists": { 2661 | "version": "4.0.0", 2662 | "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", 2663 | "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", 2664 | "dev": true 2665 | }, 2666 | "path-is-absolute": { 2667 | "version": "1.0.1", 2668 | "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", 2669 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2670 | "dev": true 2671 | }, 2672 | "picomatch": { 2673 | "version": "2.3.1", 2674 | "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", 2675 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2676 | "dev": true 2677 | }, 2678 | "prelude-ls": { 2679 | "version": "1.1.2", 2680 | "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", 2681 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 2682 | "dev": true 2683 | }, 2684 | "process-nextick-args": { 2685 | "version": "2.0.1", 2686 | "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess-nextick-args%2Fdownload%2Fprocess-nextick-args-2.0.1.tgz", 2687 | "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" 2688 | }, 2689 | "promise": { 2690 | "version": "8.1.0", 2691 | "resolved": "https://registry.npm.taobao.org/promise/download/promise-8.1.0.tgz", 2692 | "integrity": "sha1-aXwlw9/nQ13Xn81Yw4oTWIjq8F4=", 2693 | "requires": { 2694 | "asap": "~2.0.6" 2695 | } 2696 | }, 2697 | "qs": { 2698 | "version": "6.10.1", 2699 | "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.10.1.tgz?cache=0&sync_timestamp=1616385328325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.10.1.tgz", 2700 | "integrity": "sha1-STFIL6jWR6Wqt5nFJx0hM7mB+2o=", 2701 | "requires": { 2702 | "side-channel": "^1.0.4" 2703 | } 2704 | }, 2705 | "randombytes": { 2706 | "version": "2.1.0", 2707 | "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", 2708 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2709 | "dev": true, 2710 | "requires": { 2711 | "safe-buffer": "^5.1.0" 2712 | } 2713 | }, 2714 | "readable-stream": { 2715 | "version": "2.3.7", 2716 | "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz", 2717 | "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", 2718 | "requires": { 2719 | "core-util-is": "~1.0.0", 2720 | "inherits": "~2.0.3", 2721 | "isarray": "~1.0.0", 2722 | "process-nextick-args": "~2.0.0", 2723 | "safe-buffer": "~5.1.1", 2724 | "string_decoder": "~1.1.1", 2725 | "util-deprecate": "~1.0.1" 2726 | }, 2727 | "dependencies": { 2728 | "safe-buffer": { 2729 | "version": "5.1.2", 2730 | "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", 2731 | "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" 2732 | } 2733 | } 2734 | }, 2735 | "readdirp": { 2736 | "version": "3.6.0", 2737 | "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", 2738 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2739 | "dev": true, 2740 | "requires": { 2741 | "picomatch": "^2.2.1" 2742 | } 2743 | }, 2744 | "require-directory": { 2745 | "version": "2.1.1", 2746 | "resolved": "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", 2747 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 2748 | "dev": true 2749 | }, 2750 | "resolve": { 2751 | "version": "1.1.7", 2752 | "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz", 2753 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 2754 | "dev": true 2755 | }, 2756 | "safe-buffer": { 2757 | "version": "5.2.1", 2758 | "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", 2759 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2760 | "dev": true 2761 | }, 2762 | "serialize-javascript": { 2763 | "version": "6.0.0", 2764 | "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 2765 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 2766 | "dev": true, 2767 | "requires": { 2768 | "randombytes": "^2.1.0" 2769 | } 2770 | }, 2771 | "side-channel": { 2772 | "version": "1.0.4", 2773 | "resolved": "https://registry.npm.taobao.org/side-channel/download/side-channel-1.0.4.tgz", 2774 | "integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=", 2775 | "requires": { 2776 | "call-bind": "^1.0.0", 2777 | "get-intrinsic": "^1.0.2", 2778 | "object-inspect": "^1.9.0" 2779 | } 2780 | }, 2781 | "source-map": { 2782 | "version": "0.2.0", 2783 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.2.0.tgz", 2784 | "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", 2785 | "dev": true, 2786 | "optional": true, 2787 | "requires": { 2788 | "amdefine": ">=0.0.4" 2789 | } 2790 | }, 2791 | "sprintf-js": { 2792 | "version": "1.0.3", 2793 | "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", 2794 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2795 | "dev": true 2796 | }, 2797 | "string_decoder": { 2798 | "version": "1.1.1", 2799 | "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", 2800 | "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", 2801 | "requires": { 2802 | "safe-buffer": "~5.1.0" 2803 | }, 2804 | "dependencies": { 2805 | "safe-buffer": { 2806 | "version": "5.1.2", 2807 | "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", 2808 | "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" 2809 | } 2810 | } 2811 | }, 2812 | "strip-json-comments": { 2813 | "version": "3.1.1", 2814 | "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567555399&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz", 2815 | "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", 2816 | "dev": true 2817 | }, 2818 | "supports-color": { 2819 | "version": "3.2.3", 2820 | "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", 2821 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", 2822 | "dev": true, 2823 | "requires": { 2824 | "has-flag": "^1.0.0" 2825 | } 2826 | }, 2827 | "sync-request": { 2828 | "version": "6.1.0", 2829 | "resolved": "https://registry.npm.taobao.org/sync-request/download/sync-request-6.1.0.tgz", 2830 | "integrity": "sha1-6WIXVlteULv/4XmGi6dVMvtZfmg=", 2831 | "requires": { 2832 | "http-response-object": "^3.0.1", 2833 | "sync-rpc": "^1.2.1", 2834 | "then-request": "^6.0.0" 2835 | } 2836 | }, 2837 | "sync-rpc": { 2838 | "version": "1.3.6", 2839 | "resolved": "https://registry.npm.taobao.org/sync-rpc/download/sync-rpc-1.3.6.tgz", 2840 | "integrity": "sha1-suiyVQoSzLxx34ZEgQUp3raGZac=", 2841 | "requires": { 2842 | "get-port": "^3.1.0" 2843 | } 2844 | }, 2845 | "then-request": { 2846 | "version": "6.0.2", 2847 | "resolved": "https://registry.npm.taobao.org/then-request/download/then-request-6.0.2.tgz", 2848 | "integrity": "sha1-7Bjdi1ykOq7ly5L35MFjDpUNTww=", 2849 | "requires": { 2850 | "@types/concat-stream": "^1.6.0", 2851 | "@types/form-data": "0.0.33", 2852 | "@types/node": "^8.0.0", 2853 | "@types/qs": "^6.2.31", 2854 | "caseless": "~0.12.0", 2855 | "concat-stream": "^1.6.0", 2856 | "form-data": "^2.2.0", 2857 | "http-basic": "^8.1.1", 2858 | "http-response-object": "^3.0.1", 2859 | "promise": "^8.0.0", 2860 | "qs": "^6.4.0" 2861 | }, 2862 | "dependencies": { 2863 | "@types/node": { 2864 | "version": "8.10.66", 2865 | "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.10.66.tgz?cache=0&sync_timestamp=1616803552865&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-8.10.66.tgz", 2866 | "integrity": "sha1-3QNdQJ3zIqzIPf9ipgLxKleDu7M=" 2867 | } 2868 | } 2869 | }, 2870 | "to-regex-range": { 2871 | "version": "5.0.1", 2872 | "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", 2873 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2874 | "dev": true, 2875 | "requires": { 2876 | "is-number": "^7.0.0" 2877 | } 2878 | }, 2879 | "type-check": { 2880 | "version": "0.3.2", 2881 | "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", 2882 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2883 | "dev": true, 2884 | "requires": { 2885 | "prelude-ls": "~1.1.2" 2886 | } 2887 | }, 2888 | "typedarray": { 2889 | "version": "0.0.6", 2890 | "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", 2891 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 2892 | }, 2893 | "uglify-js": { 2894 | "version": "3.13.3", 2895 | "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.13.3.tgz?cache=0&sync_timestamp=1616975941247&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.13.3.tgz", 2896 | "integrity": "sha1-znKhrRVDSOoq9h9Qkzx2zIgCJ24=", 2897 | "dev": true, 2898 | "optional": true 2899 | }, 2900 | "util-deprecate": { 2901 | "version": "1.0.2", 2902 | "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", 2903 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2904 | }, 2905 | "which": { 2906 | "version": "1.3.1", 2907 | "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz", 2908 | "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", 2909 | "dev": true, 2910 | "requires": { 2911 | "isexe": "^2.0.0" 2912 | } 2913 | }, 2914 | "word-wrap": { 2915 | "version": "1.2.3", 2916 | "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz", 2917 | "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", 2918 | "dev": true 2919 | }, 2920 | "wordwrap": { 2921 | "version": "1.0.0", 2922 | "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", 2923 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 2924 | "dev": true 2925 | }, 2926 | "workerpool": { 2927 | "version": "6.2.1", 2928 | "resolved": "https://registry.npmmirror.com/workerpool/-/workerpool-6.2.1.tgz", 2929 | "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", 2930 | "dev": true 2931 | }, 2932 | "wrap-ansi": { 2933 | "version": "7.0.0", 2934 | "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz", 2935 | "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", 2936 | "dev": true, 2937 | "requires": { 2938 | "ansi-styles": "^4.0.0", 2939 | "string-width": "^4.1.0", 2940 | "strip-ansi": "^6.0.0" 2941 | }, 2942 | "dependencies": { 2943 | "ansi-regex": { 2944 | "version": "5.0.0", 2945 | "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1570188570027&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz", 2946 | "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", 2947 | "dev": true 2948 | }, 2949 | "is-fullwidth-code-point": { 2950 | "version": "3.0.0", 2951 | "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", 2952 | "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", 2953 | "dev": true 2954 | }, 2955 | "string-width": { 2956 | "version": "4.2.2", 2957 | "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1614522241573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz", 2958 | "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", 2959 | "dev": true, 2960 | "requires": { 2961 | "emoji-regex": "^8.0.0", 2962 | "is-fullwidth-code-point": "^3.0.0", 2963 | "strip-ansi": "^6.0.0" 2964 | } 2965 | }, 2966 | "strip-ansi": { 2967 | "version": "6.0.0", 2968 | "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", 2969 | "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", 2970 | "dev": true, 2971 | "requires": { 2972 | "ansi-regex": "^5.0.0" 2973 | } 2974 | } 2975 | } 2976 | }, 2977 | "wrappy": { 2978 | "version": "1.0.2", 2979 | "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", 2980 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2981 | "dev": true 2982 | }, 2983 | "y18n": { 2984 | "version": "5.0.5", 2985 | "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.5.tgz?cache=0&sync_timestamp=1609798693274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.5.tgz", 2986 | "integrity": "sha1-h2nsCNA7HqLfJQCs71YXQ7u5qxg=", 2987 | "dev": true 2988 | }, 2989 | "yargs": { 2990 | "version": "16.2.0", 2991 | "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-16.2.0.tgz?cache=0&sync_timestamp=1617506342166&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-16.2.0.tgz", 2992 | "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=", 2993 | "dev": true, 2994 | "requires": { 2995 | "cliui": "^7.0.2", 2996 | "escalade": "^3.1.1", 2997 | "get-caller-file": "^2.0.5", 2998 | "require-directory": "^2.1.1", 2999 | "string-width": "^4.2.0", 3000 | "y18n": "^5.0.5", 3001 | "yargs-parser": "^20.2.2" 3002 | }, 3003 | "dependencies": { 3004 | "ansi-regex": { 3005 | "version": "5.0.0", 3006 | "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1570188570027&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz", 3007 | "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", 3008 | "dev": true 3009 | }, 3010 | "is-fullwidth-code-point": { 3011 | "version": "3.0.0", 3012 | "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", 3013 | "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", 3014 | "dev": true 3015 | }, 3016 | "string-width": { 3017 | "version": "4.2.2", 3018 | "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz?cache=0&sync_timestamp=1614522241573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.2.tgz", 3019 | "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", 3020 | "dev": true, 3021 | "requires": { 3022 | "emoji-regex": "^8.0.0", 3023 | "is-fullwidth-code-point": "^3.0.0", 3024 | "strip-ansi": "^6.0.0" 3025 | } 3026 | }, 3027 | "strip-ansi": { 3028 | "version": "6.0.0", 3029 | "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", 3030 | "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", 3031 | "dev": true, 3032 | "requires": { 3033 | "ansi-regex": "^5.0.0" 3034 | } 3035 | } 3036 | } 3037 | }, 3038 | "yargs-parser": { 3039 | "version": "20.2.4", 3040 | "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-20.2.4.tgz", 3041 | "integrity": "sha1-tCiQ8UVmeW+Fro46JSkNIF8VSlQ=", 3042 | "dev": true 3043 | }, 3044 | "yargs-unparser": { 3045 | "version": "2.0.0", 3046 | "resolved": "https://registry.npm.taobao.org/yargs-unparser/download/yargs-unparser-2.0.0.tgz", 3047 | "integrity": "sha1-8TH5ImkRrl2a04xDL+gJNmwjJes=", 3048 | "dev": true, 3049 | "requires": { 3050 | "camelcase": "^6.0.0", 3051 | "decamelize": "^4.0.0", 3052 | "flat": "^5.0.2", 3053 | "is-plain-obj": "^2.1.0" 3054 | } 3055 | }, 3056 | "yocto-queue": { 3057 | "version": "0.1.0", 3058 | "resolved": "https://registry.npm.taobao.org/yocto-queue/download/yocto-queue-0.1.0.tgz?cache=0&sync_timestamp=1606290282107&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyocto-queue%2Fdownload%2Fyocto-queue-0.1.0.tgz", 3059 | "integrity": "sha1-ApTrPe4FAo0x7hpfosVWpqrxChs=", 3060 | "dev": true 3061 | } 3062 | } 3063 | } 3064 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@snowdream/gitm", 3 | "description": "A simple but useful tool to manage multiple git repositories.", 4 | "version": "0.4.8", 5 | "author": "snowdream ", 6 | "homepage": "https://github.com/snowdream/gitm", 7 | "keywords": [ 8 | "nodejs", 9 | "git", 10 | "tools" 11 | ], 12 | "scripts": { 13 | "test": "./node_modules/.bin/mocha --reporter spec", 14 | "mocha": "./node_modules/.bin/mocha --reporter spec", 15 | "cov": "./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha*" 16 | }, 17 | "main": "index.js", 18 | "bin": { 19 | "gitm": "./bin/gitm" 20 | }, 21 | "maintainers": [ 22 | { 23 | "name": "snowdream", 24 | "email": "sn0wdr1am@icloud.com" 25 | } 26 | ], 27 | "contributors": [ 28 | { 29 | "name": "snowdream", 30 | "web": "http://snowdream.github.io/" 31 | } 32 | ], 33 | "bugs": { 34 | "mail": "sn0wdr1am@icloud.com", 35 | "url": "https://github.com/snowdream/gitm/issues" 36 | }, 37 | "licenses": [ 38 | { 39 | "type": "Apache License, Version 2.0", 40 | "url": "http://www.apache.org/licenses/LICENSE-2.0.html" 41 | } 42 | ], 43 | "repository": { 44 | "type": "git", 45 | "url": "git://github.com/snowdream/gitm.git" 46 | }, 47 | "dependencies": { 48 | "asciimo": "^0.3.1", 49 | "commander": "^10.0.0", 50 | "config": "^3.3.9", 51 | "ignore": "^5.2.4", 52 | "sync-request": "^6.1.0" 53 | }, 54 | "devDependencies": { 55 | "istanbul": "^0.4.4", 56 | "mocha": "^10.2.0" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | var assert = require('assert'); 2 | describe('Array', function() { 3 | describe('#indexOf()', function() { 4 | it('should return -1 when the value is not present', function() { 5 | assert.equal(-1, [1,2,3].indexOf(4)); 6 | }); 7 | }); 8 | }); --------------------------------------------------------------------------------