├── .gitignore
├── .jshintrc
├── LICENSE
├── README.md
├── assets
├── beer.png
├── logo.png
└── screens
│ ├── notification.png
│ └── server.png
├── custom.js
├── errorServerRoot
├── index.html
└── style.css
├── index.js
├── lib
├── ErrorList.js
├── ErrorServer.js
└── errorHandler.js
├── package.json
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/macOS,node
3 |
4 | ### macOS ###
5 | *.DS_Store
6 | .AppleDouble
7 | .LSOverride
8 |
9 | # Icon must end with two \r
10 | Icon
11 |
12 |
13 | # Thumbnails
14 | ._*
15 |
16 | # Files that might appear in the root of a volume
17 | .DocumentRevisions-V100
18 | .fseventsd
19 | .Spotlight-V100
20 | .TemporaryItems
21 | .Trashes
22 | .VolumeIcon.icns
23 | .com.apple.timemachine.donotpresent
24 |
25 | # Directories potentially created on remote AFP share
26 | .AppleDB
27 | .AppleDesktop
28 | Network Trash Folder
29 | Temporary Items
30 | .apdisk
31 |
32 | ### Node ###
33 | # Logs
34 | logs
35 | *.log
36 | npm-debug.log*
37 | yarn-debug.log*
38 | yarn-error.log*
39 |
40 | # Runtime data
41 | pids
42 | *.pid
43 | *.seed
44 | *.pid.lock
45 |
46 | # Directory for instrumented libs generated by jscoverage/JSCover
47 | lib-cov
48 |
49 | # Coverage directory used by tools like istanbul
50 | coverage
51 |
52 | # nyc test coverage
53 | .nyc_output
54 |
55 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
56 | .grunt
57 |
58 | # Bower dependency directory (https://bower.io/)
59 | bower_components
60 |
61 | # node-waf configuration
62 | .lock-wscript
63 |
64 | # Compiled binary addons (http://nodejs.org/api/addons.html)
65 | build/Release
66 |
67 | # Dependency directories
68 | node_modules/
69 | jspm_packages/
70 |
71 | # Typescript v1 declaration files
72 | typings/
73 |
74 | # Optional npm cache directory
75 | .npm
76 |
77 | # Optional eslint cache
78 | .eslintcache
79 |
80 | # Optional REPL history
81 | .node_repl_history
82 |
83 | # Output of 'npm pack'
84 | *.tgz
85 |
86 | # Yarn Integrity file
87 | .yarn-integrity
88 |
89 | # dotenv environment variables file
90 | .env
91 |
92 |
93 | # End of https://www.gitignore.io/api/macOS,node
94 |
--------------------------------------------------------------------------------
/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "esversion": 6,
3 | "browser": true,
4 | "browserify": true,
5 | "jquery": true,
6 | "devel": true,
7 |
8 | "eqeqeq": true,
9 | "eqnull": true,
10 | "undef": true,
11 | "unused": true,
12 | "plusplus": true,
13 | "quotmark": "single",
14 | "expr": true
15 | }
16 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Lorenzo Zottar
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | 
3 |
4 | **gulp-beer**: better error reporting.
5 |
6 | gulp-beer is a simple error handler function that provides some extra features:
7 |
8 | - **Interactive System Notification** (thanks to [node-notifier](https://github.com/mikaelbr/node-notifier))
9 | - **Custom Server for Errors** (opened on notification click) that display all your errors in a more pleasent and straightforward way.
10 |
11 | **Interactive System Notification**
12 | 
13 |
14 | **Custom Server for Errors**
15 | 
16 |
17 | ## Installation
18 |
19 | ```
20 | $ npm install --save-dev gulp-beer
21 | ```
22 |
23 | ## Usage
24 |
25 | Require gulp-beer in your *gulpfile.js*:
26 |
27 | ```js
28 | var gulpBeer = require('gulp-beer');
29 | ```
30 |
31 | than simply pass required function as error handler function wherever you like:
32 |
33 | ```js
34 | gulp.src('*')
35 | // stream error
36 | .on('error', gulpBeer)
37 | // Plumber
38 | .pipe(plumber({errorHandler: gulpBeer}))
39 | // Other error listener
40 | .pipe(sass().on('error', gulpBeer))
41 | ```
42 |
43 | You can also call it manually if an error object must be handled
44 |
45 | ```js
46 | var customFunction(err, result) {
47 | if (err) gulpBeer(err);
48 | }
49 | ```
50 |
51 | ## (!!) Start error server (!!)
52 |
53 | Since error server prevents the gulp process to finish, it has to be started manually when needed (usually when performing a watching task).
54 |
55 | Error Handler function expose the server object, so you can do:
56 |
57 | ```js
58 | gulpBeer.server.start() // to start the error server
59 | ```
60 |
61 | ```js
62 | gulpBeer.server.stop() // to stop the error server
63 | ```
64 |
65 | A simple usage example:
66 |
67 | ```js
68 | var gulp = require('gulp');
69 | var gulpBeer = require('gulp-beer');
70 | var plumber = require('gulp-plumber');
71 | var sass = require('gulp-sass');
72 |
73 | function build() {
74 | return gulp.src('./src/css/*.scss')
75 | .pipe(plumber({errorHandler: gulpBeer}))
76 | .pipe(sass())
77 | .pipe(gulp.dest('./dist/css'));
78 | }
79 |
80 | gulp.task('build', build);
81 | gulp.task('watch', function() {
82 | gulpBeer.server.start();
83 | gulp.watch('./src/css/*.scss', ['build']);
84 | });
85 |
86 |
87 | ```
88 |
89 | Otherwise, if you prefer start it automatically, take a look at the option server.autostart in the "customize handler" section.
90 |
91 |
92 | ## Customize Handler
93 |
94 | If you like, you can customize the error handler function and the error server.
95 |
96 | First of all require the custom module:
97 |
98 | ```js
99 | var gulpBeerFactory = require('gulp-beer/custom');
100 | ```
101 | This will return a factory for the error handler function, which accepts some options as first parameter.
102 |
103 | ```js
104 | var errorHandler = gulpBeerFactory(options);
105 | ```
106 |
107 | #### Options
108 | ---
109 |
110 | `consoleError` [function] : the function that will be used to print the error in the console.
111 |
112 | It receives the error object as first argument, decorated with a custom property:
113 |
114 | - `serverUrl` [string | false]: the link to the custom error server related to this specific error
115 |
116 | ---
117 |
118 | `title` [string] Title of the system notification
119 |
120 | ---
121 |
122 | `sound` [boolean | string] Notification sound as described [here](https://github.com/mikaelbr/node-notifier#cross-platform-advanced-usage)
123 |
124 | ---
125 |
126 | `icon` [boolean | string] Notification sound as described [here](https://github.com/mikaelbr/node-notifier#cross-platform-advanced-usage)
127 |
128 | ---
129 |
130 | `server` [object | false] Server configuration object. If `false` the server start will be prevented also if started manually.
131 |
132 | Server configuration object accepts the following properties:
133 |
134 | - `port` [number] : Port on which the server will listen
135 | - `autostart` [boolean] : If true, the server will be started automatically
136 | - `silent` [boolean] : Silents server console output
137 |
--------------------------------------------------------------------------------
/assets/beer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lordgiotto/gulp-beer/0568f213e818a074f15251f1e77d675ee7f92fc8/assets/beer.png
--------------------------------------------------------------------------------
/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lordgiotto/gulp-beer/0568f213e818a074f15251f1e77d675ee7f92fc8/assets/logo.png
--------------------------------------------------------------------------------
/assets/screens/notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lordgiotto/gulp-beer/0568f213e818a074f15251f1e77d675ee7f92fc8/assets/screens/notification.png
--------------------------------------------------------------------------------
/assets/screens/server.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lordgiotto/gulp-beer/0568f213e818a074f15251f1e77d675ee7f92fc8/assets/screens/server.png
--------------------------------------------------------------------------------
/custom.js:
--------------------------------------------------------------------------------
1 | const handler = require('./lib/errorHandler');
2 |
3 | module.exports = handler;
--------------------------------------------------------------------------------
/errorServerRoot/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Error
5 |
6 |
7 |
8 |
9 |
15 | {{#errors}}
16 | {{#isSingle}}
17 |
All Errors
18 |
{{date}}
19 | {{/isSingle}}
20 | {{^isSingle}}
21 |
{{date}}
22 | {{/isSingle}}
23 |
24 |
Message
25 |
{{message}}
26 |
Stack
27 |
{{stack}}
28 |
29 | {{/errors}}
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/errorServerRoot/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #bdc3c7;
3 | font-family: sans-serif;
4 | font-size: 14px;
5 | }
6 |
7 | .header {
8 | text-align: center;
9 | padding-bottom: 20px;
10 | }
11 |
12 | .header .logo {
13 | font-size: 64px;
14 | }
15 |
16 | .header .brand {
17 | font-size: 12px;
18 | text-transform: lowercase;
19 | color: #444444;
20 | }
21 |
22 | .header .brand em {
23 | font-style: normal;
24 | font-weight: bold;
25 | }
26 |
27 | .wrapper {
28 | box-sizing: border-box;
29 | width: 100%;
30 | max-width: 900px;
31 | margin: 0 auto;
32 | padding: 20px;
33 | }
34 |
35 | .errorBar {
36 | display: block;
37 | padding: 10px;
38 | margin: 5px 0;
39 | font-size: .7rem;
40 | text-align: center;
41 | background-color: #393939;
42 | color: #ecf0f1;
43 | text-decoration: none;
44 | box-shadow: 0 0 8px #aaaaaa;
45 | }
46 |
47 | .errorBar.archive {
48 | margin-top: 27px;
49 | }
50 |
51 | .errorBar.archive:hover {
52 | background-color: #c0392b;
53 | }
54 |
55 | .goback {
56 | display: inline-block;
57 | padding: 5px 10px;
58 | font-size: 10px;
59 | color: black;
60 | background-color: #fbfbfb;
61 | text-decoration: none;
62 | text-transform: uppercase;
63 | box-shadow: 0 0 8px #aaaaaa;
64 | }
65 |
66 | .goback:hover {
67 | background-color: #dddddd;
68 | }
69 |
70 | .goback:before {
71 | content: "";
72 | display: inline-block;
73 | width: 0;
74 | height: 0;
75 | margin-right: 5px;
76 | border-style: solid;
77 | border-width: 4.5px 5px 4.5px 0;
78 | border-color: transparent #000000 transparent transparent;
79 | }
80 |
81 | .section {
82 | padding: 20px;
83 | background-color: #fbfbfb;
84 | box-shadow: 0 0 8px #aaaaaa;
85 | margin-bottom: 20px;
86 | }
87 |
88 | pre {
89 | overflow-x: auto;
90 | max-width: 100%;
91 | font-size: .8rem;
92 | line-height: 1.5em;
93 | padding: 15px 10px !important;
94 | }
95 |
96 | /* desert scheme ported from vim to google prettify */
97 | pre.prettyprint { display: block; background-color: #333 }
98 | pre .nocode { background-color: none; color: #000 }
99 | pre .str { color: #ffa0a0 } /* string - pink */
100 | pre .kwd { color: #f0e68c; font-weight: bold }
101 | pre .com { color: #87ceeb } /* comment - skyblue */
102 | pre .typ { color: #98fb98 } /* type - lightgreen */
103 | pre .lit { color: #cd5c5c } /* literal - darkred */
104 | pre .pun { color: #fff } /* punctuation */
105 | pre .pln { color: #fff } /* plaintext */
106 | pre .tag { color: #f0e68c; font-weight: bold } /* html/xml tag - lightyellow */
107 | pre .atn { color: #bdb76b; font-weight: bold } /* attribute name - khaki */
108 | pre .atv { color: #ffa0a0 } /* attribute value - pink */
109 | pre .dec { color: #98fb98 } /* decimal - lightgreen */
110 |
111 | /* Specify class=linenums on a pre to get line numbering */
112 | ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE } /* IE indents via margin-left */
113 | li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }
114 | /* Alternate shading for lines */
115 | li.L1,li.L3,li.L5,li.L7,li.L9 { }
116 |
117 | @media print {
118 | pre.prettyprint { background-color: none }
119 | pre .str, code .str { color: #060 }
120 | pre .kwd, code .kwd { color: #006; font-weight: bold }
121 | pre .com, code .com { color: #600; font-style: italic }
122 | pre .typ, code .typ { color: #404; font-weight: bold }
123 | pre .lit, code .lit { color: #044 }
124 | pre .pun, code .pun { color: #440 }
125 | pre .pln, code .pln { color: #000 }
126 | pre .tag, code .tag { color: #006; font-weight: bold }
127 | pre .atn, code .atn { color: #404 }
128 | pre .atv, code .atv { color: #060 }
129 | }
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | const handler = require('./lib/errorHandler');
2 |
3 | module.exports = handler();
--------------------------------------------------------------------------------
/lib/ErrorList.js:
--------------------------------------------------------------------------------
1 | const uniqid = require('uniqid');
2 | const moment = require('moment');
3 | const stripAnsi = require('strip-ansi');
4 |
5 | class ErrorList {
6 |
7 | constructor() {
8 | this._errors = [];
9 | }
10 |
11 | add(err) {
12 | const errorId = uniqid();
13 | this._errors.unshift({
14 | errorId: errorId,
15 | date: moment().format('MM-DD-YYYY HH:mm:ss'),
16 | message: stripAnsi(err.message || ''),
17 | stack: stripAnsi(err.stack || '')
18 | });
19 | return errorId;
20 | }
21 |
22 | getError(errorId) {
23 | const matchedErrors = this._errors.filter((error) => {
24 | return error.errorId === errorId;
25 | });
26 | return matchedErrors.length > 0 ? matchedErrors[0] : false;
27 | }
28 |
29 | get all() {
30 | return this._errors;
31 | }
32 | }
33 |
34 | module.exports = ErrorList;
--------------------------------------------------------------------------------
/lib/ErrorServer.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const url = require('url');
3 |
4 | const gutil = require('gulp-util');
5 | const express = require('express');
6 | const mustacheExpress = require('mustache-express');
7 | const extend = require('extend');
8 |
9 | const ErrorList = require('./ErrorList');
10 |
11 |
12 | class ErrorServer {
13 | constructor(options = {}) {
14 | this.errors = new ErrorList();
15 | this._listener = false;
16 | if (options !== false) {
17 | this._options = extend({}, ErrorServer.DEFAULT_OPTIONS, options);
18 | this._port = this._options.port;
19 | this._serverRoot = this._options.serverRoot;
20 | this._server = this._createServer();
21 | if (this._options.autostart) {
22 | this.start();
23 | }
24 | }
25 | }
26 |
27 | start() {
28 | if (!this._server) {
29 | if (!this._options.silent) gutil.log(gutil.colors.black.bgRed.bold(' !! Error Server Disabled '));
30 | return;
31 | }
32 | if (this._listener) {
33 | if (!this._options.silent) gutil.log(gutil.colors.black.bgRed.bold(' !! Error Server already started '));
34 | return;
35 | }
36 | this._listener = this._server.listen(this._port || 4001, () => {
37 | if (!this._options.silent) gutil.log(gutil.colors.black.bgGreen.bold(' @ Starting Error Server'));
38 | });
39 | }
40 |
41 | stop() {
42 | if (!this._listener) {
43 | if (!this._options.silent) gutil.log(gutil.colors.black.bgRed.bold(' !! Error Server is not running '));
44 | return;
45 | }
46 | if (!this._options.silent) gutil.log(gutil.colors.black.bgRed.bold(' @ Stopping Error Server'));
47 | this._listener.close();
48 | this._listener = false;
49 | }
50 |
51 | addError(err) {
52 | const errorId = this.errors.add(err);
53 | err.serverUrl = this.getErrorLink(errorId);
54 | return err;
55 | }
56 |
57 | getErrorLink(errorId) {
58 | const error = this.errors.getError(errorId);
59 | if (!this.isUp || !error) return false;
60 | const urlParts = {
61 | protocol: 'http',
62 | hostname: 'localhost',
63 | port: this._port,
64 | pathname: errorId
65 | };
66 | return url.format(urlParts);
67 | }
68 |
69 | _createServer() {
70 | const app = express();
71 | app.engine('html', mustacheExpress());
72 | app.set('view engine', 'mustache');
73 | app.set('views', this._serverRoot);
74 | app.get('/', (req, res) => {
75 | res.render('index.html', {
76 | isSingle: false,
77 | errors: this.errors.all
78 | });
79 | });
80 | app.get('/:errorId', (req, res, next) => {
81 | const matchedErrors = this.errors.getError(req.params.errorId);
82 | if (matchedErrors) {
83 | res.render('index.html', {
84 | isSingle: true,
85 | errors: matchedErrors
86 | });
87 | } else {
88 | next();
89 | }
90 | });
91 | app.use(express.static(this._serverRoot));
92 | return app;
93 | }
94 |
95 | get isUp() {
96 | return !!this._listener;
97 | }
98 |
99 | }
100 |
101 | ErrorServer.DEFAULT_OPTIONS = {
102 | port: 4001,
103 | serverRoot: path.join(__dirname, '../errorServerRoot'),
104 | autostart: false,
105 | silent: false
106 | };
107 |
108 | module.exports = ErrorServer;
--------------------------------------------------------------------------------
/lib/errorHandler.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const extend = require('extend');
3 | const gutil = require('gulp-util');
4 | const notifier = require('node-notifier');
5 | const opn = require('opn');
6 |
7 | const ErrorServer = require('./ErrorServer');
8 |
9 | const defaultConsoleError = (err) => {
10 | const errorElements = ['plugin', 'file', 'fileName', 'line', 'lineNumber'];
11 | gutil.log('*********************************************');
12 | gutil.log(gutil.colors.bgRed.white('Compilation error.'));
13 | errorElements.forEach((el) => {
14 | if (err.hasOwnProperty(el)) {
15 | console.log('\n' + gutil.colors.red.bold(el.toUpperCase() + ': ', err[el]));
16 | }
17 | });
18 | console.log ('\n' + gutil.colors.red(err.message || err.stack));
19 | if (err.serverUrl) {
20 | console.log ('\n🍺 ' + err.serverUrl + '\n');
21 | }
22 | gutil.log('*********************************************');
23 | };
24 |
25 | const DEFAULT_OPTIONS = {
26 | consoleError: defaultConsoleError,
27 | title: 'Compile Error',
28 | sound: true,
29 | icon: path.join(__dirname, '../assets/beer.png'),
30 | server: {
31 | port: 4001
32 | },
33 | };
34 |
35 | function errorHandlerFactory(options) {
36 | const handlerOptions = extend(true, {}, DEFAULT_OPTIONS, options || {});
37 |
38 | const server = new ErrorServer(handlerOptions.server);
39 |
40 | const errorHandler = function(err) {
41 | const savedError = server.addError(err);
42 |
43 | handlerOptions.consoleError(err);
44 |
45 | notifier.notify({
46 | 'title': handlerOptions.title,
47 | 'subtitle': path.basename(err.file || ''),
48 | 'message': err.message,
49 | 'sound': handlerOptions.sound,
50 | 'icon': handlerOptions.icon,
51 | 'closeLabel': !!savedError.serverUrl ? 'Hide': void 0,
52 | 'actions': !!savedError.serverUrl ? 'View': void 0,
53 | 'timeout': !!savedError.serverUrl ? 10 : void 0,
54 | 'wait': !!savedError.serverUrl,
55 | 'sender': Date.now()
56 | }, (err, response) => {
57 | if (err || !savedError.serverUrl) return;
58 | const proceed = (response.indexOf('clicked') !== -1) ||
59 | (response.indexOf('activate') !== -1);
60 | if (proceed) opn(savedError.serverUrl);
61 | });
62 | };
63 |
64 | errorHandler.server = server;
65 |
66 | return errorHandler;
67 | }
68 |
69 | module.exports = errorHandlerFactory;
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gulp-beer",
3 | "version": "1.0.2",
4 | "description": "Gulp (Be)tter (E)rror (R)eporting",
5 | "keywords": [
6 | "gulp",
7 | "error",
8 | "report",
9 | "beer"
10 | ],
11 | "main": "index.js",
12 | "scripts": {
13 | "test": "echo \"Error: no test specified\" && exit 1"
14 | },
15 | "author": "Lorenzo Zottar ",
16 | "repository": "https://github.com/lordgiotto/gulp-beer.git",
17 | "license": "MIT",
18 | "dependencies": {
19 | "express": "^4.15.2",
20 | "extend": "^3.0.0",
21 | "gulp-plumber": "^1.1.0",
22 | "gulp-util": "^3.0.8",
23 | "moment": "^2.18.0",
24 | "mustache": "^2.3.0",
25 | "mustache-express": "^1.2.4",
26 | "node-notifier": "^5.1.2",
27 | "opn": "^4.0.2",
28 | "strip-ansi": "^3.0.1",
29 | "through2": "^2.0.3",
30 | "uniqid": "^4.1.1"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | accepts@~1.3.3:
6 | version "1.3.3"
7 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
8 | dependencies:
9 | mime-types "~2.1.11"
10 | negotiator "0.6.1"
11 |
12 | ansi-regex@^2.0.0:
13 | version "2.1.1"
14 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
15 |
16 | ansi-styles@^2.2.1:
17 | version "2.2.1"
18 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
19 |
20 | array-differ@^1.0.0:
21 | version "1.0.0"
22 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
23 |
24 | array-flatten@1.1.1:
25 | version "1.1.1"
26 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
27 |
28 | array-uniq@^1.0.2:
29 | version "1.0.3"
30 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
31 |
32 | async@~0.2.10:
33 | version "0.2.10"
34 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
35 |
36 | beeper@^1.0.0:
37 | version "1.1.1"
38 | resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809"
39 |
40 | buffer-shims@^1.0.0:
41 | version "1.0.0"
42 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
43 |
44 | chalk@^1.0.0, chalk@^1.1.1:
45 | version "1.1.3"
46 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
47 | dependencies:
48 | ansi-styles "^2.2.1"
49 | escape-string-regexp "^1.0.2"
50 | has-ansi "^2.0.0"
51 | strip-ansi "^3.0.0"
52 | supports-color "^2.0.0"
53 |
54 | clone-stats@^0.0.1:
55 | version "0.0.1"
56 | resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
57 |
58 | clone@^1.0.0:
59 | version "1.0.2"
60 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
61 |
62 | content-disposition@0.5.2:
63 | version "0.5.2"
64 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
65 |
66 | content-type@~1.0.2:
67 | version "1.0.2"
68 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
69 |
70 | cookie-signature@1.0.6:
71 | version "1.0.6"
72 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
73 |
74 | cookie@0.3.1:
75 | version "0.3.1"
76 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
77 |
78 | core-util-is@~1.0.0:
79 | version "1.0.2"
80 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
81 |
82 | dateformat@^2.0.0:
83 | version "2.0.0"
84 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17"
85 |
86 | debug@2.6.1:
87 | version "2.6.1"
88 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
89 | dependencies:
90 | ms "0.7.2"
91 |
92 | depd@1.1.0, depd@~1.1.0:
93 | version "1.1.0"
94 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
95 |
96 | destroy@~1.0.4:
97 | version "1.0.4"
98 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
99 |
100 | duplexer2@0.0.2:
101 | version "0.0.2"
102 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
103 | dependencies:
104 | readable-stream "~1.1.9"
105 |
106 | ee-first@1.1.1:
107 | version "1.1.1"
108 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
109 |
110 | encodeurl@~1.0.1:
111 | version "1.0.1"
112 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
113 |
114 | escape-html@~1.0.3:
115 | version "1.0.3"
116 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
117 |
118 | escape-string-regexp@^1.0.2:
119 | version "1.0.5"
120 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
121 |
122 | etag@~1.8.0:
123 | version "1.8.0"
124 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
125 |
126 | express@^4.15.2:
127 | version "4.15.2"
128 | resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35"
129 | dependencies:
130 | accepts "~1.3.3"
131 | array-flatten "1.1.1"
132 | content-disposition "0.5.2"
133 | content-type "~1.0.2"
134 | cookie "0.3.1"
135 | cookie-signature "1.0.6"
136 | debug "2.6.1"
137 | depd "~1.1.0"
138 | encodeurl "~1.0.1"
139 | escape-html "~1.0.3"
140 | etag "~1.8.0"
141 | finalhandler "~1.0.0"
142 | fresh "0.5.0"
143 | merge-descriptors "1.0.1"
144 | methods "~1.1.2"
145 | on-finished "~2.3.0"
146 | parseurl "~1.3.1"
147 | path-to-regexp "0.1.7"
148 | proxy-addr "~1.1.3"
149 | qs "6.4.0"
150 | range-parser "~1.2.0"
151 | send "0.15.1"
152 | serve-static "1.12.1"
153 | setprototypeof "1.0.3"
154 | statuses "~1.3.1"
155 | type-is "~1.6.14"
156 | utils-merge "1.0.0"
157 | vary "~1.1.0"
158 |
159 | extend@^3.0.0:
160 | version "3.0.0"
161 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
162 |
163 | fancy-log@^1.1.0:
164 | version "1.3.0"
165 | resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948"
166 | dependencies:
167 | chalk "^1.1.1"
168 | time-stamp "^1.0.0"
169 |
170 | finalhandler@~1.0.0:
171 | version "1.0.0"
172 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.0.tgz#b5691c2c0912092f18ac23e9416bde5cd7dc6755"
173 | dependencies:
174 | debug "2.6.1"
175 | encodeurl "~1.0.1"
176 | escape-html "~1.0.3"
177 | on-finished "~2.3.0"
178 | parseurl "~1.3.1"
179 | statuses "~1.3.1"
180 | unpipe "~1.0.0"
181 |
182 | forwarded@~0.1.0:
183 | version "0.1.0"
184 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
185 |
186 | fresh@0.5.0:
187 | version "0.5.0"
188 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e"
189 |
190 | glogg@^1.0.0:
191 | version "1.0.0"
192 | resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5"
193 | dependencies:
194 | sparkles "^1.0.0"
195 |
196 | growly@^1.3.0:
197 | version "1.3.0"
198 | resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
199 |
200 | gulp-plumber@^1.1.0:
201 | version "1.1.0"
202 | resolved "https://registry.yarnpkg.com/gulp-plumber/-/gulp-plumber-1.1.0.tgz#f12176c2d0422f60306c242fff6a01a394faba09"
203 | dependencies:
204 | gulp-util "^3"
205 | through2 "^2"
206 |
207 | gulp-util@^3, gulp-util@^3.0.8:
208 | version "3.0.8"
209 | resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
210 | dependencies:
211 | array-differ "^1.0.0"
212 | array-uniq "^1.0.2"
213 | beeper "^1.0.0"
214 | chalk "^1.0.0"
215 | dateformat "^2.0.0"
216 | fancy-log "^1.1.0"
217 | gulplog "^1.0.0"
218 | has-gulplog "^0.1.0"
219 | lodash._reescape "^3.0.0"
220 | lodash._reevaluate "^3.0.0"
221 | lodash._reinterpolate "^3.0.0"
222 | lodash.template "^3.0.0"
223 | minimist "^1.1.0"
224 | multipipe "^0.1.2"
225 | object-assign "^3.0.0"
226 | replace-ext "0.0.1"
227 | through2 "^2.0.0"
228 | vinyl "^0.5.0"
229 |
230 | gulplog@^1.0.0:
231 | version "1.0.0"
232 | resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5"
233 | dependencies:
234 | glogg "^1.0.0"
235 |
236 | has-ansi@^2.0.0:
237 | version "2.0.0"
238 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
239 | dependencies:
240 | ansi-regex "^2.0.0"
241 |
242 | has-gulplog@^0.1.0:
243 | version "0.1.0"
244 | resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
245 | dependencies:
246 | sparkles "^1.0.0"
247 |
248 | http-errors@~1.6.1:
249 | version "1.6.1"
250 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257"
251 | dependencies:
252 | depd "1.1.0"
253 | inherits "2.0.3"
254 | setprototypeof "1.0.3"
255 | statuses ">= 1.3.1 < 2"
256 |
257 | inherits@2.0.3, inherits@~2.0.1:
258 | version "2.0.3"
259 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
260 |
261 | ipaddr.js@1.2.0:
262 | version "1.2.0"
263 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4"
264 |
265 | isarray@0.0.1:
266 | version "0.0.1"
267 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
268 |
269 | isarray@~1.0.0:
270 | version "1.0.0"
271 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
272 |
273 | isexe@^1.1.1:
274 | version "1.1.2"
275 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
276 |
277 | lodash._basecopy@^3.0.0:
278 | version "3.0.1"
279 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
280 |
281 | lodash._basetostring@^3.0.0:
282 | version "3.0.1"
283 | resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
284 |
285 | lodash._basevalues@^3.0.0:
286 | version "3.0.0"
287 | resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
288 |
289 | lodash._getnative@^3.0.0:
290 | version "3.9.1"
291 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
292 |
293 | lodash._isiterateecall@^3.0.0:
294 | version "3.0.9"
295 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
296 |
297 | lodash._reescape@^3.0.0:
298 | version "3.0.0"
299 | resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"
300 |
301 | lodash._reevaluate@^3.0.0:
302 | version "3.0.0"
303 | resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed"
304 |
305 | lodash._reinterpolate@^3.0.0:
306 | version "3.0.0"
307 | resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
308 |
309 | lodash._root@^3.0.0:
310 | version "3.0.1"
311 | resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
312 |
313 | lodash.escape@^3.0.0:
314 | version "3.2.0"
315 | resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698"
316 | dependencies:
317 | lodash._root "^3.0.0"
318 |
319 | lodash.isarguments@^3.0.0:
320 | version "3.1.0"
321 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
322 |
323 | lodash.isarray@^3.0.0:
324 | version "3.0.4"
325 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
326 |
327 | lodash.keys@^3.0.0:
328 | version "3.1.2"
329 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
330 | dependencies:
331 | lodash._getnative "^3.0.0"
332 | lodash.isarguments "^3.0.0"
333 | lodash.isarray "^3.0.0"
334 |
335 | lodash.restparam@^3.0.0:
336 | version "3.6.1"
337 | resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
338 |
339 | lodash.template@^3.0.0:
340 | version "3.6.2"
341 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f"
342 | dependencies:
343 | lodash._basecopy "^3.0.0"
344 | lodash._basetostring "^3.0.0"
345 | lodash._basevalues "^3.0.0"
346 | lodash._isiterateecall "^3.0.0"
347 | lodash._reinterpolate "^3.0.0"
348 | lodash.escape "^3.0.0"
349 | lodash.keys "^3.0.0"
350 | lodash.restparam "^3.0.0"
351 | lodash.templatesettings "^3.0.0"
352 |
353 | lodash.templatesettings@^3.0.0:
354 | version "3.1.1"
355 | resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5"
356 | dependencies:
357 | lodash._reinterpolate "^3.0.0"
358 | lodash.escape "^3.0.0"
359 |
360 | lru-cache@~2.5.0:
361 | version "2.5.2"
362 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.5.2.tgz#1fddad938aae1263ce138680be1b3f591c0ab41c"
363 |
364 | macaddress@^0.2.8:
365 | version "0.2.8"
366 | resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
367 |
368 | media-typer@0.3.0:
369 | version "0.3.0"
370 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
371 |
372 | merge-descriptors@1.0.1:
373 | version "1.0.1"
374 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
375 |
376 | methods@~1.1.2:
377 | version "1.1.2"
378 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
379 |
380 | mime-db@~1.26.0:
381 | version "1.26.0"
382 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff"
383 |
384 | mime-types@~2.1.11, mime-types@~2.1.13:
385 | version "2.1.14"
386 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee"
387 | dependencies:
388 | mime-db "~1.26.0"
389 |
390 | mime@1.3.4:
391 | version "1.3.4"
392 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
393 |
394 | minimist@^1.1.0:
395 | version "1.2.0"
396 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
397 |
398 | moment@^2.18.0:
399 | version "2.18.0"
400 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.0.tgz#6cfec6a495eca915d02600a67020ed994937252c"
401 |
402 | ms@0.7.2:
403 | version "0.7.2"
404 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
405 |
406 | multipipe@^0.1.2:
407 | version "0.1.2"
408 | resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
409 | dependencies:
410 | duplexer2 "0.0.2"
411 |
412 | mustache-express@^1.2.4:
413 | version "1.2.4"
414 | resolved "https://registry.yarnpkg.com/mustache-express/-/mustache-express-1.2.4.tgz#4cbc876367b676cf8b7020921781c6a1912bf1ab"
415 | dependencies:
416 | async "~0.2.10"
417 | lru-cache "~2.5.0"
418 | mustache "~2.3.0"
419 |
420 | mustache@^2.3.0, mustache@~2.3.0:
421 | version "2.3.0"
422 | resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.0.tgz#4028f7778b17708a489930a6e52ac3bca0da41d0"
423 |
424 | negotiator@0.6.1:
425 | version "0.6.1"
426 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
427 |
428 | node-notifier@^5.1.2:
429 | version "5.1.2"
430 | resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff"
431 | dependencies:
432 | growly "^1.3.0"
433 | semver "^5.3.0"
434 | shellwords "^0.1.0"
435 | which "^1.2.12"
436 |
437 | object-assign@^3.0.0:
438 | version "3.0.0"
439 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
440 |
441 | object-assign@^4.0.1:
442 | version "4.1.1"
443 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
444 |
445 | on-finished@~2.3.0:
446 | version "2.3.0"
447 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
448 | dependencies:
449 | ee-first "1.1.1"
450 |
451 | opn@^4.0.2:
452 | version "4.0.2"
453 | resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
454 | dependencies:
455 | object-assign "^4.0.1"
456 | pinkie-promise "^2.0.0"
457 |
458 | parseurl@~1.3.1:
459 | version "1.3.1"
460 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
461 |
462 | path-to-regexp@0.1.7:
463 | version "0.1.7"
464 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
465 |
466 | pinkie-promise@^2.0.0:
467 | version "2.0.1"
468 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
469 | dependencies:
470 | pinkie "^2.0.0"
471 |
472 | pinkie@^2.0.0:
473 | version "2.0.4"
474 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
475 |
476 | process-nextick-args@~1.0.6:
477 | version "1.0.7"
478 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
479 |
480 | proxy-addr@~1.1.3:
481 | version "1.1.3"
482 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074"
483 | dependencies:
484 | forwarded "~0.1.0"
485 | ipaddr.js "1.2.0"
486 |
487 | qs@6.4.0:
488 | version "6.4.0"
489 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
490 |
491 | range-parser@~1.2.0:
492 | version "1.2.0"
493 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
494 |
495 | readable-stream@^2.1.5:
496 | version "2.2.6"
497 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816"
498 | dependencies:
499 | buffer-shims "^1.0.0"
500 | core-util-is "~1.0.0"
501 | inherits "~2.0.1"
502 | isarray "~1.0.0"
503 | process-nextick-args "~1.0.6"
504 | string_decoder "~0.10.x"
505 | util-deprecate "~1.0.1"
506 |
507 | readable-stream@~1.1.9:
508 | version "1.1.14"
509 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
510 | dependencies:
511 | core-util-is "~1.0.0"
512 | inherits "~2.0.1"
513 | isarray "0.0.1"
514 | string_decoder "~0.10.x"
515 |
516 | replace-ext@0.0.1:
517 | version "0.0.1"
518 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
519 |
520 | semver@^5.3.0:
521 | version "5.3.0"
522 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
523 |
524 | send@0.15.1:
525 | version "0.15.1"
526 | resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f"
527 | dependencies:
528 | debug "2.6.1"
529 | depd "~1.1.0"
530 | destroy "~1.0.4"
531 | encodeurl "~1.0.1"
532 | escape-html "~1.0.3"
533 | etag "~1.8.0"
534 | fresh "0.5.0"
535 | http-errors "~1.6.1"
536 | mime "1.3.4"
537 | ms "0.7.2"
538 | on-finished "~2.3.0"
539 | range-parser "~1.2.0"
540 | statuses "~1.3.1"
541 |
542 | serve-static@1.12.1:
543 | version "1.12.1"
544 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039"
545 | dependencies:
546 | encodeurl "~1.0.1"
547 | escape-html "~1.0.3"
548 | parseurl "~1.3.1"
549 | send "0.15.1"
550 |
551 | setprototypeof@1.0.3:
552 | version "1.0.3"
553 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
554 |
555 | shellwords@^0.1.0:
556 | version "0.1.0"
557 | resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14"
558 |
559 | sparkles@^1.0.0:
560 | version "1.0.0"
561 | resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3"
562 |
563 | "statuses@>= 1.3.1 < 2", statuses@~1.3.1:
564 | version "1.3.1"
565 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
566 |
567 | string_decoder@~0.10.x:
568 | version "0.10.31"
569 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
570 |
571 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
572 | version "3.0.1"
573 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
574 | dependencies:
575 | ansi-regex "^2.0.0"
576 |
577 | supports-color@^2.0.0:
578 | version "2.0.0"
579 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
580 |
581 | through2@^2, through2@^2.0.0, through2@^2.0.3:
582 | version "2.0.3"
583 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
584 | dependencies:
585 | readable-stream "^2.1.5"
586 | xtend "~4.0.1"
587 |
588 | time-stamp@^1.0.0:
589 | version "1.0.1"
590 | resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151"
591 |
592 | type-is@~1.6.14:
593 | version "1.6.14"
594 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2"
595 | dependencies:
596 | media-typer "0.3.0"
597 | mime-types "~2.1.13"
598 |
599 | uniqid@^4.1.1:
600 | version "4.1.1"
601 | resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
602 | dependencies:
603 | macaddress "^0.2.8"
604 |
605 | unpipe@~1.0.0:
606 | version "1.0.0"
607 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
608 |
609 | util-deprecate@~1.0.1:
610 | version "1.0.2"
611 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
612 |
613 | utils-merge@1.0.0:
614 | version "1.0.0"
615 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
616 |
617 | vary@~1.1.0:
618 | version "1.1.0"
619 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140"
620 |
621 | vinyl@^0.5.0:
622 | version "0.5.3"
623 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde"
624 | dependencies:
625 | clone "^1.0.0"
626 | clone-stats "^0.0.1"
627 | replace-ext "0.0.1"
628 |
629 | which@^1.2.12:
630 | version "1.2.12"
631 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
632 | dependencies:
633 | isexe "^1.1.1"
634 |
635 | xtend@~4.0.1:
636 | version "4.0.1"
637 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
638 |
--------------------------------------------------------------------------------