├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── .travis.yml ├── LICENSE ├── README.md ├── autoshot.sh ├── examples ├── Cargo.lock ├── Cargo.toml ├── Pipfile ├── Pipfile.lock ├── package-lock.json ├── package.json ├── poetry.lock ├── pyproject.toml ├── requirements.txt └── yarn.lock ├── package-lock.json ├── package.json ├── plugin └── vim-package-info.vim ├── rplugin └── node │ └── vim-package-info │ ├── .eslintrc.js │ ├── diff.js │ ├── index.js │ ├── more.js │ ├── parsers │ ├── cargo.js │ ├── package-json.js │ ├── pipfile.js │ ├── pyproject-toml.js │ └── requirements-txt.js │ ├── render.js │ ├── render_utils.js │ ├── utils.js │ └── vulnerability.js └── test ├── file_test.js ├── mocha.opts ├── options.js ├── package-json_test.js ├── setup.js └── test.js /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "es6": true, 4 | "node": true 5 | }, 6 | "extends": "eslint:recommended", 7 | "parserOptions": { 8 | "ecmaVersion": 2016, 9 | "sourceType": "module" 10 | }, 11 | "rules": { 12 | "indent": [ 13 | "error", 14 | 2, 15 | { 16 | "SwitchCase": 1 17 | } 18 | ], 19 | "linebreak-style": [ 20 | "error", 21 | "unix" 22 | ], 23 | "quotes": [ 24 | "error", 25 | "double" 26 | ], 27 | "semi": [ 28 | "error", 29 | "always" 30 | ] 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | log.txt 4 | images 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | printWidth: 100 2 | tabWidth: 2 3 | singleQuote: false 4 | bracketSpacing: true 5 | trailingComma: es5 6 | semi: true 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "8" 4 | - "9" 5 | - "10" 6 | - "11" 7 | -------------------------------------------------------------------------------- /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, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vim-package-info ![](https://travis-ci.org/meain/vim-package-info.svg?branch=master) 2 | 3 | It lets you view the latest version of the packages you depend on and see if any of them are vulnerable. 4 | 5 | > Vulnerability detection is still a work in progress ([disabled at the moment](https://ossindex.sonatype.org/doc/legacy-migration)) 6 | 7 | ![](https://i.imgur.com/pzIrEkq.png) 8 | 9 | **Currently supports:** 10 | * javascript: 11 | * `package.json` 12 | * rust: 13 | * `Cargo.toml` 14 | * python: 15 | * `requirements.txt` 16 | * `Pipfile` 17 | * `pyproject.toml` 18 | 19 | 20 | 21 | Default colors: 22 | 23 | - `green`: patch update 24 | - `cyan`: minor update 25 | - `red`: major update 26 | 27 | ## Installation 28 | 29 | > Make sure you have node support for neovim. 30 | > Run the command `npm install -g neovim` to add it. [#20](https://github.com/meain/vim-package-info/issues/20) 31 | 32 | Use your favorite plugin manager to install the plugin. 33 | I use [vim-plug](https://github.com/junegunn/vim-plug). 34 | 35 | ```vim 36 | Plug 'meain/vim-package-info', { 'do': 'npm install' } 37 | ``` 38 | 39 | After installing the plugin, run `:UpdateRemotePlugins` to register it with Neovim. 40 | 41 | --- 42 | 43 | Needs virtual text support. ( Neovim 0.3.2 ) 44 | 45 | > Check if `echo has('nvim-0.3.2')` returns 1 46 | 47 | ## Configuration 48 | 49 | #### Change prefix 50 | 51 | ``` 52 | let g:vim_package_info_virutaltext_prefix = ' ¤ ' 53 | ``` 54 | 55 | ### Change highlight group 56 | 57 | ``` 58 | let g:vim_package_info_virutaltext_highlight = 'NonText' 59 | ``` 60 | 61 | There are three other highlight groups that you can change. 62 | You can change them like this 63 | 64 | ``` 65 | hi VimPackageInfoPatch guifg=#8BC34A 66 | hi VimPackageInfoMinor guifg=#00BCD4 67 | hi VimPackageInfoMajor guifg=#F44336 68 | ``` 69 | 70 | ## Possible issues 71 | 72 | The plugin might conflict with [ALE](https://github.com/w0rp/ale) or any other plugins that use `virtualtext`. 73 | This is because `virtualtext` context is the same for all the plugins and if one clears the `virtualtext` 74 | it will clear the `virutaltext` that was made by all plugins. 75 | 76 | Not a lot can be done about this, but in the case of ALE you can checkout [#14](https://github.com/meain/vim-package-info/issues/14). 77 | 78 | ## Alternatives 79 | 80 | Other options for you to checkout if this does not work for you 81 | 82 | - [akinsho/dependency-assist.nvim](https://github.com/akinsho/dependency-assist.nvim) 83 | - [vuki656/package-info.nvim](https://github.com/vuki656/package-info.nvim) 84 | - [mhinz/vim-crates](https://github.com/mhinz/vim-crates) 85 | -------------------------------------------------------------------------------- /autoshot.sh: -------------------------------------------------------------------------------- 1 | rm -rf images && mkdir images 2 | printf "|\n|\n|" >images/table.md 3 | shoot() { 4 | echo $2 5 | (alacritty --position 100 20 -d 50 25 -e "$SHELL" -c "nvim $PWD/examples/$1 -c ':silent! /dependen' -c ':noh'") & 6 | PR_PID=$! 7 | sleep 50 # just wanna be liberal 8 | screencapture -R 100,263,450,505 "images/$2.png" 9 | 10 | kill -9 $PR_PID 11 | 12 | IMGUR_URL=$(~/.bin/imgurupload "images/$2.png" | head -n 1) 13 | L1=$(head -n 1 images/table.md) 14 | NL1="$L1![]($IMGUR_URL)|" 15 | 16 | MID=$(tail -n 2 images/table.md | head -n 1) 17 | 18 | L2=$(tail -n 1 images/table.md) 19 | NL2="$L2$2|" 20 | 21 | printf "$NL1\n$MID:---:|\n$NL2" >images/table.md 22 | } 23 | 24 | if [ -z $1 ]; then 25 | for file in $(ls examples); do 26 | shoot "$file" "$(basename $file)" 27 | done 28 | else 29 | shoot "$1" "$(basename $1)" 30 | fi 31 | -------------------------------------------------------------------------------- /examples/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "ansi_term" 5 | version = "0.11.0" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | dependencies = [ 8 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 9 | ] 10 | 11 | [[package]] 12 | name = "atty" 13 | version = "0.2.12" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | dependencies = [ 16 | "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", 17 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 18 | ] 19 | 20 | [[package]] 21 | name = "bitflags" 22 | version = "1.1.0" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | 25 | [[package]] 26 | name = "cfg-if" 27 | version = "0.1.9" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | 30 | [[package]] 31 | name = "clap" 32 | version = "2.33.0" 33 | source = "registry+https://github.com/rust-lang/crates.io-index" 34 | dependencies = [ 35 | "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 36 | "atty 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", 37 | "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 38 | "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 39 | "term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 40 | "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 41 | "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 42 | "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 43 | ] 44 | 45 | [[package]] 46 | name = "filetime" 47 | version = "0.2.6" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | dependencies = [ 50 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 51 | "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", 52 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 53 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 54 | ] 55 | 56 | [[package]] 57 | name = "fuchsia-cprng" 58 | version = "0.1.1" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | 61 | [[package]] 62 | name = "kernel32-sys" 63 | version = "0.2.2" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | dependencies = [ 66 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 67 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 68 | ] 69 | 70 | [[package]] 71 | name = "libc" 72 | version = "0.2.59" 73 | source = "registry+https://github.com/rust-lang/crates.io-index" 74 | 75 | [[package]] 76 | name = "lscolors" 77 | version = "0.5.0" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | dependencies = [ 80 | "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 81 | ] 82 | 83 | [[package]] 84 | name = "proc-macro2" 85 | version = "0.4.30" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | dependencies = [ 88 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 89 | ] 90 | 91 | [[package]] 92 | name = "quote" 93 | version = "0.6.13" 94 | source = "registry+https://github.com/rust-lang/crates.io-index" 95 | dependencies = [ 96 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 97 | ] 98 | 99 | [[package]] 100 | name = "rand" 101 | version = "0.4.6" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | dependencies = [ 104 | "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 105 | "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", 106 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 107 | "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 108 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 109 | ] 110 | 111 | [[package]] 112 | name = "rand_core" 113 | version = "0.3.1" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | dependencies = [ 116 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 117 | ] 118 | 119 | [[package]] 120 | name = "rand_core" 121 | version = "0.4.0" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | 124 | [[package]] 125 | name = "rdrand" 126 | version = "0.4.0" 127 | source = "registry+https://github.com/rust-lang/crates.io-index" 128 | dependencies = [ 129 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 130 | ] 131 | 132 | [[package]] 133 | name = "redox_syscall" 134 | version = "0.1.56" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | 137 | [[package]] 138 | name = "remove_dir_all" 139 | version = "0.5.2" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | dependencies = [ 142 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 143 | ] 144 | 145 | [[package]] 146 | name = "serde" 147 | version = "1.0.94" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | dependencies = [ 150 | "serde_derive 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", 151 | ] 152 | 153 | [[package]] 154 | name = "serde_derive" 155 | version = "1.0.94" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | dependencies = [ 158 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 159 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 160 | "syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)", 161 | ] 162 | 163 | [[package]] 164 | name = "something" 165 | version = "0.14.0" 166 | dependencies = [ 167 | "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 168 | "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", 169 | "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", 170 | "lscolors 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 171 | "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", 172 | "tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", 173 | "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 174 | "users 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 175 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 176 | ] 177 | 178 | [[package]] 179 | name = "strsim" 180 | version = "0.8.0" 181 | source = "registry+https://github.com/rust-lang/crates.io-index" 182 | 183 | [[package]] 184 | name = "syn" 185 | version = "0.15.39" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | dependencies = [ 188 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 189 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 190 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 191 | ] 192 | 193 | [[package]] 194 | name = "tar" 195 | version = "0.4.26" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | dependencies = [ 198 | "filetime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 199 | "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", 200 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 201 | "xattr 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 202 | ] 203 | 204 | [[package]] 205 | name = "tempdir" 206 | version = "0.3.7" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | dependencies = [ 209 | "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 210 | "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 211 | ] 212 | 213 | [[package]] 214 | name = "term_size" 215 | version = "0.3.1" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | dependencies = [ 218 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 219 | "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", 220 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 221 | ] 222 | 223 | [[package]] 224 | name = "textwrap" 225 | version = "0.11.0" 226 | source = "registry+https://github.com/rust-lang/crates.io-index" 227 | dependencies = [ 228 | "term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 229 | "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 230 | ] 231 | 232 | [[package]] 233 | name = "unicode-width" 234 | version = "0.1.5" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | 237 | [[package]] 238 | name = "unicode-xid" 239 | version = "0.1.0" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | 242 | [[package]] 243 | name = "users" 244 | version = "0.8.1" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | dependencies = [ 247 | "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", 248 | ] 249 | 250 | [[package]] 251 | name = "vec_map" 252 | version = "0.8.1" 253 | source = "registry+https://github.com/rust-lang/crates.io-index" 254 | 255 | [[package]] 256 | name = "version_check" 257 | version = "0.1.5" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | 260 | [[package]] 261 | name = "winapi" 262 | version = "0.2.8" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | 265 | [[package]] 266 | name = "winapi" 267 | version = "0.3.7" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | dependencies = [ 270 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 271 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 272 | ] 273 | 274 | [[package]] 275 | name = "winapi-build" 276 | version = "0.1.1" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | 279 | [[package]] 280 | name = "winapi-i686-pc-windows-gnu" 281 | version = "0.4.0" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | 284 | [[package]] 285 | name = "winapi-x86_64-pc-windows-gnu" 286 | version = "0.4.0" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | 289 | [[package]] 290 | name = "xattr" 291 | version = "0.2.2" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | dependencies = [ 294 | "libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", 295 | ] 296 | 297 | [metadata] 298 | "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 299 | "checksum atty 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "ecaaea69f52b3b18633611ec0007d188517d0366f47ff703d400fa6879d6f8d5" 300 | "checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd" 301 | "checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" 302 | "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" 303 | "checksum filetime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "450537dc346f0c4d738dda31e790da1da5d4bd12145aad4da0d03d713cb3794f" 304 | "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 305 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 306 | "checksum libc 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "3262021842bf00fe07dbd6cf34ff25c99d7a7ebef8deea84db72be3ea3bb0aff" 307 | "checksum lscolors 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e9938fd8c379393454f73ec4c9c5b40f3d8332d80b25a29da05e41ee0ecbb559" 308 | "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" 309 | "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" 310 | "checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" 311 | "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 312 | "checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" 313 | "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 314 | "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" 315 | "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" 316 | "checksum serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)" = "076a696fdea89c19d3baed462576b8f6d663064414b5c793642da8dfeb99475b" 317 | "checksum serde_derive 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)" = "ef45eb79d6463b22f5f9e16d283798b7c0175ba6050bc25c1a946c122727fe7b" 318 | "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 319 | "checksum syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d960b829a55e56db167e861ddb43602c003c7be0bee1d345021703fac2fb7c" 320 | "checksum tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)" = "b3196bfbffbba3e57481b6ea32249fbaf590396a52505a2615adbb79d9d826d3" 321 | "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" 322 | "checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327" 323 | "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 324 | "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" 325 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 326 | "checksum users 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fed7d0912567d35f88010c23dbaf865e9da8b5227295e8dc0f2fdd109155ab7" 327 | "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" 328 | "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 329 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 330 | "checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" 331 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 332 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 333 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 334 | "checksum xattr 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" 335 | -------------------------------------------------------------------------------- /examples/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | authors = ["Some dude"] 3 | build = "build.rs" 4 | categories = ["command-line-utilities"] 5 | description = "Something" 6 | keywords = ["ls"] 7 | license = "Apache-2.0" 8 | name = "something" 9 | readme = "./README.md" 10 | repository = "https://github.com/meain/test" 11 | version = "0.14.0" 12 | edition = "2018" 13 | 14 | [[bin]] 15 | name = "something" 16 | path = "src/main.rs" 17 | 18 | [build-dependencies] 19 | clap = "2.32.0" 20 | version_check = "0.1.3" 21 | 22 | [dependencies] 23 | tar = '0.4.5' 24 | ansi_term = "0.11.0" 25 | libc = "0.2.44" 26 | serde = { version = "~1.0", features = ["derive"] } 27 | users = "0.8.0" 28 | lscolors = "0.5.0" 29 | 30 | [dependencies.clap] 31 | features = ["suggestions", "color", "wrap_help"] 32 | version = "2.32.0" 33 | 34 | [dev-dependencies] 35 | tempdir = "0.3.7" 36 | 37 | [features] 38 | sudo = [] 39 | -------------------------------------------------------------------------------- /examples/Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | name = "pypi" 3 | url = "https://pypi.org/simple" 4 | verify_ssl = true 5 | 6 | [dev-packages] 7 | "flake8" = ">=3.5.0" 8 | pylint = ">=2.1.1" 9 | 10 | [packages] 11 | guessit = ">=3.0.0" 12 | tvdb-api = ">=2.0" 13 | imdbpy = ">=6.6" 14 | musicbrainzngs = ">=0.6" 15 | 16 | [requires] 17 | python_version = "3.6" 18 | -------------------------------------------------------------------------------- /examples/Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "490d812fafc669b5323b206a61a6ddf62bc371552fc6f8f7b24d61af5587c7d8" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.6" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "babelfish": { 20 | "hashes": [ 21 | "sha256:8380879fa51164ac54a3e393f83c4551a275f03617f54a99d70151358e444104" 22 | ], 23 | "version": "==0.5.5" 24 | }, 25 | "certifi": { 26 | "hashes": [ 27 | "sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939", 28 | "sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695" 29 | ], 30 | "version": "==2019.6.16" 31 | }, 32 | "chardet": { 33 | "hashes": [ 34 | "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", 35 | "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" 36 | ], 37 | "version": "==3.0.4" 38 | }, 39 | "guessit": { 40 | "hashes": [ 41 | "sha256:37803ec0d7f20f2e1425dfe3bb978dc3b9c65872aa3760c664b31a9115232ec1" 42 | ], 43 | "index": "pypi", 44 | "version": "==3.0.4" 45 | }, 46 | "idna": { 47 | "hashes": [ 48 | "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", 49 | "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" 50 | ], 51 | "version": "==2.8" 52 | }, 53 | "imdbpy": { 54 | "hashes": [ 55 | "sha256:4be128c9c3243ff57c880baf6e5967888c9f3db7f536464b20280ecaf04bdace", 56 | "sha256:7d3fce6ad95cf38c78f0df6c7d4094df932b42379c5d578f6ec8164918bd1100" 57 | ], 58 | "index": "pypi", 59 | "version": "==6.7" 60 | }, 61 | "lxml": { 62 | "hashes": [ 63 | "sha256:06c7616601430aa140a69f97e3116308fffe0848f543b639a5ec2e8920ae72fd", 64 | "sha256:177202792f9842374a8077735c69c41a4282183f7851443d2beb8ee310720819", 65 | "sha256:19317ad721ceb9e39847d11131903931e2794e447d4751ebb0d9236f1b349ff2", 66 | "sha256:36d206e62f3e5dbaafd4ec692b67157e271f5da7fd925fda8515da675eace50d", 67 | "sha256:387115b066c797c85f9861a9613abf50046a15aac16759bc92d04f94acfad082", 68 | "sha256:3ce1c49d4b4a7bc75fb12acb3a6247bb7a91fe420542e6d671ba9187d12a12c2", 69 | "sha256:4d2a5a7d6b0dbb8c37dab66a8ce09a8761409c044017721c21718659fa3365a1", 70 | "sha256:58d0a1b33364d1253a88d18df6c0b2676a1746d27c969dc9e32d143a3701dda5", 71 | "sha256:62a651c618b846b88fdcae0533ec23f185bb322d6c1845733f3123e8980c1d1b", 72 | "sha256:69ff21064e7debc9b1b1e2eee8c2d686d042d4257186d70b338206a80c5bc5ea", 73 | "sha256:7060453eba9ba59d821625c6af6a266bd68277dce6577f754d1eb9116c094266", 74 | "sha256:7d26b36a9c4bce53b9cfe42e67849ae3c5c23558bc08363e53ffd6d94f4ff4d2", 75 | "sha256:83b427ad2bfa0b9705e02a83d8d607d2c2f01889eb138168e462a3a052c42368", 76 | "sha256:923d03c84534078386cf50193057aae98fa94cace8ea7580b74754493fda73ad", 77 | "sha256:b773715609649a1a180025213f67ffdeb5a4878c784293ada300ee95a1f3257b", 78 | "sha256:baff149c174e9108d4a2fee192c496711be85534eab63adb122f93e70aa35431", 79 | "sha256:bca9d118b1014b4c2d19319b10a3ebed508ff649396ce1855e1c96528d9b2fa9", 80 | "sha256:ce580c28845581535dc6000fc7c35fdadf8bea7ccb57d6321b044508e9ba0685", 81 | "sha256:d34923a569e70224d88e6682490e24c842907ba2c948c5fd26185413cbe0cd96", 82 | "sha256:dd9f0e531a049d8b35ec5e6c68a37f1ba6ec3a591415e6804cbdf652793d15d7", 83 | "sha256:ecb805cbfe9102f3fd3d2ef16dfe5ae9e2d7a7dfbba92f4ff1e16ac9784dbfb0", 84 | "sha256:ede9aad2197a0202caff35d417b671f5f91a3631477441076082a17c94edd846", 85 | "sha256:ef2d1fc370400e0aa755aab0b20cf4f1d0e934e7fd5244f3dd4869078e4942b9", 86 | "sha256:f2fec194a49bfaef42a548ee657362af5c7a640da757f6f452a35da7dd9f923c" 87 | ], 88 | "version": "==4.3.4" 89 | }, 90 | "musicbrainzngs": { 91 | "hashes": [ 92 | "sha256:28ef261a421dffde0a25281dab1ab214e1b407eec568cd05a53e73256f56adb5" 93 | ], 94 | "index": "pypi", 95 | "version": "==0.6" 96 | }, 97 | "python-dateutil": { 98 | "hashes": [ 99 | "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", 100 | "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e" 101 | ], 102 | "version": "==2.8.0" 103 | }, 104 | "rebulk": { 105 | "hashes": [ 106 | "sha256:1d49e4f7ef6fb874e60efccacbbe661092fabdb7770cdf7f7de4516d50535998" 107 | ], 108 | "version": "==1.0.0" 109 | }, 110 | "requests": { 111 | "hashes": [ 112 | "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", 113 | "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" 114 | ], 115 | "version": "==2.22.0" 116 | }, 117 | "requests-cache": { 118 | "hashes": [ 119 | "sha256:6822f788c5ee248995c4bfbd725de2002ad710182ba26a666e85b64981866060", 120 | "sha256:73a7211870f7d67af5fd81cad2f67cfe1cd3eb4ee6a85155e07613968cc72dfc" 121 | ], 122 | "version": "==0.5.0" 123 | }, 124 | "six": { 125 | "hashes": [ 126 | "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", 127 | "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" 128 | ], 129 | "version": "==1.12.0" 130 | }, 131 | "sqlalchemy": { 132 | "hashes": [ 133 | "sha256:c30925d60af95443458ebd7525daf791f55762b106049ae71e18f8dd58084c2f" 134 | ], 135 | "version": "==1.3.5" 136 | }, 137 | "tvdb-api": { 138 | "hashes": [ 139 | "sha256:b1de28a5100121d91b1f6a8ec7e86f2c4bdf48fb22fab3c6fe21e7fb7346bf8f" 140 | ], 141 | "index": "pypi", 142 | "version": "==2.0" 143 | }, 144 | "urllib3": { 145 | "hashes": [ 146 | "sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1", 147 | "sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232" 148 | ], 149 | "version": "==1.25.3" 150 | } 151 | }, 152 | "develop": { 153 | "astroid": { 154 | "hashes": [ 155 | "sha256:6560e1e1749f68c64a4b5dee4e091fce798d2f0d84ebe638cf0e0585a343acf4", 156 | "sha256:b65db1bbaac9f9f4d190199bb8680af6f6f84fd3769a5ea883df8a91fe68b4c4" 157 | ], 158 | "version": "==2.2.5" 159 | }, 160 | "entrypoints": { 161 | "hashes": [ 162 | "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", 163 | "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" 164 | ], 165 | "version": "==0.3" 166 | }, 167 | "flake8": { 168 | "hashes": [ 169 | "sha256:19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548", 170 | "sha256:8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696" 171 | ], 172 | "index": "pypi", 173 | "version": "==3.7.8" 174 | }, 175 | "isort": { 176 | "hashes": [ 177 | "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", 178 | "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" 179 | ], 180 | "version": "==4.3.21" 181 | }, 182 | "lazy-object-proxy": { 183 | "hashes": [ 184 | "sha256:159a745e61422217881c4de71f9eafd9d703b93af95618635849fe469a283661", 185 | "sha256:23f63c0821cc96a23332e45dfaa83266feff8adc72b9bcaef86c202af765244f", 186 | "sha256:3b11be575475db2e8a6e11215f5aa95b9ec14de658628776e10d96fa0b4dac13", 187 | "sha256:3f447aff8bc61ca8b42b73304f6a44fa0d915487de144652816f950a3f1ab821", 188 | "sha256:4ba73f6089cd9b9478bc0a4fa807b47dbdb8fad1d8f31a0f0a5dbf26a4527a71", 189 | "sha256:4f53eadd9932055eac465bd3ca1bd610e4d7141e1278012bd1f28646aebc1d0e", 190 | "sha256:64483bd7154580158ea90de5b8e5e6fc29a16a9b4db24f10193f0c1ae3f9d1ea", 191 | "sha256:6f72d42b0d04bfee2397aa1862262654b56922c20a9bb66bb76b6f0e5e4f9229", 192 | "sha256:7c7f1ec07b227bdc561299fa2328e85000f90179a2f44ea30579d38e037cb3d4", 193 | "sha256:7c8b1ba1e15c10b13cad4171cfa77f5bb5ec2580abc5a353907780805ebe158e", 194 | "sha256:8559b94b823f85342e10d3d9ca4ba5478168e1ac5658a8a2f18c991ba9c52c20", 195 | "sha256:a262c7dfb046f00e12a2bdd1bafaed2408114a89ac414b0af8755c696eb3fc16", 196 | "sha256:acce4e3267610c4fdb6632b3886fe3f2f7dd641158a843cf6b6a68e4ce81477b", 197 | "sha256:be089bb6b83fac7f29d357b2dc4cf2b8eb8d98fe9d9ff89f9ea6012970a853c7", 198 | "sha256:bfab710d859c779f273cc48fb86af38d6e9210f38287df0069a63e40b45a2f5c", 199 | "sha256:c10d29019927301d524a22ced72706380de7cfc50f767217485a912b4c8bd82a", 200 | "sha256:dd6e2b598849b3d7aee2295ac765a578879830fb8966f70be8cd472e6069932e", 201 | "sha256:e408f1eacc0a68fed0c08da45f31d0ebb38079f043328dce69ff133b95c29dc1" 202 | ], 203 | "version": "==1.4.1" 204 | }, 205 | "mccabe": { 206 | "hashes": [ 207 | "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", 208 | "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" 209 | ], 210 | "version": "==0.6.1" 211 | }, 212 | "pycodestyle": { 213 | "hashes": [ 214 | "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", 215 | "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" 216 | ], 217 | "version": "==2.5.0" 218 | }, 219 | "pyflakes": { 220 | "hashes": [ 221 | "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", 222 | "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" 223 | ], 224 | "version": "==2.1.1" 225 | }, 226 | "pylint": { 227 | "hashes": [ 228 | "sha256:5d77031694a5fb97ea95e828c8d10fc770a1df6eb3906067aaed42201a8a6a09", 229 | "sha256:723e3db49555abaf9bf79dc474c6b9e2935ad82230b10c1138a71ea41ac0fff1" 230 | ], 231 | "index": "pypi", 232 | "version": "==2.3.1" 233 | }, 234 | "six": { 235 | "hashes": [ 236 | "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", 237 | "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" 238 | ], 239 | "version": "==1.12.0" 240 | }, 241 | "typed-ast": { 242 | "hashes": [ 243 | "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e", 244 | "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e", 245 | "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0", 246 | "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c", 247 | "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631", 248 | "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4", 249 | "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34", 250 | "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b", 251 | "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a", 252 | "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233", 253 | "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1", 254 | "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36", 255 | "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d", 256 | "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a", 257 | "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12" 258 | ], 259 | "markers": "implementation_name == 'cpython'", 260 | "version": "==1.4.0" 261 | }, 262 | "wrapt": { 263 | "hashes": [ 264 | "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" 265 | ], 266 | "version": "==1.11.2" 267 | } 268 | } 269 | } 270 | -------------------------------------------------------------------------------- /examples/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "this-package-does-not-exists-sdflkjsd": "", 7 | "babel-eslint": "http://your-personal-github-thing", 8 | "react-completor": "", 9 | "color-hash": "^1.0.3", 10 | "express": "^4.0.0", 11 | "preact-compat": "^3.18.4", 12 | "react": "^16.6.0", 13 | "react-dom": "^16.6.0", 14 | "sweetalert2": "^7.28.11", 15 | "why-did-you-update": "^0.1.1" 16 | }, 17 | "scripts": { 18 | "start": "react-app-rewired start", 19 | "build": "react-app-rewired build", 20 | "test": "react-app-rewired test --env=jsdom", 21 | "eject": "react-app-rewired eject", 22 | "flow": "flow", 23 | "eslint": "eslint" 24 | }, 25 | "devDependencies": { 26 | "eslint": "^4.19.1", 27 | "eslint-config-airbnb": "^16.1.0", 28 | "eslint-loader": "^2.1.1", 29 | "flow-bin": "^0.74.0" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /examples/poetry.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | category = "main" 3 | description = "A module to work with countries and languages" 4 | name = "babelfish" 5 | optional = false 6 | python-versions = "*" 7 | version = "0.5.5" 8 | 9 | [[package]] 10 | category = "main" 11 | description = "Python package for providing Mozilla's CA Bundle." 12 | name = "certifi" 13 | optional = false 14 | python-versions = "*" 15 | version = "2019.6.16" 16 | 17 | [[package]] 18 | category = "main" 19 | description = "Universal encoding detector for Python 2 and 3" 20 | name = "chardet" 21 | optional = false 22 | python-versions = "*" 23 | version = "3.0.4" 24 | 25 | [[package]] 26 | category = "dev" 27 | description = "Updated configparser from Python 3.7 for Python 2.6+." 28 | marker = "python_version < \"3.2\"" 29 | name = "configparser" 30 | optional = false 31 | python-versions = ">=2.6" 32 | version = "3.7.4" 33 | 34 | [package.extras] 35 | docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] 36 | testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2)", "pytest-flake8"] 37 | 38 | [[package]] 39 | category = "dev" 40 | description = "Discover and load entry points from installed packages." 41 | name = "entrypoints" 42 | optional = false 43 | python-versions = ">=2.7" 44 | version = "0.3" 45 | 46 | [package.dependencies] 47 | [package.dependencies.configparser] 48 | python = ">=2.7,<2.8" 49 | version = ">=3.5" 50 | 51 | [[package]] 52 | category = "dev" 53 | description = "Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4" 54 | marker = "python_version < \"3.4\"" 55 | name = "enum34" 56 | optional = false 57 | python-versions = "*" 58 | version = "1.1.6" 59 | 60 | [[package]] 61 | category = "dev" 62 | description = "the modular source code checker: pep8, pyflakes and co" 63 | name = "flake8" 64 | optional = false 65 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 66 | version = "3.7.8" 67 | 68 | [package.dependencies] 69 | entrypoints = ">=0.3.0,<0.4.0" 70 | mccabe = ">=0.6.0,<0.7.0" 71 | pycodestyle = ">=2.5.0,<2.6.0" 72 | pyflakes = ">=2.1.0,<2.2.0" 73 | 74 | [package.dependencies.configparser] 75 | python = "<3.2" 76 | version = "*" 77 | 78 | [package.dependencies.enum34] 79 | python = "<3.4" 80 | version = "*" 81 | 82 | [package.dependencies.functools32] 83 | python = "<3.2" 84 | version = "*" 85 | 86 | [package.dependencies.typing] 87 | python = "<3.5" 88 | version = "*" 89 | 90 | [[package]] 91 | category = "dev" 92 | description = "Backport of the functools module from Python 3.2.3 for use on 2.7 and PyPy." 93 | marker = "python_version < \"3.2\"" 94 | name = "functools32" 95 | optional = false 96 | python-versions = "*" 97 | version = "3.2.3-2" 98 | 99 | [[package]] 100 | category = "main" 101 | description = "GuessIt - a library for guessing information from video filenames." 102 | name = "guessit" 103 | optional = false 104 | python-versions = "*" 105 | version = "3.0.4" 106 | 107 | [package.dependencies] 108 | babelfish = "*" 109 | python-dateutil = "*" 110 | rebulk = "*" 111 | 112 | [package.extras] 113 | dev = ["zest.releaser", "pylint", "tox", "sphinx", "sphinx-autobuild"] 114 | test = ["pytest (>=3.3)", "pytest-benchmark", "pyyaml"] 115 | 116 | [[package]] 117 | category = "main" 118 | description = "Internationalized Domain Names in Applications (IDNA)" 119 | name = "idna" 120 | optional = false 121 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 122 | version = "2.8" 123 | 124 | [[package]] 125 | category = "main" 126 | description = "Python package to access the IMDb's database" 127 | name = "imdbpy" 128 | optional = false 129 | python-versions = "*" 130 | version = "6.7" 131 | 132 | [package.dependencies] 133 | SQLAlchemy = "*" 134 | lxml = "*" 135 | 136 | [package.extras] 137 | dev = ["flake8", "flake8-isort", "readme-renderer"] 138 | doc = ["sphinx", "sphinx-rtd-theme"] 139 | test = ["pytest", "pytest-cov", "pytest-profiling"] 140 | 141 | [[package]] 142 | category = "main" 143 | description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." 144 | name = "lxml" 145 | optional = false 146 | python-versions = "*" 147 | version = "4.3.4" 148 | 149 | [package.extras] 150 | cssselect = ["cssselect (>=0.7)"] 151 | html5 = ["html5lib"] 152 | htmlsoup = ["beautifulsoup4"] 153 | source = ["Cython (>=0.29.1)"] 154 | 155 | [[package]] 156 | category = "dev" 157 | description = "McCabe checker, plugin for flake8" 158 | name = "mccabe" 159 | optional = false 160 | python-versions = "*" 161 | version = "0.6.1" 162 | 163 | [[package]] 164 | category = "main" 165 | description = "Python bindings for the MusicBrainz NGS and the Cover Art Archive webservices" 166 | name = "musicbrainzngs" 167 | optional = false 168 | python-versions = "*" 169 | version = "0.6" 170 | 171 | [[package]] 172 | category = "dev" 173 | description = "Python style guide checker" 174 | name = "pycodestyle" 175 | optional = false 176 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 177 | version = "2.5.0" 178 | 179 | [[package]] 180 | category = "dev" 181 | description = "passive checker of Python programs" 182 | name = "pyflakes" 183 | optional = false 184 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 185 | version = "2.1.1" 186 | 187 | [[package]] 188 | category = "main" 189 | description = "Extensions to the standard Python datetime module" 190 | name = "python-dateutil" 191 | optional = false 192 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 193 | version = "2.8.0" 194 | 195 | [package.dependencies] 196 | six = ">=1.5" 197 | 198 | [[package]] 199 | category = "main" 200 | description = "Rebulk - Define simple search patterns in bulk to perform advanced matching on any string." 201 | name = "rebulk" 202 | optional = false 203 | python-versions = "*" 204 | version = "1.0.0" 205 | 206 | [package.dependencies] 207 | six = "*" 208 | 209 | [package.extras] 210 | dev = ["pytest", "zest.releaser", "pylint", "tox"] 211 | native = ["regex"] 212 | test = ["pytest"] 213 | 214 | [[package]] 215 | category = "main" 216 | description = "Python HTTP for Humans." 217 | name = "requests" 218 | optional = false 219 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 220 | version = "2.22.0" 221 | 222 | [package.dependencies] 223 | certifi = ">=2017.4.17" 224 | chardet = ">=3.0.2,<3.1.0" 225 | idna = ">=2.5,<2.9" 226 | urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" 227 | 228 | [package.extras] 229 | security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"] 230 | socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] 231 | 232 | [[package]] 233 | category = "main" 234 | description = "Persistent cache for requests library" 235 | name = "requests-cache" 236 | optional = false 237 | python-versions = "*" 238 | version = "0.5.0" 239 | 240 | [package.dependencies] 241 | requests = ">=1.1.0" 242 | 243 | [[package]] 244 | category = "main" 245 | description = "Python 2 and 3 compatibility utilities" 246 | name = "six" 247 | optional = false 248 | python-versions = ">=2.6, !=3.0.*, !=3.1.*" 249 | version = "1.12.0" 250 | 251 | [[package]] 252 | category = "main" 253 | description = "Database Abstraction Library" 254 | name = "sqlalchemy" 255 | optional = false 256 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 257 | version = "1.3.5" 258 | 259 | [package.extras] 260 | mssql = ["pyodbc"] 261 | mssql_pymssql = ["pymssql"] 262 | mssql_pyodbc = ["pyodbc"] 263 | mysql = ["mysqlclient"] 264 | oracle = ["cx-oracle"] 265 | postgresql = ["psycopg2"] 266 | postgresql_pg8000 = ["pg8000"] 267 | postgresql_psycopg2binary = ["psycopg2-binary"] 268 | postgresql_psycopg2cffi = ["psycopg2cffi"] 269 | pymysql = ["pymysql"] 270 | 271 | [[package]] 272 | category = "main" 273 | description = "Interface to thetvdb.com" 274 | name = "tvdb-api" 275 | optional = false 276 | python-versions = "*" 277 | version = "2.0" 278 | 279 | [package.dependencies] 280 | requests = "*" 281 | requests_cache = "*" 282 | 283 | [[package]] 284 | category = "dev" 285 | description = "Type Hints for Python" 286 | marker = "python_version < \"3.5\"" 287 | name = "typing" 288 | optional = false 289 | python-versions = "*" 290 | version = "3.7.4" 291 | 292 | [[package]] 293 | category = "main" 294 | description = "HTTP library with thread-safe connection pooling, file post, and more." 295 | name = "urllib3" 296 | optional = false 297 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" 298 | version = "1.25.3" 299 | 300 | [package.extras] 301 | brotli = ["brotlipy (>=0.6.0)"] 302 | secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] 303 | socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] 304 | 305 | [metadata] 306 | content-hash = "ed361914e473106ce8dc141a8b2f96ffe667a6a143cdf438a189ffe04664ebae" 307 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" 308 | 309 | [metadata.hashes] 310 | babelfish = ["8380879fa51164ac54a3e393f83c4551a275f03617f54a99d70151358e444104"] 311 | certifi = ["046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939", "945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695"] 312 | chardet = ["84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"] 313 | configparser = ["8be81d89d6e7b4c0d4e44bcc525845f6da25821de80cb5e06e7e0238a2899e32", "da60d0014fd8c55eb48c1c5354352e363e2d30bbf7057e5e171a468390184c75"] 314 | entrypoints = ["589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", "c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"] 315 | enum34 = ["2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850", "644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a", "6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79", "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1"] 316 | flake8 = ["19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548", "8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696"] 317 | functools32 = ["89d824aa6c358c421a234d7f9ee0bd75933a67c29588ce50aaa3acdf4d403fa0", "f6253dfbe0538ad2e387bd8fdfd9293c925d63553f5813c4e587745416501e6d"] 318 | guessit = ["37803ec0d7f20f2e1425dfe3bb978dc3b9c65872aa3760c664b31a9115232ec1"] 319 | idna = ["c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", "ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"] 320 | imdbpy = ["4be128c9c3243ff57c880baf6e5967888c9f3db7f536464b20280ecaf04bdace", "7d3fce6ad95cf38c78f0df6c7d4094df932b42379c5d578f6ec8164918bd1100"] 321 | lxml = ["06c7616601430aa140a69f97e3116308fffe0848f543b639a5ec2e8920ae72fd", "177202792f9842374a8077735c69c41a4282183f7851443d2beb8ee310720819", "19317ad721ceb9e39847d11131903931e2794e447d4751ebb0d9236f1b349ff2", "36d206e62f3e5dbaafd4ec692b67157e271f5da7fd925fda8515da675eace50d", "387115b066c797c85f9861a9613abf50046a15aac16759bc92d04f94acfad082", "3ce1c49d4b4a7bc75fb12acb3a6247bb7a91fe420542e6d671ba9187d12a12c2", "4d2a5a7d6b0dbb8c37dab66a8ce09a8761409c044017721c21718659fa3365a1", "58d0a1b33364d1253a88d18df6c0b2676a1746d27c969dc9e32d143a3701dda5", "62a651c618b846b88fdcae0533ec23f185bb322d6c1845733f3123e8980c1d1b", "69ff21064e7debc9b1b1e2eee8c2d686d042d4257186d70b338206a80c5bc5ea", "7060453eba9ba59d821625c6af6a266bd68277dce6577f754d1eb9116c094266", "7d26b36a9c4bce53b9cfe42e67849ae3c5c23558bc08363e53ffd6d94f4ff4d2", "83b427ad2bfa0b9705e02a83d8d607d2c2f01889eb138168e462a3a052c42368", "923d03c84534078386cf50193057aae98fa94cace8ea7580b74754493fda73ad", "b773715609649a1a180025213f67ffdeb5a4878c784293ada300ee95a1f3257b", "baff149c174e9108d4a2fee192c496711be85534eab63adb122f93e70aa35431", "bca9d118b1014b4c2d19319b10a3ebed508ff649396ce1855e1c96528d9b2fa9", "ce580c28845581535dc6000fc7c35fdadf8bea7ccb57d6321b044508e9ba0685", "d34923a569e70224d88e6682490e24c842907ba2c948c5fd26185413cbe0cd96", "dd9f0e531a049d8b35ec5e6c68a37f1ba6ec3a591415e6804cbdf652793d15d7", "ecb805cbfe9102f3fd3d2ef16dfe5ae9e2d7a7dfbba92f4ff1e16ac9784dbfb0", "ede9aad2197a0202caff35d417b671f5f91a3631477441076082a17c94edd846", "ef2d1fc370400e0aa755aab0b20cf4f1d0e934e7fd5244f3dd4869078e4942b9", "f2fec194a49bfaef42a548ee657362af5c7a640da757f6f452a35da7dd9f923c"] 322 | mccabe = ["ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", "dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"] 323 | musicbrainzngs = ["28ef261a421dffde0a25281dab1ab214e1b407eec568cd05a53e73256f56adb5"] 324 | pycodestyle = ["95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", "e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"] 325 | pyflakes = ["17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", "d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"] 326 | python-dateutil = ["7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", "c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"] 327 | rebulk = ["1d49e4f7ef6fb874e60efccacbbe661092fabdb7770cdf7f7de4516d50535998"] 328 | requests = ["11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", "9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"] 329 | requests-cache = ["6822f788c5ee248995c4bfbd725de2002ad710182ba26a666e85b64981866060", "73a7211870f7d67af5fd81cad2f67cfe1cd3eb4ee6a85155e07613968cc72dfc"] 330 | six = ["3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"] 331 | sqlalchemy = ["c30925d60af95443458ebd7525daf791f55762b106049ae71e18f8dd58084c2f"] 332 | tvdb-api = ["b1de28a5100121d91b1f6a8ec7e86f2c4bdf48fb22fab3c6fe21e7fb7346bf8f"] 333 | typing = ["38566c558a0a94d6531012c8e917b1b8518a41e418f7f15f00e129cc80162ad3", "53765ec4f83a2b720214727e319607879fec4acde22c4fbb54fa2604e79e44ce", "84698954b4e6719e912ef9a42a2431407fe3755590831699debda6fba92aac55"] 334 | urllib3 = ["b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1", "dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232"] 335 | -------------------------------------------------------------------------------- /examples/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "example" 3 | version = "0.0.1" 4 | authors = [ 5 | "Abin Simon " 6 | ] 7 | 8 | [tool.poetry.dependencies] 9 | python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" 10 | 11 | guessit = ">=3.0.0" 12 | tvdb-api = ">=2.0" 13 | imdbpy = ">=6.6" 14 | musicbrainzngs = ">=0.6" 15 | 16 | [tool.poetry.dev-dependencies] 17 | "flake8" = {version = ">=3.5.0"} 18 | 19 | [build-system] 20 | requires = ["poetry>=0.12"] 21 | build-backend = "poetry.masonry.api" 22 | -------------------------------------------------------------------------------- /examples/requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | 3 | certifi==2018.11.29 4 | chardet==3.0.4 5 | falcon==1.4.1 6 | 7 | gunicorn==19.9.0 8 | idna==2.8 9 | pprint==0.1 10 | python-mimeparse==1.6.0 11 | requests==2.21.0 12 | 13 | six==1.12.0 \ 14 | --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ 15 | --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 16 | treelib==1.5.3 \ 17 | --hash=sha256:3e4ee4ea22ec9e6e5fe5df4f4d6189a9b2c6c6604bd835d692419466e0312f0a 18 | urllib3==1.24.1 \ 19 | --hash=sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39 \ 20 | --hash=sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22 21 | 22 | redis==3.0.1 23 | -------------------------------------------------------------------------------- /examples/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@7.0.0-beta.44": 6 | version "7.0.0-beta.44" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" 8 | integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== 9 | dependencies: 10 | "@babel/highlight" "7.0.0-beta.44" 11 | 12 | "@babel/generator@7.0.0-beta.44": 13 | version "7.0.0-beta.44" 14 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" 15 | integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== 16 | dependencies: 17 | "@babel/types" "7.0.0-beta.44" 18 | jsesc "^2.5.1" 19 | lodash "^4.2.0" 20 | source-map "^0.5.0" 21 | trim-right "^1.0.1" 22 | 23 | "@babel/helper-function-name@7.0.0-beta.44": 24 | version "7.0.0-beta.44" 25 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" 26 | integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== 27 | dependencies: 28 | "@babel/helper-get-function-arity" "7.0.0-beta.44" 29 | "@babel/template" "7.0.0-beta.44" 30 | "@babel/types" "7.0.0-beta.44" 31 | 32 | "@babel/helper-get-function-arity@7.0.0-beta.44": 33 | version "7.0.0-beta.44" 34 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" 35 | integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== 36 | dependencies: 37 | "@babel/types" "7.0.0-beta.44" 38 | 39 | "@babel/helper-split-export-declaration@7.0.0-beta.44": 40 | version "7.0.0-beta.44" 41 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" 42 | integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== 43 | dependencies: 44 | "@babel/types" "7.0.0-beta.44" 45 | 46 | "@babel/highlight@7.0.0-beta.44": 47 | version "7.0.0-beta.44" 48 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" 49 | integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== 50 | dependencies: 51 | chalk "^2.0.0" 52 | esutils "^2.0.2" 53 | js-tokens "^3.0.0" 54 | 55 | "@babel/template@7.0.0-beta.44": 56 | version "7.0.0-beta.44" 57 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" 58 | integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== 59 | dependencies: 60 | "@babel/code-frame" "7.0.0-beta.44" 61 | "@babel/types" "7.0.0-beta.44" 62 | babylon "7.0.0-beta.44" 63 | lodash "^4.2.0" 64 | 65 | "@babel/traverse@7.0.0-beta.44": 66 | version "7.0.0-beta.44" 67 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" 68 | integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== 69 | dependencies: 70 | "@babel/code-frame" "7.0.0-beta.44" 71 | "@babel/generator" "7.0.0-beta.44" 72 | "@babel/helper-function-name" "7.0.0-beta.44" 73 | "@babel/helper-split-export-declaration" "7.0.0-beta.44" 74 | "@babel/types" "7.0.0-beta.44" 75 | babylon "7.0.0-beta.44" 76 | debug "^3.1.0" 77 | globals "^11.1.0" 78 | invariant "^2.2.0" 79 | lodash "^4.2.0" 80 | 81 | "@babel/types@7.0.0-beta.44": 82 | version "7.0.0-beta.44" 83 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" 84 | integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== 85 | dependencies: 86 | esutils "^2.0.2" 87 | lodash "^4.2.0" 88 | to-fast-properties "^2.0.0" 89 | 90 | accepts@~1.3.7: 91 | version "1.3.7" 92 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 93 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 94 | dependencies: 95 | mime-types "~2.1.24" 96 | negotiator "0.6.2" 97 | 98 | acorn-jsx@^3.0.0: 99 | version "3.0.1" 100 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 101 | integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= 102 | dependencies: 103 | acorn "^3.0.4" 104 | 105 | acorn@^3.0.4: 106 | version "3.3.0" 107 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 108 | integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= 109 | 110 | acorn@^5.5.0: 111 | version "5.7.3" 112 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" 113 | integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== 114 | 115 | ajv-keywords@^2.1.0: 116 | version "2.1.1" 117 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" 118 | integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= 119 | 120 | ajv@^5.2.3, ajv@^5.3.0: 121 | version "5.5.2" 122 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 123 | integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= 124 | dependencies: 125 | co "^4.6.0" 126 | fast-deep-equal "^1.0.0" 127 | fast-json-stable-stringify "^2.0.0" 128 | json-schema-traverse "^0.3.0" 129 | 130 | ansi-escapes@^3.0.0: 131 | version "3.2.0" 132 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 133 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 134 | 135 | ansi-regex@^2.0.0: 136 | version "2.1.1" 137 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 138 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 139 | 140 | ansi-regex@^3.0.0: 141 | version "3.0.0" 142 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 143 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 144 | 145 | ansi-styles@^2.2.1: 146 | version "2.2.1" 147 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 148 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 149 | 150 | ansi-styles@^3.2.1: 151 | version "3.2.1" 152 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 153 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 154 | dependencies: 155 | color-convert "^1.9.0" 156 | 157 | argparse@^1.0.7: 158 | version "1.0.10" 159 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 160 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 161 | dependencies: 162 | sprintf-js "~1.0.2" 163 | 164 | array-flatten@1.1.1: 165 | version "1.1.1" 166 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 167 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 168 | 169 | babel-code-frame@^6.22.0: 170 | version "6.26.0" 171 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 172 | integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= 173 | dependencies: 174 | chalk "^1.1.3" 175 | esutils "^2.0.2" 176 | js-tokens "^3.0.2" 177 | 178 | babel-eslint@^8.2.6: 179 | version "8.2.6" 180 | resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" 181 | integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== 182 | dependencies: 183 | "@babel/code-frame" "7.0.0-beta.44" 184 | "@babel/traverse" "7.0.0-beta.44" 185 | "@babel/types" "7.0.0-beta.44" 186 | babylon "7.0.0-beta.44" 187 | eslint-scope "3.7.1" 188 | eslint-visitor-keys "^1.0.0" 189 | 190 | babylon@7.0.0-beta.44: 191 | version "7.0.0-beta.44" 192 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" 193 | integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== 194 | 195 | balanced-match@^1.0.0: 196 | version "1.0.0" 197 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 198 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 199 | 200 | big.js@^5.2.2: 201 | version "5.2.2" 202 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" 203 | integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== 204 | 205 | body-parser@1.19.0: 206 | version "1.19.0" 207 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 208 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 209 | dependencies: 210 | bytes "3.1.0" 211 | content-type "~1.0.4" 212 | debug "2.6.9" 213 | depd "~1.1.2" 214 | http-errors "1.7.2" 215 | iconv-lite "0.4.24" 216 | on-finished "~2.3.0" 217 | qs "6.7.0" 218 | raw-body "2.4.0" 219 | type-is "~1.6.17" 220 | 221 | brace-expansion@^1.1.7: 222 | version "1.1.11" 223 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 224 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 225 | dependencies: 226 | balanced-match "^1.0.0" 227 | concat-map "0.0.1" 228 | 229 | buffer-from@^1.0.0: 230 | version "1.1.1" 231 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 232 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 233 | 234 | bytes@3.1.0: 235 | version "3.1.0" 236 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 237 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 238 | 239 | caller-path@^0.1.0: 240 | version "0.1.0" 241 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 242 | integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= 243 | dependencies: 244 | callsites "^0.2.0" 245 | 246 | callsites@^0.2.0: 247 | version "0.2.0" 248 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 249 | integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= 250 | 251 | chalk@^1.1.3: 252 | version "1.1.3" 253 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 254 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 255 | dependencies: 256 | ansi-styles "^2.2.1" 257 | escape-string-regexp "^1.0.2" 258 | has-ansi "^2.0.0" 259 | strip-ansi "^3.0.0" 260 | supports-color "^2.0.0" 261 | 262 | chalk@^2.0.0, chalk@^2.1.0: 263 | version "2.4.2" 264 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 265 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 266 | dependencies: 267 | ansi-styles "^3.2.1" 268 | escape-string-regexp "^1.0.5" 269 | supports-color "^5.3.0" 270 | 271 | chardet@^0.4.0: 272 | version "0.4.2" 273 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" 274 | integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= 275 | 276 | circular-json@^0.3.1: 277 | version "0.3.3" 278 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" 279 | integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== 280 | 281 | cli-cursor@^2.1.0: 282 | version "2.1.0" 283 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 284 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= 285 | dependencies: 286 | restore-cursor "^2.0.0" 287 | 288 | cli-width@^2.0.0: 289 | version "2.2.0" 290 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 291 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= 292 | 293 | co@^4.6.0: 294 | version "4.6.0" 295 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 296 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= 297 | 298 | color-convert@^1.9.0: 299 | version "1.9.3" 300 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 301 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 302 | dependencies: 303 | color-name "1.1.3" 304 | 305 | color-hash@^1.0.3: 306 | version "1.0.3" 307 | resolved "https://registry.yarnpkg.com/color-hash/-/color-hash-1.0.3.tgz#c0e7952f06d022e548e65da239512bd67d3809ee" 308 | integrity sha1-wOeVLwbQIuVI5l2iOVEr1n04Ce4= 309 | 310 | color-name@1.1.3: 311 | version "1.1.3" 312 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 313 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 314 | 315 | commondir@^1.0.1: 316 | version "1.0.1" 317 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 318 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 319 | 320 | concat-map@0.0.1: 321 | version "0.0.1" 322 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 323 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 324 | 325 | concat-stream@^1.6.0: 326 | version "1.6.2" 327 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 328 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 329 | dependencies: 330 | buffer-from "^1.0.0" 331 | inherits "^2.0.3" 332 | readable-stream "^2.2.2" 333 | typedarray "^0.0.6" 334 | 335 | content-disposition@0.5.3: 336 | version "0.5.3" 337 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 338 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 339 | dependencies: 340 | safe-buffer "5.1.2" 341 | 342 | content-type@~1.0.4: 343 | version "1.0.4" 344 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 345 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 346 | 347 | cookie-signature@1.0.6: 348 | version "1.0.6" 349 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 350 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 351 | 352 | cookie@0.4.0: 353 | version "0.4.0" 354 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 355 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 356 | 357 | core-util-is@~1.0.0: 358 | version "1.0.2" 359 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 360 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 361 | 362 | cross-spawn@^5.1.0: 363 | version "5.1.0" 364 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 365 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 366 | dependencies: 367 | lru-cache "^4.0.1" 368 | shebang-command "^1.2.0" 369 | which "^1.2.9" 370 | 371 | debug@2.6.9: 372 | version "2.6.9" 373 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 374 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 375 | dependencies: 376 | ms "2.0.0" 377 | 378 | debug@^3.1.0: 379 | version "3.2.6" 380 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 381 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 382 | dependencies: 383 | ms "^2.1.1" 384 | 385 | deep-is@~0.1.3: 386 | version "0.1.3" 387 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 388 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 389 | 390 | depd@~1.1.2: 391 | version "1.1.2" 392 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 393 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 394 | 395 | destroy@~1.0.4: 396 | version "1.0.4" 397 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 398 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 399 | 400 | doctrine@^2.1.0: 401 | version "2.1.0" 402 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 403 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 404 | dependencies: 405 | esutils "^2.0.2" 406 | 407 | ee-first@1.1.1: 408 | version "1.1.1" 409 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 410 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 411 | 412 | emojis-list@^2.0.0: 413 | version "2.1.0" 414 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 415 | integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= 416 | 417 | encodeurl@~1.0.2: 418 | version "1.0.2" 419 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 420 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 421 | 422 | escape-html@~1.0.3: 423 | version "1.0.3" 424 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 425 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 426 | 427 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 428 | version "1.0.5" 429 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 430 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 431 | 432 | eslint-config-airbnb-base@^12.1.0: 433 | version "12.1.0" 434 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" 435 | integrity sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA== 436 | dependencies: 437 | eslint-restricted-globals "^0.1.1" 438 | 439 | eslint-config-airbnb@^16.1.0: 440 | version "16.1.0" 441 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46" 442 | integrity sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw== 443 | dependencies: 444 | eslint-config-airbnb-base "^12.1.0" 445 | 446 | eslint-loader@^2.1.1: 447 | version "2.2.1" 448 | resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" 449 | integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== 450 | dependencies: 451 | loader-fs-cache "^1.0.0" 452 | loader-utils "^1.0.2" 453 | object-assign "^4.0.1" 454 | object-hash "^1.1.4" 455 | rimraf "^2.6.1" 456 | 457 | eslint-restricted-globals@^0.1.1: 458 | version "0.1.1" 459 | resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" 460 | integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= 461 | 462 | eslint-scope@3.7.1: 463 | version "3.7.1" 464 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" 465 | integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= 466 | dependencies: 467 | esrecurse "^4.1.0" 468 | estraverse "^4.1.1" 469 | 470 | eslint-scope@^3.7.1: 471 | version "3.7.3" 472 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" 473 | integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== 474 | dependencies: 475 | esrecurse "^4.1.0" 476 | estraverse "^4.1.1" 477 | 478 | eslint-visitor-keys@^1.0.0: 479 | version "1.0.0" 480 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" 481 | integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== 482 | 483 | eslint@^4.19.1: 484 | version "4.19.1" 485 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" 486 | integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== 487 | dependencies: 488 | ajv "^5.3.0" 489 | babel-code-frame "^6.22.0" 490 | chalk "^2.1.0" 491 | concat-stream "^1.6.0" 492 | cross-spawn "^5.1.0" 493 | debug "^3.1.0" 494 | doctrine "^2.1.0" 495 | eslint-scope "^3.7.1" 496 | eslint-visitor-keys "^1.0.0" 497 | espree "^3.5.4" 498 | esquery "^1.0.0" 499 | esutils "^2.0.2" 500 | file-entry-cache "^2.0.0" 501 | functional-red-black-tree "^1.0.1" 502 | glob "^7.1.2" 503 | globals "^11.0.1" 504 | ignore "^3.3.3" 505 | imurmurhash "^0.1.4" 506 | inquirer "^3.0.6" 507 | is-resolvable "^1.0.0" 508 | js-yaml "^3.9.1" 509 | json-stable-stringify-without-jsonify "^1.0.1" 510 | levn "^0.3.0" 511 | lodash "^4.17.4" 512 | minimatch "^3.0.2" 513 | mkdirp "^0.5.1" 514 | natural-compare "^1.4.0" 515 | optionator "^0.8.2" 516 | path-is-inside "^1.0.2" 517 | pluralize "^7.0.0" 518 | progress "^2.0.0" 519 | regexpp "^1.0.1" 520 | require-uncached "^1.0.3" 521 | semver "^5.3.0" 522 | strip-ansi "^4.0.0" 523 | strip-json-comments "~2.0.1" 524 | table "4.0.2" 525 | text-table "~0.2.0" 526 | 527 | espree@^3.5.4: 528 | version "3.5.4" 529 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" 530 | integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== 531 | dependencies: 532 | acorn "^5.5.0" 533 | acorn-jsx "^3.0.0" 534 | 535 | esprima@^4.0.0: 536 | version "4.0.1" 537 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 538 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 539 | 540 | esquery@^1.0.0: 541 | version "1.0.1" 542 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 543 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== 544 | dependencies: 545 | estraverse "^4.0.0" 546 | 547 | esrecurse@^4.1.0: 548 | version "4.2.1" 549 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 550 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== 551 | dependencies: 552 | estraverse "^4.1.0" 553 | 554 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 555 | version "4.2.0" 556 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 557 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= 558 | 559 | esutils@^2.0.2: 560 | version "2.0.2" 561 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 562 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 563 | 564 | etag@~1.8.1: 565 | version "1.8.1" 566 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 567 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 568 | 569 | express@^4.0.0: 570 | version "4.17.1" 571 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 572 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 573 | dependencies: 574 | accepts "~1.3.7" 575 | array-flatten "1.1.1" 576 | body-parser "1.19.0" 577 | content-disposition "0.5.3" 578 | content-type "~1.0.4" 579 | cookie "0.4.0" 580 | cookie-signature "1.0.6" 581 | debug "2.6.9" 582 | depd "~1.1.2" 583 | encodeurl "~1.0.2" 584 | escape-html "~1.0.3" 585 | etag "~1.8.1" 586 | finalhandler "~1.1.2" 587 | fresh "0.5.2" 588 | merge-descriptors "1.0.1" 589 | methods "~1.1.2" 590 | on-finished "~2.3.0" 591 | parseurl "~1.3.3" 592 | path-to-regexp "0.1.7" 593 | proxy-addr "~2.0.5" 594 | qs "6.7.0" 595 | range-parser "~1.2.1" 596 | safe-buffer "5.1.2" 597 | send "0.17.1" 598 | serve-static "1.14.1" 599 | setprototypeof "1.1.1" 600 | statuses "~1.5.0" 601 | type-is "~1.6.18" 602 | utils-merge "1.0.1" 603 | vary "~1.1.2" 604 | 605 | external-editor@^2.0.4: 606 | version "2.2.0" 607 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" 608 | integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== 609 | dependencies: 610 | chardet "^0.4.0" 611 | iconv-lite "^0.4.17" 612 | tmp "^0.0.33" 613 | 614 | fast-deep-equal@^1.0.0: 615 | version "1.1.0" 616 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" 617 | integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= 618 | 619 | fast-json-stable-stringify@^2.0.0: 620 | version "2.0.0" 621 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 622 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 623 | 624 | fast-levenshtein@~2.0.4: 625 | version "2.0.6" 626 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 627 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 628 | 629 | figures@^2.0.0: 630 | version "2.0.0" 631 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 632 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= 633 | dependencies: 634 | escape-string-regexp "^1.0.5" 635 | 636 | file-entry-cache@^2.0.0: 637 | version "2.0.0" 638 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 639 | integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= 640 | dependencies: 641 | flat-cache "^1.2.1" 642 | object-assign "^4.0.1" 643 | 644 | finalhandler@~1.1.2: 645 | version "1.1.2" 646 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 647 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 648 | dependencies: 649 | debug "2.6.9" 650 | encodeurl "~1.0.2" 651 | escape-html "~1.0.3" 652 | on-finished "~2.3.0" 653 | parseurl "~1.3.3" 654 | statuses "~1.5.0" 655 | unpipe "~1.0.0" 656 | 657 | find-cache-dir@^0.1.1: 658 | version "0.1.1" 659 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" 660 | integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= 661 | dependencies: 662 | commondir "^1.0.1" 663 | mkdirp "^0.5.1" 664 | pkg-dir "^1.0.0" 665 | 666 | find-up@^1.0.0: 667 | version "1.1.2" 668 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 669 | integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= 670 | dependencies: 671 | path-exists "^2.0.0" 672 | pinkie-promise "^2.0.0" 673 | 674 | flat-cache@^1.2.1: 675 | version "1.3.4" 676 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" 677 | integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== 678 | dependencies: 679 | circular-json "^0.3.1" 680 | graceful-fs "^4.1.2" 681 | rimraf "~2.6.2" 682 | write "^0.2.1" 683 | 684 | flow-bin@^0.74.0: 685 | version "0.74.0" 686 | resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.74.0.tgz#8017bb00efb37cbe8d81fbb7f464038bde06adc9" 687 | integrity sha512-tIN9J5qg71S4UbofCu80tve8a+p7Hj7ytwUtu79cLg9KJVVTNnVVJXKgCghVzaZT1Rvl9SMHVPlDs9uYhPHEGQ== 688 | 689 | forwarded@~0.1.2: 690 | version "0.1.2" 691 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 692 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 693 | 694 | fresh@0.5.2: 695 | version "0.5.2" 696 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 697 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 698 | 699 | fs.realpath@^1.0.0: 700 | version "1.0.0" 701 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 702 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 703 | 704 | functional-red-black-tree@^1.0.1: 705 | version "1.0.1" 706 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 707 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 708 | 709 | glob@^7.1.2, glob@^7.1.3: 710 | version "7.1.4" 711 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 712 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 713 | dependencies: 714 | fs.realpath "^1.0.0" 715 | inflight "^1.0.4" 716 | inherits "2" 717 | minimatch "^3.0.4" 718 | once "^1.3.0" 719 | path-is-absolute "^1.0.0" 720 | 721 | globals@^11.0.1, globals@^11.1.0: 722 | version "11.12.0" 723 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 724 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 725 | 726 | graceful-fs@^4.1.2: 727 | version "4.2.0" 728 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" 729 | integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== 730 | 731 | has-ansi@^2.0.0: 732 | version "2.0.0" 733 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 734 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 735 | dependencies: 736 | ansi-regex "^2.0.0" 737 | 738 | has-flag@^3.0.0: 739 | version "3.0.0" 740 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 741 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 742 | 743 | http-errors@1.7.2: 744 | version "1.7.2" 745 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 746 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 747 | dependencies: 748 | depd "~1.1.2" 749 | inherits "2.0.3" 750 | setprototypeof "1.1.1" 751 | statuses ">= 1.5.0 < 2" 752 | toidentifier "1.0.0" 753 | 754 | http-errors@~1.7.2: 755 | version "1.7.3" 756 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 757 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 758 | dependencies: 759 | depd "~1.1.2" 760 | inherits "2.0.4" 761 | setprototypeof "1.1.1" 762 | statuses ">= 1.5.0 < 2" 763 | toidentifier "1.0.0" 764 | 765 | iconv-lite@0.4.24, iconv-lite@^0.4.17: 766 | version "0.4.24" 767 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 768 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 769 | dependencies: 770 | safer-buffer ">= 2.1.2 < 3" 771 | 772 | ignore@^3.3.3: 773 | version "3.3.10" 774 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" 775 | integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== 776 | 777 | immutability-helper@^2.7.1: 778 | version "2.9.1" 779 | resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.9.1.tgz#71c423ba387e67b6c6ceba0650572f2a2a6727df" 780 | integrity sha512-r/RmRG8xO06s/k+PIaif2r5rGc3j4Yhc01jSBfwPCXDLYZwp/yxralI37Df1mwmuzcCsen/E/ITKcTEvc1PQmQ== 781 | dependencies: 782 | invariant "^2.2.0" 783 | 784 | imurmurhash@^0.1.4: 785 | version "0.1.4" 786 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 787 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 788 | 789 | inflight@^1.0.4: 790 | version "1.0.6" 791 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 792 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 793 | dependencies: 794 | once "^1.3.0" 795 | wrappy "1" 796 | 797 | inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: 798 | version "2.0.4" 799 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 800 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 801 | 802 | inherits@2.0.3: 803 | version "2.0.3" 804 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 805 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 806 | 807 | inquirer@^3.0.6: 808 | version "3.3.0" 809 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" 810 | integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== 811 | dependencies: 812 | ansi-escapes "^3.0.0" 813 | chalk "^2.0.0" 814 | cli-cursor "^2.1.0" 815 | cli-width "^2.0.0" 816 | external-editor "^2.0.4" 817 | figures "^2.0.0" 818 | lodash "^4.3.0" 819 | mute-stream "0.0.7" 820 | run-async "^2.2.0" 821 | rx-lite "^4.0.8" 822 | rx-lite-aggregates "^4.0.8" 823 | string-width "^2.1.0" 824 | strip-ansi "^4.0.0" 825 | through "^2.3.6" 826 | 827 | invariant@^2.2.0: 828 | version "2.2.4" 829 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 830 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== 831 | dependencies: 832 | loose-envify "^1.0.0" 833 | 834 | ipaddr.js@1.9.0: 835 | version "1.9.0" 836 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" 837 | integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== 838 | 839 | is-fullwidth-code-point@^2.0.0: 840 | version "2.0.0" 841 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 842 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 843 | 844 | is-promise@^2.1.0: 845 | version "2.1.0" 846 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 847 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= 848 | 849 | is-resolvable@^1.0.0: 850 | version "1.1.0" 851 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" 852 | integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== 853 | 854 | isarray@~1.0.0: 855 | version "1.0.0" 856 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 857 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 858 | 859 | isexe@^2.0.0: 860 | version "2.0.0" 861 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 862 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 863 | 864 | js-tokens@^3.0.0, js-tokens@^3.0.2: 865 | version "3.0.2" 866 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 867 | integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= 868 | 869 | "js-tokens@^3.0.0 || ^4.0.0": 870 | version "4.0.0" 871 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 872 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 873 | 874 | js-yaml@^3.9.1: 875 | version "3.13.1" 876 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 877 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 878 | dependencies: 879 | argparse "^1.0.7" 880 | esprima "^4.0.0" 881 | 882 | jsesc@^2.5.1: 883 | version "2.5.2" 884 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 885 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 886 | 887 | json-schema-traverse@^0.3.0: 888 | version "0.3.1" 889 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 890 | integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= 891 | 892 | json-stable-stringify-without-jsonify@^1.0.1: 893 | version "1.0.1" 894 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 895 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 896 | 897 | json5@^1.0.1: 898 | version "1.0.1" 899 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 900 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 901 | dependencies: 902 | minimist "^1.2.0" 903 | 904 | levn@^0.3.0, levn@~0.3.0: 905 | version "0.3.0" 906 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 907 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 908 | dependencies: 909 | prelude-ls "~1.1.2" 910 | type-check "~0.3.2" 911 | 912 | loader-fs-cache@^1.0.0: 913 | version "1.0.2" 914 | resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086" 915 | integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw== 916 | dependencies: 917 | find-cache-dir "^0.1.1" 918 | mkdirp "0.5.1" 919 | 920 | loader-utils@^1.0.2: 921 | version "1.2.3" 922 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" 923 | integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== 924 | dependencies: 925 | big.js "^5.2.2" 926 | emojis-list "^2.0.0" 927 | json5 "^1.0.1" 928 | 929 | lodash.every@^4.6.0: 930 | version "4.6.0" 931 | resolved "https://registry.yarnpkg.com/lodash.every/-/lodash.every-4.6.0.tgz#eb89984bebc4364279bb3aefbbd1ca19bfa6c6a7" 932 | integrity sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc= 933 | 934 | lodash.filter@^4.6.0: 935 | version "4.6.0" 936 | resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" 937 | integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= 938 | 939 | lodash.isequal@^4.5.0: 940 | version "4.5.0" 941 | resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" 942 | integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= 943 | 944 | lodash.isfunction@^3.0.8: 945 | version "3.0.9" 946 | resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" 947 | integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== 948 | 949 | lodash.isstring@^4.0.1: 950 | version "4.0.1" 951 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" 952 | integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= 953 | 954 | lodash.keys@^4.2.0: 955 | version "4.2.0" 956 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" 957 | integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU= 958 | 959 | lodash.pick@^4.4.0: 960 | version "4.4.0" 961 | resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" 962 | integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= 963 | 964 | lodash.some@^4.6.0: 965 | version "4.6.0" 966 | resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" 967 | integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= 968 | 969 | lodash.union@^4.6.0: 970 | version "4.6.0" 971 | resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" 972 | integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= 973 | 974 | lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: 975 | version "4.17.14" 976 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" 977 | integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== 978 | 979 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: 980 | version "1.4.0" 981 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 982 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 983 | dependencies: 984 | js-tokens "^3.0.0 || ^4.0.0" 985 | 986 | lru-cache@^4.0.1: 987 | version "4.1.5" 988 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 989 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 990 | dependencies: 991 | pseudomap "^1.0.2" 992 | yallist "^2.1.2" 993 | 994 | media-typer@0.3.0: 995 | version "0.3.0" 996 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 997 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 998 | 999 | merge-descriptors@1.0.1: 1000 | version "1.0.1" 1001 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1002 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 1003 | 1004 | methods@~1.1.2: 1005 | version "1.1.2" 1006 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1007 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 1008 | 1009 | mime-db@1.40.0: 1010 | version "1.40.0" 1011 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" 1012 | integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== 1013 | 1014 | mime-types@~2.1.24: 1015 | version "2.1.24" 1016 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" 1017 | integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== 1018 | dependencies: 1019 | mime-db "1.40.0" 1020 | 1021 | mime@1.6.0: 1022 | version "1.6.0" 1023 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1024 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1025 | 1026 | mimic-fn@^1.0.0: 1027 | version "1.2.0" 1028 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1029 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 1030 | 1031 | minimatch@^3.0.2, minimatch@^3.0.4: 1032 | version "3.0.4" 1033 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1034 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1035 | dependencies: 1036 | brace-expansion "^1.1.7" 1037 | 1038 | minimist@0.0.8: 1039 | version "0.0.8" 1040 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1041 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1042 | 1043 | minimist@^1.2.0: 1044 | version "1.2.0" 1045 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1046 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 1047 | 1048 | mkdirp@0.5.1, mkdirp@^0.5.1: 1049 | version "0.5.1" 1050 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1051 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1052 | dependencies: 1053 | minimist "0.0.8" 1054 | 1055 | ms@2.0.0: 1056 | version "2.0.0" 1057 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1058 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1059 | 1060 | ms@2.1.1: 1061 | version "2.1.1" 1062 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1063 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1064 | 1065 | ms@^2.1.1: 1066 | version "2.1.2" 1067 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1068 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1069 | 1070 | mute-stream@0.0.7: 1071 | version "0.0.7" 1072 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 1073 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= 1074 | 1075 | natural-compare@^1.4.0: 1076 | version "1.4.0" 1077 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1078 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1079 | 1080 | negotiator@0.6.2: 1081 | version "0.6.2" 1082 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 1083 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 1084 | 1085 | object-assign@^4.0.1, object-assign@^4.1.1: 1086 | version "4.1.1" 1087 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1088 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1089 | 1090 | object-hash@^1.1.4: 1091 | version "1.3.1" 1092 | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" 1093 | integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== 1094 | 1095 | on-finished@~2.3.0: 1096 | version "2.3.0" 1097 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1098 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 1099 | dependencies: 1100 | ee-first "1.1.1" 1101 | 1102 | once@^1.3.0: 1103 | version "1.4.0" 1104 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1105 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1106 | dependencies: 1107 | wrappy "1" 1108 | 1109 | onetime@^2.0.0: 1110 | version "2.0.1" 1111 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1112 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= 1113 | dependencies: 1114 | mimic-fn "^1.0.0" 1115 | 1116 | optionator@^0.8.2: 1117 | version "0.8.2" 1118 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1119 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= 1120 | dependencies: 1121 | deep-is "~0.1.3" 1122 | fast-levenshtein "~2.0.4" 1123 | levn "~0.3.0" 1124 | prelude-ls "~1.1.2" 1125 | type-check "~0.3.2" 1126 | wordwrap "~1.0.0" 1127 | 1128 | os-tmpdir@~1.0.2: 1129 | version "1.0.2" 1130 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1131 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1132 | 1133 | parseurl@~1.3.3: 1134 | version "1.3.3" 1135 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1136 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1137 | 1138 | path-exists@^2.0.0: 1139 | version "2.1.0" 1140 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 1141 | integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= 1142 | dependencies: 1143 | pinkie-promise "^2.0.0" 1144 | 1145 | path-is-absolute@^1.0.0: 1146 | version "1.0.1" 1147 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1148 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1149 | 1150 | path-is-inside@^1.0.2: 1151 | version "1.0.2" 1152 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1153 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= 1154 | 1155 | path-to-regexp@0.1.7: 1156 | version "0.1.7" 1157 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1158 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 1159 | 1160 | pinkie-promise@^2.0.0: 1161 | version "2.0.1" 1162 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1163 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 1164 | dependencies: 1165 | pinkie "^2.0.0" 1166 | 1167 | pinkie@^2.0.0: 1168 | version "2.0.4" 1169 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1170 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 1171 | 1172 | pkg-dir@^1.0.0: 1173 | version "1.0.0" 1174 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" 1175 | integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= 1176 | dependencies: 1177 | find-up "^1.0.0" 1178 | 1179 | pluralize@^7.0.0: 1180 | version "7.0.0" 1181 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" 1182 | integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== 1183 | 1184 | preact-compat@^3.18.4: 1185 | version "3.19.0" 1186 | resolved "https://registry.yarnpkg.com/preact-compat/-/preact-compat-3.19.0.tgz#a71457b6a3bf051690a4411603bc2085aa061c2f" 1187 | integrity sha512-f83A4hIhH8Uzhb9GbIcGk8SM19ffWlwP9mDaYwQdRnMdekZwcCA7eIAbeV4EMQaV9C0Yuy8iKgBAtyTKPZQt/Q== 1188 | dependencies: 1189 | immutability-helper "^2.7.1" 1190 | preact-context "^1.1.3" 1191 | preact-render-to-string "^3.8.2" 1192 | preact-transition-group "^1.1.1" 1193 | prop-types "^15.6.2" 1194 | standalone-react-addons-pure-render-mixin "^0.1.1" 1195 | 1196 | preact-context@^1.1.3: 1197 | version "1.1.3" 1198 | resolved "https://registry.yarnpkg.com/preact-context/-/preact-context-1.1.3.tgz#26d06db0f39d8d9c890df5ada9a99a943586ec68" 1199 | integrity sha512-2LcpjZG6JUhBgqziVH+nJtmu9PS5KzWoFx6wX2svXw0oBHhU6e8tQZhEkKLMOAxdmj7gVzApfS/B6V+fjJ/llA== 1200 | 1201 | preact-render-to-string@^3.8.2: 1202 | version "3.8.2" 1203 | resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-3.8.2.tgz#bd72964d705a57da3a9e72098acaa073dd3ceff9" 1204 | integrity sha512-przuZPajiurStGgxMoJP0EJeC4xj5CgHv+M7GfF3YxAdhGgEWAkhOSE0xympAFN20uMayntBZpttIZqqLl77fw== 1205 | dependencies: 1206 | pretty-format "^3.5.1" 1207 | 1208 | preact-transition-group@^1.1.1: 1209 | version "1.1.1" 1210 | resolved "https://registry.yarnpkg.com/preact-transition-group/-/preact-transition-group-1.1.1.tgz#f0a49327ea515ece34ea2be864c4a7d29e5d6e10" 1211 | integrity sha1-8KSTJ+pRXs406ivoZMSn0p5dbhA= 1212 | 1213 | prelude-ls@~1.1.2: 1214 | version "1.1.2" 1215 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1216 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1217 | 1218 | pretty-format@^3.5.1: 1219 | version "3.8.0" 1220 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" 1221 | integrity sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U= 1222 | 1223 | process-nextick-args@~2.0.0: 1224 | version "2.0.1" 1225 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1226 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1227 | 1228 | progress@^2.0.0: 1229 | version "2.0.3" 1230 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1231 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1232 | 1233 | prop-types@^15.6.2: 1234 | version "15.7.2" 1235 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 1236 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 1237 | dependencies: 1238 | loose-envify "^1.4.0" 1239 | object-assign "^4.1.1" 1240 | react-is "^16.8.1" 1241 | 1242 | proxy-addr@~2.0.5: 1243 | version "2.0.5" 1244 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" 1245 | integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== 1246 | dependencies: 1247 | forwarded "~0.1.2" 1248 | ipaddr.js "1.9.0" 1249 | 1250 | pseudomap@^1.0.2: 1251 | version "1.0.2" 1252 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1253 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 1254 | 1255 | qs@6.7.0: 1256 | version "6.7.0" 1257 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 1258 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 1259 | 1260 | range-parser@~1.2.1: 1261 | version "1.2.1" 1262 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1263 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1264 | 1265 | raw-body@2.4.0: 1266 | version "2.4.0" 1267 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 1268 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 1269 | dependencies: 1270 | bytes "3.1.0" 1271 | http-errors "1.7.2" 1272 | iconv-lite "0.4.24" 1273 | unpipe "1.0.0" 1274 | 1275 | react-dom@^16.6.0: 1276 | version "16.8.6" 1277 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f" 1278 | integrity sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA== 1279 | dependencies: 1280 | loose-envify "^1.1.0" 1281 | object-assign "^4.1.1" 1282 | prop-types "^15.6.2" 1283 | scheduler "^0.13.6" 1284 | 1285 | react-is@^16.8.1: 1286 | version "16.8.6" 1287 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" 1288 | integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== 1289 | 1290 | react@^16.6.0: 1291 | version "16.8.6" 1292 | resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe" 1293 | integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw== 1294 | dependencies: 1295 | loose-envify "^1.1.0" 1296 | object-assign "^4.1.1" 1297 | prop-types "^15.6.2" 1298 | scheduler "^0.13.6" 1299 | 1300 | readable-stream@^2.2.2: 1301 | version "2.3.6" 1302 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1303 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 1304 | dependencies: 1305 | core-util-is "~1.0.0" 1306 | inherits "~2.0.3" 1307 | isarray "~1.0.0" 1308 | process-nextick-args "~2.0.0" 1309 | safe-buffer "~5.1.1" 1310 | string_decoder "~1.1.1" 1311 | util-deprecate "~1.0.1" 1312 | 1313 | regexpp@^1.0.1: 1314 | version "1.1.0" 1315 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" 1316 | integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== 1317 | 1318 | require-uncached@^1.0.3: 1319 | version "1.0.3" 1320 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 1321 | integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= 1322 | dependencies: 1323 | caller-path "^0.1.0" 1324 | resolve-from "^1.0.0" 1325 | 1326 | resolve-from@^1.0.0: 1327 | version "1.0.1" 1328 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 1329 | integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= 1330 | 1331 | restore-cursor@^2.0.0: 1332 | version "2.0.0" 1333 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 1334 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 1335 | dependencies: 1336 | onetime "^2.0.0" 1337 | signal-exit "^3.0.2" 1338 | 1339 | rimraf@^2.6.1, rimraf@~2.6.2: 1340 | version "2.6.3" 1341 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1342 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1343 | dependencies: 1344 | glob "^7.1.3" 1345 | 1346 | run-async@^2.2.0: 1347 | version "2.3.0" 1348 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 1349 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= 1350 | dependencies: 1351 | is-promise "^2.1.0" 1352 | 1353 | rx-lite-aggregates@^4.0.8: 1354 | version "4.0.8" 1355 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" 1356 | integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= 1357 | dependencies: 1358 | rx-lite "*" 1359 | 1360 | rx-lite@*, rx-lite@^4.0.8: 1361 | version "4.0.8" 1362 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" 1363 | integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= 1364 | 1365 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1366 | version "5.1.2" 1367 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1368 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1369 | 1370 | "safer-buffer@>= 2.1.2 < 3": 1371 | version "2.1.2" 1372 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1373 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1374 | 1375 | scheduler@^0.13.6: 1376 | version "0.13.6" 1377 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" 1378 | integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== 1379 | dependencies: 1380 | loose-envify "^1.1.0" 1381 | object-assign "^4.1.1" 1382 | 1383 | semver@^5.3.0: 1384 | version "5.7.0" 1385 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 1386 | integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== 1387 | 1388 | send@0.17.1: 1389 | version "0.17.1" 1390 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 1391 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 1392 | dependencies: 1393 | debug "2.6.9" 1394 | depd "~1.1.2" 1395 | destroy "~1.0.4" 1396 | encodeurl "~1.0.2" 1397 | escape-html "~1.0.3" 1398 | etag "~1.8.1" 1399 | fresh "0.5.2" 1400 | http-errors "~1.7.2" 1401 | mime "1.6.0" 1402 | ms "2.1.1" 1403 | on-finished "~2.3.0" 1404 | range-parser "~1.2.1" 1405 | statuses "~1.5.0" 1406 | 1407 | serve-static@1.14.1: 1408 | version "1.14.1" 1409 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 1410 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 1411 | dependencies: 1412 | encodeurl "~1.0.2" 1413 | escape-html "~1.0.3" 1414 | parseurl "~1.3.3" 1415 | send "0.17.1" 1416 | 1417 | setprototypeof@1.1.1: 1418 | version "1.1.1" 1419 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 1420 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 1421 | 1422 | shebang-command@^1.2.0: 1423 | version "1.2.0" 1424 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1425 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1426 | dependencies: 1427 | shebang-regex "^1.0.0" 1428 | 1429 | shebang-regex@^1.0.0: 1430 | version "1.0.0" 1431 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1432 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1433 | 1434 | signal-exit@^3.0.2: 1435 | version "3.0.2" 1436 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1437 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 1438 | 1439 | slice-ansi@1.0.0: 1440 | version "1.0.0" 1441 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" 1442 | integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== 1443 | dependencies: 1444 | is-fullwidth-code-point "^2.0.0" 1445 | 1446 | source-map@^0.5.0: 1447 | version "0.5.7" 1448 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1449 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1450 | 1451 | sprintf-js@~1.0.2: 1452 | version "1.0.3" 1453 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1454 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1455 | 1456 | standalone-react-addons-pure-render-mixin@^0.1.1: 1457 | version "0.1.1" 1458 | resolved "https://registry.yarnpkg.com/standalone-react-addons-pure-render-mixin/-/standalone-react-addons-pure-render-mixin-0.1.1.tgz#3c7409f4c79c40de9ac72c616cf679a994f37551" 1459 | integrity sha1-PHQJ9MecQN6axyxhbPZ5qZTzdVE= 1460 | 1461 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 1462 | version "1.5.0" 1463 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1464 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 1465 | 1466 | string-width@^2.1.0, string-width@^2.1.1: 1467 | version "2.1.1" 1468 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1469 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1470 | dependencies: 1471 | is-fullwidth-code-point "^2.0.0" 1472 | strip-ansi "^4.0.0" 1473 | 1474 | string_decoder@~1.1.1: 1475 | version "1.1.1" 1476 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1477 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1478 | dependencies: 1479 | safe-buffer "~5.1.0" 1480 | 1481 | strip-ansi@^3.0.0: 1482 | version "3.0.1" 1483 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1484 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1485 | dependencies: 1486 | ansi-regex "^2.0.0" 1487 | 1488 | strip-ansi@^4.0.0: 1489 | version "4.0.0" 1490 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1491 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1492 | dependencies: 1493 | ansi-regex "^3.0.0" 1494 | 1495 | strip-json-comments@~2.0.1: 1496 | version "2.0.1" 1497 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1498 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1499 | 1500 | supports-color@^2.0.0: 1501 | version "2.0.0" 1502 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1503 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 1504 | 1505 | supports-color@^5.3.0: 1506 | version "5.5.0" 1507 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1508 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1509 | dependencies: 1510 | has-flag "^3.0.0" 1511 | 1512 | sweetalert2@^7.28.11: 1513 | version "7.33.1" 1514 | resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-7.33.1.tgz#7e3534d2c2962f875f419cfea5d75ee526d65cd4" 1515 | integrity sha512-69KYtyhtxejFG0HDb8aVhAwbpAWPSTZwaL5vxDHgojErD2KeFxTmRgmkbiLtMC8UdTFXRmvTPtZTF4459MUb7w== 1516 | 1517 | table@4.0.2: 1518 | version "4.0.2" 1519 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" 1520 | integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== 1521 | dependencies: 1522 | ajv "^5.2.3" 1523 | ajv-keywords "^2.1.0" 1524 | chalk "^2.1.0" 1525 | lodash "^4.17.4" 1526 | slice-ansi "1.0.0" 1527 | string-width "^2.1.1" 1528 | 1529 | text-table@~0.2.0: 1530 | version "0.2.0" 1531 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1532 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1533 | 1534 | through@^2.3.6: 1535 | version "2.3.8" 1536 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1537 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1538 | 1539 | tmp@^0.0.33: 1540 | version "0.0.33" 1541 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1542 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 1543 | dependencies: 1544 | os-tmpdir "~1.0.2" 1545 | 1546 | to-fast-properties@^2.0.0: 1547 | version "2.0.0" 1548 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1549 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1550 | 1551 | toidentifier@1.0.0: 1552 | version "1.0.0" 1553 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 1554 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 1555 | 1556 | trim-right@^1.0.1: 1557 | version "1.0.1" 1558 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 1559 | integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= 1560 | 1561 | type-check@~0.3.2: 1562 | version "0.3.2" 1563 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1564 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1565 | dependencies: 1566 | prelude-ls "~1.1.2" 1567 | 1568 | type-is@~1.6.17, type-is@~1.6.18: 1569 | version "1.6.18" 1570 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 1571 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1572 | dependencies: 1573 | media-typer "0.3.0" 1574 | mime-types "~2.1.24" 1575 | 1576 | typedarray@^0.0.6: 1577 | version "0.0.6" 1578 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 1579 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 1580 | 1581 | unpipe@1.0.0, unpipe@~1.0.0: 1582 | version "1.0.0" 1583 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1584 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 1585 | 1586 | util-deprecate@~1.0.1: 1587 | version "1.0.2" 1588 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1589 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1590 | 1591 | utils-merge@1.0.1: 1592 | version "1.0.1" 1593 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1594 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 1595 | 1596 | vary@~1.1.2: 1597 | version "1.1.2" 1598 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1599 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 1600 | 1601 | which@^1.2.9: 1602 | version "1.3.1" 1603 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1604 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1605 | dependencies: 1606 | isexe "^2.0.0" 1607 | 1608 | why-did-you-update@^0.1.1: 1609 | version "0.1.1" 1610 | resolved "https://registry.yarnpkg.com/why-did-you-update/-/why-did-you-update-0.1.1.tgz#c73d361511fecd899056e9954ca9b1ab760d3097" 1611 | integrity sha512-CCi6k05CJ44wJEuE3D2LXtHO4YX7LjuG5cHrs8UAUWJAEDO/bWF1+/wT0gt4gLd3e69bKJJBbUk86bVdlT4E6A== 1612 | dependencies: 1613 | lodash.every "^4.6.0" 1614 | lodash.filter "^4.6.0" 1615 | lodash.isequal "^4.5.0" 1616 | lodash.isfunction "^3.0.8" 1617 | lodash.isstring "^4.0.1" 1618 | lodash.keys "^4.2.0" 1619 | lodash.pick "^4.4.0" 1620 | lodash.some "^4.6.0" 1621 | lodash.union "^4.6.0" 1622 | 1623 | wordwrap@~1.0.0: 1624 | version "1.0.0" 1625 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 1626 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 1627 | 1628 | wrappy@1: 1629 | version "1.0.2" 1630 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1631 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1632 | 1633 | write@^0.2.1: 1634 | version "0.2.1" 1635 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 1636 | integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= 1637 | dependencies: 1638 | mkdirp "^0.5.1" 1639 | 1640 | yallist@^2.1.2: 1641 | version "2.1.2" 1642 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 1643 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 1644 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vim-package-json", 3 | "version": "0.0.1", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha" 8 | }, 9 | "keywords": [], 10 | "author": "Abin Simon (meain.io)", 11 | "license": "MIT", 12 | "dependencies": { 13 | "@yarnpkg/lockfile": "^1.1.0", 14 | "follow-redirects": "^1.7.0", 15 | "mocha": "^6.1.4", 16 | "toml": "^3.0.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /plugin/vim-package-info.vim: -------------------------------------------------------------------------------- 1 | if !hlexists('VimPackageInfoPatch') 2 | highlight default VimPackageInfoPatch guifg=#8BC34A ctermfg=10 3 | endif 4 | 5 | if !hlexists('VimPackageInfoMinor') 6 | highlight default VimPackageInfoMinor guifg=#00BCD4 ctermfg=14 7 | endif 8 | 9 | if !hlexists('VimPackageInfoMajor') 10 | highlight default VimPackageInfoMajor guifg=#F44336 ctermfg=9 11 | endif 12 | 13 | if !hlexists('VimPackageInfoVulnerable') 14 | highlight default VimPackageInfoVulnerable guibg=#e85845 ctermbg=9 guifg=#222222 ctermfg=0 15 | endif 16 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "env": { 3 | "node": true, 4 | "es6": true 5 | }, 6 | "extends": "eslint:recommended", 7 | "parserOptions": { 8 | "ecmaVersion": 2018 9 | }, 10 | "rules": { 11 | "indent": [ 12 | "error", 13 | 2 14 | ], 15 | "linebreak-style": [ 16 | "error", 17 | "unix" 18 | ], 19 | "quotes": [ 20 | "error", 21 | "double" 22 | ], 23 | "semi": [ 24 | "error", 25 | "always" 26 | ], 27 | "no-console": 0 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/diff.js: -------------------------------------------------------------------------------- 1 | function ensureNumber(value) { 2 | const num = Number.parseInt(value || "0", 10); 3 | return Number.isNaN(num) ? 0 : num; 4 | } 5 | 6 | function normalize(version) { 7 | if (version) { 8 | const versionWithoutRange = version.replace(/[\^>=<]/g, ""); 9 | const [versionWithoutBuild, buildText] = versionWithoutRange.trim().split("+", 2); 10 | const [versionWithoutRelease, releaseText] = versionWithoutBuild.split("-", 2); 11 | const [majorText, minorText, patchText] = versionWithoutRelease.split("."); 12 | const major = ensureNumber(majorText); 13 | const minor = ensureNumber(minorText); 14 | const patch = ensureNumber(patchText); 15 | const release = releaseText ? `-${releaseText}` : null; 16 | const build = buildText ? `+${buildText}` : null; 17 | const rest = (release || "") + (build || ""); 18 | 19 | return { major, minor, patch, release, build, rest }; 20 | } 21 | 22 | return null; 23 | } 24 | 25 | const diffLevel = { 26 | major: 3, 27 | minor: 2, 28 | patch: 1, 29 | none: 0, 30 | }; 31 | 32 | function calculateDiff(c, l) { 33 | if (c && l) { 34 | if (l.major > c.major) { 35 | return diffLevel.major; 36 | } else if (l.major === c.major) { 37 | if (l.minor > c.minor) { 38 | return diffLevel.minor; 39 | } else if (l.minor === c.minor) { 40 | if (l.patch > c.patch) { 41 | return diffLevel.patch; 42 | } 43 | } 44 | } 45 | } 46 | 47 | return diffLevel.none; 48 | } 49 | 50 | function getHighlight(level, diff, hl) { 51 | if (diff >= level) { 52 | switch (diff) { 53 | case diffLevel.major: 54 | return "VimPackageInfoMajor"; 55 | case diffLevel.minor: 56 | return "VimPackageInfoMinor"; 57 | case diffLevel.patch: 58 | return "VimPackageInfoPatch"; 59 | } 60 | } 61 | 62 | return hl; 63 | } 64 | 65 | function colorizeDiff(current, latest, hl) { 66 | const c = normalize(current); 67 | const l = normalize(latest); 68 | const diff = calculateDiff(c, l); 69 | let highlight = []; 70 | 71 | if (c) { 72 | highlight.push([`${c.major}.${c.minor}.${c.patch}${c.rest}`, hl]); 73 | } else { 74 | highlight.push(["unavailable", hl]); 75 | } 76 | 77 | highlight.push([" ⇒ ", hl]); 78 | highlight.push([l.major.toString(), getHighlight(diffLevel.major, diff, hl)]); 79 | highlight.push([".", hl]); 80 | highlight.push([l.minor.toString(), getHighlight(diffLevel.minor, diff, hl)]); 81 | highlight.push([".", hl]); 82 | highlight.push([l.patch.toString(), getHighlight(diffLevel.patch, diff, hl)]); 83 | 84 | if (l.rest) { 85 | highlight.push([l.rest.toString(), getHighlight(diffLevel.patch, diff, hl)]); 86 | } 87 | 88 | return highlight; 89 | } 90 | 91 | module.exports = { colorizeDiff }; 92 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/index.js: -------------------------------------------------------------------------------- 1 | const utils = require("./utils.js"); 2 | const Store = require("./more.js").default; 3 | const render = require("./render.js"); 4 | // const vulnerability = require("./vulnerability.js"); 5 | 6 | const PackageJson = require("./parsers/package-json.js").default; 7 | const CargoParser = require("./parsers/cargo.js").default; 8 | const RequirementsTxt = require("./parsers/requirements-txt.js").default; 9 | const PipfileParser = require("./parsers/pipfile.js").default; 10 | const PyprojectToml = require("./parsers/pyproject-toml.js").default; 11 | 12 | let globalHandle = null; 13 | function callRenderer(confType, dep) { 14 | const parser = getPackageParser(confType); 15 | if (globalHandle) parser.render(globalHandle, dep); 16 | } 17 | 18 | // I think each excecution starts fresh but with same interpretter 19 | if (!("store" in global)) { 20 | global.store = new Store({}, callRenderer); 21 | global.bufferHash = null; // use timestamp for now 22 | } 23 | 24 | // do not move to utils, will create cyclic dependency 25 | function getPackageParser(confType) { 26 | switch (confType) { 27 | case "rust": 28 | return new CargoParser(); 29 | break; 30 | case "javascript": 31 | return new PackageJson(); 32 | break; 33 | case "python:requirements": 34 | return new RequirementsTxt(); 35 | break; 36 | case "python:pipfile": 37 | return new PipfileParser(); 38 | break; 39 | case "python:pyproject": 40 | return new PyprojectToml(); 41 | break; 42 | } 43 | } 44 | 45 | async function run(handle) { 46 | globalHandle = handle; 47 | global.bufferHash = +new Date(); 48 | await render.clearAll(handle); 49 | 50 | const buffer = await handle.nvim.buffer; 51 | const bufferLines = await buffer.getLines(); 52 | const bufferContent = bufferLines.join("\n"); 53 | 54 | const filePath = await handle.nvim.commandOutput("echo expand('%')"); // there should be a better, I just don't know 55 | const confType = utils.determineFileKind(filePath); 56 | 57 | const parser = getPackageParser(confType); 58 | const depList = parser.getDeps(bufferContent); 59 | parser.updatePackageVersions(depList); 60 | parser.updateCurrentVersions(depList, filePath); 61 | // vulnerability.updateVulnerabilities(depList, confType); 62 | 63 | } 64 | 65 | module.exports = handle => { 66 | handle.setOptions({ dev: true }); 67 | // handle.registerCommand( 68 | // "ShowVulnerabilities", 69 | // async () => { 70 | // try { 71 | // vulnerability.showVulnerabilities(handle); 72 | // } catch (err) { 73 | // console.error(err); 74 | // } 75 | // }, 76 | // { sync: false } 77 | // ); 78 | 79 | ["BufEnter", "InsertLeave", "TextChanged"].forEach(e => { 80 | handle.registerAutocmd(e, async () => await run(handle), { 81 | pattern: "*/package.json,*/Cargo.toml,*/*requirements.txt,*/Pipfile,*/pyproject.toml", 82 | }); 83 | }); 84 | }; 85 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/more.js: -------------------------------------------------------------------------------- 1 | // A super minimal store implementation with callback on insert event 2 | 3 | class Store { 4 | constructor(initialValue = {}, callback) { 5 | this.store = initialValue; 6 | this.callback = callback; 7 | } 8 | 9 | get(lang = null, dep = null) { 10 | if (lang === null) return {}; 11 | else if (dep === null) return this.store[lang][dep] || {}; 12 | else return this.store[lang][dep]; 13 | } 14 | 15 | set(lang, dep, value) { 16 | if (!(lang in this.store)) this.store[lang] = {}; 17 | if (!(dep in this.store[lang])) this.store[lang][dep] = {}; 18 | this.store[lang][dep] = { 19 | ...this.store[lang][dep], 20 | ...value, 21 | }; 22 | this.callback(lang, dep, this.store[lang][dep]); 23 | } 24 | } 25 | 26 | module.exports = { default: Store }; 27 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/parsers/cargo.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | const toml = require("toml"); 4 | 5 | const utils = require("../utils"); 6 | const render = require("../render"); 7 | const rutils = require("../render_utils"); 8 | 9 | const LANGUAGE = "rust"; 10 | const depGroups = ["dependencies", "build-dependencies", "dev-dependencies"]; 11 | const nameRegex = /([a-zA-Z0-9\-_]*) *=.*/; 12 | const markers = [[/\[(.*dependencies)\]/, /^ *\[.*\].*/]]; 13 | 14 | class CargoParser { 15 | getDeps(bufferContent) { 16 | const data = toml.parse(bufferContent); 17 | const depList = []; 18 | 19 | for (let dg of depGroups) { 20 | if (dg in data) 21 | for (let dep in data[dg]) { 22 | global.store.set(LANGUAGE, dep, { semver_version: data[dg][dep] }); 23 | depList.push(dep); 24 | } 25 | } 26 | 27 | return depList; 28 | } 29 | 30 | updatePackageVersions(depList) { 31 | for (let dep of depList) { 32 | if ("latest" in global.store.get(LANGUAGE, dep)) return; 33 | 34 | const fetchURL = `https://crates.io/api/v1/crates/${dep}`; 35 | utils.fetcher(fetchURL).then(data => { 36 | data = JSON.parse(data); 37 | const latest = data["crate"].max_version; 38 | const versions = data["versions"].map(v => v.num); 39 | global.store.set(LANGUAGE, dep, { latest, versions }); 40 | }); 41 | } 42 | } 43 | 44 | updateCurrentVersions(depList, filePath) { 45 | const dir = path.dirname(filePath); 46 | const lock_filename = path.join(dir, "Cargo.lock"); 47 | 48 | if (fs.existsSync(lock_filename)) { 49 | const lockfile_content = toml.parse(fs.readFileSync(lock_filename, "utf-8")); 50 | for (let pack of lockfile_content["package"]) { 51 | global.store.set(LANGUAGE, pack.name, { 52 | current_version: pack.version || null, 53 | }); 54 | } 55 | } 56 | } 57 | 58 | async render(handle, dep) { 59 | const buffer = await handle.nvim.buffer; 60 | const bufferLines = await buffer.getLines(); 61 | 62 | const info = global.store.get(LANGUAGE, dep); 63 | 64 | const lineNumber = rutils.getDepLine(bufferLines, markers, nameRegex, dep, true); 65 | const isVulnerable = "vulnerabilities" in info && info.vulnerabilities.length > 0; 66 | if (lineNumber) 67 | await render.drawOne(handle, lineNumber, info.current_version, info.latest, isVulnerable); 68 | } 69 | } 70 | 71 | module.exports = { default: CargoParser }; 72 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/parsers/package-json.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | const lockfile = require("@yarnpkg/lockfile"); 4 | 5 | const utils = require("../utils"); 6 | const render = require("../render"); 7 | const rutils = require("../render_utils"); 8 | 9 | const LANGUAGE = "javascript"; 10 | const depGroups = ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"]; 11 | const markers = depGroups.map((prop) => [new RegExp(`["|'](${prop})["|']`), /\}/]); 12 | const nameRegex = /['|"](.*)['|"] *:/; 13 | 14 | class PackageJson { 15 | getDeps(bufferContent) { 16 | const data = JSON.parse(bufferContent); 17 | const depList = []; 18 | 19 | for (let dg of depGroups) { 20 | if (dg in data) 21 | for (let dep in data[dg]) { 22 | global.store.set(LANGUAGE, dep, { semver_version: data[dg][dep] }); 23 | depList.push(dep); 24 | } 25 | } 26 | 27 | return depList; 28 | } 29 | 30 | updatePackageVersions(depList) { 31 | for (let dep of depList) { 32 | const fetchURL = `https://registry.npmjs.org/${dep}`; 33 | utils.fetcher(fetchURL).then(data => { 34 | const semver_version = global.store.get(LANGUAGE, dep).semver_version; 35 | if (/^(http[s]*|file):\/\//.test(semver_version)) return; // don't bother checking in this case 36 | 37 | data = JSON.parse(data); 38 | let latest = null; 39 | let versions = null; 40 | if ("dist-tags" in data && "latest" in data["dist-tags"]) 41 | latest = data["dist-tags"]["latest"]; 42 | if ("versions" in data) versions = Object.keys(data["versions"]); 43 | global.store.set(LANGUAGE, dep, { latest, versions }); 44 | }); 45 | } 46 | } 47 | 48 | updateCurrentVersions(depList, filePath) { 49 | let found = false; 50 | let dir = path.resolve(path.dirname(filePath)); 51 | 52 | do { 53 | const npm_lock_filename = path.join(dir, "package-lock.json"); 54 | const yarn_lock_filename = path.join(dir, "yarn.lock"); 55 | 56 | if (fs.existsSync(npm_lock_filename)) { 57 | found = true; 58 | const lockfile_content = JSON.parse(fs.readFileSync(npm_lock_filename, "utf-8")); 59 | for (let dep of depList) { 60 | for (let dg of depGroups) { 61 | if (dg in lockfile_content && dep in lockfile_content[dg]) { 62 | global.store.set(LANGUAGE, dep, { 63 | current_version: lockfile_content[dg][dep]["version"] || null, 64 | }); 65 | break; 66 | } 67 | } 68 | } 69 | } else if (fs.existsSync(yarn_lock_filename)) { 70 | found = true; 71 | const lockfile_content = lockfile.parse(fs.readFileSync(yarn_lock_filename, "utf-8")); 72 | for (let dep of depList) { 73 | for (let ld of Object.keys(lockfile_content["object"])) { 74 | if (ld.split("@")[0] === dep) { 75 | const current_version = lockfile_content["object"][ld].version; 76 | global.store.set(LANGUAGE, dep, { 77 | current_version, 78 | }); 79 | } 80 | } 81 | } 82 | } else { 83 | dir = path.dirname(dir); 84 | } 85 | } while (!found && dir !== path.dirname(dir)); 86 | } 87 | 88 | async render(handle, dep) { 89 | const buffer = await handle.nvim.buffer; 90 | const bufferLines = await buffer.getLines(); 91 | 92 | const info = global.store.get(LANGUAGE, dep); 93 | 94 | const lineNumber = rutils.getDepLine(bufferLines, markers, nameRegex, dep); 95 | const isVulnerable = "vulnerabilities" in info && info.vulnerabilities.length > 0; 96 | if (lineNumber) 97 | await render.drawOne(handle, lineNumber, info.current_version, info.latest, isVulnerable); 98 | } 99 | } 100 | 101 | module.exports = { default: PackageJson }; 102 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/parsers/pipfile.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | const toml = require("toml"); 4 | 5 | const utils = require("../utils"); 6 | const render = require("../render"); 7 | const rutils = require("../render_utils"); 8 | 9 | const LANGUAGE = "python:pipfile"; 10 | const depGroups = ["packages", "dev-packages"]; 11 | const markers = [[/\[(packages)\]/, /^ *\[.*\].*/], [/\[(dev-packages)\]/, /^ *\[.*\].*/]]; 12 | const nameRegex = /"?([a-zA-Z0-9\-_]*)"? *=.*/; 13 | 14 | class PipfileParser { 15 | getDeps(bufferContent) { 16 | const data = toml.parse(bufferContent); 17 | const depList = []; 18 | 19 | for (let dg of depGroups) { 20 | if (dg in data) 21 | for (let dep in data[dg]) { 22 | global.store.set(LANGUAGE, dep, { semver_version: data[dg][dep] }); 23 | depList.push(dep); 24 | } 25 | } 26 | 27 | return depList; 28 | } 29 | 30 | updatePackageVersions(depList) { 31 | for (let dep of depList) { 32 | if ("latest" in global.store.get(LANGUAGE, dep)) return; 33 | 34 | const fetchURL = `https://pypi.org/pypi/${dep}/json`; 35 | utils.fetcher(fetchURL).then(data => { 36 | data = JSON.parse(data); 37 | const latest = data.info.version; 38 | const versions = Object.keys(data["releases"]); 39 | global.store.set(LANGUAGE, dep, { latest, versions }); 40 | }); 41 | } 42 | } 43 | 44 | updateCurrentVersions(depList, filePath) { 45 | const dir = path.dirname(filePath); 46 | const lock_filename = path.join(dir, "Pipfile.lock"); 47 | 48 | if (fs.existsSync(lock_filename)) { 49 | const lockfile_content = JSON.parse(fs.readFileSync(lock_filename, "utf-8")); 50 | for (let dep of depList) { 51 | for (let dg of ["default", "develop"]) { 52 | if (dg in lockfile_content && dep in lockfile_content[dg]) { 53 | global.store.set(LANGUAGE, dep, { 54 | current_version: lockfile_content[dg][dep]["version"] || null, // TODO: contains == in the beginning, thing about it 55 | }); 56 | break; 57 | } 58 | } 59 | } 60 | } 61 | } 62 | 63 | async render(handle, dep) { 64 | // this could be in the baseclass 65 | const buffer = await handle.nvim.buffer; 66 | const bufferLines = await buffer.getLines(); 67 | 68 | const info = global.store.get(LANGUAGE, dep); 69 | 70 | // TODO: switch from latest_version to latest_semver satisfied version 71 | const lineNumber = rutils.getDepLine(bufferLines, markers, nameRegex, dep, true); 72 | const isVulnerable = "vulnerabilities" in info && info.vulnerabilities.length > 0; 73 | if (lineNumber) 74 | await render.drawOne(handle, lineNumber, info.current_version, info.latest, isVulnerable); 75 | } 76 | } 77 | 78 | module.exports = { default: PipfileParser }; 79 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/parsers/pyproject-toml.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | const toml = require("toml"); 4 | 5 | const utils = require("../utils"); 6 | const render = require("../render"); 7 | const rutils = require("../render_utils"); 8 | 9 | const LANGUAGE = "python:pyproject"; 10 | const depGroups = ["dependencies", "dev-dependencies"]; 11 | const markers = [[/\[(.*dependencies)\]/, /^ *\[.*\].*/]]; 12 | const nameRegex = /['|"]?([a-zA-Z0-9\-_]*)['|"]? *=.*/; 13 | 14 | class PyprojectToml { 15 | getDeps(bufferContent) { 16 | const data = toml.parse(bufferContent)["tool"]["poetry"]; 17 | const depList = []; 18 | 19 | for (let dg of depGroups) { 20 | if (dg in data) 21 | for (let dep in data[dg]) { 22 | global.store.set(LANGUAGE, dep, { semver_version: data[dg][dep] }); 23 | depList.push(dep); 24 | } 25 | } 26 | 27 | console.log("depList:", depList); 28 | return depList; 29 | } 30 | 31 | updatePackageVersions(depList) { 32 | for (let dep of depList) { 33 | if ("latest" in global.store.get(LANGUAGE, dep)) return; 34 | 35 | const fetchURL = `https://pypi.org/pypi/${dep}/json`; 36 | utils.fetcher(fetchURL).then(data => { 37 | data = JSON.parse(data); 38 | const latest = data.info.version; 39 | console.log("latest:", latest); 40 | const versions = Object.keys(data["releases"]); 41 | global.store.set(LANGUAGE, dep, { latest, versions }); 42 | }); 43 | } 44 | } 45 | 46 | updateCurrentVersions(depList, filePath) { 47 | const dir = path.dirname(filePath); 48 | const lock_filename = path.join(dir, "poetry.lock"); 49 | 50 | if (fs.existsSync(lock_filename)) { 51 | const lockfile_content = toml.parse(fs.readFileSync(lock_filename, "utf-8")); 52 | for (let pack of lockfile_content["package"]) { 53 | global.store.set(LANGUAGE, pack.name, { 54 | current_version: pack.version || null, 55 | }); 56 | } 57 | } 58 | } 59 | 60 | async render(handle, dep) { 61 | const buffer = await handle.nvim.buffer; 62 | const bufferLines = await buffer.getLines(); 63 | 64 | const info = global.store.get(LANGUAGE, dep); 65 | const lineNumber = rutils.getDepLine(bufferLines, markers, nameRegex, dep, true); 66 | // TODO: switch from latest_version to latest_semver satisfied version 67 | const isVulnerable = "vulnerabilities" in info && info.vulnerabilities.length > 0; 68 | if (lineNumber) 69 | await render.drawOne(handle, lineNumber, info.current_version, info.latest, isVulnerable); 70 | } 71 | } 72 | 73 | module.exports = { default: PyprojectToml }; 74 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/parsers/requirements-txt.js: -------------------------------------------------------------------------------- 1 | const utils = require("../utils"); 2 | const render = require("../render"); 3 | const rutils = require("../render_utils"); 4 | 5 | const LANGUAGE = "python:requirements"; 6 | const markers = null; 7 | const nameRegex = /^ *([a-zA-Z_]+[a-zA-Z0-9\-_]*).*/; 8 | 9 | class RequirementsTxt { 10 | getDeps(bufferContent) { 11 | const depList = []; 12 | 13 | for (let line of bufferContent.split("\n")) { 14 | const vals = line.match(nameRegex); 15 | if (vals !== null && vals !== undefined && 1 in vals) { 16 | const dep = vals[1].trim(); 17 | let semver_version = null; 18 | 19 | const version_part = line.split("==")[1]; 20 | if (version_part) { 21 | const version_matches = version_part.match(/(\d+\.)?(\d+\.)?(\*|\d+)/); 22 | if (version_matches.length > 0) { 23 | semver_version = version_matches[0]; 24 | } 25 | } 26 | 27 | global.store.set(LANGUAGE, dep, { semver_version, current_version: semver_version }); 28 | depList.push(dep); 29 | } 30 | } 31 | 32 | return depList; 33 | } 34 | 35 | updatePackageVersions(depList) { 36 | for (let dep of depList) { 37 | if ("latest" in global.store.get(LANGUAGE, dep)) return; 38 | 39 | const fetchURL = `https://pypi.org/pypi/${dep}/json`; 40 | utils.fetcher(fetchURL).then(data => { 41 | data = JSON.parse(data); 42 | const latest = data.info.version; 43 | const versions = Object.keys(data["releases"]); 44 | global.store.set(LANGUAGE, dep, { latest, versions }); 45 | }); 46 | } 47 | } 48 | 49 | updateCurrentVersions() { 50 | // no specific lockfile, copy semver_version to current_version 51 | // taken care in getDeps 52 | } 53 | 54 | async render(handle, dep) { 55 | // TODO: maybe move this to a baseclass 56 | const buffer = await handle.nvim.buffer; 57 | const bufferLines = await buffer.getLines(); 58 | 59 | const info = global.store.get(LANGUAGE, dep); 60 | 61 | // TODO: switch from latest_version to latest_semver satisfied version 62 | const lineNumber = rutils.getDepLine(bufferLines, markers, nameRegex, dep, true); 63 | const isVulnerable = "vulnerabilities" in info && info.vulnerabilities.length > 0; 64 | if (lineNumber) 65 | await render.drawOne(handle, lineNumber, info.current_version, info.latest, isVulnerable); 66 | } 67 | } 68 | 69 | module.exports = { default: RequirementsTxt }; 70 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/render.js: -------------------------------------------------------------------------------- 1 | const utils = require("./utils"); 2 | const rutils = require("./render_utils"); 3 | 4 | async function clearAll(handle) { 5 | await handle.nvim.buffer.clearNamespace({ nsId: 1 }); 6 | } 7 | 8 | async function drawOne(handle, lineNum, current, latest, vulnerable) { 9 | const { prefix, hl_group } = await utils.getConfigValues(handle); 10 | const lp = rutils.format(current, prefix, hl_group, latest, vulnerable); 11 | 12 | const buffer = await handle.nvim.buffer; 13 | await buffer.setVirtualText(1, lineNum, lp); 14 | } 15 | 16 | module.exports = { clearAll, drawOne }; 17 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/render_utils.js: -------------------------------------------------------------------------------- 1 | const diff = require("./diff"); 2 | 3 | function isStart(line, depMarkers) { 4 | // for requirements.txt 5 | if (depMarkers === null) return { depGroupName: null, end: null }; 6 | 7 | for (let i = 0; i < depMarkers.length; i++) { 8 | const dm = depMarkers[i]; 9 | const depGroup = line.match(dm[0]); 10 | if (depGroup !== undefined && depGroup !== null) { 11 | return { depGroupName: depGroup[1], end: dm[1] }; 12 | } 13 | } 14 | return false; 15 | } 16 | 17 | function getDepLine(lines, depMarkers, nameRegex, name, end_maybe_start_of_next = false) { 18 | let start = depMarkers === null ? true : false; 19 | let end = false; 20 | for (let i = 0; i < lines.length; i++) { 21 | if (start) { 22 | if (end && end !== null && end.test(lines[i])) { 23 | start = false; 24 | end = false; 25 | if (end_maybe_start_of_next) --i; 26 | } 27 | 28 | const vals = lines[i].match(nameRegex); 29 | if ( 30 | vals !== null && 31 | vals !== undefined && 32 | 1 in vals && 33 | vals[1] !== null && 34 | vals[1].trim() === name.trim() 35 | ) { 36 | return i; 37 | } 38 | //eslint-disable-next-line 39 | } else if (!!isStart(lines[i], depMarkers)) { 40 | start = true; 41 | end = isStart(lines[i], depMarkers).end; 42 | } 43 | } 44 | return null; 45 | } 46 | 47 | function format(current, prefix, hl, latest, vulnerable = false) { 48 | // let lpf = [[`${prefix}No info available`, hl]]; 49 | let lpf = [["", hl]]; 50 | const cd = diff.colorizeDiff(current, latest, hl); 51 | 52 | if (vulnerable) 53 | lpf = [[" ", hl], [" vulnerable ", "VimPackageInfoVulnerable"], [" ", hl], ...cd]; 54 | else lpf = [[`${prefix} `, hl], ...cd]; 55 | 56 | return lpf; 57 | } 58 | 59 | module.exports = { getDepLine, format }; 60 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/utils.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const https = require("follow-redirects").https; 3 | 4 | function determineFileKind(filePath) { 5 | const filename = path.basename(filePath); 6 | 7 | if (filename.match(/^.*?requirements.txt$/)) { 8 | return "python:requirements"; 9 | } 10 | if (filename.match(/^pyproject.toml$/)) { 11 | return "python:pyproject"; 12 | } 13 | if (filename.match(/^Pipfile/)) { 14 | return "python:pipfile"; 15 | } 16 | if (filename.match(/^Cargo.toml$/)) { 17 | return "rust"; 18 | } 19 | if (filename.match(/^package.json$/)) { 20 | return "javascript"; 21 | } 22 | } 23 | 24 | // TODO: make use of this 25 | function getUrl(dep, confType) { 26 | switch (confType) { 27 | case "javascript": 28 | return `https://registry.npmjs.org/${dep}`; 29 | case "rust": 30 | return `https://crates.io/api/v1/crates/${dep}`; 31 | case "python:requirements": 32 | case "python:pipfile": 33 | case "python:pyproject": 34 | return `https://pypi.org/pypi/${dep}/json`; 35 | default: 36 | return false; 37 | } 38 | } 39 | 40 | // TODO: make this the only way to get this info + do for markers 41 | function getNameRegex(confType) { 42 | return { 43 | javascript: /['|"](.*)['|"] *:/, 44 | rust: /([a-zA-Z0-9\-_]*) *=.*/, 45 | "python:requirements": /^ *([a-zA-Z_]+[a-zA-Z0-9\-_]*).*/, 46 | "python:pipfile": /"?([a-zA-Z0-9\-_]*)"? *=.*/, 47 | "python:pyproject": /['|"]?([a-zA-Z0-9\-_]*)['|"]? *=.*/, 48 | }[confType]; 49 | } 50 | 51 | function getDepMarkers(confType) { 52 | // [ [start, end], [start, end] ] 53 | return { 54 | javascript: [[/["|'](dependencies)["|']/, /\}/], [/["|'](devDependencies)["|']/, /\}/]], 55 | rust: [[/\[(.*dependencies)\]/, /^ *\[.*\].*/]], 56 | "python:requirements": null, 57 | "python:pipfile": [[/\[(packages)\]/, /^ *\[.*\].*/], [/\[(dev-packages)\]/, /^ *\[.*\].*/]], 58 | "python:pyproject": [[/\[(.*dependencies)\]/, /^ *\[.*\].*/]], 59 | }[confType]; 60 | } 61 | 62 | async function fetcher(url) { 63 | return new Promise((accept, reject) => { 64 | const options = { 65 | headers: { "User-Agent": "vim-package-info (github.com/meain/vim-package-info)" }, 66 | }; 67 | if (url) 68 | https 69 | .get(url, options, resp => { 70 | let data = ""; 71 | resp.on("data", chunk => { 72 | data += chunk; 73 | }); 74 | resp.on("end", () => { 75 | accept(data); 76 | }); 77 | }) 78 | .on("error", err => { 79 | console.log("Error: " + err.message); 80 | }); 81 | else { 82 | console.log("Error: no url provided" ); 83 | } 84 | }); 85 | } 86 | 87 | async function getConfigValues(nvim) { 88 | let prefix = " ¤ "; 89 | let hl_group = "NonText"; 90 | 91 | try { 92 | prefix = await nvim.nvim.eval("g:vim_package_json_virutaltext_prefix"); 93 | } catch (error) {} 94 | try { 95 | hl_group = await nvim.nvim.eval("g:vim_package_json_virutaltext_highlight"); 96 | } catch (error) {} 97 | 98 | try { 99 | prefix = await nvim.nvim.eval("g:vim_package_info_virutaltext_prefix"); 100 | } catch (error) {} 101 | try { 102 | hl_group = await nvim.nvim.eval("g:vim_package_info_virutaltext_highlight"); 103 | } catch (error) {} 104 | 105 | return { prefix, hl_group }; 106 | } 107 | 108 | // TODO: move to vulnerabilities.js file 109 | function createVulStats(vulnerabilities, dep) { 110 | let vv = [`# Vulnerabilities for ${dep}`, "", ""]; 111 | for (let v of vulnerabilities) { 112 | vv.push(`## ${v.title}${v.cwe ? `(${v.cwe})` : ""}`); 113 | vv.push(""); 114 | vv.push(v.description); 115 | vv.push(v.reference); 116 | vv.push(""); 117 | vv.push(""); 118 | } 119 | console.log("vv:", vv); 120 | return vv; 121 | } 122 | 123 | module.exports = { 124 | fetcher, 125 | getUrl, 126 | getConfigValues, 127 | determineFileKind, 128 | createVulStats, 129 | getNameRegex, 130 | getDepMarkers, 131 | }; 132 | -------------------------------------------------------------------------------- /rplugin/node/vim-package-info/vulnerability.js: -------------------------------------------------------------------------------- 1 | const https = require("follow-redirects").https; 2 | 3 | const utils = require("./utils"); 4 | 5 | let lastRequestTime = null; 6 | let fetchInterval = null; 7 | 8 | function getCoordinates(dep, version, confType) { 9 | if (!version) return false; 10 | const tag = `${dep}@${version.match(/(\d+\.)?(\d+\.)?(\*|\d+)/)[0]}`; 11 | switch (confType) { 12 | case "javascript": 13 | return `pkg:npm/${tag}`; 14 | case "rust": 15 | return `pkg:cargo/${tag}`; 16 | case "python:requirements": 17 | case "python:pipfile": 18 | case "python:pyproject": 19 | return `pkg:pypi/${tag}`; 20 | default: 21 | return false; 22 | } 23 | } 24 | 25 | function filterPackagesToCheck(depList, confType) { 26 | const filteredList = []; 27 | for (let dep of depList) { 28 | const info = global.store.get(confType, dep); 29 | if (!("vulnerabilities" in info)) { 30 | const coordinate = getCoordinates(dep, info.current_version, confType); 31 | if (coordinate) filteredList.push(coordinate); 32 | } 33 | } 34 | return filteredList; 35 | } 36 | 37 | function populateVulnerability(data, confType) { 38 | for (let p of data) { 39 | // TODO: might have issues with pacages with namespace 40 | const dep = p.coordinates.split("/")[1].split("@")[0]; 41 | global.store.set(confType, dep, { vulnerabilities: p.vulnerabilities }); 42 | } 43 | } 44 | 45 | function updateVulnerabilities(depList, confType) { 46 | if (fetchInterval) clearInterval(fetchInterval); 47 | fetchInterval = setInterval( 48 | () => { 49 | const searchList = filterPackagesToCheck(depList, confType).splice(0, 199); 50 | if (searchList.length === 0) clearInterval(fetchInterval); 51 | 52 | const data = JSON.stringify({ coordinates: searchList }); 53 | const options = { 54 | hostname: "ossindex.sonatype.org", 55 | port: 443, 56 | path: "/api/v3/component-report", 57 | method: "POST", 58 | headers: { 59 | "Content-Type": "application/json", 60 | "Content-Length": data.length, 61 | }, 62 | }; 63 | 64 | let req = https 65 | .request(options, resp => { 66 | let data = ""; 67 | resp.on("data", chunk => { 68 | data += chunk; 69 | }); 70 | resp.on("end", () => { 71 | const parsed = JSON.parse(data); 72 | populateVulnerability(parsed, confType); 73 | }); 74 | }) 75 | .on("error", err => { 76 | console.log("Error: " + err.message); 77 | }); 78 | 79 | req.write(data); 80 | req.end(); 81 | }, 82 | 83 | lastRequestTime === null ? 0 : 3000 84 | ); 85 | lastRequestTime = new Date().getTime(); 86 | } 87 | 88 | async function showVulnerabilities(handle) { 89 | const filePath = await handle.nvim.commandOutput("echo expand('%')"); // there should be a better, I just don't know 90 | const confType = utils.determineFileKind(filePath); 91 | const nameRegex = utils.getNameRegex(confType); 92 | 93 | const line = await handle.nvim.getLine(); 94 | 95 | const vals = line.match(nameRegex); 96 | if (vals !== null && vals !== undefined && 1 in vals && vals[1] !== null) { 97 | const dep = vals[1].trim(); 98 | const info = global.store.get(confType, dep); 99 | if (!("vulnerabilities" in info)) { 100 | await handle.nvim.command('echo "No vulnerabilities found"'); 101 | return; 102 | } 103 | const vulnerability_info = utils.createVulStats( 104 | info.vulnerabilities, 105 | `${dep}@${info.current_version}` 106 | ); 107 | 108 | await handle.nvim.command("topleft new"); 109 | await handle.nvim.command("set ft=markdown"); 110 | await handle.nvim.buffer.insert(vulnerability_info, 0); 111 | [ 112 | "nobuflisted", 113 | "nolist", 114 | "bufhidden=wipe", 115 | "setlocal buftype=nofile", 116 | "setlocal bufhidden=hide", 117 | ].map(async c => { 118 | await handle.nvim.command(c); 119 | }); 120 | } 121 | } 122 | 123 | module.exports = { updateVulnerabilities, showVulnerabilities }; 124 | -------------------------------------------------------------------------------- /test/file_test.js: -------------------------------------------------------------------------------- 1 | const assert = require("assert"); 2 | const utils = require("../rplugin/node/vim-package-info/utils"); 3 | 4 | const tests = require("./options").tests; 5 | 6 | tests.forEach(test => { 7 | const fileKind = utils.determineFileKind(test.file); 8 | 9 | describe(test.name, function() { 10 | describe("utils", function() { 11 | it("return proper url", function() { 12 | assert.equal(utils.getUrl(test.tests.url.package, fileKind), test.tests.url.url); 13 | }); 14 | }); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /test/mocha.opts: -------------------------------------------------------------------------------- 1 | --require ./test/setup 2 | --globals global 3 | -------------------------------------------------------------------------------- /test/options.js: -------------------------------------------------------------------------------- 1 | const tests = [ 2 | { 3 | name: "package.json (Javascript)", 4 | file: "package.json", 5 | type: "json", 6 | tests: { 7 | url: { 8 | package: "mocha", 9 | url: "https://registry.npmjs.org/mocha", 10 | }, 11 | dep_lines: { 12 | dependencies: [5, 14], 13 | devDependencies: [23, 28], 14 | }, 15 | version_extraction: { 16 | data: { dependencies: { "babel-eslint": "^8.2.6", "why-did-you-update": "^0.1.1" } }, 17 | checks: [ 18 | { 19 | line: ' "babel-eslint": "^8.2.6",', 20 | depSelector: "dependencies", 21 | output: { 22 | name: "babel-eslint", 23 | version: "^8.2.6", 24 | }, 25 | }, 26 | { 27 | line: ' "why-did-you-update": "^0.1.1"', 28 | depSelector: "dependencies", 29 | output: { 30 | name: "why-did-you-update", 31 | version: "^0.1.1", 32 | }, 33 | }, 34 | ], 35 | }, 36 | }, 37 | }, 38 | 39 | { 40 | name: "Cargo.toml (Rust)", 41 | file: "Cargo.toml", 42 | type: "toml", 43 | tests: { 44 | url: { 45 | package: "libc", 46 | url: "https://crates.io/api/v1/crates/libc", 47 | }, 48 | dep_lines: { 49 | "build-dependencies": [18, 22], 50 | "dev-dependencies": [34, 37], 51 | dependencies: [22, 30], 52 | }, 53 | version_extraction: { 54 | data: { dependencies: { libc: "8.2.6", serde: { version: "~1.0" } } }, 55 | checks: [ 56 | { 57 | line: 'libc = "8.2.6",', 58 | depSelector: "dependencies", 59 | output: { 60 | name: "libc", 61 | version: "8.2.6", 62 | }, 63 | }, 64 | { 65 | line: 'serde = { version = "~1.0", features = ["derive"] }', 66 | depSelector: "dependencies", 67 | output: { 68 | name: "serde", 69 | version: "~1.0", 70 | }, 71 | }, 72 | ], 73 | }, 74 | }, 75 | }, 76 | 77 | { 78 | name: "requirements.txt (Python)", 79 | file: "requirements.txt", 80 | type: "text", 81 | tests: { 82 | url: { 83 | package: "falcon", 84 | url: "https://pypi.org/pypi/falcon/json", 85 | }, 86 | dep_lines: { 87 | null: [0, 24], 88 | }, 89 | version_extraction: { 90 | data: null, 91 | checks: [ 92 | { 93 | line: "falcon==1.4.1", 94 | depSelector: "null", 95 | output: { 96 | name: "falcon", 97 | version: "1.4.1", 98 | }, 99 | }, 100 | { 101 | line: "six==1.12.0 \\", 102 | depSelector: "null", 103 | output: { 104 | name: "six", 105 | version: "1.12.0", 106 | }, 107 | }, 108 | { 109 | line: "requests", 110 | depSelector: "null", 111 | output: { 112 | name: "requests", 113 | version: "", 114 | }, 115 | }, 116 | ], 117 | }, 118 | }, 119 | }, 120 | 121 | { 122 | name: "Pipfile (Python)", 123 | file: "Pipfile", 124 | type: "toml", 125 | tests: { 126 | url: { 127 | package: "pylint", 128 | url: "https://pypi.org/pypi/pylint/json", 129 | }, 130 | dep_lines: { 131 | packages: [10, 16], 132 | "dev-packages": [6, 10], 133 | }, 134 | version_extraction: { 135 | data: { packages: { "tvdb-api": "2.0" }, "dev-packages": { pylint: "2.1.1" } }, 136 | checks: [ 137 | { 138 | line: 'tvdb-api = ">=2.0"', 139 | depSelector: "packages", 140 | output: { 141 | name: "tvdb-api", 142 | version: "2.0", 143 | }, 144 | }, 145 | { 146 | line: 'pylint = ">=2.1.1"', 147 | depSelector: "dev-packages", 148 | output: { 149 | name: "pylint", 150 | version: "2.1.1", 151 | }, 152 | }, 153 | ], 154 | }, 155 | }, 156 | }, 157 | 158 | { 159 | name: "pyproject (Python)", 160 | file: "pyproject.toml", 161 | type: "toml", 162 | tests: { 163 | url: { 164 | package: "pylint", 165 | url: "https://pypi.org/pypi/pylint/json", 166 | }, 167 | dep_lines: { 168 | "tool.poetry.dependencies": [5, 13], 169 | "tool.poetry.dev-dependencies": [13, 17], 170 | }, 171 | version_extraction: { 172 | data: { packages: { "tvdb-api": "2.0" }, "dev-packages": { pylint: "2.1.1" } }, 173 | checks: [ 174 | { 175 | line: 'tvdb-api = ">=2.0"', 176 | depSelector: "packages", 177 | output: { 178 | name: "tvdb-api", 179 | version: "2.0", 180 | }, 181 | }, 182 | { 183 | line: 'pylint = ">=2.1.1"', 184 | depSelector: "dev-packages", 185 | output: { 186 | name: "pylint", 187 | version: "2.1.1", 188 | }, 189 | }, 190 | ], 191 | }, 192 | }, 193 | }, 194 | ]; 195 | 196 | module.exports = { tests }; 197 | -------------------------------------------------------------------------------- /test/package-json_test.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const assert = require("assert"); 3 | 4 | const Parser = require("../rplugin/node/vim-package-info/parsers/package-json.js").default; 5 | 6 | const file = fs.readFileSync("examples/package.json", "utf-8"); 7 | 8 | describe("package.json", function() { 9 | it("returns all deps", function() { 10 | const p = new Parser(); 11 | const depList = p.getDeps(file); 12 | assert.deepEqual(depList, [ 13 | "this-package-does-not-exists-sdflkjsd", 14 | "babel-eslint", 15 | "react-completor", 16 | "color-hash", 17 | "express", 18 | "preact-compat", 19 | "react", 20 | "react-dom", 21 | "sweetalert2", 22 | "why-did-you-update", 23 | "eslint", 24 | "eslint-config-airbnb", 25 | "eslint-loader", 26 | "flow-bin", 27 | ]); 28 | 29 | p.updateCurrentVersions([depList[0]], "examples/package.json"); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /test/setup.js: -------------------------------------------------------------------------------- 1 | const Store = require("../rplugin/node/vim-package-info/more.js").default; 2 | 3 | const render = (lang, dep, value) => console.log(lang, dep, value); 4 | global.store = new Store({}, render); 5 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | const assert = require("assert"); 2 | const diff = require("../rplugin/node/vim-package-info/diff"); 3 | 4 | describe("General checks", function () { 5 | describe("diff", function () { 6 | it("return proper diff output for major change", function () { 7 | assert.deepEqual(diff.colorizeDiff("^1.0.1", "3.4.3", "NonText"), [ 8 | ["1.0.1", "NonText"], 9 | [" ⇒ ", "NonText"], 10 | ["3", "VimPackageInfoMajor"], 11 | [".", "NonText"], 12 | ["4", "VimPackageInfoMajor"], 13 | [".", "NonText"], 14 | ["3", "VimPackageInfoMajor"], 15 | ]); 16 | }); 17 | it("return proper diff output for minor change", function () { 18 | assert.deepEqual(diff.colorizeDiff("^1.0.1", "1.4.3", "NonText"), [ 19 | ["1.0.1", "NonText"], 20 | [" ⇒ ", "NonText"], 21 | ["1", "NonText"], 22 | [".", "NonText"], 23 | ["4", "VimPackageInfoMinor"], 24 | [".", "NonText"], 25 | ["3", "VimPackageInfoMinor"], 26 | ]); 27 | }); 28 | it("return proper diff output for patch change", function () { 29 | assert.deepEqual(diff.colorizeDiff("^1.0.1", "1.0.3", "NonText"), [ 30 | ["1.0.1", "NonText"], 31 | [" ⇒ ", "NonText"], 32 | ["1", "NonText"], 33 | [".", "NonText"], 34 | ["0", "NonText"], 35 | [".", "NonText"], 36 | ["3", "VimPackageInfoPatch"], 37 | ]); 38 | }); 39 | it("return proper diff output for no change", function () { 40 | assert.deepEqual(diff.colorizeDiff("^1.0.1", "1.0.1", "NonText"), [ 41 | ["1.0.1", "NonText"], 42 | [" ⇒ ", "NonText"], 43 | ["1", "NonText"], 44 | [".", "NonText"], 45 | ["0", "NonText"], 46 | [".", "NonText"], 47 | ["1", "NonText"], 48 | ]); 49 | }); 50 | 51 | it("return proper diff output without current version", function () { 52 | assert.deepEqual(diff.colorizeDiff("", "1.0.1", "NonText"), [ 53 | ["unavailable", "NonText"], 54 | [" ⇒ ", "NonText"], 55 | ["1", "NonText"], 56 | [".", "NonText"], 57 | ["0", "NonText"], 58 | [".", "NonText"], 59 | ["1", "NonText"], 60 | ]); 61 | }); 62 | 63 | it("return proper diff output with an incomplete current version", function () { 64 | assert.deepEqual(diff.colorizeDiff("^1.0", "1.0.1", "NonText"), [ 65 | ["1.0.0", "NonText"], 66 | [" ⇒ ", "NonText"], 67 | ["1", "NonText"], 68 | [".", "NonText"], 69 | ["0", "NonText"], 70 | [".", "NonText"], 71 | ["1", "VimPackageInfoPatch"], 72 | ]); 73 | }); 74 | }); 75 | }); 76 | --------------------------------------------------------------------------------