Codebase list libjs-cssrelpreload / f24d7be
New upstream version 3.1.0+dfsg+~0.0.2 Xavier Guimard 3 years ago
25 changed file(s) with 1009 addition(s) and 950 deletion(s). Raw diff Collapse all Expand all
+0
-2
.gitignore less more
0 node_modules
1 dist
+0
-2
.jenkins less more
0 user: NONE
1 subdir: .
1111 "unused": true,
1212 "node": true,
1313 "loopfunc": true,
14 "predef": [ "window", "document", "define", "shoestring", "XMLHttpRequest", "ActiveXObject", "Window", "localStorage" ]
14
15 "browser": true,
16 "qunit": true,
17
18 "globals": {
19 "loadCSS": false,
20 "onloadCSS": false
21 }
1522 }
+0
-1
.repo-rt less more
0 .jenkins
+0
-6
.travis.yml less more
0 language: node_js
1 node_js:
2 - 6.11.1
3 before_script:
4 - npm install
5 script: grunt -v
00 /* global module:false */
11 module.exports = function(grunt) {
22
3 require( 'matchdep' ).filterDev( 'grunt-*' ).forEach( grunt.loadNpmTasks );
3 require( 'matchdep' ).filterDev( ['grunt-*', '!grunt-cli'] ).forEach( grunt.loadNpmTasks );
44
5 // Project configuration.
5 // Project configuration.
66 grunt.initConfig({
7 jshint: {
7 jshint: {
88 all: {
99 options: {
1010 jshintrc: ".jshintrc"
1111 },
1212
13 src: ['Gruntfile.js', '*.js']
13 src: [
14 '*.js',
15 'test/**/*.js',
16 'src/**/*.js',
17 ]
1418 }
1519 },
1620 concat: {
1721 dist: {
1822 files: {
1923 'dist/loadCSS.js': ['src/loadCSS.js'],
20 'dist/cssrelpreload.js': ['src/cssrelpreload.js'],
2124 'dist/onloadCSS.js': ['src/onloadCSS.js']
2225 }
2326 }
2427 },
2528 uglify: {
26 options: {
29 options: {
2730 preserveComments: /^\!/
2831 },
2932 dist: {
3033 files: {
3134 'dist/loadCSS.min.js': ['src/loadCSS.js'],
32 'dist/cssrelpreload.min.js': ['src/cssrelpreload.js'],
3335 'dist/onloadCSS.min.js': ['src/onloadCSS.js']
3436 }
3537 }
3739 qunit: {
3840 files: ['test/qunit/**/*.html']
3941 }
40 });
42 });
4143
4244 grunt.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);
4345 grunt.registerTask('stage', ['default']);
44
4546 };
00 # loadCSS
11
2 [![NPM version](http://img.shields.io/npm/v/fg-loadcss.svg)](https://www.npmjs.org/package/fg-loadcss) [![dependencies Status](https://david-dm.org/filamentgroup/loadCSS/status.svg)](https://david-dm.org/filamentgroup/loadCSS) [![devDependencies Status](https://david-dm.org/filamentgroup/loadCSS/dev-status.svg)](https://david-dm.org/filamentgroup/loadCSS?type=dev)
3
4 A function for loading CSS asynchronously
5 [c]2017 @scottjehl, @zachleat [Filament Group, Inc.](https://www.filamentgroup.com/)
2 A pattern for loading CSS asynchronously
3 [c]2020 @scottjehl, @zachleat [Filament Group, Inc.](https://www.filamentgroup.com/)
64 Licensed MIT
75
8 ## Why loadCSS?
6 ## Why an ansychronous CSS loader?
97
10 Referencing CSS stylesheets with `link[rel=stylesheet]` or `@import` causes browsers to delay page rendering while a stylesheet loads. When loading stylesheets that are not critical to the initial rendering of a page, this blocking behavior is undesirable. The new `<link rel="preload">` standard enables us to load stylesheets asynchronously, without blocking rendering, and loadCSS provides a JavaScript polyfill for that feature to allow it to work across browsers. Additionally, loadCSS offers a separate (and optional) JavaScript function for loading stylesheets dynamically.
11
12 * Latest release: https://github.com/filamentgroup/loadCSS/releases
13 * NPM: https://www.npmjs.com/package/fg-loadcss
14
15 ## Install via npm
16
17 `npm install fg-loadcss --save`
18
19 ## How To Use loadCSS (Recommended example)
20
21 loadCSS is designed to help load CSS files that are **not critical** to the initial rendering of the page, and instead desirable to load in an asynchronous manner. (_For including critical CSS in a page without blocking rendering, we recommend either inlining that CSS in a `style` element, or referencing it externally and server-pushing it using http/2. [Read more here](https://www.filamentgroup.com/lab/modernizing-delivery.html)_)
22
23 The standard markup pattern for loading files asynchronously is: `<link rel="preload">` ([W3C Spec](https://www.w3.org/TR/2015/WD-preload-20150721/)). We recommend using this markup pattern to reference your non-critical CSS files. `loadCSS`'s rel=preload polyfill is designed to enable this markup to work in browsers that don't yet support this feature ([view link rel="preload" support status](http://caniuse.com/#feat=link-rel-preload)).
24
25 For each CSS file you'd like to load asynchronously, use a `link` element like this:
26
27 ```html
28 <link rel="preload" href="path/to/mystylesheet.css" as="style">
29 ```
30
31 In browsers that support it, the `rel=preload` attribute will cause the browser to fetch the stylesheet, but it will not **apply** the CSS once it is loaded (it merely fetches it). To address this, we recommend using an `onload` attribute on the `link` that will apply the CSS when it finishes loading.
32
33 ```html
34 <link rel="preload" href="path/to/mystylesheet.css" as="style" onload="this.rel='stylesheet'">
35 ```
36
37 This step requires JavaScript to be enabled, so we recommend including an ordinary reference to your stylesheet inside a `noscript` element as a fallback.
38
39 ```html
40 <link rel="preload" href="path/to/mystylesheet.css" as="style" onload="this.rel='stylesheet'">
41 <noscript><link rel="stylesheet" href="path/to/mystylesheet.css"></noscript>
42 ```
43
44 We also recommend `null`ing the onload handler once it is used, since some browsers will occasionally re-call the handler upon switching the rel attribute to `stylesheet`:
45
46 ```html
47 <link rel="preload" href="path/to/mystylesheet.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
48 <noscript><link rel="stylesheet" href="path/to/mystylesheet.css"></noscript>
49 ```
50
51 After linking to your asynchronous stylesheet(s) this way, include the the [loadCSS rel=preload polyfill script](src/cssrelpreload.js) in your page. This file should be inlined or linked with http/2 server-push (a simple external script ).
52 Here's how they would look inlined in the page:
53
54 ```html
55 <link rel="preload" href="path/to/mystylesheet.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
56 <noscript><link rel="stylesheet" href="path/to/mystylesheet.css"></noscript>
57 <script>
58 /*! loadCSS rel=preload polyfill. [c]2017 Filament Group, Inc. MIT License */
59 (function(){ ... }());
60 </script>
61 ```
62 By including this script (_which became standalone and no longer dependent on loadCSS.js as of version 2.0_) will automatically detect if a browser supports `rel=preload`. In browsers that natively support `rel=preload`, the script will do nothing, allowing the browser to load and apply the asynchronous CSS (note the `onload` attribute above, which is there to set the `link`'s `rel` attribute to stylesheet once it finishes loading).
63
64 In browsers that do not support `rel=preload`, the script will apply a workaround (by temporarily manipulating the media attribute) to ensure that the file loads and applies asynchronously. It will also continue at a short interval to look for link elements in the DOM that need to be polyfilled. This means that the script will work from any location in the DOM (before or after the preload link(s)), but we do recommend placing the script **immediately after** all preload links for best performance.
65
66 Note: regardless of whether the browser supports `rel=preload` or not, the original link element in the source will be used to fetch and apply the stylesheet. Keep this in mind, as you may want to place the `link` in a particular location in your `head` element so that the CSS loads with an expected cascade order. As you'd expect, any `media` attribute present on the original link element will be retained when the polyfill is in play. When the polyfill has asynchronously loaded, it will be enabled immediately.
67
68 You can view a demo of this `rel=preload` pattern here: https://master-origin-loadcss.fgview.com/test/preload.html
8 Referencing CSS stylesheets with `link[rel=stylesheet]` or `@import` causes browsers to delay page rendering while a stylesheet loads. When loading stylesheets that are not critical to the initial rendering of a page, this blocking behavior is undesirable. The pattern below allows us to fetch and apply CSS asynchronously. If necessary, this repo also offers a separate (and optional) JavaScript function for loading stylesheets dynamically.
699
7010
71 ## Manual CSS loading with loadCSS
11 ## How to use
7212
73 The [loadCSS.js](https://github.com/filamentgroup/loadCSS/blob/master/src/loadCSS.js) file exposes a global `loadCSS` function that you can call to load CSS files programmatically, if needed. This file is no longer part of the loadCSS primary recommended workflow (which is purely a rel=preload polyfill), but it's handy for cases where you need to dynamically load CSS from script.
13 As a primary pattern, we recommend loading asynchronous CSS like this from HTML:
14
15 `<link rel="stylesheet" href="/path/to/my.css" media="print" onload="this.media='all'; this.onload=null;">`
16
17 This article explains why this approach is best: https://www.filamentgroup.com/lab/load-css-simpler/
18
19 That is probably all you need! But if you want to load a CSS file from a JavaScript function, read on...
20
21 ## Dynamic CSS loading with the loadCSS function
22
23 The [loadCSS.js](https://github.com/filamentgroup/loadCSS/blob/master/src/loadCSS.js) file exposes a global `loadCSS` function that you can call to load CSS files programmatically, if needed. This is handy for cases where you need to dynamically load CSS from script.
7424
7525 ``` javascript
7626 loadCSS( "path/to/mystylesheet.css" );
8030
8131 ## Function API
8232
83 If you're including and calling the loadCSS function (without the `rel=preload` pattern), the function has 3 optional arguments.
33 The loadCSS function has 3 optional arguments.
8434
8535 - `before`: By default, loadCSS attempts to inject the stylesheet link *after* all CSS and JS in the page. However, if you desire a more specific location in your document, such as before a particular stylesheet link, you can use the `before` argument to specify a particular element to use as an insertion point. Your stylesheet will be inserted *before* the element you specify. For example, here's how that can be done by simply applying an `id` attribute to your `script`.
8636 ```html
12171
12272 ### Browser Support
12373
124 loadCSS attempts to load a css file asynchronously in any JavaScript-capable browser. However, some older browsers such as Internet Explorer 8 and older will block rendering while the stylesheet is loading. This merely means that the stylesheet will load as if you referenced it with an ordinary link element.
74 The loadCSS patterns attempt to load a css file asynchronously in any JavaScript-capable browser. However, some older browsers such as Internet Explorer 8 and older will block rendering while the stylesheet is loading. This merely means that the stylesheet will load as if you referenced it with an ordinary link element.
75
76
77 # Changes in version 3.0 (no more preload polyfill)
78
79 As of version 3.0, we no longer support or include a polyfill for a `rel=preload` markup pattern. This is because we have since determined that the markup pattern described at the top of this readme is simpler and better for performance, while the former preload pattern could sometimes conflict with resource priorities in ways that aren't helpful for loading CSS in a non-blocking way.
80
81 To update, you can change your preload markup to [this HTML pattern](https://github.com/filamentgroup/loadCSS/blob/master/README.md#how-to-use) and delete the JS from your build.
82
83 Since this change breaks the API from prior versions, we made it a major version bump. That way, if you are still needing to use the now-deprecated preload pattern, you can keep your code pointing at prior versions that are still on NPM, such as version 2.1.0 https://github.com/filamentgroup/loadCSS/releases/tag/v2.1.0
12584
12685
12786 #### Contributions and bug fixes
0 MIT License
1
2 Copyright (c) 2017 Anton Yefremov
3
4 Permission is hereby granted, free of charge, to any person obtaining a copy
5 of this software and associated documentation files (the "Software"), to deal
6 in the Software without restriction, including without limitation the rights
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 copies of the Software, and to permit persons to whom the Software is
9 furnished to do so, subject to the following conditions:
10
11 The above copyright notice and this permission notice shall be included in all
12 copies or substantial portions of the Software.
13
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 SOFTWARE.
0 # loadcss
1
2 [![npm version](https://badge.fury.io/js/loadcss.svg)](https://badge.fury.io/js/loadcss)
3 [![Build Status](https://travis-ci.org/yefremov/loadcss.svg?branch=master)](https://travis-ci.org/yefremov/loadcss)
4
5 Fast and reliable utility to asynchronously load multiple css files and apply to
6 the document.
7
8 ## Installation
9
10 ```bash
11 $ npm install loadcss
12 ```
13
14 ## API
15
16 ```js
17 import loadcss from 'loadcss';
18
19 // load a single css file
20 loadcss('/foo.css', links => {
21 links.forEach(link => console.log(link.href));
22 });
23
24 // load multiple css files
25 loadcss(['/a/foo.css', '/b/bar.css'], links => {
26 links.forEach(link => console.log(link.href));
27 });
28 ```
29
30 ## Running tests
31
32 ```bash
33 $ npm install
34 $ npm test
35 ```
36
37 ## License
38
39 [MIT](LICENSE)
0
1 /**
2 * Module dependencies.
3 */
4
5 var callasync = require('callasync');
6
7 /**
8 * Expose `loadcss`.
9 */
10
11 module.exports = loadcss;
12
13 /**
14 * Loads and inserts stylesheets with the specified `href` and `options`;
15 *
16 * @param {Array|string} href
17 * @param {Object|Function} [options]
18 * @param {DOMElement} [options.before]
19 * @param {string} [options.media]
20 * @param {Function} [options.complete]
21 */
22
23 function loadcss(href, options) {
24 options || (options = {});
25
26 if (({}).toString.call(options) === '[object Function]') {
27 options = { complete: options };
28 }
29
30 var doc = document;
31 var sheets = doc.styleSheets;
32 var hrefs = ({}).toString.call(href) === '[object Array]' ? href : [href];
33 var media = options.media ? options.media : 'all';
34 var oncomplete = options.complete || function () {};
35 var links = [];
36
37 var before;
38
39 if (options.before) {
40 before = options.before;
41 } else {
42 var refs = (doc.body || doc.getElementsByTagName('head')[0]).childNodes;
43 before = refs[refs.length - 1];
44 }
45
46 function onready(callback) {
47 if (doc.body){
48 return callback();
49 }
50
51 callasync(function () {
52 onready(callback);
53 });
54 }
55
56 function onloaded() {
57 var loaded = 0;
58 var index = -1;
59 var length = links.length;
60
61 while (++index < length) {
62 if (exists(links[index].href) && ++loaded === length) {
63 return oncomplete(links);
64 }
65 }
66
67 callasync(onloaded);
68 }
69
70 function exists(href) {
71 var index = -1;
72 var length = sheets.length;
73
74 while (++index < length) {
75 if (sheets[index].href === null || sheets[index].href.length === 0) {
76 continue;
77 }
78
79 if (sheets[index].href === href) {
80 return true;
81 }
82 }
83 }
84
85 onready(function () {
86 var index = -1;
87 var length = hrefs.length;
88 var referenceNode = options.before ? before : before.nextSibling;
89
90 while (++index < length) {
91 links[index] = doc.createElement('link');
92
93 links[index].rel = 'stylesheet';
94 links[index].href = hrefs[index];
95 links[index].media = media;
96
97 before.parentNode.insertBefore(links[index], referenceNode);
98 }
99
100 callasync(onloaded);
101 });
102
103 return links;
104 }
0 {
1 "name": "loadcss",
2 "version": "0.0.2",
3 "description": "Fast and reliable utility to asynchronously load multiple css files",
4 "main": "index.js",
5 "keywords": ["css", "stylesheets", "preload", "load"],
6 "dependencies": {
7 "callasync": "^1.0.0"
8 },
9 "devDependencies": {
10 "browserify": "^14.1.0",
11 "node-qunit-phantomjs": "^1.5.0",
12 "qunitjs": "^2.1.1",
13 "uglify-js": "^2.7.5"
14 },
15 "scripts": {
16 "test": "node-qunit-phantomjs test/index.html",
17 "prebuild": "rm -rf dist",
18 "build": "mkdir -p dist && browserify index.js -s loadcss -o dist/loadcss.js"
19 },
20 "repository": {
21 "type": "git",
22 "url": "git+https://github.com/yefremov/loadcss.git"
23 },
24 "author": "Anton Yefremov <anton.yefremov@gmail.com>",
25 "license": "MIT",
26 "bugs": {
27 "url": "https://github.com/yefremov/loadcss/issues"
28 },
29 "homepage": "https://github.com/yefremov/loadcss#readme"
30 }
0 #header {
1 color: red;
2 }
0 #header {
1 color: orange;
2 }
0 #header {
1 color: yellow;
2 }
0 #header {
1 color: green;
2 }
0 #header {
1 color: blue;
2 }
0 #header {
1 color: indigo;
2 }
0 #header {
1 color: violet;
2 }
0 <!doctype html>
1 <html>
2 <head>
3 <meta charset="utf-8">
4 <meta name="viewport" content="width=device-width">
5 <title>loadcss</title>
6 <link rel="stylesheet" href="../node_modules/qunitjs/qunit/qunit.css">
7 <script src="../dist/loadcss.js" id="loader"></script>
8 <script src="../node_modules/qunitjs/qunit/qunit.js"></script>
9 </head>
10 <body>
11 <div id="qunit"></div>
12 <div id="qunit-fixture"></div>
13 <script src="tests.js"></script>
14 </body>
15 </html>
0 (function (window) {
1
2 var getStyles = window.getComputedStyle
3 ? function (node) { return window.getComputedStyle(node, null) }
4 : function (node) { return node.currentStyle };
5
6 QUnit.assert.contains = function(needle, target, message) {
7 var actual = target.indexOf(needle) > -1;
8
9 this.pushResult({
10 result: actual,
11 actual: actual,
12 expected: needle,
13 message: message
14 });
15 };
16
17 QUnit.test('should be exposed to window object', function( assert ) {
18 assert.expect(2);
19 assert.ok(window.loadcss);
20 assert.ok(typeof window.loadcss === 'function');
21 });
22
23 QUnit.test('should load a single css file', function( assert ) {
24 assert.expect(1);
25
26 var done = assert.async(1);
27
28 loadcss('./fixtures/a.css', function (links) {
29 var a = links.shift();
30
31 assert.contains('fixtures/a.css', a.href);
32 done();
33 });
34 });
35
36 QUnit.test('should load a multiple css files', function(assert) {
37 assert.expect(2);
38
39 var done = assert.async(1);
40
41 loadcss(['fixtures/b.css', 'fixtures/c.css'], function (links) {
42 var b = links.shift();
43 var c = links.shift();
44
45 assert.contains('fixtures/b.css', b.href);
46 assert.contains('fixtures/c.css', c.href);
47
48 done();
49 });
50
51 QUnit.test('should default media type to all devices', function( assert ) {
52 assert.expect(1);
53
54 var done = assert.async(1);
55
56 loadcss(['fixtures/d.css'], function (links) {
57 var d = links.shift();
58
59 assert.equal(d.media, 'all');
60 done();
61 });
62 });
63
64 QUnit.test('should set media type specified in options', function( assert ) {
65 assert.expect(1);
66
67 var done = assert.async(1);
68
69 loadcss(['fixtures/e.css'], {
70 media: 'print',
71 before: document.getElementById('loader'),
72 complete: function (links) {
73 var e = links.shift();
74
75 assert.ok(e.media === 'print');
76 done();
77 }
78 });
79 });
80
81 QUnit.test('should insert link before specified node', function(assert) {
82 assert.expect(1);
83
84 var done = assert.async(1);
85
86 var element = document.getElementById('loader');
87
88 loadcss(['fixtures/f.css'], {
89 before: element,
90 complete: function (links) {
91 var f = links.shift();
92
93 assert.equal(f.nextElementSibling, element);
94 done();
95 }
96 });
97 });
98
99 QUnit.test('should fire callback after stylesheet is loaded', function(assert) {
100 assert.expect(1);
101
102 var done = assert.async(1);
103
104 var fixtures = window.document.getElementById("qunit-fixture");
105
106 var header = window.document.createElement('div');
107
108 header.innerHTML = 'Hello, World!';
109 header.id = 'header';
110
111 fixtures.appendChild(header);
112
113 loadcss(['fixtures/g.css'], {
114 complete: function (links) {
115 var g = links.shift();
116
117 assert.equal(getStyles(header).color, 'rgb(238, 130, 238)');
118 done();
119 }
120 });
121 });
122 });
123 }(window));
00 {
11 "name": "fg-loadcss",
2 "version": "2.1.0",
2 "version": "3.1.0",
33 "lockfileVersion": 1,
44 "requires": true,
55 "dependencies": {
1010 "dev": true
1111 },
1212 "agent-base": {
13 "version": "4.2.1",
14 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
15 "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
13 "version": "4.3.0",
14 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
15 "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
1616 "dev": true,
1717 "requires": {
1818 "es6-promisify": "^5.0.0"
19 }
20 },
21 "ajv": {
22 "version": "6.6.1",
23 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz",
24 "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==",
25 "dev": true,
26 "optional": true,
27 "requires": {
28 "fast-deep-equal": "^2.0.1",
29 "fast-json-stable-stringify": "^2.0.0",
30 "json-schema-traverse": "^0.4.1",
31 "uri-js": "^4.2.2"
3219 }
3320 },
3421 "ansi-regex": {
10592 "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
10693 "dev": true
10794 },
108 "asn1": {
109 "version": "0.2.4",
110 "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
111 "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
112 "dev": true,
113 "optional": true,
114 "requires": {
115 "safer-buffer": "~2.1.0"
116 }
117 },
118 "assert-plus": {
119 "version": "1.0.0",
120 "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
121 "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
122 "dev": true
123 },
12495 "assign-symbols": {
12596 "version": "1.0.0",
12697 "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
134105 "dev": true
135106 },
136107 "async-limiter": {
137 "version": "1.0.0",
138 "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
139 "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
140 "dev": true
141 },
142 "asynckit": {
143 "version": "0.4.0",
144 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
145 "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
146 "dev": true,
147 "optional": true
108 "version": "1.0.1",
109 "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
110 "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
111 "dev": true
148112 },
149113 "atob": {
150114 "version": "2.1.2",
151115 "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
152116 "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
153117 "dev": true
154 },
155 "aws-sign2": {
156 "version": "0.7.0",
157 "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
158 "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
159 "dev": true,
160 "optional": true
161 },
162 "aws4": {
163 "version": "1.8.0",
164 "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
165 "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
166 "dev": true,
167 "optional": true
168118 },
169119 "balanced-match": {
170120 "version": "1.0.0",
225175 "kind-of": "^6.0.2"
226176 }
227177 }
228 }
229 },
230 "bcrypt-pbkdf": {
231 "version": "1.0.2",
232 "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
233 "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
234 "dev": true,
235 "optional": true,
236 "requires": {
237 "tweetnacl": "^0.14.3"
238178 }
239179 },
240180 "brace-expansion": {
276216 }
277217 }
278218 },
219 "buffer-crc32": {
220 "version": "0.2.13",
221 "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
222 "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
223 "dev": true
224 },
279225 "buffer-from": {
280226 "version": "1.1.1",
281227 "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
305251 "unset-value": "^1.0.0"
306252 }
307253 },
254 "caller-callsite": {
255 "version": "2.0.0",
256 "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
257 "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
258 "dev": true,
259 "requires": {
260 "callsites": "^2.0.0"
261 }
262 },
263 "caller-path": {
264 "version": "2.0.0",
265 "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
266 "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
267 "dev": true,
268 "requires": {
269 "caller-callsite": "^2.0.0"
270 }
271 },
272 "callsites": {
273 "version": "2.0.0",
274 "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
275 "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
276 "dev": true
277 },
308278 "camelcase": {
309279 "version": "2.1.1",
310280 "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
321291 "map-obj": "^1.0.0"
322292 }
323293 },
324 "caseless": {
325 "version": "0.12.0",
326 "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
327 "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
328 "dev": true,
329 "optional": true
330 },
331294 "chalk": {
332295 "version": "2.4.1",
333296 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
338301 "escape-string-regexp": "^1.0.5",
339302 "supports-color": "^5.3.0"
340303 }
304 },
305 "ci-info": {
306 "version": "2.0.0",
307 "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
308 "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
309 "dev": true
341310 },
342311 "class-utils": {
343312 "version": "0.3.6",
425394 "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
426395 "dev": true
427396 },
428 "combined-stream": {
429 "version": "1.0.7",
430 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
431 "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
432 "dev": true,
433 "requires": {
434 "delayed-stream": "~1.0.0"
435 }
436 },
437397 "commander": {
438398 "version": "2.17.1",
439399 "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
465425 },
466426 "dependencies": {
467427 "readable-stream": {
468 "version": "2.3.6",
469 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
470 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
428 "version": "2.3.7",
429 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
430 "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
471431 "dev": true,
472432 "requires": {
473433 "core-util-is": "~1.0.0",
511471 "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
512472 "dev": true
513473 },
474 "cosmiconfig": {
475 "version": "5.1.0",
476 "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz",
477 "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==",
478 "dev": true,
479 "requires": {
480 "import-fresh": "^2.0.0",
481 "is-directory": "^0.3.1",
482 "js-yaml": "^3.9.0",
483 "lodash.get": "^4.4.2",
484 "parse-json": "^4.0.0"
485 },
486 "dependencies": {
487 "js-yaml": {
488 "version": "3.13.1",
489 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
490 "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
491 "dev": true,
492 "requires": {
493 "argparse": "^1.0.7",
494 "esprima": "^4.0.0"
495 }
496 },
497 "parse-json": {
498 "version": "4.0.0",
499 "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
500 "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
501 "dev": true,
502 "requires": {
503 "error-ex": "^1.3.1",
504 "json-parse-better-errors": "^1.0.1"
505 }
506 }
507 }
508 },
509 "cross-spawn": {
510 "version": "6.0.5",
511 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
512 "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
513 "dev": true,
514 "requires": {
515 "nice-try": "^1.0.4",
516 "path-key": "^2.0.1",
517 "semver": "^5.5.0",
518 "shebang-command": "^1.2.0",
519 "which": "^1.2.9"
520 }
521 },
514522 "currently-unhandled": {
515523 "version": "0.4.1",
516524 "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
518526 "dev": true,
519527 "requires": {
520528 "array-find-index": "^1.0.1"
521 }
522 },
523 "cycle": {
524 "version": "1.0.3",
525 "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
526 "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
527 "dev": true,
528 "optional": true
529 },
530 "dashdash": {
531 "version": "1.14.1",
532 "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
533 "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
534 "dev": true,
535 "optional": true,
536 "requires": {
537 "assert-plus": "^1.0.0"
538529 }
539530 },
540531 "date-now": {
614605 }
615606 }
616607 }
617 },
618 "delayed-stream": {
619 "version": "1.0.0",
620 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
621 "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
622 "dev": true
623608 },
624609 "detect-file": {
625610 "version": "1.0.0",
682667 "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
683668 "dev": true
684669 },
685 "ecc-jsbn": {
686 "version": "0.1.2",
687 "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
688 "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
689 "dev": true,
690 "optional": true,
691 "requires": {
692 "jsbn": "~0.1.0",
693 "safer-buffer": "^2.1.0"
670 "end-of-stream": {
671 "version": "1.4.1",
672 "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
673 "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
674 "dev": true,
675 "requires": {
676 "once": "^1.4.0"
694677 }
695678 },
696679 "entities": {
730713 "dev": true
731714 },
732715 "esprima": {
733 "version": "2.7.3",
734 "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
735 "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
716 "version": "4.0.1",
717 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
718 "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
736719 "dev": true
737720 },
738721 "eventemitter2": {
740723 "resolved": "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
741724 "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
742725 "dev": true
726 },
727 "execa": {
728 "version": "1.0.0",
729 "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
730 "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
731 "dev": true,
732 "requires": {
733 "cross-spawn": "^6.0.0",
734 "get-stream": "^4.0.0",
735 "is-stream": "^1.1.0",
736 "npm-run-path": "^2.0.0",
737 "p-finally": "^1.0.0",
738 "signal-exit": "^3.0.0",
739 "strip-eof": "^1.0.0"
740 }
743741 },
744742 "exit": {
745743 "version": "0.1.2",
884882 }
885883 },
886884 "extract-zip": {
887 "version": "1.6.7",
888 "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
889 "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
890 "dev": true,
891 "requires": {
892 "concat-stream": "1.6.2",
893 "debug": "2.6.9",
894 "mkdirp": "0.5.1",
895 "yauzl": "2.4.1"
896 }
897 },
898 "extsprintf": {
899 "version": "1.3.0",
900 "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
901 "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
902 "dev": true
903 },
904 "eyes": {
905 "version": "0.1.8",
906 "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
907 "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
908 "dev": true,
909 "optional": true
910 },
911 "fast-deep-equal": {
912 "version": "2.0.1",
913 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
914 "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
915 "dev": true,
916 "optional": true
917 },
918 "fast-json-stable-stringify": {
919 "version": "2.0.0",
920 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
921 "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
922 "dev": true,
923 "optional": true
885 "version": "1.7.0",
886 "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
887 "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
888 "dev": true,
889 "requires": {
890 "concat-stream": "^1.6.2",
891 "debug": "^2.6.9",
892 "mkdirp": "^0.5.4",
893 "yauzl": "^2.10.0"
894 }
924895 },
925896 "fd-slicer": {
926 "version": "1.0.1",
927 "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
928 "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
897 "version": "1.1.0",
898 "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
899 "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
929900 "dev": true,
930901 "requires": {
931902 "pend": "~1.2.0"
10321003 "for-in": "^1.0.1"
10331004 }
10341005 },
1035 "forever-agent": {
1036 "version": "0.6.1",
1037 "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
1038 "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
1039 "dev": true,
1040 "optional": true
1041 },
1042 "form-data": {
1043 "version": "2.3.3",
1044 "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
1045 "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
1046 "dev": true,
1047 "optional": true,
1048 "requires": {
1049 "asynckit": "^0.4.0",
1050 "combined-stream": "^1.0.6",
1051 "mime-types": "^2.1.12"
1052 }
1053 },
10541006 "fragment-cache": {
10551007 "version": "0.2.1",
10561008 "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
10601012 "map-cache": "^0.2.2"
10611013 }
10621014 },
1063 "fs-extra": {
1064 "version": "1.0.0",
1065 "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
1066 "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
1067 "dev": true,
1068 "optional": true,
1069 "requires": {
1070 "graceful-fs": "^4.1.2",
1071 "jsonfile": "^2.1.0",
1072 "klaw": "^1.0.0"
1073 }
1074 },
10751015 "fs.realpath": {
10761016 "version": "1.0.0",
10771017 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
10841024 "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
10851025 "dev": true
10861026 },
1027 "get-stream": {
1028 "version": "4.1.0",
1029 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
1030 "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
1031 "dev": true,
1032 "requires": {
1033 "pump": "^3.0.0"
1034 }
1035 },
10871036 "get-value": {
10881037 "version": "2.0.6",
10891038 "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
10951044 "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
10961045 "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
10971046 "dev": true
1098 },
1099 "getpass": {
1100 "version": "0.1.7",
1101 "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
1102 "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
1103 "dev": true,
1104 "optional": true,
1105 "requires": {
1106 "assert-plus": "^1.0.0"
1107 }
11081047 },
11091048 "glob": {
11101049 "version": "7.0.6",
11511090 "dev": true
11521091 },
11531092 "grunt": {
1154 "version": "1.0.3",
1155 "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.3.tgz",
1156 "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==",
1093 "version": "1.1.0",
1094 "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.1.0.tgz",
1095 "integrity": "sha512-+NGod0grmviZ7Nzdi9am7vuRS/h76PcWDsV635mEXF0PEQMUV6Kb+OjTdsVxbi0PZmfQOjCMKb3w8CVZcqsn1g==",
11571096 "dev": true,
11581097 "requires": {
11591098 "coffeescript": "~1.10.0",
11671106 "grunt-legacy-log": "~2.0.0",
11681107 "grunt-legacy-util": "~1.1.1",
11691108 "iconv-lite": "~0.4.13",
1170 "js-yaml": "~3.5.2",
1109 "js-yaml": "~3.13.1",
11711110 "minimatch": "~3.0.2",
1172 "mkdirp": "~0.5.1",
1111 "mkdirp": "~1.0.3",
11731112 "nopt": "~3.0.6",
11741113 "path-is-absolute": "~1.0.0",
11751114 "rimraf": "~2.6.2"
11861125 "nopt": "~3.0.6",
11871126 "resolve": "~1.1.0"
11881127 }
1128 },
1129 "mkdirp": {
1130 "version": "1.0.4",
1131 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
1132 "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
1133 "dev": true
11891134 }
11901135 }
11911136 },
12631208 }
12641209 },
12651210 "grunt-contrib-qunit": {
1266 "version": "3.0.1",
1267 "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-3.0.1.tgz",
1268 "integrity": "sha512-s994+ipKwc+oUUIWaGIw1soyID4pExSGMd/cHQN5h0p8KbIjR1Le3ZC3giSDDKXtZFE0i+Obf0uIjNvjftX2Cw==",
1211 "version": "3.1.0",
1212 "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-3.1.0.tgz",
1213 "integrity": "sha512-mdk8UltH6mxCD63E0hTXMAts42DOi4z4bBBrY7qnuHiShflMF7IueSMYe0zWaZ2dO8mgujh57Zfny2EbigJhRg==",
12691214 "dev": true,
12701215 "requires": {
12711216 "eventemitter2": "^5.0.1",
12721217 "p-each-series": "^1.0.0",
1273 "puppeteer": "1.7.0"
1218 "puppeteer": "^1.11.0"
12741219 },
12751220 "dependencies": {
12761221 "eventemitter2": {
13451290 "duplexer": "^0.1.1"
13461291 }
13471292 },
1348 "har-schema": {
1349 "version": "2.0.0",
1350 "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
1351 "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
1352 "dev": true,
1353 "optional": true
1354 },
1355 "har-validator": {
1356 "version": "5.1.3",
1357 "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
1358 "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
1359 "dev": true,
1360 "optional": true,
1361 "requires": {
1362 "ajv": "^6.5.5",
1363 "har-schema": "^2.0.0"
1364 }
1365 },
13661293 "has-ansi": {
13671294 "version": "2.0.0",
13681295 "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
14081335 "is-buffer": "^1.1.5"
14091336 }
14101337 }
1411 }
1412 },
1413 "hasha": {
1414 "version": "2.2.0",
1415 "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
1416 "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
1417 "dev": true,
1418 "optional": true,
1419 "requires": {
1420 "is-stream": "^1.0.1",
1421 "pinkie-promise": "^2.0.0"
14221338 }
14231339 },
14241340 "homedir-polyfill": {
14551371 "readable-stream": "1.1"
14561372 }
14571373 },
1458 "http-signature": {
1459 "version": "1.2.0",
1460 "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1461 "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
1462 "dev": true,
1463 "optional": true,
1464 "requires": {
1465 "assert-plus": "^1.0.0",
1466 "jsprim": "^1.2.2",
1467 "sshpk": "^1.7.0"
1468 }
1469 },
14701374 "https-proxy-agent": {
1471 "version": "2.2.1",
1472 "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
1473 "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
1474 "dev": true,
1475 "requires": {
1476 "agent-base": "^4.1.0",
1375 "version": "2.2.4",
1376 "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
1377 "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
1378 "dev": true,
1379 "requires": {
1380 "agent-base": "^4.3.0",
14771381 "debug": "^3.1.0"
14781382 },
14791383 "dependencies": {
14871391 }
14881392 },
14891393 "ms": {
1490 "version": "2.1.1",
1491 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1492 "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
1394 "version": "2.1.2",
1395 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1396 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
14931397 "dev": true
1398 }
1399 }
1400 },
1401 "husky": {
1402 "version": "1.3.1",
1403 "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz",
1404 "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==",
1405 "dev": true,
1406 "requires": {
1407 "cosmiconfig": "^5.0.7",
1408 "execa": "^1.0.0",
1409 "find-up": "^3.0.0",
1410 "get-stdin": "^6.0.0",
1411 "is-ci": "^2.0.0",
1412 "pkg-dir": "^3.0.0",
1413 "please-upgrade-node": "^3.1.1",
1414 "read-pkg": "^4.0.1",
1415 "run-node": "^1.0.0",
1416 "slash": "^2.0.0"
1417 },
1418 "dependencies": {
1419 "find-up": {
1420 "version": "3.0.0",
1421 "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
1422 "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
1423 "dev": true,
1424 "requires": {
1425 "locate-path": "^3.0.0"
1426 }
1427 },
1428 "get-stdin": {
1429 "version": "6.0.0",
1430 "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
1431 "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
1432 "dev": true
1433 },
1434 "parse-json": {
1435 "version": "4.0.0",
1436 "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
1437 "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
1438 "dev": true,
1439 "requires": {
1440 "error-ex": "^1.3.1",
1441 "json-parse-better-errors": "^1.0.1"
1442 }
1443 },
1444 "pify": {
1445 "version": "3.0.0",
1446 "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
1447 "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
1448 "dev": true
1449 },
1450 "read-pkg": {
1451 "version": "4.0.1",
1452 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
1453 "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
1454 "dev": true,
1455 "requires": {
1456 "normalize-package-data": "^2.3.2",
1457 "parse-json": "^4.0.0",
1458 "pify": "^3.0.0"
1459 }
14941460 }
14951461 }
14961462 },
15031469 "safer-buffer": ">= 2.1.2 < 3"
15041470 }
15051471 },
1472 "import-fresh": {
1473 "version": "2.0.0",
1474 "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
1475 "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
1476 "dev": true,
1477 "requires": {
1478 "caller-path": "^2.0.0",
1479 "resolve-from": "^3.0.0"
1480 }
1481 },
15061482 "indent-string": {
15071483 "version": "2.1.0",
15081484 "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
15891565 "dev": true,
15901566 "requires": {
15911567 "builtin-modules": "^1.0.0"
1568 }
1569 },
1570 "is-ci": {
1571 "version": "2.0.0",
1572 "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
1573 "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
1574 "dev": true,
1575 "requires": {
1576 "ci-info": "^2.0.0"
15921577 }
15931578 },
15941579 "is-data-descriptor": {
16301615 }
16311616 }
16321617 },
1618 "is-directory": {
1619 "version": "0.3.1",
1620 "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
1621 "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
1622 "dev": true
1623 },
16331624 "is-extendable": {
16341625 "version": "0.1.1",
16351626 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
16431634 "dev": true
16441635 },
16451636 "is-finite": {
1646 "version": "1.0.2",
1647 "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
1648 "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
1649 "dev": true,
1650 "requires": {
1651 "number-is-nan": "^1.0.0"
1652 }
1637 "version": "1.1.0",
1638 "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
1639 "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
1640 "dev": true
16531641 },
16541642 "is-glob": {
16551643 "version": "3.1.0",
17021690 "version": "1.1.0",
17031691 "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
17041692 "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
1705 "dev": true,
1706 "optional": true
1707 },
1708 "is-typedarray": {
1709 "version": "1.0.0",
1710 "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1711 "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
1712 "dev": true,
1713 "optional": true
1693 "dev": true
17141694 },
17151695 "is-unc-path": {
17161696 "version": "1.0.0",
17511731 "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
17521732 "dev": true
17531733 },
1754 "isstream": {
1755 "version": "0.1.2",
1756 "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
1757 "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
1758 "dev": true
1759 },
17601734 "js-yaml": {
1761 "version": "3.5.5",
1762 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz",
1763 "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=",
1764 "dev": true,
1765 "requires": {
1766 "argparse": "^1.0.2",
1767 "esprima": "^2.6.0"
1768 }
1769 },
1770 "jsbn": {
1771 "version": "0.1.1",
1772 "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1773 "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
1774 "dev": true
1735 "version": "3.13.1",
1736 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
1737 "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
1738 "dev": true,
1739 "requires": {
1740 "argparse": "^1.0.7",
1741 "esprima": "^4.0.0"
1742 }
17751743 },
17761744 "jshint": {
1777 "version": "2.9.6",
1778 "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.6.tgz",
1779 "integrity": "sha512-KO9SIAKTlJQOM4lE64GQUtGBRpTOuvbrRrSZw3AhUxMNG266nX9hK2cKA4SBhXOj0irJGyNyGSLT62HGOVDEOA==",
1745 "version": "2.9.7",
1746 "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.7.tgz",
1747 "integrity": "sha512-Q8XN38hGsVQhdlM+4gd1Xl7OB1VieSuCJf+fEJjpo59JH99bVJhXRXAh26qQ15wfdd1VPMuDWNeSWoNl53T4YA==",
17801748 "dev": true,
17811749 "requires": {
17821750 "cli": "~1.0.0",
17851753 "htmlparser2": "3.8.x",
17861754 "lodash": "~4.17.10",
17871755 "minimatch": "~3.0.2",
1788 "phantom": "~4.0.1",
1789 "phantomjs-prebuilt": "~2.1.7",
17901756 "shelljs": "0.3.x",
1791 "strip-json-comments": "1.0.x",
1792 "unicode-5.2.0": "^0.7.5"
1793 }
1794 },
1795 "json-schema": {
1796 "version": "0.2.3",
1797 "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
1798 "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
1799 "dev": true,
1800 "optional": true
1801 },
1802 "json-schema-traverse": {
1803 "version": "0.4.1",
1804 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1805 "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1806 "dev": true,
1807 "optional": true
1808 },
1809 "json-stringify-safe": {
1810 "version": "5.0.1",
1811 "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1812 "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
1813 "dev": true,
1814 "optional": true
1815 },
1816 "jsonfile": {
1817 "version": "2.4.0",
1818 "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
1819 "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
1820 "dev": true,
1821 "optional": true,
1822 "requires": {
1823 "graceful-fs": "^4.1.6"
1824 }
1825 },
1826 "jsprim": {
1827 "version": "1.4.1",
1828 "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
1829 "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
1830 "dev": true,
1831 "optional": true,
1832 "requires": {
1833 "assert-plus": "1.0.0",
1834 "extsprintf": "1.3.0",
1835 "json-schema": "0.2.3",
1836 "verror": "1.10.0"
1837 }
1838 },
1839 "kew": {
1840 "version": "0.7.0",
1841 "resolved": "http://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
1842 "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
1843 "dev": true,
1844 "optional": true
1757 "strip-json-comments": "1.0.x"
1758 }
1759 },
1760 "json-parse-better-errors": {
1761 "version": "1.0.2",
1762 "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
1763 "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
1764 "dev": true
18451765 },
18461766 "kind-of": {
1847 "version": "6.0.2",
1848 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
1849 "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
1850 "dev": true
1851 },
1852 "klaw": {
1853 "version": "1.3.1",
1854 "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
1855 "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
1856 "dev": true,
1857 "optional": true,
1858 "requires": {
1859 "graceful-fs": "^4.1.9"
1860 }
1767 "version": "6.0.3",
1768 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
1769 "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
1770 "dev": true
18611771 },
18621772 "liftoff": {
18631773 "version": "2.5.0",
19021812 "strip-bom": "^2.0.0"
19031813 }
19041814 },
1815 "locate-path": {
1816 "version": "3.0.0",
1817 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
1818 "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
1819 "dev": true,
1820 "requires": {
1821 "p-locate": "^3.0.0",
1822 "path-exists": "^3.0.0"
1823 },
1824 "dependencies": {
1825 "path-exists": {
1826 "version": "3.0.0",
1827 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1828 "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
1829 "dev": true
1830 }
1831 }
1832 },
19051833 "lodash": {
1906 "version": "4.17.11",
1907 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
1908 "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
1834 "version": "4.17.15",
1835 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
1836 "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
1837 "dev": true
1838 },
1839 "lodash.get": {
1840 "version": "4.4.2",
1841 "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
1842 "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
19091843 "dev": true
19101844 },
19111845 "loud-rejection": {
20621996 }
20631997 },
20641998 "mime": {
2065 "version": "2.4.0",
2066 "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz",
2067 "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==",
2068 "dev": true
2069 },
2070 "mime-db": {
2071 "version": "1.37.0",
2072 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
2073 "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
2074 "dev": true
2075 },
2076 "mime-types": {
2077 "version": "2.1.21",
2078 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
2079 "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
2080 "dev": true,
2081 "requires": {
2082 "mime-db": "~1.37.0"
2083 }
1999 "version": "2.4.4",
2000 "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
2001 "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
2002 "dev": true
20842003 },
20852004 "minimatch": {
20862005 "version": "3.0.4",
20922011 }
20932012 },
20942013 "minimist": {
2095 "version": "1.2.0",
2096 "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
2097 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
2014 "version": "1.2.5",
2015 "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
2016 "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
20982017 "dev": true
20992018 },
21002019 "mixin-deep": {
2101 "version": "1.3.1",
2102 "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
2103 "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
2020 "version": "1.3.2",
2021 "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
2022 "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
21042023 "dev": true,
21052024 "requires": {
21062025 "for-in": "^1.0.2",
21192038 }
21202039 },
21212040 "mkdirp": {
2122 "version": "0.5.1",
2123 "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
2124 "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
2125 "dev": true,
2126 "requires": {
2127 "minimist": "0.0.8"
2128 },
2129 "dependencies": {
2130 "minimist": {
2131 "version": "0.0.8",
2132 "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
2133 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
2134 "dev": true
2135 }
2041 "version": "0.5.5",
2042 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
2043 "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
2044 "dev": true,
2045 "requires": {
2046 "minimist": "^1.2.5"
21362047 }
21372048 },
21382049 "ms": {
21602071 "to-regex": "^3.0.1"
21612072 }
21622073 },
2074 "nice-try": {
2075 "version": "1.0.5",
2076 "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
2077 "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
2078 "dev": true
2079 },
21632080 "nopt": {
21642081 "version": "3.0.6",
21652082 "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
21812098 "validate-npm-package-license": "^3.0.1"
21822099 }
21832100 },
2101 "npm-run-path": {
2102 "version": "2.0.2",
2103 "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
2104 "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
2105 "dev": true,
2106 "requires": {
2107 "path-key": "^2.0.0"
2108 }
2109 },
21842110 "number-is-nan": {
21852111 "version": "1.0.1",
21862112 "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
21872113 "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
21882114 "dev": true
2189 },
2190 "oauth-sign": {
2191 "version": "0.9.0",
2192 "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
2193 "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
2194 "dev": true,
2195 "optional": true
21962115 },
21972116 "object-assign": {
21982117 "version": "4.1.1",
23112230 "p-reduce": "^1.0.0"
23122231 }
23132232 },
2233 "p-finally": {
2234 "version": "1.0.0",
2235 "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
2236 "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
2237 "dev": true
2238 },
2239 "p-limit": {
2240 "version": "2.1.0",
2241 "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
2242 "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
2243 "dev": true,
2244 "requires": {
2245 "p-try": "^2.0.0"
2246 }
2247 },
2248 "p-locate": {
2249 "version": "3.0.0",
2250 "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
2251 "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
2252 "dev": true,
2253 "requires": {
2254 "p-limit": "^2.0.0"
2255 }
2256 },
23142257 "p-reduce": {
23152258 "version": "1.0.0",
23162259 "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
23172260 "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
23182261 "dev": true
23192262 },
2263 "p-try": {
2264 "version": "2.0.0",
2265 "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
2266 "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
2267 "dev": true
2268 },
23202269 "parse-filepath": {
23212270 "version": "1.0.2",
23222271 "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
23642313 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
23652314 "dev": true
23662315 },
2316 "path-key": {
2317 "version": "2.0.1",
2318 "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
2319 "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
2320 "dev": true
2321 },
23672322 "path-parse": {
23682323 "version": "1.0.6",
23692324 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
24022357 "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
24032358 "dev": true
24042359 },
2405 "performance-now": {
2406 "version": "2.1.0",
2407 "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
2408 "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
2409 "dev": true,
2410 "optional": true
2411 },
2412 "phantom": {
2413 "version": "4.0.12",
2414 "resolved": "https://registry.npmjs.org/phantom/-/phantom-4.0.12.tgz",
2415 "integrity": "sha512-Tz82XhtPmwCk1FFPmecy7yRGZG2btpzY2KI9fcoPT7zT9det0CcMyfBFPp1S8DqzsnQnm8ZYEfdy528mwVtksA==",
2416 "dev": true,
2417 "optional": true,
2418 "requires": {
2419 "phantomjs-prebuilt": "^2.1.16",
2420 "split": "^1.0.1",
2421 "winston": "^2.4.0"
2422 }
2423 },
2424 "phantomjs-prebuilt": {
2425 "version": "2.1.16",
2426 "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
2427 "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
2428 "dev": true,
2429 "optional": true,
2430 "requires": {
2431 "es6-promise": "^4.0.3",
2432 "extract-zip": "^1.6.5",
2433 "fs-extra": "^1.0.0",
2434 "hasha": "^2.2.0",
2435 "kew": "^0.7.0",
2436 "progress": "^1.1.8",
2437 "request": "^2.81.0",
2438 "request-progress": "^2.0.1",
2439 "which": "^1.2.10"
2440 }
2441 },
24422360 "pify": {
24432361 "version": "2.3.0",
24442362 "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
24602378 "pinkie": "^2.0.0"
24612379 }
24622380 },
2381 "pkg-dir": {
2382 "version": "3.0.0",
2383 "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
2384 "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
2385 "dev": true,
2386 "requires": {
2387 "find-up": "^3.0.0"
2388 },
2389 "dependencies": {
2390 "find-up": {
2391 "version": "3.0.0",
2392 "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
2393 "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
2394 "dev": true,
2395 "requires": {
2396 "locate-path": "^3.0.0"
2397 }
2398 }
2399 }
2400 },
2401 "please-upgrade-node": {
2402 "version": "3.1.1",
2403 "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz",
2404 "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==",
2405 "dev": true,
2406 "requires": {
2407 "semver-compare": "^1.0.0"
2408 }
2409 },
24632410 "posix-character-classes": {
24642411 "version": "0.1.1",
24652412 "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
24762423 }
24772424 },
24782425 "process-nextick-args": {
2479 "version": "2.0.0",
2480 "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
2481 "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
2482 "dev": true
2483 },
2484 "progress": {
2485 "version": "1.1.8",
2486 "resolved": "http://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
2487 "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
2488 "dev": true,
2489 "optional": true
2426 "version": "2.0.1",
2427 "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
2428 "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
2429 "dev": true
24902430 },
24912431 "proxy-from-env": {
2492 "version": "1.0.0",
2493 "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
2494 "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=",
2495 "dev": true
2496 },
2497 "psl": {
2498 "version": "1.1.29",
2499 "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
2500 "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
2501 "dev": true,
2502 "optional": true
2503 },
2504 "punycode": {
2505 "version": "2.1.1",
2506 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2507 "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
2508 "dev": true,
2509 "optional": true
2432 "version": "1.1.0",
2433 "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
2434 "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
2435 "dev": true
2436 },
2437 "pump": {
2438 "version": "3.0.0",
2439 "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
2440 "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
2441 "dev": true,
2442 "requires": {
2443 "end-of-stream": "^1.1.0",
2444 "once": "^1.3.1"
2445 }
25102446 },
25112447 "puppeteer": {
2512 "version": "1.7.0",
2513 "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.7.0.tgz",
2514 "integrity": "sha512-f+1DxKHPqce6CXUBz2eVO2WcATeVeQSOPG9GYaGObEZDCiCEUwG+gogjMsrvn7he2wHTqNVb5p6RUrwmr8XFBA==",
2515 "dev": true,
2516 "requires": {
2517 "debug": "^3.1.0",
2448 "version": "1.20.0",
2449 "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.20.0.tgz",
2450 "integrity": "sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ==",
2451 "dev": true,
2452 "requires": {
2453 "debug": "^4.1.0",
25182454 "extract-zip": "^1.6.6",
25192455 "https-proxy-agent": "^2.2.1",
25202456 "mime": "^2.0.3",
2521 "progress": "^2.0.0",
2457 "progress": "^2.0.1",
25222458 "proxy-from-env": "^1.0.0",
25232459 "rimraf": "^2.6.1",
2524 "ws": "^5.1.1"
2460 "ws": "^6.1.0"
25252461 },
25262462 "dependencies": {
25272463 "debug": {
2528 "version": "3.2.6",
2529 "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
2530 "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
2464 "version": "4.1.1",
2465 "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
2466 "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
25312467 "dev": true,
25322468 "requires": {
25332469 "ms": "^2.1.1"
25342470 }
25352471 },
25362472 "ms": {
2537 "version": "2.1.1",
2538 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
2539 "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
2473 "version": "2.1.2",
2474 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2475 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
25402476 "dev": true
25412477 },
25422478 "progress": {
2543 "version": "2.0.2",
2544 "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.2.tgz",
2545 "integrity": "sha512-/OLz5F9beZUWwSHZDreXgap1XShX6W+DCHQCqwCF7uZ88s6uTlD2cR3JBE77SegCmNtb1Idst+NfmwcdU6KVhw==",
2479 "version": "2.0.3",
2480 "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
2481 "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
25462482 "dev": true
25472483 }
25482484 }
2549 },
2550 "qs": {
2551 "version": "6.5.2",
2552 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
2553 "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
2554 "dev": true,
2555 "optional": true
25562485 },
25572486 "read-pkg": {
25582487 "version": "1.1.0",
26452574 "is-finite": "^1.0.0"
26462575 }
26472576 },
2648 "request": {
2649 "version": "2.88.0",
2650 "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
2651 "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
2652 "dev": true,
2653 "optional": true,
2654 "requires": {
2655 "aws-sign2": "~0.7.0",
2656 "aws4": "^1.8.0",
2657 "caseless": "~0.12.0",
2658 "combined-stream": "~1.0.6",
2659 "extend": "~3.0.2",
2660 "forever-agent": "~0.6.1",
2661 "form-data": "~2.3.2",
2662 "har-validator": "~5.1.0",
2663 "http-signature": "~1.2.0",
2664 "is-typedarray": "~1.0.0",
2665 "isstream": "~0.1.2",
2666 "json-stringify-safe": "~5.0.1",
2667 "mime-types": "~2.1.19",
2668 "oauth-sign": "~0.9.0",
2669 "performance-now": "^2.1.0",
2670 "qs": "~6.5.2",
2671 "safe-buffer": "^5.1.2",
2672 "tough-cookie": "~2.4.3",
2673 "tunnel-agent": "^0.6.0",
2674 "uuid": "^3.3.2"
2675 }
2676 },
2677 "request-progress": {
2678 "version": "2.0.1",
2679 "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
2680 "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
2681 "dev": true,
2682 "optional": true,
2683 "requires": {
2684 "throttleit": "^1.0.0"
2685 }
2686 },
26872577 "resolve": {
26882578 "version": "1.1.7",
26892579 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
27002590 "global-modules": "^1.0.0"
27012591 }
27022592 },
2593 "resolve-from": {
2594 "version": "3.0.0",
2595 "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
2596 "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
2597 "dev": true
2598 },
27032599 "resolve-url": {
27042600 "version": "0.2.1",
27052601 "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
27132609 "dev": true
27142610 },
27152611 "rimraf": {
2716 "version": "2.6.2",
2717 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
2718 "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
2719 "dev": true,
2720 "requires": {
2721 "glob": "^7.0.5"
2722 }
2612 "version": "2.6.3",
2613 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
2614 "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
2615 "dev": true,
2616 "requires": {
2617 "glob": "^7.1.3"
2618 },
2619 "dependencies": {
2620 "glob": {
2621 "version": "7.1.6",
2622 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
2623 "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
2624 "dev": true,
2625 "requires": {
2626 "fs.realpath": "^1.0.0",
2627 "inflight": "^1.0.4",
2628 "inherits": "2",
2629 "minimatch": "^3.0.4",
2630 "once": "^1.3.0",
2631 "path-is-absolute": "^1.0.0"
2632 }
2633 }
2634 }
2635 },
2636 "run-node": {
2637 "version": "1.0.0",
2638 "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz",
2639 "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==",
2640 "dev": true
27232641 },
27242642 "safe-buffer": {
27252643 "version": "5.1.2",
27482666 "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
27492667 "dev": true
27502668 },
2669 "semver-compare": {
2670 "version": "1.0.0",
2671 "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
2672 "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
2673 "dev": true
2674 },
27512675 "set-value": {
2752 "version": "2.0.0",
2753 "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
2754 "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
2676 "version": "2.0.1",
2677 "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
2678 "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
27552679 "dev": true,
27562680 "requires": {
27572681 "extend-shallow": "^2.0.1",
27712695 }
27722696 }
27732697 },
2698 "shebang-command": {
2699 "version": "1.2.0",
2700 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
2701 "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
2702 "dev": true,
2703 "requires": {
2704 "shebang-regex": "^1.0.0"
2705 }
2706 },
2707 "shebang-regex": {
2708 "version": "1.0.0",
2709 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
2710 "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
2711 "dev": true
2712 },
27742713 "shelljs": {
27752714 "version": "0.3.0",
27762715 "resolved": "http://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
27812720 "version": "3.0.2",
27822721 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
27832722 "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
2723 "dev": true
2724 },
2725 "slash": {
2726 "version": "2.0.0",
2727 "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
2728 "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
27842729 "dev": true
27852730 },
27862731 "snapdragon": {
29472892 "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==",
29482893 "dev": true
29492894 },
2950 "split": {
2951 "version": "1.0.1",
2952 "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
2953 "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
2954 "dev": true,
2955 "optional": true,
2956 "requires": {
2957 "through": "2"
2958 }
2959 },
29602895 "split-string": {
29612896 "version": "3.1.0",
29622897 "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
29672902 }
29682903 },
29692904 "sprintf-js": {
2970 "version": "1.1.1",
2971 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz",
2972 "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=",
2973 "dev": true
2974 },
2975 "sshpk": {
2976 "version": "1.15.2",
2977 "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
2978 "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
2979 "dev": true,
2980 "optional": true,
2981 "requires": {
2982 "asn1": "~0.2.3",
2983 "assert-plus": "^1.0.0",
2984 "bcrypt-pbkdf": "^1.0.0",
2985 "dashdash": "^1.12.0",
2986 "ecc-jsbn": "~0.1.1",
2987 "getpass": "^0.1.1",
2988 "jsbn": "~0.1.0",
2989 "safer-buffer": "^2.0.2",
2990 "tweetnacl": "~0.14.0"
2991 }
2905 "version": "1.1.2",
2906 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
2907 "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
2908 "dev": true
29922909 },
29932910 "stack-trace": {
29942911 "version": "0.0.10",
30412958 "is-utf8": "^0.2.0"
30422959 }
30432960 },
2961 "strip-eof": {
2962 "version": "1.0.0",
2963 "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
2964 "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
2965 "dev": true
2966 },
30442967 "strip-indent": {
30452968 "version": "1.0.1",
30462969 "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
30652988 "has-flag": "^3.0.0"
30662989 }
30672990 },
3068 "throttleit": {
3069 "version": "1.0.0",
3070 "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
3071 "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
3072 "dev": true,
3073 "optional": true
3074 },
3075 "through": {
3076 "version": "2.3.8",
3077 "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
3078 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
3079 "dev": true,
3080 "optional": true
3081 },
30822991 "to-object-path": {
30832992 "version": "0.3.0",
30842993 "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
31213030 "repeat-string": "^1.6.1"
31223031 }
31233032 },
3124 "tough-cookie": {
3125 "version": "2.4.3",
3126 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
3127 "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
3128 "dev": true,
3129 "optional": true,
3130 "requires": {
3131 "psl": "^1.1.24",
3132 "punycode": "^1.4.1"
3133 },
3134 "dependencies": {
3135 "punycode": {
3136 "version": "1.4.1",
3137 "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
3138 "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
3139 "dev": true,
3140 "optional": true
3141 }
3142 }
3143 },
31443033 "trim-newlines": {
31453034 "version": "1.0.0",
31463035 "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
31473036 "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
3148 "dev": true
3149 },
3150 "tunnel-agent": {
3151 "version": "0.6.0",
3152 "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
3153 "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
3154 "dev": true,
3155 "optional": true,
3156 "requires": {
3157 "safe-buffer": "^5.0.1"
3158 }
3159 },
3160 "tweetnacl": {
3161 "version": "0.14.5",
3162 "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
3163 "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
31643037 "dev": true
31653038 },
31663039 "typedarray": {
32033076 "util-deprecate": "^1.0.2"
32043077 }
32053078 },
3206 "unicode-5.2.0": {
3207 "version": "0.7.5",
3208 "resolved": "https://registry.npmjs.org/unicode-5.2.0/-/unicode-5.2.0-0.7.5.tgz",
3209 "integrity": "sha512-KVGLW1Bri30x00yv4HNM8kBxoqFXr0Sbo55735nvrlsx4PYBZol3UtoWgO492fSwmsetzPEZzy73rbU8OGXJcA==",
3210 "dev": true
3211 },
32123079 "union-value": {
3213 "version": "1.0.0",
3214 "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
3215 "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
3080 "version": "1.0.1",
3081 "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
3082 "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
32163083 "dev": true,
32173084 "requires": {
32183085 "arr-union": "^3.1.0",
32193086 "get-value": "^2.0.6",
32203087 "is-extendable": "^0.1.1",
3221 "set-value": "^0.4.3"
3222 },
3223 "dependencies": {
3224 "extend-shallow": {
3225 "version": "2.0.1",
3226 "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
3227 "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
3228 "dev": true,
3229 "requires": {
3230 "is-extendable": "^0.1.0"
3231 }
3232 },
3233 "set-value": {
3234 "version": "0.4.3",
3235 "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
3236 "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
3237 "dev": true,
3238 "requires": {
3239 "extend-shallow": "^2.0.1",
3240 "is-extendable": "^0.1.1",
3241 "is-plain-object": "^2.0.1",
3242 "to-object-path": "^0.3.0"
3243 }
3244 }
3088 "set-value": "^2.0.1"
32453089 }
32463090 },
32473091 "unset-value": {
32843128 }
32853129 }
32863130 },
3287 "uri-js": {
3288 "version": "4.2.2",
3289 "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
3290 "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
3291 "dev": true,
3292 "optional": true,
3293 "requires": {
3294 "punycode": "^2.1.0"
3295 }
3296 },
32973131 "uri-path": {
32983132 "version": "1.0.0",
32993133 "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz",
33183152 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
33193153 "dev": true
33203154 },
3321 "uuid": {
3322 "version": "3.3.2",
3323 "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
3324 "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
3325 "dev": true,
3326 "optional": true
3327 },
33283155 "v8flags": {
33293156 "version": "3.1.1",
33303157 "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.1.tgz",
33443171 "spdx-expression-parse": "^3.0.0"
33453172 }
33463173 },
3347 "verror": {
3348 "version": "1.10.0",
3349 "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
3350 "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
3351 "dev": true,
3352 "optional": true,
3353 "requires": {
3354 "assert-plus": "^1.0.0",
3355 "core-util-is": "1.0.2",
3356 "extsprintf": "^1.2.0"
3357 }
3358 },
33593174 "which": {
33603175 "version": "1.3.1",
33613176 "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
33653180 "isexe": "^2.0.0"
33663181 }
33673182 },
3368 "winston": {
3369 "version": "2.4.4",
3370 "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz",
3371 "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==",
3372 "dev": true,
3373 "optional": true,
3374 "requires": {
3375 "async": "~1.0.0",
3376 "colors": "1.0.x",
3377 "cycle": "1.0.x",
3378 "eyes": "0.1.x",
3379 "isstream": "0.1.x",
3380 "stack-trace": "0.0.x"
3381 },
3382 "dependencies": {
3383 "async": {
3384 "version": "1.0.0",
3385 "resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz",
3386 "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
3387 "dev": true,
3388 "optional": true
3389 },
3390 "colors": {
3391 "version": "1.0.3",
3392 "resolved": "http://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
3393 "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
3394 "dev": true,
3395 "optional": true
3396 }
3397 }
3398 },
33993183 "wrappy": {
34003184 "version": "1.0.2",
34013185 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
34033187 "dev": true
34043188 },
34053189 "ws": {
3406 "version": "5.2.2",
3407 "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
3408 "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
3190 "version": "6.2.1",
3191 "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
3192 "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
34093193 "dev": true,
34103194 "requires": {
34113195 "async-limiter": "~1.0.0"
34123196 }
34133197 },
34143198 "yauzl": {
3415 "version": "2.4.1",
3416 "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
3417 "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
3418 "dev": true,
3419 "requires": {
3420 "fd-slicer": "~1.0.1"
3199 "version": "2.10.0",
3200 "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
3201 "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
3202 "dev": true,
3203 "requires": {
3204 "buffer-crc32": "~0.2.3",
3205 "fd-slicer": "~1.1.0"
34213206 }
34223207 }
34233208 }
00 {
11 "name": "fg-loadcss",
2 "version": "2.1.0",
2 "version": "3.1.0",
33 "description": "A function for loading CSS asynchronously",
44 "main": "src/loadCSS.js",
55 "repository": {
1212 "url": "https://github.com/filamentgroup/loadCSS/issues"
1313 },
1414 "homepage": "https://github.com/filamentgroup/loadCSS",
15 "engines": {
16 "node": ">= 11.9.0"
17 },
1518 "devDependencies": {
16 "grunt": "~1.0.3",
19 "grunt": "^1.1.0",
1720 "grunt-cli": "~1.3.2",
18 "matchdep": "^2.0.0",
21 "grunt-contrib-concat": "^1.0.1",
1922 "grunt-contrib-jshint": "~2.0.0",
20 "grunt-contrib-qunit": "~3.0.1",
23 "grunt-contrib-qunit": "^3.1.0",
2124 "grunt-contrib-uglify": "^4.0.0",
22 "grunt-contrib-concat": "^1.0.1"
25 "husky": "^1.3.1",
26 "matchdep": "^2.0.0"
2327 },
2428 "scripts": {
25 "test": "node node_modules/.bin/grunt"
29 "start": "npx ./server.js",
30 "test": "npx grunt"
31 },
32 "husky": {
33 "hooks": {
34 "pre-commit": "npm test"
35 }
2636 }
2737 }
0 /* jshint esversion: 6 */
1
2 const fs = require('fs');
3 const http = require('http');
4 const path = require('path');
5 const port = 3000;
6
7 const server = http.createServer(requestHandler);
8
9 server.listen(port, (err) => {
10 if (err) {
11 return console.error('could not run server', err);
12 }
13
14 console.log(`server is listening on ${port}`);
15 });
16
17
18 const contentTypes = {
19 '.css': 'text/css',
20 '.html': 'text/html',
21 '.js': 'application/javascript',
22 };
23
24 function requestHandler (request, response) {
25 console.log(JSON.stringify(request.url));
26 try {
27 response.setHeader('charset', 'UTF-8');
28 response.setHeader('Cache-Control', 'max-age=500');
29
30 if (!path.extname(request.url)) {
31 request.url += '/index.html';
32 }
33
34 response.setHeader('Content-type', contentTypes[path.extname(request.url)]);
35
36 const content = fs.readFileSync(
37 path.join('.', request.url)
38 ).toString().replace(/<!--#include virtual="([^"]+)" -->/g, (match, filepath) => fs.readFileSync(
39 path.resolve(path.dirname(path.join('.', request.url)), filepath)
40 ));
41
42 if (request.url.endsWith('slow.css')) {
43 setTimeout(() => {
44 response.end( content );
45 }, 5000);
46 } else {
47 response.end( content );
48 }
49 } catch (error) {
50 const errorMessage = (error.message && (error.message + '\n' + error.stack)) || error;
51
52 if (errorMessage.includes('ENOENT')) {
53 response.statusCode = 404;
54 } else {
55 response.statusCode = 500;
56 }
57
58 response.end('<pre>' + errorMessage);
59 }
60 }
+0
-111
src/cssrelpreload.js less more
0 /*! loadCSS. [c]2017 Filament Group, Inc. MIT License */
1 /* This file is meant as a standalone workflow for
2 - testing support for link[rel=preload]
3 - enabling async CSS loading in browsers that do not support rel=preload
4 - applying rel preload css once loaded, whether supported or not.
5 */
6 (function( w ){
7 "use strict";
8 // rel=preload support test
9 if( !w.loadCSS ){
10 w.loadCSS = function(){};
11 }
12 // define on the loadCSS obj
13 var rp = loadCSS.relpreload = {};
14 // rel=preload feature support test
15 // runs once and returns a function for compat purposes
16 rp.support = (function(){
17 var ret;
18 try {
19 ret = w.document.createElement( "link" ).relList.supports( "preload" );
20 } catch (e) {
21 ret = false;
22 }
23 return function(){
24 return ret;
25 };
26 })();
27
28 // if preload isn't supported, get an asynchronous load by using a non-matching media attribute
29 // then change that media back to its intended value on load
30 rp.bindMediaToggle = function( link ){
31 // remember existing media attr for ultimate state, or default to 'all'
32 var finalMedia = link.media || "all";
33
34 function enableStylesheet(){
35 // unbind listeners
36 if( link.addEventListener ){
37 link.removeEventListener( "load", enableStylesheet );
38 } else if( link.attachEvent ){
39 link.detachEvent( "onload", enableStylesheet );
40 }
41 link.setAttribute( "onload", null );
42 link.media = finalMedia;
43 }
44
45 // bind load handlers to enable media
46 if( link.addEventListener ){
47 link.addEventListener( "load", enableStylesheet );
48 } else if( link.attachEvent ){
49 link.attachEvent( "onload", enableStylesheet );
50 }
51
52 // Set rel and non-applicable media type to start an async request
53 // note: timeout allows this to happen async to let rendering continue in IE
54 setTimeout(function(){
55 link.rel = "stylesheet";
56 link.media = "only x";
57 });
58 // also enable media after 3 seconds,
59 // which will catch very old browsers (android 2.x, old firefox) that don't support onload on link
60 setTimeout( enableStylesheet, 3000 );
61 };
62
63 // loop through link elements in DOM
64 rp.poly = function(){
65 // double check this to prevent external calls from running
66 if( rp.support() ){
67 return;
68 }
69 var links = w.document.getElementsByTagName( "link" );
70 for( var i = 0; i < links.length; i++ ){
71 var link = links[ i ];
72 // qualify links to those with rel=preload and as=style attrs
73 if( link.rel === "preload" && link.getAttribute( "as" ) === "style" && !link.getAttribute( "data-loadcss" ) ){
74 // prevent rerunning on link
75 link.setAttribute( "data-loadcss", true );
76 // bind listeners to toggle media back
77 rp.bindMediaToggle( link );
78 }
79 }
80 };
81
82 // if unsupported, run the polyfill
83 if( !rp.support() ){
84 // run once at least
85 rp.poly();
86
87 // rerun poly on an interval until onload
88 var run = w.setInterval( rp.poly, 500 );
89 if( w.addEventListener ){
90 w.addEventListener( "load", function(){
91 rp.poly();
92 w.clearInterval( run );
93 } );
94 } else if( w.attachEvent ){
95 w.attachEvent( "onload", function(){
96 rp.poly();
97 w.clearInterval( run );
98 } );
99 }
100 }
101
102
103 // commonjs
104 if( typeof exports !== "undefined" ){
105 exports.loadCSS = loadCSS;
106 }
107 else {
108 w.loadCSS = loadCSS;
109 }
110 }( typeof global !== "undefined" ? global : this ) );
0 /*! loadCSS. [c]2017 Filament Group, Inc. MIT License */
0 /*! loadCSS. [c]2020 Filament Group, Inc. MIT License */
11 (function(w){
22 "use strict";
33 /* exported loadCSS */