├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── bin └── create-cloudflare-worker ├── package-lock.json ├── package.json └── template ├── .babelrc ├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── package-lock.json ├── package.json ├── src ├── __tests__ │ └── worker.integration_spec.js └── index.js └── webpack.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | 63 | /dist 64 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. 4 | 5 | 6 | ## [1.2.1](https://github.com/gja/create-cloudflare-worker/compare/v1.2.0...v1.2.1) (2019-01-27) 7 | 8 | 9 | ### Bug Fixes 10 | 11 | * **Sample:** The sample worker actually works ([67a7fd9](https://github.com/gja/create-cloudflare-worker/commit/67a7fd9)) 12 | 13 | 14 | 15 | 16 | # [1.2.0](https://github.com/gja/create-cloudflare-worker/compare/v1.1.4...v1.2.0) (2019-01-04) 17 | 18 | 19 | ### Features 20 | 21 | * **Worker:** cloudflare-worker-local 1.9, which fixes a waitUntil bug ([541c77b](https://github.com/gja/create-cloudflare-worker/commit/541c77b)) 22 | 23 | 24 | 25 | 26 | ## [1.1.4](https://github.com/gja/create-cloudflare-worker/compare/v1.1.3...v1.1.4) (2019-01-04) 27 | 28 | 29 | ### Bug Fixes 30 | 31 | * **Testing:** Upgraded to the latest cloudflare-worker-local, which exposes stores ([8729ee5](https://github.com/gja/create-cloudflare-worker/commit/8729ee5)) 32 | 33 | 34 | 35 | 36 | ## [1.1.3](https://github.com/gja/create-cloudflare-worker/compare/v1.1.2...v1.1.3) (2019-01-04) 37 | 38 | 39 | 40 | 41 | ## [1.1.2](https://github.com/gja/create-cloudflare-worker/compare/v1.1.1...v1.1.2) (2019-01-04) 42 | 43 | 44 | ### Bug Fixes 45 | 46 | * **doc:** Updating the steps to create a worker ([f478445](https://github.com/gja/create-cloudflare-worker/commit/f478445)) 47 | 48 | 49 | 50 | 51 | ## [1.1.1](https://github.com/gja/create-cloudflare-worker/compare/v1.1.0...v1.1.1) (2019-01-02) 52 | 53 | 54 | 55 | 56 | # [1.1.0](https://github.com/gja/create-cloudflare-worker/compare/v1.0.4...v1.1.0) (2019-01-02) 57 | 58 | 59 | ### Features 60 | 61 | * Start the worker on a local port ([51ab694](https://github.com/gja/create-cloudflare-worker/commit/51ab694)) 62 | 63 | 64 | 65 | 66 | ## [1.0.4](https://github.com/gja/create-cloudflare-worker/compare/v1.0.3...v1.0.4) (2019-01-02) 67 | 68 | 69 | ### Bug Fixes 70 | 71 | * fixing a typo so /dist is git ignored ([75c4b1b](https://github.com/gja/create-cloudflare-worker/commit/75c4b1b)) 72 | 73 | 74 | 75 | 76 | ## [1.0.3](https://github.com/gja/create-cloudflare-worker/compare/v1.0.2...v1.0.3) (2019-01-02) 77 | 78 | 79 | ### Bug Fixes 80 | 81 | * Git Commit doesn't fail for eslint ([b2f5b68](https://github.com/gja/create-cloudflare-worker/commit/b2f5b68)) 82 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | ISC License (ISC) 2 | Copyright 2019 Tejas Dinkar 3 | 4 | Permission to use, copy, modify, and/or distribute this software for any purpose 5 | with or without fee is hereby granted, provided that the above copyright notice 6 | and this permission notice appear in all copies. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 9 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 10 | FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, 11 | OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 12 | DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 13 | ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## create-cloudflare-worker ![create-cloudflare-worker](https://img.shields.io/npm/v/create-cloudflare-worker.svg) 2 | 3 | > A Starter Kit for Building a Cloudflare Worker 4 | 5 | ### Creating an App 6 | 7 | To create a new worker with `create-cloudflare-worker`, run the following 8 | 9 | ```bash 10 | npm init cloudflare-worker your-worker-name 11 | ``` 12 | 13 | or, with `npx` 14 | 15 | ```bash 16 | npx create-cloudflare-worker your-worker-name 17 | ``` 18 | 19 | Once the installation is done, you can open your project folder: 20 | 21 | ```bash 22 | cd my-app 23 | ``` 24 | 25 | NOTE: Prerequisites: `create-cloudflare-worker` needs Node v10 or higher. 26 | 27 | 28 | ### Building and testing your new worker 29 | 30 | To build the worker, run 31 | 32 | ```bash 33 | npm run build 34 | ``` 35 | 36 | This outputs the worker as `dist/main.js`. 37 | 38 | To continually build the worker on every change, run 39 | 40 | ```bash 41 | npm run watch 42 | ``` 43 | 44 | And finally, to execute the integration and unit tests, run 45 | 46 | ```bash 47 | npm test 48 | ``` 49 | 50 | ### Running the worker locally 51 | 52 | To run the worker locally, run 53 | 54 | ```bash 55 | npm start 56 | ``` 57 | 58 | This will start the worker on port 4000, and forward all requests to the upstream server at `http://localhost:3000`. This will allow you to develop your application in tandem with the worker that will front the application. 59 | 60 | ### Deploying 61 | 62 | This project may be used to deploy your newly built worker to cloudflare as follows: 63 | 64 | ```bash 65 | CF_ACCOUNT=acct-id CF_WORKER_NAME=worker-name CF_EMAIL=you@you.com CF_AUTH_KEY=auth-key npm run deploy 66 | ``` 67 | 68 | However, you may also just copy dist/main.js and paste it into the CF worker dashboard (or even terraform it) 69 | 70 | ### Examples 71 | 72 | We will add recipes here 73 | - Building a API service with react-router 74 | - Parsing Cookies 75 | 76 | ### Adding a Key Value Store 77 | 78 | This project can also mock an in memory KV Store. This can be done as follows 79 | 80 | - Add the kv store (ex: MYSTORE) to the list of global variables of the worker 81 | - When running the worker, start the worker with the `KV_NAMESPACES` as follows `KV_NAMESPACES=MYSTORE,OTHER_STORE npm start` 82 | - In tests, namespaces can be created as an option to createTestApp as follows: `const app = createTestApp(workerContents, upstreamApp, { kvStores: ["MYSTORE"] })`. The new store can be accessed in tests as follows: `await app.stores.MYSTORE.put("key", "value")`. `await app.stores.MYSTORE.get("key")` 83 | 84 | When you are ready to deploy your new worker with a KV: 85 | 86 | - run curl to create the worker namespace (this should only be done once) 87 | ```bash 88 | # If this fails, contact support 89 | curl "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT/workers/namespaces" \ 90 | -X POST \ 91 | -H "X-Auth-Email: $CF_EMAIL" \ 92 | -H "X-Auth-Key: $AUTH_KEY" \ 93 | -H "Content-Type: application/json" \ 94 | --data '{"title": "your-namespace"}' 95 | # {"result":{"id": "","title":"your-namespace"}} 96 | ``` 97 | - Bind this namespace in the deploy script in package.json. Find the bindings section in the deploy script, and replace it with something like this 98 | ``` 99 | \\\"bindings\\\":[{\\\"name\\\":\\\"MYSTORE\\\",\\\"type\\\":\\\"kv_namespace\\\",\\\"namespace_id\\\":\\\"$MYSTORE_ID\\\"}] 100 | ``` 101 | - Finally, run your deploy script with the MYSTORE_ID variable set to the id returned by the curl command. 102 | 103 | ### Contributing 104 | - Fork this Repo first 105 | - Clone your Repo 106 | - Install dependencies by `$ npm install` 107 | - Checkout a feature branch 108 | - Feel free to add your features 109 | - Make sure your features are fully tested 110 | - Publish your local branch, Open a pull request 111 | - Enjoy hacking <3 112 | 113 | ### ISC 114 | 115 | This work is licensed under the [ISC license](./LICENSE). 116 | 117 | --- 118 | -------------------------------------------------------------------------------- /bin/create-cloudflare-worker: -------------------------------------------------------------------------------- 1 | #! /bin/sh -e 2 | 3 | # TODO: Move this to JS? 4 | 5 | DEST="$(pwd)/$1" 6 | 7 | EXEC_PATH="$0" 8 | CODE_PATH="$(cd $(dirname $EXEC_PATH); cd $(dirname $(readlink $EXEC_PATH)); cd ..; pwd)" 9 | cp -r "$CODE_PATH/template" "$DEST" 10 | 11 | cd "$DEST" 12 | 13 | git init 14 | 15 | # npm pack skips .gitignore and package-lock.json, so doing some hacks 16 | cat > .gitignore <=2.2.7 <3" 15 | } 16 | }, 17 | "ansi-regex": { 18 | "version": "2.1.1", 19 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 20 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 21 | "dev": true 22 | }, 23 | "ansi-styles": { 24 | "version": "2.2.1", 25 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 26 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 27 | "dev": true 28 | }, 29 | "array-find-index": { 30 | "version": "1.0.2", 31 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 32 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", 33 | "dev": true 34 | }, 35 | "array-ify": { 36 | "version": "1.0.0", 37 | "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", 38 | "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", 39 | "dev": true 40 | }, 41 | "arrify": { 42 | "version": "1.0.1", 43 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 44 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 45 | "dev": true 46 | }, 47 | "async": { 48 | "version": "2.6.1", 49 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", 50 | "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", 51 | "dev": true, 52 | "requires": { 53 | "lodash": "^4.17.10" 54 | } 55 | }, 56 | "balanced-match": { 57 | "version": "1.0.0", 58 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 59 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 60 | "dev": true 61 | }, 62 | "brace-expansion": { 63 | "version": "1.1.11", 64 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 65 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 66 | "dev": true, 67 | "requires": { 68 | "balanced-match": "^1.0.0", 69 | "concat-map": "0.0.1" 70 | } 71 | }, 72 | "buffer-from": { 73 | "version": "1.1.1", 74 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 75 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 76 | "dev": true 77 | }, 78 | "builtin-modules": { 79 | "version": "1.1.1", 80 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 81 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 82 | "dev": true 83 | }, 84 | "camelcase": { 85 | "version": "4.1.0", 86 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 87 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", 88 | "dev": true 89 | }, 90 | "camelcase-keys": { 91 | "version": "4.2.0", 92 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", 93 | "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", 94 | "dev": true, 95 | "requires": { 96 | "camelcase": "^4.1.0", 97 | "map-obj": "^2.0.0", 98 | "quick-lru": "^1.0.0" 99 | } 100 | }, 101 | "chalk": { 102 | "version": "1.1.3", 103 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 104 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 105 | "dev": true, 106 | "requires": { 107 | "ansi-styles": "^2.2.1", 108 | "escape-string-regexp": "^1.0.2", 109 | "has-ansi": "^2.0.0", 110 | "strip-ansi": "^3.0.0", 111 | "supports-color": "^2.0.0" 112 | } 113 | }, 114 | "cliui": { 115 | "version": "3.2.0", 116 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", 117 | "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", 118 | "dev": true, 119 | "requires": { 120 | "string-width": "^1.0.1", 121 | "strip-ansi": "^3.0.1", 122 | "wrap-ansi": "^2.0.0" 123 | }, 124 | "dependencies": { 125 | "string-width": { 126 | "version": "1.0.2", 127 | "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 128 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 129 | "dev": true, 130 | "requires": { 131 | "code-point-at": "^1.0.0", 132 | "is-fullwidth-code-point": "^1.0.0", 133 | "strip-ansi": "^3.0.0" 134 | } 135 | } 136 | } 137 | }, 138 | "code-point-at": { 139 | "version": "1.1.0", 140 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 141 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 142 | "dev": true 143 | }, 144 | "commander": { 145 | "version": "2.17.1", 146 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", 147 | "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", 148 | "dev": true, 149 | "optional": true 150 | }, 151 | "compare-func": { 152 | "version": "1.3.2", 153 | "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", 154 | "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", 155 | "dev": true, 156 | "requires": { 157 | "array-ify": "^1.0.0", 158 | "dot-prop": "^3.0.0" 159 | } 160 | }, 161 | "concat-map": { 162 | "version": "0.0.1", 163 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 164 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 165 | "dev": true 166 | }, 167 | "concat-stream": { 168 | "version": "1.6.2", 169 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 170 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 171 | "dev": true, 172 | "requires": { 173 | "buffer-from": "^1.0.0", 174 | "inherits": "^2.0.3", 175 | "readable-stream": "^2.2.2", 176 | "typedarray": "^0.0.6" 177 | } 178 | }, 179 | "conventional-changelog": { 180 | "version": "1.1.24", 181 | "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz", 182 | "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==", 183 | "dev": true, 184 | "requires": { 185 | "conventional-changelog-angular": "^1.6.6", 186 | "conventional-changelog-atom": "^0.2.8", 187 | "conventional-changelog-codemirror": "^0.3.8", 188 | "conventional-changelog-core": "^2.0.11", 189 | "conventional-changelog-ember": "^0.3.12", 190 | "conventional-changelog-eslint": "^1.0.9", 191 | "conventional-changelog-express": "^0.3.6", 192 | "conventional-changelog-jquery": "^0.1.0", 193 | "conventional-changelog-jscs": "^0.1.0", 194 | "conventional-changelog-jshint": "^0.3.8", 195 | "conventional-changelog-preset-loader": "^1.1.8" 196 | } 197 | }, 198 | "conventional-changelog-angular": { 199 | "version": "1.6.6", 200 | "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", 201 | "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", 202 | "dev": true, 203 | "requires": { 204 | "compare-func": "^1.3.1", 205 | "q": "^1.5.1" 206 | } 207 | }, 208 | "conventional-changelog-atom": { 209 | "version": "0.2.8", 210 | "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz", 211 | "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==", 212 | "dev": true, 213 | "requires": { 214 | "q": "^1.5.1" 215 | } 216 | }, 217 | "conventional-changelog-codemirror": { 218 | "version": "0.3.8", 219 | "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz", 220 | "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==", 221 | "dev": true, 222 | "requires": { 223 | "q": "^1.5.1" 224 | } 225 | }, 226 | "conventional-changelog-core": { 227 | "version": "2.0.11", 228 | "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz", 229 | "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==", 230 | "dev": true, 231 | "requires": { 232 | "conventional-changelog-writer": "^3.0.9", 233 | "conventional-commits-parser": "^2.1.7", 234 | "dateformat": "^3.0.0", 235 | "get-pkg-repo": "^1.0.0", 236 | "git-raw-commits": "^1.3.6", 237 | "git-remote-origin-url": "^2.0.0", 238 | "git-semver-tags": "^1.3.6", 239 | "lodash": "^4.2.1", 240 | "normalize-package-data": "^2.3.5", 241 | "q": "^1.5.1", 242 | "read-pkg": "^1.1.0", 243 | "read-pkg-up": "^1.0.1", 244 | "through2": "^2.0.0" 245 | } 246 | }, 247 | "conventional-changelog-ember": { 248 | "version": "0.3.12", 249 | "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz", 250 | "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==", 251 | "dev": true, 252 | "requires": { 253 | "q": "^1.5.1" 254 | } 255 | }, 256 | "conventional-changelog-eslint": { 257 | "version": "1.0.9", 258 | "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz", 259 | "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==", 260 | "dev": true, 261 | "requires": { 262 | "q": "^1.5.1" 263 | } 264 | }, 265 | "conventional-changelog-express": { 266 | "version": "0.3.6", 267 | "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz", 268 | "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==", 269 | "dev": true, 270 | "requires": { 271 | "q": "^1.5.1" 272 | } 273 | }, 274 | "conventional-changelog-jquery": { 275 | "version": "0.1.0", 276 | "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", 277 | "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", 278 | "dev": true, 279 | "requires": { 280 | "q": "^1.4.1" 281 | } 282 | }, 283 | "conventional-changelog-jscs": { 284 | "version": "0.1.0", 285 | "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", 286 | "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", 287 | "dev": true, 288 | "requires": { 289 | "q": "^1.4.1" 290 | } 291 | }, 292 | "conventional-changelog-jshint": { 293 | "version": "0.3.8", 294 | "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz", 295 | "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==", 296 | "dev": true, 297 | "requires": { 298 | "compare-func": "^1.3.1", 299 | "q": "^1.5.1" 300 | } 301 | }, 302 | "conventional-changelog-preset-loader": { 303 | "version": "1.1.8", 304 | "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz", 305 | "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==", 306 | "dev": true 307 | }, 308 | "conventional-changelog-writer": { 309 | "version": "3.0.9", 310 | "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz", 311 | "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==", 312 | "dev": true, 313 | "requires": { 314 | "compare-func": "^1.3.1", 315 | "conventional-commits-filter": "^1.1.6", 316 | "dateformat": "^3.0.0", 317 | "handlebars": "^4.0.2", 318 | "json-stringify-safe": "^5.0.1", 319 | "lodash": "^4.2.1", 320 | "meow": "^4.0.0", 321 | "semver": "^5.5.0", 322 | "split": "^1.0.0", 323 | "through2": "^2.0.0" 324 | } 325 | }, 326 | "conventional-commits-filter": { 327 | "version": "1.1.6", 328 | "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz", 329 | "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==", 330 | "dev": true, 331 | "requires": { 332 | "is-subset": "^0.1.1", 333 | "modify-values": "^1.0.0" 334 | } 335 | }, 336 | "conventional-commits-parser": { 337 | "version": "2.1.7", 338 | "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz", 339 | "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==", 340 | "dev": true, 341 | "requires": { 342 | "JSONStream": "^1.0.4", 343 | "is-text-path": "^1.0.0", 344 | "lodash": "^4.2.1", 345 | "meow": "^4.0.0", 346 | "split2": "^2.0.0", 347 | "through2": "^2.0.0", 348 | "trim-off-newlines": "^1.0.0" 349 | } 350 | }, 351 | "conventional-recommended-bump": { 352 | "version": "1.2.1", 353 | "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz", 354 | "integrity": "sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==", 355 | "dev": true, 356 | "requires": { 357 | "concat-stream": "^1.4.10", 358 | "conventional-commits-filter": "^1.1.1", 359 | "conventional-commits-parser": "^2.1.1", 360 | "git-raw-commits": "^1.3.0", 361 | "git-semver-tags": "^1.3.0", 362 | "meow": "^3.3.0", 363 | "object-assign": "^4.0.1" 364 | }, 365 | "dependencies": { 366 | "camelcase": { 367 | "version": "2.1.1", 368 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 369 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", 370 | "dev": true 371 | }, 372 | "camelcase-keys": { 373 | "version": "2.1.0", 374 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 375 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", 376 | "dev": true, 377 | "requires": { 378 | "camelcase": "^2.0.0", 379 | "map-obj": "^1.0.0" 380 | } 381 | }, 382 | "indent-string": { 383 | "version": "2.1.0", 384 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 385 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", 386 | "dev": true, 387 | "requires": { 388 | "repeating": "^2.0.0" 389 | } 390 | }, 391 | "map-obj": { 392 | "version": "1.0.1", 393 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 394 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", 395 | "dev": true 396 | }, 397 | "meow": { 398 | "version": "3.7.0", 399 | "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", 400 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", 401 | "dev": true, 402 | "requires": { 403 | "camelcase-keys": "^2.0.0", 404 | "decamelize": "^1.1.2", 405 | "loud-rejection": "^1.0.0", 406 | "map-obj": "^1.0.1", 407 | "minimist": "^1.1.3", 408 | "normalize-package-data": "^2.3.4", 409 | "object-assign": "^4.0.1", 410 | "read-pkg-up": "^1.0.1", 411 | "redent": "^1.0.0", 412 | "trim-newlines": "^1.0.0" 413 | } 414 | }, 415 | "minimist": { 416 | "version": "1.2.0", 417 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 418 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 419 | "dev": true 420 | }, 421 | "redent": { 422 | "version": "1.0.0", 423 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 424 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", 425 | "dev": true, 426 | "requires": { 427 | "indent-string": "^2.1.0", 428 | "strip-indent": "^1.0.1" 429 | } 430 | }, 431 | "strip-indent": { 432 | "version": "1.0.1", 433 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 434 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", 435 | "dev": true, 436 | "requires": { 437 | "get-stdin": "^4.0.1" 438 | } 439 | }, 440 | "trim-newlines": { 441 | "version": "1.0.0", 442 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 443 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", 444 | "dev": true 445 | } 446 | } 447 | }, 448 | "core-util-is": { 449 | "version": "1.0.2", 450 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 451 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 452 | "dev": true 453 | }, 454 | "cross-spawn": { 455 | "version": "5.1.0", 456 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 457 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 458 | "dev": true, 459 | "requires": { 460 | "lru-cache": "^4.0.1", 461 | "shebang-command": "^1.2.0", 462 | "which": "^1.2.9" 463 | } 464 | }, 465 | "currently-unhandled": { 466 | "version": "0.4.1", 467 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 468 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", 469 | "dev": true, 470 | "requires": { 471 | "array-find-index": "^1.0.1" 472 | } 473 | }, 474 | "dargs": { 475 | "version": "4.1.0", 476 | "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", 477 | "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", 478 | "dev": true, 479 | "requires": { 480 | "number-is-nan": "^1.0.0" 481 | } 482 | }, 483 | "dateformat": { 484 | "version": "3.0.3", 485 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", 486 | "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", 487 | "dev": true 488 | }, 489 | "decamelize": { 490 | "version": "1.2.0", 491 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 492 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 493 | "dev": true 494 | }, 495 | "decamelize-keys": { 496 | "version": "1.1.0", 497 | "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", 498 | "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", 499 | "dev": true, 500 | "requires": { 501 | "decamelize": "^1.1.0", 502 | "map-obj": "^1.0.0" 503 | }, 504 | "dependencies": { 505 | "map-obj": { 506 | "version": "1.0.1", 507 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 508 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", 509 | "dev": true 510 | } 511 | } 512 | }, 513 | "dot-prop": { 514 | "version": "3.0.0", 515 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", 516 | "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", 517 | "dev": true, 518 | "requires": { 519 | "is-obj": "^1.0.0" 520 | } 521 | }, 522 | "dotgitignore": { 523 | "version": "1.0.3", 524 | "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-1.0.3.tgz", 525 | "integrity": "sha512-eu5XjSstm0WXQsARgo6kPjkINYZlOUW+z/KtAAIBjHa5mUpMPrxJytbPIndWz6GubBuuuH5ljtVcXKnVnH5q8w==", 526 | "dev": true, 527 | "requires": { 528 | "find-up": "^2.1.0", 529 | "minimatch": "^3.0.4" 530 | } 531 | }, 532 | "error-ex": { 533 | "version": "1.3.2", 534 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 535 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 536 | "dev": true, 537 | "requires": { 538 | "is-arrayish": "^0.2.1" 539 | } 540 | }, 541 | "escape-string-regexp": { 542 | "version": "1.0.5", 543 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 544 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 545 | "dev": true 546 | }, 547 | "execa": { 548 | "version": "0.7.0", 549 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 550 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", 551 | "dev": true, 552 | "requires": { 553 | "cross-spawn": "^5.0.1", 554 | "get-stream": "^3.0.0", 555 | "is-stream": "^1.1.0", 556 | "npm-run-path": "^2.0.0", 557 | "p-finally": "^1.0.0", 558 | "signal-exit": "^3.0.0", 559 | "strip-eof": "^1.0.0" 560 | } 561 | }, 562 | "figures": { 563 | "version": "1.7.0", 564 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", 565 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", 566 | "dev": true, 567 | "requires": { 568 | "escape-string-regexp": "^1.0.5", 569 | "object-assign": "^4.1.0" 570 | } 571 | }, 572 | "find-up": { 573 | "version": "2.1.0", 574 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 575 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 576 | "dev": true, 577 | "requires": { 578 | "locate-path": "^2.0.0" 579 | } 580 | }, 581 | "fs-access": { 582 | "version": "1.0.1", 583 | "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", 584 | "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", 585 | "dev": true, 586 | "requires": { 587 | "null-check": "^1.0.0" 588 | } 589 | }, 590 | "get-caller-file": { 591 | "version": "1.0.3", 592 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", 593 | "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", 594 | "dev": true 595 | }, 596 | "get-pkg-repo": { 597 | "version": "1.4.0", 598 | "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", 599 | "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", 600 | "dev": true, 601 | "requires": { 602 | "hosted-git-info": "^2.1.4", 603 | "meow": "^3.3.0", 604 | "normalize-package-data": "^2.3.0", 605 | "parse-github-repo-url": "^1.3.0", 606 | "through2": "^2.0.0" 607 | }, 608 | "dependencies": { 609 | "camelcase": { 610 | "version": "2.1.1", 611 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 612 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", 613 | "dev": true 614 | }, 615 | "camelcase-keys": { 616 | "version": "2.1.0", 617 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 618 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", 619 | "dev": true, 620 | "requires": { 621 | "camelcase": "^2.0.0", 622 | "map-obj": "^1.0.0" 623 | } 624 | }, 625 | "indent-string": { 626 | "version": "2.1.0", 627 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 628 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", 629 | "dev": true, 630 | "requires": { 631 | "repeating": "^2.0.0" 632 | } 633 | }, 634 | "map-obj": { 635 | "version": "1.0.1", 636 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 637 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", 638 | "dev": true 639 | }, 640 | "meow": { 641 | "version": "3.7.0", 642 | "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", 643 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", 644 | "dev": true, 645 | "requires": { 646 | "camelcase-keys": "^2.0.0", 647 | "decamelize": "^1.1.2", 648 | "loud-rejection": "^1.0.0", 649 | "map-obj": "^1.0.1", 650 | "minimist": "^1.1.3", 651 | "normalize-package-data": "^2.3.4", 652 | "object-assign": "^4.0.1", 653 | "read-pkg-up": "^1.0.1", 654 | "redent": "^1.0.0", 655 | "trim-newlines": "^1.0.0" 656 | } 657 | }, 658 | "minimist": { 659 | "version": "1.2.0", 660 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 661 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 662 | "dev": true 663 | }, 664 | "redent": { 665 | "version": "1.0.0", 666 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 667 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", 668 | "dev": true, 669 | "requires": { 670 | "indent-string": "^2.1.0", 671 | "strip-indent": "^1.0.1" 672 | } 673 | }, 674 | "strip-indent": { 675 | "version": "1.0.1", 676 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 677 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", 678 | "dev": true, 679 | "requires": { 680 | "get-stdin": "^4.0.1" 681 | } 682 | }, 683 | "trim-newlines": { 684 | "version": "1.0.0", 685 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 686 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", 687 | "dev": true 688 | } 689 | } 690 | }, 691 | "get-stdin": { 692 | "version": "4.0.1", 693 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 694 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", 695 | "dev": true 696 | }, 697 | "get-stream": { 698 | "version": "3.0.0", 699 | "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 700 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 701 | "dev": true 702 | }, 703 | "git-raw-commits": { 704 | "version": "1.3.6", 705 | "resolved": "http://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", 706 | "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==", 707 | "dev": true, 708 | "requires": { 709 | "dargs": "^4.0.1", 710 | "lodash.template": "^4.0.2", 711 | "meow": "^4.0.0", 712 | "split2": "^2.0.0", 713 | "through2": "^2.0.0" 714 | } 715 | }, 716 | "git-remote-origin-url": { 717 | "version": "2.0.0", 718 | "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", 719 | "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", 720 | "dev": true, 721 | "requires": { 722 | "gitconfiglocal": "^1.0.0", 723 | "pify": "^2.3.0" 724 | }, 725 | "dependencies": { 726 | "pify": { 727 | "version": "2.3.0", 728 | "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 729 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 730 | "dev": true 731 | } 732 | } 733 | }, 734 | "git-semver-tags": { 735 | "version": "1.3.6", 736 | "resolved": "http://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz", 737 | "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==", 738 | "dev": true, 739 | "requires": { 740 | "meow": "^4.0.0", 741 | "semver": "^5.5.0" 742 | } 743 | }, 744 | "gitconfiglocal": { 745 | "version": "1.0.0", 746 | "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", 747 | "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", 748 | "dev": true, 749 | "requires": { 750 | "ini": "^1.3.2" 751 | } 752 | }, 753 | "graceful-fs": { 754 | "version": "4.1.15", 755 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 756 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", 757 | "dev": true 758 | }, 759 | "handlebars": { 760 | "version": "4.0.12", 761 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", 762 | "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", 763 | "dev": true, 764 | "requires": { 765 | "async": "^2.5.0", 766 | "optimist": "^0.6.1", 767 | "source-map": "^0.6.1", 768 | "uglify-js": "^3.1.4" 769 | } 770 | }, 771 | "has-ansi": { 772 | "version": "2.0.0", 773 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 774 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 775 | "dev": true, 776 | "requires": { 777 | "ansi-regex": "^2.0.0" 778 | } 779 | }, 780 | "hosted-git-info": { 781 | "version": "2.7.1", 782 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", 783 | "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", 784 | "dev": true 785 | }, 786 | "indent-string": { 787 | "version": "3.2.0", 788 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", 789 | "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", 790 | "dev": true 791 | }, 792 | "inherits": { 793 | "version": "2.0.3", 794 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 795 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 796 | "dev": true 797 | }, 798 | "ini": { 799 | "version": "1.3.5", 800 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 801 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 802 | "dev": true 803 | }, 804 | "invert-kv": { 805 | "version": "1.0.0", 806 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", 807 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", 808 | "dev": true 809 | }, 810 | "is-arrayish": { 811 | "version": "0.2.1", 812 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 813 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 814 | "dev": true 815 | }, 816 | "is-builtin-module": { 817 | "version": "1.0.0", 818 | "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 819 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 820 | "dev": true, 821 | "requires": { 822 | "builtin-modules": "^1.0.0" 823 | } 824 | }, 825 | "is-finite": { 826 | "version": "1.0.2", 827 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 828 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 829 | "dev": true, 830 | "requires": { 831 | "number-is-nan": "^1.0.0" 832 | } 833 | }, 834 | "is-fullwidth-code-point": { 835 | "version": "1.0.0", 836 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 837 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 838 | "dev": true, 839 | "requires": { 840 | "number-is-nan": "^1.0.0" 841 | } 842 | }, 843 | "is-obj": { 844 | "version": "1.0.1", 845 | "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 846 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 847 | "dev": true 848 | }, 849 | "is-plain-obj": { 850 | "version": "1.1.0", 851 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 852 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", 853 | "dev": true 854 | }, 855 | "is-stream": { 856 | "version": "1.1.0", 857 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 858 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 859 | "dev": true 860 | }, 861 | "is-subset": { 862 | "version": "0.1.1", 863 | "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", 864 | "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", 865 | "dev": true 866 | }, 867 | "is-text-path": { 868 | "version": "1.0.1", 869 | "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", 870 | "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", 871 | "dev": true, 872 | "requires": { 873 | "text-extensions": "^1.0.0" 874 | } 875 | }, 876 | "is-utf8": { 877 | "version": "0.2.1", 878 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 879 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 880 | "dev": true 881 | }, 882 | "isarray": { 883 | "version": "1.0.0", 884 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 885 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 886 | "dev": true 887 | }, 888 | "isexe": { 889 | "version": "2.0.0", 890 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 891 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 892 | "dev": true 893 | }, 894 | "json-parse-better-errors": { 895 | "version": "1.0.2", 896 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 897 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 898 | "dev": true 899 | }, 900 | "json-stringify-safe": { 901 | "version": "5.0.1", 902 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 903 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 904 | "dev": true 905 | }, 906 | "jsonparse": { 907 | "version": "1.3.1", 908 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 909 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", 910 | "dev": true 911 | }, 912 | "lcid": { 913 | "version": "1.0.0", 914 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", 915 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", 916 | "dev": true, 917 | "requires": { 918 | "invert-kv": "^1.0.0" 919 | } 920 | }, 921 | "load-json-file": { 922 | "version": "4.0.0", 923 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", 924 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", 925 | "dev": true, 926 | "requires": { 927 | "graceful-fs": "^4.1.2", 928 | "parse-json": "^4.0.0", 929 | "pify": "^3.0.0", 930 | "strip-bom": "^3.0.0" 931 | } 932 | }, 933 | "locate-path": { 934 | "version": "2.0.0", 935 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 936 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 937 | "dev": true, 938 | "requires": { 939 | "p-locate": "^2.0.0", 940 | "path-exists": "^3.0.0" 941 | } 942 | }, 943 | "lodash": { 944 | "version": "4.17.11", 945 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 946 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", 947 | "dev": true 948 | }, 949 | "lodash._reinterpolate": { 950 | "version": "3.0.0", 951 | "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", 952 | "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", 953 | "dev": true 954 | }, 955 | "lodash.template": { 956 | "version": "4.4.0", 957 | "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", 958 | "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", 959 | "dev": true, 960 | "requires": { 961 | "lodash._reinterpolate": "~3.0.0", 962 | "lodash.templatesettings": "^4.0.0" 963 | } 964 | }, 965 | "lodash.templatesettings": { 966 | "version": "4.1.0", 967 | "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", 968 | "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", 969 | "dev": true, 970 | "requires": { 971 | "lodash._reinterpolate": "~3.0.0" 972 | } 973 | }, 974 | "loud-rejection": { 975 | "version": "1.6.0", 976 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", 977 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", 978 | "dev": true, 979 | "requires": { 980 | "currently-unhandled": "^0.4.1", 981 | "signal-exit": "^3.0.0" 982 | } 983 | }, 984 | "lru-cache": { 985 | "version": "4.1.5", 986 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 987 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 988 | "dev": true, 989 | "requires": { 990 | "pseudomap": "^1.0.2", 991 | "yallist": "^2.1.2" 992 | } 993 | }, 994 | "map-obj": { 995 | "version": "2.0.0", 996 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", 997 | "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", 998 | "dev": true 999 | }, 1000 | "mem": { 1001 | "version": "1.1.0", 1002 | "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", 1003 | "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", 1004 | "dev": true, 1005 | "requires": { 1006 | "mimic-fn": "^1.0.0" 1007 | } 1008 | }, 1009 | "meow": { 1010 | "version": "4.0.1", 1011 | "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", 1012 | "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", 1013 | "dev": true, 1014 | "requires": { 1015 | "camelcase-keys": "^4.0.0", 1016 | "decamelize-keys": "^1.0.0", 1017 | "loud-rejection": "^1.0.0", 1018 | "minimist": "^1.1.3", 1019 | "minimist-options": "^3.0.1", 1020 | "normalize-package-data": "^2.3.4", 1021 | "read-pkg-up": "^3.0.0", 1022 | "redent": "^2.0.0", 1023 | "trim-newlines": "^2.0.0" 1024 | }, 1025 | "dependencies": { 1026 | "minimist": { 1027 | "version": "1.2.0", 1028 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1029 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1030 | "dev": true 1031 | }, 1032 | "read-pkg": { 1033 | "version": "3.0.0", 1034 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", 1035 | "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", 1036 | "dev": true, 1037 | "requires": { 1038 | "load-json-file": "^4.0.0", 1039 | "normalize-package-data": "^2.3.2", 1040 | "path-type": "^3.0.0" 1041 | } 1042 | }, 1043 | "read-pkg-up": { 1044 | "version": "3.0.0", 1045 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", 1046 | "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", 1047 | "dev": true, 1048 | "requires": { 1049 | "find-up": "^2.0.0", 1050 | "read-pkg": "^3.0.0" 1051 | } 1052 | } 1053 | } 1054 | }, 1055 | "mimic-fn": { 1056 | "version": "1.2.0", 1057 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 1058 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 1059 | "dev": true 1060 | }, 1061 | "minimatch": { 1062 | "version": "3.0.4", 1063 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1064 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1065 | "dev": true, 1066 | "requires": { 1067 | "brace-expansion": "^1.1.7" 1068 | } 1069 | }, 1070 | "minimist": { 1071 | "version": "0.0.10", 1072 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 1073 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", 1074 | "dev": true 1075 | }, 1076 | "minimist-options": { 1077 | "version": "3.0.2", 1078 | "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", 1079 | "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", 1080 | "dev": true, 1081 | "requires": { 1082 | "arrify": "^1.0.1", 1083 | "is-plain-obj": "^1.1.0" 1084 | } 1085 | }, 1086 | "modify-values": { 1087 | "version": "1.0.1", 1088 | "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", 1089 | "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", 1090 | "dev": true 1091 | }, 1092 | "normalize-package-data": { 1093 | "version": "2.4.0", 1094 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 1095 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 1096 | "dev": true, 1097 | "requires": { 1098 | "hosted-git-info": "^2.1.4", 1099 | "is-builtin-module": "^1.0.0", 1100 | "semver": "2 || 3 || 4 || 5", 1101 | "validate-npm-package-license": "^3.0.1" 1102 | } 1103 | }, 1104 | "npm-run-path": { 1105 | "version": "2.0.2", 1106 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 1107 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 1108 | "dev": true, 1109 | "requires": { 1110 | "path-key": "^2.0.0" 1111 | } 1112 | }, 1113 | "null-check": { 1114 | "version": "1.0.0", 1115 | "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", 1116 | "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", 1117 | "dev": true 1118 | }, 1119 | "number-is-nan": { 1120 | "version": "1.0.1", 1121 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1122 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 1123 | "dev": true 1124 | }, 1125 | "object-assign": { 1126 | "version": "4.1.1", 1127 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1128 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1129 | "dev": true 1130 | }, 1131 | "optimist": { 1132 | "version": "0.6.1", 1133 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 1134 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 1135 | "dev": true, 1136 | "requires": { 1137 | "minimist": "~0.0.1", 1138 | "wordwrap": "~0.0.2" 1139 | } 1140 | }, 1141 | "os-locale": { 1142 | "version": "2.1.0", 1143 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", 1144 | "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", 1145 | "dev": true, 1146 | "requires": { 1147 | "execa": "^0.7.0", 1148 | "lcid": "^1.0.0", 1149 | "mem": "^1.1.0" 1150 | } 1151 | }, 1152 | "p-finally": { 1153 | "version": "1.0.0", 1154 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1155 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 1156 | "dev": true 1157 | }, 1158 | "p-limit": { 1159 | "version": "1.3.0", 1160 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", 1161 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", 1162 | "dev": true, 1163 | "requires": { 1164 | "p-try": "^1.0.0" 1165 | } 1166 | }, 1167 | "p-locate": { 1168 | "version": "2.0.0", 1169 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 1170 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 1171 | "dev": true, 1172 | "requires": { 1173 | "p-limit": "^1.1.0" 1174 | } 1175 | }, 1176 | "p-try": { 1177 | "version": "1.0.0", 1178 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 1179 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 1180 | "dev": true 1181 | }, 1182 | "parse-github-repo-url": { 1183 | "version": "1.4.1", 1184 | "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", 1185 | "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", 1186 | "dev": true 1187 | }, 1188 | "parse-json": { 1189 | "version": "4.0.0", 1190 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 1191 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", 1192 | "dev": true, 1193 | "requires": { 1194 | "error-ex": "^1.3.1", 1195 | "json-parse-better-errors": "^1.0.1" 1196 | } 1197 | }, 1198 | "path-exists": { 1199 | "version": "3.0.0", 1200 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1201 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1202 | "dev": true 1203 | }, 1204 | "path-key": { 1205 | "version": "2.0.1", 1206 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1207 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1208 | "dev": true 1209 | }, 1210 | "path-type": { 1211 | "version": "3.0.0", 1212 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", 1213 | "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", 1214 | "dev": true, 1215 | "requires": { 1216 | "pify": "^3.0.0" 1217 | } 1218 | }, 1219 | "pify": { 1220 | "version": "3.0.0", 1221 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1222 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 1223 | "dev": true 1224 | }, 1225 | "pinkie": { 1226 | "version": "2.0.4", 1227 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1228 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 1229 | "dev": true 1230 | }, 1231 | "pinkie-promise": { 1232 | "version": "2.0.1", 1233 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1234 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 1235 | "dev": true, 1236 | "requires": { 1237 | "pinkie": "^2.0.0" 1238 | } 1239 | }, 1240 | "process-nextick-args": { 1241 | "version": "2.0.0", 1242 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 1243 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 1244 | "dev": true 1245 | }, 1246 | "pseudomap": { 1247 | "version": "1.0.2", 1248 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1249 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 1250 | "dev": true 1251 | }, 1252 | "q": { 1253 | "version": "1.5.1", 1254 | "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", 1255 | "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", 1256 | "dev": true 1257 | }, 1258 | "quick-lru": { 1259 | "version": "1.1.0", 1260 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", 1261 | "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", 1262 | "dev": true 1263 | }, 1264 | "read-pkg": { 1265 | "version": "1.1.0", 1266 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 1267 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", 1268 | "dev": true, 1269 | "requires": { 1270 | "load-json-file": "^1.0.0", 1271 | "normalize-package-data": "^2.3.2", 1272 | "path-type": "^1.0.0" 1273 | }, 1274 | "dependencies": { 1275 | "load-json-file": { 1276 | "version": "1.1.0", 1277 | "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 1278 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", 1279 | "dev": true, 1280 | "requires": { 1281 | "graceful-fs": "^4.1.2", 1282 | "parse-json": "^2.2.0", 1283 | "pify": "^2.0.0", 1284 | "pinkie-promise": "^2.0.0", 1285 | "strip-bom": "^2.0.0" 1286 | } 1287 | }, 1288 | "parse-json": { 1289 | "version": "2.2.0", 1290 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1291 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 1292 | "dev": true, 1293 | "requires": { 1294 | "error-ex": "^1.2.0" 1295 | } 1296 | }, 1297 | "path-type": { 1298 | "version": "1.1.0", 1299 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", 1300 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", 1301 | "dev": true, 1302 | "requires": { 1303 | "graceful-fs": "^4.1.2", 1304 | "pify": "^2.0.0", 1305 | "pinkie-promise": "^2.0.0" 1306 | } 1307 | }, 1308 | "pify": { 1309 | "version": "2.3.0", 1310 | "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1311 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1312 | "dev": true 1313 | }, 1314 | "strip-bom": { 1315 | "version": "2.0.0", 1316 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 1317 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 1318 | "dev": true, 1319 | "requires": { 1320 | "is-utf8": "^0.2.0" 1321 | } 1322 | } 1323 | } 1324 | }, 1325 | "read-pkg-up": { 1326 | "version": "1.0.1", 1327 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 1328 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", 1329 | "dev": true, 1330 | "requires": { 1331 | "find-up": "^1.0.0", 1332 | "read-pkg": "^1.0.0" 1333 | }, 1334 | "dependencies": { 1335 | "find-up": { 1336 | "version": "1.1.2", 1337 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 1338 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 1339 | "dev": true, 1340 | "requires": { 1341 | "path-exists": "^2.0.0", 1342 | "pinkie-promise": "^2.0.0" 1343 | } 1344 | }, 1345 | "path-exists": { 1346 | "version": "2.1.0", 1347 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 1348 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 1349 | "dev": true, 1350 | "requires": { 1351 | "pinkie-promise": "^2.0.0" 1352 | } 1353 | } 1354 | } 1355 | }, 1356 | "readable-stream": { 1357 | "version": "2.3.6", 1358 | "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1359 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1360 | "dev": true, 1361 | "requires": { 1362 | "core-util-is": "~1.0.0", 1363 | "inherits": "~2.0.3", 1364 | "isarray": "~1.0.0", 1365 | "process-nextick-args": "~2.0.0", 1366 | "safe-buffer": "~5.1.1", 1367 | "string_decoder": "~1.1.1", 1368 | "util-deprecate": "~1.0.1" 1369 | } 1370 | }, 1371 | "redent": { 1372 | "version": "2.0.0", 1373 | "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", 1374 | "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", 1375 | "dev": true, 1376 | "requires": { 1377 | "indent-string": "^3.0.0", 1378 | "strip-indent": "^2.0.0" 1379 | } 1380 | }, 1381 | "repeating": { 1382 | "version": "2.0.1", 1383 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 1384 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 1385 | "dev": true, 1386 | "requires": { 1387 | "is-finite": "^1.0.0" 1388 | } 1389 | }, 1390 | "require-directory": { 1391 | "version": "2.1.1", 1392 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1393 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1394 | "dev": true 1395 | }, 1396 | "require-main-filename": { 1397 | "version": "1.0.1", 1398 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", 1399 | "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", 1400 | "dev": true 1401 | }, 1402 | "safe-buffer": { 1403 | "version": "5.1.2", 1404 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1405 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1406 | "dev": true 1407 | }, 1408 | "semver": { 1409 | "version": "5.6.0", 1410 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 1411 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", 1412 | "dev": true 1413 | }, 1414 | "set-blocking": { 1415 | "version": "2.0.0", 1416 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1417 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 1418 | "dev": true 1419 | }, 1420 | "shebang-command": { 1421 | "version": "1.2.0", 1422 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1423 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1424 | "dev": true, 1425 | "requires": { 1426 | "shebang-regex": "^1.0.0" 1427 | } 1428 | }, 1429 | "shebang-regex": { 1430 | "version": "1.0.0", 1431 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1432 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1433 | "dev": true 1434 | }, 1435 | "signal-exit": { 1436 | "version": "3.0.2", 1437 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1438 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 1439 | "dev": true 1440 | }, 1441 | "source-map": { 1442 | "version": "0.6.1", 1443 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1444 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1445 | "dev": true 1446 | }, 1447 | "spdx-correct": { 1448 | "version": "3.1.0", 1449 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", 1450 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", 1451 | "dev": true, 1452 | "requires": { 1453 | "spdx-expression-parse": "^3.0.0", 1454 | "spdx-license-ids": "^3.0.0" 1455 | } 1456 | }, 1457 | "spdx-exceptions": { 1458 | "version": "2.2.0", 1459 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", 1460 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", 1461 | "dev": true 1462 | }, 1463 | "spdx-expression-parse": { 1464 | "version": "3.0.0", 1465 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 1466 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 1467 | "dev": true, 1468 | "requires": { 1469 | "spdx-exceptions": "^2.1.0", 1470 | "spdx-license-ids": "^3.0.0" 1471 | } 1472 | }, 1473 | "spdx-license-ids": { 1474 | "version": "3.0.3", 1475 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", 1476 | "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", 1477 | "dev": true 1478 | }, 1479 | "split": { 1480 | "version": "1.0.1", 1481 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", 1482 | "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", 1483 | "dev": true, 1484 | "requires": { 1485 | "through": "2" 1486 | } 1487 | }, 1488 | "split2": { 1489 | "version": "2.2.0", 1490 | "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", 1491 | "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", 1492 | "dev": true, 1493 | "requires": { 1494 | "through2": "^2.0.2" 1495 | } 1496 | }, 1497 | "standard-version": { 1498 | "version": "4.4.0", 1499 | "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-4.4.0.tgz", 1500 | "integrity": "sha512-jJ8FZhnmh9xJRQLnaXiGRLaAUNItIH29lOQZGpL5fd4+jUHto9Ij6SPCYN86h6ZNNXkYq2TYiIVVF7gVyC+pcQ==", 1501 | "dev": true, 1502 | "requires": { 1503 | "chalk": "^1.1.3", 1504 | "conventional-changelog": "^1.1.0", 1505 | "conventional-recommended-bump": "^1.0.0", 1506 | "dotgitignore": "^1.0.3", 1507 | "figures": "^1.5.0", 1508 | "fs-access": "^1.0.0", 1509 | "semver": "^5.1.0", 1510 | "yargs": "^8.0.1" 1511 | } 1512 | }, 1513 | "string-width": { 1514 | "version": "2.1.1", 1515 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1516 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1517 | "dev": true, 1518 | "requires": { 1519 | "is-fullwidth-code-point": "^2.0.0", 1520 | "strip-ansi": "^4.0.0" 1521 | }, 1522 | "dependencies": { 1523 | "ansi-regex": { 1524 | "version": "3.0.0", 1525 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1526 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1527 | "dev": true 1528 | }, 1529 | "is-fullwidth-code-point": { 1530 | "version": "2.0.0", 1531 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1532 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1533 | "dev": true 1534 | }, 1535 | "strip-ansi": { 1536 | "version": "4.0.0", 1537 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1538 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1539 | "dev": true, 1540 | "requires": { 1541 | "ansi-regex": "^3.0.0" 1542 | } 1543 | } 1544 | } 1545 | }, 1546 | "string_decoder": { 1547 | "version": "1.1.1", 1548 | "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1549 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1550 | "dev": true, 1551 | "requires": { 1552 | "safe-buffer": "~5.1.0" 1553 | } 1554 | }, 1555 | "strip-ansi": { 1556 | "version": "3.0.1", 1557 | "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1558 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1559 | "dev": true, 1560 | "requires": { 1561 | "ansi-regex": "^2.0.0" 1562 | } 1563 | }, 1564 | "strip-bom": { 1565 | "version": "3.0.0", 1566 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 1567 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 1568 | "dev": true 1569 | }, 1570 | "strip-eof": { 1571 | "version": "1.0.0", 1572 | "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 1573 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", 1574 | "dev": true 1575 | }, 1576 | "strip-indent": { 1577 | "version": "2.0.0", 1578 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", 1579 | "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", 1580 | "dev": true 1581 | }, 1582 | "supports-color": { 1583 | "version": "2.0.0", 1584 | "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1585 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1586 | "dev": true 1587 | }, 1588 | "text-extensions": { 1589 | "version": "1.9.0", 1590 | "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", 1591 | "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", 1592 | "dev": true 1593 | }, 1594 | "through": { 1595 | "version": "2.3.8", 1596 | "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", 1597 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1598 | "dev": true 1599 | }, 1600 | "through2": { 1601 | "version": "2.0.5", 1602 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1603 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1604 | "dev": true, 1605 | "requires": { 1606 | "readable-stream": "~2.3.6", 1607 | "xtend": "~4.0.1" 1608 | } 1609 | }, 1610 | "trim-newlines": { 1611 | "version": "2.0.0", 1612 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", 1613 | "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", 1614 | "dev": true 1615 | }, 1616 | "trim-off-newlines": { 1617 | "version": "1.0.1", 1618 | "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", 1619 | "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", 1620 | "dev": true 1621 | }, 1622 | "typedarray": { 1623 | "version": "0.0.6", 1624 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1625 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1626 | "dev": true 1627 | }, 1628 | "uglify-js": { 1629 | "version": "3.4.9", 1630 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", 1631 | "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", 1632 | "dev": true, 1633 | "optional": true, 1634 | "requires": { 1635 | "commander": "~2.17.1", 1636 | "source-map": "~0.6.1" 1637 | } 1638 | }, 1639 | "util-deprecate": { 1640 | "version": "1.0.2", 1641 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1642 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1643 | "dev": true 1644 | }, 1645 | "validate-npm-package-license": { 1646 | "version": "3.0.4", 1647 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1648 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1649 | "dev": true, 1650 | "requires": { 1651 | "spdx-correct": "^3.0.0", 1652 | "spdx-expression-parse": "^3.0.0" 1653 | } 1654 | }, 1655 | "which": { 1656 | "version": "1.3.1", 1657 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1658 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1659 | "dev": true, 1660 | "requires": { 1661 | "isexe": "^2.0.0" 1662 | } 1663 | }, 1664 | "which-module": { 1665 | "version": "2.0.0", 1666 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1667 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 1668 | "dev": true 1669 | }, 1670 | "wordwrap": { 1671 | "version": "0.0.3", 1672 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 1673 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", 1674 | "dev": true 1675 | }, 1676 | "wrap-ansi": { 1677 | "version": "2.1.0", 1678 | "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", 1679 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", 1680 | "dev": true, 1681 | "requires": { 1682 | "string-width": "^1.0.1", 1683 | "strip-ansi": "^3.0.1" 1684 | }, 1685 | "dependencies": { 1686 | "string-width": { 1687 | "version": "1.0.2", 1688 | "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1689 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1690 | "dev": true, 1691 | "requires": { 1692 | "code-point-at": "^1.0.0", 1693 | "is-fullwidth-code-point": "^1.0.0", 1694 | "strip-ansi": "^3.0.0" 1695 | } 1696 | } 1697 | } 1698 | }, 1699 | "xtend": { 1700 | "version": "4.0.1", 1701 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 1702 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 1703 | "dev": true 1704 | }, 1705 | "y18n": { 1706 | "version": "3.2.1", 1707 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", 1708 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", 1709 | "dev": true 1710 | }, 1711 | "yallist": { 1712 | "version": "2.1.2", 1713 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1714 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 1715 | "dev": true 1716 | }, 1717 | "yargs": { 1718 | "version": "8.0.2", 1719 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", 1720 | "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", 1721 | "dev": true, 1722 | "requires": { 1723 | "camelcase": "^4.1.0", 1724 | "cliui": "^3.2.0", 1725 | "decamelize": "^1.1.1", 1726 | "get-caller-file": "^1.0.1", 1727 | "os-locale": "^2.0.0", 1728 | "read-pkg-up": "^2.0.0", 1729 | "require-directory": "^2.1.1", 1730 | "require-main-filename": "^1.0.1", 1731 | "set-blocking": "^2.0.0", 1732 | "string-width": "^2.0.0", 1733 | "which-module": "^2.0.0", 1734 | "y18n": "^3.2.1", 1735 | "yargs-parser": "^7.0.0" 1736 | }, 1737 | "dependencies": { 1738 | "load-json-file": { 1739 | "version": "2.0.0", 1740 | "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 1741 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 1742 | "dev": true, 1743 | "requires": { 1744 | "graceful-fs": "^4.1.2", 1745 | "parse-json": "^2.2.0", 1746 | "pify": "^2.0.0", 1747 | "strip-bom": "^3.0.0" 1748 | } 1749 | }, 1750 | "parse-json": { 1751 | "version": "2.2.0", 1752 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1753 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 1754 | "dev": true, 1755 | "requires": { 1756 | "error-ex": "^1.2.0" 1757 | } 1758 | }, 1759 | "path-type": { 1760 | "version": "2.0.0", 1761 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 1762 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 1763 | "dev": true, 1764 | "requires": { 1765 | "pify": "^2.0.0" 1766 | } 1767 | }, 1768 | "pify": { 1769 | "version": "2.3.0", 1770 | "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1771 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1772 | "dev": true 1773 | }, 1774 | "read-pkg": { 1775 | "version": "2.0.0", 1776 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 1777 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 1778 | "dev": true, 1779 | "requires": { 1780 | "load-json-file": "^2.0.0", 1781 | "normalize-package-data": "^2.3.2", 1782 | "path-type": "^2.0.0" 1783 | } 1784 | }, 1785 | "read-pkg-up": { 1786 | "version": "2.0.0", 1787 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 1788 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 1789 | "dev": true, 1790 | "requires": { 1791 | "find-up": "^2.0.0", 1792 | "read-pkg": "^2.0.0" 1793 | } 1794 | } 1795 | } 1796 | }, 1797 | "yargs-parser": { 1798 | "version": "7.0.0", 1799 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", 1800 | "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", 1801 | "dev": true, 1802 | "requires": { 1803 | "camelcase": "^4.1.0" 1804 | } 1805 | } 1806 | } 1807 | } 1808 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "create-cloudflare-worker", 3 | "version": "1.2.1", 4 | "description": "Create a Cloudflare worker", 5 | "repository": { 6 | "type": "git", 7 | "url": "git+https://github.com/gja/create-cloudflare-worker.git" 8 | }, 9 | "keywords": [ 10 | "cloudflare", 11 | "worker" 12 | ], 13 | "author": "Tejas Dinkar ", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/gja/create-cloudflare-worker/issues" 17 | }, 18 | "bin": "./bin/create-cloudflare-worker", 19 | "homepage": "https://github.com/gja/create-cloudflare-worker#readme", 20 | "devDependencies": { 21 | "standard-version": "^4.4.0" 22 | }, 23 | "scripts": { 24 | "prepublishOnly": "npm install && git diff --quiet && npx standard-version && git push --follow-tags origin" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /template/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["transform-es2015-modules-commonjs"] 3 | } 4 | -------------------------------------------------------------------------------- /template/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "standard", 4 | "plugin:jest/recommended", 5 | "plugin:prettier/recommended", 6 | "prettier/standard" 7 | ], 8 | "plugins": [ 9 | "standard", 10 | "jest" 11 | ], 12 | "parser": "babel-eslint", 13 | "rules": { 14 | "max-len": ["warn", { "code": 120 }] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /template/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | 63 | # output of webpack 64 | /dist 65 | -------------------------------------------------------------------------------- /template/.prettierrc: -------------------------------------------------------------------------------- 1 | printWidth: 120 2 | -------------------------------------------------------------------------------- /template/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "cloudflare-worker", 4 | "version": "1.0.0", 5 | "description": "A Cloudflare Worker", 6 | "scripts": { 7 | "build": "webpack --mode production", 8 | "deploy": "npm run build && curl \"https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT/workers/scripts/$CF_WORKER_NAME\" -X PUT -H \"X-Auth-Email: $CF_EMAIL\" -H \"X-Auth-Key: $CF_AUTH_KEY\" -F 'script=@-;type=application/javascript' -F \"metadata={\\\"body_part\\\": \\\"script\\\", \\\"bindings\\\": []};type=application/json\" < dist/main.js", 9 | "start": "npm run build && npx nodemon --watch dist/main.js --exec \"cloudflare-worker-local dist/main.js localhost:3000 4000\" --signal SIGHUP", 10 | "test": "jest", 11 | "watch": "webpack --mode production --watch" 12 | }, 13 | "devDependencies": { 14 | "babel-eslint": "^10.0.1", 15 | "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", 16 | "cloudflare-worker-local": "^1.9.0", 17 | "eslint": "^5.11.1", 18 | "eslint-config-prettier": "^3.3.0", 19 | "eslint-config-standard": "^12.0.0", 20 | "eslint-plugin-import": "^2.14.0", 21 | "eslint-plugin-jest": "^22.1.2", 22 | "eslint-plugin-node": "^8.0.0", 23 | "eslint-plugin-prettier": "^3.0.1", 24 | "eslint-plugin-promise": "^4.0.1", 25 | "eslint-plugin-standard": "^4.0.0", 26 | "express": "^4.16.4", 27 | "husky": "^1.3.1", 28 | "jest": "^23.6.0", 29 | "lint-staged": "^8.1.0", 30 | "nodemon": "^1.18.9", 31 | "prettier": "^1.15.3", 32 | "supertest": "^3.3.0", 33 | "webpack": "^4.28.3", 34 | "webpack-cli": "^3.1.2" 35 | }, 36 | "husky": { 37 | "hooks": { 38 | "pre-commit": "lint-staged" 39 | } 40 | }, 41 | "lint-staged": { 42 | "*.{js,jsx}": [ 43 | "npx eslint --fix", 44 | "git add" 45 | ] 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /template/src/__tests__/worker.integration_spec.js: -------------------------------------------------------------------------------- 1 | import { createTestApp } from "cloudflare-worker-local"; 2 | import supertest from "supertest"; 3 | import express from "express"; 4 | import fs from "fs"; 5 | 6 | const workerContent = fs.readFileSync(`${__dirname}/../../dist/main.js`); 7 | 8 | describe("My New Worker", () => { 9 | it("Adds a header on 200 responses", async () => { 10 | const upstreamApp = express(); 11 | upstreamApp.get("/route", (req, res) => res.end("Success")); 12 | await supertest(createTestApp(workerContent, upstreamApp)) 13 | .get("/route") 14 | .expect("Foo", "Bar") 15 | .expect(200, "Success"); 16 | }); 17 | 18 | it("Adds a different header on 404", async () => { 19 | // all routes are 404 20 | const upstreamApp = express(); 21 | 22 | await supertest(createTestApp(workerContent, upstreamApp)) 23 | .get("/route") 24 | .expect("Foo", "Not Bar") 25 | .expect(404); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /template/src/index.js: -------------------------------------------------------------------------------- 1 | // Add any more global vars (like Request, Response) to the below list as they are used 2 | /* global addEventListener fetch Headers Response */ 3 | 4 | addEventListener("fetch", e => { 5 | e.respondWith(fetchAndAddHeader(e.request)); 6 | }); 7 | 8 | async function fetchAndAddHeader(request) { 9 | const response = await fetch(request); 10 | 11 | const headers = new Headers(response.headers); 12 | 13 | if (response.status === 200) { 14 | headers.set("Foo", "Bar"); 15 | } else { 16 | headers.set("Foo", "Not Bar"); 17 | } 18 | 19 | return new Response(response.body, { 20 | headers: headers, 21 | status: response.status, 22 | statusText: response.statusText 23 | }); 24 | } 25 | -------------------------------------------------------------------------------- /template/webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | target: "webworker" 3 | }; 4 | --------------------------------------------------------------------------------