├── example ├── docs.html ├── index.html ├── static │ ├── sw.js │ ├── assets │ │ ├── logic.js │ │ └── css │ │ │ └── styles.css │ └── resources │ │ └── editor.js ├── build │ └── generated.html ├── api │ ├── demo.js │ └── login.js ├── editor.js ├── run └── now.json ├── package.json ├── LICENSE ├── .gitignore ├── README.md ├── index.js └── yarn.lock /example/docs.html: -------------------------------------------------------------------------------- 1 |

docs

-------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 |

index

-------------------------------------------------------------------------------- /example/static/sw.js: -------------------------------------------------------------------------------- 1 | // service worker here -------------------------------------------------------------------------------- /example/static/assets/logic.js: -------------------------------------------------------------------------------- 1 | function logic(){} -------------------------------------------------------------------------------- /example/build/generated.html: -------------------------------------------------------------------------------- 1 |

generated

2 | -------------------------------------------------------------------------------- /example/static/resources/editor.js: -------------------------------------------------------------------------------- 1 | function editor(){} -------------------------------------------------------------------------------- /example/static/assets/css/styles.css: -------------------------------------------------------------------------------- 1 | body { width: 100%; } -------------------------------------------------------------------------------- /example/api/demo.js: -------------------------------------------------------------------------------- 1 | module.exports = function (req, res) { 2 | res.end('demo'); 3 | } -------------------------------------------------------------------------------- /example/api/login.js: -------------------------------------------------------------------------------- 1 | module.exports = function (req, res) { 2 | res.setHeader('Content-Type', 'application/json'); 3 | res.end('{"foo":"bar"}'); 4 | } -------------------------------------------------------------------------------- /example/editor.js: -------------------------------------------------------------------------------- 1 | const { parse } = require('url'); 2 | 3 | module.exports = function (req, res) { 4 | const { query } = parse(req.url, true); 5 | 6 | res.end('id=' + query.id); 7 | } -------------------------------------------------------------------------------- /example/run: -------------------------------------------------------------------------------- 1 | # curl -i http://localhost:8004/api/login 2 | # curl -i http://localhost:8004/api/demo 3 | # curl -i http://localhost:8004/static/assets/css/styles.css 4 | # curl -i http://localhost:8004/static/assets/logic.js 5 | # curl -i http://localhost:8004/static/sw.js 6 | # curl -i http://localhost:8004/e/resources/editor.js 7 | # curl -i http://localhost:8004/docs 8 | # curl -i http://localhost:8004/webapp/generated.html 9 | # curl -i http://localhost:8004 10 | curl -i http://localhost:8004/not-found 11 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "now-lambda-runner", 3 | "version": "4.0.0", 4 | "bin": { 5 | "now-lambda": "./index.js" 6 | }, 7 | "description": "A tool for testing now lambdas locally", 8 | "main": "index.js", 9 | "scripts": {}, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/krasimir/now-lambda-runner.git" 13 | }, 14 | "keywords": [ 15 | "now", 16 | "lambda", 17 | "tester", 18 | "runner" 19 | ], 20 | "author": "Krasimir Tsonev", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/krasimir/now-lambda-runner/issues" 24 | }, 25 | "homepage": "https://github.com/krasimir/now-lambda-runner#readme", 26 | "dependencies": { 27 | "cors": "2.8.5", 28 | "extglob": "3.0.0", 29 | "mime-types": "2.1.21", 30 | "named-regexp-groups": "^1.0.3", 31 | "yargs": "12.0.5" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /example/now.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "builds": [ 4 | { "src": "static/assets/**/*.*", "use": "@now/static" }, 5 | { "src": "static/assets/*.*", "use": "@now/static" }, 6 | { "src": "static/*.*", "use": "@now/static" }, 7 | { "src": "api/*.js", "use": "@now/node" }, 8 | { "src": "*.js", "use": "@now/node" }, 9 | { "src": "*.html", "use": "@now/static" }, 10 | { "src": "package.json", "use": "@now/static-build", "config": { "distDir": "build" } } 11 | ], 12 | "routes": [ 13 | { "src": "/api/login", "dest": "/api/login.js"}, 14 | { "src": "/api/demo", "dest": "/api/demo.js", "methods": ["GET"] }, 15 | { "src": "/static/assets/(.*)", "dest": "/static/assets/$1"}, 16 | { "src": "/static/(.*)", "dest": "/static/$1"}, 17 | { "src": "/e/resources/(?[^/]*)", "dest": "/static/resources/$resource"}, 18 | { "src": "/e/(.*)?", "dest": "/editor.js?id=$1"}, 19 | { "src": "/docs", "dest": "/docs.html"}, 20 | { "src": "/webapp/(.*)", "dest": "/build/$1"}, 21 | { "src": "/(.*)", "dest": "/index.html"} 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Krasimir Tsonev 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 | -------------------------------------------------------------------------------- /.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 | .vscode -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # !!! Deprecated 2 | 3 | Use `now dev` instead. 4 | 5 | Here is a introductory [blog post](https://zeit.co/blog/now-dev). [Now docs](https://zeit.co/now). 6 | 7 | ## now-lambda-runner 8 | 9 | A tool for locally testing [now](https://zeit.co/now) lambdas. 10 | 11 | ## Installation 12 | 13 | Install the tool via 14 | 15 | ``` 16 | > npm install -g now-lambda-runner 17 | ``` 18 | 19 | ## Usage 20 | 21 | Let's say that we have the following `now.json` file: 22 | 23 | ```json 24 | { 25 | "version": 2, 26 | "builds": [ 27 | { "src": "static/assets/**/*.*", "use": "@now/static" }, 28 | { "src": "static/assets/*.*", "use": "@now/static" }, 29 | { "src": "static/*.*", "use": "@now/static" }, 30 | { "src": "api/*.js", "use": "@now/node" }, 31 | { "src": "*.js", "use": "@now/node" }, 32 | { "src": "*.html", "use": "@now/static" } 33 | ], 34 | "routes": [ 35 | { "src": "/api/login", "dest": "/api/login.js" }, 36 | { "src": "/api/demo", "dest": "/api/demo.js" }, 37 | { "src": "/static/assets/(.*)", "dest": "/static/assets/$1"}, 38 | { "src": "/static/(.*)", "dest": "/static/$1"}, 39 | { "src": "/e/resources/(?[^/]*)", "dest": "/static/resources/$resource"}, 40 | { "src": "/e/(.*)?", "dest": "/editor.js?id=$1"}, 41 | { "src": "/docs", "dest": "/docs.html"}, 42 | { "src": "/(.*)", "dest": "/index.html"} 43 | ] 44 | } 45 | ``` 46 | 47 | We have to go to the folder containing that `now.json` file and run 48 | 49 | ``` 50 | > now-lambda 51 | ``` 52 | 53 | The result is as follows: 54 | 55 | ``` 56 | ----------------------------------- 57 | Routes: 58 | http://localhost:8004/api/login 59 | http://localhost:8004/api/demo 60 | http://localhost:8004/static/assets/(.*) 61 | http://localhost:8004/static/(.*) 62 | http://localhost:8004/e/resources/(?[^/]*) 63 | http://localhost:8004/e/(.*)? 64 | http://localhost:8004/docs 65 | http://localhost:8004/(.*) 66 | ----------------------------------- 67 | ``` 68 | 69 | And if we run the following curl request: 70 | 71 | ``` 72 | curl -i http://localhost:8004/e/foobar 73 | ``` 74 | 75 | we get `editor.js` lambda executed. The server reports: 76 | 77 | ``` 78 | => /e/foobar === /e/(.*)? 79 | @now/node("/editor.js?id=foobar") 80 | ``` 81 | 82 | Here's is a list of the things that happen when `now-lambda` process your `now.json` file: 83 | 84 | * It spins up a [node](https://nodejs.org/api/http.html) server locally on your machine 85 | * It starts reading the `routes` field in the `now.json` file and defines route handlers for each of the routes. 86 | * When a route matches it reads the `builds` field to figure out if it has to server statically the file or it must run the lambda. 87 | * The module only understands `@now/static`, `@now/node` and `@now/static-build` (partly). If there is another builder used the file is considered a static resource and it gets served directly. 88 | 89 | `now-lambda` does not: 90 | * Use the real now builders 91 | * Does not connect to now's servers 92 | 93 | ## CLI arguments 94 | 95 | * `--config` - path to `now.json` file 96 | * `--port` - by default the local server listens on port 8004. You can change it via this argument. -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const SEPARATOR = '-----------------------------------'; 4 | 5 | const fs = require('fs'); 6 | const path = require('path'); 7 | const yargs = require('yargs'); 8 | const NamedRegExp = require('named-regexp-groups'); 9 | const cors = require('cors'); 10 | const extglob = require('extglob'); 11 | const mime = require('mime-types') 12 | 13 | const argv = yargs 14 | .options({ 15 | config: { 16 | type: 'string', 17 | default: 'now.json', 18 | desc: 'The path to now.json if it is missing in the current directory' 19 | }, 20 | port: { 21 | type: 'number', 22 | default: 8004, 23 | desc: 'The port where the runner is listening for your requests' 24 | } 25 | }) 26 | .help() 27 | .argv; 28 | 29 | function error(msg) { 30 | console.log('\x1b[31m', msg); 31 | process.exit(1); 32 | } 33 | function removeQuery(url) { 34 | return url.split('?').shift(); 35 | } 36 | 37 | const nowConfPath = path.normalize(process.cwd() + '/' + argv.config); 38 | const nowProjectDir = path.dirname(nowConfPath); 39 | 40 | if (fs.existsSync(nowConfPath)) { 41 | const nowConf = require(nowConfPath); 42 | const handlers = []; 43 | const addHandler = method => (regexp, lambda) => handlers.push({ regexp: regexp, lambda: lambda, method: method }); 44 | const app = { 45 | all: addHandler('all'), 46 | get: addHandler('get'), 47 | post: addHandler('post'), 48 | put: addHandler('put'), 49 | delete: addHandler('delete'), 50 | patch: addHandler('patch'), 51 | head: addHandler('head'), 52 | options: addHandler('options') 53 | }; 54 | const http = require('http'); 55 | const server = http.createServer((req, res) => { 56 | for (let i = 0; i < handlers.length; i++) { 57 | const h = handlers[i]; 58 | 59 | if ((h.method === 'all' || h.method === req.method.toLowerCase()) && req.url.match(h.regexp)) { 60 | cors()(req, res, () => h.lambda(req, res)); 61 | return; 62 | } 63 | } 64 | 65 | res.statusCode = 404; 66 | res.setHeader('Content-Type', 'text/plain'); 67 | res.end('The provided path does not match.\n'); 68 | }); 69 | const log = [SEPARATOR, 'Routes:']; 70 | const matchBuilder = (dest, build) => { 71 | if (build.src === 'package.json' && build.config && build.config.distDir) { 72 | const distPath = path.normalize([build.config.distDir, dest].join('/')) 73 | const exist = fs.existsSync(distPath) 74 | if (exist) { 75 | return exist 76 | } 77 | } 78 | return extglob.isMatch(dest, '?(/)' + build.src) 79 | } 80 | const getBuilder = dest => nowConf.builds.find(build => matchBuilder(dest, build)); 81 | const sendFile = (res, filePath) => { 82 | const stat = fs.statSync(filePath); 83 | res.writeHead(200, { 84 | 'Content-Type': mime.lookup(filePath), 85 | 'Content-Length': stat.size 86 | }); 87 | 88 | var readStream = fs.createReadStream(filePath); 89 | readStream.pipe(res); 90 | } 91 | 92 | nowConf.routes.forEach(route => { 93 | const re = new NamedRegExp('^' + route.src); 94 | 95 | const callback = (req, res) => { 96 | var logMessage = [`=> ${req.method} - ${req.url} === ${route.src}`]; 97 | const urlParts = req.url.split('?'); 98 | const onlyPath = urlParts[0]; 99 | const getParams = urlParts[1]; 100 | const match = onlyPath.match(re); 101 | var dest = route.dest; 102 | 103 | for (let i = 1; i < match.length; i++) { 104 | dest = dest.replace(new RegExp('\\$' + i, 'g'), match[i]); 105 | } 106 | if (match.groups) { 107 | Object.keys(match.groups).forEach(key => { 108 | dest = dest.replace(new RegExp('\\$' + key, 'g'), match.groups[key]); 109 | }); 110 | } 111 | const builder = getBuilder(removeQuery(dest)); 112 | const pathArray = [nowProjectDir] 113 | if (builder && builder.config && builder.config.distDir) { 114 | pathArray.push(builder.config.distDir) 115 | } 116 | pathArray.push(removeQuery(dest)) 117 | const handlerFilepath = path.normalize(pathArray.join('/')); 118 | 119 | logMessage.push(' ' + (builder ? builder.use + '("' + dest + '")' : 'no builder found')); 120 | 121 | if (builder && builder.use === '@now/static') { 122 | console.log(logMessage.join('\n')); 123 | sendFile(res, handlerFilepath); 124 | } else if (builder && builder.use === '@now/node') { 125 | console.log(logMessage.join('\n')); 126 | req.url = dest + (getParams ? '?' + getParams : ''); 127 | 128 | // works for NODE_OPTIONS='-r esm' 129 | const objOrModule = require(handlerFilepath) 130 | const obj = objOrModule.default ? objOrModule.default : objOrModule; 131 | obj(req, res) 132 | 133 | delete require.cache[require.resolve(handlerFilepath)]; 134 | } else if (fs.existsSync(handlerFilepath)) { 135 | console.log(logMessage.join('\n')); 136 | sendFile(res, handlerFilepath); 137 | } else { 138 | res.statusCode = 404; 139 | res.end(handlerFilepath + ' can not be found.'); 140 | } 141 | }; 142 | 143 | if (route.methods) { 144 | for (const method of route.methods) { 145 | log.push(` ${method} - http://localhost:${argv.port}${route.src}`); 146 | app[method.toLowerCase()](re.regex, callback); 147 | } 148 | } else { 149 | log.push(` ALL - http://localhost:${argv.port}${route.src}`); 150 | app.all(re.regex, callback); 151 | } 152 | }); 153 | 154 | log.push(SEPARATOR); 155 | 156 | server.listen(argv.port, 'localhost', () => { 157 | console.log(log.join('\n')); 158 | }); 159 | } else { 160 | error('now.json can not be found in ' + nowConfPath); 161 | } 162 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ansi-regex@^2.0.0: 6 | version "2.1.1" 7 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 8 | 9 | ansi-regex@^3.0.0: 10 | version "3.0.0" 11 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 12 | 13 | array-unique@^0.3.2: 14 | version "0.3.2" 15 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 16 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= 17 | 18 | assign-symbols@^1.0.0: 19 | version "1.0.0" 20 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 21 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= 22 | 23 | atob@^2.1.1: 24 | version "2.1.2" 25 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 26 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 27 | 28 | camelcase@^5.0.0: 29 | version "5.0.0" 30 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" 31 | 32 | cliui@^4.0.0: 33 | version "4.1.0" 34 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 35 | dependencies: 36 | string-width "^2.1.1" 37 | strip-ansi "^4.0.0" 38 | wrap-ansi "^2.0.0" 39 | 40 | code-point-at@^1.0.0: 41 | version "1.1.0" 42 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 43 | 44 | component-emitter@^1.2.1: 45 | version "1.2.1" 46 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 47 | integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= 48 | 49 | cors@2.8.5: 50 | version "2.8.5" 51 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 52 | dependencies: 53 | object-assign "^4" 54 | vary "^1" 55 | 56 | cross-spawn@^6.0.0: 57 | version "6.0.5" 58 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 59 | dependencies: 60 | nice-try "^1.0.4" 61 | path-key "^2.0.1" 62 | semver "^5.5.0" 63 | shebang-command "^1.2.0" 64 | which "^1.2.9" 65 | 66 | decamelize@^1.2.0: 67 | version "1.2.0" 68 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 69 | 70 | decode-uri-component@^0.2.0: 71 | version "0.2.0" 72 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 73 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 74 | 75 | define-property@^0.2.5: 76 | version "0.2.5" 77 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 78 | integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= 79 | dependencies: 80 | is-descriptor "^0.1.0" 81 | 82 | define-property@^2.0.2: 83 | version "2.0.2" 84 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 85 | integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== 86 | dependencies: 87 | is-descriptor "^1.0.2" 88 | isobject "^3.0.1" 89 | 90 | execa@^0.10.0: 91 | version "0.10.0" 92 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" 93 | dependencies: 94 | cross-spawn "^6.0.0" 95 | get-stream "^3.0.0" 96 | is-stream "^1.1.0" 97 | npm-run-path "^2.0.0" 98 | p-finally "^1.0.0" 99 | signal-exit "^3.0.0" 100 | strip-eof "^1.0.0" 101 | 102 | expand-brackets@^4.0.0: 103 | version "4.0.0" 104 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-4.0.0.tgz#b61a0fea7fc4e33c94110c2965837d56bfa4568d" 105 | integrity sha512-TGRazgOxrwafQdSPISIXScDPew3h6mIvXBE72cbgZgweqRila6892tk+fYT6UBkHvSNUooC5rP2zRF/x1ay+Ww== 106 | dependencies: 107 | posix-character-classes "^1.0.0" 108 | regex-not "^1.0.0" 109 | snapdragon "^0.12.0" 110 | to-regex "^3.0.1" 111 | 112 | extend-shallow@^3.0.2: 113 | version "3.0.2" 114 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 115 | integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= 116 | dependencies: 117 | assign-symbols "^1.0.0" 118 | is-extendable "^1.0.1" 119 | 120 | extglob@3.0.0: 121 | version "3.0.0" 122 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-3.0.0.tgz#d244c597a5d4a7813c3ed28cc3fd5a5233137026" 123 | integrity sha512-tbNnRL4IMn8VdTyDTZWgT2EpI7nYcQbDncFpltVSsyairady2OttEjUowI5gHyc1/gbOI2RaqcJvUPaAU42z2g== 124 | dependencies: 125 | array-unique "^0.3.2" 126 | define-property "^2.0.2" 127 | expand-brackets "^4.0.0" 128 | fragment-cache "^0.2.1" 129 | regex-not "^1.0.0" 130 | snapdragon "^0.12.0" 131 | snapdragon-capture "^0.2.0" 132 | to-regex "^3.0.1" 133 | 134 | find-up@^3.0.0: 135 | version "3.0.0" 136 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 137 | dependencies: 138 | locate-path "^3.0.0" 139 | 140 | fragment-cache@^0.2.1: 141 | version "0.2.1" 142 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 143 | integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= 144 | dependencies: 145 | map-cache "^0.2.2" 146 | 147 | get-caller-file@^1.0.1: 148 | version "1.0.3" 149 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 150 | 151 | get-stream@^3.0.0: 152 | version "3.0.0" 153 | resolved "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 154 | 155 | get-value@^2.0.6: 156 | version "2.0.6" 157 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 158 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= 159 | 160 | invert-kv@^2.0.0: 161 | version "2.0.0" 162 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" 163 | 164 | is-accessor-descriptor@^0.1.6: 165 | version "0.1.6" 166 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 167 | integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= 168 | dependencies: 169 | kind-of "^3.0.2" 170 | 171 | is-accessor-descriptor@^1.0.0: 172 | version "1.0.0" 173 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 174 | integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== 175 | dependencies: 176 | kind-of "^6.0.0" 177 | 178 | is-buffer@^1.1.5: 179 | version "1.1.6" 180 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 181 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 182 | 183 | is-data-descriptor@^0.1.4: 184 | version "0.1.4" 185 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 186 | integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= 187 | dependencies: 188 | kind-of "^3.0.2" 189 | 190 | is-data-descriptor@^1.0.0: 191 | version "1.0.0" 192 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 193 | integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== 194 | dependencies: 195 | kind-of "^6.0.0" 196 | 197 | is-descriptor@^0.1.0: 198 | version "0.1.6" 199 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 200 | integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== 201 | dependencies: 202 | is-accessor-descriptor "^0.1.6" 203 | is-data-descriptor "^0.1.4" 204 | kind-of "^5.0.0" 205 | 206 | is-descriptor@^1.0.2: 207 | version "1.0.2" 208 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 209 | integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== 210 | dependencies: 211 | is-accessor-descriptor "^1.0.0" 212 | is-data-descriptor "^1.0.0" 213 | kind-of "^6.0.2" 214 | 215 | is-extendable@^1.0.1: 216 | version "1.0.1" 217 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 218 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 219 | dependencies: 220 | is-plain-object "^2.0.4" 221 | 222 | is-fullwidth-code-point@^1.0.0: 223 | version "1.0.0" 224 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 225 | dependencies: 226 | number-is-nan "^1.0.0" 227 | 228 | is-fullwidth-code-point@^2.0.0: 229 | version "2.0.0" 230 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 231 | 232 | is-plain-object@^2.0.4: 233 | version "2.0.4" 234 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 235 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 236 | dependencies: 237 | isobject "^3.0.1" 238 | 239 | is-stream@^1.1.0: 240 | version "1.1.0" 241 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 242 | 243 | isexe@^2.0.0: 244 | version "2.0.0" 245 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 246 | 247 | isobject@^3.0.0, isobject@^3.0.1: 248 | version "3.0.1" 249 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 250 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= 251 | 252 | kind-of@^3.0.2, kind-of@^3.1.0: 253 | version "3.2.2" 254 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 255 | integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= 256 | dependencies: 257 | is-buffer "^1.1.5" 258 | 259 | kind-of@^5.0.0: 260 | version "5.1.0" 261 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 262 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== 263 | 264 | kind-of@^6.0.0, kind-of@^6.0.2: 265 | version "6.0.2" 266 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 267 | integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== 268 | 269 | lazy-cache@^2.0.2: 270 | version "2.0.2" 271 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" 272 | integrity sha1-uRkKT5EzVGlIQIWfio9whNiCImQ= 273 | dependencies: 274 | set-getter "^0.1.0" 275 | 276 | lcid@^2.0.0: 277 | version "2.0.0" 278 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" 279 | dependencies: 280 | invert-kv "^2.0.0" 281 | 282 | locate-path@^3.0.0: 283 | version "3.0.0" 284 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 285 | dependencies: 286 | p-locate "^3.0.0" 287 | path-exists "^3.0.0" 288 | 289 | map-age-cleaner@^0.1.1: 290 | version "0.1.3" 291 | resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" 292 | dependencies: 293 | p-defer "^1.0.0" 294 | 295 | map-cache@^0.2.2: 296 | version "0.2.2" 297 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 298 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= 299 | 300 | mem@^4.0.0: 301 | version "4.0.0" 302 | resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" 303 | dependencies: 304 | map-age-cleaner "^0.1.1" 305 | mimic-fn "^1.0.0" 306 | p-is-promise "^1.1.0" 307 | 308 | mime-db@~1.37.0: 309 | version "1.37.0" 310 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" 311 | 312 | mime-types@2.1.21: 313 | version "2.1.21" 314 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" 315 | integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg== 316 | dependencies: 317 | mime-db "~1.37.0" 318 | 319 | mimic-fn@^1.0.0: 320 | version "1.2.0" 321 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 322 | 323 | named-regexp-groups@^1.0.3: 324 | version "1.0.3" 325 | resolved "https://registry.yarnpkg.com/named-regexp-groups/-/named-regexp-groups-1.0.3.tgz#06cf506b840535868a87606f5ece47dd2e4f6a9a" 326 | 327 | nice-try@^1.0.4: 328 | version "1.0.5" 329 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 330 | 331 | npm-run-path@^2.0.0: 332 | version "2.0.2" 333 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 334 | dependencies: 335 | path-key "^2.0.0" 336 | 337 | number-is-nan@^1.0.0: 338 | version "1.0.1" 339 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 340 | 341 | object-assign@^4: 342 | version "4.1.1" 343 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 344 | 345 | os-locale@^3.0.0: 346 | version "3.0.1" 347 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" 348 | dependencies: 349 | execa "^0.10.0" 350 | lcid "^2.0.0" 351 | mem "^4.0.0" 352 | 353 | p-defer@^1.0.0: 354 | version "1.0.0" 355 | resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" 356 | 357 | p-finally@^1.0.0: 358 | version "1.0.0" 359 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 360 | 361 | p-is-promise@^1.1.0: 362 | version "1.1.0" 363 | resolved "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" 364 | 365 | p-limit@^2.0.0: 366 | version "2.0.0" 367 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" 368 | dependencies: 369 | p-try "^2.0.0" 370 | 371 | p-locate@^3.0.0: 372 | version "3.0.0" 373 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 374 | dependencies: 375 | p-limit "^2.0.0" 376 | 377 | p-try@^2.0.0: 378 | version "2.0.0" 379 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" 380 | 381 | path-exists@^3.0.0: 382 | version "3.0.0" 383 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 384 | 385 | path-key@^2.0.0, path-key@^2.0.1: 386 | version "2.0.1" 387 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 388 | 389 | posix-character-classes@^1.0.0: 390 | version "1.0.0" 391 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-1.0.0.tgz#86917ab2d252f7ea78e157bf009b9b6ea35c6cad" 392 | integrity sha1-hpF6stJS9+p44Ve/AJubbqNcbK0= 393 | 394 | regex-not@^1.0.0, regex-not@^1.0.2: 395 | version "1.0.2" 396 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 397 | integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== 398 | dependencies: 399 | extend-shallow "^3.0.2" 400 | safe-regex "^1.1.0" 401 | 402 | require-directory@^2.1.1: 403 | version "2.1.1" 404 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 405 | 406 | require-main-filename@^1.0.1: 407 | version "1.0.1" 408 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 409 | 410 | resolve-url@^0.2.1: 411 | version "0.2.1" 412 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 413 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= 414 | 415 | ret@~0.1.10: 416 | version "0.1.15" 417 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 418 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== 419 | 420 | safe-regex@^1.1.0: 421 | version "1.1.0" 422 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 423 | integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= 424 | dependencies: 425 | ret "~0.1.10" 426 | 427 | semver@^5.5.0: 428 | version "5.6.0" 429 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" 430 | 431 | set-blocking@^2.0.0: 432 | version "2.0.0" 433 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 434 | 435 | set-getter@^0.1.0: 436 | version "0.1.0" 437 | resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" 438 | integrity sha1-12nBgsnVpR9AkUXy+6guXoboA3Y= 439 | dependencies: 440 | to-object-path "^0.3.0" 441 | 442 | shebang-command@^1.2.0: 443 | version "1.2.0" 444 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 445 | dependencies: 446 | shebang-regex "^1.0.0" 447 | 448 | shebang-regex@^1.0.0: 449 | version "1.0.0" 450 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 451 | 452 | signal-exit@^3.0.0: 453 | version "3.0.2" 454 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 455 | 456 | snapdragon-capture@^0.2.0: 457 | version "0.2.0" 458 | resolved "https://registry.yarnpkg.com/snapdragon-capture/-/snapdragon-capture-0.2.0.tgz#21616023884a3b0192c8d347f238af49eaa1ea67" 459 | integrity sha1-IWFgI4hKOwGSyNNH8jivSeqh6mc= 460 | 461 | snapdragon-node@^1.0.6: 462 | version "1.0.6" 463 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-1.0.6.tgz#2448d5ef6fea7f5e8fd5326a0a114854da271356" 464 | integrity sha1-JEjV72/qf16P1TJqChFIVNonE1Y= 465 | dependencies: 466 | define-property "^0.2.5" 467 | isobject "^3.0.0" 468 | lazy-cache "^2.0.2" 469 | snapdragon-util "^1.0.3" 470 | 471 | snapdragon-util@^1.0.3: 472 | version "1.0.6" 473 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-1.0.6.tgz#8b3d2d6dec8930c90e054ba052e562ca1b3a621e" 474 | integrity sha1-iz0tbeyJMMkOBUugUuViyhs6Yh4= 475 | dependencies: 476 | define-property "^0.2.5" 477 | kind-of "^3.1.0" 478 | lazy-cache "^2.0.2" 479 | snapdragon-node "^1.0.6" 480 | 481 | snapdragon-util@^4.0.0: 482 | version "4.0.0" 483 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-4.0.0.tgz#49c858a089174abe7b8d186a367424823167446a" 484 | integrity sha512-EthB2f44R7/fdbUrGmlOIJ15k5nkC3/LvWaD6u7wu9fo4Eabk7qq1MTkSGoTWWm1hxb2lxG/r9H3KKhhNOGkgw== 485 | dependencies: 486 | kind-of "^6.0.0" 487 | 488 | snapdragon@^0.12.0: 489 | version "0.12.0" 490 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.12.0.tgz#ad7e56891a87eb38012386159bee99a0430e6e06" 491 | integrity sha512-E7epxLolFdELn4LzTfDOImU0gZDk5Y071Pou8+3rEP7980ZbDbBje3xDQAqP5lnPItU1W7QEoqNSJvHtvK8DcQ== 492 | dependencies: 493 | component-emitter "^1.2.1" 494 | define-property "^2.0.2" 495 | extend-shallow "^3.0.2" 496 | get-value "^2.0.6" 497 | isobject "^3.0.0" 498 | map-cache "^0.2.2" 499 | snapdragon-node "^1.0.6" 500 | snapdragon-util "^4.0.0" 501 | source-map "^0.5.6" 502 | source-map-resolve "^0.5.0" 503 | use "^3.1.0" 504 | 505 | source-map-resolve@^0.5.0: 506 | version "0.5.2" 507 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 508 | integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== 509 | dependencies: 510 | atob "^2.1.1" 511 | decode-uri-component "^0.2.0" 512 | resolve-url "^0.2.1" 513 | source-map-url "^0.4.0" 514 | urix "^0.1.0" 515 | 516 | source-map-url@^0.4.0: 517 | version "0.4.0" 518 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 519 | integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= 520 | 521 | source-map@^0.5.6: 522 | version "0.5.7" 523 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 524 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 525 | 526 | string-width@^1.0.1: 527 | version "1.0.2" 528 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 529 | dependencies: 530 | code-point-at "^1.0.0" 531 | is-fullwidth-code-point "^1.0.0" 532 | strip-ansi "^3.0.0" 533 | 534 | string-width@^2.0.0, string-width@^2.1.1: 535 | version "2.1.1" 536 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 537 | dependencies: 538 | is-fullwidth-code-point "^2.0.0" 539 | strip-ansi "^4.0.0" 540 | 541 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 542 | version "3.0.1" 543 | resolved "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 544 | dependencies: 545 | ansi-regex "^2.0.0" 546 | 547 | strip-ansi@^4.0.0: 548 | version "4.0.0" 549 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 550 | dependencies: 551 | ansi-regex "^3.0.0" 552 | 553 | strip-eof@^1.0.0: 554 | version "1.0.0" 555 | resolved "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 556 | 557 | to-object-path@^0.3.0: 558 | version "0.3.0" 559 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 560 | integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= 561 | dependencies: 562 | kind-of "^3.0.2" 563 | 564 | to-regex@^3.0.1: 565 | version "3.0.2" 566 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 567 | integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== 568 | dependencies: 569 | define-property "^2.0.2" 570 | extend-shallow "^3.0.2" 571 | regex-not "^1.0.2" 572 | safe-regex "^1.1.0" 573 | 574 | urix@^0.1.0: 575 | version "0.1.0" 576 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 577 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= 578 | 579 | use@^3.1.0: 580 | version "3.1.1" 581 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 582 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== 583 | 584 | vary@^1: 585 | version "1.1.2" 586 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 587 | 588 | which-module@^2.0.0: 589 | version "2.0.0" 590 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 591 | 592 | which@^1.2.9: 593 | version "1.3.1" 594 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 595 | dependencies: 596 | isexe "^2.0.0" 597 | 598 | wrap-ansi@^2.0.0: 599 | version "2.1.0" 600 | resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 601 | dependencies: 602 | string-width "^1.0.1" 603 | strip-ansi "^3.0.1" 604 | 605 | "y18n@^3.2.1 || ^4.0.0": 606 | version "4.0.0" 607 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 608 | 609 | yargs-parser@^11.1.1: 610 | version "11.1.1" 611 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" 612 | dependencies: 613 | camelcase "^5.0.0" 614 | decamelize "^1.2.0" 615 | 616 | yargs@12.0.5: 617 | version "12.0.5" 618 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" 619 | dependencies: 620 | cliui "^4.0.0" 621 | decamelize "^1.2.0" 622 | find-up "^3.0.0" 623 | get-caller-file "^1.0.1" 624 | os-locale "^3.0.0" 625 | require-directory "^2.1.1" 626 | require-main-filename "^1.0.1" 627 | set-blocking "^2.0.0" 628 | string-width "^2.0.0" 629 | which-module "^2.0.0" 630 | y18n "^3.2.1 || ^4.0.0" 631 | yargs-parser "^11.1.1" 632 | --------------------------------------------------------------------------------