├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── example ├── node │ ├── lambda_plus_edge │ │ ├── edge.package.json │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── packer.config.js │ │ └── src │ │ │ ├── dependency-one.js │ │ │ ├── dependency-two.js │ │ │ ├── edge.js │ │ │ └── lambda.js │ └── simple │ │ ├── index.js │ │ ├── package.json │ │ └── packer.config.json └── python │ ├── simple │ ├── index.py │ ├── packer.config.json │ ├── second.py │ ├── secrets.py │ ├── setup.cfg │ └── src │ │ └── module_one.py │ └── with_requirements_txt │ ├── index.py │ ├── packer.config.json │ ├── requirements.txt │ └── setup.cfg ├── package.json ├── packer.py └── packer.test.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | 106 | 107 | 108 | 109 | # node stuff 110 | 111 | node_modules/ 112 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | example/ 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Alexander Zhukov 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # lapa 2 | (Almost) universal AWS Lambda packager. 3 | It generates zip archive ready for uploading on AWS with no pain using just a simple config file. 4 | 5 | Supports `node` and `python` out of the box, can be customised for other environments. 6 | 7 | ## Usage 8 | 9 | ### Installation 10 | 11 | ##### manual 12 | 13 | ```sh 14 | curl https://raw.githubusercontent.com/nogizhopaboroda/lapa/master/packer.py -o /usr/local/bin/lapa && chmod +x /usr/local/bin/lapa 15 | ``` 16 | 17 | ##### with npm 18 | 19 | ```sh 20 | npm i -g https://github.com/nogizhopaboroda/lapa 21 | ``` 22 | 23 | ##### as a local npm dependency 24 | ```sh 25 | npm i --save-dev https://github.com/nogizhopaboroda/lapa 26 | ``` 27 | 28 | then in package.json: 29 | 30 | ```js 31 | { 32 | ... 33 | "scripts": { 34 | "pack": "lapa" 35 | } 36 | ... 37 | } 38 | ``` 39 | 40 | ##### Usage directly from github 41 | 42 | ```sh 43 | python <(curl https://raw.githubusercontent.com/nogizhopaboroda/lapa/master/packer.py) [arguments] 44 | ``` 45 | 46 | 47 | ### Configuration 48 | 49 | #### Config file 50 | 51 | A config file is either plain json file (`packer.config.json`) or js module (`packer.config.js`) that exports configuration object *placed within project directory*. 52 | 53 | 54 | example `packer.config.json`: 55 | ```js 56 | { 57 | "environment": "python", 58 | "files": ["*.py", "*.ini"], 59 | "ignore": ["lib/*", "bin/*"], 60 | "dependencies": ["requests"], 61 | "zipName": "./dist/my-lambda.zip" 62 | } 63 | ``` 64 | 65 | example `packer.config.js`: 66 | ```js 67 | //packer.config.js 68 | 69 | //js configs are treated as regular js modules, 70 | //so you can use variables, require another modules and so on 71 | const common = { 72 | "environment": "node", 73 | "files": "*", 74 | "ignore": ["node_modules/*"] 75 | } 76 | 77 | module.exports = [ 78 | { 79 | ...common, 80 | "dependencyFile": "package.json", 81 | "zipName": "./dist/my-lambda.zip" 82 | }, 83 | { 84 | ...common, 85 | "dependencyFile": "edge.package.json", 86 | "zipName": "./dist/my-edge-lambda.zip" 87 | }, 88 | ] 89 | ``` 90 | 91 | #### Configuration object 92 | 93 | ```js 94 | { //can be an array (for multiple builds) 95 | "environment": , 96 | 97 | //optional fields 98 | "files": , 99 | "ignore": , 100 | "dependencyFile": , 101 | "dependencies": , 102 | "zipName": , 103 | "mapDirectories": 104 | } 105 | ``` 106 | 107 | ##### Required fields 108 | 109 | `environment`: 110 | 111 | environment to use when install dependencies. So far only `node` and `python` are supperted. 112 | 113 | *Can also be an object of dependencies installation instructions. In such case:* 114 | 115 | ```js 116 | { 117 | "environment": { 118 | "installDependencies": "some-bundler install {dependencies}", 119 | "installDependencyFile": [ 120 | "some-bundler install {dependencyFile}" 121 | ], 122 | } 123 | } 124 | ``` 125 | where 126 | 127 | `{dependencies}` - space-separated dependencies from config object 128 | 129 | `{dependencyFile}` - dependency file from config object 130 | 131 | ##### Optional fields 132 | 133 | `files` (Default: `[*]`): 134 | 135 | file/directory masks to include to archive 136 | 137 | `ignore` (Default: `[]`): 138 | 139 | file/directory masks to ignore 140 | 141 | `dependencyFile`: 142 | 143 | file to use as a dependency file 144 | 145 | `dependencies` (Default: `[]`): 146 | 147 | list of dependencies 148 | 149 | `zipName` (Default: `lambda.zip`): 150 | 151 | output archive name 152 | 153 | `mapDirectories`: 154 | 155 | Change file directory in resulting archive. Example: 156 | 157 | ```js 158 | { 159 | // src/a.js -> a.js 160 | // b.js -> b.js 161 | "mapDirectories": { 162 | "src": "./" 163 | } 164 | } 165 | ``` 166 | 167 | #### Generate a basic configuration file 168 | 169 | You can create config file in interactive mode 170 | 171 | ```sh 172 | lapa --init 173 | ``` 174 | 175 | App will ask you several questions and try to guess you environment based on most common files type 176 | 177 | 178 | #### Run 179 | 180 | *within project directory* simply run: 181 | 182 | ```sh 183 | lapa 184 | ``` 185 | 186 | 187 | 188 | ## Examples 189 | 190 | - [simple python project](./example/python/simple/) 191 | - [simple node project](./example/node/simple/) 192 | - [node project with 2 configs (lambda + edge)](./example/node/lambda_plus_edge/) 193 | - [simple python project with requirements.txt](./example/python/with_requirements_txt/) 194 | 195 | ## Troubleshooting 196 | 197 | ##### Pip can't install dependencies in specific directory 198 | 199 | It's known issue if your `pip` is installed via brew. As a workaround just copy [this setup.cfg file](./example/python/simple/setup.cfg) in your project on root level as [in this example](./example/python/simple/) 200 | 201 | 202 | ## Requirements 203 | 204 | `python >= 2` 205 | -------------------------------------------------------------------------------- /example/node/lambda_plus_edge/edge.package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lamda_plus_edge-edge", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "edge.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "lodash": "^4.17.11" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/node/lambda_plus_edge/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lamda_plus_edge", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@webassemblyjs/ast": { 8 | "version": "1.7.8", 9 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.8.tgz", 10 | "integrity": "sha512-dOrtdtEyB8sInpl75yLPNksY4sRl0j/+t6aHyB/YA+ab9hV3Fo7FmG12FHzP+2MvWVAJtDb+6eXR5EZbZJ+uVg==", 11 | "dev": true, 12 | "requires": { 13 | "@webassemblyjs/helper-module-context": "1.7.8", 14 | "@webassemblyjs/helper-wasm-bytecode": "1.7.8", 15 | "@webassemblyjs/wast-parser": "1.7.8" 16 | } 17 | }, 18 | "@webassemblyjs/floating-point-hex-parser": { 19 | "version": "1.7.8", 20 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.8.tgz", 21 | "integrity": "sha512-kn2zNKGsbql5i56VAgRYkpG+VazqHhQQZQycT2uXAazrAEDs23gy+Odkh5VblybjnwX2/BITkDtNmSO76hdIvQ==", 22 | "dev": true 23 | }, 24 | "@webassemblyjs/helper-api-error": { 25 | "version": "1.7.8", 26 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.8.tgz", 27 | "integrity": "sha512-xUwxDXsd1dUKArJEP5wWM5zxgCSwZApSOJyP1XO7M8rNUChUDblcLQ4FpzTpWG2YeylMwMl1MlP5Ztryiz1x4g==", 28 | "dev": true 29 | }, 30 | "@webassemblyjs/helper-buffer": { 31 | "version": "1.7.8", 32 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.8.tgz", 33 | "integrity": "sha512-WXiIMnuvuwlhWvVOm8xEXU9DnHaa3AgAU0ZPfvY8vO1cSsmYb2WbGbHnMLgs43vXnA7XAob9b56zuZaMkxpCBg==", 34 | "dev": true 35 | }, 36 | "@webassemblyjs/helper-code-frame": { 37 | "version": "1.7.8", 38 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.8.tgz", 39 | "integrity": "sha512-TLQxyD9qGOIdX5LPQOPo0Ernd88U5rHkFb8WAjeMIeA0sPjCHeVPaGqUGGIXjUcblUkjuDAc07bruCcNHUrHDA==", 40 | "dev": true, 41 | "requires": { 42 | "@webassemblyjs/wast-printer": "1.7.8" 43 | } 44 | }, 45 | "@webassemblyjs/helper-fsm": { 46 | "version": "1.7.8", 47 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.8.tgz", 48 | "integrity": "sha512-TjK0CnD8hAPkV5mbSp5aWl6SO1+H3WFcjWtixWoy8EMA99YnNzYhpc/WSYWhf7yrhpzkq5tZB0tvLK3Svr3IXA==", 49 | "dev": true 50 | }, 51 | "@webassemblyjs/helper-module-context": { 52 | "version": "1.7.8", 53 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.8.tgz", 54 | "integrity": "sha512-uCutAKR7Nm0VsFixcvnB4HhAyHouNbj0Dx1p7eRjFjXGGZ+N7ftTaG1ZbWCasAEbtwGj54LP8+lkBZdTCPmLGg==", 55 | "dev": true 56 | }, 57 | "@webassemblyjs/helper-wasm-bytecode": { 58 | "version": "1.7.8", 59 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.8.tgz", 60 | "integrity": "sha512-AdCCE3BMW6V34WYaKUmPgVHa88t2Z14P4/0LjLwuGkI0X6pf7nzp0CehzVVk51cKm2ymVXjl9dCG+gR1yhITIQ==", 61 | "dev": true 62 | }, 63 | "@webassemblyjs/helper-wasm-section": { 64 | "version": "1.7.8", 65 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.8.tgz", 66 | "integrity": "sha512-BkBhYQuzyl4hgTGOKo87Vdw6f9nj8HhI7WYpI0MCC5qFa5ahrAPOGgyETVdnRbv+Rjukl9MxxfDmVcVC435lDg==", 67 | "dev": true, 68 | "requires": { 69 | "@webassemblyjs/ast": "1.7.8", 70 | "@webassemblyjs/helper-buffer": "1.7.8", 71 | "@webassemblyjs/helper-wasm-bytecode": "1.7.8", 72 | "@webassemblyjs/wasm-gen": "1.7.8" 73 | } 74 | }, 75 | "@webassemblyjs/ieee754": { 76 | "version": "1.7.8", 77 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.8.tgz", 78 | "integrity": "sha512-tOarWChdG1a3y1yqCX0JMDKzrat5tQe4pV6K/TX19BcXsBLYxFQOL1DEDa5KG9syeyvCrvZ+i1+Mv1ExngvktQ==", 79 | "dev": true, 80 | "requires": { 81 | "@xtuc/ieee754": "1.2.0" 82 | } 83 | }, 84 | "@webassemblyjs/leb128": { 85 | "version": "1.7.8", 86 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.8.tgz", 87 | "integrity": "sha512-GCYeGPgUFWJiZuP4NICbcyUQNxNLJIf476Ei+K+jVuuebtLpfvwkvYT6iTUE7oZYehhkor4Zz2g7SJ/iZaPudQ==", 88 | "dev": true, 89 | "requires": { 90 | "@xtuc/long": "4.2.1" 91 | } 92 | }, 93 | "@webassemblyjs/utf8": { 94 | "version": "1.7.8", 95 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.8.tgz", 96 | "integrity": "sha512-9X+f0VV+xNXW2ujfIRSXBJENGE6Qh7bNVKqu3yDjTFB3ar3nsThsGBBKdTG58aXOm2iUH6v28VIf88ymPXODHA==", 97 | "dev": true 98 | }, 99 | "@webassemblyjs/wasm-edit": { 100 | "version": "1.7.8", 101 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.8.tgz", 102 | "integrity": "sha512-6D3Hm2gFixrfyx9XjSON4ml1FZTugqpkIz5Awvrou8fnpyprVzcm4X8pyGRtA2Piixjl3DqmX/HB1xdWyE097A==", 103 | "dev": true, 104 | "requires": { 105 | "@webassemblyjs/ast": "1.7.8", 106 | "@webassemblyjs/helper-buffer": "1.7.8", 107 | "@webassemblyjs/helper-wasm-bytecode": "1.7.8", 108 | "@webassemblyjs/helper-wasm-section": "1.7.8", 109 | "@webassemblyjs/wasm-gen": "1.7.8", 110 | "@webassemblyjs/wasm-opt": "1.7.8", 111 | "@webassemblyjs/wasm-parser": "1.7.8", 112 | "@webassemblyjs/wast-printer": "1.7.8" 113 | } 114 | }, 115 | "@webassemblyjs/wasm-gen": { 116 | "version": "1.7.8", 117 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.8.tgz", 118 | "integrity": "sha512-a7O/wE6eBeVKKUYgpMK7NOHmMADD85rSXLe3CqrWRDwWff5y3cSVbzpN6Qv3z6C4hdkpq9qyij1Ga1kemOZGvQ==", 119 | "dev": true, 120 | "requires": { 121 | "@webassemblyjs/ast": "1.7.8", 122 | "@webassemblyjs/helper-wasm-bytecode": "1.7.8", 123 | "@webassemblyjs/ieee754": "1.7.8", 124 | "@webassemblyjs/leb128": "1.7.8", 125 | "@webassemblyjs/utf8": "1.7.8" 126 | } 127 | }, 128 | "@webassemblyjs/wasm-opt": { 129 | "version": "1.7.8", 130 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.8.tgz", 131 | "integrity": "sha512-3lbQ0PT81NHCdi1sR/7+SNpZadM4qYcTSr62nFFAA7e5lFwJr14M1Gi+A/Y3PgcDWOHYjsaNGPpPU0H03N6Blg==", 132 | "dev": true, 133 | "requires": { 134 | "@webassemblyjs/ast": "1.7.8", 135 | "@webassemblyjs/helper-buffer": "1.7.8", 136 | "@webassemblyjs/wasm-gen": "1.7.8", 137 | "@webassemblyjs/wasm-parser": "1.7.8" 138 | } 139 | }, 140 | "@webassemblyjs/wasm-parser": { 141 | "version": "1.7.8", 142 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.8.tgz", 143 | "integrity": "sha512-rZ/zlhp9DHR/05zh1MbAjT2t624sjrPP/OkJCjXqzm7ynH+nIdNcn9Ixc+qzPMFXhIrk0rBoQ3to6sEIvHh9jQ==", 144 | "dev": true, 145 | "requires": { 146 | "@webassemblyjs/ast": "1.7.8", 147 | "@webassemblyjs/helper-api-error": "1.7.8", 148 | "@webassemblyjs/helper-wasm-bytecode": "1.7.8", 149 | "@webassemblyjs/ieee754": "1.7.8", 150 | "@webassemblyjs/leb128": "1.7.8", 151 | "@webassemblyjs/utf8": "1.7.8" 152 | } 153 | }, 154 | "@webassemblyjs/wast-parser": { 155 | "version": "1.7.8", 156 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.8.tgz", 157 | "integrity": "sha512-Q/zrvtUvzWuSiJMcSp90fi6gp2nraiHXjTV2VgAluVdVapM4gy1MQn7akja2p6eSBDQpKJPJ6P4TxRkghRS5dg==", 158 | "dev": true, 159 | "requires": { 160 | "@webassemblyjs/ast": "1.7.8", 161 | "@webassemblyjs/floating-point-hex-parser": "1.7.8", 162 | "@webassemblyjs/helper-api-error": "1.7.8", 163 | "@webassemblyjs/helper-code-frame": "1.7.8", 164 | "@webassemblyjs/helper-fsm": "1.7.8", 165 | "@xtuc/long": "4.2.1" 166 | } 167 | }, 168 | "@webassemblyjs/wast-printer": { 169 | "version": "1.7.8", 170 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.8.tgz", 171 | "integrity": "sha512-GllIthRtwTxRDAURRNXscu7Napzmdf1jt1gpiZiK/QN4fH0lSGs3OTmvdfsMNP7tqI4B3ZtfaaWRlNIQug6Xyg==", 172 | "dev": true, 173 | "requires": { 174 | "@webassemblyjs/ast": "1.7.8", 175 | "@webassemblyjs/wast-parser": "1.7.8", 176 | "@xtuc/long": "4.2.1" 177 | } 178 | }, 179 | "@xtuc/ieee754": { 180 | "version": "1.2.0", 181 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 182 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", 183 | "dev": true 184 | }, 185 | "@xtuc/long": { 186 | "version": "4.2.1", 187 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", 188 | "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", 189 | "dev": true 190 | }, 191 | "acorn": { 192 | "version": "5.7.3", 193 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", 194 | "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", 195 | "dev": true 196 | }, 197 | "acorn-dynamic-import": { 198 | "version": "3.0.0", 199 | "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", 200 | "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", 201 | "dev": true, 202 | "requires": { 203 | "acorn": "5.7.3" 204 | } 205 | }, 206 | "ajv": { 207 | "version": "6.5.4", 208 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", 209 | "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", 210 | "dev": true, 211 | "requires": { 212 | "fast-deep-equal": "2.0.1", 213 | "fast-json-stable-stringify": "2.0.0", 214 | "json-schema-traverse": "0.4.1", 215 | "uri-js": "4.2.2" 216 | } 217 | }, 218 | "ajv-keywords": { 219 | "version": "3.2.0", 220 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", 221 | "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", 222 | "dev": true 223 | }, 224 | "anymatch": { 225 | "version": "2.0.0", 226 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", 227 | "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", 228 | "dev": true, 229 | "requires": { 230 | "micromatch": "3.1.10", 231 | "normalize-path": "2.1.1" 232 | } 233 | }, 234 | "aproba": { 235 | "version": "1.2.0", 236 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 237 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", 238 | "dev": true 239 | }, 240 | "arr-diff": { 241 | "version": "4.0.0", 242 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", 243 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", 244 | "dev": true 245 | }, 246 | "arr-flatten": { 247 | "version": "1.1.0", 248 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 249 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 250 | "dev": true 251 | }, 252 | "arr-union": { 253 | "version": "3.1.0", 254 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", 255 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", 256 | "dev": true 257 | }, 258 | "array-unique": { 259 | "version": "0.3.2", 260 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", 261 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", 262 | "dev": true 263 | }, 264 | "asn1": { 265 | "version": "0.2.4", 266 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 267 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 268 | "requires": { 269 | "safer-buffer": "2.1.2" 270 | } 271 | }, 272 | "asn1.js": { 273 | "version": "4.10.1", 274 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", 275 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", 276 | "dev": true, 277 | "requires": { 278 | "bn.js": "4.11.8", 279 | "inherits": "2.0.3", 280 | "minimalistic-assert": "1.0.1" 281 | } 282 | }, 283 | "assert": { 284 | "version": "1.4.1", 285 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", 286 | "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", 287 | "dev": true, 288 | "requires": { 289 | "util": "0.10.3" 290 | }, 291 | "dependencies": { 292 | "inherits": { 293 | "version": "2.0.1", 294 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 295 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", 296 | "dev": true 297 | }, 298 | "util": { 299 | "version": "0.10.3", 300 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 301 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 302 | "dev": true, 303 | "requires": { 304 | "inherits": "2.0.1" 305 | } 306 | } 307 | } 308 | }, 309 | "assert-plus": { 310 | "version": "1.0.0", 311 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 312 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 313 | }, 314 | "assign-symbols": { 315 | "version": "1.0.0", 316 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 317 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", 318 | "dev": true 319 | }, 320 | "async-each": { 321 | "version": "1.0.1", 322 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", 323 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", 324 | "dev": true 325 | }, 326 | "asynckit": { 327 | "version": "0.4.0", 328 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 329 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 330 | }, 331 | "atob": { 332 | "version": "2.1.2", 333 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 334 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", 335 | "dev": true 336 | }, 337 | "aws-sign2": { 338 | "version": "0.7.0", 339 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 340 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 341 | }, 342 | "aws4": { 343 | "version": "1.8.0", 344 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 345 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" 346 | }, 347 | "balanced-match": { 348 | "version": "1.0.0", 349 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 350 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 351 | "dev": true 352 | }, 353 | "base": { 354 | "version": "0.11.2", 355 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", 356 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", 357 | "dev": true, 358 | "requires": { 359 | "cache-base": "1.0.1", 360 | "class-utils": "0.3.6", 361 | "component-emitter": "1.2.1", 362 | "define-property": "1.0.0", 363 | "isobject": "3.0.1", 364 | "mixin-deep": "1.3.1", 365 | "pascalcase": "0.1.1" 366 | }, 367 | "dependencies": { 368 | "define-property": { 369 | "version": "1.0.0", 370 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 371 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 372 | "dev": true, 373 | "requires": { 374 | "is-descriptor": "1.0.2" 375 | } 376 | }, 377 | "is-accessor-descriptor": { 378 | "version": "1.0.0", 379 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 380 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 381 | "dev": true, 382 | "requires": { 383 | "kind-of": "6.0.2" 384 | } 385 | }, 386 | "is-data-descriptor": { 387 | "version": "1.0.0", 388 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 389 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 390 | "dev": true, 391 | "requires": { 392 | "kind-of": "6.0.2" 393 | } 394 | }, 395 | "is-descriptor": { 396 | "version": "1.0.2", 397 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 398 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 399 | "dev": true, 400 | "requires": { 401 | "is-accessor-descriptor": "1.0.0", 402 | "is-data-descriptor": "1.0.0", 403 | "kind-of": "6.0.2" 404 | } 405 | } 406 | } 407 | }, 408 | "base64-js": { 409 | "version": "1.3.0", 410 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", 411 | "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", 412 | "dev": true 413 | }, 414 | "bcrypt-pbkdf": { 415 | "version": "1.0.2", 416 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 417 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 418 | "optional": true, 419 | "requires": { 420 | "tweetnacl": "0.14.5" 421 | } 422 | }, 423 | "big.js": { 424 | "version": "3.2.0", 425 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", 426 | "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", 427 | "dev": true 428 | }, 429 | "binary-extensions": { 430 | "version": "1.12.0", 431 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", 432 | "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", 433 | "dev": true 434 | }, 435 | "bluebird": { 436 | "version": "3.5.2", 437 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", 438 | "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==", 439 | "dev": true 440 | }, 441 | "bn.js": { 442 | "version": "4.11.8", 443 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 444 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", 445 | "dev": true 446 | }, 447 | "brace-expansion": { 448 | "version": "1.1.11", 449 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 450 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 451 | "dev": true, 452 | "requires": { 453 | "balanced-match": "1.0.0", 454 | "concat-map": "0.0.1" 455 | } 456 | }, 457 | "braces": { 458 | "version": "2.3.2", 459 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", 460 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", 461 | "dev": true, 462 | "requires": { 463 | "arr-flatten": "1.1.0", 464 | "array-unique": "0.3.2", 465 | "extend-shallow": "2.0.1", 466 | "fill-range": "4.0.0", 467 | "isobject": "3.0.1", 468 | "repeat-element": "1.1.3", 469 | "snapdragon": "0.8.2", 470 | "snapdragon-node": "2.1.1", 471 | "split-string": "3.1.0", 472 | "to-regex": "3.0.2" 473 | }, 474 | "dependencies": { 475 | "extend-shallow": { 476 | "version": "2.0.1", 477 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 478 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 479 | "dev": true, 480 | "requires": { 481 | "is-extendable": "0.1.1" 482 | } 483 | } 484 | } 485 | }, 486 | "brorand": { 487 | "version": "1.1.0", 488 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 489 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 490 | "dev": true 491 | }, 492 | "browserify-aes": { 493 | "version": "1.2.0", 494 | "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 495 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 496 | "dev": true, 497 | "requires": { 498 | "buffer-xor": "1.0.3", 499 | "cipher-base": "1.0.4", 500 | "create-hash": "1.2.0", 501 | "evp_bytestokey": "1.0.3", 502 | "inherits": "2.0.3", 503 | "safe-buffer": "5.1.2" 504 | } 505 | }, 506 | "browserify-cipher": { 507 | "version": "1.0.1", 508 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 509 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 510 | "dev": true, 511 | "requires": { 512 | "browserify-aes": "1.2.0", 513 | "browserify-des": "1.0.2", 514 | "evp_bytestokey": "1.0.3" 515 | } 516 | }, 517 | "browserify-des": { 518 | "version": "1.0.2", 519 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 520 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 521 | "dev": true, 522 | "requires": { 523 | "cipher-base": "1.0.4", 524 | "des.js": "1.0.0", 525 | "inherits": "2.0.3", 526 | "safe-buffer": "5.1.2" 527 | } 528 | }, 529 | "browserify-rsa": { 530 | "version": "4.0.1", 531 | "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", 532 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 533 | "dev": true, 534 | "requires": { 535 | "bn.js": "4.11.8", 536 | "randombytes": "2.0.6" 537 | } 538 | }, 539 | "browserify-sign": { 540 | "version": "4.0.4", 541 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", 542 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 543 | "dev": true, 544 | "requires": { 545 | "bn.js": "4.11.8", 546 | "browserify-rsa": "4.0.1", 547 | "create-hash": "1.2.0", 548 | "create-hmac": "1.1.7", 549 | "elliptic": "6.4.1", 550 | "inherits": "2.0.3", 551 | "parse-asn1": "5.1.1" 552 | } 553 | }, 554 | "browserify-zlib": { 555 | "version": "0.2.0", 556 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 557 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 558 | "dev": true, 559 | "requires": { 560 | "pako": "1.0.6" 561 | } 562 | }, 563 | "buffer": { 564 | "version": "4.9.1", 565 | "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", 566 | "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", 567 | "dev": true, 568 | "requires": { 569 | "base64-js": "1.3.0", 570 | "ieee754": "1.1.12", 571 | "isarray": "1.0.0" 572 | } 573 | }, 574 | "buffer-from": { 575 | "version": "1.1.1", 576 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 577 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 578 | "dev": true 579 | }, 580 | "buffer-xor": { 581 | "version": "1.0.3", 582 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 583 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", 584 | "dev": true 585 | }, 586 | "builtin-status-codes": { 587 | "version": "3.0.0", 588 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 589 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", 590 | "dev": true 591 | }, 592 | "cacache": { 593 | "version": "10.0.4", 594 | "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", 595 | "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", 596 | "dev": true, 597 | "requires": { 598 | "bluebird": "3.5.2", 599 | "chownr": "1.1.1", 600 | "glob": "7.1.3", 601 | "graceful-fs": "4.1.11", 602 | "lru-cache": "4.1.3", 603 | "mississippi": "2.0.0", 604 | "mkdirp": "0.5.1", 605 | "move-concurrently": "1.0.1", 606 | "promise-inflight": "1.0.1", 607 | "rimraf": "2.6.2", 608 | "ssri": "5.3.0", 609 | "unique-filename": "1.1.1", 610 | "y18n": "4.0.0" 611 | } 612 | }, 613 | "cache-base": { 614 | "version": "1.0.1", 615 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", 616 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", 617 | "dev": true, 618 | "requires": { 619 | "collection-visit": "1.0.0", 620 | "component-emitter": "1.2.1", 621 | "get-value": "2.0.6", 622 | "has-value": "1.0.0", 623 | "isobject": "3.0.1", 624 | "set-value": "2.0.0", 625 | "to-object-path": "0.3.0", 626 | "union-value": "1.0.0", 627 | "unset-value": "1.0.0" 628 | } 629 | }, 630 | "caseless": { 631 | "version": "0.12.0", 632 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 633 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 634 | }, 635 | "chokidar": { 636 | "version": "2.0.4", 637 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", 638 | "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", 639 | "dev": true, 640 | "requires": { 641 | "anymatch": "2.0.0", 642 | "async-each": "1.0.1", 643 | "braces": "2.3.2", 644 | "fsevents": "1.2.4", 645 | "glob-parent": "3.1.0", 646 | "inherits": "2.0.3", 647 | "is-binary-path": "1.0.1", 648 | "is-glob": "4.0.0", 649 | "lodash.debounce": "4.0.8", 650 | "normalize-path": "2.1.1", 651 | "path-is-absolute": "1.0.1", 652 | "readdirp": "2.2.1", 653 | "upath": "1.1.0" 654 | } 655 | }, 656 | "chownr": { 657 | "version": "1.1.1", 658 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", 659 | "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", 660 | "dev": true 661 | }, 662 | "chrome-trace-event": { 663 | "version": "1.0.0", 664 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", 665 | "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", 666 | "dev": true, 667 | "requires": { 668 | "tslib": "1.9.3" 669 | } 670 | }, 671 | "cipher-base": { 672 | "version": "1.0.4", 673 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 674 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 675 | "dev": true, 676 | "requires": { 677 | "inherits": "2.0.3", 678 | "safe-buffer": "5.1.2" 679 | } 680 | }, 681 | "class-utils": { 682 | "version": "0.3.6", 683 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", 684 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", 685 | "dev": true, 686 | "requires": { 687 | "arr-union": "3.1.0", 688 | "define-property": "0.2.5", 689 | "isobject": "3.0.1", 690 | "static-extend": "0.1.2" 691 | }, 692 | "dependencies": { 693 | "define-property": { 694 | "version": "0.2.5", 695 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 696 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 697 | "dev": true, 698 | "requires": { 699 | "is-descriptor": "0.1.6" 700 | } 701 | } 702 | } 703 | }, 704 | "co": { 705 | "version": "4.6.0", 706 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 707 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 708 | }, 709 | "collection-visit": { 710 | "version": "1.0.0", 711 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", 712 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", 713 | "dev": true, 714 | "requires": { 715 | "map-visit": "1.0.0", 716 | "object-visit": "1.0.1" 717 | } 718 | }, 719 | "combined-stream": { 720 | "version": "1.0.7", 721 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 722 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 723 | "requires": { 724 | "delayed-stream": "1.0.0" 725 | } 726 | }, 727 | "commander": { 728 | "version": "2.13.0", 729 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", 730 | "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", 731 | "dev": true 732 | }, 733 | "commondir": { 734 | "version": "1.0.1", 735 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 736 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 737 | "dev": true 738 | }, 739 | "component-emitter": { 740 | "version": "1.2.1", 741 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 742 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 743 | "dev": true 744 | }, 745 | "concat-map": { 746 | "version": "0.0.1", 747 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 748 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 749 | "dev": true 750 | }, 751 | "concat-stream": { 752 | "version": "1.6.2", 753 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 754 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 755 | "dev": true, 756 | "requires": { 757 | "buffer-from": "1.1.1", 758 | "inherits": "2.0.3", 759 | "readable-stream": "2.3.6", 760 | "typedarray": "0.0.6" 761 | } 762 | }, 763 | "console-browserify": { 764 | "version": "1.1.0", 765 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 766 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 767 | "dev": true, 768 | "requires": { 769 | "date-now": "0.1.4" 770 | } 771 | }, 772 | "constants-browserify": { 773 | "version": "1.0.0", 774 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 775 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", 776 | "dev": true 777 | }, 778 | "copy-concurrently": { 779 | "version": "1.0.5", 780 | "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", 781 | "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", 782 | "dev": true, 783 | "requires": { 784 | "aproba": "1.2.0", 785 | "fs-write-stream-atomic": "1.0.10", 786 | "iferr": "0.1.5", 787 | "mkdirp": "0.5.1", 788 | "rimraf": "2.6.2", 789 | "run-queue": "1.0.3" 790 | } 791 | }, 792 | "copy-descriptor": { 793 | "version": "0.1.1", 794 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", 795 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", 796 | "dev": true 797 | }, 798 | "core-util-is": { 799 | "version": "1.0.2", 800 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 801 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 802 | }, 803 | "create-ecdh": { 804 | "version": "4.0.3", 805 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", 806 | "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", 807 | "dev": true, 808 | "requires": { 809 | "bn.js": "4.11.8", 810 | "elliptic": "6.4.1" 811 | } 812 | }, 813 | "create-hash": { 814 | "version": "1.2.0", 815 | "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 816 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 817 | "dev": true, 818 | "requires": { 819 | "cipher-base": "1.0.4", 820 | "inherits": "2.0.3", 821 | "md5.js": "1.3.5", 822 | "ripemd160": "2.0.2", 823 | "sha.js": "2.4.11" 824 | } 825 | }, 826 | "create-hmac": { 827 | "version": "1.1.7", 828 | "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 829 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 830 | "dev": true, 831 | "requires": { 832 | "cipher-base": "1.0.4", 833 | "create-hash": "1.2.0", 834 | "inherits": "2.0.3", 835 | "ripemd160": "2.0.2", 836 | "safe-buffer": "5.1.2", 837 | "sha.js": "2.4.11" 838 | } 839 | }, 840 | "crypto-browserify": { 841 | "version": "3.12.0", 842 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 843 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 844 | "dev": true, 845 | "requires": { 846 | "browserify-cipher": "1.0.1", 847 | "browserify-sign": "4.0.4", 848 | "create-ecdh": "4.0.3", 849 | "create-hash": "1.2.0", 850 | "create-hmac": "1.1.7", 851 | "diffie-hellman": "5.0.3", 852 | "inherits": "2.0.3", 853 | "pbkdf2": "3.0.17", 854 | "public-encrypt": "4.0.3", 855 | "randombytes": "2.0.6", 856 | "randomfill": "1.0.4" 857 | } 858 | }, 859 | "cyclist": { 860 | "version": "0.2.2", 861 | "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", 862 | "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", 863 | "dev": true 864 | }, 865 | "dashdash": { 866 | "version": "1.14.1", 867 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 868 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 869 | "requires": { 870 | "assert-plus": "1.0.0" 871 | } 872 | }, 873 | "date-now": { 874 | "version": "0.1.4", 875 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 876 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 877 | "dev": true 878 | }, 879 | "debug": { 880 | "version": "2.6.9", 881 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 882 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 883 | "dev": true, 884 | "requires": { 885 | "ms": "2.0.0" 886 | } 887 | }, 888 | "decode-uri-component": { 889 | "version": "0.2.0", 890 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 891 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", 892 | "dev": true 893 | }, 894 | "define-property": { 895 | "version": "2.0.2", 896 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", 897 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", 898 | "dev": true, 899 | "requires": { 900 | "is-descriptor": "1.0.2", 901 | "isobject": "3.0.1" 902 | }, 903 | "dependencies": { 904 | "is-accessor-descriptor": { 905 | "version": "1.0.0", 906 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 907 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 908 | "dev": true, 909 | "requires": { 910 | "kind-of": "6.0.2" 911 | } 912 | }, 913 | "is-data-descriptor": { 914 | "version": "1.0.0", 915 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 916 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 917 | "dev": true, 918 | "requires": { 919 | "kind-of": "6.0.2" 920 | } 921 | }, 922 | "is-descriptor": { 923 | "version": "1.0.2", 924 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 925 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 926 | "dev": true, 927 | "requires": { 928 | "is-accessor-descriptor": "1.0.0", 929 | "is-data-descriptor": "1.0.0", 930 | "kind-of": "6.0.2" 931 | } 932 | } 933 | } 934 | }, 935 | "delayed-stream": { 936 | "version": "1.0.0", 937 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 938 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 939 | }, 940 | "des.js": { 941 | "version": "1.0.0", 942 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", 943 | "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", 944 | "dev": true, 945 | "requires": { 946 | "inherits": "2.0.3", 947 | "minimalistic-assert": "1.0.1" 948 | } 949 | }, 950 | "diffie-hellman": { 951 | "version": "5.0.3", 952 | "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 953 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 954 | "dev": true, 955 | "requires": { 956 | "bn.js": "4.11.8", 957 | "miller-rabin": "4.0.1", 958 | "randombytes": "2.0.6" 959 | } 960 | }, 961 | "domain-browser": { 962 | "version": "1.2.0", 963 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 964 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", 965 | "dev": true 966 | }, 967 | "duplexify": { 968 | "version": "3.6.0", 969 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", 970 | "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", 971 | "dev": true, 972 | "requires": { 973 | "end-of-stream": "1.4.1", 974 | "inherits": "2.0.3", 975 | "readable-stream": "2.3.6", 976 | "stream-shift": "1.0.0" 977 | } 978 | }, 979 | "ecc-jsbn": { 980 | "version": "0.1.2", 981 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 982 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 983 | "optional": true, 984 | "requires": { 985 | "jsbn": "0.1.1", 986 | "safer-buffer": "2.1.2" 987 | } 988 | }, 989 | "elliptic": { 990 | "version": "6.4.1", 991 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", 992 | "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", 993 | "dev": true, 994 | "requires": { 995 | "bn.js": "4.11.8", 996 | "brorand": "1.1.0", 997 | "hash.js": "1.1.5", 998 | "hmac-drbg": "1.0.1", 999 | "inherits": "2.0.3", 1000 | "minimalistic-assert": "1.0.1", 1001 | "minimalistic-crypto-utils": "1.0.1" 1002 | } 1003 | }, 1004 | "emojis-list": { 1005 | "version": "2.1.0", 1006 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", 1007 | "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", 1008 | "dev": true 1009 | }, 1010 | "end-of-stream": { 1011 | "version": "1.4.1", 1012 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 1013 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 1014 | "dev": true, 1015 | "requires": { 1016 | "once": "1.4.0" 1017 | } 1018 | }, 1019 | "enhanced-resolve": { 1020 | "version": "4.1.0", 1021 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", 1022 | "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", 1023 | "dev": true, 1024 | "requires": { 1025 | "graceful-fs": "4.1.11", 1026 | "memory-fs": "0.4.1", 1027 | "tapable": "1.1.0" 1028 | } 1029 | }, 1030 | "errno": { 1031 | "version": "0.1.7", 1032 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", 1033 | "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", 1034 | "dev": true, 1035 | "requires": { 1036 | "prr": "1.0.1" 1037 | } 1038 | }, 1039 | "eslint-scope": { 1040 | "version": "4.0.0", 1041 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", 1042 | "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", 1043 | "dev": true, 1044 | "requires": { 1045 | "esrecurse": "4.2.1", 1046 | "estraverse": "4.2.0" 1047 | } 1048 | }, 1049 | "esrecurse": { 1050 | "version": "4.2.1", 1051 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 1052 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 1053 | "dev": true, 1054 | "requires": { 1055 | "estraverse": "4.2.0" 1056 | } 1057 | }, 1058 | "estraverse": { 1059 | "version": "4.2.0", 1060 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 1061 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 1062 | "dev": true 1063 | }, 1064 | "events": { 1065 | "version": "1.1.1", 1066 | "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", 1067 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", 1068 | "dev": true 1069 | }, 1070 | "evp_bytestokey": { 1071 | "version": "1.0.3", 1072 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 1073 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 1074 | "dev": true, 1075 | "requires": { 1076 | "md5.js": "1.3.5", 1077 | "safe-buffer": "5.1.2" 1078 | } 1079 | }, 1080 | "expand-brackets": { 1081 | "version": "2.1.4", 1082 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", 1083 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", 1084 | "dev": true, 1085 | "requires": { 1086 | "debug": "2.6.9", 1087 | "define-property": "0.2.5", 1088 | "extend-shallow": "2.0.1", 1089 | "posix-character-classes": "0.1.1", 1090 | "regex-not": "1.0.2", 1091 | "snapdragon": "0.8.2", 1092 | "to-regex": "3.0.2" 1093 | }, 1094 | "dependencies": { 1095 | "define-property": { 1096 | "version": "0.2.5", 1097 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1098 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1099 | "dev": true, 1100 | "requires": { 1101 | "is-descriptor": "0.1.6" 1102 | } 1103 | }, 1104 | "extend-shallow": { 1105 | "version": "2.0.1", 1106 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1107 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1108 | "dev": true, 1109 | "requires": { 1110 | "is-extendable": "0.1.1" 1111 | } 1112 | } 1113 | } 1114 | }, 1115 | "extend": { 1116 | "version": "3.0.2", 1117 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1118 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 1119 | }, 1120 | "extend-shallow": { 1121 | "version": "3.0.2", 1122 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 1123 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 1124 | "dev": true, 1125 | "requires": { 1126 | "assign-symbols": "1.0.0", 1127 | "is-extendable": "1.0.1" 1128 | }, 1129 | "dependencies": { 1130 | "is-extendable": { 1131 | "version": "1.0.1", 1132 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 1133 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 1134 | "dev": true, 1135 | "requires": { 1136 | "is-plain-object": "2.0.4" 1137 | } 1138 | } 1139 | } 1140 | }, 1141 | "extglob": { 1142 | "version": "2.0.4", 1143 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", 1144 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", 1145 | "dev": true, 1146 | "requires": { 1147 | "array-unique": "0.3.2", 1148 | "define-property": "1.0.0", 1149 | "expand-brackets": "2.1.4", 1150 | "extend-shallow": "2.0.1", 1151 | "fragment-cache": "0.2.1", 1152 | "regex-not": "1.0.2", 1153 | "snapdragon": "0.8.2", 1154 | "to-regex": "3.0.2" 1155 | }, 1156 | "dependencies": { 1157 | "define-property": { 1158 | "version": "1.0.0", 1159 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 1160 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 1161 | "dev": true, 1162 | "requires": { 1163 | "is-descriptor": "1.0.2" 1164 | } 1165 | }, 1166 | "extend-shallow": { 1167 | "version": "2.0.1", 1168 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1169 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1170 | "dev": true, 1171 | "requires": { 1172 | "is-extendable": "0.1.1" 1173 | } 1174 | }, 1175 | "is-accessor-descriptor": { 1176 | "version": "1.0.0", 1177 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1178 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 1179 | "dev": true, 1180 | "requires": { 1181 | "kind-of": "6.0.2" 1182 | } 1183 | }, 1184 | "is-data-descriptor": { 1185 | "version": "1.0.0", 1186 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1187 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 1188 | "dev": true, 1189 | "requires": { 1190 | "kind-of": "6.0.2" 1191 | } 1192 | }, 1193 | "is-descriptor": { 1194 | "version": "1.0.2", 1195 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1196 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 1197 | "dev": true, 1198 | "requires": { 1199 | "is-accessor-descriptor": "1.0.0", 1200 | "is-data-descriptor": "1.0.0", 1201 | "kind-of": "6.0.2" 1202 | } 1203 | } 1204 | } 1205 | }, 1206 | "extsprintf": { 1207 | "version": "1.3.0", 1208 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1209 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 1210 | }, 1211 | "fast-deep-equal": { 1212 | "version": "2.0.1", 1213 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 1214 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 1215 | "dev": true 1216 | }, 1217 | "fast-json-stable-stringify": { 1218 | "version": "2.0.0", 1219 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 1220 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 1221 | }, 1222 | "fill-range": { 1223 | "version": "4.0.0", 1224 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", 1225 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", 1226 | "dev": true, 1227 | "requires": { 1228 | "extend-shallow": "2.0.1", 1229 | "is-number": "3.0.0", 1230 | "repeat-string": "1.6.1", 1231 | "to-regex-range": "2.1.1" 1232 | }, 1233 | "dependencies": { 1234 | "extend-shallow": { 1235 | "version": "2.0.1", 1236 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1237 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1238 | "dev": true, 1239 | "requires": { 1240 | "is-extendable": "0.1.1" 1241 | } 1242 | } 1243 | } 1244 | }, 1245 | "find-cache-dir": { 1246 | "version": "1.0.0", 1247 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", 1248 | "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", 1249 | "dev": true, 1250 | "requires": { 1251 | "commondir": "1.0.1", 1252 | "make-dir": "1.3.0", 1253 | "pkg-dir": "2.0.0" 1254 | } 1255 | }, 1256 | "find-up": { 1257 | "version": "2.1.0", 1258 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 1259 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 1260 | "dev": true, 1261 | "requires": { 1262 | "locate-path": "2.0.0" 1263 | } 1264 | }, 1265 | "flush-write-stream": { 1266 | "version": "1.0.3", 1267 | "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", 1268 | "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", 1269 | "dev": true, 1270 | "requires": { 1271 | "inherits": "2.0.3", 1272 | "readable-stream": "2.3.6" 1273 | } 1274 | }, 1275 | "for-in": { 1276 | "version": "1.0.2", 1277 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 1278 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 1279 | "dev": true 1280 | }, 1281 | "forever-agent": { 1282 | "version": "0.6.1", 1283 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1284 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 1285 | }, 1286 | "form-data": { 1287 | "version": "2.3.2", 1288 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", 1289 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", 1290 | "requires": { 1291 | "asynckit": "0.4.0", 1292 | "combined-stream": "1.0.6", 1293 | "mime-types": "2.1.20" 1294 | }, 1295 | "dependencies": { 1296 | "combined-stream": { 1297 | "version": "1.0.6", 1298 | "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 1299 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", 1300 | "requires": { 1301 | "delayed-stream": "1.0.0" 1302 | } 1303 | } 1304 | } 1305 | }, 1306 | "fragment-cache": { 1307 | "version": "0.2.1", 1308 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", 1309 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", 1310 | "dev": true, 1311 | "requires": { 1312 | "map-cache": "0.2.2" 1313 | } 1314 | }, 1315 | "from2": { 1316 | "version": "2.3.0", 1317 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 1318 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 1319 | "dev": true, 1320 | "requires": { 1321 | "inherits": "2.0.3", 1322 | "readable-stream": "2.3.6" 1323 | } 1324 | }, 1325 | "fs-write-stream-atomic": { 1326 | "version": "1.0.10", 1327 | "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", 1328 | "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", 1329 | "dev": true, 1330 | "requires": { 1331 | "graceful-fs": "4.1.11", 1332 | "iferr": "0.1.5", 1333 | "imurmurhash": "0.1.4", 1334 | "readable-stream": "2.3.6" 1335 | } 1336 | }, 1337 | "fs.realpath": { 1338 | "version": "1.0.0", 1339 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1340 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1341 | "dev": true 1342 | }, 1343 | "fsevents": { 1344 | "version": "1.2.4", 1345 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", 1346 | "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", 1347 | "dev": true, 1348 | "optional": true, 1349 | "requires": { 1350 | "nan": "2.11.1", 1351 | "node-pre-gyp": "0.10.0" 1352 | }, 1353 | "dependencies": { 1354 | "abbrev": { 1355 | "version": "1.1.1", 1356 | "bundled": true, 1357 | "dev": true, 1358 | "optional": true 1359 | }, 1360 | "ansi-regex": { 1361 | "version": "2.1.1", 1362 | "bundled": true, 1363 | "dev": true 1364 | }, 1365 | "aproba": { 1366 | "version": "1.2.0", 1367 | "bundled": true, 1368 | "dev": true, 1369 | "optional": true 1370 | }, 1371 | "are-we-there-yet": { 1372 | "version": "1.1.4", 1373 | "bundled": true, 1374 | "dev": true, 1375 | "optional": true, 1376 | "requires": { 1377 | "delegates": "1.0.0", 1378 | "readable-stream": "2.3.6" 1379 | } 1380 | }, 1381 | "balanced-match": { 1382 | "version": "1.0.0", 1383 | "bundled": true, 1384 | "dev": true 1385 | }, 1386 | "brace-expansion": { 1387 | "version": "1.1.11", 1388 | "bundled": true, 1389 | "dev": true, 1390 | "requires": { 1391 | "balanced-match": "1.0.0", 1392 | "concat-map": "0.0.1" 1393 | } 1394 | }, 1395 | "chownr": { 1396 | "version": "1.0.1", 1397 | "bundled": true, 1398 | "dev": true, 1399 | "optional": true 1400 | }, 1401 | "code-point-at": { 1402 | "version": "1.1.0", 1403 | "bundled": true, 1404 | "dev": true 1405 | }, 1406 | "concat-map": { 1407 | "version": "0.0.1", 1408 | "bundled": true, 1409 | "dev": true 1410 | }, 1411 | "console-control-strings": { 1412 | "version": "1.1.0", 1413 | "bundled": true, 1414 | "dev": true 1415 | }, 1416 | "core-util-is": { 1417 | "version": "1.0.2", 1418 | "bundled": true, 1419 | "dev": true, 1420 | "optional": true 1421 | }, 1422 | "debug": { 1423 | "version": "2.6.9", 1424 | "bundled": true, 1425 | "dev": true, 1426 | "optional": true, 1427 | "requires": { 1428 | "ms": "2.0.0" 1429 | } 1430 | }, 1431 | "deep-extend": { 1432 | "version": "0.5.1", 1433 | "bundled": true, 1434 | "dev": true, 1435 | "optional": true 1436 | }, 1437 | "delegates": { 1438 | "version": "1.0.0", 1439 | "bundled": true, 1440 | "dev": true, 1441 | "optional": true 1442 | }, 1443 | "detect-libc": { 1444 | "version": "1.0.3", 1445 | "bundled": true, 1446 | "dev": true, 1447 | "optional": true 1448 | }, 1449 | "fs-minipass": { 1450 | "version": "1.2.5", 1451 | "bundled": true, 1452 | "dev": true, 1453 | "optional": true, 1454 | "requires": { 1455 | "minipass": "2.2.4" 1456 | } 1457 | }, 1458 | "fs.realpath": { 1459 | "version": "1.0.0", 1460 | "bundled": true, 1461 | "dev": true, 1462 | "optional": true 1463 | }, 1464 | "gauge": { 1465 | "version": "2.7.4", 1466 | "bundled": true, 1467 | "dev": true, 1468 | "optional": true, 1469 | "requires": { 1470 | "aproba": "1.2.0", 1471 | "console-control-strings": "1.1.0", 1472 | "has-unicode": "2.0.1", 1473 | "object-assign": "4.1.1", 1474 | "signal-exit": "3.0.2", 1475 | "string-width": "1.0.2", 1476 | "strip-ansi": "3.0.1", 1477 | "wide-align": "1.1.2" 1478 | } 1479 | }, 1480 | "glob": { 1481 | "version": "7.1.2", 1482 | "bundled": true, 1483 | "dev": true, 1484 | "optional": true, 1485 | "requires": { 1486 | "fs.realpath": "1.0.0", 1487 | "inflight": "1.0.6", 1488 | "inherits": "2.0.3", 1489 | "minimatch": "3.0.4", 1490 | "once": "1.4.0", 1491 | "path-is-absolute": "1.0.1" 1492 | } 1493 | }, 1494 | "has-unicode": { 1495 | "version": "2.0.1", 1496 | "bundled": true, 1497 | "dev": true, 1498 | "optional": true 1499 | }, 1500 | "iconv-lite": { 1501 | "version": "0.4.21", 1502 | "bundled": true, 1503 | "dev": true, 1504 | "optional": true, 1505 | "requires": { 1506 | "safer-buffer": "2.1.2" 1507 | } 1508 | }, 1509 | "ignore-walk": { 1510 | "version": "3.0.1", 1511 | "bundled": true, 1512 | "dev": true, 1513 | "optional": true, 1514 | "requires": { 1515 | "minimatch": "3.0.4" 1516 | } 1517 | }, 1518 | "inflight": { 1519 | "version": "1.0.6", 1520 | "bundled": true, 1521 | "dev": true, 1522 | "optional": true, 1523 | "requires": { 1524 | "once": "1.4.0", 1525 | "wrappy": "1.0.2" 1526 | } 1527 | }, 1528 | "inherits": { 1529 | "version": "2.0.3", 1530 | "bundled": true, 1531 | "dev": true 1532 | }, 1533 | "ini": { 1534 | "version": "1.3.5", 1535 | "bundled": true, 1536 | "dev": true, 1537 | "optional": true 1538 | }, 1539 | "is-fullwidth-code-point": { 1540 | "version": "1.0.0", 1541 | "bundled": true, 1542 | "dev": true, 1543 | "requires": { 1544 | "number-is-nan": "1.0.1" 1545 | } 1546 | }, 1547 | "isarray": { 1548 | "version": "1.0.0", 1549 | "bundled": true, 1550 | "dev": true, 1551 | "optional": true 1552 | }, 1553 | "minimatch": { 1554 | "version": "3.0.4", 1555 | "bundled": true, 1556 | "dev": true, 1557 | "requires": { 1558 | "brace-expansion": "1.1.11" 1559 | } 1560 | }, 1561 | "minimist": { 1562 | "version": "0.0.8", 1563 | "bundled": true, 1564 | "dev": true 1565 | }, 1566 | "minipass": { 1567 | "version": "2.2.4", 1568 | "bundled": true, 1569 | "dev": true, 1570 | "requires": { 1571 | "safe-buffer": "5.1.1", 1572 | "yallist": "3.0.2" 1573 | } 1574 | }, 1575 | "minizlib": { 1576 | "version": "1.1.0", 1577 | "bundled": true, 1578 | "dev": true, 1579 | "optional": true, 1580 | "requires": { 1581 | "minipass": "2.2.4" 1582 | } 1583 | }, 1584 | "mkdirp": { 1585 | "version": "0.5.1", 1586 | "bundled": true, 1587 | "dev": true, 1588 | "requires": { 1589 | "minimist": "0.0.8" 1590 | } 1591 | }, 1592 | "ms": { 1593 | "version": "2.0.0", 1594 | "bundled": true, 1595 | "dev": true, 1596 | "optional": true 1597 | }, 1598 | "needle": { 1599 | "version": "2.2.0", 1600 | "bundled": true, 1601 | "dev": true, 1602 | "optional": true, 1603 | "requires": { 1604 | "debug": "2.6.9", 1605 | "iconv-lite": "0.4.21", 1606 | "sax": "1.2.4" 1607 | } 1608 | }, 1609 | "node-pre-gyp": { 1610 | "version": "0.10.0", 1611 | "bundled": true, 1612 | "dev": true, 1613 | "optional": true, 1614 | "requires": { 1615 | "detect-libc": "1.0.3", 1616 | "mkdirp": "0.5.1", 1617 | "needle": "2.2.0", 1618 | "nopt": "4.0.1", 1619 | "npm-packlist": "1.1.10", 1620 | "npmlog": "4.1.2", 1621 | "rc": "1.2.7", 1622 | "rimraf": "2.6.2", 1623 | "semver": "5.5.0", 1624 | "tar": "4.4.1" 1625 | } 1626 | }, 1627 | "nopt": { 1628 | "version": "4.0.1", 1629 | "bundled": true, 1630 | "dev": true, 1631 | "optional": true, 1632 | "requires": { 1633 | "abbrev": "1.1.1", 1634 | "osenv": "0.1.5" 1635 | } 1636 | }, 1637 | "npm-bundled": { 1638 | "version": "1.0.3", 1639 | "bundled": true, 1640 | "dev": true, 1641 | "optional": true 1642 | }, 1643 | "npm-packlist": { 1644 | "version": "1.1.10", 1645 | "bundled": true, 1646 | "dev": true, 1647 | "optional": true, 1648 | "requires": { 1649 | "ignore-walk": "3.0.1", 1650 | "npm-bundled": "1.0.3" 1651 | } 1652 | }, 1653 | "npmlog": { 1654 | "version": "4.1.2", 1655 | "bundled": true, 1656 | "dev": true, 1657 | "optional": true, 1658 | "requires": { 1659 | "are-we-there-yet": "1.1.4", 1660 | "console-control-strings": "1.1.0", 1661 | "gauge": "2.7.4", 1662 | "set-blocking": "2.0.0" 1663 | } 1664 | }, 1665 | "number-is-nan": { 1666 | "version": "1.0.1", 1667 | "bundled": true, 1668 | "dev": true 1669 | }, 1670 | "object-assign": { 1671 | "version": "4.1.1", 1672 | "bundled": true, 1673 | "dev": true, 1674 | "optional": true 1675 | }, 1676 | "once": { 1677 | "version": "1.4.0", 1678 | "bundled": true, 1679 | "dev": true, 1680 | "requires": { 1681 | "wrappy": "1.0.2" 1682 | } 1683 | }, 1684 | "os-homedir": { 1685 | "version": "1.0.2", 1686 | "bundled": true, 1687 | "dev": true, 1688 | "optional": true 1689 | }, 1690 | "os-tmpdir": { 1691 | "version": "1.0.2", 1692 | "bundled": true, 1693 | "dev": true, 1694 | "optional": true 1695 | }, 1696 | "osenv": { 1697 | "version": "0.1.5", 1698 | "bundled": true, 1699 | "dev": true, 1700 | "optional": true, 1701 | "requires": { 1702 | "os-homedir": "1.0.2", 1703 | "os-tmpdir": "1.0.2" 1704 | } 1705 | }, 1706 | "path-is-absolute": { 1707 | "version": "1.0.1", 1708 | "bundled": true, 1709 | "dev": true, 1710 | "optional": true 1711 | }, 1712 | "process-nextick-args": { 1713 | "version": "2.0.0", 1714 | "bundled": true, 1715 | "dev": true, 1716 | "optional": true 1717 | }, 1718 | "rc": { 1719 | "version": "1.2.7", 1720 | "bundled": true, 1721 | "dev": true, 1722 | "optional": true, 1723 | "requires": { 1724 | "deep-extend": "0.5.1", 1725 | "ini": "1.3.5", 1726 | "minimist": "1.2.0", 1727 | "strip-json-comments": "2.0.1" 1728 | }, 1729 | "dependencies": { 1730 | "minimist": { 1731 | "version": "1.2.0", 1732 | "bundled": true, 1733 | "dev": true, 1734 | "optional": true 1735 | } 1736 | } 1737 | }, 1738 | "readable-stream": { 1739 | "version": "2.3.6", 1740 | "bundled": true, 1741 | "dev": true, 1742 | "optional": true, 1743 | "requires": { 1744 | "core-util-is": "1.0.2", 1745 | "inherits": "2.0.3", 1746 | "isarray": "1.0.0", 1747 | "process-nextick-args": "2.0.0", 1748 | "safe-buffer": "5.1.1", 1749 | "string_decoder": "1.1.1", 1750 | "util-deprecate": "1.0.2" 1751 | } 1752 | }, 1753 | "rimraf": { 1754 | "version": "2.6.2", 1755 | "bundled": true, 1756 | "dev": true, 1757 | "optional": true, 1758 | "requires": { 1759 | "glob": "7.1.2" 1760 | } 1761 | }, 1762 | "safe-buffer": { 1763 | "version": "5.1.1", 1764 | "bundled": true, 1765 | "dev": true 1766 | }, 1767 | "safer-buffer": { 1768 | "version": "2.1.2", 1769 | "bundled": true, 1770 | "dev": true, 1771 | "optional": true 1772 | }, 1773 | "sax": { 1774 | "version": "1.2.4", 1775 | "bundled": true, 1776 | "dev": true, 1777 | "optional": true 1778 | }, 1779 | "semver": { 1780 | "version": "5.5.0", 1781 | "bundled": true, 1782 | "dev": true, 1783 | "optional": true 1784 | }, 1785 | "set-blocking": { 1786 | "version": "2.0.0", 1787 | "bundled": true, 1788 | "dev": true, 1789 | "optional": true 1790 | }, 1791 | "signal-exit": { 1792 | "version": "3.0.2", 1793 | "bundled": true, 1794 | "dev": true, 1795 | "optional": true 1796 | }, 1797 | "string-width": { 1798 | "version": "1.0.2", 1799 | "bundled": true, 1800 | "dev": true, 1801 | "requires": { 1802 | "code-point-at": "1.1.0", 1803 | "is-fullwidth-code-point": "1.0.0", 1804 | "strip-ansi": "3.0.1" 1805 | } 1806 | }, 1807 | "string_decoder": { 1808 | "version": "1.1.1", 1809 | "bundled": true, 1810 | "dev": true, 1811 | "optional": true, 1812 | "requires": { 1813 | "safe-buffer": "5.1.1" 1814 | } 1815 | }, 1816 | "strip-ansi": { 1817 | "version": "3.0.1", 1818 | "bundled": true, 1819 | "dev": true, 1820 | "requires": { 1821 | "ansi-regex": "2.1.1" 1822 | } 1823 | }, 1824 | "strip-json-comments": { 1825 | "version": "2.0.1", 1826 | "bundled": true, 1827 | "dev": true, 1828 | "optional": true 1829 | }, 1830 | "tar": { 1831 | "version": "4.4.1", 1832 | "bundled": true, 1833 | "dev": true, 1834 | "optional": true, 1835 | "requires": { 1836 | "chownr": "1.0.1", 1837 | "fs-minipass": "1.2.5", 1838 | "minipass": "2.2.4", 1839 | "minizlib": "1.1.0", 1840 | "mkdirp": "0.5.1", 1841 | "safe-buffer": "5.1.1", 1842 | "yallist": "3.0.2" 1843 | } 1844 | }, 1845 | "util-deprecate": { 1846 | "version": "1.0.2", 1847 | "bundled": true, 1848 | "dev": true, 1849 | "optional": true 1850 | }, 1851 | "wide-align": { 1852 | "version": "1.1.2", 1853 | "bundled": true, 1854 | "dev": true, 1855 | "optional": true, 1856 | "requires": { 1857 | "string-width": "1.0.2" 1858 | } 1859 | }, 1860 | "wrappy": { 1861 | "version": "1.0.2", 1862 | "bundled": true, 1863 | "dev": true 1864 | }, 1865 | "yallist": { 1866 | "version": "3.0.2", 1867 | "bundled": true, 1868 | "dev": true 1869 | } 1870 | } 1871 | }, 1872 | "get-value": { 1873 | "version": "2.0.6", 1874 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 1875 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", 1876 | "dev": true 1877 | }, 1878 | "getpass": { 1879 | "version": "0.1.7", 1880 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1881 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1882 | "requires": { 1883 | "assert-plus": "1.0.0" 1884 | } 1885 | }, 1886 | "glob": { 1887 | "version": "7.1.3", 1888 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 1889 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 1890 | "dev": true, 1891 | "requires": { 1892 | "fs.realpath": "1.0.0", 1893 | "inflight": "1.0.6", 1894 | "inherits": "2.0.3", 1895 | "minimatch": "3.0.4", 1896 | "once": "1.4.0", 1897 | "path-is-absolute": "1.0.1" 1898 | } 1899 | }, 1900 | "glob-parent": { 1901 | "version": "3.1.0", 1902 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", 1903 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", 1904 | "dev": true, 1905 | "requires": { 1906 | "is-glob": "3.1.0", 1907 | "path-dirname": "1.0.2" 1908 | }, 1909 | "dependencies": { 1910 | "is-glob": { 1911 | "version": "3.1.0", 1912 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 1913 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", 1914 | "dev": true, 1915 | "requires": { 1916 | "is-extglob": "2.1.1" 1917 | } 1918 | } 1919 | } 1920 | }, 1921 | "graceful-fs": { 1922 | "version": "4.1.11", 1923 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1924 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1925 | "dev": true 1926 | }, 1927 | "har-schema": { 1928 | "version": "2.0.0", 1929 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1930 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 1931 | }, 1932 | "har-validator": { 1933 | "version": "5.1.0", 1934 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", 1935 | "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", 1936 | "requires": { 1937 | "ajv": "5.5.2", 1938 | "har-schema": "2.0.0" 1939 | }, 1940 | "dependencies": { 1941 | "ajv": { 1942 | "version": "5.5.2", 1943 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 1944 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 1945 | "requires": { 1946 | "co": "4.6.0", 1947 | "fast-deep-equal": "1.1.0", 1948 | "fast-json-stable-stringify": "2.0.0", 1949 | "json-schema-traverse": "0.3.1" 1950 | } 1951 | }, 1952 | "fast-deep-equal": { 1953 | "version": "1.1.0", 1954 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 1955 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" 1956 | }, 1957 | "json-schema-traverse": { 1958 | "version": "0.3.1", 1959 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 1960 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 1961 | } 1962 | } 1963 | }, 1964 | "has-value": { 1965 | "version": "1.0.0", 1966 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", 1967 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", 1968 | "dev": true, 1969 | "requires": { 1970 | "get-value": "2.0.6", 1971 | "has-values": "1.0.0", 1972 | "isobject": "3.0.1" 1973 | } 1974 | }, 1975 | "has-values": { 1976 | "version": "1.0.0", 1977 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", 1978 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", 1979 | "dev": true, 1980 | "requires": { 1981 | "is-number": "3.0.0", 1982 | "kind-of": "4.0.0" 1983 | }, 1984 | "dependencies": { 1985 | "kind-of": { 1986 | "version": "4.0.0", 1987 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 1988 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 1989 | "dev": true, 1990 | "requires": { 1991 | "is-buffer": "1.1.6" 1992 | } 1993 | } 1994 | } 1995 | }, 1996 | "hash-base": { 1997 | "version": "3.0.4", 1998 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 1999 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 2000 | "dev": true, 2001 | "requires": { 2002 | "inherits": "2.0.3", 2003 | "safe-buffer": "5.1.2" 2004 | } 2005 | }, 2006 | "hash.js": { 2007 | "version": "1.1.5", 2008 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", 2009 | "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", 2010 | "dev": true, 2011 | "requires": { 2012 | "inherits": "2.0.3", 2013 | "minimalistic-assert": "1.0.1" 2014 | } 2015 | }, 2016 | "hmac-drbg": { 2017 | "version": "1.0.1", 2018 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 2019 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 2020 | "dev": true, 2021 | "requires": { 2022 | "hash.js": "1.1.5", 2023 | "minimalistic-assert": "1.0.1", 2024 | "minimalistic-crypto-utils": "1.0.1" 2025 | } 2026 | }, 2027 | "http-signature": { 2028 | "version": "1.2.0", 2029 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 2030 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 2031 | "requires": { 2032 | "assert-plus": "1.0.0", 2033 | "jsprim": "1.4.1", 2034 | "sshpk": "1.14.2" 2035 | } 2036 | }, 2037 | "https-browserify": { 2038 | "version": "1.0.0", 2039 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 2040 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", 2041 | "dev": true 2042 | }, 2043 | "ieee754": { 2044 | "version": "1.1.12", 2045 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", 2046 | "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", 2047 | "dev": true 2048 | }, 2049 | "iferr": { 2050 | "version": "0.1.5", 2051 | "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", 2052 | "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", 2053 | "dev": true 2054 | }, 2055 | "imurmurhash": { 2056 | "version": "0.1.4", 2057 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2058 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 2059 | "dev": true 2060 | }, 2061 | "indexof": { 2062 | "version": "0.0.1", 2063 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 2064 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", 2065 | "dev": true 2066 | }, 2067 | "inflight": { 2068 | "version": "1.0.6", 2069 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2070 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2071 | "dev": true, 2072 | "requires": { 2073 | "once": "1.4.0", 2074 | "wrappy": "1.0.2" 2075 | } 2076 | }, 2077 | "inherits": { 2078 | "version": "2.0.3", 2079 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 2080 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 2081 | "dev": true 2082 | }, 2083 | "is-accessor-descriptor": { 2084 | "version": "0.1.6", 2085 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 2086 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 2087 | "dev": true, 2088 | "requires": { 2089 | "kind-of": "3.2.2" 2090 | }, 2091 | "dependencies": { 2092 | "kind-of": { 2093 | "version": "3.2.2", 2094 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2095 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2096 | "dev": true, 2097 | "requires": { 2098 | "is-buffer": "1.1.6" 2099 | } 2100 | } 2101 | } 2102 | }, 2103 | "is-binary-path": { 2104 | "version": "1.0.1", 2105 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 2106 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 2107 | "dev": true, 2108 | "requires": { 2109 | "binary-extensions": "1.12.0" 2110 | } 2111 | }, 2112 | "is-buffer": { 2113 | "version": "1.1.6", 2114 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 2115 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 2116 | "dev": true 2117 | }, 2118 | "is-data-descriptor": { 2119 | "version": "0.1.4", 2120 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 2121 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 2122 | "dev": true, 2123 | "requires": { 2124 | "kind-of": "3.2.2" 2125 | }, 2126 | "dependencies": { 2127 | "kind-of": { 2128 | "version": "3.2.2", 2129 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2130 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2131 | "dev": true, 2132 | "requires": { 2133 | "is-buffer": "1.1.6" 2134 | } 2135 | } 2136 | } 2137 | }, 2138 | "is-descriptor": { 2139 | "version": "0.1.6", 2140 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 2141 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 2142 | "dev": true, 2143 | "requires": { 2144 | "is-accessor-descriptor": "0.1.6", 2145 | "is-data-descriptor": "0.1.4", 2146 | "kind-of": "5.1.0" 2147 | }, 2148 | "dependencies": { 2149 | "kind-of": { 2150 | "version": "5.1.0", 2151 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 2152 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 2153 | "dev": true 2154 | } 2155 | } 2156 | }, 2157 | "is-extendable": { 2158 | "version": "0.1.1", 2159 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 2160 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 2161 | "dev": true 2162 | }, 2163 | "is-extglob": { 2164 | "version": "2.1.1", 2165 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2166 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 2167 | "dev": true 2168 | }, 2169 | "is-glob": { 2170 | "version": "4.0.0", 2171 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", 2172 | "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", 2173 | "dev": true, 2174 | "requires": { 2175 | "is-extglob": "2.1.1" 2176 | } 2177 | }, 2178 | "is-number": { 2179 | "version": "3.0.0", 2180 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 2181 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 2182 | "dev": true, 2183 | "requires": { 2184 | "kind-of": "3.2.2" 2185 | }, 2186 | "dependencies": { 2187 | "kind-of": { 2188 | "version": "3.2.2", 2189 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2190 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2191 | "dev": true, 2192 | "requires": { 2193 | "is-buffer": "1.1.6" 2194 | } 2195 | } 2196 | } 2197 | }, 2198 | "is-plain-object": { 2199 | "version": "2.0.4", 2200 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 2201 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 2202 | "dev": true, 2203 | "requires": { 2204 | "isobject": "3.0.1" 2205 | } 2206 | }, 2207 | "is-typedarray": { 2208 | "version": "1.0.0", 2209 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 2210 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 2211 | }, 2212 | "is-windows": { 2213 | "version": "1.0.2", 2214 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 2215 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 2216 | "dev": true 2217 | }, 2218 | "isarray": { 2219 | "version": "1.0.0", 2220 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2221 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2222 | "dev": true 2223 | }, 2224 | "isobject": { 2225 | "version": "3.0.1", 2226 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 2227 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 2228 | "dev": true 2229 | }, 2230 | "isstream": { 2231 | "version": "0.1.2", 2232 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 2233 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 2234 | }, 2235 | "jsbn": { 2236 | "version": "0.1.1", 2237 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 2238 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 2239 | "optional": true 2240 | }, 2241 | "json-parse-better-errors": { 2242 | "version": "1.0.2", 2243 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 2244 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 2245 | "dev": true 2246 | }, 2247 | "json-schema": { 2248 | "version": "0.2.3", 2249 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 2250 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 2251 | }, 2252 | "json-schema-traverse": { 2253 | "version": "0.4.1", 2254 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2255 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2256 | "dev": true 2257 | }, 2258 | "json-stringify-safe": { 2259 | "version": "5.0.1", 2260 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 2261 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 2262 | }, 2263 | "json5": { 2264 | "version": "0.5.1", 2265 | "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 2266 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", 2267 | "dev": true 2268 | }, 2269 | "jsprim": { 2270 | "version": "1.4.1", 2271 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 2272 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 2273 | "requires": { 2274 | "assert-plus": "1.0.0", 2275 | "extsprintf": "1.3.0", 2276 | "json-schema": "0.2.3", 2277 | "verror": "1.10.0" 2278 | } 2279 | }, 2280 | "kind-of": { 2281 | "version": "6.0.2", 2282 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 2283 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", 2284 | "dev": true 2285 | }, 2286 | "loader-runner": { 2287 | "version": "2.3.1", 2288 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", 2289 | "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", 2290 | "dev": true 2291 | }, 2292 | "loader-utils": { 2293 | "version": "1.1.0", 2294 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 2295 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", 2296 | "dev": true, 2297 | "requires": { 2298 | "big.js": "3.2.0", 2299 | "emojis-list": "2.1.0", 2300 | "json5": "0.5.1" 2301 | } 2302 | }, 2303 | "locate-path": { 2304 | "version": "2.0.0", 2305 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 2306 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 2307 | "dev": true, 2308 | "requires": { 2309 | "p-locate": "2.0.0", 2310 | "path-exists": "3.0.0" 2311 | } 2312 | }, 2313 | "lodash": { 2314 | "version": "4.17.11", 2315 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 2316 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" 2317 | }, 2318 | "lodash.debounce": { 2319 | "version": "4.0.8", 2320 | "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", 2321 | "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", 2322 | "dev": true 2323 | }, 2324 | "lru-cache": { 2325 | "version": "4.1.3", 2326 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", 2327 | "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", 2328 | "dev": true, 2329 | "requires": { 2330 | "pseudomap": "1.0.2", 2331 | "yallist": "2.1.2" 2332 | } 2333 | }, 2334 | "make-dir": { 2335 | "version": "1.3.0", 2336 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", 2337 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", 2338 | "dev": true, 2339 | "requires": { 2340 | "pify": "3.0.0" 2341 | } 2342 | }, 2343 | "map-cache": { 2344 | "version": "0.2.2", 2345 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 2346 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", 2347 | "dev": true 2348 | }, 2349 | "map-visit": { 2350 | "version": "1.0.0", 2351 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", 2352 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", 2353 | "dev": true, 2354 | "requires": { 2355 | "object-visit": "1.0.1" 2356 | } 2357 | }, 2358 | "md5.js": { 2359 | "version": "1.3.5", 2360 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 2361 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 2362 | "dev": true, 2363 | "requires": { 2364 | "hash-base": "3.0.4", 2365 | "inherits": "2.0.3", 2366 | "safe-buffer": "5.1.2" 2367 | } 2368 | }, 2369 | "memory-fs": { 2370 | "version": "0.4.1", 2371 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", 2372 | "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", 2373 | "dev": true, 2374 | "requires": { 2375 | "errno": "0.1.7", 2376 | "readable-stream": "2.3.6" 2377 | } 2378 | }, 2379 | "micromatch": { 2380 | "version": "3.1.10", 2381 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", 2382 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", 2383 | "dev": true, 2384 | "requires": { 2385 | "arr-diff": "4.0.0", 2386 | "array-unique": "0.3.2", 2387 | "braces": "2.3.2", 2388 | "define-property": "2.0.2", 2389 | "extend-shallow": "3.0.2", 2390 | "extglob": "2.0.4", 2391 | "fragment-cache": "0.2.1", 2392 | "kind-of": "6.0.2", 2393 | "nanomatch": "1.2.13", 2394 | "object.pick": "1.3.0", 2395 | "regex-not": "1.0.2", 2396 | "snapdragon": "0.8.2", 2397 | "to-regex": "3.0.2" 2398 | } 2399 | }, 2400 | "miller-rabin": { 2401 | "version": "4.0.1", 2402 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 2403 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 2404 | "dev": true, 2405 | "requires": { 2406 | "bn.js": "4.11.8", 2407 | "brorand": "1.1.0" 2408 | } 2409 | }, 2410 | "mime-db": { 2411 | "version": "1.36.0", 2412 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", 2413 | "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" 2414 | }, 2415 | "mime-types": { 2416 | "version": "2.1.20", 2417 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", 2418 | "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", 2419 | "requires": { 2420 | "mime-db": "1.36.0" 2421 | } 2422 | }, 2423 | "minimalistic-assert": { 2424 | "version": "1.0.1", 2425 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 2426 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 2427 | "dev": true 2428 | }, 2429 | "minimalistic-crypto-utils": { 2430 | "version": "1.0.1", 2431 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 2432 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", 2433 | "dev": true 2434 | }, 2435 | "minimatch": { 2436 | "version": "3.0.4", 2437 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2438 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2439 | "dev": true, 2440 | "requires": { 2441 | "brace-expansion": "1.1.11" 2442 | } 2443 | }, 2444 | "minimist": { 2445 | "version": "0.0.8", 2446 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2447 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 2448 | "dev": true 2449 | }, 2450 | "mississippi": { 2451 | "version": "2.0.0", 2452 | "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", 2453 | "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", 2454 | "dev": true, 2455 | "requires": { 2456 | "concat-stream": "1.6.2", 2457 | "duplexify": "3.6.0", 2458 | "end-of-stream": "1.4.1", 2459 | "flush-write-stream": "1.0.3", 2460 | "from2": "2.3.0", 2461 | "parallel-transform": "1.1.0", 2462 | "pump": "2.0.1", 2463 | "pumpify": "1.5.1", 2464 | "stream-each": "1.2.3", 2465 | "through2": "2.0.3" 2466 | } 2467 | }, 2468 | "mixin-deep": { 2469 | "version": "1.3.1", 2470 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", 2471 | "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", 2472 | "dev": true, 2473 | "requires": { 2474 | "for-in": "1.0.2", 2475 | "is-extendable": "1.0.1" 2476 | }, 2477 | "dependencies": { 2478 | "is-extendable": { 2479 | "version": "1.0.1", 2480 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 2481 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 2482 | "dev": true, 2483 | "requires": { 2484 | "is-plain-object": "2.0.4" 2485 | } 2486 | } 2487 | } 2488 | }, 2489 | "mkdirp": { 2490 | "version": "0.5.1", 2491 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2492 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2493 | "dev": true, 2494 | "requires": { 2495 | "minimist": "0.0.8" 2496 | } 2497 | }, 2498 | "move-concurrently": { 2499 | "version": "1.0.1", 2500 | "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", 2501 | "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", 2502 | "dev": true, 2503 | "requires": { 2504 | "aproba": "1.2.0", 2505 | "copy-concurrently": "1.0.5", 2506 | "fs-write-stream-atomic": "1.0.10", 2507 | "mkdirp": "0.5.1", 2508 | "rimraf": "2.6.2", 2509 | "run-queue": "1.0.3" 2510 | } 2511 | }, 2512 | "ms": { 2513 | "version": "2.0.0", 2514 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2515 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2516 | "dev": true 2517 | }, 2518 | "nan": { 2519 | "version": "2.11.1", 2520 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", 2521 | "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", 2522 | "dev": true, 2523 | "optional": true 2524 | }, 2525 | "nanomatch": { 2526 | "version": "1.2.13", 2527 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", 2528 | "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", 2529 | "dev": true, 2530 | "requires": { 2531 | "arr-diff": "4.0.0", 2532 | "array-unique": "0.3.2", 2533 | "define-property": "2.0.2", 2534 | "extend-shallow": "3.0.2", 2535 | "fragment-cache": "0.2.1", 2536 | "is-windows": "1.0.2", 2537 | "kind-of": "6.0.2", 2538 | "object.pick": "1.3.0", 2539 | "regex-not": "1.0.2", 2540 | "snapdragon": "0.8.2", 2541 | "to-regex": "3.0.2" 2542 | } 2543 | }, 2544 | "neo-async": { 2545 | "version": "2.5.2", 2546 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.2.tgz", 2547 | "integrity": "sha512-vdqTKI9GBIYcAEbFAcpKPErKINfPF5zIuz3/niBfq8WUZjpT2tytLlFVrBgWdOtqI4uaA/Rb6No0hux39XXDuw==", 2548 | "dev": true 2549 | }, 2550 | "node-libs-browser": { 2551 | "version": "2.1.0", 2552 | "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", 2553 | "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", 2554 | "dev": true, 2555 | "requires": { 2556 | "assert": "1.4.1", 2557 | "browserify-zlib": "0.2.0", 2558 | "buffer": "4.9.1", 2559 | "console-browserify": "1.1.0", 2560 | "constants-browserify": "1.0.0", 2561 | "crypto-browserify": "3.12.0", 2562 | "domain-browser": "1.2.0", 2563 | "events": "1.1.1", 2564 | "https-browserify": "1.0.0", 2565 | "os-browserify": "0.3.0", 2566 | "path-browserify": "0.0.0", 2567 | "process": "0.11.10", 2568 | "punycode": "1.4.1", 2569 | "querystring-es3": "0.2.1", 2570 | "readable-stream": "2.3.6", 2571 | "stream-browserify": "2.0.1", 2572 | "stream-http": "2.8.3", 2573 | "string_decoder": "1.1.1", 2574 | "timers-browserify": "2.0.10", 2575 | "tty-browserify": "0.0.0", 2576 | "url": "0.11.0", 2577 | "util": "0.10.4", 2578 | "vm-browserify": "0.0.4" 2579 | }, 2580 | "dependencies": { 2581 | "punycode": { 2582 | "version": "1.4.1", 2583 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2584 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2585 | "dev": true 2586 | } 2587 | } 2588 | }, 2589 | "normalize-path": { 2590 | "version": "2.1.1", 2591 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 2592 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 2593 | "dev": true, 2594 | "requires": { 2595 | "remove-trailing-separator": "1.1.0" 2596 | } 2597 | }, 2598 | "oauth-sign": { 2599 | "version": "0.9.0", 2600 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 2601 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 2602 | }, 2603 | "object-copy": { 2604 | "version": "0.1.0", 2605 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", 2606 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", 2607 | "dev": true, 2608 | "requires": { 2609 | "copy-descriptor": "0.1.1", 2610 | "define-property": "0.2.5", 2611 | "kind-of": "3.2.2" 2612 | }, 2613 | "dependencies": { 2614 | "define-property": { 2615 | "version": "0.2.5", 2616 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 2617 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 2618 | "dev": true, 2619 | "requires": { 2620 | "is-descriptor": "0.1.6" 2621 | } 2622 | }, 2623 | "kind-of": { 2624 | "version": "3.2.2", 2625 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2626 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2627 | "dev": true, 2628 | "requires": { 2629 | "is-buffer": "1.1.6" 2630 | } 2631 | } 2632 | } 2633 | }, 2634 | "object-visit": { 2635 | "version": "1.0.1", 2636 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", 2637 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", 2638 | "dev": true, 2639 | "requires": { 2640 | "isobject": "3.0.1" 2641 | } 2642 | }, 2643 | "object.pick": { 2644 | "version": "1.3.0", 2645 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 2646 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", 2647 | "dev": true, 2648 | "requires": { 2649 | "isobject": "3.0.1" 2650 | } 2651 | }, 2652 | "once": { 2653 | "version": "1.4.0", 2654 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2655 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2656 | "dev": true, 2657 | "requires": { 2658 | "wrappy": "1.0.2" 2659 | } 2660 | }, 2661 | "os-browserify": { 2662 | "version": "0.3.0", 2663 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 2664 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", 2665 | "dev": true 2666 | }, 2667 | "p-limit": { 2668 | "version": "1.3.0", 2669 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", 2670 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", 2671 | "dev": true, 2672 | "requires": { 2673 | "p-try": "1.0.0" 2674 | } 2675 | }, 2676 | "p-locate": { 2677 | "version": "2.0.0", 2678 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 2679 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 2680 | "dev": true, 2681 | "requires": { 2682 | "p-limit": "1.3.0" 2683 | } 2684 | }, 2685 | "p-try": { 2686 | "version": "1.0.0", 2687 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 2688 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 2689 | "dev": true 2690 | }, 2691 | "pako": { 2692 | "version": "1.0.6", 2693 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", 2694 | "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", 2695 | "dev": true 2696 | }, 2697 | "parallel-transform": { 2698 | "version": "1.1.0", 2699 | "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", 2700 | "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", 2701 | "dev": true, 2702 | "requires": { 2703 | "cyclist": "0.2.2", 2704 | "inherits": "2.0.3", 2705 | "readable-stream": "2.3.6" 2706 | } 2707 | }, 2708 | "parse-asn1": { 2709 | "version": "5.1.1", 2710 | "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", 2711 | "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", 2712 | "dev": true, 2713 | "requires": { 2714 | "asn1.js": "4.10.1", 2715 | "browserify-aes": "1.2.0", 2716 | "create-hash": "1.2.0", 2717 | "evp_bytestokey": "1.0.3", 2718 | "pbkdf2": "3.0.17" 2719 | } 2720 | }, 2721 | "pascalcase": { 2722 | "version": "0.1.1", 2723 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", 2724 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", 2725 | "dev": true 2726 | }, 2727 | "path-browserify": { 2728 | "version": "0.0.0", 2729 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", 2730 | "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", 2731 | "dev": true 2732 | }, 2733 | "path-dirname": { 2734 | "version": "1.0.2", 2735 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", 2736 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", 2737 | "dev": true 2738 | }, 2739 | "path-exists": { 2740 | "version": "3.0.0", 2741 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2742 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 2743 | "dev": true 2744 | }, 2745 | "path-is-absolute": { 2746 | "version": "1.0.1", 2747 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2748 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2749 | "dev": true 2750 | }, 2751 | "pbkdf2": { 2752 | "version": "3.0.17", 2753 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", 2754 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", 2755 | "dev": true, 2756 | "requires": { 2757 | "create-hash": "1.2.0", 2758 | "create-hmac": "1.1.7", 2759 | "ripemd160": "2.0.2", 2760 | "safe-buffer": "5.1.2", 2761 | "sha.js": "2.4.11" 2762 | } 2763 | }, 2764 | "performance-now": { 2765 | "version": "2.1.0", 2766 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 2767 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 2768 | }, 2769 | "pify": { 2770 | "version": "3.0.0", 2771 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 2772 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 2773 | "dev": true 2774 | }, 2775 | "pkg-dir": { 2776 | "version": "2.0.0", 2777 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", 2778 | "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", 2779 | "dev": true, 2780 | "requires": { 2781 | "find-up": "2.1.0" 2782 | } 2783 | }, 2784 | "posix-character-classes": { 2785 | "version": "0.1.1", 2786 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", 2787 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", 2788 | "dev": true 2789 | }, 2790 | "process": { 2791 | "version": "0.11.10", 2792 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 2793 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 2794 | "dev": true 2795 | }, 2796 | "process-nextick-args": { 2797 | "version": "2.0.0", 2798 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 2799 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 2800 | "dev": true 2801 | }, 2802 | "promise-inflight": { 2803 | "version": "1.0.1", 2804 | "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", 2805 | "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", 2806 | "dev": true 2807 | }, 2808 | "prr": { 2809 | "version": "1.0.1", 2810 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", 2811 | "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", 2812 | "dev": true 2813 | }, 2814 | "pseudomap": { 2815 | "version": "1.0.2", 2816 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 2817 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 2818 | "dev": true 2819 | }, 2820 | "psl": { 2821 | "version": "1.1.29", 2822 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", 2823 | "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" 2824 | }, 2825 | "public-encrypt": { 2826 | "version": "4.0.3", 2827 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 2828 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 2829 | "dev": true, 2830 | "requires": { 2831 | "bn.js": "4.11.8", 2832 | "browserify-rsa": "4.0.1", 2833 | "create-hash": "1.2.0", 2834 | "parse-asn1": "5.1.1", 2835 | "randombytes": "2.0.6", 2836 | "safe-buffer": "5.1.2" 2837 | } 2838 | }, 2839 | "pump": { 2840 | "version": "2.0.1", 2841 | "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", 2842 | "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", 2843 | "dev": true, 2844 | "requires": { 2845 | "end-of-stream": "1.4.1", 2846 | "once": "1.4.0" 2847 | } 2848 | }, 2849 | "pumpify": { 2850 | "version": "1.5.1", 2851 | "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", 2852 | "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", 2853 | "dev": true, 2854 | "requires": { 2855 | "duplexify": "3.6.0", 2856 | "inherits": "2.0.3", 2857 | "pump": "2.0.1" 2858 | } 2859 | }, 2860 | "punycode": { 2861 | "version": "2.1.1", 2862 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2863 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2864 | "dev": true 2865 | }, 2866 | "qs": { 2867 | "version": "6.5.2", 2868 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 2869 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 2870 | }, 2871 | "querystring": { 2872 | "version": "0.2.0", 2873 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 2874 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 2875 | "dev": true 2876 | }, 2877 | "querystring-es3": { 2878 | "version": "0.2.1", 2879 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 2880 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 2881 | "dev": true 2882 | }, 2883 | "randombytes": { 2884 | "version": "2.0.6", 2885 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", 2886 | "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", 2887 | "dev": true, 2888 | "requires": { 2889 | "safe-buffer": "5.1.2" 2890 | } 2891 | }, 2892 | "randomfill": { 2893 | "version": "1.0.4", 2894 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 2895 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 2896 | "dev": true, 2897 | "requires": { 2898 | "randombytes": "2.0.6", 2899 | "safe-buffer": "5.1.2" 2900 | } 2901 | }, 2902 | "readable-stream": { 2903 | "version": "2.3.6", 2904 | "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2905 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2906 | "dev": true, 2907 | "requires": { 2908 | "core-util-is": "1.0.2", 2909 | "inherits": "2.0.3", 2910 | "isarray": "1.0.0", 2911 | "process-nextick-args": "2.0.0", 2912 | "safe-buffer": "5.1.2", 2913 | "string_decoder": "1.1.1", 2914 | "util-deprecate": "1.0.2" 2915 | } 2916 | }, 2917 | "readdirp": { 2918 | "version": "2.2.1", 2919 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", 2920 | "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", 2921 | "dev": true, 2922 | "requires": { 2923 | "graceful-fs": "4.1.11", 2924 | "micromatch": "3.1.10", 2925 | "readable-stream": "2.3.6" 2926 | } 2927 | }, 2928 | "regex-not": { 2929 | "version": "1.0.2", 2930 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", 2931 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", 2932 | "dev": true, 2933 | "requires": { 2934 | "extend-shallow": "3.0.2", 2935 | "safe-regex": "1.1.0" 2936 | } 2937 | }, 2938 | "remove-trailing-separator": { 2939 | "version": "1.1.0", 2940 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 2941 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", 2942 | "dev": true 2943 | }, 2944 | "repeat-element": { 2945 | "version": "1.1.3", 2946 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", 2947 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", 2948 | "dev": true 2949 | }, 2950 | "repeat-string": { 2951 | "version": "1.6.1", 2952 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 2953 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 2954 | "dev": true 2955 | }, 2956 | "request": { 2957 | "version": "2.88.0", 2958 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 2959 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 2960 | "requires": { 2961 | "aws-sign2": "0.7.0", 2962 | "aws4": "1.8.0", 2963 | "caseless": "0.12.0", 2964 | "combined-stream": "1.0.7", 2965 | "extend": "3.0.2", 2966 | "forever-agent": "0.6.1", 2967 | "form-data": "2.3.2", 2968 | "har-validator": "5.1.0", 2969 | "http-signature": "1.2.0", 2970 | "is-typedarray": "1.0.0", 2971 | "isstream": "0.1.2", 2972 | "json-stringify-safe": "5.0.1", 2973 | "mime-types": "2.1.20", 2974 | "oauth-sign": "0.9.0", 2975 | "performance-now": "2.1.0", 2976 | "qs": "6.5.2", 2977 | "safe-buffer": "5.1.2", 2978 | "tough-cookie": "2.4.3", 2979 | "tunnel-agent": "0.6.0", 2980 | "uuid": "3.3.2" 2981 | } 2982 | }, 2983 | "resolve-url": { 2984 | "version": "0.2.1", 2985 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", 2986 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", 2987 | "dev": true 2988 | }, 2989 | "ret": { 2990 | "version": "0.1.15", 2991 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 2992 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", 2993 | "dev": true 2994 | }, 2995 | "rimraf": { 2996 | "version": "2.6.2", 2997 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 2998 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 2999 | "dev": true, 3000 | "requires": { 3001 | "glob": "7.1.3" 3002 | } 3003 | }, 3004 | "ripemd160": { 3005 | "version": "2.0.2", 3006 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 3007 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 3008 | "dev": true, 3009 | "requires": { 3010 | "hash-base": "3.0.4", 3011 | "inherits": "2.0.3" 3012 | } 3013 | }, 3014 | "run-queue": { 3015 | "version": "1.0.3", 3016 | "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", 3017 | "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", 3018 | "dev": true, 3019 | "requires": { 3020 | "aproba": "1.2.0" 3021 | } 3022 | }, 3023 | "safe-buffer": { 3024 | "version": "5.1.2", 3025 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 3026 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 3027 | }, 3028 | "safe-regex": { 3029 | "version": "1.1.0", 3030 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", 3031 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", 3032 | "dev": true, 3033 | "requires": { 3034 | "ret": "0.1.15" 3035 | } 3036 | }, 3037 | "safer-buffer": { 3038 | "version": "2.1.2", 3039 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3040 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 3041 | }, 3042 | "schema-utils": { 3043 | "version": "0.4.7", 3044 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", 3045 | "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", 3046 | "dev": true, 3047 | "requires": { 3048 | "ajv": "6.5.4", 3049 | "ajv-keywords": "3.2.0" 3050 | } 3051 | }, 3052 | "serialize-javascript": { 3053 | "version": "1.5.0", 3054 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", 3055 | "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", 3056 | "dev": true 3057 | }, 3058 | "set-value": { 3059 | "version": "2.0.0", 3060 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", 3061 | "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", 3062 | "dev": true, 3063 | "requires": { 3064 | "extend-shallow": "2.0.1", 3065 | "is-extendable": "0.1.1", 3066 | "is-plain-object": "2.0.4", 3067 | "split-string": "3.1.0" 3068 | }, 3069 | "dependencies": { 3070 | "extend-shallow": { 3071 | "version": "2.0.1", 3072 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 3073 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 3074 | "dev": true, 3075 | "requires": { 3076 | "is-extendable": "0.1.1" 3077 | } 3078 | } 3079 | } 3080 | }, 3081 | "setimmediate": { 3082 | "version": "1.0.5", 3083 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 3084 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", 3085 | "dev": true 3086 | }, 3087 | "sha.js": { 3088 | "version": "2.4.11", 3089 | "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 3090 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 3091 | "dev": true, 3092 | "requires": { 3093 | "inherits": "2.0.3", 3094 | "safe-buffer": "5.1.2" 3095 | } 3096 | }, 3097 | "snapdragon": { 3098 | "version": "0.8.2", 3099 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", 3100 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", 3101 | "dev": true, 3102 | "requires": { 3103 | "base": "0.11.2", 3104 | "debug": "2.6.9", 3105 | "define-property": "0.2.5", 3106 | "extend-shallow": "2.0.1", 3107 | "map-cache": "0.2.2", 3108 | "source-map": "0.5.7", 3109 | "source-map-resolve": "0.5.2", 3110 | "use": "3.1.1" 3111 | }, 3112 | "dependencies": { 3113 | "define-property": { 3114 | "version": "0.2.5", 3115 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 3116 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 3117 | "dev": true, 3118 | "requires": { 3119 | "is-descriptor": "0.1.6" 3120 | } 3121 | }, 3122 | "extend-shallow": { 3123 | "version": "2.0.1", 3124 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 3125 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 3126 | "dev": true, 3127 | "requires": { 3128 | "is-extendable": "0.1.1" 3129 | } 3130 | } 3131 | } 3132 | }, 3133 | "snapdragon-node": { 3134 | "version": "2.1.1", 3135 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", 3136 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", 3137 | "dev": true, 3138 | "requires": { 3139 | "define-property": "1.0.0", 3140 | "isobject": "3.0.1", 3141 | "snapdragon-util": "3.0.1" 3142 | }, 3143 | "dependencies": { 3144 | "define-property": { 3145 | "version": "1.0.0", 3146 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 3147 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 3148 | "dev": true, 3149 | "requires": { 3150 | "is-descriptor": "1.0.2" 3151 | } 3152 | }, 3153 | "is-accessor-descriptor": { 3154 | "version": "1.0.0", 3155 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 3156 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 3157 | "dev": true, 3158 | "requires": { 3159 | "kind-of": "6.0.2" 3160 | } 3161 | }, 3162 | "is-data-descriptor": { 3163 | "version": "1.0.0", 3164 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 3165 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 3166 | "dev": true, 3167 | "requires": { 3168 | "kind-of": "6.0.2" 3169 | } 3170 | }, 3171 | "is-descriptor": { 3172 | "version": "1.0.2", 3173 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 3174 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 3175 | "dev": true, 3176 | "requires": { 3177 | "is-accessor-descriptor": "1.0.0", 3178 | "is-data-descriptor": "1.0.0", 3179 | "kind-of": "6.0.2" 3180 | } 3181 | } 3182 | } 3183 | }, 3184 | "snapdragon-util": { 3185 | "version": "3.0.1", 3186 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", 3187 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", 3188 | "dev": true, 3189 | "requires": { 3190 | "kind-of": "3.2.2" 3191 | }, 3192 | "dependencies": { 3193 | "kind-of": { 3194 | "version": "3.2.2", 3195 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 3196 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 3197 | "dev": true, 3198 | "requires": { 3199 | "is-buffer": "1.1.6" 3200 | } 3201 | } 3202 | } 3203 | }, 3204 | "source-list-map": { 3205 | "version": "2.0.0", 3206 | "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", 3207 | "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", 3208 | "dev": true 3209 | }, 3210 | "source-map": { 3211 | "version": "0.5.7", 3212 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 3213 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 3214 | "dev": true 3215 | }, 3216 | "source-map-resolve": { 3217 | "version": "0.5.2", 3218 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", 3219 | "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", 3220 | "dev": true, 3221 | "requires": { 3222 | "atob": "2.1.2", 3223 | "decode-uri-component": "0.2.0", 3224 | "resolve-url": "0.2.1", 3225 | "source-map-url": "0.4.0", 3226 | "urix": "0.1.0" 3227 | } 3228 | }, 3229 | "source-map-url": { 3230 | "version": "0.4.0", 3231 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", 3232 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", 3233 | "dev": true 3234 | }, 3235 | "split-string": { 3236 | "version": "3.1.0", 3237 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", 3238 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", 3239 | "dev": true, 3240 | "requires": { 3241 | "extend-shallow": "3.0.2" 3242 | } 3243 | }, 3244 | "sshpk": { 3245 | "version": "1.14.2", 3246 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", 3247 | "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", 3248 | "requires": { 3249 | "asn1": "0.2.4", 3250 | "assert-plus": "1.0.0", 3251 | "bcrypt-pbkdf": "1.0.2", 3252 | "dashdash": "1.14.1", 3253 | "ecc-jsbn": "0.1.2", 3254 | "getpass": "0.1.7", 3255 | "jsbn": "0.1.1", 3256 | "safer-buffer": "2.1.2", 3257 | "tweetnacl": "0.14.5" 3258 | } 3259 | }, 3260 | "ssri": { 3261 | "version": "5.3.0", 3262 | "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", 3263 | "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", 3264 | "dev": true, 3265 | "requires": { 3266 | "safe-buffer": "5.1.2" 3267 | } 3268 | }, 3269 | "static-extend": { 3270 | "version": "0.1.2", 3271 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", 3272 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", 3273 | "dev": true, 3274 | "requires": { 3275 | "define-property": "0.2.5", 3276 | "object-copy": "0.1.0" 3277 | }, 3278 | "dependencies": { 3279 | "define-property": { 3280 | "version": "0.2.5", 3281 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 3282 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 3283 | "dev": true, 3284 | "requires": { 3285 | "is-descriptor": "0.1.6" 3286 | } 3287 | } 3288 | } 3289 | }, 3290 | "stream-browserify": { 3291 | "version": "2.0.1", 3292 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", 3293 | "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", 3294 | "dev": true, 3295 | "requires": { 3296 | "inherits": "2.0.3", 3297 | "readable-stream": "2.3.6" 3298 | } 3299 | }, 3300 | "stream-each": { 3301 | "version": "1.2.3", 3302 | "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", 3303 | "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", 3304 | "dev": true, 3305 | "requires": { 3306 | "end-of-stream": "1.4.1", 3307 | "stream-shift": "1.0.0" 3308 | } 3309 | }, 3310 | "stream-http": { 3311 | "version": "2.8.3", 3312 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", 3313 | "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", 3314 | "dev": true, 3315 | "requires": { 3316 | "builtin-status-codes": "3.0.0", 3317 | "inherits": "2.0.3", 3318 | "readable-stream": "2.3.6", 3319 | "to-arraybuffer": "1.0.1", 3320 | "xtend": "4.0.1" 3321 | } 3322 | }, 3323 | "stream-shift": { 3324 | "version": "1.0.0", 3325 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", 3326 | "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", 3327 | "dev": true 3328 | }, 3329 | "string_decoder": { 3330 | "version": "1.1.1", 3331 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 3332 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 3333 | "dev": true, 3334 | "requires": { 3335 | "safe-buffer": "5.1.2" 3336 | } 3337 | }, 3338 | "tapable": { 3339 | "version": "1.1.0", 3340 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz", 3341 | "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==", 3342 | "dev": true 3343 | }, 3344 | "through2": { 3345 | "version": "2.0.3", 3346 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", 3347 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", 3348 | "dev": true, 3349 | "requires": { 3350 | "readable-stream": "2.3.6", 3351 | "xtend": "4.0.1" 3352 | } 3353 | }, 3354 | "timers-browserify": { 3355 | "version": "2.0.10", 3356 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", 3357 | "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", 3358 | "dev": true, 3359 | "requires": { 3360 | "setimmediate": "1.0.5" 3361 | } 3362 | }, 3363 | "to-arraybuffer": { 3364 | "version": "1.0.1", 3365 | "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", 3366 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", 3367 | "dev": true 3368 | }, 3369 | "to-object-path": { 3370 | "version": "0.3.0", 3371 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 3372 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 3373 | "dev": true, 3374 | "requires": { 3375 | "kind-of": "3.2.2" 3376 | }, 3377 | "dependencies": { 3378 | "kind-of": { 3379 | "version": "3.2.2", 3380 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 3381 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 3382 | "dev": true, 3383 | "requires": { 3384 | "is-buffer": "1.1.6" 3385 | } 3386 | } 3387 | } 3388 | }, 3389 | "to-regex": { 3390 | "version": "3.0.2", 3391 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", 3392 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", 3393 | "dev": true, 3394 | "requires": { 3395 | "define-property": "2.0.2", 3396 | "extend-shallow": "3.0.2", 3397 | "regex-not": "1.0.2", 3398 | "safe-regex": "1.1.0" 3399 | } 3400 | }, 3401 | "to-regex-range": { 3402 | "version": "2.1.1", 3403 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", 3404 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", 3405 | "dev": true, 3406 | "requires": { 3407 | "is-number": "3.0.0", 3408 | "repeat-string": "1.6.1" 3409 | } 3410 | }, 3411 | "tough-cookie": { 3412 | "version": "2.4.3", 3413 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 3414 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 3415 | "requires": { 3416 | "psl": "1.1.29", 3417 | "punycode": "1.4.1" 3418 | }, 3419 | "dependencies": { 3420 | "punycode": { 3421 | "version": "1.4.1", 3422 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 3423 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 3424 | } 3425 | } 3426 | }, 3427 | "tslib": { 3428 | "version": "1.9.3", 3429 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", 3430 | "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", 3431 | "dev": true 3432 | }, 3433 | "tty-browserify": { 3434 | "version": "0.0.0", 3435 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", 3436 | "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", 3437 | "dev": true 3438 | }, 3439 | "tunnel-agent": { 3440 | "version": "0.6.0", 3441 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 3442 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 3443 | "requires": { 3444 | "safe-buffer": "5.1.2" 3445 | } 3446 | }, 3447 | "tweetnacl": { 3448 | "version": "0.14.5", 3449 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 3450 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 3451 | "optional": true 3452 | }, 3453 | "typedarray": { 3454 | "version": "0.0.6", 3455 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 3456 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 3457 | "dev": true 3458 | }, 3459 | "uglify-es": { 3460 | "version": "3.3.9", 3461 | "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", 3462 | "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", 3463 | "dev": true, 3464 | "requires": { 3465 | "commander": "2.13.0", 3466 | "source-map": "0.6.1" 3467 | }, 3468 | "dependencies": { 3469 | "source-map": { 3470 | "version": "0.6.1", 3471 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3472 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3473 | "dev": true 3474 | } 3475 | } 3476 | }, 3477 | "uglifyjs-webpack-plugin": { 3478 | "version": "1.3.0", 3479 | "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", 3480 | "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", 3481 | "dev": true, 3482 | "requires": { 3483 | "cacache": "10.0.4", 3484 | "find-cache-dir": "1.0.0", 3485 | "schema-utils": "0.4.7", 3486 | "serialize-javascript": "1.5.0", 3487 | "source-map": "0.6.1", 3488 | "uglify-es": "3.3.9", 3489 | "webpack-sources": "1.3.0", 3490 | "worker-farm": "1.6.0" 3491 | }, 3492 | "dependencies": { 3493 | "source-map": { 3494 | "version": "0.6.1", 3495 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3496 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3497 | "dev": true 3498 | } 3499 | } 3500 | }, 3501 | "union-value": { 3502 | "version": "1.0.0", 3503 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", 3504 | "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", 3505 | "dev": true, 3506 | "requires": { 3507 | "arr-union": "3.1.0", 3508 | "get-value": "2.0.6", 3509 | "is-extendable": "0.1.1", 3510 | "set-value": "0.4.3" 3511 | }, 3512 | "dependencies": { 3513 | "extend-shallow": { 3514 | "version": "2.0.1", 3515 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 3516 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 3517 | "dev": true, 3518 | "requires": { 3519 | "is-extendable": "0.1.1" 3520 | } 3521 | }, 3522 | "set-value": { 3523 | "version": "0.4.3", 3524 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", 3525 | "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", 3526 | "dev": true, 3527 | "requires": { 3528 | "extend-shallow": "2.0.1", 3529 | "is-extendable": "0.1.1", 3530 | "is-plain-object": "2.0.4", 3531 | "to-object-path": "0.3.0" 3532 | } 3533 | } 3534 | } 3535 | }, 3536 | "unique-filename": { 3537 | "version": "1.1.1", 3538 | "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", 3539 | "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", 3540 | "dev": true, 3541 | "requires": { 3542 | "unique-slug": "2.0.1" 3543 | } 3544 | }, 3545 | "unique-slug": { 3546 | "version": "2.0.1", 3547 | "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", 3548 | "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", 3549 | "dev": true, 3550 | "requires": { 3551 | "imurmurhash": "0.1.4" 3552 | } 3553 | }, 3554 | "unset-value": { 3555 | "version": "1.0.0", 3556 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", 3557 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", 3558 | "dev": true, 3559 | "requires": { 3560 | "has-value": "0.3.1", 3561 | "isobject": "3.0.1" 3562 | }, 3563 | "dependencies": { 3564 | "has-value": { 3565 | "version": "0.3.1", 3566 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", 3567 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", 3568 | "dev": true, 3569 | "requires": { 3570 | "get-value": "2.0.6", 3571 | "has-values": "0.1.4", 3572 | "isobject": "2.1.0" 3573 | }, 3574 | "dependencies": { 3575 | "isobject": { 3576 | "version": "2.1.0", 3577 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 3578 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 3579 | "dev": true, 3580 | "requires": { 3581 | "isarray": "1.0.0" 3582 | } 3583 | } 3584 | } 3585 | }, 3586 | "has-values": { 3587 | "version": "0.1.4", 3588 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", 3589 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", 3590 | "dev": true 3591 | } 3592 | } 3593 | }, 3594 | "upath": { 3595 | "version": "1.1.0", 3596 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", 3597 | "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", 3598 | "dev": true 3599 | }, 3600 | "uri-js": { 3601 | "version": "4.2.2", 3602 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 3603 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 3604 | "dev": true, 3605 | "requires": { 3606 | "punycode": "2.1.1" 3607 | } 3608 | }, 3609 | "urix": { 3610 | "version": "0.1.0", 3611 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", 3612 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", 3613 | "dev": true 3614 | }, 3615 | "url": { 3616 | "version": "0.11.0", 3617 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 3618 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 3619 | "dev": true, 3620 | "requires": { 3621 | "punycode": "1.3.2", 3622 | "querystring": "0.2.0" 3623 | }, 3624 | "dependencies": { 3625 | "punycode": { 3626 | "version": "1.3.2", 3627 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 3628 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 3629 | "dev": true 3630 | } 3631 | } 3632 | }, 3633 | "use": { 3634 | "version": "3.1.1", 3635 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", 3636 | "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", 3637 | "dev": true 3638 | }, 3639 | "util": { 3640 | "version": "0.10.4", 3641 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", 3642 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", 3643 | "dev": true, 3644 | "requires": { 3645 | "inherits": "2.0.3" 3646 | } 3647 | }, 3648 | "util-deprecate": { 3649 | "version": "1.0.2", 3650 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3651 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3652 | "dev": true 3653 | }, 3654 | "uuid": { 3655 | "version": "3.3.2", 3656 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 3657 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 3658 | }, 3659 | "verror": { 3660 | "version": "1.10.0", 3661 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 3662 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 3663 | "requires": { 3664 | "assert-plus": "1.0.0", 3665 | "core-util-is": "1.0.2", 3666 | "extsprintf": "1.3.0" 3667 | } 3668 | }, 3669 | "vm-browserify": { 3670 | "version": "0.0.4", 3671 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", 3672 | "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", 3673 | "dev": true, 3674 | "requires": { 3675 | "indexof": "0.0.1" 3676 | } 3677 | }, 3678 | "watchpack": { 3679 | "version": "1.6.0", 3680 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", 3681 | "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", 3682 | "dev": true, 3683 | "requires": { 3684 | "chokidar": "2.0.4", 3685 | "graceful-fs": "4.1.11", 3686 | "neo-async": "2.5.2" 3687 | } 3688 | }, 3689 | "webpack": { 3690 | "version": "4.20.2", 3691 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.20.2.tgz", 3692 | "integrity": "sha512-75WFUMblcWYcocjSLlXCb71QuGyH7egdBZu50FtBGl2Nso8CK3Ej+J7bTZz2FPFq5l6fzCisD9modB7t30ikuA==", 3693 | "dev": true, 3694 | "requires": { 3695 | "@webassemblyjs/ast": "1.7.8", 3696 | "@webassemblyjs/helper-module-context": "1.7.8", 3697 | "@webassemblyjs/wasm-edit": "1.7.8", 3698 | "@webassemblyjs/wasm-parser": "1.7.8", 3699 | "acorn": "5.7.3", 3700 | "acorn-dynamic-import": "3.0.0", 3701 | "ajv": "6.5.4", 3702 | "ajv-keywords": "3.2.0", 3703 | "chrome-trace-event": "1.0.0", 3704 | "enhanced-resolve": "4.1.0", 3705 | "eslint-scope": "4.0.0", 3706 | "json-parse-better-errors": "1.0.2", 3707 | "loader-runner": "2.3.1", 3708 | "loader-utils": "1.1.0", 3709 | "memory-fs": "0.4.1", 3710 | "micromatch": "3.1.10", 3711 | "mkdirp": "0.5.1", 3712 | "neo-async": "2.5.2", 3713 | "node-libs-browser": "2.1.0", 3714 | "schema-utils": "0.4.7", 3715 | "tapable": "1.1.0", 3716 | "uglifyjs-webpack-plugin": "1.3.0", 3717 | "watchpack": "1.6.0", 3718 | "webpack-sources": "1.3.0" 3719 | } 3720 | }, 3721 | "webpack-sources": { 3722 | "version": "1.3.0", 3723 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", 3724 | "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", 3725 | "dev": true, 3726 | "requires": { 3727 | "source-list-map": "2.0.0", 3728 | "source-map": "0.6.1" 3729 | }, 3730 | "dependencies": { 3731 | "source-map": { 3732 | "version": "0.6.1", 3733 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3734 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3735 | "dev": true 3736 | } 3737 | } 3738 | }, 3739 | "worker-farm": { 3740 | "version": "1.6.0", 3741 | "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", 3742 | "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", 3743 | "dev": true, 3744 | "requires": { 3745 | "errno": "0.1.7" 3746 | } 3747 | }, 3748 | "wrappy": { 3749 | "version": "1.0.2", 3750 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3751 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3752 | "dev": true 3753 | }, 3754 | "xtend": { 3755 | "version": "4.0.1", 3756 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 3757 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 3758 | "dev": true 3759 | }, 3760 | "y18n": { 3761 | "version": "4.0.0", 3762 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", 3763 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", 3764 | "dev": true 3765 | }, 3766 | "yallist": { 3767 | "version": "2.1.2", 3768 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 3769 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 3770 | "dev": true 3771 | } 3772 | } 3773 | } 3774 | -------------------------------------------------------------------------------- /example/node/lambda_plus_edge/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lamda_plus_edge-lambda", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "packer.config.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "webpack": "^4.20.2" 13 | }, 14 | "dependencies": { 15 | "lodash": "^4.17.11", 16 | "request": "^2.88.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /example/node/lambda_plus_edge/packer.config.js: -------------------------------------------------------------------------------- 1 | const COMMON_CONFIG = { 2 | "files": ["*.js", "*.json"], 3 | "ignore": ["node_modules/*"], 4 | "environment": "node", 5 | "mapDirectories": { 6 | "src": "./" 7 | } 8 | } 9 | 10 | module.exports = [{ 11 | "dependencyFile": "package.json", 12 | "zipName": "./dist/lambda.zip" 13 | }, { 14 | "dependencyFile": "edge.package.json", 15 | "zipName": "./dist/edge.zip" 16 | }].map((extend) => Object.assign({}, COMMON_CONFIG, extend)) 17 | 18 | -------------------------------------------------------------------------------- /example/node/lambda_plus_edge/src/dependency-one.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nogizhopaboroda/lapa/4f0db599ac344abe51a9d9d615284ad3925cb658/example/node/lambda_plus_edge/src/dependency-one.js -------------------------------------------------------------------------------- /example/node/lambda_plus_edge/src/dependency-two.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nogizhopaboroda/lapa/4f0db599ac344abe51a9d9d615284ad3925cb658/example/node/lambda_plus_edge/src/dependency-two.js -------------------------------------------------------------------------------- /example/node/lambda_plus_edge/src/edge.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nogizhopaboroda/lapa/4f0db599ac344abe51a9d9d615284ad3925cb658/example/node/lambda_plus_edge/src/edge.js -------------------------------------------------------------------------------- /example/node/lambda_plus_edge/src/lambda.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nogizhopaboroda/lapa/4f0db599ac344abe51a9d9d615284ad3925cb658/example/node/lambda_plus_edge/src/lambda.js -------------------------------------------------------------------------------- /example/node/simple/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nogizhopaboroda/lapa/4f0db599ac344abe51a9d9d615284ad3925cb658/example/node/simple/index.js -------------------------------------------------------------------------------- /example/node/simple/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lamda_plus_edge-lambda", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "packer.config.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "webpack": "^4.20.2" 13 | }, 14 | "dependencies": { 15 | "lodash": "^4.17.11", 16 | "request": "^2.88.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /example/node/simple/packer.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | "*" 4 | ], 5 | "environment": "node", 6 | "zipName": "lambda.zip", 7 | "ignore": [ 8 | "node_modules/*" 9 | ], 10 | "dependencies": ["smallest"] 11 | } 12 | -------------------------------------------------------------------------------- /example/python/simple/index.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | def handler_name(event, context): 4 | return { 5 | "ok": requests.__name__ 6 | } 7 | -------------------------------------------------------------------------------- /example/python/simple/packer.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": ["*.py", "setup.cfg"], 3 | "ignore": "secrets.py", 4 | "dependencies": ["requests"], 5 | "zipName": "./dist/example_lambda.zip", 6 | "environment": "python" 7 | } 8 | -------------------------------------------------------------------------------- /example/python/simple/second.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nogizhopaboroda/lapa/4f0db599ac344abe51a9d9d615284ad3925cb658/example/python/simple/second.py -------------------------------------------------------------------------------- /example/python/simple/secrets.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nogizhopaboroda/lapa/4f0db599ac344abe51a9d9d615284ad3925cb658/example/python/simple/secrets.py -------------------------------------------------------------------------------- /example/python/simple/setup.cfg: -------------------------------------------------------------------------------- 1 | [install] 2 | prefix= 3 | -------------------------------------------------------------------------------- /example/python/simple/src/module_one.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nogizhopaboroda/lapa/4f0db599ac344abe51a9d9d615284ad3925cb658/example/python/simple/src/module_one.py -------------------------------------------------------------------------------- /example/python/with_requirements_txt/index.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | def handler_name(event, context): 4 | return { 5 | "ok": requests.__name__ 6 | } 7 | -------------------------------------------------------------------------------- /example/python/with_requirements_txt/packer.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | "*" 4 | ], 5 | "environment": "python", 6 | "zipName": "lambda.zip", 7 | "dependencyFile": "requirements.txt", 8 | "ignore": [ 9 | "lib/*" 10 | ], 11 | "dependencies": [] 12 | } -------------------------------------------------------------------------------- /example/python/with_requirements_txt/requirements.txt: -------------------------------------------------------------------------------- 1 | requests==2.20.0 2 | -------------------------------------------------------------------------------- /example/python/with_requirements_txt/setup.cfg: -------------------------------------------------------------------------------- 1 | [install] 2 | prefix= 3 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lapa", 3 | "version": "1.0.0", 4 | "description": "universal lambda packager", 5 | "bin": { 6 | "lapa": "packer.py" 7 | }, 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/nogizhopaboroda/lapa.git" 11 | }, 12 | "author": "Alexander Zhukov", 13 | "license": "MIT", 14 | "bugs": { 15 | "url": "https://github.com/nogizhopaboroda/lapa/issues" 16 | }, 17 | "homepage": "https://github.com/nogizhopaboroda/lapa#readme" 18 | } 19 | -------------------------------------------------------------------------------- /packer.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import fnmatch 4 | import os 5 | import json 6 | import tempfile 7 | import subprocess 8 | import shutil 9 | import re 10 | import logging 11 | import argparse 12 | import pdb 13 | 14 | 15 | # TODO: handle upper level files in config, e.g. { searchDirectories: ['../../lib'] } 16 | 17 | logger = logging.getLogger('packer') 18 | 19 | 20 | try: 21 | input = raw_input 22 | except NameError: 23 | pass 24 | 25 | 26 | cwd = os.getcwd() 27 | 28 | 29 | # helpers 30 | def cast_list(val): 31 | return [val] if type(val) is not list else val 32 | 33 | def exec_command(command, cwd = None, sync = True): 34 | logger.debug('Executing command: {}'.format(command)) 35 | p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=cwd) 36 | if sync is True: 37 | return p.communicate() 38 | 39 | stdout = '' 40 | while(True): 41 | retcode = p.poll() 42 | line = p.stdout.readline().decode('utf-8') 43 | stdout += line 44 | logger.info(line) 45 | if(retcode is not None): 46 | break 47 | return (stdout, None) 48 | 49 | def bold(string): 50 | return '\033[1m{}\033[0m'.format(string) 51 | 52 | 53 | def load_json(file_name): 54 | with open(file_name) as json_file: 55 | return json.load(json_file) 56 | 57 | def load_js(file_name): 58 | res = exec_command('node -p "JSON.stringify(require(\'{}\'))"'.format(file_name)) 59 | return json.loads(res[0]) 60 | 61 | 62 | def find_files(file_patterns, ignore_patterns, cwd = os.getcwd()): 63 | files = [] 64 | this_dir = os.path.join(cwd, '') 65 | for root, dirnames, filenames in os.walk(this_dir): 66 | dirname = os.path.join(root, '').replace(this_dir, '') 67 | for filename in filenames: 68 | files.append(os.path.join(dirname, filename)) 69 | 70 | files_to_add = [] 71 | for pattern in file_patterns: 72 | files_to_add.extend(fnmatch.filter(files, pattern)) 73 | 74 | files_to_ignore = [] 75 | for pattern in ignore_patterns: 76 | files_to_ignore.extend(fnmatch.filter(files, pattern)) 77 | 78 | return list(set(files_to_add) - set(files_to_ignore)) 79 | 80 | def ensure_directories(file_name): 81 | if not os.path.exists(os.path.dirname(file_name)): 82 | os.makedirs(os.path.dirname(file_name)) 83 | return file_name 84 | 85 | 86 | def copy_files(files, target, cwd = os.getcwd(), map_dirs = {}): 87 | for file_name in cast_list(files): 88 | file_name_new = file_name 89 | for source_dir, target_dir in map_dirs.items(): 90 | source_dir_regex = r'^{}'.format(os.path.join(source_dir, '')) 91 | if re.match(source_dir_regex, file_name): 92 | file_name_new = os.path.normpath(re.sub(source_dir_regex, os.path.join(target_dir, ''), file_name)) 93 | dest = os.path.join(target, file_name_new) 94 | ensure_directories(dest) 95 | source = os.path.join(cwd, file_name) 96 | logger.debug('{} -> {}'.format(source, dest)) 97 | shutil.copy(source, dest) 98 | 99 | 100 | 101 | # load/process config 102 | config_paths = [ 103 | { 104 | 'fileName': 'packer.config.json', 105 | 'load': load_json 106 | }, 107 | { 108 | 'fileName': 'packer.config.js', 109 | 'load': load_js 110 | }, 111 | ] 112 | 113 | DEFAULT_CONFIG = { 114 | 'files': ['*'], 115 | 'ignore': [], 116 | 'dependencies': [], 117 | 'zipName': 'lambda.zip' 118 | } 119 | 120 | def load_config(cwd=cwd): 121 | for item in config_paths: 122 | file_name = item['fileName'] 123 | file_path = os.path.join(cwd, file_name) 124 | if os.path.isfile(file_path): 125 | logger.info('Using config: {}'.format(file_path)) 126 | return item['load'](file_path) 127 | 128 | logger.info('Could not find packer config. Using default') 129 | return {} 130 | 131 | def enhance_config(config): 132 | configs = cast_list(config) 133 | enhanced_configs = [] 134 | 135 | for item in configs: 136 | enhanced_config = {} 137 | enhanced_config.update(DEFAULT_CONFIG) 138 | enhanced_config.update(item) 139 | 140 | enhanced_config.update({ 141 | 'files': cast_list(enhanced_config['files']), 142 | 'ignore': cast_list(enhanced_config['ignore']), 143 | 'dependencies': cast_list(enhanced_config['dependencies']), 144 | 'tempDir': tempfile.mkdtemp() if 'tempDir' not in enhanced_config else enhanced_config['tempDir'] 145 | }) 146 | 147 | enhanced_configs.append(enhanced_config) 148 | 149 | return enhanced_configs 150 | 151 | 152 | 153 | 154 | 155 | # install stuff 156 | 157 | environment_configs = { 158 | 'python': { 159 | 'mostCommonExtensions': ['py'], 160 | 'defaultDependencyFile': 'requirements.txt', 161 | 'defaultFiles': ['*.py'], 162 | 'defaultIgnore': ['lib/*'], 163 | 'installCommands': { 164 | 'installDependencies': 'pip install --upgrade {dependencies} -t ./', 165 | 'installDependencyFile': [ 166 | 'cp {dependencyFile} requirements.txt', 167 | 'pip install -r requirements.txt -t ./' 168 | ], 169 | } 170 | }, 171 | 'node': { 172 | 'mostCommonExtensions': ['js'], 173 | 'defaultDependencyFile': 'package.json', 174 | 'defaultFiles': ['*.js', '*.json'], 175 | 'defaultIgnore': ['node_modules/*'], 176 | 'installCommands': { 177 | 'installDependencies': 'npm install {dependencies}', 178 | 'installDependencyFile': [ 179 | 'cp {dependencyFile} package.json', 180 | 'npm install --production' 181 | ], 182 | } 183 | }, 184 | } 185 | 186 | def install_dependencies(config): 187 | environment = config.get('environment', {}) 188 | environment_config = environment if type(environment) is dict else environment_configs[environment]['installCommands'] 189 | commands = [] 190 | if 'dependencyFile' in config: 191 | commands = cast_list(environment_config['installDependencyFile']) 192 | elif len(config['dependencies']) > 0: 193 | commands = cast_list(environment_config['installDependencies']) 194 | 195 | for command in commands: 196 | values = { 197 | 'dependencies': ' '.join(config['dependencies']), 198 | 'dependencyFile': config.get('dependencyFile', '') 199 | } 200 | formatted_command = command.format(**values) 201 | res = exec_command(formatted_command, cwd = config['tempDir'], sync = False) 202 | 203 | 204 | def archive_directory(path, output_file): 205 | shutil.make_archive( 206 | output_file.replace('.zip', ''), 'zip', root_dir=path, base_dir='.' 207 | ) 208 | 209 | 210 | # build flow 211 | def process_config(config): 212 | ignore_masks = config['ignore'] + list(map(lambda x: x['fileName'], config_paths)) + [config['zipName']] 213 | files = find_files(config['files'], ignore_masks) 214 | logger.info('Found {} files to copy'.format(len(files))) 215 | logger.info('Copying files to temp dir: {}'.format(config['tempDir'])) 216 | copy_files(files, config['tempDir'], map_dirs = config.get('mapDirectories', {})) 217 | logger.info('Installing dependencies:'.format(config['tempDir'])) 218 | install_dependencies(config) 219 | archive_directory(config['tempDir'], config['zipName']) 220 | logger.info('Built output archive to: {}'.format(config['zipName'])) 221 | 222 | 223 | def better_input(question, default_value = None): 224 | prepared_default = '({})'.format(bold(default_value)) if default_value is not None else '' 225 | val = input('{}: {} '.format(question, prepared_default)) 226 | if val == '' and default_value != '': 227 | return default_value 228 | return val 229 | 230 | 231 | # programm 232 | if __name__ == '__main__': 233 | 234 | parser=argparse.ArgumentParser() 235 | 236 | parser.add_argument('--init', action="store_true", help='Interactively create a packer config file') 237 | parser.add_argument('-V', '--verbose', action="store_true", help='Increase output verbosity') 238 | 239 | args = parser.parse_args() 240 | 241 | if args.init is True: 242 | print('This utility will create a packeger configuration file') 243 | 244 | available_environments = environment_configs.keys() 245 | 246 | extensions = [x.split('.')[-1] for x in find_files(['*.*'], [])] 247 | most_common_extension = max(set(extensions), key=extensions.count) if extensions else None 248 | environment_prediction = None 249 | for environment_name, config in environment_configs.items(): 250 | if most_common_extension in config['mostCommonExtensions']: 251 | environment_prediction = environment_name 252 | break 253 | while True: 254 | environment = better_input( 255 | 'environment [{}]'.format(' / '.join(available_environments)), 256 | environment_prediction 257 | ) 258 | if environment in available_environments: 259 | break 260 | print('please select one of the available environments') 261 | 262 | dependencies_file_name = environment_configs[environment]['defaultDependencyFile'] 263 | dependencies_file_path = os.path.join(cwd, dependencies_file_name) 264 | use_default_dependencies_file = os.path.isfile(dependencies_file_path) and better_input( 265 | 'use {} as dependencies file ?'.format(bold(dependencies_file_name)), 266 | 'yes' 267 | ) is 'yes' 268 | 269 | zip_name = better_input('zip name', DEFAULT_CONFIG['zipName']) 270 | 271 | config = DEFAULT_CONFIG.copy() 272 | config.update(DEFAULT_CONFIG) 273 | config.update({ 274 | 'environment': environment, 275 | 'zipName': zip_name, 276 | 'ignore': environment_configs[environment]['defaultIgnore'], 277 | }) 278 | 279 | if use_default_dependencies_file is True: 280 | config.update({ 281 | 'dependencyFile': dependencies_file_name, 282 | }) 283 | 284 | file_name = os.path.join(cwd, 'packer.config.json') 285 | with open(file_name, 'w') as f: 286 | f.write(json.dumps(config, indent = 2)) 287 | print('Saved config to {}'.format(file_name)) 288 | 289 | exit() 290 | 291 | verbose = args.verbose 292 | 293 | logger = logging.getLogger() 294 | handler = logging.StreamHandler() 295 | handler.setFormatter(logging.Formatter('%(message)s\n')) 296 | logger.addHandler(handler) 297 | logger.setLevel(logging.DEBUG if verbose is True else logging.INFO) 298 | 299 | logger.debug('searching for packer config in {}'.format(cwd)) 300 | user_config = load_config(cwd) 301 | logger.debug('packer config:\n{}'.format(json.dumps(user_config, indent = 4))) 302 | 303 | configs = enhance_config(user_config) 304 | 305 | for index, config in enumerate(configs): 306 | logger.info('processing config item #{}'.format(index + 1)) 307 | process_config(config) 308 | 309 | -------------------------------------------------------------------------------- /packer.test.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | import os 3 | 4 | from unittest.mock import patch, call 5 | 6 | from packer import DEFAULT_CONFIG, load_config, enhance_config, copy_files, exec_command, install_dependencies 7 | import packer 8 | 9 | cwd = os.getcwd() 10 | 11 | 12 | # handle config 13 | 14 | class LoadConfig(unittest.TestCase): 15 | def test_example_1(self): 16 | config = load_config(os.path.join(cwd, 'example/python/simple')) 17 | self.assertNotEqual(config, {}) 18 | 19 | def test_example_2(self): 20 | config = load_config(os.path.join(cwd, 'example/node/lambda_plus_edge')) 21 | self.assertNotEqual(config, {}) 22 | self.assertEqual(len(config), 2) 23 | 24 | class EnhanceConfig(unittest.TestCase): 25 | def test_casts_list_of_configs(self): 26 | config = enhance_config({}) 27 | self.assertEqual(type(config), list) 28 | 29 | def test_default_values(self): 30 | [config] = enhance_config({ 31 | 'tempDir': 'bar' 32 | }) 33 | for prop, value in DEFAULT_CONFIG.items(): 34 | self.assertEqual(config[prop], DEFAULT_CONFIG[prop]) 35 | self.assertEqual(config['tempDir'], 'bar') 36 | 37 | def test_casts_list_of_needed_properties(self): 38 | [config] = enhance_config({ 39 | 'files': '*', 40 | 'ignore': '*', 41 | 'dependencies': 'all', 42 | }) 43 | self.assertEqual(config['files'], ['*']) 44 | self.assertEqual(config['ignore'], ['*']) 45 | self.assertEqual(config['dependencies'], ['all']) 46 | 47 | 48 | # copy files 49 | @patch('packer.ensure_directories') 50 | @patch('shutil.copy') 51 | class CopyFiles(unittest.TestCase): 52 | 53 | def test_case_1(self, copy_patch, ensure_directories_patch): 54 | copy_patch.return_value = 'ok' 55 | ensure_directories_patch.return_value = 'ok' 56 | copy_files(['foo.py'], '/bar', cwd = '', map_dirs = {}) 57 | copy_patch.assert_called_with('foo.py', '/bar/foo.py') 58 | 59 | def test_case_2(self, copy_patch, ensure_directories_patch): 60 | copy_patch.return_value = 'ok' 61 | ensure_directories_patch.return_value = 'ok' 62 | copy_files( 63 | ['foo.py', 'bar.py', 'src/bla.py', 'src2/quux', 'src3/booz.py'], '/bar', 64 | cwd = '/mock_cwd', map_dirs = { "src": "./", "src2": "", "src3": "src_remapped" } 65 | ) 66 | copy_patch.assert_has_calls([ 67 | call('/mock_cwd/foo.py', '/bar/foo.py'), 68 | call('/mock_cwd/bar.py', '/bar/bar.py'), 69 | call('/mock_cwd/src/bla.py', '/bar/bla.py'), 70 | call('/mock_cwd/src2/quux', '/bar/quux'), 71 | call('/mock_cwd/src3/booz.py', '/bar/src_remapped/booz.py'), 72 | ]) 73 | 74 | 75 | # environments 76 | @patch('packer.exec_command') 77 | class InstallDependencies(unittest.TestCase): 78 | 79 | def test_case_1(self, test_patch): 80 | test_patch.return_value = 'ok' 81 | ret = install_dependencies({"environment": "node", "dependencies": ["foo", "baz"], "tempDir": "/bar"}) 82 | test_patch.assert_called_with('npm install foo baz', cwd = '/bar', sync = False) 83 | 84 | 85 | if __name__ == '__main__': 86 | unittest.main() 87 | --------------------------------------------------------------------------------