diff --git a/.gitignore b/.gitignore
index 260d8b5d..12d299f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
/node_modules/
/dist/
-npm-debug.log
+/coverage/
+npm-debug.*.log
+yarn.lock
+package-lock.json
diff --git a/.travis.yml b/.travis.yml
index 03e98328..b4267b3e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,17 +3,9 @@ node_js:
- stable
- lts/*
- 6.9
-env:
- - WEBPACK_VERSION=1 EXTRACT_PLUGIN_VERSION=1
- - WEBPACK_VERSION=2 EXTRACT_PLUGIN_VERSION=2
- - WEBPACK_VERSION=3 EXTRACT_PLUGIN_VERSION=3.0.0-beta.3
- - WEBPACK_VERSION=4.0.0 EXTRACT_PLUGIN_VERSION=4.0.0-alpha.0
before_install:
- stty columns 120
install:
- - npm install --ignore-scripts
- - npm rm webpack
- - npm rm extract-text-webpack-plugin
- - npm install webpack@$WEBPACK_VERSION extract-text-webpack-plugin@$EXTRACT_PLUGIN_VERSION --ignore-scripts || true
+ - travis_retry npm install --ignore-scripts
script:
- - npm test
+ - travis_retry npm test
diff --git a/README.md b/README.md
index d7d3b2dd..d7875e79 100644
--- a/README.md
+++ b/README.md
@@ -31,11 +31,30 @@
```
-
This is a [webpack](http://webpack.js.org/) plugin that simplifies creation of HTML files to serve your `webpack` bundles. This is especially useful for `webpack` bundles that include a hash in the filename which changes every compilation. You can either let the plugin generate an HTML file for you, supply
your own template using `lodash` templates or use your own loader.
-### `Plugins`
+
Sponsors
+
+
+
+
+
+
+
+
+
+
+
+
+Thanks for supporting the ongoing improvements to the html-webpack-plugin!
+
+Zero Config
+
+The `html-webpack-plugin` works without configuration.
+It's a great addition to the [⚙️ webpack-config-plugins](https://github.com/namics/webpack-config-plugins/blob/master/README.md#zero-config-webpack-dev-server-example).
+
+Plugins
The `html-webpack-plugin` provides [hooks](https://github.com/jantimon/html-webpack-plugin#events) to extend it to your needs. There are already some really powerful plugins which can be integrated with zero configuration
@@ -56,7 +75,8 @@ The `html-webpack-plugin` provides [hooks](https://github.com/jantimon/html-webp
* [html-webpack-inline-style-plugin](https://github.com/djaax/html-webpack-inline-style-plugin) for inlining styles to HTML elements using [juice](https://github.com/Automattic/juice). Useful for email generation automatisation.
* [html-webpack-exclude-empty-assets-plugin](https://github.com/KnisterPeter/html-webpack-exclude-empty-assets-plugin) removes empty assets from being added to the html. This fixes some problems with extract-text-plugin with webpack 4.
* [webpack-concat-plugin](https://github.com/hxlniada/webpack-concat-plugin) for concat and uglify files that needn't to be webpack bundles(for legacy files) and inject to html-webpack-plugin.
-
+ * [csp-html-webpack-plugin](https://github.com/slackhq/csp-html-webpack-plugin) to add [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) meta tags to the HTML output
+
Usage
@@ -86,7 +106,7 @@ This will generate a file `dist/index.html` containing the following
-
+
Webpack App
@@ -116,7 +136,7 @@ Allowed values are as follows
|**[`inject`](#)**|`{Boolean\|String}`|`true`|`true \|\| 'head' \|\| 'body' \|\| false` Inject all assets into the given `template` or `templateContent`. When passing `true` or `'body'` all javascript resources will be placed at the bottom of the body element. `'head'` will place the scripts in the head element|
|**[`favicon`](#)**|`{String}`|``|Adds the given favicon path to the output HTML|
|**[`meta`](#)**|`{Object}`|`{}`|Allows to inject `meta`-tags. E.g. `meta: {viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no'}`|
-|**[`minify`](#)**|`{Boolean\|Object}`|`false`|Pass [html-minifier](https://github.com/kangax/html-minifier#options-quick-reference)'s options as object to minify the output|
+|**[`minify`](#)**|`{Boolean\|Object}`|`true` if `mode` is `'production'`, otherwise `false`|Controls if and in what ways the output should be minified. See [minification](#minification) below for more details.|
|**[`hash`](#)**|`{Boolean}`|`false`|If `true` then append a unique `webpack` compilation hash to all included scripts and CSS files. This is useful for cache busting|
|**[`cache`](#)**|`{Boolean}`|`true`|Emit the file only if it was changed|
|**[`showErrors`](#)**|`{Boolean}`|`true`|Errors details will be written into the HTML page|
@@ -144,7 +164,7 @@ Here's an example webpack config illustrating how to use these options
}
```
-### `Generating Multiple HTML Files`
+### Generating Multiple HTML Files
To generate more than one HTML file, declare the plugin more than
once in your plugins array
@@ -167,7 +187,7 @@ once in your plugins array
}
```
-### `Writing Your Own Templates`
+### Writing Your Own Templates
If the default generated HTML doesn't meet your needs you can supply
your own template. The easiest way is to use the `template` option and pass a custom HTML file.
@@ -189,7 +209,7 @@ plugins: [
-
+
<%= htmlWebpackPlugin.options.title %>
@@ -198,7 +218,7 @@ plugins: [
```
If you already have a template loader, you can use it to parse the template.
-Please note that this will also happen if you specifiy the html-loader and use `.html` file as template.
+Please note that this will also happen if you specify the html-loader and use `.html` file as template.
**webpack.config.js**
```js
@@ -258,10 +278,10 @@ The following variables are available in the template:
- `compilation`: the webpack [compilation](https://webpack.js.org/api/compilation/) object.
This can be used, for example, to get the contents of processed assets and inline them
directly in the page, through `compilation.assets[...].source()`
- (see [the inline template example](examples/inline/template.jade)).
+ (see [the inline template example](examples/inline/template.pug)).
-### `Filtering Chunks`
+### Filtering Chunks
To include only certain chunks you can limit the chunks being used
@@ -285,43 +305,181 @@ plugins: [
]
```
-### `Events`
+### Minification
+
+If the `minify` option is set to `true` (the default when webpack's `mode` is `'production'`),
+the generated HTML will be minified using [html-minifier](https://github.com/kangax/html-minifier)
+and the following options:
+
+```js
+{
+ collapseWhitespace: true,
+ removeComments: true,
+ removeRedundantAttributes: true,
+ removeScriptTypeAttributes: true,
+ removeStyleLinkTypeAttributes: true,
+ useShortDoctype: true
+}
+```
-To allow other [plugins](https://github.com/webpack/docs/wiki/plugins) to alter the HTML this plugin executes the following events:
+To use custom [html-minifier options](https://github.com/kangax/html-minifier#options-quick-reference)
+pass an object to `minify` instead. This object will not be merged with the defaults above.
-#### `SyncWaterfallHook`
+To disable minifcations during production mode set the `minfy` option to `false`.
-* `htmlWebpackPluginAlterChunks`
+### Meta Tags
-#### `AsyncSeriesWaterfallHook`
+If the `meta` option is set the html-webpack-plugin will inject meta tags.
+For the default template the html-webpack-plugin will already provide a default for the `viewport` meta tag.
-* `htmlWebpackPluginBeforeHtmlGeneration`
-* `htmlWebpackPluginBeforeHtmlProcessing`
-* `htmlWebpackPluginAlterAssetTags`
-* `htmlWebpackPluginAfterHtmlProcessing`
-* `htmlWebpackPluginAfterEmit`
+Please take a look at this well maintained list of almost all [possible meta tags](https://github.com/joshbuchea/HEAD#meta).
-Example implementation: [html-webpack-harddisk-plugin](https://github.com/jantimon/html-webpack-harddisk-plugin)
+#### name/content meta tags
-**plugin.js**
+Most meta tags are configured by setting a `name` and a `content` attribute.
+To add those use a key/value pair:
+
+**webpack.config.js**
```js
-function MyPlugin(options) {
- // Configure your plugin with options...
-}
+plugins: [
+ new HtmlWebpackPlugin({
+ 'viewport': 'width=device-width, initial-scale=1, shrink-to-fit=no',
+ // Will generate:
+ 'theme-color': '#4285f4'
+ // Will generate:
+ })
+]
+```
-MyPlugin.prototype.apply = function (compiler) {
- compiler.hooks.compilation.tap('MyPlugin', (compilation) => {
- console.log('The compiler is starting a new compilation...');
+#### Simulate http response headers
- compilation.hooks.htmlWebpackPluginAfterHtmlProcessing.tapAsync(
- 'MyPlugin',
- (data, cb) => {
- data.html += 'The Magic Footer'
+The **http-equiv** attribute is essentially used to simulate a HTTP response header.
+This format is supported using an object notation which allows you to add any attribute:
- cb(null, data)
- }
- )
+**webpack.config.js**
+```js
+plugins: [
+ new HtmlWebpackPlugin({
+ 'meta': {
+ 'Content-Security-Policy': { 'http-equiv': 'Content-Security-Policy', 'content': 'default-src https:' },
+ // Will generate:
+ // Which equals to the following http header: `Content-Security-Policy: default-src https:`
+ 'set-cookie': { 'http-equiv': 'set-cookie', content: 'name=value; expires=date; path=url' },
+ // Will generate:
+ // Which equals to the following http header: `set-cookie: value; expires=date; path=url`
+ }
})
+]
+```
+
+### Events
+
+To allow other [plugins](https://github.com/webpack/docs/wiki/plugins) to alter the HTML this plugin executes
+[tapable](https://github.com/webpack/tapable/tree/master) hooks.
+
+The [lib/hooks.js](https://github.com/jantimon/html-webpack-plugin/blob/master/lib/hooks.js) contains all information
+about which values are passed.
+
+[](https://github.com/jantimon/html-webpack-plugin/blob/master/flow.puml)
+
+#### `beforeAssetTagGeneration` hook
+
+```
+ AsyncSeriesWaterfallHook<{
+ assets: {
+ publicPath: string,
+ js: Array<{string}>,
+ css: Array<{string}>,
+ favicon?: string | undefined,
+ manifest?: string | undefined
+ },
+ outputName: string,
+ plugin: HtmlWebpackPlugin
+ }>
+```
+
+#### `alterAssetTags` hook
+
+```
+ AsyncSeriesWaterfallHook<{
+ assetTags: {
+ scripts: Array,
+ styles: Array,
+ meta: Array,
+ },
+ outputName: string,
+ plugin: HtmlWebpackPlugin
+ }>
+```
+
+#### `alterAssetTagGroups` hook
+
+```
+ AsyncSeriesWaterfallHook<{
+ headTags: Array,
+ bodyTags: Array,
+ outputName: string,
+ plugin: HtmlWebpackPlugin
+ }>
+```
+
+#### `afterTemplateExecution` hook
+
+```
+ AsyncSeriesWaterfallHook<{
+ html: string,
+ headTags: Array,
+ bodyTags: Array,
+ outputName: string,
+ plugin: HtmlWebpackPlugin,
+ }>
+```
+
+#### `beforeEmit` hook
+
+```
+ AsyncSeriesWaterfallHook<{
+ html: string,
+ outputName: string,
+ plugin: HtmlWebpackPlugin,
+ }>
+```
+
+#### `afterEmit` hook
+
+```
+ AsyncSeriesWaterfallHook<{
+ outputName: string,
+ plugin: HtmlWebpackPlugin
+ }>
+```
+
+Example implementation: [webpack-subresource-integrity](https://www.npmjs.com/package/webpack-subresource-integrity)
+
+**plugin.js**
+```js
+// If your plugin is direct dependent to the html webpack plugin:
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+// If your plugins is using html-webpack-plugin you can use https://github.com/tallesl/node-safe-require
+const HtmlWebpackPlugin = require('safe-require')('html-webpack-plugin');
+
+class MyPlugin {
+ apply (compiler) {
+ compiler.hooks.compilation.tap('MyPlugin', (compilation) => {
+ console.log('The compiler is starting a new compilation...')
+
+ // Staic Plugin interface |compilation |HOOK NAME | register listener
+ HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync(
+ 'MyPlugin', // <-- Set a meaningful name here for stacktraces
+ (data, cb) => {
+ // Manipulate the content
+ data.html += 'The Magic Footer'
+ // Tell webpack to move on
+ cb(null, data)
+ }
+ )
+ })
+ }
}
module.exports = MyPlugin
@@ -334,7 +492,7 @@ plugins: [
]
```
-Note that the callback must be passed the HtmlWebpackPluginData in order to pass this onto any other plugins listening on the same `html-webpack-plugin-before-html-processing` event
+Note that the callback must be passed the HtmlWebpackPluginData in order to pass this onto any other plugins listening on the same `beforeEmit` event
Maintainers
@@ -358,33 +516,10 @@ Note that the callback must be passed the HtmlWebpackPluginData in order to pass
-[npm]: https://img.shields.io/npm/v/html-webpack-plugin.svg
-[npm-url]: https://npmjs.com/package/html-webpack-plugin
-
-[node]: https://img.shields.io/node/v/html-webpack-plugin.svg
-[node-url]: https://nodejs.org
-
-[deps]: https://david-dm.org/jantimon/html-webpack-plugin.svg
-[deps-url]: https://david-dm.org/jantimon/html-webpack-plugin
-
-[tests]: http://img.shields.io/travis/jantimon/html-webpack-plugin.svg
-[tests-url]: https://travis-ci.org/jantimon/html-webpack-plugin
-
-
-## Contributors
-
-This project exists thanks to all the people who contribute.
-
-You're free to contribute to this project by submitting [issues](https://github.com/jantimon/html-webpack-plugin/issues) and/or [pull requests](https://github.com/jantimon/html-webpack-plugin/pulls). This project is test-driven, so keep in mind that every change and new feature should be covered by tests.
-
-This project uses the [semistandard code style](https://github.com/Flet/semistandard).
-
-
-
-
## Backers
-Thank you to all our backers! 🙏 [Become a backer](https://opencollective.com/html-webpack-plugin#backer)
+Thank you to all our backers!
+If you want to support the project as well [become a sponsor](https://opencollective.com/html-webpack-plugin#sponsor) or a [a backer](https://opencollective.com/html-webpack-plugin#backer).
@@ -397,19 +532,26 @@ Thank you to all our backers! 🙏 [Become a backer](https://opencollective.com/
-## Sponsors
-Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor](https://opencollective.com/html-webpack-plugin#sponsor)
+## Contributors
-
-
-
-
-
-
-
-
-
-
+This project exists thanks to all the people who contribute.
+You're free to contribute to this project by submitting [issues](https://github.com/jantimon/html-webpack-plugin/issues) and/or [pull requests](https://github.com/jantimon/html-webpack-plugin/pulls). This project is test-driven, so keep in mind that every change and new feature should be covered by tests.
+This project uses the [semistandard code style](https://github.com/Flet/semistandard).
+
+
+
+
+[npm]: https://img.shields.io/npm/v/html-webpack-plugin.svg
+[npm-url]: https://npmjs.com/package/html-webpack-plugin
+
+[node]: https://img.shields.io/node/v/html-webpack-plugin.svg
+[node-url]: https://nodejs.org
+
+[deps]: https://david-dm.org/jantimon/html-webpack-plugin.svg
+[deps-url]: https://david-dm.org/jantimon/html-webpack-plugin
+
+[tests]: http://img.shields.io/travis/jantimon/html-webpack-plugin.svg
+[tests-url]: https://travis-ci.org/jantimon/html-webpack-plugin
diff --git a/default_index.ejs b/default_index.ejs
index f9466a46..4664dafb 100644
--- a/default_index.ejs
+++ b/default_index.ejs
@@ -1,7 +1,7 @@
-
+
<%= htmlWebpackPlugin.options.title %>
diff --git a/docs/template-option.md b/docs/template-option.md
index eedd3624..ac2b56b7 100644
--- a/docs/template-option.md
+++ b/docs/template-option.md
@@ -5,7 +5,7 @@
The version 2.x which was introduced last year (Sep, 2015) changed the way the template is processed.
Instead of forcing all users to use the [blueimp](https://github.com/blueimp/JavaScript-Templates) template engine it allowed to use any webpack loader:
-* [jade/pug](https://github.com/pugjs/pug-loader)
+* [pug](https://github.com/pugjs/pug-loader)
* [ejs](https://github.com/okonet/ejs-loader)
* [underscore](https://github.com/emaphp/underscore-template-loader)
* [handlebars](https://github.com/pcardune/handlebars-loader)
@@ -30,6 +30,7 @@ By default (if you don't specify any loader in any way) a [fallback lodash loade
]
}
```
+
Be aware, using `.html` as your template extention may unexpectedly trigger another loader.
## 2) Setting a loader directly for the template
diff --git a/examples/appcache/dist/webpack-1/0714810ae3fb211173e2964249507195.png b/examples/appcache/dist/webpack-1/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/appcache/dist/webpack-1/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/appcache/dist/webpack-1/bundle.js b/examples/appcache/dist/webpack-1/bundle.js
deleted file mode 100644
index 6158f610..00000000
--- a/examples/appcache/dist/webpack-1/bundle.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
- __webpack_require__(1);
- var h1 = document.createElement('h1');
- h1.innerHTML = 'Hello world!';
- document.body.appendChild(h1);
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
- // removed by extract-text-webpack-plugin
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/appcache/dist/webpack-1/index.html b/examples/appcache/dist/webpack-1/index.html
deleted file mode 100644
index 536e8a47..00000000
--- a/examples/appcache/dist/webpack-1/index.html
+++ /dev/null
@@ -1 +0,0 @@
-Example template
\ No newline at end of file
diff --git a/examples/appcache/dist/webpack-1/manifest.appcache b/examples/appcache/dist/webpack-1/manifest.appcache
deleted file mode 100644
index 95445d58..00000000
--- a/examples/appcache/dist/webpack-1/manifest.appcache
+++ /dev/null
@@ -1,9 +0,0 @@
-CACHE MANIFEST
-# f688cbdde5a6e721015e
-
-0714810ae3fb211173e2964249507195.png
-bundle.js
-styles.css
-
-NETWORK:
-*
diff --git a/examples/appcache/dist/webpack-2/0714810ae3fb211173e2964249507195.png b/examples/appcache/dist/webpack-2/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/appcache/dist/webpack-2/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/appcache/dist/webpack-2/bundle.js b/examples/appcache/dist/webpack-2/bundle.js
deleted file mode 100644
index 0d7adbe8..00000000
--- a/examples/appcache/dist/webpack-2/bundle.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-// removed by extract-text-webpack-plugin
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(0);
-var h1 = document.createElement('h1');
-h1.innerHTML = 'Hello world!';
-document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/appcache/dist/webpack-2/index.html b/examples/appcache/dist/webpack-2/index.html
deleted file mode 100644
index 536e8a47..00000000
--- a/examples/appcache/dist/webpack-2/index.html
+++ /dev/null
@@ -1 +0,0 @@
-Example template
\ No newline at end of file
diff --git a/examples/appcache/dist/webpack-2/manifest.appcache b/examples/appcache/dist/webpack-2/manifest.appcache
deleted file mode 100644
index 29e22b40..00000000
--- a/examples/appcache/dist/webpack-2/manifest.appcache
+++ /dev/null
@@ -1,9 +0,0 @@
-CACHE MANIFEST
-# 737de2033617f9f6144d
-
-0714810ae3fb211173e2964249507195.png
-bundle.js
-styles.css
-
-NETWORK:
-*
diff --git a/examples/appcache/dist/webpack-3/0714810ae3fb211173e2964249507195.png b/examples/appcache/dist/webpack-3/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/appcache/dist/webpack-3/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/appcache/dist/webpack-3/bundle.js b/examples/appcache/dist/webpack-3/bundle.js
deleted file mode 100644
index 2d1b6065..00000000
--- a/examples/appcache/dist/webpack-3/bundle.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(1);
-var h1 = document.createElement('h1');
-h1.innerHTML = 'Hello world!';
-document.body.appendChild(h1);
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-// removed by extract-text-webpack-plugin
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/appcache/dist/webpack-3/index.html b/examples/appcache/dist/webpack-3/index.html
deleted file mode 100644
index 536e8a47..00000000
--- a/examples/appcache/dist/webpack-3/index.html
+++ /dev/null
@@ -1 +0,0 @@
-Example template
\ No newline at end of file
diff --git a/examples/appcache/dist/webpack-3/manifest.appcache b/examples/appcache/dist/webpack-3/manifest.appcache
deleted file mode 100644
index 04bdd6db..00000000
--- a/examples/appcache/dist/webpack-3/manifest.appcache
+++ /dev/null
@@ -1,9 +0,0 @@
-CACHE MANIFEST
-# eda37a6c6de5fd0ecfbe
-
-0714810ae3fb211173e2964249507195.png
-bundle.js
-styles.css
-
-NETWORK:
-*
diff --git a/examples/appcache/dist/webpack-3/styles.css b/examples/appcache/dist/webpack-3/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/appcache/dist/webpack-3/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/appcache/dist/webpack-4/bundle.js b/examples/appcache/dist/webpack-4/bundle.js
index 53bdab35..9fbb4892 100644
--- a/examples/appcache/dist/webpack-4/bundle.js
+++ b/examples/appcache/dist/webpack-4/bundle.js
@@ -36,19 +36,34 @@
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
@@ -73,20 +88,17 @@
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
-__webpack_require__(4);
+__webpack_require__(1);
var h1 = document.createElement('h1');
h1.innerHTML = 'Hello world!';
document.body.appendChild(h1);
/***/ }),
-/* 1 */,
-/* 2 */,
-/* 3 */,
-/* 4 */
-/***/ (function(module, exports) {
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
-// removed by extract-text-webpack-plugin
+// extracted by mini-css-extract-plugin
/***/ })
/******/ ]);
\ No newline at end of file
diff --git a/examples/appcache/dist/webpack-4/index.html b/examples/appcache/dist/webpack-4/index.html
index 536e8a47..3a2aa9e5 100644
--- a/examples/appcache/dist/webpack-4/index.html
+++ b/examples/appcache/dist/webpack-4/index.html
@@ -1 +1 @@
-Example template
\ No newline at end of file
+Example template
\ No newline at end of file
diff --git a/examples/appcache/dist/webpack-4/manifest.appcache b/examples/appcache/dist/webpack-4/manifest.appcache
index 3345da36..435ca980 100644
--- a/examples/appcache/dist/webpack-4/manifest.appcache
+++ b/examples/appcache/dist/webpack-4/manifest.appcache
@@ -1,9 +1,9 @@
CACHE MANIFEST
-# 95a89258cd32fe3f01e3
+# c291a9f1884d47262395
0714810ae3fb211173e2964249507195.png
-bundle.js
styles.css
+bundle.js
NETWORK:
*
diff --git a/examples/appcache/dist/webpack-4/styles.css b/examples/appcache/dist/webpack-4/styles.css
index 232a2cdb..e86486ba 100644
--- a/examples/appcache/dist/webpack-4/styles.css
+++ b/examples/appcache/dist/webpack-4/styles.css
@@ -1,3 +1,3 @@
body {
background: snow;
-}
\ No newline at end of file
+}
diff --git a/examples/appcache/webpack.config.js b/examples/appcache/webpack.config.js
index 1ff488e2..980ebfd5 100755
--- a/examples/appcache/webpack.config.js
+++ b/examples/appcache/webpack.config.js
@@ -1,7 +1,7 @@
var path = require('path');
var AppCachePlugin = require('appcache-webpack-plugin');
var HtmlWebpackPlugin = require('../..');
-var ExtractTextPlugin = require('extract-text-webpack-plugin');
+var MiniCssExtractPlugin = require('mini-css-extract-plugin');
var webpackMajorVersion = require('webpack/package.json').version.split('.')[0];
module.exports = {
@@ -13,8 +13,8 @@ module.exports = {
filename: 'bundle.js'
},
module: {
- loaders: [
- { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader') },
+ rules: [
+ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'] },
{ test: /\.png$/, loader: 'file-loader' },
{ test: /\.html$/, loader: 'html-loader?-removeOptionalTags' }
]
@@ -29,6 +29,6 @@ module.exports = {
collapseWhitespace: true
}
}),
- new ExtractTextPlugin('styles.css')
+ new MiniCssExtractPlugin({ filename: 'styles.css' })
]
};
diff --git a/examples/build-examples.js b/examples/build-examples.js
index f4f0f9cb..b1deff37 100644
--- a/examples/build-examples.js
+++ b/examples/build-examples.js
@@ -10,17 +10,6 @@ var fs = require('fs');
var path = require('path');
var rimraf = require('rimraf');
var webpack = require('webpack');
-var ExtractTextPlugin = require('extract-text-webpack-plugin');
-
-if (Number(webpackMajorVersion) > 1) {
- var extractOriginal = ExtractTextPlugin.extract;
- ExtractTextPlugin.extract = function (fallback, use) {
- return extractOriginal({
- fallback: fallback,
- use: use
- });
- };
-}
var examples = fs.readdirSync(__dirname).filter(function (file) {
return fs.statSync(path.join(__dirname, file)).isDirectory();
@@ -38,11 +27,8 @@ examples.forEach(function (exampleName) {
}
}));
config.mode = 'production';
- config.optimization = { minimizer: [] };
- if (config.module && config.module.loaders) {
- config.module.rules = config.module.loaders;
- delete config.module.loaders;
- }
+ config.optimization = config.optimization || {};
+ config.optimization.minimizer = [];
}
rimraf.sync(path.join(examplePath, 'dist', 'webpack-' + webpackMajorVersion));
diff --git a/examples/chunk-optimization/dist/webpack-4/entryA.html b/examples/chunk-optimization/dist/webpack-4/entryA.html
new file mode 100644
index 00000000..00ab2b9e
--- /dev/null
+++ b/examples/chunk-optimization/dist/webpack-4/entryA.html
@@ -0,0 +1 @@
+Webpack App
\ No newline at end of file
diff --git a/examples/chunk-optimization/dist/webpack-4/entryA.js b/examples/chunk-optimization/dist/webpack-4/entryA.js
new file mode 100644
index 00000000..5acb29eb
--- /dev/null
+++ b/examples/chunk-optimization/dist/webpack-4/entryA.js
@@ -0,0 +1,170 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ // install a JSONP callback for chunk loading
+/******/ function webpackJsonpCallback(data) {
+/******/ var chunkIds = data[0];
+/******/ var moreModules = data[1];
+/******/ var executeModules = data[2];
+/******/
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0, resolves = [];
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(installedChunks[chunkId]) {
+/******/ resolves.push(installedChunks[chunkId][0]);
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ for(moduleId in moreModules) {
+/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
+/******/ modules[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(parentJsonpFunction) parentJsonpFunction(data);
+/******/
+/******/ while(resolves.length) {
+/******/ resolves.shift()();
+/******/ }
+/******/
+/******/ // add entry modules from loaded chunk to deferred list
+/******/ deferredModules.push.apply(deferredModules, executeModules || []);
+/******/
+/******/ // run deferred modules when all chunks ready
+/******/ return checkDeferredModules();
+/******/ };
+/******/ function checkDeferredModules() {
+/******/ var result;
+/******/ for(var i = 0; i < deferredModules.length; i++) {
+/******/ var deferredModule = deferredModules[i];
+/******/ var fulfilled = true;
+/******/ for(var j = 1; j < deferredModule.length; j++) {
+/******/ var depId = deferredModule[j];
+/******/ if(installedChunks[depId] !== 0) fulfilled = false;
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferredModules.splice(i--, 1);
+/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
+/******/ }
+/******/ }
+/******/ return result;
+/******/ }
+/******/
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // Promise = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ 3: 0
+/******/ };
+/******/
+/******/ var deferredModules = [];
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
+/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
+/******/ jsonpArray.push = webpackJsonpCallback;
+/******/ jsonpArray = jsonpArray.slice();
+/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
+/******/ var parentJsonpFunction = oldJsonpFunction;
+/******/
+/******/
+/******/ // add entry module to deferred list
+/******/ deferredModules.push([2,0,5,1,2]);
+/******/ // run deferred modules when ready
+/******/ return checkDeferredModules();
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 2:
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(0);
+var multiply = __webpack_require__(1);
+var concat = __webpack_require__(8);
+var h1 = document.createElement('h1');
+h1.innerHTML = concat('Hello world from Entry ', multiply(1, 1));
+document.body.appendChild(h1);
+
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/examples/chunk-optimization/dist/webpack-4/entryA~entryB.js b/examples/chunk-optimization/dist/webpack-4/entryA~entryB.js
new file mode 100644
index 00000000..a3404532
--- /dev/null
+++ b/examples/chunk-optimization/dist/webpack-4/entryA~entryB.js
@@ -0,0 +1,43 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[2],[
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__(3);
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__(5)(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+/* 1 */,
+/* 2 */,
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__(4)(false);
+// imports
+
+
+// module
+exports.push([module.i, "body {\n background: snow;\n}", ""]);
+
+// exports
+
+
+/***/ })
+]]);
\ No newline at end of file
diff --git a/examples/chunk-optimization/dist/webpack-4/entryB.html b/examples/chunk-optimization/dist/webpack-4/entryB.html
new file mode 100644
index 00000000..1867dd39
--- /dev/null
+++ b/examples/chunk-optimization/dist/webpack-4/entryB.html
@@ -0,0 +1 @@
+Webpack App
\ No newline at end of file
diff --git a/examples/chunk-optimization/dist/webpack-4/entryB.js b/examples/chunk-optimization/dist/webpack-4/entryB.js
new file mode 100644
index 00000000..b3d5b0f2
--- /dev/null
+++ b/examples/chunk-optimization/dist/webpack-4/entryB.js
@@ -0,0 +1,169 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ // install a JSONP callback for chunk loading
+/******/ function webpackJsonpCallback(data) {
+/******/ var chunkIds = data[0];
+/******/ var moreModules = data[1];
+/******/ var executeModules = data[2];
+/******/
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0, resolves = [];
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(installedChunks[chunkId]) {
+/******/ resolves.push(installedChunks[chunkId][0]);
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ for(moduleId in moreModules) {
+/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
+/******/ modules[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(parentJsonpFunction) parentJsonpFunction(data);
+/******/
+/******/ while(resolves.length) {
+/******/ resolves.shift()();
+/******/ }
+/******/
+/******/ // add entry modules from loaded chunk to deferred list
+/******/ deferredModules.push.apply(deferredModules, executeModules || []);
+/******/
+/******/ // run deferred modules when all chunks ready
+/******/ return checkDeferredModules();
+/******/ };
+/******/ function checkDeferredModules() {
+/******/ var result;
+/******/ for(var i = 0; i < deferredModules.length; i++) {
+/******/ var deferredModule = deferredModules[i];
+/******/ var fulfilled = true;
+/******/ for(var j = 1; j < deferredModule.length; j++) {
+/******/ var depId = deferredModule[j];
+/******/ if(installedChunks[depId] !== 0) fulfilled = false;
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferredModules.splice(i--, 1);
+/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
+/******/ }
+/******/ }
+/******/ return result;
+/******/ }
+/******/
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // Promise = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ 4: 0
+/******/ };
+/******/
+/******/ var deferredModules = [];
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
+/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
+/******/ jsonpArray.push = webpackJsonpCallback;
+/******/ jsonpArray = jsonpArray.slice();
+/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
+/******/ var parentJsonpFunction = oldJsonpFunction;
+/******/
+/******/
+/******/ // add entry module to deferred list
+/******/ deferredModules.push([9,0,1,2]);
+/******/ // run deferred modules when ready
+/******/ return checkDeferredModules();
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 9:
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(0);
+var multiply = __webpack_require__(1);
+var h1 = document.createElement('h1');
+h1.innerHTML = 'Hello world from Entry ' + multiply(1, 2);
+document.body.appendChild(h1);
+
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/examples/chunk-optimization/dist/webpack-4/entryC.html b/examples/chunk-optimization/dist/webpack-4/entryC.html
new file mode 100644
index 00000000..ae72852f
--- /dev/null
+++ b/examples/chunk-optimization/dist/webpack-4/entryC.html
@@ -0,0 +1 @@
+Webpack App
\ No newline at end of file
diff --git a/examples/chunk-optimization/dist/webpack-4/libMath.js b/examples/chunk-optimization/dist/webpack-4/libMath.js
new file mode 100644
index 00000000..cc8f6c3c
--- /dev/null
+++ b/examples/chunk-optimization/dist/webpack-4/libMath.js
@@ -0,0 +1,28 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{
+
+/***/ 1:
+/***/ (function(module, exports, __webpack_require__) {
+
+var sum = __webpack_require__(7);
+module.exports = function multiply (a, b) {
+ var m = 0;
+ for (var i = 0; i < a; i = sum(i, 1)) {
+ m = sum(m, b);
+ }
+ return m;
+};
+
+
+/***/ }),
+
+/***/ 7:
+/***/ (function(module, exports) {
+
+module.exports = function sum (a, b) {
+ return a + b;
+};
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/examples/chunk-optimization/dist/webpack-4/libText.js b/examples/chunk-optimization/dist/webpack-4/libText.js
new file mode 100644
index 00000000..8a224113
--- /dev/null
+++ b/examples/chunk-optimization/dist/webpack-4/libText.js
@@ -0,0 +1,13 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[5],{
+
+/***/ 8:
+/***/ (function(module, exports) {
+
+module.exports = function concat (a, b) {
+ return String(a) + String(b);
+};
+
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/examples/chunk-optimization/dist/webpack-4/vendors~entryA~entryB.js b/examples/chunk-optimization/dist/webpack-4/vendors~entryA~entryB.js
new file mode 100644
index 00000000..9c8dbc50
--- /dev/null
+++ b/examples/chunk-optimization/dist/webpack-4/vendors~entryA~entryB.js
@@ -0,0 +1,585 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[1],[
+/* 0 */,
+/* 1 */,
+/* 2 */,
+/* 3 */,
+/* 4 */
+/***/ (function(module, exports) {
+
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+// css base code, injected by the css-loader
+module.exports = function(useSourceMap) {
+ var list = [];
+
+ // return the list of modules as css string
+ list.toString = function toString() {
+ return this.map(function (item) {
+ var content = cssWithMappingToString(item, useSourceMap);
+ if(item[2]) {
+ return "@media " + item[2] + "{" + content + "}";
+ } else {
+ return content;
+ }
+ }).join("");
+ };
+
+ // import a list of modules into the list
+ list.i = function(modules, mediaQuery) {
+ if(typeof modules === "string")
+ modules = [[null, modules, ""]];
+ var alreadyImportedModules = {};
+ for(var i = 0; i < this.length; i++) {
+ var id = this[i][0];
+ if(typeof id === "number")
+ alreadyImportedModules[id] = true;
+ }
+ for(i = 0; i < modules.length; i++) {
+ var item = modules[i];
+ // skip already imported module
+ // this implementation is not 100% perfect for weird media query combinations
+ // when a module is imported multiple times with different media queries.
+ // I hope this will never occur (Hey this way we have smaller bundles)
+ if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
+ if(mediaQuery && !item[2]) {
+ item[2] = mediaQuery;
+ } else if(mediaQuery) {
+ item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
+ }
+ list.push(item);
+ }
+ }
+ };
+ return list;
+};
+
+function cssWithMappingToString(item, useSourceMap) {
+ var content = item[1] || '';
+ var cssMapping = item[3];
+ if (!cssMapping) {
+ return content;
+ }
+
+ if (useSourceMap && typeof btoa === 'function') {
+ var sourceMapping = toComment(cssMapping);
+ var sourceURLs = cssMapping.sources.map(function (source) {
+ return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'
+ });
+
+ return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
+ }
+
+ return [content].join('\n');
+}
+
+// Adapted from convert-source-map (MIT)
+function toComment(sourceMap) {
+ // eslint-disable-next-line no-undef
+ var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
+ var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
+
+ return '/*# ' + data + ' */';
+}
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+
+var stylesInDom = {};
+
+var memoize = function (fn) {
+ var memo;
+
+ return function () {
+ if (typeof memo === "undefined") memo = fn.apply(this, arguments);
+ return memo;
+ };
+};
+
+var isOldIE = memoize(function () {
+ // Test for IE <= 9 as proposed by Browserhacks
+ // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
+ // Tests for existence of standard globals is to allow style-loader
+ // to operate correctly into non-standard environments
+ // @see https://github.com/webpack-contrib/style-loader/issues/177
+ return window && document && document.all && !window.atob;
+});
+
+var getTarget = function (target, parent) {
+ if (parent){
+ return parent.querySelector(target);
+ }
+ return document.querySelector(target);
+};
+
+var getElement = (function (fn) {
+ var memo = {};
+
+ return function(target, parent) {
+ // If passing function in options, then use it for resolve "head" element.
+ // Useful for Shadow Root style i.e
+ // {
+ // insertInto: function () { return document.querySelector("#foo").shadowRoot }
+ // }
+ if (typeof target === 'function') {
+ return target();
+ }
+ if (typeof memo[target] === "undefined") {
+ var styleTarget = getTarget.call(this, target, parent);
+ // Special case to return head of iframe instead of iframe itself
+ if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
+ try {
+ // This will throw an exception if access to iframe is blocked
+ // due to cross-origin restrictions
+ styleTarget = styleTarget.contentDocument.head;
+ } catch(e) {
+ styleTarget = null;
+ }
+ }
+ memo[target] = styleTarget;
+ }
+ return memo[target]
+ };
+})();
+
+var singleton = null;
+var singletonCounter = 0;
+var stylesInsertedAtTop = [];
+
+var fixUrls = __webpack_require__(6);
+
+module.exports = function(list, options) {
+ if (typeof DEBUG !== "undefined" && DEBUG) {
+ if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
+ }
+
+ options = options || {};
+
+ options.attrs = typeof options.attrs === "object" ? options.attrs : {};
+
+ // Force single-tag solution on IE6-9, which has a hard limit on the # of
\ No newline at end of file
diff --git a/examples/inline/dist/webpack-1/styles.css b/examples/inline/dist/webpack-1/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/inline/dist/webpack-1/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/inline/dist/webpack-2/bundle.js b/examples/inline/dist/webpack-2/bundle.js
deleted file mode 100644
index 4cd14355..00000000
--- a/examples/inline/dist/webpack-2/bundle.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-// removed by extract-text-webpack-plugin
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-__webpack_require__(0);
-
-console.log('Hello World');
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/inline/dist/webpack-2/favicon.ico b/examples/inline/dist/webpack-2/favicon.ico
deleted file mode 100644
index be74abd6..00000000
Binary files a/examples/inline/dist/webpack-2/favicon.ico and /dev/null differ
diff --git a/examples/inline/dist/webpack-2/index.html b/examples/inline/dist/webpack-2/index.html
deleted file mode 100644
index aa371731..00000000
--- a/examples/inline/dist/webpack-2/index.html
+++ /dev/null
@@ -1,89 +0,0 @@
-Jade demo
\ No newline at end of file
diff --git a/examples/inline/dist/webpack-2/styles.css b/examples/inline/dist/webpack-2/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/inline/dist/webpack-2/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/inline/dist/webpack-3/bundle.js b/examples/inline/dist/webpack-3/bundle.js
deleted file mode 100644
index f719ff9a..00000000
--- a/examples/inline/dist/webpack-3/bundle.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-__webpack_require__(1);
-
-console.log('Hello World');
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-// removed by extract-text-webpack-plugin
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/inline/dist/webpack-3/favicon.ico b/examples/inline/dist/webpack-3/favicon.ico
deleted file mode 100644
index be74abd6..00000000
Binary files a/examples/inline/dist/webpack-3/favicon.ico and /dev/null differ
diff --git a/examples/inline/dist/webpack-3/index.html b/examples/inline/dist/webpack-3/index.html
deleted file mode 100644
index 97bc04b4..00000000
--- a/examples/inline/dist/webpack-3/index.html
+++ /dev/null
@@ -1,86 +0,0 @@
-Jade demo
\ No newline at end of file
diff --git a/examples/inline/dist/webpack-3/styles.css b/examples/inline/dist/webpack-3/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/inline/dist/webpack-3/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/inline/dist/webpack-4/bundle.js b/examples/inline/dist/webpack-4/bundle.js
index bd257a0d..9d4ffbaa 100644
--- a/examples/inline/dist/webpack-4/bundle.js
+++ b/examples/inline/dist/webpack-4/bundle.js
@@ -36,19 +36,34 @@
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
@@ -75,19 +90,16 @@
"use strict";
-__webpack_require__(4);
+__webpack_require__(1);
console.log('Hello World');
/***/ }),
-/* 1 */,
-/* 2 */,
-/* 3 */,
-/* 4 */
-/***/ (function(module, exports) {
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
-// removed by extract-text-webpack-plugin
+// extracted by mini-css-extract-plugin
/***/ })
/******/ ]);
\ No newline at end of file
diff --git a/examples/inline/dist/webpack-4/index.html b/examples/inline/dist/webpack-4/index.html
index b49fc66a..87c25024 100644
--- a/examples/inline/dist/webpack-4/index.html
+++ b/examples/inline/dist/webpack-4/index.html
@@ -1,6 +1,6 @@
-Jade demo
\ No newline at end of file
diff --git a/examples/inline/dist/webpack-4/styles.css b/examples/inline/dist/webpack-4/styles.css
index 232a2cdb..e86486ba 100644
--- a/examples/inline/dist/webpack-4/styles.css
+++ b/examples/inline/dist/webpack-4/styles.css
@@ -1,3 +1,3 @@
body {
background: snow;
-}
\ No newline at end of file
+}
diff --git a/examples/inline/readme.md b/examples/inline/readme.md
index 1d58a191..df551640 100644
--- a/examples/inline/readme.md
+++ b/examples/inline/readme.md
@@ -1,4 +1,4 @@
-# isomorphic jade example
+# isomorphic pug example
-This example shows how to use a different template engine (in this case jade)
-to load the `time.jade` template on the backend and frontend.
+This example shows how to use a different template engine (in this case pug)
+to load the `time.pug` template on the backend and frontend.
diff --git a/examples/inline/template.jade b/examples/inline/template.pug
similarity index 58%
rename from examples/inline/template.jade
rename to examples/inline/template.pug
index cc47fd6a..b4337d6a 100644
--- a/examples/inline/template.jade
+++ b/examples/inline/template.pug
@@ -1,10 +1,10 @@
doctype html
html
head
- meta(http-equiv="Content-type" content="text/html; charset=utf-8")
+ meta(charset="utf-8")
title #{htmlWebpackPlugin.options.title}
body
each cssFile in htmlWebpackPlugin.files.css
style !{compilation.assets[cssFile.substr(htmlWebpackPlugin.files.publicPath.length)].source()}
each jsFile in htmlWebpackPlugin.files.js
- script(type="text/javascript") !{compilation.assets[jsFile.substr(htmlWebpackPlugin.files.publicPath.length)].source()}
+ script !{compilation.assets[jsFile.substr(htmlWebpackPlugin.files.publicPath.length)].source()}
diff --git a/examples/inline/webpack.config.js b/examples/inline/webpack.config.js
index 15cabfdb..752644a5 100755
--- a/examples/inline/webpack.config.js
+++ b/examples/inline/webpack.config.js
@@ -1,6 +1,6 @@
var path = require('path');
var HtmlWebpackPlugin = require('../..');
-var ExtractTextPlugin = require('extract-text-webpack-plugin');
+var MiniCssExtractPlugin = require('mini-css-extract-plugin');
var webpackMajorVersion = require('webpack/package.json').version.split('.')[0];
module.exports = {
@@ -12,20 +12,20 @@ module.exports = {
filename: 'bundle.js'
},
module: {
- loaders: [
- { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader') },
- { test: /\.jade$/, loader: 'jade-loader' }
+ rules: [
+ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'] },
+ { test: /\.pug$/, loader: 'pug-loader' }
]
},
plugins: [
new HtmlWebpackPlugin({
inject: false,
cache: false,
- template: 'template.jade',
+ template: 'template.pug',
filename: 'index.html',
favicon: 'favicon.ico',
- title: 'Jade demo'
+ title: 'pug demo'
}),
- new ExtractTextPlugin('styles.css')
+ new MiniCssExtractPlugin({ filename: 'styles.css' })
]
};
diff --git a/examples/jade-loader/dist/webpack-1/0714810ae3fb211173e2964249507195.png b/examples/jade-loader/dist/webpack-1/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/jade-loader/dist/webpack-1/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/jade-loader/dist/webpack-1/bundle.js b/examples/jade-loader/dist/webpack-1/bundle.js
deleted file mode 100644
index 555e7866..00000000
--- a/examples/jade-loader/dist/webpack-1/bundle.js
+++ /dev/null
@@ -1,347 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
- 'use strict';
- __webpack_require__(1);
- // Use the same template for the frontend code
- var template = __webpack_require__(5);
-
- setInterval(function () {
- var div = document.getElementById('main');
- div.innerHTML = template({ time: new Date() });
- div.style.color = 'navy';
- }, 1000);
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
- // removed by extract-text-webpack-plugin
-
-/***/ }),
-/* 2 */,
-/* 3 */,
-/* 4 */,
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
- var jade = __webpack_require__(6);
-
- module.exports = function template(locals) {
- var buf = [];
- var jade_mixins = {};
- var jade_interp;
- ;var locals_for_with = (locals || {});(function (time) {
- buf.push(" Current time " + (jade.escape((jade_interp = time.toISOString()) == null ? '' : jade_interp)) + "
");}.call(this,"time" in locals_for_with?locals_for_with.time:typeof time!=="undefined"?time:undefined));;return buf.join("");
- }
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
- 'use strict';
-
- /**
- * Merge two attribute objects giving precedence
- * to values in object `b`. Classes are special-cased
- * allowing for arrays and merging/joining appropriately
- * resulting in a string.
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object} a
- * @api private
- */
-
- exports.merge = function merge(a, b) {
- if (arguments.length === 1) {
- var attrs = a[0];
- for (var i = 1; i < a.length; i++) {
- attrs = merge(attrs, a[i]);
- }
- return attrs;
- }
- var ac = a['class'];
- var bc = b['class'];
-
- if (ac || bc) {
- ac = ac || [];
- bc = bc || [];
- if (!Array.isArray(ac)) ac = [ac];
- if (!Array.isArray(bc)) bc = [bc];
- a['class'] = ac.concat(bc).filter(nulls);
- }
-
- for (var key in b) {
- if (key != 'class') {
- a[key] = b[key];
- }
- }
-
- return a;
- };
-
- /**
- * Filter null `val`s.
- *
- * @param {*} val
- * @return {Boolean}
- * @api private
- */
-
- function nulls(val) {
- return val != null && val !== '';
- }
-
- /**
- * join array as classes.
- *
- * @param {*} val
- * @return {String}
- */
- exports.joinClasses = joinClasses;
- function joinClasses(val) {
- return (Array.isArray(val) ? val.map(joinClasses) :
- (val && typeof val === 'object') ? Object.keys(val).filter(function (key) { return val[key]; }) :
- [val]).filter(nulls).join(' ');
- }
-
- /**
- * Render the given classes.
- *
- * @param {Array} classes
- * @param {Array.} escaped
- * @return {String}
- */
- exports.cls = function cls(classes, escaped) {
- var buf = [];
- for (var i = 0; i < classes.length; i++) {
- if (escaped && escaped[i]) {
- buf.push(exports.escape(joinClasses([classes[i]])));
- } else {
- buf.push(joinClasses(classes[i]));
- }
- }
- var text = joinClasses(buf);
- if (text.length) {
- return ' class="' + text + '"';
- } else {
- return '';
- }
- };
-
-
- exports.style = function (val) {
- if (val && typeof val === 'object') {
- return Object.keys(val).map(function (style) {
- return style + ':' + val[style];
- }).join(';');
- } else {
- return val;
- }
- };
- /**
- * Render the given attribute.
- *
- * @param {String} key
- * @param {String} val
- * @param {Boolean} escaped
- * @param {Boolean} terse
- * @return {String}
- */
- exports.attr = function attr(key, val, escaped, terse) {
- if (key === 'style') {
- val = exports.style(val);
- }
- if ('boolean' == typeof val || null == val) {
- if (val) {
- return ' ' + (terse ? key : key + '="' + key + '"');
- } else {
- return '';
- }
- } else if (0 == key.indexOf('data') && 'string' != typeof val) {
- if (JSON.stringify(val).indexOf('&') !== -1) {
- console.warn('Since Jade 2.0.0, ampersands (`&`) in data attributes ' +
- 'will be escaped to `&`');
- };
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will eliminate the double quotes around dates in ' +
- 'ISO form after 2.0.0');
- }
- return ' ' + key + "='" + JSON.stringify(val).replace(/'/g, ''') + "'";
- } else if (escaped) {
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will stringify dates in ISO form after 2.0.0');
- }
- return ' ' + key + '="' + exports.escape(val) + '"';
- } else {
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will stringify dates in ISO form after 2.0.0');
- }
- return ' ' + key + '="' + val + '"';
- }
- };
-
- /**
- * Render the given attributes object.
- *
- * @param {Object} obj
- * @param {Object} escaped
- * @return {String}
- */
- exports.attrs = function attrs(obj, terse){
- var buf = [];
-
- var keys = Object.keys(obj);
-
- if (keys.length) {
- for (var i = 0; i < keys.length; ++i) {
- var key = keys[i]
- , val = obj[key];
-
- if ('class' == key) {
- if (val = joinClasses(val)) {
- buf.push(' ' + key + '="' + val + '"');
- }
- } else {
- buf.push(exports.attr(key, val, false, terse));
- }
- }
- }
-
- return buf.join('');
- };
-
- /**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
- var jade_encode_html_rules = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"'
- };
- var jade_match_html = /[&<>"]/g;
-
- function jade_encode_char(c) {
- return jade_encode_html_rules[c] || c;
- }
-
- exports.escape = jade_escape;
- function jade_escape(html){
- var result = String(html).replace(jade_match_html, jade_encode_char);
- if (result === '' + html) return html;
- else return result;
- };
-
- /**
- * Re-throw the given `err` in context to the
- * the jade in `filename` at the given `lineno`.
- *
- * @param {Error} err
- * @param {String} filename
- * @param {String} lineno
- * @api private
- */
-
- exports.rethrow = function rethrow(err, filename, lineno, str){
- if (!(err instanceof Error)) throw err;
- if ((typeof window != 'undefined' || !filename) && !str) {
- err.message += ' on line ' + lineno;
- throw err;
- }
- try {
- str = str || __webpack_require__(7).readFileSync(filename, 'utf8')
- } catch (ex) {
- rethrow(err, null, lineno)
- }
- var context = 3
- , lines = str.split('\n')
- , start = Math.max(lineno - context, 0)
- , end = Math.min(lines.length, lineno + context);
-
- // Error context
- var context = lines.slice(start, end).map(function(line, i){
- var curr = i + start + 1;
- return (curr == lineno ? ' > ' : ' ')
- + curr
- + '| '
- + line;
- }).join('\n');
-
- // Alter exception message
- err.path = filename;
- err.message = (filename || 'Jade') + ':' + lineno
- + '\n' + context + '\n\n' + err.message;
- throw err;
- };
-
- exports.DebugItem = function DebugItem(lineno, filename) {
- this.lineno = lineno;
- this.filename = filename;
- }
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports) {
-
- /* (ignored) */
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
- module.exports = __webpack_require__.p + "0714810ae3fb211173e2964249507195.png";
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-1/favicon.ico b/examples/jade-loader/dist/webpack-1/favicon.ico
deleted file mode 100644
index be74abd6..00000000
Binary files a/examples/jade-loader/dist/webpack-1/favicon.ico and /dev/null differ
diff --git a/examples/jade-loader/dist/webpack-1/index.html b/examples/jade-loader/dist/webpack-1/index.html
deleted file mode 100644
index f1821b3c..00000000
--- a/examples/jade-loader/dist/webpack-1/index.html
+++ /dev/null
@@ -1 +0,0 @@
-Jade demo Current time 1998-12-31T23:00:00.000Z
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-1/styles.css b/examples/jade-loader/dist/webpack-1/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/jade-loader/dist/webpack-1/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-2/0714810ae3fb211173e2964249507195.png b/examples/jade-loader/dist/webpack-2/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/jade-loader/dist/webpack-2/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/jade-loader/dist/webpack-2/bundle.js b/examples/jade-loader/dist/webpack-2/bundle.js
deleted file mode 100644
index aef75c6a..00000000
--- a/examples/jade-loader/dist/webpack-2/bundle.js
+++ /dev/null
@@ -1,372 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 2);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-// removed by extract-text-webpack-plugin
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var jade = __webpack_require__(4);
-
-module.exports = function template(locals) {
-var buf = [];
-var jade_mixins = {};
-var jade_interp;
-;var locals_for_with = (locals || {});(function (time) {
-buf.push(" Current time " + (jade.escape((jade_interp = time.toISOString()) == null ? '' : jade_interp)) + "
");}.call(this,"time" in locals_for_with?locals_for_with.time:typeof time!=="undefined"?time:undefined));;return buf.join("");
-}
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-__webpack_require__(0);
-// Use the same template for the frontend code
-var template = __webpack_require__(1);
-
-setInterval(function () {
- var div = document.getElementById('main');
- div.innerHTML = template({ time: new Date() });
- div.style.color = 'navy';
-}, 1000);
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__.p + "0714810ae3fb211173e2964249507195.png";
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/**
- * Merge two attribute objects giving precedence
- * to values in object `b`. Classes are special-cased
- * allowing for arrays and merging/joining appropriately
- * resulting in a string.
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object} a
- * @api private
- */
-
-exports.merge = function merge(a, b) {
- if (arguments.length === 1) {
- var attrs = a[0];
- for (var i = 1; i < a.length; i++) {
- attrs = merge(attrs, a[i]);
- }
- return attrs;
- }
- var ac = a['class'];
- var bc = b['class'];
-
- if (ac || bc) {
- ac = ac || [];
- bc = bc || [];
- if (!Array.isArray(ac)) ac = [ac];
- if (!Array.isArray(bc)) bc = [bc];
- a['class'] = ac.concat(bc).filter(nulls);
- }
-
- for (var key in b) {
- if (key != 'class') {
- a[key] = b[key];
- }
- }
-
- return a;
-};
-
-/**
- * Filter null `val`s.
- *
- * @param {*} val
- * @return {Boolean}
- * @api private
- */
-
-function nulls(val) {
- return val != null && val !== '';
-}
-
-/**
- * join array as classes.
- *
- * @param {*} val
- * @return {String}
- */
-exports.joinClasses = joinClasses;
-function joinClasses(val) {
- return (Array.isArray(val) ? val.map(joinClasses) :
- (val && typeof val === 'object') ? Object.keys(val).filter(function (key) { return val[key]; }) :
- [val]).filter(nulls).join(' ');
-}
-
-/**
- * Render the given classes.
- *
- * @param {Array} classes
- * @param {Array.} escaped
- * @return {String}
- */
-exports.cls = function cls(classes, escaped) {
- var buf = [];
- for (var i = 0; i < classes.length; i++) {
- if (escaped && escaped[i]) {
- buf.push(exports.escape(joinClasses([classes[i]])));
- } else {
- buf.push(joinClasses(classes[i]));
- }
- }
- var text = joinClasses(buf);
- if (text.length) {
- return ' class="' + text + '"';
- } else {
- return '';
- }
-};
-
-
-exports.style = function (val) {
- if (val && typeof val === 'object') {
- return Object.keys(val).map(function (style) {
- return style + ':' + val[style];
- }).join(';');
- } else {
- return val;
- }
-};
-/**
- * Render the given attribute.
- *
- * @param {String} key
- * @param {String} val
- * @param {Boolean} escaped
- * @param {Boolean} terse
- * @return {String}
- */
-exports.attr = function attr(key, val, escaped, terse) {
- if (key === 'style') {
- val = exports.style(val);
- }
- if ('boolean' == typeof val || null == val) {
- if (val) {
- return ' ' + (terse ? key : key + '="' + key + '"');
- } else {
- return '';
- }
- } else if (0 == key.indexOf('data') && 'string' != typeof val) {
- if (JSON.stringify(val).indexOf('&') !== -1) {
- console.warn('Since Jade 2.0.0, ampersands (`&`) in data attributes ' +
- 'will be escaped to `&`');
- };
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will eliminate the double quotes around dates in ' +
- 'ISO form after 2.0.0');
- }
- return ' ' + key + "='" + JSON.stringify(val).replace(/'/g, ''') + "'";
- } else if (escaped) {
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will stringify dates in ISO form after 2.0.0');
- }
- return ' ' + key + '="' + exports.escape(val) + '"';
- } else {
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will stringify dates in ISO form after 2.0.0');
- }
- return ' ' + key + '="' + val + '"';
- }
-};
-
-/**
- * Render the given attributes object.
- *
- * @param {Object} obj
- * @param {Object} escaped
- * @return {String}
- */
-exports.attrs = function attrs(obj, terse){
- var buf = [];
-
- var keys = Object.keys(obj);
-
- if (keys.length) {
- for (var i = 0; i < keys.length; ++i) {
- var key = keys[i]
- , val = obj[key];
-
- if ('class' == key) {
- if (val = joinClasses(val)) {
- buf.push(' ' + key + '="' + val + '"');
- }
- } else {
- buf.push(exports.attr(key, val, false, terse));
- }
- }
- }
-
- return buf.join('');
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-var jade_encode_html_rules = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"'
-};
-var jade_match_html = /[&<>"]/g;
-
-function jade_encode_char(c) {
- return jade_encode_html_rules[c] || c;
-}
-
-exports.escape = jade_escape;
-function jade_escape(html){
- var result = String(html).replace(jade_match_html, jade_encode_char);
- if (result === '' + html) return html;
- else return result;
-};
-
-/**
- * Re-throw the given `err` in context to the
- * the jade in `filename` at the given `lineno`.
- *
- * @param {Error} err
- * @param {String} filename
- * @param {String} lineno
- * @api private
- */
-
-exports.rethrow = function rethrow(err, filename, lineno, str){
- if (!(err instanceof Error)) throw err;
- if ((typeof window != 'undefined' || !filename) && !str) {
- err.message += ' on line ' + lineno;
- throw err;
- }
- try {
- str = str || __webpack_require__(5).readFileSync(filename, 'utf8')
- } catch (ex) {
- rethrow(err, null, lineno)
- }
- var context = 3
- , lines = str.split('\n')
- , start = Math.max(lineno - context, 0)
- , end = Math.min(lines.length, lineno + context);
-
- // Error context
- var context = lines.slice(start, end).map(function(line, i){
- var curr = i + start + 1;
- return (curr == lineno ? ' > ' : ' ')
- + curr
- + '| '
- + line;
- }).join('\n');
-
- // Alter exception message
- err.path = filename;
- err.message = (filename || 'Jade') + ':' + lineno
- + '\n' + context + '\n\n' + err.message;
- throw err;
-};
-
-exports.DebugItem = function DebugItem(lineno, filename) {
- this.lineno = lineno;
- this.filename = filename;
-}
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports) {
-
-/* (ignored) */
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-2/favicon.ico b/examples/jade-loader/dist/webpack-2/favicon.ico
deleted file mode 100644
index be74abd6..00000000
Binary files a/examples/jade-loader/dist/webpack-2/favicon.ico and /dev/null differ
diff --git a/examples/jade-loader/dist/webpack-2/index.html b/examples/jade-loader/dist/webpack-2/index.html
deleted file mode 100644
index f1821b3c..00000000
--- a/examples/jade-loader/dist/webpack-2/index.html
+++ /dev/null
@@ -1 +0,0 @@
-Jade demo Current time 1998-12-31T23:00:00.000Z
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-2/styles.css b/examples/jade-loader/dist/webpack-2/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/jade-loader/dist/webpack-2/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-3/0714810ae3fb211173e2964249507195.png b/examples/jade-loader/dist/webpack-3/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/jade-loader/dist/webpack-3/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/jade-loader/dist/webpack-3/bundle.js b/examples/jade-loader/dist/webpack-3/bundle.js
deleted file mode 100644
index 8bee19da..00000000
--- a/examples/jade-loader/dist/webpack-3/bundle.js
+++ /dev/null
@@ -1,369 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-__webpack_require__(1);
-// Use the same template for the frontend code
-var template = __webpack_require__(2);
-
-setInterval(function () {
- var div = document.getElementById('main');
- div.innerHTML = template({ time: new Date() });
- div.style.color = 'navy';
-}, 1000);
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-// removed by extract-text-webpack-plugin
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var jade = __webpack_require__(3);
-
-module.exports = function template(locals) {
-var buf = [];
-var jade_mixins = {};
-var jade_interp;
-;var locals_for_with = (locals || {});(function (time) {
-buf.push(" Current time " + (jade.escape((jade_interp = time.toISOString()) == null ? '' : jade_interp)) + "
");}.call(this,"time" in locals_for_with?locals_for_with.time:typeof time!=="undefined"?time:undefined));;return buf.join("");
-}
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/**
- * Merge two attribute objects giving precedence
- * to values in object `b`. Classes are special-cased
- * allowing for arrays and merging/joining appropriately
- * resulting in a string.
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object} a
- * @api private
- */
-
-exports.merge = function merge(a, b) {
- if (arguments.length === 1) {
- var attrs = a[0];
- for (var i = 1; i < a.length; i++) {
- attrs = merge(attrs, a[i]);
- }
- return attrs;
- }
- var ac = a['class'];
- var bc = b['class'];
-
- if (ac || bc) {
- ac = ac || [];
- bc = bc || [];
- if (!Array.isArray(ac)) ac = [ac];
- if (!Array.isArray(bc)) bc = [bc];
- a['class'] = ac.concat(bc).filter(nulls);
- }
-
- for (var key in b) {
- if (key != 'class') {
- a[key] = b[key];
- }
- }
-
- return a;
-};
-
-/**
- * Filter null `val`s.
- *
- * @param {*} val
- * @return {Boolean}
- * @api private
- */
-
-function nulls(val) {
- return val != null && val !== '';
-}
-
-/**
- * join array as classes.
- *
- * @param {*} val
- * @return {String}
- */
-exports.joinClasses = joinClasses;
-function joinClasses(val) {
- return (Array.isArray(val) ? val.map(joinClasses) :
- (val && typeof val === 'object') ? Object.keys(val).filter(function (key) { return val[key]; }) :
- [val]).filter(nulls).join(' ');
-}
-
-/**
- * Render the given classes.
- *
- * @param {Array} classes
- * @param {Array.} escaped
- * @return {String}
- */
-exports.cls = function cls(classes, escaped) {
- var buf = [];
- for (var i = 0; i < classes.length; i++) {
- if (escaped && escaped[i]) {
- buf.push(exports.escape(joinClasses([classes[i]])));
- } else {
- buf.push(joinClasses(classes[i]));
- }
- }
- var text = joinClasses(buf);
- if (text.length) {
- return ' class="' + text + '"';
- } else {
- return '';
- }
-};
-
-
-exports.style = function (val) {
- if (val && typeof val === 'object') {
- return Object.keys(val).map(function (style) {
- return style + ':' + val[style];
- }).join(';');
- } else {
- return val;
- }
-};
-/**
- * Render the given attribute.
- *
- * @param {String} key
- * @param {String} val
- * @param {Boolean} escaped
- * @param {Boolean} terse
- * @return {String}
- */
-exports.attr = function attr(key, val, escaped, terse) {
- if (key === 'style') {
- val = exports.style(val);
- }
- if ('boolean' == typeof val || null == val) {
- if (val) {
- return ' ' + (terse ? key : key + '="' + key + '"');
- } else {
- return '';
- }
- } else if (0 == key.indexOf('data') && 'string' != typeof val) {
- if (JSON.stringify(val).indexOf('&') !== -1) {
- console.warn('Since Jade 2.0.0, ampersands (`&`) in data attributes ' +
- 'will be escaped to `&`');
- };
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will eliminate the double quotes around dates in ' +
- 'ISO form after 2.0.0');
- }
- return ' ' + key + "='" + JSON.stringify(val).replace(/'/g, ''') + "'";
- } else if (escaped) {
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will stringify dates in ISO form after 2.0.0');
- }
- return ' ' + key + '="' + exports.escape(val) + '"';
- } else {
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will stringify dates in ISO form after 2.0.0');
- }
- return ' ' + key + '="' + val + '"';
- }
-};
-
-/**
- * Render the given attributes object.
- *
- * @param {Object} obj
- * @param {Object} escaped
- * @return {String}
- */
-exports.attrs = function attrs(obj, terse){
- var buf = [];
-
- var keys = Object.keys(obj);
-
- if (keys.length) {
- for (var i = 0; i < keys.length; ++i) {
- var key = keys[i]
- , val = obj[key];
-
- if ('class' == key) {
- if (val = joinClasses(val)) {
- buf.push(' ' + key + '="' + val + '"');
- }
- } else {
- buf.push(exports.attr(key, val, false, terse));
- }
- }
- }
-
- return buf.join('');
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-var jade_encode_html_rules = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"'
-};
-var jade_match_html = /[&<>"]/g;
-
-function jade_encode_char(c) {
- return jade_encode_html_rules[c] || c;
-}
-
-exports.escape = jade_escape;
-function jade_escape(html){
- var result = String(html).replace(jade_match_html, jade_encode_char);
- if (result === '' + html) return html;
- else return result;
-};
-
-/**
- * Re-throw the given `err` in context to the
- * the jade in `filename` at the given `lineno`.
- *
- * @param {Error} err
- * @param {String} filename
- * @param {String} lineno
- * @api private
- */
-
-exports.rethrow = function rethrow(err, filename, lineno, str){
- if (!(err instanceof Error)) throw err;
- if ((typeof window != 'undefined' || !filename) && !str) {
- err.message += ' on line ' + lineno;
- throw err;
- }
- try {
- str = str || __webpack_require__(4).readFileSync(filename, 'utf8')
- } catch (ex) {
- rethrow(err, null, lineno)
- }
- var context = 3
- , lines = str.split('\n')
- , start = Math.max(lineno - context, 0)
- , end = Math.min(lines.length, lineno + context);
-
- // Error context
- var context = lines.slice(start, end).map(function(line, i){
- var curr = i + start + 1;
- return (curr == lineno ? ' > ' : ' ')
- + curr
- + '| '
- + line;
- }).join('\n');
-
- // Alter exception message
- err.path = filename;
- err.message = (filename || 'Jade') + ':' + lineno
- + '\n' + context + '\n\n' + err.message;
- throw err;
-};
-
-exports.DebugItem = function DebugItem(lineno, filename) {
- this.lineno = lineno;
- this.filename = filename;
-}
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports) {
-
-/* (ignored) */
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__.p + "0714810ae3fb211173e2964249507195.png";
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-3/favicon.ico b/examples/jade-loader/dist/webpack-3/favicon.ico
deleted file mode 100644
index be74abd6..00000000
Binary files a/examples/jade-loader/dist/webpack-3/favicon.ico and /dev/null differ
diff --git a/examples/jade-loader/dist/webpack-3/index.html b/examples/jade-loader/dist/webpack-3/index.html
deleted file mode 100644
index 916fa078..00000000
--- a/examples/jade-loader/dist/webpack-3/index.html
+++ /dev/null
@@ -1 +0,0 @@
-Jade demo Current time 1999-01-01T00:00:00.000Z
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-3/styles.css b/examples/jade-loader/dist/webpack-3/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/jade-loader/dist/webpack-3/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-4/0714810ae3fb211173e2964249507195.png b/examples/jade-loader/dist/webpack-4/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/jade-loader/dist/webpack-4/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/jade-loader/dist/webpack-4/bundle.js b/examples/jade-loader/dist/webpack-4/bundle.js
deleted file mode 100644
index 17d9d37a..00000000
--- a/examples/jade-loader/dist/webpack-4/bundle.js
+++ /dev/null
@@ -1,378 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 4);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__.p + "0714810ae3fb211173e2964249507195.png";
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-/* (ignored) */
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/**
- * Merge two attribute objects giving precedence
- * to values in object `b`. Classes are special-cased
- * allowing for arrays and merging/joining appropriately
- * resulting in a string.
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object} a
- * @api private
- */
-
-exports.merge = function merge(a, b) {
- if (arguments.length === 1) {
- var attrs = a[0];
- for (var i = 1; i < a.length; i++) {
- attrs = merge(attrs, a[i]);
- }
- return attrs;
- }
- var ac = a['class'];
- var bc = b['class'];
-
- if (ac || bc) {
- ac = ac || [];
- bc = bc || [];
- if (!Array.isArray(ac)) ac = [ac];
- if (!Array.isArray(bc)) bc = [bc];
- a['class'] = ac.concat(bc).filter(nulls);
- }
-
- for (var key in b) {
- if (key != 'class') {
- a[key] = b[key];
- }
- }
-
- return a;
-};
-
-/**
- * Filter null `val`s.
- *
- * @param {*} val
- * @return {Boolean}
- * @api private
- */
-
-function nulls(val) {
- return val != null && val !== '';
-}
-
-/**
- * join array as classes.
- *
- * @param {*} val
- * @return {String}
- */
-exports.joinClasses = joinClasses;
-function joinClasses(val) {
- return (Array.isArray(val) ? val.map(joinClasses) :
- (val && typeof val === 'object') ? Object.keys(val).filter(function (key) { return val[key]; }) :
- [val]).filter(nulls).join(' ');
-}
-
-/**
- * Render the given classes.
- *
- * @param {Array} classes
- * @param {Array.} escaped
- * @return {String}
- */
-exports.cls = function cls(classes, escaped) {
- var buf = [];
- for (var i = 0; i < classes.length; i++) {
- if (escaped && escaped[i]) {
- buf.push(exports.escape(joinClasses([classes[i]])));
- } else {
- buf.push(joinClasses(classes[i]));
- }
- }
- var text = joinClasses(buf);
- if (text.length) {
- return ' class="' + text + '"';
- } else {
- return '';
- }
-};
-
-
-exports.style = function (val) {
- if (val && typeof val === 'object') {
- return Object.keys(val).map(function (style) {
- return style + ':' + val[style];
- }).join(';');
- } else {
- return val;
- }
-};
-/**
- * Render the given attribute.
- *
- * @param {String} key
- * @param {String} val
- * @param {Boolean} escaped
- * @param {Boolean} terse
- * @return {String}
- */
-exports.attr = function attr(key, val, escaped, terse) {
- if (key === 'style') {
- val = exports.style(val);
- }
- if ('boolean' == typeof val || null == val) {
- if (val) {
- return ' ' + (terse ? key : key + '="' + key + '"');
- } else {
- return '';
- }
- } else if (0 == key.indexOf('data') && 'string' != typeof val) {
- if (JSON.stringify(val).indexOf('&') !== -1) {
- console.warn('Since Jade 2.0.0, ampersands (`&`) in data attributes ' +
- 'will be escaped to `&`');
- };
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will eliminate the double quotes around dates in ' +
- 'ISO form after 2.0.0');
- }
- return ' ' + key + "='" + JSON.stringify(val).replace(/'/g, ''') + "'";
- } else if (escaped) {
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will stringify dates in ISO form after 2.0.0');
- }
- return ' ' + key + '="' + exports.escape(val) + '"';
- } else {
- if (val && typeof val.toISOString === 'function') {
- console.warn('Jade will stringify dates in ISO form after 2.0.0');
- }
- return ' ' + key + '="' + val + '"';
- }
-};
-
-/**
- * Render the given attributes object.
- *
- * @param {Object} obj
- * @param {Object} escaped
- * @return {String}
- */
-exports.attrs = function attrs(obj, terse){
- var buf = [];
-
- var keys = Object.keys(obj);
-
- if (keys.length) {
- for (var i = 0; i < keys.length; ++i) {
- var key = keys[i]
- , val = obj[key];
-
- if ('class' == key) {
- if (val = joinClasses(val)) {
- buf.push(' ' + key + '="' + val + '"');
- }
- } else {
- buf.push(exports.attr(key, val, false, terse));
- }
- }
- }
-
- return buf.join('');
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-var jade_encode_html_rules = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"'
-};
-var jade_match_html = /[&<>"]/g;
-
-function jade_encode_char(c) {
- return jade_encode_html_rules[c] || c;
-}
-
-exports.escape = jade_escape;
-function jade_escape(html){
- var result = String(html).replace(jade_match_html, jade_encode_char);
- if (result === '' + html) return html;
- else return result;
-};
-
-/**
- * Re-throw the given `err` in context to the
- * the jade in `filename` at the given `lineno`.
- *
- * @param {Error} err
- * @param {String} filename
- * @param {String} lineno
- * @api private
- */
-
-exports.rethrow = function rethrow(err, filename, lineno, str){
- if (!(err instanceof Error)) throw err;
- if ((typeof window != 'undefined' || !filename) && !str) {
- err.message += ' on line ' + lineno;
- throw err;
- }
- try {
- str = str || __webpack_require__(1).readFileSync(filename, 'utf8')
- } catch (ex) {
- rethrow(err, null, lineno)
- }
- var context = 3
- , lines = str.split('\n')
- , start = Math.max(lineno - context, 0)
- , end = Math.min(lines.length, lineno + context);
-
- // Error context
- var context = lines.slice(start, end).map(function(line, i){
- var curr = i + start + 1;
- return (curr == lineno ? ' > ' : ' ')
- + curr
- + '| '
- + line;
- }).join('\n');
-
- // Alter exception message
- err.path = filename;
- err.message = (filename || 'Jade') + ':' + lineno
- + '\n' + context + '\n\n' + err.message;
- throw err;
-};
-
-exports.DebugItem = function DebugItem(lineno, filename) {
- this.lineno = lineno;
- this.filename = filename;
-}
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var jade = __webpack_require__(2);
-
-module.exports = function template(locals) {
-var buf = [];
-var jade_mixins = {};
-var jade_interp;
-;var locals_for_with = (locals || {});(function (time) {
-buf.push(" Current time " + (jade.escape((jade_interp = time.toISOString()) == null ? '' : jade_interp)) + "
");}.call(this,"time" in locals_for_with?locals_for_with.time:typeof time!=="undefined"?time:undefined));;return buf.join("");
-}
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-__webpack_require__(8);
-// Use the same template for the frontend code
-var template = __webpack_require__(3);
-
-setInterval(function () {
- var div = document.getElementById('main');
- div.innerHTML = template({ time: new Date() });
- div.style.color = 'navy';
-}, 1000);
-
-
-/***/ }),
-/* 5 */,
-/* 6 */,
-/* 7 */,
-/* 8 */
-/***/ (function(module, exports) {
-
-// removed by extract-text-webpack-plugin
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-4/favicon.ico b/examples/jade-loader/dist/webpack-4/favicon.ico
deleted file mode 100644
index be74abd6..00000000
Binary files a/examples/jade-loader/dist/webpack-4/favicon.ico and /dev/null differ
diff --git a/examples/jade-loader/dist/webpack-4/index.html b/examples/jade-loader/dist/webpack-4/index.html
deleted file mode 100644
index 51385f90..00000000
--- a/examples/jade-loader/dist/webpack-4/index.html
+++ /dev/null
@@ -1 +0,0 @@
-Jade demo Current time 1999-01-01T05:00:00.000Z
\ No newline at end of file
diff --git a/examples/jade-loader/dist/webpack-4/styles.css b/examples/jade-loader/dist/webpack-4/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/jade-loader/dist/webpack-4/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/jade-loader/favicon.ico b/examples/jade-loader/favicon.ico
deleted file mode 100644
index be74abd6..00000000
Binary files a/examples/jade-loader/favicon.ico and /dev/null differ
diff --git a/examples/jade-loader/readme.md b/examples/jade-loader/readme.md
deleted file mode 100644
index 1d58a191..00000000
--- a/examples/jade-loader/readme.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# isomorphic jade example
-
-This example shows how to use a different template engine (in this case jade)
-to load the `time.jade` template on the backend and frontend.
diff --git a/examples/javascript-advanced/dist/webpack-1/0714810ae3fb211173e2964249507195.png b/examples/javascript-advanced/dist/webpack-1/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/javascript-advanced/dist/webpack-1/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/javascript-advanced/dist/webpack-1/bundle.js b/examples/javascript-advanced/dist/webpack-1/bundle.js
deleted file mode 100644
index 6680bd13..00000000
--- a/examples/javascript-advanced/dist/webpack-1/bundle.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
- eval("__webpack_require__(1);\n\nvar universal = __webpack_require__(5);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./example.js\n// module id = 0\n// module chunks = 0\n//# sourceURL=webpack:///./example.js?");
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
- eval("// removed by extract-text-webpack-plugin\n\n//////////////////\n// WEBPACK FOOTER\n// ./main.css\n// module id = 1\n// module chunks = 0\n//# sourceURL=webpack:///./main.css?");
-
-/***/ }),
-/* 2 */,
-/* 3 */,
-/* 4 */,
-/* 5 */
-/***/ (function(module, exports) {
-
- eval("// This file is used for frontend and backend\n'use strict';\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./universial.js\n// module id = 5\n// module chunks = 0\n//# sourceURL=webpack:///./universial.js?");
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-1/index.html b/examples/javascript-advanced/dist/webpack-1/index.html
deleted file mode 100644
index 61d6408d..00000000
--- a/examples/javascript-advanced/dist/webpack-1/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
-Webpack App Hello World from backend - Partial
-
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-1/styles.css b/examples/javascript-advanced/dist/webpack-1/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/javascript-advanced/dist/webpack-1/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-2/0714810ae3fb211173e2964249507195.png b/examples/javascript-advanced/dist/webpack-2/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/javascript-advanced/dist/webpack-2/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/javascript-advanced/dist/webpack-2/bundle.js b/examples/javascript-advanced/dist/webpack-2/bundle.js
deleted file mode 100644
index e0b6b46c..00000000
--- a/examples/javascript-advanced/dist/webpack-2/bundle.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 2);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("// This file is used for frontend and backend\n\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./universial.js\n// module id = 0\n// module chunks = 0\n\n//# sourceURL=webpack:///./universial.js?");
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-eval("// removed by extract-text-webpack-plugin\n\n//////////////////\n// WEBPACK FOOTER\n// ./main.css\n// module id = 1\n// module chunks = 0\n\n//# sourceURL=webpack:///./main.css?");
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("__webpack_require__(1);\n\nvar universal = __webpack_require__(0);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./example.js\n// module id = 2\n// module chunks = 0\n\n//# sourceURL=webpack:///./example.js?");
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-2/index.html b/examples/javascript-advanced/dist/webpack-2/index.html
deleted file mode 100644
index 61d6408d..00000000
--- a/examples/javascript-advanced/dist/webpack-2/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
-Webpack App Hello World from backend - Partial
-
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-2/styles.css b/examples/javascript-advanced/dist/webpack-2/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/javascript-advanced/dist/webpack-2/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-3/0714810ae3fb211173e2964249507195.png b/examples/javascript-advanced/dist/webpack-3/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/javascript-advanced/dist/webpack-3/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/javascript-advanced/dist/webpack-3/bundle.js b/examples/javascript-advanced/dist/webpack-3/bundle.js
deleted file mode 100644
index 2d9e545d..00000000
--- a/examples/javascript-advanced/dist/webpack-3/bundle.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("__webpack_require__(1);\n\nvar universal = __webpack_require__(2);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./example.js\n// module id = 0\n// module chunks = 0\n\n//# sourceURL=webpack:///./example.js?");
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-eval("// removed by extract-text-webpack-plugin\n\n//////////////////\n// WEBPACK FOOTER\n// ./main.css\n// module id = 1\n// module chunks = 0\n\n//# sourceURL=webpack:///./main.css?");
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("// This file is used for frontend and backend\n\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./universial.js\n// module id = 2\n// module chunks = 0\n\n//# sourceURL=webpack:///./universial.js?");
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-3/index.html b/examples/javascript-advanced/dist/webpack-3/index.html
deleted file mode 100644
index 61d6408d..00000000
--- a/examples/javascript-advanced/dist/webpack-3/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
-Webpack App Hello World from backend - Partial
-
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-3/styles.css b/examples/javascript-advanced/dist/webpack-3/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/javascript-advanced/dist/webpack-3/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-4/bundle.js b/examples/javascript-advanced/dist/webpack-4/bundle.js
index d095771c..a82aa75b 100644
--- a/examples/javascript-advanced/dist/webpack-4/bundle.js
+++ b/examples/javascript-advanced/dist/webpack-4/bundle.js
@@ -36,19 +36,34 @@
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
@@ -66,30 +81,27 @@
/******/
/******/
/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 1);
+/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
-"use strict";
-eval("// This file is used for frontend and backend\n\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//# sourceURL=webpack:///./universial.js?");
+eval("__webpack_require__(1);\n\nvar universal = __webpack_require__(2);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//# sourceURL=webpack:///./example.js?");
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
-eval("__webpack_require__(5);\n\nvar universal = __webpack_require__(0);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//# sourceURL=webpack:///./example.js?");
+eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./main.css?");
/***/ }),
-/* 2 */,
-/* 3 */,
-/* 4 */,
-/* 5 */
-/***/ (function(module, exports) {
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
-eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./main.css?");
+"use strict";
+eval("// This file is used for frontend and backend\n\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//# sourceURL=webpack:///./universial.js?");
/***/ })
/******/ ]);
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-4/index.html b/examples/javascript-advanced/dist/webpack-4/index.html
index 61d6408d..2ec60f39 100644
--- a/examples/javascript-advanced/dist/webpack-4/index.html
+++ b/examples/javascript-advanced/dist/webpack-4/index.html
@@ -1,2 +1 @@
-Webpack App Hello World from backend - Partial
-
\ No newline at end of file
+Webpack App Hello World from backend -Partial
\ No newline at end of file
diff --git a/examples/javascript-advanced/dist/webpack-4/styles.css b/examples/javascript-advanced/dist/webpack-4/styles.css
index 232a2cdb..e86486ba 100644
--- a/examples/javascript-advanced/dist/webpack-4/styles.css
+++ b/examples/javascript-advanced/dist/webpack-4/styles.css
@@ -1,3 +1,3 @@
body {
background: snow;
-}
\ No newline at end of file
+}
diff --git a/examples/javascript-advanced/webpack.config.js b/examples/javascript-advanced/webpack.config.js
index d1d3d636..1449a690 100644
--- a/examples/javascript-advanced/webpack.config.js
+++ b/examples/javascript-advanced/webpack.config.js
@@ -1,7 +1,8 @@
var path = require('path');
var HtmlWebpackPlugin = require('../..');
-var ExtractTextPlugin = require('extract-text-webpack-plugin');
+var MiniCssExtractPlugin = require('mini-css-extract-plugin');
var webpackMajorVersion = require('webpack/package.json').version.split('.')[0];
+
module.exports = {
context: __dirname,
entry: './example.js',
@@ -11,8 +12,8 @@ module.exports = {
filename: 'bundle.js'
},
module: {
- loaders: [
- { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader') },
+ rules: [
+ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'] },
{ test: /\.png$/, loader: 'file-loader' },
{ test: /\.html$/, loader: 'html-loader' }
]
@@ -22,6 +23,6 @@ module.exports = {
new HtmlWebpackPlugin({
template: 'template.js'
}),
- new ExtractTextPlugin('styles.css')
+ new MiniCssExtractPlugin({ filename: 'styles.css' })
]
};
diff --git a/examples/javascript/dist/webpack-1/0714810ae3fb211173e2964249507195.png b/examples/javascript/dist/webpack-1/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/javascript/dist/webpack-1/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/javascript/dist/webpack-1/bundle.js b/examples/javascript/dist/webpack-1/bundle.js
deleted file mode 100644
index 6680bd13..00000000
--- a/examples/javascript/dist/webpack-1/bundle.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
- eval("__webpack_require__(1);\n\nvar universal = __webpack_require__(5);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./example.js\n// module id = 0\n// module chunks = 0\n//# sourceURL=webpack:///./example.js?");
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
- eval("// removed by extract-text-webpack-plugin\n\n//////////////////\n// WEBPACK FOOTER\n// ./main.css\n// module id = 1\n// module chunks = 0\n//# sourceURL=webpack:///./main.css?");
-
-/***/ }),
-/* 2 */,
-/* 3 */,
-/* 4 */,
-/* 5 */
-/***/ (function(module, exports) {
-
- eval("// This file is used for frontend and backend\n'use strict';\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./universial.js\n// module id = 5\n// module chunks = 0\n//# sourceURL=webpack:///./universial.js?");
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-1/index.html b/examples/javascript/dist/webpack-1/index.html
deleted file mode 100644
index 88e071b9..00000000
--- a/examples/javascript/dist/webpack-1/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
- Hello World from backend2017-04-17T17:13:11.491ZPartial
-
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-1/styles.css b/examples/javascript/dist/webpack-1/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/javascript/dist/webpack-1/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-2/0714810ae3fb211173e2964249507195.png b/examples/javascript/dist/webpack-2/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/javascript/dist/webpack-2/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/javascript/dist/webpack-2/bundle.js b/examples/javascript/dist/webpack-2/bundle.js
deleted file mode 100644
index e0b6b46c..00000000
--- a/examples/javascript/dist/webpack-2/bundle.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 2);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("// This file is used for frontend and backend\n\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./universial.js\n// module id = 0\n// module chunks = 0\n\n//# sourceURL=webpack:///./universial.js?");
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-eval("// removed by extract-text-webpack-plugin\n\n//////////////////\n// WEBPACK FOOTER\n// ./main.css\n// module id = 1\n// module chunks = 0\n\n//# sourceURL=webpack:///./main.css?");
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("__webpack_require__(1);\n\nvar universal = __webpack_require__(0);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./example.js\n// module id = 2\n// module chunks = 0\n\n//# sourceURL=webpack:///./example.js?");
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-2/index.html b/examples/javascript/dist/webpack-2/index.html
deleted file mode 100644
index 71f92f66..00000000
--- a/examples/javascript/dist/webpack-2/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
- Hello World from backend2017-04-17T17:12:14.752ZPartial
-
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-2/styles.css b/examples/javascript/dist/webpack-2/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/javascript/dist/webpack-2/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-3/0714810ae3fb211173e2964249507195.png b/examples/javascript/dist/webpack-3/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/javascript/dist/webpack-3/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/javascript/dist/webpack-3/bundle.js b/examples/javascript/dist/webpack-3/bundle.js
deleted file mode 100644
index 2d9e545d..00000000
--- a/examples/javascript/dist/webpack-3/bundle.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("__webpack_require__(1);\n\nvar universal = __webpack_require__(2);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./example.js\n// module id = 0\n// module chunks = 0\n\n//# sourceURL=webpack:///./example.js?");
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-eval("// removed by extract-text-webpack-plugin\n\n//////////////////\n// WEBPACK FOOTER\n// ./main.css\n// module id = 1\n// module chunks = 0\n\n//# sourceURL=webpack:///./main.css?");
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-eval("// This file is used for frontend and backend\n\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./universial.js\n// module id = 2\n// module chunks = 0\n\n//# sourceURL=webpack:///./universial.js?");
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-3/index.html b/examples/javascript/dist/webpack-3/index.html
deleted file mode 100644
index 99d6252c..00000000
--- a/examples/javascript/dist/webpack-3/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
- Hello World from backend2017-06-24T21:03:19.943ZPartial
-
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-3/styles.css b/examples/javascript/dist/webpack-3/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/javascript/dist/webpack-3/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-4/bundle.js b/examples/javascript/dist/webpack-4/bundle.js
index d095771c..a82aa75b 100644
--- a/examples/javascript/dist/webpack-4/bundle.js
+++ b/examples/javascript/dist/webpack-4/bundle.js
@@ -36,19 +36,34 @@
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
@@ -66,30 +81,27 @@
/******/
/******/
/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 1);
+/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
-"use strict";
-eval("// This file is used for frontend and backend\n\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//# sourceURL=webpack:///./universial.js?");
+eval("__webpack_require__(1);\n\nvar universal = __webpack_require__(2);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//# sourceURL=webpack:///./example.js?");
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
-eval("__webpack_require__(5);\n\nvar universal = __webpack_require__(0);\nvar h1 = document.createElement('h1');\nh1.innerHTML = universal();\n\ndocument.body.appendChild(h1);\n\n\n//# sourceURL=webpack:///./example.js?");
+eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./main.css?");
/***/ }),
-/* 2 */,
-/* 3 */,
-/* 4 */,
-/* 5 */
-/***/ (function(module, exports) {
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
-eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./main.css?");
+"use strict";
+eval("// This file is used for frontend and backend\n\n\n// If compiled by the html-webpack-plugin\n// HTML_WEBPACK_PLUGIN is set to true:\nvar backend = typeof HTML_WEBPACK_PLUGIN !== 'undefined';\n\nmodule.exports = function () {\n return 'Hello World from ' + (backend ? 'backend' : 'frontend');\n};\n\n\n//# sourceURL=webpack:///./universial.js?");
/***/ })
/******/ ]);
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-4/index.html b/examples/javascript/dist/webpack-4/index.html
index b0bcd096..49754672 100644
--- a/examples/javascript/dist/webpack-4/index.html
+++ b/examples/javascript/dist/webpack-4/index.html
@@ -1,2 +1 @@
- Hello World from backend2018-02-14T04:00:28.077ZPartial
-
\ No newline at end of file
+ Hello World from backend2018-10-03T15:21:10.064ZPartial
\ No newline at end of file
diff --git a/examples/javascript/dist/webpack-4/styles.css b/examples/javascript/dist/webpack-4/styles.css
index 232a2cdb..e86486ba 100644
--- a/examples/javascript/dist/webpack-4/styles.css
+++ b/examples/javascript/dist/webpack-4/styles.css
@@ -1,3 +1,3 @@
body {
background: snow;
-}
\ No newline at end of file
+}
diff --git a/examples/javascript/webpack.config.js b/examples/javascript/webpack.config.js
index d1d3d636..510a462f 100644
--- a/examples/javascript/webpack.config.js
+++ b/examples/javascript/webpack.config.js
@@ -1,6 +1,6 @@
var path = require('path');
var HtmlWebpackPlugin = require('../..');
-var ExtractTextPlugin = require('extract-text-webpack-plugin');
+var MiniCssExtractPlugin = require('mini-css-extract-plugin');
var webpackMajorVersion = require('webpack/package.json').version.split('.')[0];
module.exports = {
context: __dirname,
@@ -11,8 +11,8 @@ module.exports = {
filename: 'bundle.js'
},
module: {
- loaders: [
- { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader') },
+ rules: [
+ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'] },
{ test: /\.png$/, loader: 'file-loader' },
{ test: /\.html$/, loader: 'html-loader' }
]
@@ -22,6 +22,6 @@ module.exports = {
new HtmlWebpackPlugin({
template: 'template.js'
}),
- new ExtractTextPlugin('styles.css')
+ new MiniCssExtractPlugin({ filename: 'styles.css' })
]
};
diff --git a/examples/pug-loader/dist/webpack-4/bundle.js b/examples/pug-loader/dist/webpack-4/bundle.js
new file mode 100644
index 00000000..cc8c23ab
--- /dev/null
+++ b/examples/pug-loader/dist/webpack-4/bundle.js
@@ -0,0 +1,386 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+__webpack_require__(1);
+// Use the same template for the frontend code
+var template = __webpack_require__(2);
+
+setInterval(function () {
+ var div = document.getElementById('main');
+ div.innerHTML = template({ time: new Date() });
+ div.style.color = 'navy';
+}, 1000);
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// extracted by mini-css-extract-plugin
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var pug = __webpack_require__(3);
+
+function template(locals) {var pug_html = "", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (time) {pug_html = pug_html + "\u003C!-- this partial is used for frontend and backend--\u003E\u003Cdiv class=\"time\"\u003E \u003Cb\u003ECurrent time\u003C\u002Fb\u003E\u003Cp\u003E" + (pug.escape(null == (pug_interp = time.toISOString()) ? "" : pug_interp)) + "\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cimg src=\"#{require('.\u002Flogo.png')}\"\u003E";}.call(this,"time" in locals_for_with?locals_for_with.time:typeof time!=="undefined"?time:undefined));;return pug_html;};
+module.exports = template;
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var pug_has_own_property = Object.prototype.hasOwnProperty;
+
+/**
+ * Merge two attribute objects giving precedence
+ * to values in object `b`. Classes are special-cased
+ * allowing for arrays and merging/joining appropriately
+ * resulting in a string.
+ *
+ * @param {Object} a
+ * @param {Object} b
+ * @return {Object} a
+ * @api private
+ */
+
+exports.merge = pug_merge;
+function pug_merge(a, b) {
+ if (arguments.length === 1) {
+ var attrs = a[0];
+ for (var i = 1; i < a.length; i++) {
+ attrs = pug_merge(attrs, a[i]);
+ }
+ return attrs;
+ }
+
+ for (var key in b) {
+ if (key === 'class') {
+ var valA = a[key] || [];
+ a[key] = (Array.isArray(valA) ? valA : [valA]).concat(b[key] || []);
+ } else if (key === 'style') {
+ var valA = pug_style(a[key]);
+ valA = valA && valA[valA.length - 1] !== ';' ? valA + ';' : valA;
+ var valB = pug_style(b[key]);
+ valB = valB && valB[valB.length - 1] !== ';' ? valB + ';' : valB;
+ a[key] = valA + valB;
+ } else {
+ a[key] = b[key];
+ }
+ }
+
+ return a;
+};
+
+/**
+ * Process array, object, or string as a string of classes delimited by a space.
+ *
+ * If `val` is an array, all members of it and its subarrays are counted as
+ * classes. If `escaping` is an array, then whether or not the item in `val` is
+ * escaped depends on the corresponding item in `escaping`. If `escaping` is
+ * not an array, no escaping is done.
+ *
+ * If `val` is an object, all the keys whose value is truthy are counted as
+ * classes. No escaping is done.
+ *
+ * If `val` is a string, it is counted as a class. No escaping is done.
+ *
+ * @param {(Array.|Object.|string)} val
+ * @param {?Array.} escaping
+ * @return {String}
+ */
+exports.classes = pug_classes;
+function pug_classes_array(val, escaping) {
+ var classString = '', className, padding = '', escapeEnabled = Array.isArray(escaping);
+ for (var i = 0; i < val.length; i++) {
+ className = pug_classes(val[i]);
+ if (!className) continue;
+ escapeEnabled && escaping[i] && (className = pug_escape(className));
+ classString = classString + padding + className;
+ padding = ' ';
+ }
+ return classString;
+}
+function pug_classes_object(val) {
+ var classString = '', padding = '';
+ for (var key in val) {
+ if (key && val[key] && pug_has_own_property.call(val, key)) {
+ classString = classString + padding + key;
+ padding = ' ';
+ }
+ }
+ return classString;
+}
+function pug_classes(val, escaping) {
+ if (Array.isArray(val)) {
+ return pug_classes_array(val, escaping);
+ } else if (val && typeof val === 'object') {
+ return pug_classes_object(val);
+ } else {
+ return val || '';
+ }
+}
+
+/**
+ * Convert object or string to a string of CSS styles delimited by a semicolon.
+ *
+ * @param {(Object.|string)} val
+ * @return {String}
+ */
+
+exports.style = pug_style;
+function pug_style(val) {
+ if (!val) return '';
+ if (typeof val === 'object') {
+ var out = '';
+ for (var style in val) {
+ /* istanbul ignore else */
+ if (pug_has_own_property.call(val, style)) {
+ out = out + style + ':' + val[style] + ';';
+ }
+ }
+ return out;
+ } else {
+ return val + '';
+ }
+};
+
+/**
+ * Render the given attribute.
+ *
+ * @param {String} key
+ * @param {String} val
+ * @param {Boolean} escaped
+ * @param {Boolean} terse
+ * @return {String}
+ */
+exports.attr = pug_attr;
+function pug_attr(key, val, escaped, terse) {
+ if (val === false || val == null || !val && (key === 'class' || key === 'style')) {
+ return '';
+ }
+ if (val === true) {
+ return ' ' + (terse ? key : key + '="' + key + '"');
+ }
+ if (typeof val.toJSON === 'function') {
+ val = val.toJSON();
+ }
+ if (typeof val !== 'string') {
+ val = JSON.stringify(val);
+ if (!escaped && val.indexOf('"') !== -1) {
+ return ' ' + key + '=\'' + val.replace(/'/g, ''') + '\'';
+ }
+ }
+ if (escaped) val = pug_escape(val);
+ return ' ' + key + '="' + val + '"';
+};
+
+/**
+ * Render the given attributes object.
+ *
+ * @param {Object} obj
+ * @param {Object} terse whether to use HTML5 terse boolean attributes
+ * @return {String}
+ */
+exports.attrs = pug_attrs;
+function pug_attrs(obj, terse){
+ var attrs = '';
+
+ for (var key in obj) {
+ if (pug_has_own_property.call(obj, key)) {
+ var val = obj[key];
+
+ if ('class' === key) {
+ val = pug_classes(val);
+ attrs = pug_attr(key, val, false, terse) + attrs;
+ continue;
+ }
+ if ('style' === key) {
+ val = pug_style(val);
+ }
+ attrs += pug_attr(key, val, false, terse);
+ }
+ }
+
+ return attrs;
+};
+
+/**
+ * Escape the given string of `html`.
+ *
+ * @param {String} html
+ * @return {String}
+ * @api private
+ */
+
+var pug_match_html = /["&<>]/;
+exports.escape = pug_escape;
+function pug_escape(_html){
+ var html = '' + _html;
+ var regexResult = pug_match_html.exec(html);
+ if (!regexResult) return _html;
+
+ var result = '';
+ var i, lastIndex, escape;
+ for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {
+ switch (html.charCodeAt(i)) {
+ case 34: escape = '"'; break;
+ case 38: escape = '&'; break;
+ case 60: escape = '<'; break;
+ case 62: escape = '>'; break;
+ default: continue;
+ }
+ if (lastIndex !== i) result += html.substring(lastIndex, i);
+ lastIndex = i + 1;
+ result += escape;
+ }
+ if (lastIndex !== i) return result + html.substring(lastIndex, i);
+ else return result;
+};
+
+/**
+ * Re-throw the given `err` in context to the
+ * the pug in `filename` at the given `lineno`.
+ *
+ * @param {Error} err
+ * @param {String} filename
+ * @param {String} lineno
+ * @param {String} str original source
+ * @api private
+ */
+
+exports.rethrow = pug_rethrow;
+function pug_rethrow(err, filename, lineno, str){
+ if (!(err instanceof Error)) throw err;
+ if ((typeof window != 'undefined' || !filename) && !str) {
+ err.message += ' on line ' + lineno;
+ throw err;
+ }
+ try {
+ str = str || __webpack_require__(4).readFileSync(filename, 'utf8')
+ } catch (ex) {
+ pug_rethrow(err, null, lineno)
+ }
+ var context = 3
+ , lines = str.split('\n')
+ , start = Math.max(lineno - context, 0)
+ , end = Math.min(lines.length, lineno + context);
+
+ // Error context
+ var context = lines.slice(start, end).map(function(line, i){
+ var curr = i + start + 1;
+ return (curr == lineno ? ' > ' : ' ')
+ + curr
+ + '| '
+ + line;
+ }).join('\n');
+
+ // Alter exception message
+ err.path = filename;
+ err.message = (filename || 'Pug') + ':' + lineno
+ + '\n' + context + '\n\n' + err.message;
+ throw err;
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports) {
+
+/* (ignored) */
+
+/***/ })
+/******/ ]);
\ No newline at end of file
diff --git a/examples/favicon/dist/webpack-1/favicon.ico b/examples/pug-loader/dist/webpack-4/favicon.ico
similarity index 100%
rename from examples/favicon/dist/webpack-1/favicon.ico
rename to examples/pug-loader/dist/webpack-4/favicon.ico
diff --git a/examples/pug-loader/dist/webpack-4/index.html b/examples/pug-loader/dist/webpack-4/index.html
new file mode 100644
index 00000000..f526ae77
--- /dev/null
+++ b/examples/pug-loader/dist/webpack-4/index.html
@@ -0,0 +1 @@
+pug demo Current time 1998-12-31T18:30:00.000Z
\ No newline at end of file
diff --git a/examples/appcache/dist/webpack-2/styles.css b/examples/pug-loader/dist/webpack-4/styles.css
similarity index 93%
rename from examples/appcache/dist/webpack-2/styles.css
rename to examples/pug-loader/dist/webpack-4/styles.css
index 232a2cdb..e86486ba 100644
--- a/examples/appcache/dist/webpack-2/styles.css
+++ b/examples/pug-loader/dist/webpack-4/styles.css
@@ -1,3 +1,3 @@
body {
background: snow;
-}
\ No newline at end of file
+}
diff --git a/examples/jade-loader/example.js b/examples/pug-loader/example.js
similarity index 86%
rename from examples/jade-loader/example.js
rename to examples/pug-loader/example.js
index 4770536c..e165e6d8 100755
--- a/examples/jade-loader/example.js
+++ b/examples/pug-loader/example.js
@@ -1,7 +1,7 @@
'use strict';
require('./main.css');
// Use the same template for the frontend code
-var template = require('./time.jade');
+var template = require('./time.pug');
setInterval(function () {
var div = document.getElementById('main');
diff --git a/examples/favicon/dist/webpack-2/favicon.ico b/examples/pug-loader/favicon.ico
similarity index 100%
rename from examples/favicon/dist/webpack-2/favicon.ico
rename to examples/pug-loader/favicon.ico
diff --git a/examples/jade-loader/logo.png b/examples/pug-loader/logo.png
similarity index 100%
rename from examples/jade-loader/logo.png
rename to examples/pug-loader/logo.png
diff --git a/examples/appcache/dist/webpack-1/styles.css b/examples/pug-loader/main.css
similarity index 100%
rename from examples/appcache/dist/webpack-1/styles.css
rename to examples/pug-loader/main.css
diff --git a/examples/pug-loader/readme.md b/examples/pug-loader/readme.md
new file mode 100644
index 00000000..df551640
--- /dev/null
+++ b/examples/pug-loader/readme.md
@@ -0,0 +1,4 @@
+# isomorphic pug example
+
+This example shows how to use a different template engine (in this case pug)
+to load the `time.pug` template on the backend and frontend.
diff --git a/examples/jade-loader/template.jade b/examples/pug-loader/template.pug
similarity index 84%
rename from examples/jade-loader/template.jade
rename to examples/pug-loader/template.pug
index 8da70cea..cfee8d91 100644
--- a/examples/jade-loader/template.jade
+++ b/examples/pug-loader/template.pug
@@ -5,4 +5,4 @@ html
body
#main
- locals.time = new Date('01 01, 1999');
- include ./time.jade
\ No newline at end of file
+ include ./time.pug
\ No newline at end of file
diff --git a/examples/jade-loader/time.jade b/examples/pug-loader/time.pug
similarity index 100%
rename from examples/jade-loader/time.jade
rename to examples/pug-loader/time.pug
diff --git a/examples/jade-loader/webpack.config.js b/examples/pug-loader/webpack.config.js
similarity index 62%
rename from examples/jade-loader/webpack.config.js
rename to examples/pug-loader/webpack.config.js
index 26c0f66a..32b78834 100755
--- a/examples/jade-loader/webpack.config.js
+++ b/examples/pug-loader/webpack.config.js
@@ -1,7 +1,8 @@
var path = require('path');
var HtmlWebpackPlugin = require('../..');
-var ExtractTextPlugin = require('extract-text-webpack-plugin');
+var MiniCssExtractPlugin = require('mini-css-extract-plugin');
var webpackMajorVersion = require('webpack/package.json').version.split('.')[0];
+
module.exports = {
context: __dirname,
entry: './example.js',
@@ -11,19 +12,19 @@ module.exports = {
filename: 'bundle.js'
},
module: {
- loaders: [
- { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader') },
+ rules: [
+ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'] },
{ test: /\.png$/, loader: 'file-loader' },
- { test: /\.jade$/, loader: 'jade-loader' }
+ { test: /\.pug$/, loader: 'pug-loader' }
]
},
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html',
favicon: 'favicon.ico',
- template: 'template.jade',
- title: 'Jade demo'
+ template: 'template.pug',
+ title: 'pug demo'
}),
- new ExtractTextPlugin('styles.css')
+ new MiniCssExtractPlugin({ filename: 'styles.css' })
]
};
diff --git a/examples/sort-manually/dist/webpack-1/0714810ae3fb211173e2964249507195.png b/examples/sort-manually/dist/webpack-1/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/sort-manually/dist/webpack-1/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/sort-manually/dist/webpack-1/a.js b/examples/sort-manually/dist/webpack-1/a.js
deleted file mode 100644
index 7878b97e..00000000
--- a/examples/sort-manually/dist/webpack-1/a.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
- __webpack_require__(1);
- var h1 = document.createElement('h1');
- h1.innerHTML = 'a!';
- document.body.appendChild(h1);
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
- // removed by extract-text-webpack-plugin
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-1/b.js b/examples/sort-manually/dist/webpack-1/b.js
deleted file mode 100644
index 1c65900a..00000000
--- a/examples/sort-manually/dist/webpack-1/b.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
- var h1 = document.createElement('h1');
- h1.innerHTML = 'b!';
- document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-1/c.js b/examples/sort-manually/dist/webpack-1/c.js
deleted file mode 100644
index 4b82961a..00000000
--- a/examples/sort-manually/dist/webpack-1/c.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
- var h1 = document.createElement('h1');
- h1.innerHTML = 'c!';
- document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-1/d.js b/examples/sort-manually/dist/webpack-1/d.js
deleted file mode 100644
index 8bfebf2c..00000000
--- a/examples/sort-manually/dist/webpack-1/d.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
- var h1 = document.createElement('h1');
- h1.innerHTML = 'd!';
- document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-1/e.js b/examples/sort-manually/dist/webpack-1/e.js
deleted file mode 100644
index 5acab069..00000000
--- a/examples/sort-manually/dist/webpack-1/e.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
- var h1 = document.createElement('h1');
- h1.innerHTML = 'e!';
- document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-1/first-file.html b/examples/sort-manually/dist/webpack-1/first-file.html
deleted file mode 100644
index afacda4b..00000000
--- a/examples/sort-manually/dist/webpack-1/first-file.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
- Example template
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-1/second-file.html b/examples/sort-manually/dist/webpack-1/second-file.html
deleted file mode 100644
index d6d80d35..00000000
--- a/examples/sort-manually/dist/webpack-1/second-file.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
- Example template
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-1/styles.css b/examples/sort-manually/dist/webpack-1/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/sort-manually/dist/webpack-1/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-2/0714810ae3fb211173e2964249507195.png b/examples/sort-manually/dist/webpack-2/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/sort-manually/dist/webpack-2/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/sort-manually/dist/webpack-2/a.js b/examples/sort-manually/dist/webpack-2/a.js
deleted file mode 100644
index 2251fb1b..00000000
--- a/examples/sort-manually/dist/webpack-2/a.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-// removed by extract-text-webpack-plugin
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(0);
-var h1 = document.createElement('h1');
-h1.innerHTML = 'a!';
-document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-2/b.js b/examples/sort-manually/dist/webpack-2/b.js
deleted file mode 100644
index e4a6181f..00000000
--- a/examples/sort-manually/dist/webpack-2/b.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 2);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 2:
-/***/ (function(module, exports) {
-
-var h1 = document.createElement('h1');
-h1.innerHTML = 'b!';
-document.body.appendChild(h1);
-
-
-/***/ })
-
-/******/ });
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-2/c.js b/examples/sort-manually/dist/webpack-2/c.js
deleted file mode 100644
index d52f7947..00000000
--- a/examples/sort-manually/dist/webpack-2/c.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 3);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 3:
-/***/ (function(module, exports) {
-
-var h1 = document.createElement('h1');
-h1.innerHTML = 'c!';
-document.body.appendChild(h1);
-
-
-/***/ })
-
-/******/ });
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-2/d.js b/examples/sort-manually/dist/webpack-2/d.js
deleted file mode 100644
index 6377a799..00000000
--- a/examples/sort-manually/dist/webpack-2/d.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 4);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 4:
-/***/ (function(module, exports) {
-
-var h1 = document.createElement('h1');
-h1.innerHTML = 'd!';
-document.body.appendChild(h1);
-
-
-/***/ })
-
-/******/ });
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-2/e.js b/examples/sort-manually/dist/webpack-2/e.js
deleted file mode 100644
index e7ebc092..00000000
--- a/examples/sort-manually/dist/webpack-2/e.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 5);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 5:
-/***/ (function(module, exports) {
-
-var h1 = document.createElement('h1');
-h1.innerHTML = 'e!';
-document.body.appendChild(h1);
-
-
-/***/ })
-
-/******/ });
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-2/first-file.html b/examples/sort-manually/dist/webpack-2/first-file.html
deleted file mode 100644
index afacda4b..00000000
--- a/examples/sort-manually/dist/webpack-2/first-file.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
- Example template
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-2/second-file.html b/examples/sort-manually/dist/webpack-2/second-file.html
deleted file mode 100644
index d6d80d35..00000000
--- a/examples/sort-manually/dist/webpack-2/second-file.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
- Example template
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-2/styles.css b/examples/sort-manually/dist/webpack-2/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/sort-manually/dist/webpack-2/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-3/0714810ae3fb211173e2964249507195.png b/examples/sort-manually/dist/webpack-3/0714810ae3fb211173e2964249507195.png
deleted file mode 100644
index d71b3d78..00000000
Binary files a/examples/sort-manually/dist/webpack-3/0714810ae3fb211173e2964249507195.png and /dev/null differ
diff --git a/examples/sort-manually/dist/webpack-3/a.js b/examples/sort-manually/dist/webpack-3/a.js
deleted file mode 100644
index 029c6f27..00000000
--- a/examples/sort-manually/dist/webpack-3/a.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 2);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */,
-/* 1 */,
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(3);
-var h1 = document.createElement('h1');
-h1.innerHTML = 'a!';
-document.body.appendChild(h1);
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports) {
-
-// removed by extract-text-webpack-plugin
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-3/b.js b/examples/sort-manually/dist/webpack-3/b.js
deleted file mode 100644
index 16fe54b7..00000000
--- a/examples/sort-manually/dist/webpack-3/b.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-var h1 = document.createElement('h1');
-h1.innerHTML = 'b!';
-document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-3/c.js b/examples/sort-manually/dist/webpack-3/c.js
deleted file mode 100644
index 47ca6f8f..00000000
--- a/examples/sort-manually/dist/webpack-3/c.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 4);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 4:
-/***/ (function(module, exports) {
-
-var h1 = document.createElement('h1');
-h1.innerHTML = 'c!';
-document.body.appendChild(h1);
-
-
-/***/ })
-
-/******/ });
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-3/d.js b/examples/sort-manually/dist/webpack-3/d.js
deleted file mode 100644
index 8f747a0a..00000000
--- a/examples/sort-manually/dist/webpack-3/d.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */,
-/* 1 */
-/***/ (function(module, exports) {
-
-var h1 = document.createElement('h1');
-h1.innerHTML = 'd!';
-document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-3/e.js b/examples/sort-manually/dist/webpack-3/e.js
deleted file mode 100644
index 04a23b9a..00000000
--- a/examples/sort-manually/dist/webpack-3/e.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 5);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 5:
-/***/ (function(module, exports) {
-
-var h1 = document.createElement('h1');
-h1.innerHTML = 'e!';
-document.body.appendChild(h1);
-
-
-/***/ })
-
-/******/ });
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-3/first-file.html b/examples/sort-manually/dist/webpack-3/first-file.html
deleted file mode 100644
index afacda4b..00000000
--- a/examples/sort-manually/dist/webpack-3/first-file.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
- Example template
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-3/second-file.html b/examples/sort-manually/dist/webpack-3/second-file.html
deleted file mode 100644
index d6d80d35..00000000
--- a/examples/sort-manually/dist/webpack-3/second-file.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
- Example template
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-3/styles.css b/examples/sort-manually/dist/webpack-3/styles.css
deleted file mode 100644
index 232a2cdb..00000000
--- a/examples/sort-manually/dist/webpack-3/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background: snow;
-}
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-4/a.js b/examples/sort-manually/dist/webpack-4/a.js
index e6b4de3b..45d5bc6c 100644
--- a/examples/sort-manually/dist/webpack-4/a.js
+++ b/examples/sort-manually/dist/webpack-4/a.js
@@ -36,19 +36,34 @@
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
@@ -69,24 +84,23 @@
/******/ return __webpack_require__(__webpack_require__.s = 2);
/******/ })
/************************************************************************/
-/******/ ({
-
-/***/ 2:
+/******/ ([
+/* 0 */,
+/* 1 */,
+/* 2 */
/***/ (function(module, exports, __webpack_require__) {
-__webpack_require__(8);
+__webpack_require__(3);
var h1 = document.createElement('h1');
h1.innerHTML = 'a!';
document.body.appendChild(h1);
/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
-/***/ 8:
-/***/ (function(module, exports) {
-
-// removed by extract-text-webpack-plugin
+// extracted by mini-css-extract-plugin
/***/ })
-
-/******/ });
\ No newline at end of file
+/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-4/b.js b/examples/sort-manually/dist/webpack-4/b.js
index 7dbca5d4..ff84b5e4 100644
--- a/examples/sort-manually/dist/webpack-4/b.js
+++ b/examples/sort-manually/dist/webpack-4/b.js
@@ -36,19 +36,34 @@
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
@@ -66,12 +81,11 @@
/******/
/******/
/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 4);
+/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
-/******/ ({
-
-/***/ 4:
+/******/ ([
+/* 0 */
/***/ (function(module, exports) {
var h1 = document.createElement('h1');
@@ -80,5 +94,4 @@ document.body.appendChild(h1);
/***/ })
-
-/******/ });
\ No newline at end of file
+/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-4/c.js b/examples/sort-manually/dist/webpack-4/c.js
index 0398b415..77006cd8 100644
--- a/examples/sort-manually/dist/webpack-4/c.js
+++ b/examples/sort-manually/dist/webpack-4/c.js
@@ -36,19 +36,34 @@
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
@@ -66,12 +81,12 @@
/******/
/******/
/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 1);
+/******/ return __webpack_require__(__webpack_require__.s = 5);
/******/ })
/************************************************************************/
-/******/ ([
-/* 0 */,
-/* 1 */
+/******/ ({
+
+/***/ 5:
/***/ (function(module, exports) {
var h1 = document.createElement('h1');
@@ -80,4 +95,5 @@ document.body.appendChild(h1);
/***/ })
-/******/ ]);
\ No newline at end of file
+
+/******/ });
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-4/d.js b/examples/sort-manually/dist/webpack-4/d.js
index 57ea10fb..fcb4c43c 100644
--- a/examples/sort-manually/dist/webpack-4/d.js
+++ b/examples/sort-manually/dist/webpack-4/d.js
@@ -36,19 +36,34 @@
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
@@ -66,12 +81,12 @@
/******/
/******/
/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 3);
+/******/ return __webpack_require__(__webpack_require__.s = 1);
/******/ })
/************************************************************************/
-/******/ ({
-
-/***/ 3:
+/******/ ([
+/* 0 */,
+/* 1 */
/***/ (function(module, exports) {
var h1 = document.createElement('h1');
@@ -80,5 +95,4 @@ document.body.appendChild(h1);
/***/ })
-
-/******/ });
\ No newline at end of file
+/******/ ]);
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-4/e.js b/examples/sort-manually/dist/webpack-4/e.js
index 4b3a5a83..1c7670ec 100644
--- a/examples/sort-manually/dist/webpack-4/e.js
+++ b/examples/sort-manually/dist/webpack-4/e.js
@@ -36,19 +36,34 @@
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
@@ -66,11 +81,12 @@
/******/
/******/
/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
+/******/ return __webpack_require__(__webpack_require__.s = 6);
/******/ })
/************************************************************************/
-/******/ ([
-/* 0 */
+/******/ ({
+
+/***/ 6:
/***/ (function(module, exports) {
var h1 = document.createElement('h1');
@@ -79,4 +95,5 @@ document.body.appendChild(h1);
/***/ })
-/******/ ]);
\ No newline at end of file
+
+/******/ });
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-4/first-file.html b/examples/sort-manually/dist/webpack-4/first-file.html
index afacda4b..f251a0f8 100644
--- a/examples/sort-manually/dist/webpack-4/first-file.html
+++ b/examples/sort-manually/dist/webpack-4/first-file.html
@@ -1,11 +1 @@
-
-
-
-
- Example template
-
-
-
-
-
-
\ No newline at end of file
+Example template
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-4/second-file.html b/examples/sort-manually/dist/webpack-4/second-file.html
index d6d80d35..ba8f8673 100644
--- a/examples/sort-manually/dist/webpack-4/second-file.html
+++ b/examples/sort-manually/dist/webpack-4/second-file.html
@@ -1,11 +1 @@
-
-
-
-
- Example template
-
-
-
-
-
-
\ No newline at end of file
+Example template
\ No newline at end of file
diff --git a/examples/sort-manually/dist/webpack-4/styles.css b/examples/sort-manually/dist/webpack-4/styles.css
index 232a2cdb..e86486ba 100644
--- a/examples/sort-manually/dist/webpack-4/styles.css
+++ b/examples/sort-manually/dist/webpack-4/styles.css
@@ -1,3 +1,3 @@
body {
background: snow;
-}
\ No newline at end of file
+}
diff --git a/examples/sort-manually/webpack.config.js b/examples/sort-manually/webpack.config.js
index 98b0b186..75ad9a7c 100644
--- a/examples/sort-manually/webpack.config.js
+++ b/examples/sort-manually/webpack.config.js
@@ -1,6 +1,6 @@
var path = require('path');
var HtmlWebpackPlugin = require('../..');
-var ExtractTextPlugin = require('extract-text-webpack-plugin');
+var MiniCssExtractPlugin = require('mini-css-extract-plugin');
var webpackMajorVersion = require('webpack/package.json').version.split('.')[0];
module.exports = {
context: __dirname,
@@ -17,8 +17,8 @@ module.exports = {
filename: '[name].js'
},
module: {
- loaders: [
- { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader') },
+ rules: [
+ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'] },
{ test: /\.png$/, loader: 'file-loader' },
{ test: /\.html$/, loader: 'html-loader' }
]
@@ -38,6 +38,6 @@ module.exports = {
chunksSortMode: 'manual',
chunks: ['a', 'b', 'd']
}),
- new ExtractTextPlugin('styles.css')
+ new MiniCssExtractPlugin({ filename: 'styles.css' })
]
};
diff --git a/examples/template-parameters/dist/webpack-1/bundle.js b/examples/template-parameters/dist/webpack-1/bundle.js
deleted file mode 100644
index 566285ab..00000000
--- a/examples/template-parameters/dist/webpack-1/bundle.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
- var h1 = document.createElement('h1');
- h1.innerHTML = 'Hello world!';
- document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/template-parameters/dist/webpack-1/index.html b/examples/template-parameters/dist/webpack-1/index.html
deleted file mode 100644
index 397760f0..00000000
--- a/examples/template-parameters/dist/webpack-1/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
- bar
-
-
-
-
diff --git a/examples/template-parameters/dist/webpack-2/bundle.js b/examples/template-parameters/dist/webpack-2/bundle.js
deleted file mode 100644
index 6b4b71fe..00000000
--- a/examples/template-parameters/dist/webpack-2/bundle.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-var h1 = document.createElement('h1');
-h1.innerHTML = 'Hello world!';
-document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/template-parameters/dist/webpack-2/index.html b/examples/template-parameters/dist/webpack-2/index.html
deleted file mode 100644
index 397760f0..00000000
--- a/examples/template-parameters/dist/webpack-2/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
- bar
-
-
-
-
diff --git a/examples/template-parameters/dist/webpack-3/bundle.js b/examples/template-parameters/dist/webpack-3/bundle.js
deleted file mode 100644
index 6044453b..00000000
--- a/examples/template-parameters/dist/webpack-3/bundle.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-var h1 = document.createElement('h1');
-h1.innerHTML = 'Hello world!';
-document.body.appendChild(h1);
-
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/examples/template-parameters/dist/webpack-3/index.html b/examples/template-parameters/dist/webpack-3/index.html
deleted file mode 100644
index 397760f0..00000000
--- a/examples/template-parameters/dist/webpack-3/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
- bar
-
-
-
-
diff --git a/examples/template-parameters/dist/webpack-4/bundle.js b/examples/template-parameters/dist/webpack-4/bundle.js
index 706b67e4..04b5d781 100644
--- a/examples/template-parameters/dist/webpack-4/bundle.js
+++ b/examples/template-parameters/dist/webpack-4/bundle.js
@@ -36,19 +36,34 @@
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
diff --git a/examples/template-parameters/dist/webpack-4/index.html b/examples/template-parameters/dist/webpack-4/index.html
index 397760f0..2ac7ecd2 100644
--- a/examples/template-parameters/dist/webpack-4/index.html
+++ b/examples/template-parameters/dist/webpack-4/index.html
@@ -1,9 +1 @@
-
-
-
-
- bar
-
-
-
-
+bar
\ No newline at end of file
diff --git a/examples/template-parameters/index.ejs b/examples/template-parameters/index.ejs
index 9c7cdfdf..caf0b6a2 100644
--- a/examples/template-parameters/index.ejs
+++ b/examples/template-parameters/index.ejs
@@ -1,7 +1,7 @@
-
+
<%= foo %>
diff --git a/flow.png b/flow.png
new file mode 100644
index 00000000..8420d7c6
Binary files /dev/null and b/flow.png differ
diff --git a/flow.puml b/flow.puml
new file mode 100644
index 00000000..22c738b0
--- /dev/null
+++ b/flow.puml
@@ -0,0 +1,32 @@
+@startuml
+' See docs http://plantuml.com/sequence.html
+'
+' generate png:
+' npm run puml
+autonumber
+
+participant Webpack
+participant ChildCompiler
+participant TagCreator
+participant TemplateExecutor
+participant TagInjector
+
+Webpack -> ChildCompiler : start child compilation
+ChildCompiler -> ChildCompiler : compile html template
+ChildCompiler -> TemplateExecutor : handover compiled template
+Webpack -> TagCreator : hand over compilation\n assets
+note right of TagInjector: beforeAssetTagGeneration
+TagCreator -> TagCreator : create script style\n and meta tags
+note right of TagInjector: alterAssetTags
+TagCreator -> TagCreator : group tags to\n head and body groups
+note right of TagInjector: alterAssetTagGroups
+TagCreator -> TemplateExecutor : handover tag groups
+TemplateExecutor -> TemplateExecutor : execute compiled template
+note right of TagInjector: afterTemplateExecution
+TemplateExecutor -> TagInjector : handover html
+TagInjector -> TagInjector : inject script style\n and meta tags
+note right of TagInjector: beforeEmit
+TagInjector -> Webpack : add generated file to\n assets
+note right of TagInjector: afterEmit
+
+@enduml
\ No newline at end of file
diff --git a/index.js b/index.js
index 5d6d28d0..eb6ebb22 100644
--- a/index.js
+++ b/index.js
@@ -1,3 +1,10 @@
+// @ts-check
+// Import types
+/* eslint-disable */
+///
+/* eslint-enable */
+/** @typedef {import("webpack/lib/Compiler.js")} WebpackCompiler */
+/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */
'use strict';
// use Polyfill for util.promisify in node versions < v8
@@ -7,25 +14,38 @@ const vm = require('vm');
const fs = require('fs');
const _ = require('lodash');
const path = require('path');
+const loaderUtils = require('loader-utils');
+
+const { createHtmlTagObject, htmlTagObjectToString } = require('./lib/html-tags');
+
const childCompiler = require('./lib/compiler.js');
const prettyError = require('./lib/errors.js');
const chunkSorter = require('./lib/chunksorter.js');
+const getHtmlWebpackPluginHooks = require('./lib/hooks.js').getHtmlWebpackPluginHooks;
const fsStatAsync = promisify(fs.stat);
const fsReadFileAsync = promisify(fs.readFile);
class HtmlWebpackPlugin {
+ /**
+ * @param {Partial} [options]
+ */
constructor (options) {
+ /** @type {Partial} */
+ const userOptions = options || {};
+
// Default options
- this.options = _.extend({
+ /** @type {HtmlWebpackPluginOptions} */
+ const defaultOptions = {
template: path.join(__dirname, 'default_index.ejs'),
+ templateContent: false,
templateParameters: templateParametersGenerator,
filename: 'index.html',
hash: false,
inject: true,
compile: true,
favicon: false,
- minify: false,
+ minify: undefined,
cache: true,
showErrors: true,
chunks: 'all',
@@ -34,12 +54,40 @@ class HtmlWebpackPlugin {
meta: {},
title: 'Webpack App',
xhtml: false
- }, options);
+ };
+
+ /** @type {HtmlWebpackPluginOptions} */
+ this.options = Object.assign(defaultOptions, userOptions);
+
+ // Default metaOptions if no template is provided
+ if (!userOptions.template && this.options.templateContent === false && this.options.meta) {
+ const defaultMeta = {
+ // From https://developer.mozilla.org/en-US/docs/Mozilla/Mobile/Viewport_meta_tag
+ viewport: 'width=device-width, initial-scale=1'
+ };
+ this.options.meta = Object.assign({}, this.options.meta, defaultMeta, userOptions.meta);
+ }
+
+ // Instance variables to keep caching information
+ // for multiple builds
+ this.childCompilerHash = undefined;
+ /**
+ * @type {string | undefined}
+ */
+ this.childCompilationOutputName = undefined;
+ this.assetJson = undefined;
+ this.hash = undefined;
+ this.version = HtmlWebpackPlugin.version;
}
+ /**
+ * apply is called by the webpack main compiler during the start phase
+ * @param {WebpackCompiler} compiler
+ */
apply (compiler) {
const self = this;
let isCompilationCached = false;
+ /** @type Promise */
let compilationPromise;
this.options.template = this.getFullTemplatePath(this.options.template, compiler.context);
@@ -51,34 +99,65 @@ class HtmlWebpackPlugin {
this.options.filename = path.relative(compiler.options.output.path, filename);
}
- // setup hooks for webpack 4
- if (compiler.hooks) {
- compiler.hooks.compilation.tap('HtmlWebpackPluginHooks', compilation => {
- const SyncWaterfallHook = require('tapable').SyncWaterfallHook;
- const AsyncSeriesWaterfallHook = require('tapable').AsyncSeriesWaterfallHook;
- compilation.hooks.htmlWebpackPluginAlterChunks = new SyncWaterfallHook(['chunks', 'objectWithPluginRef']);
- compilation.hooks.htmlWebpackPluginBeforeHtmlGeneration = new AsyncSeriesWaterfallHook(['pluginArgs']);
- compilation.hooks.htmlWebpackPluginBeforeHtmlProcessing = new AsyncSeriesWaterfallHook(['pluginArgs']);
- compilation.hooks.htmlWebpackPluginAlterAssetTags = new AsyncSeriesWaterfallHook(['pluginArgs']);
- compilation.hooks.htmlWebpackPluginAfterHtmlProcessing = new AsyncSeriesWaterfallHook(['pluginArgs']);
- compilation.hooks.htmlWebpackPluginAfterEmit = new AsyncSeriesWaterfallHook(['pluginArgs']);
- });
+ // `contenthash` is introduced in webpack v4.3
+ // which conflicts with the plugin's existing `contenthash` method,
+ // hence it is renamed to `templatehash` to avoid conflicts
+ this.options.filename = this.options.filename.replace(/\[(?:(\w+):)?contenthash(?::([a-z]+\d*))?(?::(\d+))?\]/ig, (match) => {
+ return match.replace('contenthash', 'templatehash');
+ });
+
+ // Check if webpack is running in production mode
+ // @see https://github.com/webpack/webpack/blob/3366421f1784c449f415cda5930a8e445086f688/lib/WebpackOptionsDefaulter.js#L12-L14
+ const isProductionLikeMode = compiler.options.mode === 'production' || !compiler.options.mode;
+
+ const minify = this.options.minify;
+ if (minify === true || (minify === undefined && isProductionLikeMode)) {
+ this.options.minify = {
+ // https://github.com/kangax/html-minifier#options-quick-reference
+ collapseWhitespace: true,
+ removeComments: true,
+ removeRedundantAttributes: true,
+ removeScriptTypeAttributes: true,
+ removeStyleLinkTypeAttributes: true,
+ useShortDoctype: true
+ };
}
- // Backwards compatible version of: compiler.hooks.make.tapAsync()
- (compiler.hooks ? compiler.hooks.make.tapAsync.bind(compiler.hooks.make, 'HtmlWebpackPlugin') : compiler.plugin.bind(compiler, 'make'))((compilation, callback) => {
+ // Clear the cache once a new HtmlWebpackPlugin is added
+ childCompiler.clearCache(compiler);
+
+ // Register all HtmlWebpackPlugins instances at the child compiler
+ compiler.hooks.thisCompilation.tap('HtmlWebpackPlugin', (compilation) => {
+ // Clear the cache if the child compiler is outdated
+ if (childCompiler.hasOutDatedTemplateCache(compilation)) {
+ childCompiler.clearCache(compiler);
+ }
+ // Add this instances template to the child compiler
+ childCompiler.addTemplateToCompiler(compiler, this.options.template);
+ // Add file dependencies of child compiler to parent compiler
+ // to keep them watched even if we get the result from the cache
+ compilation.hooks.additionalChunkAssets.tap('HtmlWebpackPlugin', () => {
+ const childCompilerDependencies = childCompiler.getFileDependencies(compiler);
+ childCompilerDependencies.forEach(fileDependency => {
+ compilation.compilationDependencies.add(fileDependency);
+ });
+ });
+ });
+
+ compiler.hooks.make.tapAsync('HtmlWebpackPlugin', (compilation, callback) => {
// Compile the template (queued)
- compilationPromise = childCompiler.compileTemplate(self.options.template, compiler.context, self.options.filename, compilation)
+ compilationPromise = childCompiler.compileTemplate(self.options.template, self.options.filename, compilation)
.catch(err => {
compilation.errors.push(prettyError(err, compiler.context).toString());
return {
content: self.options.showErrors ? prettyError(err, compiler.context).toJsonHtml() : 'ERROR',
- outputName: self.options.filename
+ outputName: self.options.filename,
+ hash: ''
};
})
.then(compilationResult => {
// If the compilation change didnt change the cache is valid
- isCompilationCached = compilationResult.hash && self.childCompilerHash === compilationResult.hash;
+ isCompilationCached = Boolean(compilationResult.hash) && self.childCompilerHash === compilationResult.hash;
self.childCompilerHash = compilationResult.hash;
self.childCompilationOutputName = compilationResult.outputName;
callback();
@@ -86,157 +165,166 @@ class HtmlWebpackPlugin {
});
});
- // Backwards compatible version of: compiler.plugin.emit.tapAsync()
- (compiler.hooks ? compiler.hooks.emit.tapAsync.bind(compiler.hooks.emit, 'HtmlWebpackPlugin') : compiler.plugin.bind(compiler, 'emit'))((compilation, callback) => {
- const applyPluginsAsyncWaterfall = self.applyPluginsAsyncWaterfall(compilation);
- // Get chunks info as json
- // Note: we're excluding stuff that we don't need to improve toJson serialization speed.
- const chunkOnlyConfig = {
- assets: false,
- cached: false,
- children: false,
- chunks: true,
- chunkModules: false,
- chunkOrigins: false,
- errorDetails: false,
- hash: false,
- modules: false,
- reasons: false,
- source: false,
- timings: false,
- version: false
- };
- const allChunks = compilation.getStats().toJson(chunkOnlyConfig).chunks;
- // Filter chunks (options.chunks and options.excludeCHunks)
- let chunks = self.filterChunks(allChunks, self.options.chunks, self.options.excludeChunks);
- // Sort chunks
- chunks = self.sortChunks(chunks, self.options.chunksSortMode, compilation);
- // Let plugins alter the chunks and the chunk sorting
- if (compilation.hooks) {
- chunks = compilation.hooks.htmlWebpackPluginAlterChunks.call(chunks, { plugin: self });
- } else {
- // Before Webpack 4
- chunks = compilation.applyPluginsWaterfall('html-webpack-plugin-alter-chunks', chunks, { plugin: self });
- }
- // Get assets
- const assets = self.htmlWebpackPluginAssets(compilation, chunks);
- // If this is a hot update compilation, move on!
- // This solves a problem where an `index.html` file is generated for hot-update js files
- // It only happens in Webpack 2, where hot updates are emitted separately before the full bundle
- if (self.isHotUpdateCompilation(assets)) {
- return callback();
- }
+ compiler.hooks.emit.tapAsync('HtmlWebpackPlugin',
+ /**
+ * Hook into the webpack emit phase
+ * @param {WebpackCompilation} compilation
+ * @param {() => void} callback
+ */
+ (compilation, callback) => {
+ // Get all entry point names for this html file
+ const entryNames = Array.from(compilation.entrypoints.keys());
+ const filteredEntryNames = self.filterChunks(entryNames, self.options.chunks, self.options.excludeChunks);
+ const sortedEntryNames = self.sortEntryChunks(filteredEntryNames, this.options.chunksSortMode, compilation);
+ const childCompilationOutputName = self.childCompilationOutputName;
+
+ if (childCompilationOutputName === undefined) {
+ throw new Error('Did not receive child compilation result');
+ }
- // If the template and the assets did not change we don't have to emit the html
- const assetJson = JSON.stringify(self.getAssetFiles(assets));
- if (isCompilationCached && self.options.cache && assetJson === self.assetJson) {
- return callback();
- } else {
- self.assetJson = assetJson;
- }
+ // Turn the entry point names into file paths
+ const assets = self.htmlWebpackPluginAssets(compilation, childCompilationOutputName, sortedEntryNames);
- Promise.resolve()
- // Favicon
- .then(() => {
- if (self.options.favicon) {
- return self.addFileToAssets(self.options.favicon, compilation)
- .then(faviconBasename => {
- let publicPath = compilation.mainTemplate.getPublicPath({hash: compilation.hash}) || '';
- if (publicPath && publicPath.substr(-1) !== '/') {
- publicPath += '/';
- }
- assets.favicon = publicPath + faviconBasename;
- });
- }
- })
- // Wait for the compilation to finish
- .then(() => compilationPromise)
- .then(compiledTemplate => {
- // Allow to use a custom function / string instead
- if (self.options.templateContent !== undefined) {
- return self.options.templateContent;
- }
- // Once everything is compiled evaluate the html factory
- // and replace it with its content
- return self.evaluateCompilationResult(compilation, compiledTemplate);
- })
- // Allow plugins to make changes to the assets before invoking the template
- // This only makes sense to use if `inject` is `false`
- .then(compilationResult =>
- applyPluginsAsyncWaterfall('html-webpack-plugin-before-html-generation', false, {
- assets: assets,
- outputName: self.childCompilationOutputName,
+ // If this is a hot update compilation, move on!
+ // This solves a problem where an `index.html` file is generated for hot-update js files
+ // It only happens in Webpack 2, where hot updates are emitted separately before the full bundle
+ if (self.isHotUpdateCompilation(assets)) {
+ return callback();
+ }
+
+ // If the template and the assets did not change we don't have to emit the html
+ const assetJson = JSON.stringify(self.getAssetFiles(assets));
+ if (isCompilationCached && self.options.cache && assetJson === self.assetJson) {
+ return callback();
+ } else {
+ self.assetJson = assetJson;
+ }
+
+ // The html-webpack plugin uses a object representation for the html-tags which will be injected
+ // to allow altering them more easily
+ // Just before they are converted a third-party-plugin author might change the order and content
+ const assetsPromise = this.getFaviconPublicPath(this.options.favicon, compilation, assets.publicPath)
+ .then((faviconPath) => {
+ assets.favicon = faviconPath;
+ return getHtmlWebpackPluginHooks(compilation).beforeAssetTagGeneration.promise({
+ assets: assets,
+ outputName: childCompilationOutputName,
+ plugin: self
+ });
+ });
+
+ // Turn the js and css paths into grouped HtmlTagObjects
+ const assetTagGroupsPromise = assetsPromise
+ // And allow third-party-plugin authors to reorder and change the assetTags before they are grouped
+ .then(({assets}) => getHtmlWebpackPluginHooks(compilation).alterAssetTags.promise({
+ assetTags: {
+ scripts: self.generatedScriptTags(assets.js),
+ styles: self.generateStyleTags(assets.css),
+ meta: [
+ ...self.generatedMetaTags(self.options.meta),
+ ...self.generateFaviconTags(assets.favicon)
+ ]
+ },
+ outputName: childCompilationOutputName,
plugin: self
+ }))
+ .then(({assetTags}) => {
+ // Inject scripts to body unless it set explictly to head
+ const scriptTarget = self.options.inject === 'head' ? 'head' : 'body';
+ // Group assets to `head` and `body` tag arrays
+ const assetGroups = this.generateAssetGroups(assetTags, scriptTarget);
+ // Allow third-party-plugin authors to reorder and change the assetTags once they are grouped
+ return getHtmlWebpackPluginHooks(compilation).alterAssetTagGroups.promise({
+ headTags: assetGroups.headTags,
+ bodyTags: assetGroups.bodyTags,
+ outputName: childCompilationOutputName,
+ plugin: self
+ });
+ });
+
+ // Turn the compiled tempalte into a nodejs function or into a nodejs string
+ const templateEvaluationPromise = compilationPromise
+ .then(compiledTemplate => {
+ // Allow to use a custom function / string instead
+ if (self.options.templateContent !== false) {
+ return self.options.templateContent;
+ }
+ // Once everything is compiled evaluate the html factory
+ // and replace it with its content
+ return self.evaluateCompilationResult(compilation, compiledTemplate);
+ });
+
+ const templateExectutionPromise = Promise.all([assetsPromise, assetTagGroupsPromise, templateEvaluationPromise])
+ // Execute the template
+ .then(([assetsHookResult, assetTags, compilationResult]) => typeof compilationResult !== 'function'
+ ? compilationResult
+ : self.executeTemplate(compilationResult, assetsHookResult.assets, { headTags: assetTags.headTags, bodyTags: assetTags.bodyTags }, compilation));
+
+ const injectedHtmlPromise = Promise.all([assetTagGroupsPromise, templateExectutionPromise])
+ // Allow plugins to change the html before assets are injected
+ .then(([assetTags, html]) => {
+ const pluginArgs = {html, headTags: assetTags.headTags, bodyTags: assetTags.bodyTags, plugin: self, outputName: childCompilationOutputName};
+ return getHtmlWebpackPluginHooks(compilation).afterTemplateExecution.promise(pluginArgs);
})
- .then(() => compilationResult)
- )
- // Execute the template
- .then(compilationResult => typeof compilationResult !== 'function'
- ? compilationResult
- : self.executeTemplate(compilationResult, chunks, assets, compilation))
- // Allow plugins to change the html before assets are injected
- .then(html => {
- const pluginArgs = {html: html, assets: assets, plugin: self, outputName: self.childCompilationOutputName};
- return applyPluginsAsyncWaterfall('html-webpack-plugin-before-html-processing', true, pluginArgs);
- })
- .then(result => {
- const html = result.html;
- const assets = result.assets;
- // Prepare script and link tags
- const assetTags = self.generateHtmlTags(assets);
- const pluginArgs = {head: assetTags.head, body: assetTags.body, plugin: self, chunks: chunks, outputName: self.childCompilationOutputName};
- // Allow plugins to change the assetTag definitions
- return applyPluginsAsyncWaterfall('html-webpack-plugin-alter-asset-tags', true, pluginArgs)
- .then(result => self.postProcessHtml(html, assets, { body: result.body, head: result.head })
- .then(html => _.extend(result, {html: html, assets: assets})));
- })
- // Allow plugins to change the html after assets are injected
- .then(result => {
- const html = result.html;
- const assets = result.assets;
- const pluginArgs = {html: html, assets: assets, plugin: self, outputName: self.childCompilationOutputName};
- return applyPluginsAsyncWaterfall('html-webpack-plugin-after-html-processing', true, pluginArgs)
- .then(result => result.html);
- })
- .catch(err => {
- // In case anything went wrong the promise is resolved
- // with the error message and an error is logged
- compilation.errors.push(prettyError(err, compiler.context).toString());
- // Prevent caching
- self.hash = null;
- return self.options.showErrors ? prettyError(err, compiler.context).toHtml() : 'ERROR';
- })
- .then(html => {
- // Replace the compilation result with the evaluated html code
- compilation.assets[self.childCompilationOutputName] = {
- source: () => html,
- size: () => html.length
- };
- })
- .then(() => applyPluginsAsyncWaterfall('html-webpack-plugin-after-emit', false, {
- html: compilation.assets[self.childCompilationOutputName],
- outputName: self.childCompilationOutputName,
- plugin: self
- }).catch(err => {
- console.error(err);
- return null;
- }).then(() => null))
- // Let webpack continue with it
- .then(() => {
+ .then(({html, headTags, bodyTags}) => {
+ return self.postProcessHtml(html, assets, {headTags, bodyTags});
+ });
+
+ const emitHtmlPromise = injectedHtmlPromise
+ // Allow plugins to change the html after assets are injected
+ .then((html) => {
+ const pluginArgs = {html, plugin: self, outputName: childCompilationOutputName};
+ return getHtmlWebpackPluginHooks(compilation).beforeEmit.promise(pluginArgs)
+ .then(result => result.html);
+ })
+ .catch(err => {
+ // In case anything went wrong the promise is resolved
+ // with the error message and an error is logged
+ compilation.errors.push(prettyError(err, compiler.context).toString());
+ // Prevent caching
+ self.hash = null;
+ return self.options.showErrors ? prettyError(err, compiler.context).toHtml() : 'ERROR';
+ })
+ .then(html => {
+ // Allow to use [templatehash] as placeholder for the html-webpack-plugin name
+ // See also https://survivejs.com/webpack/optimizing/adding-hashes-to-filenames/
+ // From https://github.com/webpack-contrib/extract-text-webpack-plugin/blob/8de6558e33487e7606e7cd7cb2adc2cccafef272/src/index.js#L212-L214
+ const finalOutputName = childCompilationOutputName.replace(/\[(?:(\w+):)?templatehash(?::([a-z]+\d*))?(?::(\d+))?\]/ig, (_, hashType, digestType, maxLength) => {
+ return loaderUtils.getHashDigest(Buffer.from(html, 'utf8'), hashType, digestType, parseInt(maxLength, 10));
+ });
+ // Add the evaluated html code to the webpack assets
+ compilation.assets[finalOutputName] = {
+ source: () => html,
+ size: () => html.length
+ };
+ return finalOutputName;
+ })
+ .then((finalOutputName) => getHtmlWebpackPluginHooks(compilation).afterEmit.promise({
+ outputName: finalOutputName,
+ plugin: self
+ }).catch(err => {
+ console.error(err);
+ return null;
+ }).then(() => null));
+
+ // Once all files are added to the webpack compilation
+ // let the webpack compiler continue
+ emitHtmlPromise.then(() => {
callback();
});
- });
+ });
}
/**
* Evaluates the child compilation result
- * Returns a promise
+ * @param {WebpackCompilation} compilation
+ * @param {string} source
+ * @returns {Promise string | Promise)>}
*/
evaluateCompilationResult (compilation, source) {
if (!source) {
- return Promise.reject('The child compilation didn\'t provide a result');
+ return Promise.reject(new Error('The child compilation didn\'t provide a result'));
}
-
// The LibraryTemplatePlugin stores the template result in a local variable.
// To extract the result during the evaluation this part has to be removed.
source = source.replace('var HTML_WEBPACK_PLUGIN_RESULT =', '');
@@ -255,74 +343,108 @@ class HtmlWebpackPlugin {
}
return typeof newSource === 'string' || typeof newSource === 'function'
? Promise.resolve(newSource)
- : Promise.reject('The loader "' + this.options.template + '" didn\'t return html.');
+ : Promise.reject(new Error('The loader "' + this.options.template + '" didn\'t return html.'));
}
/**
* Generate the template parameters for the template function
+ * @param {WebpackCompilation} compilation
+ * @param {{
+ publicPath: string,
+ js: Array,
+ css: Array,
+ manifest?: string,
+ favicon?: string
+ }} assets
+ * @param {{
+ headTags: HtmlTagObject[],
+ bodyTags: HtmlTagObject[]
+ }} assetTags
+ * @returns {Promise<{[key: any]: any}>}
*/
- getTemplateParameters (compilation, assets) {
- if (typeof this.options.templateParameters === 'function') {
- return this.options.templateParameters(compilation, assets, this.options);
+ getTemplateParameters (compilation, assets, assetTags) {
+ const templateParameters = this.options.templateParameters;
+ if (templateParameters === false) {
+ return Promise.resolve({});
}
- if (typeof this.options.templateParameters === 'object') {
- return this.options.templateParameters;
+ if (typeof templateParameters === 'function') {
+ return Promise
+ .resolve()
+ .then(() => templateParameters(compilation, assets, assetTags, this.options));
}
- return {};
+ if (typeof templateParameters === 'object') {
+ return Promise.resolve(templateParameters);
+ }
+ throw new Error('templateParameters has to be either a function or an object');
}
/**
- * Html post processing
+ * This function renders the actual html by executing the template function
+ *
+ * @param {(templatePArameters) => string | Promise} templateFunction
+ * @param {{
+ publicPath: string,
+ js: Array,
+ css: Array,
+ manifest?: string,
+ favicon?: string
+ }} assets
+ * @param {{
+ headTags: HtmlTagObject[],
+ bodyTags: HtmlTagObject[]
+ }} assetTags
+ * @param {WebpackCompilation} compilation
*
- * Returns a promise
+ * @returns Promise
*/
- executeTemplate (templateFunction, chunks, assets, compilation) {
- return Promise.resolve()
- // Template processing
- .then(() => {
- const templateParams = this.getTemplateParameters(compilation, assets);
- let html = '';
- try {
- html = templateFunction(templateParams);
- } catch (e) {
- compilation.errors.push(new Error('Template execution failed: ' + e));
- return Promise.reject(e);
- }
- return html;
- });
+ executeTemplate (templateFunction, assets, assetTags, compilation) {
+ // Template processing
+ const templateParamsPromise = this.getTemplateParameters(compilation, assets, assetTags);
+ return templateParamsPromise.then((templateParams) => {
+ try {
+ // If html is a promise return the promise
+ // If html is a string turn it into a promise
+ return templateFunction(templateParams);
+ } catch (e) {
+ compilation.errors.push(new Error('Template execution failed: ' + e));
+ return Promise.reject(e);
+ }
+ });
}
/**
- * Html post processing
+ * Html Post processing
*
- * Returns a promise
+ * @param {any} html
+ * The input html
+ * @param {any} assets
+ * @param {{
+ headTags: HtmlTagObject[],
+ bodyTags: HtmlTagObject[]
+ }} assetTags
+ * The asset tags to inject
+ *
+ * @returns {Promise}
*/
postProcessHtml (html, assets, assetTags) {
- const self = this;
if (typeof html !== 'string') {
- return Promise.reject('Expected html to be a string but got ' + JSON.stringify(html));
+ return Promise.reject(new Error('Expected html to be a string but got ' + JSON.stringify(html)));
}
- return Promise.resolve()
- // Inject
- .then(() => {
- if (self.options.inject) {
- return self.injectAssetsIntoHtml(html, assets, assetTags);
- } else {
- return html;
- }
- })
- // Minify
- .then(html => {
- if (self.options.minify) {
- const minify = require('html-minifier').minify;
- return minify(html, self.options.minify);
- }
- return html;
- });
+ const htmlAfterInjection = this.options.inject
+ ? this.injectAssetsIntoHtml(html, assets, assetTags)
+ : html;
+ const htmlAfterMinification = this.options.minify
+ ? require('html-minifier').minify(htmlAfterInjection, this.options.minify)
+ : htmlAfterInjection;
+ return Promise.resolve(htmlAfterMinification);
}
/*
* Pushes the content of the given filename to the compilation assets
+ * @param {string} filename
+ * @param {WebpackCompilation} compilation
+ *
+ * @returns {string} file basename
*/
addFileToAssets (filename, compilation) {
filename = path.resolve(compilation.compiler.context, filename);
@@ -330,62 +452,50 @@ class HtmlWebpackPlugin {
fsStatAsync(filename),
fsReadFileAsync(filename)
])
- .then(([size, source]) => {
- return {
- size,
- source
- };
- })
- .catch(() => Promise.reject(new Error('HtmlWebpackPlugin: could not load file ' + filename)))
- .then(results => {
- const basename = path.basename(filename);
- if (compilation.fileDependencies.add) {
+ .then(([size, source]) => {
+ return {
+ size,
+ source
+ };
+ })
+ .catch(() => Promise.reject(new Error('HtmlWebpackPlugin: could not load file ' + filename)))
+ .then(results => {
+ const basename = path.basename(filename);
compilation.fileDependencies.add(filename);
- } else {
- // Before Webpack 4 - fileDepenencies was an array
- compilation.fileDependencies.push(filename);
- }
- compilation.assets[basename] = {
- source: () => results.source,
- size: () => results.size.size
- };
- return basename;
- });
+ compilation.assets[basename] = {
+ source: () => results.source,
+ size: () => results.size.size
+ };
+ return basename;
+ });
}
/**
* Helper to sort chunks
+ * @param {string[]} entryNames
+ * @param {string|((entryNameA: string, entryNameB: string) => number)} sortMode
+ * @param {WebpackCompilation} compilation
*/
- sortChunks (chunks, sortMode, compilation) {
+ sortEntryChunks (entryNames, sortMode, compilation) {
// Custom function
if (typeof sortMode === 'function') {
- return chunks.sort(sortMode);
+ return entryNames.sort(sortMode);
}
// Check if the given sort mode is a valid chunkSorter sort mode
if (typeof chunkSorter[sortMode] !== 'undefined') {
- return chunkSorter[sortMode](chunks, this.options, compilation);
+ return chunkSorter[sortMode](entryNames, compilation, this.options);
}
throw new Error('"' + sortMode + '" is not a valid chunk sort mode');
}
/**
* Return all chunks from the compilation result which match the exclude and include filters
+ * @param {any} chunks
+ * @param {string[]|'all'} includedChunks
+ * @param {string[]} excludedChunks
*/
filterChunks (chunks, includedChunks, excludedChunks) {
- return chunks.filter(chunk => {
- const chunkName = chunk.names[0];
- // This chunk doesn't have a name. This script can't handled it.
- if (chunkName === undefined) {
- return false;
- }
- // Skip if the chunk should be lazy loaded
- if (typeof chunk.isInitial === 'function') {
- if (!chunk.isInitial()) {
- return false;
- }
- } else if (!chunk.initial) {
- return false;
- }
+ return chunks.filter(chunkName => {
// Skip if the chunks should be filtered and the given chunk was not added explicity
if (Array.isArray(includedChunks) && includedChunks.indexOf(chunkName) === -1) {
return false;
@@ -399,173 +509,333 @@ class HtmlWebpackPlugin {
});
}
+ /**
+ * Check if the given asset object consists only of hot-update.js files
+ *
+ * @param {{
+ publicPath: string,
+ js: Array,
+ css: Array,
+ manifest?: string,
+ favicon?: string
+ }} assets
+ */
isHotUpdateCompilation (assets) {
- return assets.js.length && assets.js.every(name => /\.hot-update\.js$/.test(name));
+ return assets.js.length && assets.js.every((assetPath) => /\.hot-update\.js$/.test(assetPath));
}
- htmlWebpackPluginAssets (compilation, chunks) {
- const self = this;
+ /**
+ * Return true if PATH is an absolute url path, otherwise false
+ *
+ * @param {string | undefined} path
+ */
+ isAbsolutePath (path) {
+ if (typeof path === 'undefined' || path === '') return false;
+ // If the path start with '/'
+ if (path.indexOf('/') === 0) return true;
+ // If the path contain the '://' scheme
+ if (path.indexOf('://') !== -1) return true;
+
+ return false;
+ }
+
+ /**
+ * The htmlWebpackPluginAssets extracts the asset information of a webpack compilation
+ * for all given entry names
+ * @param {WebpackCompilation} compilation
+ * @param {string[]} entryNames
+ * @returns {{
+ publicPath: string,
+ js: Array,
+ css: Array,
+ manifest?: string,
+ favicon?: string
+ }}
+ */
+ htmlWebpackPluginAssets (compilation, childCompilationOutputName, entryNames) {
const compilationHash = compilation.hash;
- // Use the configured public path or build a relative path
- let publicPath = typeof compilation.options.output.publicPath !== 'undefined'
- // If a hard coded public path exists use it
+ /**
+ * @type {string} the configured public path to the asset root
+ * if the absolute path publicPath is set in the current webpack config use it otherwise
+ * fallback to a realtive path
+ */
+ let publicPath = this.isAbsolutePath(compilation.options.output.publicPath)
+ // If the absolute path is set in the publicPath use it
? compilation.mainTemplate.getPublicPath({hash: compilationHash})
- // If no public path was set get a relative url path
- : path.relative(path.resolve(compilation.options.output.path, path.dirname(self.childCompilationOutputName)), compilation.options.output.path)
+ // If publicPath was a relative path get the realtive path
+ : path.relative(path.resolve(compilation.options.output.path, path.dirname(childCompilationOutputName)), compilation.options.output.path)
.split(path.sep).join('/');
if (publicPath.length && publicPath.substr(-1, 1) !== '/') {
publicPath += '/';
}
+ /**
+ * @type {{
+ publicPath: string,
+ js: Array,
+ css: Array,
+ manifest?: string,
+ favicon?: string
+ }}
+ */
const assets = {
// The public path
publicPath: publicPath,
- // Will contain all js & css files by chunk
- chunks: {},
// Will contain all js files
js: [],
// Will contain all css files
css: [],
// Will contain the html5 appcache manifest files if it exists
- manifest: Object.keys(compilation.assets).filter(assetFile => path.extname(assetFile) === '.appcache')[0]
+ manifest: Object.keys(compilation.assets).find(assetFile => path.extname(assetFile) === '.appcache'),
+ // Favicon
+ favicon: undefined
};
// Append a hash for cache busting
- if (this.options.hash) {
- assets.manifest = self.appendHash(assets.manifest, compilationHash);
- assets.favicon = self.appendHash(assets.favicon, compilationHash);
+ if (this.options.hash && assets.manifest) {
+ assets.manifest = this.appendHash(assets.manifest, compilationHash);
}
- for (let i = 0; i < chunks.length; i++) {
- const chunk = chunks[i];
- const chunkName = chunk.names[0];
-
- assets.chunks[chunkName] = {};
-
- // Prepend the public path to all chunk files
- let chunkFiles = [].concat(chunk.files).map(chunkFile => publicPath + chunkFile);
-
- // Append a hash for cache busting
- if (this.options.hash) {
- chunkFiles = chunkFiles.map(chunkFile => self.appendHash(chunkFile, compilationHash));
- }
-
- // Webpack outputs an array for each chunk when using sourcemaps
- // or when one chunk hosts js and css simultaneously
- const js = chunkFiles.find(chunkFile => /.js($|\?)/.test(chunkFile));
- if (js) {
- assets.chunks[chunkName].size = chunk.size;
- assets.chunks[chunkName].entry = js;
- assets.chunks[chunkName].hash = chunk.hash;
- assets.js.push(js);
- }
+ // Extract paths to .js and .css files from the current compilation
+ const entryPointPublicPathMap = {};
+ const extensionRegexp = /\.(css|js)(\?|$)/;
+ for (let i = 0; i < entryNames.length; i++) {
+ const entryName = entryNames[i];
+ const entryPointFiles = compilation.entrypoints.get(entryName).getFiles();
+ // Prepend the publicPath and append the hash depending on the
+ // webpack.output.publicPath and hashOptions
+ // E.g. bundle.js -> /bundle.js?hash
+ const entryPointPublicPaths = entryPointFiles
+ .map(chunkFile => {
+ const entryPointPublicPath = publicPath + chunkFile;
+ return this.options.hash
+ ? this.appendHash(entryPointPublicPath, compilationHash)
+ : entryPointPublicPath;
+ });
- // Gather all css files
- const css = chunkFiles.filter(chunkFile => /.css($|\?)/.test(chunkFile));
- assets.chunks[chunkName].css = css;
- assets.css = assets.css.concat(css);
+ entryPointPublicPaths.forEach((entryPointPublicPath) => {
+ const extMatch = extensionRegexp.exec(entryPointPublicPath);
+ // Skip if the public path is not a .css or .js file
+ if (!extMatch) {
+ return;
+ }
+ // Skip if this file is already known
+ // (e.g. because of common chunk optimizations)
+ if (entryPointPublicPathMap[entryPointPublicPath]) {
+ return;
+ }
+ entryPointPublicPathMap[entryPointPublicPath] = true;
+ // ext will contain .js or .css
+ const ext = extMatch[1];
+ assets[ext].push(entryPointPublicPath);
+ });
}
-
- // Duplicate css assets can occur on occasion if more than one chunk
- // requires the same css.
- assets.css = _.uniq(assets.css);
-
return assets;
}
+ /**
+ * Converts a favicon file from disk to a webpack ressource
+ * and returns the url to the ressource
+ *
+ * @param {string|false} faviconFilePath
+ * @param {WebpackCompilation} compilation
+ * @parma {string} publicPath
+ * @returns {Promise}
+ */
+ getFaviconPublicPath (faviconFilePath, compilation, publicPath) {
+ if (!faviconFilePath) {
+ return Promise.resolve(undefined);
+ }
+ return this.addFileToAssets(faviconFilePath, compilation)
+ .then((faviconName) => {
+ const faviconPath = publicPath + faviconName;
+ if (this.options.hash) {
+ return this.appendHash(faviconPath, compilation.hash);
+ }
+ return faviconPath;
+ });
+ }
+
/**
* Generate meta tags
+ * @returns {HtmlTagObject[]}
*/
getMetaTags () {
- if (this.options.meta === false) {
+ const metaOptions = this.options.meta;
+ if (metaOptions === false) {
return [];
}
// Make tags self-closing in case of xhtml
// Turn { "viewport" : "width=500, initial-scale=1" } into
// [{ name:"viewport" content:"width=500, initial-scale=1" }]
- const selfClosingTag = !!this.options.xhtml;
- const metaTagAttributeObjects = Object.keys(this.options.meta).map((metaName) => {
- const metaTagContent = this.options.meta[metaName];
- return (typeof metaTagContent === 'object') ? metaTagContent : {
- name: metaName,
- content: metaTagContent
- };
- });
+ const metaTagAttributeObjects = Object.keys(metaOptions)
+ .map((metaName) => {
+ const metaTagContent = metaOptions[metaName];
+ return (typeof metaTagContent === 'string') ? {
+ name: metaName,
+ content: metaTagContent
+ } : metaTagContent;
+ })
+ .filter((attribute) => attribute !== false);
// Turn [{ name:"viewport" content:"width=500, initial-scale=1" }] into
// the html-webpack-plugin tag structure
return metaTagAttributeObjects.map((metaTagAttributes) => {
+ if (metaTagAttributes === false) {
+ throw new Error('Invalid meta tag');
+ }
return {
tagName: 'meta',
voidTag: true,
- selfClosingTag: selfClosingTag,
attributes: metaTagAttributes
};
});
}
/**
- * Injects the assets into the given html string
+ * Generate all tags script for the given file paths
+ * @param {Array} jsAssets
+ * @returns {Array}
*/
- generateHtmlTags (assets) {
- // Turn script files into script tags
- const scripts = assets.js.map(scriptPath => ({
+ generatedScriptTags (jsAssets) {
+ return jsAssets.map(scriptAsset => ({
tagName: 'script',
- closeTag: true,
+ voidTag: false,
attributes: {
- type: 'text/javascript',
- src: scriptPath
+ src: scriptAsset
}
}));
- // Make tags self-closing in case of xhtml
- const selfClosingTag = !!this.options.xhtml;
- // Turn css files into link tags
- const styles = assets.css.map(stylePath => ({
+ }
+
+ /**
+ * Generate all style tags for the given file paths
+ * @param {Array} cssAssets
+ * @returns {Array}
+ */
+ generateStyleTags (cssAssets) {
+ return cssAssets.map(styleAsset => ({
tagName: 'link',
- selfClosingTag: selfClosingTag,
voidTag: true,
attributes: {
- href: stylePath,
+ href: styleAsset,
rel: 'stylesheet'
}
}));
- // Injection targets
- let head = this.getMetaTags();
- let body = [];
-
- // If there is a favicon present, add it to the head
- if (assets.favicon) {
- head.push({
- tagName: 'link',
- selfClosingTag: selfClosingTag,
+ }
+
+ /**
+ * Generate all meta tags for the given meta configuration
+ * @param {false | {
+ [name: string]:
+ false // disabled
+ | string // name content pair e.g. {viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no'}`
+ | {[attributeName: string]: string|boolean} // custom properties e.g. { name:"viewport" content:"width=500, initial-scale=1" }
+ }} metaOptions
+ * @returns {Array}
+ */
+ generatedMetaTags (metaOptions) {
+ if (metaOptions === false) {
+ return [];
+ }
+ // Make tags self-closing in case of xhtml
+ // Turn { "viewport" : "width=500, initial-scale=1" } into
+ // [{ name:"viewport" content:"width=500, initial-scale=1" }]
+ const metaTagAttributeObjects = Object.keys(metaOptions)
+ .map((metaName) => {
+ const metaTagContent = metaOptions[metaName];
+ return (typeof metaTagContent === 'string') ? {
+ name: metaName,
+ content: metaTagContent
+ } : metaTagContent;
+ })
+ .filter((attribute) => attribute !== false);
+ // Turn [{ name:"viewport" content:"width=500, initial-scale=1" }] into
+ // the html-webpack-plugin tag structure
+ return metaTagAttributeObjects.map((metaTagAttributes) => {
+ if (metaTagAttributes === false) {
+ throw new Error('Invalid meta tag');
+ }
+ return {
+ tagName: 'meta',
voidTag: true,
- attributes: {
- rel: 'shortcut icon',
- href: assets.favicon
- }
- });
+ attributes: metaTagAttributes
+ };
+ });
+ }
+
+ /**
+ * Generate a favicon tag for the given file path
+ * @param {string| undefined} faviconPath
+ * @returns {Array}
+ */
+ generateFaviconTags (faviconPath) {
+ if (!faviconPath) {
+ return [];
}
- // Add styles to the head
- head = head.concat(styles);
- // Add scripts to body or head
- if (this.options.inject === 'head') {
- head = head.concat(scripts);
+ return [{
+ tagName: 'link',
+ voidTag: true,
+ attributes: {
+ rel: 'shortcut icon',
+ href: faviconPath
+ }
+ }];
+ }
+
+ /**
+ * Group assets to head and bottom tags
+ *
+ * @param {{
+ scripts: Array;
+ styles: Array;
+ meta: Array;
+ }} assetTags
+ * @param {"body" | "head"} scriptTarget
+ * @returns {{
+ headTags: Array;
+ bodyTags: Array;
+ }}
+ */
+ generateAssetGroups (assetTags, scriptTarget) {
+ /** @type {{ headTags: Array; bodyTags: Array; }} */
+ const result = {
+ headTags: [
+ ...assetTags.meta,
+ ...assetTags.styles
+ ],
+ bodyTags: []
+ };
+ // Add script tags to head or body depending on
+ // the htmlPluginOptions
+ if (scriptTarget === 'body') {
+ result.bodyTags.push(...assetTags.scripts);
} else {
- body = body.concat(scripts);
+ result.headTags.push(...assetTags.scripts);
}
- return {head: head, body: body};
+ return result;
}
/**
* Injects the assets into the given html string
+ *
+ * @param {string} html
+ * The input html
+ * @param {any} assets
+ * @param {{
+ headTags: HtmlTagObject[],
+ bodyTags: HtmlTagObject[]
+ }} assetTags
+ * The asset tags to inject
+ *
+ * @returns {string}
*/
injectAssetsIntoHtml (html, assets, assetTags) {
const htmlRegExp = /(]*>)/i;
const headRegExp = /(<\/head\s*>)/i;
const bodyRegExp = /(<\/body\s*>)/i;
- const body = assetTags.body.map(this.createHtmlTag.bind(this));
- const head = assetTags.head.map(this.createHtmlTag.bind(this));
+ const body = assetTags.bodyTags.map((assetTagObject) => htmlTagObjectToString(assetTagObject, this.options.xhtml));
+ const head = assetTags.headTags.map((assetTagObject) => htmlTagObjectToString(assetTagObject, this.options.xhtml));
if (body.length) {
if (bodyRegExp.test(html)) {
@@ -605,7 +875,10 @@ class HtmlWebpackPlugin {
}
/**
- * Appends a cache busting hash
+ * Appends a cache busting hash to the query string of the url
+ * E.g. http://localhost:8080/ -> http://localhost:8080/?50c9096ba6183fd728eeb065a26ec175
+ * @param {string} url
+ * @param {string} hash
*/
appendHash (url, hash) {
if (!url) {
@@ -614,28 +887,12 @@ class HtmlWebpackPlugin {
return url + (url.indexOf('?') === -1 ? '?' : '&') + hash;
}
- /**
- * Turn a tag definition into a html string
- */
- createHtmlTag (tagDefinition) {
- const attributes = Object.keys(tagDefinition.attributes || {})
- .filter(attributeName => tagDefinition.attributes[attributeName] !== false)
- .map(attributeName => {
- if (tagDefinition.attributes[attributeName] === true) {
- return attributeName;
- }
- return attributeName + '="' + tagDefinition.attributes[attributeName] + '"';
- });
- // Backport of 3.x void tag definition
- const voidTag = tagDefinition.voidTag !== undefined ? tagDefinition.voidTag : !tagDefinition.closeTag;
- const selfClosingTag = tagDefinition.voidTag !== undefined ? tagDefinition.voidTag && this.options.xhtml : tagDefinition.selfClosingTag;
- return '<' + [tagDefinition.tagName].concat(attributes).join(' ') + (selfClosingTag ? '/' : '') + '>' +
- (tagDefinition.innerHTML || '') +
- (voidTag ? '' : '' + tagDefinition.tagName + '>');
- }
-
/**
* Helper to return the absolute template path with a fallback loader
+ * @param {string} template
+ * The path to the tempalate e.g. './index.html'
+ * @param {string} context
+ * The webpack base resolution path for relative paths e.g. process.cwd()
*/
getFullTemplatePath (template, context) {
// If the template doesn't use a loader use the lodash template loader
@@ -657,75 +914,59 @@ class HtmlWebpackPlugin {
files.sort();
return files;
}
-
- /**
- * Helper to promisify compilation.applyPluginsAsyncWaterfall that returns
- * a function that helps to merge given plugin arguments with processed ones
- */
- applyPluginsAsyncWaterfall (compilation) {
- if (compilation.hooks) {
- return (eventName, requiresResult, pluginArgs) => {
- const ccEventName = trainCaseToCamelCase(eventName);
- if (!compilation.hooks[ccEventName]) {
- compilation.errors.push(
- new Error('No hook found for ' + eventName)
- );
- }
-
- return compilation.hooks[ccEventName].promise(pluginArgs);
- };
- }
-
- // Before Webpack 4
- const promisedApplyPluginsAsyncWaterfall = function (name, init) {
- return new Promise((resolve, reject) => {
- const callback = function (err, result) {
- if (err) {
- return reject(err);
- }
- resolve(result);
- };
- compilation.applyPluginsAsyncWaterfall(name, init, callback);
- });
- };
-
- return (eventName, requiresResult, pluginArgs) => promisedApplyPluginsAsyncWaterfall(eventName, pluginArgs)
- .then(result => {
- if (requiresResult && !result) {
- compilation.warnings.push(
- new Error('Using ' + eventName + ' without returning a result is deprecated.')
- );
- }
- return _.extend(pluginArgs, result);
- });
- }
-}
-
-/**
- * Takes a string in train case and transforms it to camel case
- *
- * Example: 'hello-my-world' to 'helloMyWorld'
- *
- * @param {string} word
- */
-function trainCaseToCamelCase (word) {
- return word.replace(/-([\w])/g, (match, p1) => p1.toUpperCase());
}
/**
* The default for options.templateParameter
* Generate the template parameters
+ *
+ * Generate the template parameters for the template function
+ * @param {WebpackCompilation} compilation
+ * @param {{
+ publicPath: string,
+ js: Array,
+ css: Array,
+ manifest?: string,
+ favicon?: string
+ }} assets
+ * @param {{
+ headTags: HtmlTagObject[],
+ bodyTags: HtmlTagObject[]
+ }} assetTags
+ * @param {HtmlWebpackPluginOptions} options
+ * @returns {HtmlWebpackPluginTemplateParameter}
*/
-function templateParametersGenerator (compilation, assets, options) {
+function templateParametersGenerator (compilation, assets, assetTags, options) {
+ const xhtml = options.xhtml;
+ assetTags.headTags.toString = function () {
+ return this.map((assetTagObject) => htmlTagObjectToString(assetTagObject, xhtml)).join('');
+ };
+ assetTags.bodyTags.toString = function () {
+ return this.map((assetTagObject) => htmlTagObjectToString(assetTagObject, xhtml)).join('');
+ };
return {
compilation: compilation,
- webpack: compilation.getStats().toJson(),
webpackConfig: compilation.options,
htmlWebpackPlugin: {
+ tags: assetTags,
files: assets,
options: options
}
};
}
+// Statics:
+/**
+ * The major version number of this plugin
+ */
+HtmlWebpackPlugin.version = 4;
+
+/**
+ * A static helper to get the hooks for this plugin
+ *
+ * Usage: HtmlWebpackPlugin.getHooks(compilation).HOOK_NAME.tapAsync('YourPluginName', () => { ... });
+ */
+HtmlWebpackPlugin.getHooks = getHtmlWebpackPluginHooks;
+HtmlWebpackPlugin.createHtmlTagObject = createHtmlTagObject;
+
module.exports = HtmlWebpackPlugin;
diff --git a/lib/chunksorter.js b/lib/chunksorter.js
index 36b5c9a9..40d9909d 100644
--- a/lib/chunksorter.js
+++ b/lib/chunksorter.js
@@ -1,100 +1,12 @@
+// @ts-check
+/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */
'use strict';
-const toposort = require('toposort');
-const _ = require('lodash');
-
-/**
- Sorts dependencies between chunks by their "parents" attribute.
-
- This function sorts chunks based on their dependencies with each other.
- The parent relation between chunks as generated by Webpack for each chunk
- is used to define a directed (and hopefully acyclic) graph, which is then
- topologically sorted in order to retrieve the correct order in which
- chunks need to be embedded into HTML. A directed edge in this graph is
- describing a "is parent of" relationship from a chunk to another (distinct)
- chunk. Thus topological sorting orders chunks from bottom-layer chunks to
- highest level chunks that use the lower-level chunks.
-
- @param {Array} chunks an array of chunks as generated by the html-webpack-plugin.
- - For webpack < 4, It is assumed that each entry contains at least the properties
- "id" (containing the chunk id) and "parents" (array containing the ids of the
- parent chunks).
- - For webpack 4+ the see the chunkGroups param for parent-child relationships
-
- @param {Array} chunks an array of ChunkGroups that has a getParents method.
- Each ChunkGroup contains a list of chunks in order.
-
- @return {Array} A topologically sorted version of the input chunks
-*/
-module.exports.dependency = (chunks, options, compilation) => {
- const chunkGroups = compilation.chunkGroups;
- if (!chunks) {
- return chunks;
- }
-
- // We build a map (chunk-id -> chunk) for faster access during graph building.
- const nodeMap = {};
-
- chunks.forEach(chunk => {
- nodeMap[chunk.id] = chunk;
- });
-
- // Next, we add an edge for each parent relationship into the graph
- let edges = [];
-
- if (chunkGroups) {
- // Add an edge for each parent (parent -> child)
- edges = chunkGroups.reduce((result, chunkGroup) => result.concat(
- Array.from(chunkGroup.parentsIterable, parentGroup => [parentGroup, chunkGroup])
- ), []);
- const sortedGroups = toposort.array(chunkGroups, edges);
- // flatten chunkGroup into chunks
- const sortedChunks = sortedGroups
- .reduce((result, chunkGroup) => result.concat(chunkGroup.chunks), [])
- .map(chunk => // use the chunk from the list passed in, since it may be a filtered list
- nodeMap[chunk.id])
- .filter((chunk, index, self) => {
- // make sure exists (ie excluded chunks not in nodeMap)
- const exists = !!chunk;
- // make sure we have a unique list
- const unique = self.indexOf(chunk) === index;
- return exists && unique;
- });
- return sortedChunks;
- } else {
- // before webpack 4 there was no chunkGroups
- chunks.forEach(chunk => {
- if (chunk.parents) {
- // Add an edge for each parent (parent -> child)
- chunk.parents.forEach(parentId => {
- // webpack2 chunk.parents are chunks instead of string id(s)
- const parentChunk = _.isObject(parentId) ? parentId : nodeMap[parentId];
- // If the parent chunk does not exist (e.g. because of an excluded chunk)
- // we ignore that parent
- if (parentChunk) {
- edges.push([parentChunk, chunk]);
- }
- });
- }
- });
- // We now perform a topological sorting on the input chunks and built edges
- return toposort.array(chunks, edges);
- }
-};
-
/**
- * Sorts the chunks based on the chunk id.
- *
- * @param {Array} chunks the list of chunks to sort
- * @return {Array} The sorted list of chunks
+ * @type {{[sortmode: string] : (entryPointNames: Array, compilation, htmlWebpackPluginOptions) => Array }}
+ * This file contains different sort methods for the entry chunks names
*/
-module.exports.id = chunks => chunks.sort(function orderEntryLast (a, b) {
- if (a.entry !== b.entry) {
- return b.entry ? 1 : -1;
- } else {
- return b.id - a.id;
- }
-});
+module.exports = {};
/**
* Performs identity mapping (no-sort).
@@ -105,35 +17,24 @@ module.exports.none = chunks => chunks;
/**
* Sort manually by the chunks
- * @param {Array} chunks the chunks to sort
- * @return {Array} The sorted chunks
+ * @param {string[]} entryPointNames the chunks to sort
+ * @param {WebpackCompilation} compilation the webpack compilation
+ * @param htmlWebpackPluginOptions the plugin options
+ * @return {string[]} The sorted chunks
*/
-module.exports.manual = (chunks, options) => {
- const specifyChunks = options.chunks;
- const chunksResult = [];
- let filterResult = [];
- if (Array.isArray(specifyChunks)) {
- for (var i = 0; i < specifyChunks.length; i++) {
- filterResult = chunks.filter(chunk => {
- if (chunk.names[0] && chunk.names[0] === specifyChunks[i]) {
- return true;
- }
- return false;
- });
- filterResult.length > 0 && chunksResult.push(filterResult[0]);
- }
+module.exports.manual = (entryPointNames, compilation, htmlWebpackPluginOptions) => {
+ const chunks = htmlWebpackPluginOptions.chunks;
+ if (!Array.isArray(chunks)) {
+ return entryPointNames;
}
- return chunksResult;
+ // Remove none existing entries from
+ // htmlWebpackPluginOptions.chunks
+ return chunks.filter((entryPointName) => {
+ return compilation.entrypoints.has(entryPointName);
+ });
};
/**
* Defines the default sorter.
*/
-module.exports.auto = module.exports.id;
-
-// In webpack 2 the ids have been flipped.
-// Therefore the id sort doesn't work the same way as it did for webpack 1
-// Luckily the dependency sort is working as expected
-if (Number(require('webpack/package.json').version.split('.')[0]) > 1) {
- module.exports.auto = module.exports.dependency;
-}
+module.exports.auto = module.exports.none;
diff --git a/lib/compiler.js b/lib/compiler.js
index d5c91b6c..72285fc1 100644
--- a/lib/compiler.js
+++ b/lib/compiler.js
@@ -1,11 +1,16 @@
-/*
+// @ts-check
+/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */
+/** @typedef {import("webpack/lib/Compiler.js")} WebpackCompiler */
+/** @typedef {import("webpack/lib/Chunk.js")} WebpackChunk */
+'use strict';
+/**
+ * @file
* This file uses webpack to compile a template with a child compiler.
*
* [TEMPLATE] -> [JAVASCRIPT]
*
*/
'use strict';
-const path = require('path');
const NodeTemplatePlugin = require('webpack/lib/node/NodeTemplatePlugin');
const NodeTargetPlugin = require('webpack/lib/node/NodeTargetPlugin');
const LoaderTargetPlugin = require('webpack/lib/LoaderTargetPlugin');
@@ -13,113 +18,366 @@ const LibraryTemplatePlugin = require('webpack/lib/LibraryTemplatePlugin');
const SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin');
/**
- * Compiles the template into a nodejs factory, adds its to the compilation.assets
- * and returns a promise of the result asset object.
- *
- * @param template relative path to the template file
- * @param context path context
- * @param outputFilename the file name
- * @param compilation The webpack compilation object
- *
- * Returns an object:
- * {
- * hash: {String} - Base64 hash of the file
- * content: {String} - Javascript executable code of the template
- * }
- *
+ * The HtmlWebpackChildCompiler is a helper to allow resusing one childCompiler
+ * for multile HtmlWebpackPlugin instances to improve the compilation performance.
*/
-module.exports.compileTemplate = function compileTemplate (template, context, outputFilename, compilation) {
- // The entry file is just an empty helper as the dynamic template
- // require is added in "loader.js"
- const outputOptions = {
- filename: outputFilename,
- publicPath: compilation.outputOptions.publicPath
- };
- // Store the result of the parent compilation before we start the child compilation
- const assetsBeforeCompilation = Object.assign({}, compilation.assets[outputOptions.filename]);
- // Create an additional child compiler which takes the template
- // and turns it into an Node.JS html factory.
- // This allows us to use loaders during the compilation
- const compilerName = getCompilerName(context, outputFilename);
- const childCompiler = compilation.createChildCompiler(compilerName, outputOptions);
- childCompiler.context = context;
- new NodeTemplatePlugin(outputOptions).apply(childCompiler);
- new NodeTargetPlugin().apply(childCompiler);
- new LibraryTemplatePlugin('HTML_WEBPACK_PLUGIN_RESULT', 'var').apply(childCompiler);
-
- // Using undefined as name for the SingleEntryPlugin causes a unexpected output as described in
- // https://github.com/jantimon/html-webpack-plugin/issues/895
- // Using a string as a name for the SingleEntryPlugin causes problems with HMR as described in
- // https://github.com/jantimon/html-webpack-plugin/issues/900
- // Until the HMR issue is fixed we keep the ugly output:
- new SingleEntryPlugin(this.context, template, undefined).apply(childCompiler);
-
- new LoaderTargetPlugin('node').apply(childCompiler);
-
- // Fix for "Uncaught TypeError: __webpack_require__(...) is not a function"
- // Hot module replacement requires that every child compiler has its own
- // cache. @see https://github.com/ampedandwired/html-webpack-plugin/pull/179
-
- // Backwards compatible version of: childCompiler.hooks.compilation
- (childCompiler.hooks ? childCompiler.hooks.compilation.tap.bind(childCompiler.hooks.compilation, 'HtmlWebpackPlugin') : childCompiler.plugin.bind(childCompiler, 'compilation'))(compilation => {
- if (compilation.cache) {
- if (!compilation.cache[compilerName]) {
- compilation.cache[compilerName] = {};
- }
- compilation.cache = compilation.cache[compilerName];
+class HtmlWebpackChildCompiler {
+ constructor () {
+ /**
+ * @type {string[]} templateIds
+ * The template array will allow us to keep track which input generated which output
+ */
+ this.templates = [];
+ /**
+ * @type {Promise<{[templatePath: string]: { content: string, hash: string, entry: WebpackChunk }}>}
+ */
+ this.compilationPromise; // eslint-disable-line
+ /**
+ * @type {number}
+ */
+ this.compilationStartedTimestamp; // eslint-disable-line
+ /**
+ * @type {number}
+ */
+ this.compilationEndedTimestamp; // eslint-disable-line
+ /**
+ * All file dependencies of the child compiler
+ * @type {string[]}
+ */
+ this.fileDependencies = [];
+ }
+
+ /**
+ * Add a templatePath to the child compiler
+ * The given template will be compiled by `compileTemplates`
+ * @param {string} template - The webpack path to the template e.g. `'!!html-loader!index.html'`
+ * @returns {boolean} true if the template is new
+ */
+ addTemplate (template) {
+ const templateId = this.templates.indexOf(template);
+ // Don't add the template to the compiler if a similar template was already added
+ if (templateId !== -1) {
+ return false;
}
- });
+ // A child compiler can compile only once
+ // throw an error if a new template is added after the compilation started
+ if (this.isCompiling()) {
+ throw new Error('New templates can only be added before `compileTemplates` was called.');
+ }
+ // Add the template to the childCompiler
+ this.templates.push(template);
+ // Mark the cache invalid
+ return true;
+ }
- // Compile and return a promise
- return new Promise((resolve, reject) => {
- childCompiler.runAsChild((err, entries, childCompilation) => {
- // Resolve / reject the promise
- if (childCompilation && childCompilation.errors && childCompilation.errors.length) {
- const errorDetails = childCompilation.errors.map(error => error.message + (error.error ? ':\n' + error.error : '')).join('\n');
- reject(new Error('Child compilation failed:\n' + errorDetails));
- } else if (err) {
- reject(err);
- } else {
- // Replace [hash] placeholders in filename
- // In webpack 4 the plugin interface changed, so check for available fns
- const outputName = compilation.mainTemplate.getAssetPath
- ? compilation.mainTemplate.hooks.assetPath.call(outputOptions.filename, {
- hash: childCompilation.hash,
- chunk: entries[0]
- })
- : compilation.mainTemplate.applyPluginsWaterfall(
- 'asset-path',
- outputOptions.filename,
- {
- hash: childCompilation.hash,
- chunk: entries[0]
- });
-
- // Restore the parent compilation to the state like it
- // was before the child compilation
- compilation.assets[outputName] = assetsBeforeCompilation[outputName];
- if (assetsBeforeCompilation[outputName] === undefined) {
- // If it wasn't there - delete it
- delete compilation.assets[outputName];
+ /**
+ * Returns true if the childCompiler is currently compiling
+ * @retuns {boolean}
+ */
+ isCompiling () {
+ return !this.didCompile() && this.compilationStartedTimestamp !== undefined;
+ }
+
+ /**
+ * Returns true if the childCOmpiler is done compiling
+ */
+ didCompile () {
+ return this.compilationEndedTimestamp !== undefined;
+ }
+
+ /**
+ * This function will start the template compilation
+ * once it is started no more templates can be added
+ *
+ * @param {WebpackCompilation} mainCompilation
+ * @returns {Promise<{[templatePath: string]: { content: string, hash: string, entry: WebpackChunk }}>}
+ */
+ compileTemplates (mainCompilation) {
+ // To prevent multiple compilations for the same template
+ // the compilation is cached in a promise.
+ // If it already exists return
+ if (this.compilationPromise) {
+ return this.compilationPromise;
+ }
+
+ // The entry file is just an empty helper as the dynamic template
+ // require is added in "loader.js"
+ const outputOptions = {
+ filename: '__child-[name]',
+ publicPath: mainCompilation.outputOptions.publicPath
+ };
+ const compilerName = 'HtmlWebpackCompiler';
+ // Create an additional child compiler which takes the template
+ // and turns it into an Node.JS html factory.
+ // This allows us to use loaders during the compilation
+ const childCompiler = mainCompilation.createChildCompiler(compilerName, outputOptions);
+ // The file path context which webpack uses to resolve all relative files to
+ childCompiler.context = mainCompilation.compiler.context;
+ // Compile the template to nodejs javascript
+ new NodeTemplatePlugin(outputOptions).apply(childCompiler);
+ new NodeTargetPlugin().apply(childCompiler);
+ new LibraryTemplatePlugin('HTML_WEBPACK_PLUGIN_RESULT', 'var').apply(childCompiler);
+ new LoaderTargetPlugin('node').apply(childCompiler);
+
+ // Fix for "Uncaught TypeError: __webpack_require__(...) is not a function"
+ // Hot module replacement requires that every child compiler has its own
+ // cache. @see https://github.com/ampedandwired/html-webpack-plugin/pull/179
+ childCompiler.hooks.compilation.tap('HtmlWebpackPlugin', compilation => {
+ if (compilation.cache) {
+ if (!compilation.cache[compilerName]) {
+ compilation.cache[compilerName] = {};
}
- resolve({
- // Hash of the template entry point
- hash: entries[0].hash,
- // Output name
- outputName: outputName,
- // Compiled code
- content: childCompilation.assets[outputName].source()
- });
+ compilation.cache = compilation.cache[compilerName];
}
});
+
+ // Add all templates
+ this.templates.forEach((template, index) => {
+ new SingleEntryPlugin(childCompiler.context, template, `HtmlWebpackPlugin_${index}`).apply(childCompiler);
+ });
+
+ this.compilationStartedTimestamp = new Date().getTime();
+ this.compilationPromise = new Promise((resolve, reject) => {
+ childCompiler.runAsChild((err, entries, childCompilation) => {
+ // Extract templates
+ const compiledTemplates = entries
+ ? extractHelperFilesFromCompilation(mainCompilation, childCompilation, outputOptions.filename, entries)
+ : [];
+ // Extract file dependencies
+ if (entries) {
+ this.fileDependencies = extractFileDependenciesFilesFromCompilation(entries);
+ }
+ // Reject the promise if the childCompilation contains error
+ if (childCompilation && childCompilation.errors && childCompilation.errors.length) {
+ const errorDetails = childCompilation.errors.map(error => error.message + (error.error ? ':\n' + error.error : '')).join('\n');
+ reject(new Error('Child compilation failed:\n' + errorDetails));
+ return;
+ }
+ // Reject if the error object contains errors
+ if (err) {
+ reject(err);
+ return;
+ }
+ /**
+ * @type {{[templatePath: string]: { content: string, hash: string, entry: WebpackChunk }}}
+ */
+ const result = {};
+ compiledTemplates.forEach((templateSource, entryIndex) => {
+ // The compiledTemplates are generated from the entries added in
+ // the addTemplate function.
+ // Therefore the array index of this.templates should be the as entryIndex.
+ result[this.templates[entryIndex]] = {
+ content: templateSource,
+ hash: childCompilation.hash,
+ entry: entries[entryIndex]
+ };
+ });
+ this.compilationEndedTimestamp = new Date().getTime();
+ resolve(result);
+ });
+ });
+
+ return this.compilationPromise;
+ }
+}
+
+/**
+ * The webpack child compilation will create files as a side effect.
+ * This function will extract them and clean them up so they won't be written to disk.
+ *
+ * Returns the source code of the compiled templates as string
+ *
+ * @returns Array
+ */
+function extractHelperFilesFromCompilation (mainCompilation, childCompilation, filename, childEntryChunks) {
+ const helperAssetNames = childEntryChunks.map((entryChunk, index) => {
+ return mainCompilation.mainTemplate.hooks.assetPath.call(filename, {
+ hash: childCompilation.hash,
+ chunk: entryChunk,
+ name: `HtmlWebpackPlugin_${index}`
+ });
});
-};
+
+ helperAssetNames.forEach((helperFileName) => {
+ delete mainCompilation.assets[helperFileName];
+ });
+
+ const helperContents = helperAssetNames.map((helperFileName) => {
+ return childCompilation.assets[helperFileName].source();
+ });
+
+ return helperContents;
+}
+
+/**
+ * Return all file dependencies from the given set of entries.
+ * @param {WebpackChunk[]} entries
+ * @returns {string[]}
+ */
+function extractFileDependenciesFilesFromCompilation (entries) {
+ const fileDependencies = new Map();
+ entries.forEach((entry) => {
+ entry.entryModule.buildInfo.fileDependencies.forEach((fileDependency) => {
+ fileDependencies.set(fileDependency, true);
+ });
+ });
+ return Array.from(fileDependencies.keys());
+}
+
+/**
+ * @type {WeakMap}}
+ */
+const childCompilerCache = new WeakMap();
+
+/**
+ * Get child compiler from cache or a new child compiler for the given mainCompilation
+ *
+ * @param {WebpackCompiler} mainCompiler
+ */
+function getChildCompiler (mainCompiler) {
+ const cachedChildCompiler = childCompilerCache.get(mainCompiler);
+ if (cachedChildCompiler) {
+ return cachedChildCompiler;
+ }
+ const newCompiler = new HtmlWebpackChildCompiler();
+ childCompilerCache.set(mainCompiler, newCompiler);
+ return newCompiler;
+}
+
+/**
+ * Remove the childCompiler from the cache
+ *
+ * @param {WebpackCompiler} mainCompiler
+ */
+function clearCache (mainCompiler) {
+ const childCompiler = getChildCompiler(mainCompiler);
+ // If this childCompiler was already used
+ // remove the entire childCompiler from the cache
+ if (childCompiler.isCompiling() || childCompiler.didCompile()) {
+ childCompilerCache.delete(mainCompiler);
+ }
+}
+
+/**
+ * Register a template for the current main compiler
+ * @param {WebpackCompiler} mainCompiler
+ * @param {string} templatePath
+ */
+function addTemplateToCompiler (mainCompiler, templatePath) {
+ const childCompiler = getChildCompiler(mainCompiler);
+ const isNew = childCompiler.addTemplate(templatePath);
+ if (isNew) {
+ clearCache(mainCompiler);
+ }
+}
+
+/**
+ * Starts the compilation for all templates.
+ * This has to be called once all templates where added.
+ *
+ * If this function is called multiple times it will use a cache inside
+ * the childCompiler
+ *
+ * @param {string} templatePath
+ * @param {string} outputFilename
+ * @param {WebpackCompilation} mainCompilation
+ */
+function compileTemplate (templatePath, outputFilename, mainCompilation) {
+ const childCompiler = getChildCompiler(mainCompilation.compiler);
+ return childCompiler.compileTemplates(mainCompilation).then((compiledTemplates) => {
+ if (!compiledTemplates[templatePath]) console.log(Object.keys(compiledTemplates), templatePath);
+ const compiledTemplate = compiledTemplates[templatePath];
+ // Replace [hash] placeholders in filename
+ const outputName = mainCompilation.mainTemplate.hooks.assetPath.call(outputFilename, {
+ hash: compiledTemplate.hash,
+ chunk: compiledTemplate.entry
+ });
+ return {
+ // Hash of the template entry point
+ hash: compiledTemplate.hash,
+ // Output name
+ outputName: outputName,
+ // Compiled code
+ content: compiledTemplate.content
+ };
+ });
+}
+
+/**
+ * Return all file dependencies of the last child compilation
+ *
+ * @param {WebpackCompiler} compiler
+ * @returns {Array}
+ */
+function getFileDependencies (compiler) {
+ const childCompiler = getChildCompiler(compiler);
+ return childCompiler.fileDependencies;
+}
+
+/**
+ * @type {WeakMap>}}
+ */
+const hasOutdatedCompilationDependenciesMap = new WeakMap();
+/**
+ * Returns `true` if the file dependencies of the current childCompiler
+ * for the given mainCompilation are outdated.
+ *
+ * Uses the `hasOutdatedCompilationDependenciesMap` cache if possible.
+ *
+ * @param {WebpackCompilation} mainCompilation
+ * @returns {boolean}
+ */
+function hasOutDatedTemplateCache (mainCompilation) {
+ const childCompiler = getChildCompiler(mainCompilation.compiler);
+ /**
+ * @type {WeakMap|undefined}
+ */
+ let hasOutdatedChildCompilerDependenciesMap = hasOutdatedCompilationDependenciesMap.get(mainCompilation);
+ // Create map for childCompiler if none exist
+ if (!hasOutdatedChildCompilerDependenciesMap) {
+ hasOutdatedChildCompilerDependenciesMap = new WeakMap();
+ hasOutdatedCompilationDependenciesMap.set(mainCompilation, hasOutdatedChildCompilerDependenciesMap);
+ }
+ // Try to get the `checkChildCompilerCache` result from cache
+ let isOutdated = hasOutdatedChildCompilerDependenciesMap.get(childCompiler);
+ if (isOutdated !== undefined) {
+ return isOutdated;
+ }
+ // If `checkChildCompilerCache` has never been called for the given
+ // `mainCompilation` and `childCompiler` combination call it:
+ isOutdated = isChildCompilerCacheOutdated(mainCompilation, childCompiler);
+ hasOutdatedChildCompilerDependenciesMap.set(childCompiler, isOutdated);
+ return isOutdated;
+}
/**
- * Returns the child compiler name e.g. 'html-webpack-plugin for "index.html"'
+ * Returns `true` if the file dependencies of the given childCompiler are outdated.
+ *
+ * @param {WebpackCompilation} mainCompilation
+ * @param {HtmlWebpackChildCompiler} childCompiler
+ * @returns {boolean}
*/
-function getCompilerName (context, filename) {
- const absolutePath = path.resolve(context, filename);
- const relativePath = path.relative(context, absolutePath);
- return 'html-webpack-plugin for "' + (absolutePath.length < relativePath.length ? absolutePath : relativePath) + '"';
+function isChildCompilerCacheOutdated (mainCompilation, childCompiler) {
+ // If the compilation was never run there is no invalid cache
+ if (!childCompiler.compilationStartedTimestamp) {
+ return false;
+ }
+ // Check if any dependent file was changed after the last compilation
+ const fileTimestamps = mainCompilation.fileTimestamps;
+ const isCacheOutOfDate = childCompiler.fileDependencies.some((fileDependency) => {
+ const timestamp = fileTimestamps.get(fileDependency);
+ // If the timestamp is not known the file is new
+ // If the timestamp is larger then the file has changed
+ // Otherwise the file is still the same
+ return !timestamp || timestamp > childCompiler.compilationStartedTimestamp;
+ });
+ return isCacheOutOfDate;
}
+
+module.exports = {
+ addTemplateToCompiler,
+ compileTemplate,
+ hasOutDatedTemplateCache,
+ clearCache,
+ getFileDependencies
+};
diff --git a/lib/errors.js b/lib/errors.js
index 2b946dad..c6cae4c8 100644
--- a/lib/errors.js
+++ b/lib/errors.js
@@ -1,8 +1,9 @@
+// @ts-nocheck
'use strict';
const PrettyError = require('pretty-error');
const prettyError = new PrettyError();
prettyError.withoutColors();
-prettyError.skipPackage(['html-plugin-evaluation']);
+prettyError.skipPackage('html-plugin-evaluation');
prettyError.skipNodeFiles();
prettyError.skip(function (traceLine) {
return traceLine.path === 'html-plugin-evaluation';
diff --git a/lib/hooks.js b/lib/hooks.js
new file mode 100644
index 00000000..a3c5c837
--- /dev/null
+++ b/lib/hooks.js
@@ -0,0 +1,116 @@
+// @ts-check
+/* eslint-disable */
+///
+/* eslint-enable */
+'use strict';
+/**
+ * This file provides access to all public htmlWebpackPlugin hooks
+ */
+
+/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */
+/** @typedef {import("../index.js")} HtmlWebpackPlugin */
+
+const AsyncSeriesWaterfallHook = require('tapable').AsyncSeriesWaterfallHook;
+
+// The following typedef holds the API definition for all available hooks
+// to allow easier access when using ts-check or typescript inside plugins
+/** @typedef {{
+
+ beforeAssetTagGeneration:
+ AsyncSeriesWaterfallHook<{
+ assets: {
+ publicPath: string,
+ js: Array,
+ css: Array,
+ favicon?: string | undefined,
+ manifest?: string | undefined
+ },
+ outputName: string,
+ plugin: HtmlWebpackPlugin
+ }>,
+
+ alterAssetTags:
+ AsyncSeriesWaterfallHook<{
+ assetTags: {
+ scripts: Array,
+ styles: Array,
+ meta: Array,
+ },
+ outputName: string,
+ plugin: HtmlWebpackPlugin
+ }>,
+
+ alterAssetTagGroups:
+ AsyncSeriesWaterfallHook<{
+ headTags: Array,
+ bodyTags: Array,
+ outputName: string,
+ plugin: HtmlWebpackPlugin
+ }>,
+
+ afterTemplateExecution:
+ AsyncSeriesWaterfallHook<{
+ html: string,
+ headTags: Array,
+ bodyTags: Array,
+ outputName: string,
+ plugin: HtmlWebpackPlugin,
+ }>,
+
+ beforeEmit:
+ AsyncSeriesWaterfallHook<{
+ html: string,
+ outputName: string,
+ plugin: HtmlWebpackPlugin,
+ }>,
+
+ afterEmit:
+ AsyncSeriesWaterfallHook<{
+ outputName: string,
+ plugin: HtmlWebpackPlugin
+ }>,
+
+ }} HtmlWebpackPluginHooks
+ */
+
+/**
+ * @type {WeakMap}}
+ */
+const htmlWebpackPluginHooksMap = new WeakMap();
+
+/**
+ * Returns all public hooks of the html webpack plugin for the given compilation
+ *
+ * @param {WebpackCompilation} compilation
+ * @returns {HtmlWebpackPluginHooks}
+ */
+function getHtmlWebpackPluginHooks (compilation) {
+ let hooks = htmlWebpackPluginHooksMap.get(compilation);
+ // Setup the hooks only once
+ if (hooks === undefined) {
+ hooks = createHtmlWebpackPluginHooks();
+ htmlWebpackPluginHooksMap.set(compilation, hooks);
+ }
+ return hooks;
+}
+
+/**
+ * Add hooks to the webpack compilation object to allow foreign plugins to
+ * extend the HtmlWebpackPlugin
+ *
+ * @returns {HtmlWebpackPluginHooks}
+ */
+function createHtmlWebpackPluginHooks () {
+ return {
+ beforeAssetTagGeneration: new AsyncSeriesWaterfallHook(['pluginArgs']),
+ alterAssetTags: new AsyncSeriesWaterfallHook(['pluginArgs']),
+ alterAssetTagGroups: new AsyncSeriesWaterfallHook(['pluginArgs']),
+ afterTemplateExecution: new AsyncSeriesWaterfallHook(['pluginArgs']),
+ beforeEmit: new AsyncSeriesWaterfallHook(['pluginArgs']),
+ afterEmit: new AsyncSeriesWaterfallHook(['pluginArgs'])
+ };
+}
+
+module.exports = {
+ getHtmlWebpackPluginHooks
+};
diff --git a/lib/html-tags.js b/lib/html-tags.js
new file mode 100644
index 00000000..cdad0d4a
--- /dev/null
+++ b/lib/html-tags.js
@@ -0,0 +1,73 @@
+// @ts-check
+/* eslint-disable */
+///
+/* eslint-enable */
+/**
+ * @file
+ * This file provides to helper to create html as a object repesentation as
+ * thoses objects are easier to modify than pure string representations
+ *
+ * Usage:
+ * ```
+ * const element = createHtmlTagObject('h1', {class: 'demo'}, 'Hello World');
+ * const html = htmlTagObjectToString(element);
+ * console.log(html) // -> Hello World
+ * ```
+ */
+
+/**
+ * All html tag elements which must not contain innerHTML
+ * @see https://www.w3.org/TR/html5/syntax.html#void-elements
+ */
+const voidTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
+
+/**
+ * Turn a tag definition into a html string
+ * @param {HtmlTagObject} tagDefinition
+ * A tag element according to the htmlWebpackPlugin object notation
+ *
+ * @param xhtml {boolean}
+ * Wether the generated html should add closing slashes to be xhtml compliant
+ */
+function htmlTagObjectToString (tagDefinition, xhtml) {
+ const attributes = Object.keys(tagDefinition.attributes || {})
+ .filter(function (attributeName) {
+ return tagDefinition.attributes[attributeName] !== false;
+ })
+ .map(function (attributeName) {
+ if (tagDefinition.attributes[attributeName] === true) {
+ return xhtml ? attributeName + '="' + attributeName + '"' : attributeName;
+ }
+ return attributeName + '="' + tagDefinition.attributes[attributeName] + '"';
+ });
+ return '<' + [tagDefinition.tagName].concat(attributes).join(' ') + (tagDefinition.voidTag && xhtml ? '/' : '') + '>' +
+ (tagDefinition.innerHTML || '') +
+ (tagDefinition.voidTag ? '' : '' + tagDefinition.tagName + '>');
+}
+
+/**
+ * Static helper to create a tag object to be get injected into the dom
+ *
+ * @param {string} tagName
+ * the name of the tage e.g. 'div'
+ *
+ * @param {{[attributeName: string]: string|boolean}} [attributes]
+ * tag attributes e.g. `{ 'class': 'example', disabled: true }`
+ *
+ * @param {string} [innerHTML]
+ *
+ * @returns {HtmlTagObject}
+ */
+function createHtmlTagObject (tagName, attributes, innerHTML) {
+ return {
+ tagName: tagName,
+ voidTag: voidTags.indexOf(tagName) !== -1,
+ attributes: attributes || {},
+ innerHTML: innerHTML
+ };
+}
+
+module.exports = {
+ createHtmlTagObject: createHtmlTagObject,
+ htmlTagObjectToString: htmlTagObjectToString
+};
diff --git a/lib/loader.js b/lib/loader.js
index e3836123..01c52cd9 100644
--- a/lib/loader.js
+++ b/lib/loader.js
@@ -1,31 +1,29 @@
/* This loader renders the template with underscore if no other loader was found */
+// @ts-nocheck
'use strict';
-
const _ = require('lodash');
const loaderUtils = require('loader-utils');
module.exports = function (source) {
- if (this.cacheable) {
- this.cacheable();
- }
+ // Get templating options
+ const options = this.query !== '' ? loaderUtils.getOptions(this) : {};
+ const force = options.force || false;
+
const allLoadersButThisOne = this.loaders.filter(function (loader) {
- // Loader API changed from `loader.module` to `loader.normal` in Webpack 2.
- return (loader.module || loader.normal) !== module.exports;
+ return loader.normal !== module.exports;
});
- // This loader shouldn't kick in if there is any other loader
- if (allLoadersButThisOne.length > 0) {
+ // This loader shouldn't kick in if there is any other loader (unless it's explicitly enforced)
+ if (allLoadersButThisOne.length > 0 && !force) {
return source;
}
- // Skip .js files
- if (/\.js$/.test(this.resourcePath)) {
+ // Skip .js files (unless it's explicitly enforced)
+ if (/\.js$/.test(this.resourcePath) && !force) {
return source;
}
// The following part renders the template with lodash as aminimalistic loader
//
- // Get templating options
- const options = this.query !== '' ? loaderUtils.parseQuery(this.query) : {};
- const template = _.template(source, _.defaults(options, { variable: 'data' }));
+ const template = _.template(source, _.defaults(options, { interpolate: /<%=([\s\S]+?)%>/g, variable: 'data' }));
// Require !!lodash - using !! will disable all loaders (e.g. babel)
return 'var _ = require(' + loaderUtils.stringifyRequest(this, '!!' + require.resolve('lodash')) + ');' +
'module.exports = function (templateParams) { with(templateParams) {' +
diff --git a/migration.md b/migration.md
index 0938a292..d7b19082 100644
--- a/migration.md
+++ b/migration.md
@@ -98,9 +98,9 @@ This configuration allows you to require partial html from your main `index.html
## Custom template engines
-Maybe you prefer jade or blueimp over underscore - or your project is using jade for the front end part.
+Maybe you prefer pug or blueimp over underscore - or your project is using pug for the front end part.
With 2.x you can use the webpack loaders either once only for the template as in the following example
-where we use jade (requires the [jade-loader](https://github.com/webpack/jade-loader)):
+where we use pug (requires the [pug-loader](https://github.com/webpack/pug-loader)):
```js
var HtmlWebpackPlugin = require('html-webpack-plugin');
@@ -109,31 +109,31 @@ module.exports = {
// ...
plugins: [
new HtmlWebpackPlugin({
- template: 'jade!template.jade'
+ template: 'pug!template.pug'
})
]
};
```
-or by configuring webpack to handle all `.jade` files:
+or by configuring webpack to handle all `.pug` files:
```js
module.exports = {
// ...
module: {
loaders: [
- { test: /\.jade$/, loader: 'jade' }
+ { test: /\.pug$/, loader: 'pug' }
]
},
plugins: [
new HtmlWebpackPlugin({
- template: 'template.jade'
+ template: 'template.pug'
})
]
};
```
-Please note that if you specify the loader and use 'jade!template.jade' webpack will try to apply the jade loader twice and fail.
+Please note that if you specify the loader and use 'pug!template.pug' webpack will try to apply the pug loader twice and fail.
## Isomorph apps
@@ -164,8 +164,8 @@ Using loaders inside a template.js
```js
// This function has to return a string or promised string:
module.exports = function(templateParams) {
- // Play around with the arguments and then use the webpack jade loader to load the jade:
- return require('./template.jade')({assets: templateParams.htmlWebpackPlugin.files});
+ // Play around with the arguments and then use the webpack pug loader to load the pug:
+ return require('./template.pug')({assets: templateParams.htmlWebpackPlugin.files});
};
```
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 26852b0b..00000000
--- a/package-lock.json
+++ /dev/null
@@ -1,7318 +0,0 @@
-{
- "name": "html-webpack-plugin",
- "version": "3.2.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "JSONStream": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
- "dev": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "dev": true
- },
- "acorn": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
- "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=",
- "dev": true
- },
- "acorn-globals": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
- "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
- "dev": true,
- "requires": {
- "acorn": "2.7.0"
- }
- },
- "acorn-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
- "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
- "dev": true,
- "requires": {
- "acorn": "3.3.0"
- },
- "dependencies": {
- "acorn": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
- "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
- "dev": true
- }
- }
- },
- "acorn-to-esprima": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/acorn-to-esprima/-/acorn-to-esprima-2.0.8.tgz",
- "integrity": "sha1-AD8MZC65ITL0F9NwjxStqCrfLrE=",
- "dev": true
- },
- "ajv": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
- "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
- "dev": true,
- "requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
- }
- },
- "ajv-keywords": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
- "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=",
- "dev": true
- },
- "align-text": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
- "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2",
- "longest": "1.0.1",
- "repeat-string": "1.6.1"
- }
- },
- "alphanum-sort": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
- "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
- "dev": true
- },
- "amdefine": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
- "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
- "dev": true
- },
- "ansi-escapes": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
- "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
- "dev": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "anymatch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
- "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
- "dev": true,
- "requires": {
- "micromatch": "2.3.11",
- "normalize-path": "2.1.1"
- }
- },
- "appcache-webpack-plugin": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/appcache-webpack-plugin/-/appcache-webpack-plugin-1.3.0.tgz",
- "integrity": "sha1-9it9Qt7HNe06YUKOIUgA3kouin4=",
- "dev": true
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "1.0.3"
- }
- },
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "1.1.0"
- }
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
- "dev": true
- },
- "array-ify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
- "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
- "dev": true
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
- "requires": {
- "array-uniq": "1.0.3"
- }
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
- "asap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz",
- "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=",
- "dev": true
- },
- "assert": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
- "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
- "dev": true,
- "requires": {
- "util": "0.10.3"
- }
- },
- "ast-types": {
- "version": "0.9.6",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
- "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
- "dev": true
- },
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "dev": true
- },
- "async-each": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
- "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
- "dev": true
- },
- "autoprefixer": {
- "version": "6.7.7",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
- "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
- "dev": true,
- "requires": {
- "browserslist": "1.7.7",
- "caniuse-db": "1.0.30000810",
- "normalize-range": "0.1.2",
- "num2fraction": "1.2.2",
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
- }
- },
- "babel-code-frame": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "esutils": "2.0.2",
- "js-tokens": "3.0.2"
- }
- },
- "babel-messages": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
- "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0"
- }
- },
- "babel-runtime": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
- "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
- "dev": true,
- "requires": {
- "core-js": "2.5.3",
- "regenerator-runtime": "0.11.1"
- }
- },
- "babel-traverse": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
- "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
- "dev": true,
- "requires": {
- "babel-code-frame": "6.26.0",
- "babel-messages": "6.23.0",
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0",
- "babylon": "6.18.0",
- "debug": "2.6.9",
- "globals": "9.18.0",
- "invariant": "2.2.3",
- "lodash": "4.17.5"
- }
- },
- "babel-types": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
- "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0",
- "esutils": "2.0.2",
- "lodash": "4.17.5",
- "to-fast-properties": "1.0.3"
- }
- },
- "babylon": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
- "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "base64-js": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz",
- "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==",
- "dev": true
- },
- "big.js": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
- "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
- },
- "binary-extensions": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
- "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
- "dev": true
- },
- "bluebird": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
- "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
- },
- "boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
- "requires": {
- "expand-range": "1.8.2",
- "preserve": "0.2.0",
- "repeat-element": "1.1.2"
- }
- },
- "browserify-aes": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz",
- "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3"
- }
- },
- "browserify-zlib": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
- "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
- "dev": true,
- "requires": {
- "pako": "0.2.9"
- }
- },
- "browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true,
- "requires": {
- "caniuse-db": "1.0.30000810",
- "electron-to-chromium": "1.3.34"
- }
- },
- "buffer": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
- "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
- "dev": true,
- "requires": {
- "base64-js": "1.2.3",
- "ieee754": "1.1.8",
- "isarray": "1.0.0"
- }
- },
- "buffer-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
- "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
- "dev": true
- },
- "builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
- "dev": true
- },
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
- "dev": true
- },
- "caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
- "dev": true,
- "requires": {
- "callsites": "0.2.0"
- }
- },
- "callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
- "dev": true
- },
- "camel-case": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
- "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
- "requires": {
- "no-case": "2.3.2",
- "upper-case": "1.1.3"
- }
- },
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "dev": true,
- "requires": {
- "camelcase": "2.1.1",
- "map-obj": "1.0.1"
- }
- },
- "caniuse-api": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
- "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
- "dev": true,
- "requires": {
- "browserslist": "1.7.7",
- "caniuse-db": "1.0.30000810",
- "lodash.memoize": "4.1.2",
- "lodash.uniq": "4.5.0"
- }
- },
- "caniuse-db": {
- "version": "1.0.30000810",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000810.tgz",
- "integrity": "sha1-vSWDDEHvq2Qzmi44H0lnc0PIRQk=",
- "dev": true
- },
- "center-align": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
- "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
- "dev": true,
- "requires": {
- "align-text": "0.1.4",
- "lazy-cache": "1.0.4"
- }
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- }
- },
- "character-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz",
- "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY=",
- "dev": true
- },
- "chokidar": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
- "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
- "dev": true,
- "requires": {
- "anymatch": "1.3.2",
- "async-each": "1.0.1",
- "fsevents": "1.1.3",
- "glob-parent": "2.0.0",
- "inherits": "2.0.3",
- "is-binary-path": "1.0.1",
- "is-glob": "2.0.1",
- "path-is-absolute": "1.0.1",
- "readdirp": "2.1.0"
- }
- },
- "circular-json": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
- "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
- "dev": true
- },
- "clap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
- "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
- "dev": true,
- "requires": {
- "chalk": "1.1.3"
- }
- },
- "clean-css": {
- "version": "4.1.9",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz",
- "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=",
- "requires": {
- "source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- }
- }
- },
- "cli-cursor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
- "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
- "dev": true,
- "requires": {
- "restore-cursor": "1.0.1"
- }
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
- "dev": true
- },
- "cliui": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
- "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
- "dev": true,
- "requires": {
- "center-align": "0.1.3",
- "right-align": "0.1.3",
- "wordwrap": "0.0.2"
- },
- "dependencies": {
- "wordwrap": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
- "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
- "dev": true
- }
- }
- },
- "clone": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
- "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
- "dev": true
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
- "dev": true
- },
- "coa": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
- "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
- "dev": true,
- "requires": {
- "q": "1.5.1"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "coffee-script": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz",
- "integrity": "sha1-YplqhheAx15tUGnROCJyO3NAS/w=",
- "dev": true,
- "requires": {
- "mkdirp": "0.3.5"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
- "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=",
- "dev": true
- }
- }
- },
- "color": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
- "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
- "dev": true,
- "requires": {
- "clone": "1.0.3",
- "color-convert": "1.9.1",
- "color-string": "0.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
- "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "color-string": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
- "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "colormin": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
- "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
- "dev": true,
- "requires": {
- "color": "0.11.4",
- "css-color-names": "0.0.4",
- "has": "1.0.1"
- }
- },
- "colors": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
- "dev": true
- },
- "commander": {
- "version": "2.14.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
- "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
- },
- "compare-func": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
- "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
- "dev": true,
- "requires": {
- "array-ify": "1.0.0",
- "dot-prop": "3.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "concat-stream": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
- "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.4",
- "typedarray": "0.0.6"
- }
- },
- "config-chain": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz",
- "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=",
- "dev": true,
- "requires": {
- "ini": "1.3.5",
- "proto-list": "1.2.4"
- }
- },
- "console-browserify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
- "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
- "dev": true,
- "requires": {
- "date-now": "0.1.4"
- }
- },
- "constantinople": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz",
- "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=",
- "dev": true,
- "requires": {
- "acorn": "2.7.0"
- }
- },
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
- },
- "conventional-changelog": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.15.tgz",
- "integrity": "sha512-nBHfdoIfm78Bh/8KAEKVjAfr6jT6+uAoayj8EpEIEpjXBwoB74FlC7hUDwbxbAA/WKZout8SuqnpPH0cX4/aqw==",
- "dev": true,
- "requires": {
- "conventional-changelog-angular": "1.6.4",
- "conventional-changelog-atom": "0.2.2",
- "conventional-changelog-codemirror": "0.3.2",
- "conventional-changelog-core": "2.0.3",
- "conventional-changelog-ember": "0.3.4",
- "conventional-changelog-eslint": "1.0.2",
- "conventional-changelog-express": "0.3.2",
- "conventional-changelog-jquery": "0.1.0",
- "conventional-changelog-jscs": "0.1.0",
- "conventional-changelog-jshint": "0.3.2",
- "conventional-changelog-preset-loader": "1.1.4"
- }
- },
- "conventional-changelog-angular": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.4.tgz",
- "integrity": "sha512-CGtgqRBYOYYwP/FGBZ+NydolVv0+9bFcQZYMqw8YPKms1n6QlKguaqO0bfBLRChWZjDXjTI3Spd/bNineVtAqA==",
- "dev": true,
- "requires": {
- "compare-func": "1.3.2",
- "q": "1.5.1"
- }
- },
- "conventional-changelog-atom": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.2.tgz",
- "integrity": "sha512-NhQcqCMfHTIlnglX4lMskqU6NC9rSqbT7razVHZ/Fq21iEHkrWx5dhjTonRB5BAAUSowBURCczqUILZ612xFrQ==",
- "dev": true,
- "requires": {
- "q": "1.5.1"
- }
- },
- "conventional-changelog-codemirror": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.2.tgz",
- "integrity": "sha512-z/ZmaSSigCw7Te6ozncLww6DmwCYGXvSbi3S7kkVvPKPRYGkKdWJI6Nmyx3AAqzzt6W420sMVOSJGX6dyEQDKw==",
- "dev": true,
- "requires": {
- "q": "1.5.1"
- }
- },
- "conventional-changelog-core": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.3.tgz",
- "integrity": "sha512-yLnwThgG5M7k4ZuG87sWXQBEQPTijcB4TpUrSzJcH6Jk7vkZR4ej7GJgY5TqKKiVwALWzyAGd6GenzGbNZvYnw==",
- "dev": true,
- "requires": {
- "conventional-changelog-writer": "3.0.2",
- "conventional-commits-parser": "2.1.3",
- "dateformat": "1.0.12",
- "get-pkg-repo": "1.4.0",
- "git-raw-commits": "1.3.2",
- "git-remote-origin-url": "2.0.0",
- "git-semver-tags": "1.3.2",
- "lodash": "4.17.5",
- "normalize-package-data": "2.4.0",
- "q": "1.5.1",
- "read-pkg": "1.1.0",
- "read-pkg-up": "1.0.1",
- "through2": "2.0.3"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
- "dev": true
- }
- }
- },
- "conventional-changelog-ember": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.4.tgz",
- "integrity": "sha512-PfwI9tvVJFn95of/g4mMBHtXZDPVNuYzi+hDyl9ZZe6/7WyUc90gj+cEgg+8gcrZwUFaZpliWavTYp6tfbBg1A==",
- "dev": true,
- "requires": {
- "q": "1.5.1"
- }
- },
- "conventional-changelog-eslint": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.2.tgz",
- "integrity": "sha512-WDs2etoKFNRv3rFgbg3LqPbVWn89OL8bsRbU1NNAnpPVmWcQEGkg/Tny9BjJl++JjxmWqYY+xtPPdnvd63WIYw==",
- "dev": true,
- "requires": {
- "q": "1.5.1"
- }
- },
- "conventional-changelog-express": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.2.tgz",
- "integrity": "sha512-QQU7t/Ec5bgRSoJL5gHmTfsRCrJOZHfVkbX2NNWl+EU91nAT28HgOAlD6ymH5EYMP/skpVkIwQyT9myVjxcJew==",
- "dev": true,
- "requires": {
- "q": "1.5.1"
- }
- },
- "conventional-changelog-jquery": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
- "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
- "dev": true,
- "requires": {
- "q": "1.5.1"
- }
- },
- "conventional-changelog-jscs": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
- "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
- "dev": true,
- "requires": {
- "q": "1.5.1"
- }
- },
- "conventional-changelog-jshint": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.2.tgz",
- "integrity": "sha512-b3cx1n6QyE5czpZTAEBFZxPj0aQ3vxjmdNrP+E83b+FBxh9cYZQrUXeC5rnIRvSj8rLkYAJJ07oG8PyevAxhtw==",
- "dev": true,
- "requires": {
- "compare-func": "1.3.2",
- "q": "1.5.1"
- }
- },
- "conventional-changelog-preset-loader": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.4.tgz",
- "integrity": "sha512-KY9sGPKnKlW542FpNN4++GkijXnND69/MgMa6EDibnyYXO6gV/NPwQwDTH6MOVVIjhspMgEM69H3yFVHo5Ud5g==",
- "dev": true
- },
- "conventional-changelog-writer": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.2.tgz",
- "integrity": "sha512-eYXmYxT1IUuzzfpQuFA2/t3ex+7rFBbJchDIWyDTAs7OFkPBAfAs3EG04cDkEAG6Tn3wnwrtDKVZL9sMfA3kIw==",
- "dev": true,
- "requires": {
- "compare-func": "1.3.2",
- "conventional-commits-filter": "1.1.3",
- "dateformat": "1.0.12",
- "handlebars": "4.0.11",
- "json-stringify-safe": "5.0.1",
- "lodash": "4.17.5",
- "meow": "3.7.0",
- "semver": "5.5.0",
- "split": "1.0.1",
- "through2": "2.0.3"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
- "dev": true
- }
- }
- },
- "conventional-commits-filter": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.3.tgz",
- "integrity": "sha512-kwGGg0xCHR51YIVjtoCTNgx9I1qEMETerTdSK4XsH2OxNLigDn6XKXnPMFZ+gfoUxaqbnpFSJqs4jYVpuJ1XAg==",
- "dev": true,
- "requires": {
- "is-subset": "0.1.1",
- "modify-values": "1.0.0"
- }
- },
- "conventional-commits-parser": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.3.tgz",
- "integrity": "sha512-j5nXna/snJtrzFtPbDm+9R5UsjteJkXn+cG1kGEi4+4e25U57CZBB6DiUdxOCnM9LOIHeLDBF61e9MtjPsZthw==",
- "dev": true,
- "requires": {
- "JSONStream": "1.3.2",
- "is-text-path": "1.0.1",
- "lodash": "4.17.5",
- "meow": "3.7.0",
- "split2": "2.2.0",
- "through2": "2.0.3",
- "trim-off-newlines": "1.0.1"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
- "dev": true
- }
- }
- },
- "conventional-recommended-bump": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz",
- "integrity": "sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==",
- "dev": true,
- "requires": {
- "concat-stream": "1.6.0",
- "conventional-commits-filter": "1.1.3",
- "conventional-commits-parser": "2.1.3",
- "git-raw-commits": "1.3.2",
- "git-semver-tags": "1.3.2",
- "meow": "3.7.0",
- "object-assign": "4.1.1"
- }
- },
- "core-js": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
- "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "4.1.1",
- "shebang-command": "1.2.0",
- "which": "1.3.0"
- }
- },
- "crypto-browserify": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz",
- "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=",
- "dev": true,
- "requires": {
- "browserify-aes": "0.4.0",
- "pbkdf2-compat": "2.0.1",
- "ripemd160": "0.2.0",
- "sha.js": "2.2.6"
- }
- },
- "css": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz",
- "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=",
- "dev": true,
- "requires": {
- "css-parse": "1.0.4",
- "css-stringify": "1.0.5"
- }
- },
- "css-color-names": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
- "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
- "dev": true
- },
- "css-loader": {
- "version": "0.26.4",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.26.4.tgz",
- "integrity": "sha1-th6eMNuUMD5v/IkvEOzQmtAlof0=",
- "dev": true,
- "requires": {
- "babel-code-frame": "6.26.0",
- "css-selector-tokenizer": "0.7.0",
- "cssnano": "3.10.0",
- "loader-utils": "1.1.0",
- "lodash.camelcase": "4.3.0",
- "object-assign": "4.1.1",
- "postcss": "5.2.18",
- "postcss-modules-extract-imports": "1.1.0",
- "postcss-modules-local-by-default": "1.2.0",
- "postcss-modules-scope": "1.1.0",
- "postcss-modules-values": "1.3.0",
- "source-list-map": "0.1.8"
- },
- "dependencies": {
- "loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
- "dev": true,
- "requires": {
- "big.js": "3.2.0",
- "emojis-list": "2.1.0",
- "json5": "0.5.1"
- }
- }
- }
- },
- "css-parse": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz",
- "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90=",
- "dev": true
- },
- "css-select": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
- "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
- "requires": {
- "boolbase": "1.0.0",
- "css-what": "2.1.0",
- "domutils": "1.5.1",
- "nth-check": "1.0.1"
- }
- },
- "css-selector-tokenizer": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
- "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
- "dev": true,
- "requires": {
- "cssesc": "0.1.0",
- "fastparse": "1.1.1",
- "regexpu-core": "1.0.0"
- }
- },
- "css-stringify": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz",
- "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=",
- "dev": true
- },
- "css-what": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
- "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0="
- },
- "cssesc": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
- "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=",
- "dev": true
- },
- "cssnano": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
- "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
- "dev": true,
- "requires": {
- "autoprefixer": "6.7.7",
- "decamelize": "1.2.0",
- "defined": "1.0.0",
- "has": "1.0.1",
- "object-assign": "4.1.1",
- "postcss": "5.2.18",
- "postcss-calc": "5.3.1",
- "postcss-colormin": "2.2.2",
- "postcss-convert-values": "2.6.1",
- "postcss-discard-comments": "2.0.4",
- "postcss-discard-duplicates": "2.1.0",
- "postcss-discard-empty": "2.1.0",
- "postcss-discard-overridden": "0.1.1",
- "postcss-discard-unused": "2.2.3",
- "postcss-filter-plugins": "2.0.2",
- "postcss-merge-idents": "2.1.7",
- "postcss-merge-longhand": "2.0.2",
- "postcss-merge-rules": "2.1.2",
- "postcss-minify-font-values": "1.0.5",
- "postcss-minify-gradients": "1.0.5",
- "postcss-minify-params": "1.2.2",
- "postcss-minify-selectors": "2.1.1",
- "postcss-normalize-charset": "1.1.1",
- "postcss-normalize-url": "3.0.8",
- "postcss-ordered-values": "2.2.3",
- "postcss-reduce-idents": "2.4.0",
- "postcss-reduce-initial": "1.0.1",
- "postcss-reduce-transforms": "1.0.4",
- "postcss-svgo": "2.1.6",
- "postcss-unique-selectors": "2.0.2",
- "postcss-value-parser": "3.3.0",
- "postcss-zindex": "2.2.0"
- }
- },
- "csso": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
- "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
- "dev": true,
- "requires": {
- "clap": "1.2.3",
- "source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "dev": true,
- "requires": {
- "array-find-index": "1.0.2"
- }
- },
- "d": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
- "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
- "dev": true,
- "requires": {
- "es5-ext": "0.10.39"
- }
- },
- "dargs": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
- "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
- "dev": true,
- "requires": {
- "number-is-nan": "1.0.1"
- }
- },
- "date-now": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
- "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
- "dev": true
- },
- "dateformat": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
- "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
- "dev": true,
- "requires": {
- "get-stdin": "4.0.1",
- "meow": "3.7.0"
- }
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "debug-log": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz",
- "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=",
- "dev": true
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
- "dev": true,
- "requires": {
- "clone": "1.0.3"
- }
- },
- "defined": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
- "dev": true
- },
- "deglob": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz",
- "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=",
- "dev": true,
- "requires": {
- "find-root": "1.1.0",
- "glob": "7.1.2",
- "ignore": "3.3.7",
- "pkg-config": "1.1.1",
- "run-parallel": "1.1.7",
- "uniq": "1.0.1",
- "xtend": "4.0.1"
- }
- },
- "del": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
- "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
- "dev": true,
- "requires": {
- "globby": "5.0.0",
- "is-path-cwd": "1.0.0",
- "is-path-in-cwd": "1.0.0",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "rimraf": "2.6.2"
- }
- },
- "diff": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz",
- "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=",
- "dev": true
- },
- "dir-compare": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-1.3.0.tgz",
- "integrity": "sha1-KME8axpYAeeFCnuPqaYJa/aG8EA=",
- "dev": true,
- "requires": {
- "bluebird": "3.4.1",
- "buffer-equal": "1.0.0",
- "colors": "1.0.3",
- "commander": "2.9.0",
- "minimatch": "3.0.2"
- },
- "dependencies": {
- "bluebird": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.1.tgz",
- "integrity": "sha1-tzHd9I4t077awudeEhWhG8uR+gc=",
- "dev": true
- },
- "colors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
- "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
- "dev": true
- },
- "commander": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
- "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
- "dev": true,
- "requires": {
- "graceful-readlink": "1.0.1"
- }
- },
- "minimatch": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.2.tgz",
- "integrity": "sha1-DzmKcwDqRB6cNIyD2Yq4ydv5xAo=",
- "dev": true,
- "requires": {
- "brace-expansion": "1.1.11"
- }
- }
- }
- },
- "disparity": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/disparity/-/disparity-2.0.0.tgz",
- "integrity": "sha1-V92stHMkrl9Y0swNqIbbTOnutxg=",
- "dev": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "diff": "1.4.0"
- }
- },
- "doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
- "dev": true,
- "requires": {
- "esutils": "2.0.2",
- "isarray": "1.0.0"
- }
- },
- "dom-converter": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz",
- "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=",
- "requires": {
- "utila": "0.3.3"
- },
- "dependencies": {
- "utila": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz",
- "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY="
- }
- }
- },
- "dom-serializer": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
- "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
- "requires": {
- "domelementtype": "1.1.3",
- "entities": "1.1.1"
- },
- "dependencies": {
- "domelementtype": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
- "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
- }
- }
- },
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true
- },
- "domelementtype": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
- "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
- },
- "domhandler": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz",
- "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
- "requires": {
- "domelementtype": "1.3.0"
- }
- },
- "domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
- "requires": {
- "dom-serializer": "0.1.0",
- "domelementtype": "1.3.0"
- }
- },
- "dot-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
- "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
- "dev": true,
- "requires": {
- "is-obj": "1.0.1"
- }
- },
- "dotgitignore": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-1.0.3.tgz",
- "integrity": "sha512-eu5XjSstm0WXQsARgo6kPjkINYZlOUW+z/KtAAIBjHa5mUpMPrxJytbPIndWz6GubBuuuH5ljtVcXKnVnH5q8w==",
- "dev": true,
- "requires": {
- "find-up": "2.1.0",
- "minimatch": "3.0.4"
- },
- "dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "2.0.0"
- }
- }
- }
- },
- "editorconfig": {
- "version": "0.13.3",
- "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz",
- "integrity": "sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==",
- "dev": true,
- "requires": {
- "bluebird": "3.5.1",
- "commander": "2.14.1",
- "lru-cache": "3.2.0",
- "semver": "5.5.0",
- "sigmund": "1.0.1"
- },
- "dependencies": {
- "lru-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz",
- "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=",
- "dev": true,
- "requires": {
- "pseudomap": "1.0.2"
- }
- }
- }
- },
- "electron-to-chromium": {
- "version": "1.3.34",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz",
- "integrity": "sha1-2TSY9AORuwwWpgPYJBuZUUBBV+0=",
- "dev": true
- },
- "emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
- },
- "enhanced-resolve": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz",
- "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "memory-fs": "0.2.0",
- "tapable": "0.1.10"
- },
- "dependencies": {
- "memory-fs": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz",
- "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=",
- "dev": true
- },
- "tapable": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
- "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=",
- "dev": true
- }
- }
- },
- "entities": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
- "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA="
- },
- "errno": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
- "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
- "dev": true,
- "requires": {
- "prr": "1.0.1"
- }
- },
- "error-ex": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
- "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
- "dev": true,
- "requires": {
- "is-arrayish": "0.2.1"
- }
- },
- "es5-ext": {
- "version": "0.10.39",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.39.tgz",
- "integrity": "sha512-AlaXZhPHl0po/uxMx1tyrlt1O86M6D5iVaDH8UgLfgek4kXTX6vzsRfJQWC2Ku+aG8pkw1XWzh9eTkwfVrsD5g==",
- "dev": true,
- "requires": {
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1"
- }
- },
- "es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
- "dev": true,
- "requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39",
- "es6-symbol": "3.1.1"
- }
- },
- "es6-map": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
- "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
- "dev": true,
- "requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39",
- "es6-iterator": "2.0.3",
- "es6-set": "0.1.5",
- "es6-symbol": "3.1.1",
- "event-emitter": "0.3.5"
- }
- },
- "es6-promise": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
- "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
- "dev": true
- },
- "es6-set": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
- "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
- "dev": true,
- "requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39",
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1",
- "event-emitter": "0.3.5"
- }
- },
- "es6-symbol": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
- "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
- "dev": true,
- "requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39"
- }
- },
- "es6-templates": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz",
- "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=",
- "dev": true,
- "requires": {
- "recast": "0.11.23",
- "through": "2.3.8"
- }
- },
- "es6-weak-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
- "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
- "dev": true,
- "requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39",
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "escope": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
- "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
- "dev": true,
- "requires": {
- "es6-map": "0.1.5",
- "es6-weak-map": "2.0.2",
- "esrecurse": "4.2.1",
- "estraverse": "4.2.0"
- }
- },
- "esformatter": {
- "version": "0.9.6",
- "resolved": "https://registry.npmjs.org/esformatter/-/esformatter-0.9.6.tgz",
- "integrity": "sha1-Ngiux4KN7uPNP0bhGSrrRyaKlX8=",
- "dev": true,
- "requires": {
- "acorn-to-esprima": "2.0.8",
- "babel-traverse": "6.26.0",
- "debug": "0.7.4",
- "disparity": "2.0.0",
- "esformatter-parser": "1.0.0",
- "glob": "5.0.15",
- "minimist": "1.2.0",
- "mout": "1.1.0",
- "npm-run": "2.0.0",
- "resolve": "1.5.0",
- "rocambole": "0.7.0",
- "rocambole-indent": "2.0.4",
- "rocambole-linebreak": "1.0.2",
- "rocambole-node": "1.0.0",
- "rocambole-token": "1.2.1",
- "rocambole-whitespace": "1.0.0",
- "stdin": "0.0.1",
- "strip-json-comments": "0.1.3",
- "supports-color": "1.3.1",
- "user-home": "2.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz",
- "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=",
- "dev": true
- },
- "glob": {
- "version": "5.0.15",
- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
- "dev": true,
- "requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "strip-json-comments": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz",
- "integrity": "sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ=",
- "dev": true
- },
- "supports-color": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz",
- "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0=",
- "dev": true
- }
- }
- },
- "esformatter-eol-last": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/esformatter-eol-last/-/esformatter-eol-last-1.0.0.tgz",
- "integrity": "sha1-RaeP9GIrHUnkT1a0mQV2amMpDAc=",
- "dev": true,
- "requires": {
- "string.prototype.endswith": "0.2.0"
- }
- },
- "esformatter-ignore": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/esformatter-ignore/-/esformatter-ignore-0.1.3.tgz",
- "integrity": "sha1-BNO4db+knd4ATMWN9va7w8BWfx4=",
- "dev": true
- },
- "esformatter-jsx": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/esformatter-jsx/-/esformatter-jsx-7.4.1.tgz",
- "integrity": "sha1-siCa4JCPQTp0exIFcny/S6QklgI=",
- "dev": true,
- "requires": {
- "babylon": "6.14.1",
- "esformatter-ignore": "0.1.3",
- "extend": "3.0.0",
- "js-beautify": "1.6.4"
- },
- "dependencies": {
- "babylon": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.14.1.tgz",
- "integrity": "sha1-lWJ1+rcnU62bNDXXr+WPi/CimBU=",
- "dev": true
- }
- }
- },
- "esformatter-literal-notation": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/esformatter-literal-notation/-/esformatter-literal-notation-1.0.1.tgz",
- "integrity": "sha1-cQ57QgF1/j9+WvrVu60ykQOELi8=",
- "dev": true,
- "requires": {
- "rocambole": "0.3.6",
- "rocambole-token": "1.2.1"
- },
- "dependencies": {
- "esprima": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
- "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
- "dev": true
- },
- "rocambole": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/rocambole/-/rocambole-0.3.6.tgz",
- "integrity": "sha1-Teu/WUMUS8e2AG2Vvo+swLdDUqc=",
- "dev": true,
- "requires": {
- "esprima": "1.0.4"
- }
- }
- }
- },
- "esformatter-parser": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/esformatter-parser/-/esformatter-parser-1.0.0.tgz",
- "integrity": "sha1-CFQHLQSHU57TnK442KVDLBfsEdM=",
- "dev": true,
- "requires": {
- "acorn-to-esprima": "2.0.8",
- "babel-traverse": "6.26.0",
- "babylon": "6.18.0",
- "rocambole": "0.7.0"
- }
- },
- "esformatter-quotes": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/esformatter-quotes/-/esformatter-quotes-1.1.0.tgz",
- "integrity": "sha1-4ixsRFx/MGBB2BybnlH8psv6yoI=",
- "dev": true
- },
- "esformatter-remove-trailing-commas": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/esformatter-remove-trailing-commas/-/esformatter-remove-trailing-commas-1.0.1.tgz",
- "integrity": "sha1-k5diTB+qmA/E7Mfl6YE+tPK1gqc=",
- "dev": true,
- "requires": {
- "rocambole-token": "1.2.1"
- }
- },
- "esformatter-semicolon-first": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/esformatter-semicolon-first/-/esformatter-semicolon-first-1.2.0.tgz",
- "integrity": "sha1-47US0dTgcxDqvKv1cnfqfIpW4kI=",
- "dev": true,
- "requires": {
- "esformatter-parser": "1.0.0",
- "rocambole": "0.7.0",
- "rocambole-linebreak": "1.0.2",
- "rocambole-token": "1.2.1"
- }
- },
- "esformatter-spaced-lined-comment": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/esformatter-spaced-lined-comment/-/esformatter-spaced-lined-comment-2.0.1.tgz",
- "integrity": "sha1-3F80B/k8KV4eVkRr00RWDaXm3Kw=",
- "dev": true
- },
- "eslint": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.13.1.tgz",
- "integrity": "sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "concat-stream": "1.6.0",
- "debug": "2.6.9",
- "doctrine": "1.5.0",
- "es6-map": "0.1.5",
- "escope": "3.6.0",
- "espree": "3.5.3",
- "estraverse": "4.2.0",
- "esutils": "2.0.2",
- "file-entry-cache": "1.3.1",
- "glob": "7.1.2",
- "globals": "9.18.0",
- "ignore": "3.3.7",
- "imurmurhash": "0.1.4",
- "inquirer": "0.12.0",
- "is-my-json-valid": "2.17.2",
- "is-resolvable": "1.1.0",
- "js-yaml": "3.7.0",
- "json-stable-stringify": "1.0.1",
- "levn": "0.3.0",
- "lodash": "4.17.5",
- "mkdirp": "0.5.1",
- "optionator": "0.8.2",
- "path-is-absolute": "1.0.1",
- "path-is-inside": "1.0.2",
- "pluralize": "1.2.1",
- "progress": "1.1.8",
- "require-uncached": "1.0.3",
- "shelljs": "0.6.1",
- "strip-json-comments": "1.0.4",
- "table": "3.8.3",
- "text-table": "0.2.0",
- "user-home": "2.0.0"
- }
- },
- "eslint-config-semistandard": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/eslint-config-semistandard/-/eslint-config-semistandard-6.0.2.tgz",
- "integrity": "sha1-JXuWM30qjy6yDiDl8OgjUBShkNQ=",
- "dev": true
- },
- "eslint-config-standard": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz",
- "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=",
- "dev": true
- },
- "eslint-config-standard-jsx": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.0.tgz",
- "integrity": "sha1-yp/Vk2EOavVaKtP0MACS0ejA3vU=",
- "dev": true
- },
- "eslint-plugin-promise": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz",
- "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=",
- "dev": true
- },
- "eslint-plugin-react": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz",
- "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=",
- "dev": true,
- "requires": {
- "doctrine": "1.5.0",
- "jsx-ast-utils": "1.4.1"
- }
- },
- "eslint-plugin-standard": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz",
- "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=",
- "dev": true
- },
- "espree": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz",
- "integrity": "sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==",
- "dev": true,
- "requires": {
- "acorn": "5.4.1",
- "acorn-jsx": "3.0.1"
- },
- "dependencies": {
- "acorn": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz",
- "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==",
- "dev": true
- }
- }
- },
- "esprima": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
- "dev": true
- },
- "esrecurse": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
- "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
- "dev": true,
- "requires": {
- "estraverse": "4.2.0"
- }
- },
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- },
- "estraverse-fb": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/estraverse-fb/-/estraverse-fb-1.3.2.tgz",
- "integrity": "sha1-0yOky15awzHOoDNBOpJT4WQ+B8Q=",
- "dev": true
- },
- "esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
- "dev": true
- },
- "event-emitter": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
- "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
- "dev": true,
- "requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.39"
- }
- },
- "events": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
- "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
- "dev": true
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "dev": true,
- "requires": {
- "cross-spawn": "5.1.0",
- "get-stream": "3.0.0",
- "is-stream": "1.1.0",
- "npm-run-path": "2.0.2",
- "p-finally": "1.0.0",
- "signal-exit": "3.0.2",
- "strip-eof": "1.0.0"
- }
- },
- "exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
- "dev": true
- },
- "exit-hook": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
- "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
- "dev": true
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "0.1.1"
- }
- },
- "expand-range": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
- "dev": true,
- "requires": {
- "fill-range": "2.2.3"
- }
- },
- "extend": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
- "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=",
- "dev": true
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
- "requires": {
- "is-extglob": "1.0.0"
- }
- },
- "extract-text-webpack-plugin": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz",
- "integrity": "sha1-yVvzy6rEnclvHcbgclSfu2VMzSw=",
- "dev": true,
- "requires": {
- "async": "1.5.2",
- "loader-utils": "0.2.17",
- "webpack-sources": "0.1.5"
- }
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "fastparse": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz",
- "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=",
- "dev": true
- },
- "figures": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "1.0.5",
- "object-assign": "4.1.1"
- }
- },
- "file-entry-cache": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz",
- "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=",
- "dev": true,
- "requires": {
- "flat-cache": "1.3.0",
- "object-assign": "4.1.1"
- }
- },
- "file-loader": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.9.0.tgz",
- "integrity": "sha1-HS2t3UJM5tGwfP4/eXMb7TYXq0I=",
- "dev": true,
- "requires": {
- "loader-utils": "0.2.17"
- }
- },
- "filename-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
- "dev": true
- },
- "fill-range": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
- "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
- "dev": true,
- "requires": {
- "is-number": "2.1.0",
- "isobject": "2.1.0",
- "randomatic": "1.1.7",
- "repeat-element": "1.1.2",
- "repeat-string": "1.6.1"
- }
- },
- "find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
- "dev": true
- },
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "2.1.0",
- "pinkie-promise": "2.0.1"
- }
- },
- "findit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz",
- "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=",
- "dev": true
- },
- "flat-cache": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
- "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
- "dev": true,
- "requires": {
- "circular-json": "0.3.3",
- "del": "2.2.2",
- "graceful-fs": "4.1.11",
- "write": "0.2.1"
- }
- },
- "flatten": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
- "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=",
- "dev": true
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
- "dev": true,
- "requires": {
- "for-in": "1.0.2"
- }
- },
- "fs-access": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
- "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
- "dev": true,
- "requires": {
- "null-check": "1.0.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
- "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
- "dev": true,
- "optional": true,
- "requires": {
- "nan": "2.9.2",
- "node-pre-gyp": "0.6.39"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ajv": {
- "version": "4.11.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
- }
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "aproba": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "1.0.0",
- "readable-stream": "2.2.9"
- }
- },
- "asn1": {
- "version": "0.2.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "assert-plus": {
- "version": "0.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "asynckit": {
- "version": "0.4.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aws-sign2": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aws4": {
- "version": "1.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "balanced-match": {
- "version": "0.4.2",
- "bundled": true,
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "tweetnacl": "0.14.5"
- }
- },
- "block-stream": {
- "version": "0.0.9",
- "bundled": true,
- "dev": true,
- "requires": {
- "inherits": "2.0.3"
- }
- },
- "boom": {
- "version": "2.10.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "hoek": "2.16.3"
- }
- },
- "brace-expansion": {
- "version": "1.1.7",
- "bundled": true,
- "dev": true,
- "requires": {
- "balanced-match": "0.4.2",
- "concat-map": "0.0.1"
- }
- },
- "buffer-shims": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "co": {
- "version": "4.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "delayed-stream": "1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "cryptiles": {
- "version": "2.0.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "boom": "2.10.1"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "debug": {
- "version": "2.6.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.4.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ecc-jsbn": {
- "version": "0.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "jsbn": "0.1.1"
- }
- },
- "extend": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "extsprintf": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "form-data": {
- "version": "2.1.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.15"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "fstream": {
- "version": "1.0.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "inherits": "2.0.3",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.1"
- }
- },
- "fstream-ignore": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fstream": "1.0.11",
- "inherits": "2.0.3",
- "minimatch": "3.0.4"
- }
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "1.1.1",
- "console-control-strings": "1.1.0",
- "has-unicode": "2.0.1",
- "object-assign": "4.1.1",
- "signal-exit": "3.0.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wide-align": "1.1.2"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "bundled": true,
- "dev": true
- },
- "har-schema": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "har-validator": {
- "version": "4.2.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ajv": "4.11.8",
- "har-schema": "1.0.5"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "hawk": {
- "version": "3.1.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "boom": "2.10.1",
- "cryptiles": "2.0.5",
- "hoek": "2.16.3",
- "sntp": "1.0.9"
- }
- },
- "hoek": {
- "version": "2.16.3",
- "bundled": true,
- "dev": true
- },
- "http-signature": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "0.2.0",
- "jsprim": "1.4.0",
- "sshpk": "1.13.0"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true
- },
- "ini": {
- "version": "1.3.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "number-is-nan": "1.0.1"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "jodid25519": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "jsbn": "0.1.1"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "json-schema": {
- "version": "0.2.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "json-stable-stringify": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "jsonify": "0.0.0"
- }
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "jsonify": {
- "version": "0.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "jsprim": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.0.2",
- "json-schema": "0.2.3",
- "verror": "1.3.6"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "mime-db": {
- "version": "1.27.0",
- "bundled": true,
- "dev": true
- },
- "mime-types": {
- "version": "2.1.15",
- "bundled": true,
- "dev": true,
- "requires": {
- "mime-db": "1.27.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "brace-expansion": "1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "node-pre-gyp": {
- "version": "0.6.39",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "1.0.2",
- "hawk": "3.1.3",
- "mkdirp": "0.5.1",
- "nopt": "4.0.1",
- "npmlog": "4.1.0",
- "rc": "1.2.1",
- "request": "2.81.0",
- "rimraf": "2.6.1",
- "semver": "5.3.0",
- "tar": "2.2.1",
- "tar-pack": "3.4.0"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1.1.0",
- "osenv": "0.1.4"
- }
- },
- "npmlog": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "1.1.4",
- "console-control-strings": "1.1.0",
- "gauge": "2.7.4",
- "set-blocking": "2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "oauth-sign": {
- "version": "0.8.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "wrappy": "1.0.2"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "1.0.2",
- "os-tmpdir": "1.0.2"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "performance-now": {
- "version": "0.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "1.0.7",
- "bundled": true,
- "dev": true
- },
- "punycode": {
- "version": "1.4.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "qs": {
- "version": "6.4.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "0.4.2",
- "ini": "1.3.4",
- "minimist": "1.2.0",
- "strip-json-comments": "2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.2.9",
- "bundled": true,
- "dev": true,
- "requires": {
- "buffer-shims": "1.0.0",
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "string_decoder": "1.0.1",
- "util-deprecate": "1.0.2"
- }
- },
- "request": {
- "version": "2.81.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aws-sign2": "0.6.0",
- "aws4": "1.6.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.5",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.1.4",
- "har-validator": "4.2.1",
- "hawk": "3.1.3",
- "http-signature": "1.1.1",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.15",
- "oauth-sign": "0.8.2",
- "performance-now": "0.2.0",
- "qs": "6.4.0",
- "safe-buffer": "5.0.1",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.2",
- "tunnel-agent": "0.6.0",
- "uuid": "3.0.1"
- }
- },
- "rimraf": {
- "version": "2.6.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "glob": "7.1.2"
- }
- },
- "safe-buffer": {
- "version": "5.0.1",
- "bundled": true,
- "dev": true
- },
- "semver": {
- "version": "5.3.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sntp": {
- "version": "1.0.9",
- "bundled": true,
- "dev": true,
- "requires": {
- "hoek": "2.16.3"
- }
- },
- "sshpk": {
- "version": "1.13.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.7",
- "jodid25519": "1.0.2",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- }
- },
- "string_decoder": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "5.0.1"
- }
- },
- "stringstream": {
- "version": "0.0.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "2.2.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "block-stream": "0.0.9",
- "fstream": "1.0.11",
- "inherits": "2.0.3"
- }
- },
- "tar-pack": {
- "version": "3.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "2.6.8",
- "fstream": "1.0.11",
- "fstream-ignore": "1.0.5",
- "once": "1.4.0",
- "readable-stream": "2.2.9",
- "rimraf": "2.6.1",
- "tar": "2.2.1",
- "uid-number": "0.0.6"
- }
- },
- "tough-cookie": {
- "version": "2.3.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "punycode": "1.4.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "uid-number": {
- "version": "0.0.6",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "uuid": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "verror": {
- "version": "1.3.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "extsprintf": "1.0.2"
- }
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "1.0.2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- }
- }
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "gaze": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
- "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
- "dev": true,
- "requires": {
- "globule": "0.1.0"
- }
- },
- "generate-function": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
- "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
- "dev": true
- },
- "generate-object-property": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
- "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
- "dev": true,
- "requires": {
- "is-property": "1.0.2"
- }
- },
- "get-caller-file": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
- "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
- "dev": true
- },
- "get-pkg-repo": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
- "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
- "dev": true,
- "requires": {
- "hosted-git-info": "2.5.0",
- "meow": "3.7.0",
- "normalize-package-data": "2.4.0",
- "parse-github-repo-url": "1.4.1",
- "through2": "2.0.3"
- }
- },
- "get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
- "dev": true
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- },
- "git-raw-commits": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.2.tgz",
- "integrity": "sha512-ojMbErvEIPXaqNNwomSp/DYLhhbU+BEcCOyPZ26U8VNaQjBRN9lZ7E3vfjIkTA8JLWYc5zsSxuVXut6bczKhrg==",
- "dev": true,
- "requires": {
- "dargs": "4.1.0",
- "lodash.template": "4.4.0",
- "meow": "3.7.0",
- "split2": "2.2.0",
- "through2": "2.0.3"
- }
- },
- "git-remote-origin-url": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
- "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
- "dev": true,
- "requires": {
- "gitconfiglocal": "1.0.0",
- "pify": "2.3.0"
- }
- },
- "git-semver-tags": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.2.tgz",
- "integrity": "sha512-CXQJ4GdxkUya1YQaEKGcYIJ9RiuX4RTWnRIhiMlTItl8czRix4akE0CpoUSLmljuxEnUM/pFpd2FFwo+nV0SPA==",
- "dev": true,
- "requires": {
- "meow": "3.7.0",
- "semver": "5.5.0"
- }
- },
- "gitconfiglocal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
- "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
- "dev": true,
- "requires": {
- "ini": "1.3.5"
- }
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "requires": {
- "glob-parent": "2.0.0",
- "is-glob": "2.0.1"
- }
- },
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "2.0.1"
- }
- },
- "globals": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
- "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
- "dev": true
- },
- "globby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
- "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
- "dev": true,
- "requires": {
- "array-union": "1.0.2",
- "arrify": "1.0.1",
- "glob": "7.1.2",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
- }
- },
- "globule": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
- "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
- "dev": true,
- "requires": {
- "glob": "3.1.21",
- "lodash": "1.0.2",
- "minimatch": "0.2.14"
- },
- "dependencies": {
- "glob": {
- "version": "3.1.21",
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
- "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
- "dev": true,
- "requires": {
- "graceful-fs": "1.2.3",
- "inherits": "1.0.2",
- "minimatch": "0.2.14"
- }
- },
- "graceful-fs": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
- "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
- "dev": true
- },
- "inherits": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
- "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
- "dev": true
- },
- "lodash": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
- "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
- "dev": true
- },
- "lru-cache": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
- "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
- "dev": true
- },
- "minimatch": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
- "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
- "dev": true,
- "requires": {
- "lru-cache": "2.7.3",
- "sigmund": "1.0.1"
- }
- }
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
- "dev": true
- },
- "graceful-readlink": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
- "dev": true
- },
- "growl": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz",
- "integrity": "sha1-3i1mE20ALhErpw8/EMMc98NQsto=",
- "dev": true
- },
- "grunt-exec": {
- "version": "0.4.7",
- "resolved": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-0.4.7.tgz",
- "integrity": "sha1-QAUf+k6wyWV+BTuV6I1ENSocLCU=",
- "dev": true
- },
- "handlebars": {
- "version": "4.0.11",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
- "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
- "dev": true,
- "requires": {
- "async": "1.5.2",
- "optimist": "0.6.1",
- "source-map": "0.4.4",
- "uglify-js": "2.8.29"
- }
- },
- "has": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
- "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
- "dev": true,
- "requires": {
- "function-bind": "1.1.1"
- }
- },
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
- },
- "he": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
- "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0="
- },
- "hosted-git-info": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
- "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
- "dev": true
- },
- "html-comment-regex": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
- "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=",
- "dev": true
- },
- "html-loader": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.4.5.tgz",
- "integrity": "sha1-X7zYfNY6XEmn/OL+VvQl4Fcpxow=",
- "dev": true,
- "requires": {
- "es6-templates": "0.2.3",
- "fastparse": "1.1.1",
- "html-minifier": "3.5.9",
- "loader-utils": "1.1.0",
- "object-assign": "4.1.1"
- },
- "dependencies": {
- "loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
- "dev": true,
- "requires": {
- "big.js": "3.2.0",
- "emojis-list": "2.1.0",
- "json5": "0.5.1"
- }
- }
- }
- },
- "html-minifier": {
- "version": "3.5.9",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.9.tgz",
- "integrity": "sha512-EZqO91XJwkj8BeLx9C12sKB/AHoTANaZax39vEOP9f/X/9jgJ3r1O2+neabuHqpz5kJO71TapP9JrtCY39su1A==",
- "requires": {
- "camel-case": "3.0.0",
- "clean-css": "4.1.9",
- "commander": "2.14.1",
- "he": "1.1.1",
- "ncname": "1.0.0",
- "param-case": "2.1.1",
- "relateurl": "0.2.7",
- "uglify-js": "3.3.12"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "uglify-js": {
- "version": "3.3.12",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.12.tgz",
- "integrity": "sha512-4jxrTXlV0HaXTsNILfXW0eey7Qo8qHYM6ih5ZNh45erDWU2GHmKDmekwBTskDb12h+kdd2DBvdzqVb47YzNmTA==",
- "requires": {
- "commander": "2.14.1",
- "source-map": "0.6.1"
- }
- }
- }
- },
- "htmlparser2": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
- "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
- "requires": {
- "domelementtype": "1.3.0",
- "domhandler": "2.1.0",
- "domutils": "1.1.6",
- "readable-stream": "1.0.34"
- },
- "dependencies": {
- "domutils": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz",
- "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=",
- "requires": {
- "domelementtype": "1.3.0"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- }
- }
- },
- "https-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
- "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
- "dev": true
- },
- "icss-replace-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
- "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
- "dev": true
- },
- "ieee754": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
- "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
- "dev": true
- },
- "ignore": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
- "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
- "dev": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dev": true,
- "requires": {
- "repeating": "2.0.1"
- }
- },
- "indexes-of": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
- "dev": true
- },
- "indexof": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
- "dev": true
- },
- "inquirer": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
- "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
- "dev": true,
- "requires": {
- "ansi-escapes": "1.4.0",
- "ansi-regex": "2.1.1",
- "chalk": "1.1.3",
- "cli-cursor": "1.0.2",
- "cli-width": "2.2.0",
- "figures": "1.7.0",
- "lodash": "4.17.5",
- "readline2": "1.0.1",
- "run-async": "0.1.0",
- "rx-lite": "3.1.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "through": "2.3.8"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- }
- }
- }
- },
- "interpret": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz",
- "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=",
- "dev": true
- },
- "invariant": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz",
- "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==",
- "dev": true,
- "requires": {
- "loose-envify": "1.3.1"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
- },
- "is-absolute-url": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
- "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
- "dev": true
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
- "dev": true,
- "requires": {
- "binary-extensions": "1.11.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-builtin-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
- "dev": true,
- "requires": {
- "builtin-modules": "1.1.1"
- }
- },
- "is-dotfile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
- },
- "is-equal-shallow": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
- "dev": true,
- "requires": {
- "is-primitive": "2.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-finite": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
- "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
- "dev": true,
- "requires": {
- "number-is-nan": "1.0.1"
- }
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "1.0.1"
- }
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "1.0.0"
- }
- },
- "is-my-ip-valid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
- "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
- "dev": true
- },
- "is-my-json-valid": {
- "version": "2.17.2",
- "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz",
- "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==",
- "dev": true,
- "requires": {
- "generate-function": "2.0.0",
- "generate-object-property": "1.2.0",
- "is-my-ip-valid": "1.0.0",
- "jsonpointer": "4.0.1",
- "xtend": "4.0.1"
- }
- },
- "is-number": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- }
- },
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "dev": true
- },
- "is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
- "dev": true
- },
- "is-path-in-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
- "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
- "dev": true,
- "requires": {
- "is-path-inside": "1.0.1"
- }
- },
- "is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
- "dev": true,
- "requires": {
- "path-is-inside": "1.0.2"
- }
- },
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "dev": true
- },
- "is-posix-bracket": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
- "dev": true
- },
- "is-primitive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
- "dev": true
- },
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
- "dev": true
- },
- "is-property": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
- "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
- "dev": true
- },
- "is-resolvable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
- "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
- "dev": true
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
- },
- "is-subset": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
- "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
- "dev": true
- },
- "is-svg": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
- "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
- "dev": true,
- "requires": {
- "html-comment-regex": "1.1.1"
- }
- },
- "is-text-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
- "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
- "dev": true,
- "requires": {
- "text-extensions": "1.7.0"
- }
- },
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- },
- "jade": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz",
- "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=",
- "dev": true,
- "requires": {
- "character-parser": "1.2.1",
- "clean-css": "3.4.28",
- "commander": "2.6.0",
- "constantinople": "3.0.2",
- "jstransformer": "0.0.2",
- "mkdirp": "0.5.1",
- "transformers": "2.1.0",
- "uglify-js": "2.8.29",
- "void-elements": "2.0.1",
- "with": "4.0.3"
- },
- "dependencies": {
- "clean-css": {
- "version": "3.4.28",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
- "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
- "dev": true,
- "requires": {
- "commander": "2.8.1",
- "source-map": "0.4.4"
- },
- "dependencies": {
- "commander": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
- "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
- "dev": true,
- "requires": {
- "graceful-readlink": "1.0.1"
- }
- }
- }
- },
- "commander": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
- "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=",
- "dev": true
- }
- }
- },
- "jade-loader": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/jade-loader/-/jade-loader-0.8.0.tgz",
- "integrity": "sha1-0bCZcam/kKKymLCvWxrQMA0QnC4=",
- "dev": true,
- "requires": {
- "loader-utils": "0.2.17"
- }
- },
- "jasmine": {
- "version": "2.99.0",
- "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.99.0.tgz",
- "integrity": "sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=",
- "dev": true,
- "requires": {
- "exit": "0.1.2",
- "glob": "7.1.2",
- "jasmine-core": "2.99.1"
- }
- },
- "jasmine-core": {
- "version": "2.99.1",
- "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz",
- "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=",
- "dev": true
- },
- "jasmine-diff-matchers": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jasmine-diff-matchers/-/jasmine-diff-matchers-2.0.0.tgz",
- "integrity": "sha1-geO0pbdtPnXhxlMFdTKqsYfn7bQ=",
- "dev": true,
- "requires": {
- "colors": "1.1.2",
- "diff": "1.4.0",
- "jasmine-node": "2.0.0-beta4",
- "lodash.isstring": "4.0.1",
- "q": "1.5.1"
- }
- },
- "jasmine-growl-reporter": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-0.2.1.tgz",
- "integrity": "sha1-1fCje5L2qD/VxkgrgJSVyQqLVf4=",
- "dev": true,
- "requires": {
- "growl": "1.7.0"
- }
- },
- "jasmine-node": {
- "version": "2.0.0-beta4",
- "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-2.0.0-beta4.tgz",
- "integrity": "sha1-fRYo1BUjejB6tsXfm9Y6J0czgpw=",
- "dev": true,
- "requires": {
- "coffee-script": "1.7.1",
- "gaze": "0.5.2",
- "grunt-exec": "0.4.7",
- "jasmine-growl-reporter": "0.2.1",
- "jasmine-reporters": "git://github.com/larrymyers/jasmine-reporters.git#2c7242dc11c15c2f156169bc704798568b8cb50d",
- "minimist": "0.0.10",
- "mkdirp": "0.3.5",
- "underscore": "1.6.0",
- "walkdir": "0.0.12",
- "xml2js": "0.4.19"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
- "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=",
- "dev": true
- }
- }
- },
- "jasmine-reporters": {
- "version": "git://github.com/larrymyers/jasmine-reporters.git#2c7242dc11c15c2f156169bc704798568b8cb50d",
- "dev": true,
- "requires": {
- "mkdirp": "0.3.5"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
- "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=",
- "dev": true
- }
- }
- },
- "js-base64": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz",
- "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==",
- "dev": true
- },
- "js-beautify": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.6.4.tgz",
- "integrity": "sha1-qa95aZdCrJobb93B/bx4vE1RX8M=",
- "dev": true,
- "requires": {
- "config-chain": "1.1.11",
- "editorconfig": "0.13.3",
- "mkdirp": "0.5.1",
- "nopt": "3.0.6"
- }
- },
- "js-tokens": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
- "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
- "dev": true
- },
- "js-yaml": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
- "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
- "dev": true,
- "requires": {
- "argparse": "1.0.10",
- "esprima": "2.7.3"
- }
- },
- "jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
- "dev": true
- },
- "json-stable-stringify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
- "dev": true,
- "requires": {
- "jsonify": "0.0.0"
- }
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
- },
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
- "dev": true
- },
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "dev": true
- },
- "jsonpointer": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
- "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
- "dev": true
- },
- "jstransformer": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz",
- "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=",
- "dev": true,
- "requires": {
- "is-promise": "2.1.0",
- "promise": "6.1.0"
- }
- },
- "jsx-ast-utils": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz",
- "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=",
- "dev": true
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- },
- "lazy-cache": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
- "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
- "dev": true
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
- "requires": {
- "invert-kv": "1.0.0"
- }
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2"
- }
- },
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "parse-json": "2.2.0",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "strip-bom": "2.0.0"
- }
- },
- "loader-utils": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
- "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
- "requires": {
- "big.js": "3.2.0",
- "emojis-list": "2.1.0",
- "json5": "0.5.1",
- "object-assign": "4.1.1"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "2.0.0",
- "path-exists": "3.0.0"
- },
- "dependencies": {
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- }
- }
- },
- "lodash": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
- "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw=="
- },
- "lodash._reinterpolate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
- "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
- "dev": true
- },
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
- "dev": true
- },
- "lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=",
- "dev": true
- },
- "lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
- "dev": true
- },
- "lodash.template": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
- "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
- "dev": true,
- "requires": {
- "lodash._reinterpolate": "3.0.0",
- "lodash.templatesettings": "4.1.0"
- }
- },
- "lodash.templatesettings": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
- "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
- "dev": true,
- "requires": {
- "lodash._reinterpolate": "3.0.0"
- }
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
- "dev": true
- },
- "longest": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
- "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
- "dev": true
- },
- "loose-envify": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
- "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
- "dev": true,
- "requires": {
- "js-tokens": "3.0.2"
- }
- },
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
- "dev": true,
- "requires": {
- "currently-unhandled": "0.4.1",
- "signal-exit": "3.0.2"
- }
- },
- "lower-case": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
- "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
- },
- "lru-cache": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
- "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
- "dev": true,
- "requires": {
- "pseudomap": "1.0.2",
- "yallist": "2.1.2"
- }
- },
- "macaddress": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz",
- "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=",
- "dev": true
- },
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
- },
- "math-expression-evaluator": {
- "version": "1.2.17",
- "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
- "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
- "dev": true
- },
- "mem": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
- "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
- "dev": true,
- "requires": {
- "mimic-fn": "1.2.0"
- }
- },
- "memory-fs": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz",
- "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=",
- "dev": true,
- "requires": {
- "errno": "0.1.7",
- "readable-stream": "2.3.4"
- }
- },
- "meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
- "dev": true,
- "requires": {
- "camelcase-keys": "2.1.0",
- "decamelize": "1.2.0",
- "loud-rejection": "1.6.0",
- "map-obj": "1.0.1",
- "minimist": "1.2.0",
- "normalize-package-data": "2.4.0",
- "object-assign": "4.1.1",
- "read-pkg-up": "1.0.1",
- "redent": "1.0.0",
- "trim-newlines": "1.0.0"
- }
- },
- "micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "2.0.0",
- "array-unique": "0.2.1",
- "braces": "1.8.5",
- "expand-brackets": "0.1.5",
- "extglob": "0.3.2",
- "filename-regex": "2.0.1",
- "is-extglob": "1.0.0",
- "is-glob": "2.0.1",
- "kind-of": "3.2.2",
- "normalize-path": "2.1.1",
- "object.omit": "2.0.1",
- "parse-glob": "3.0.4",
- "regex-cache": "0.4.4"
- }
- },
- "mime": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz",
- "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=",
- "dev": true
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "1.1.11"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- }
- }
- },
- "modify-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.0.tgz",
- "integrity": "sha1-4rbN65zhn5kxelNyLz2/XfXqqrI=",
- "dev": true
- },
- "mout": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mout/-/mout-1.1.0.tgz",
- "integrity": "sha512-XsP0vf4As6BfqglxZqbqQ8SR6KQot2AgxvR0gG+WtUkf90vUXchMOZQtPf/Hml1rEffJupqL/tIrU6EYhsUQjw==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "multiline": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz",
- "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=",
- "dev": true,
- "requires": {
- "strip-indent": "1.0.1"
- }
- },
- "mute-stream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz",
- "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
- "dev": true
- },
- "nan": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz",
- "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==",
- "dev": true,
- "optional": true
- },
- "ncname": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
- "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
- "requires": {
- "xml-char-classes": "1.0.0"
- }
- },
- "no-case": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
- "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
- "requires": {
- "lower-case": "1.1.4"
- }
- },
- "node-libs-browser": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz",
- "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=",
- "dev": true,
- "requires": {
- "assert": "1.4.1",
- "browserify-zlib": "0.1.4",
- "buffer": "4.9.1",
- "console-browserify": "1.1.0",
- "constants-browserify": "1.0.0",
- "crypto-browserify": "3.3.0",
- "domain-browser": "1.2.0",
- "events": "1.1.1",
- "https-browserify": "0.0.1",
- "os-browserify": "0.2.1",
- "path-browserify": "0.0.0",
- "process": "0.11.10",
- "punycode": "1.4.1",
- "querystring-es3": "0.2.1",
- "readable-stream": "2.3.4",
- "stream-browserify": "2.0.1",
- "stream-http": "2.8.0",
- "string_decoder": "0.10.31",
- "timers-browserify": "2.0.6",
- "tty-browserify": "0.0.0",
- "url": "0.11.0",
- "util": "0.10.3",
- "vm-browserify": "0.0.4"
- },
- "dependencies": {
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- }
- }
- },
- "nopt": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
- "dev": true,
- "requires": {
- "abbrev": "1.1.1"
- }
- },
- "normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
- "dev": true,
- "requires": {
- "hosted-git-info": "2.5.0",
- "is-builtin-module": "1.0.0",
- "semver": "5.5.0",
- "validate-npm-package-license": "3.0.1"
- }
- },
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "1.1.0"
- }
- },
- "normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
- "dev": true
- },
- "normalize-url": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
- "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
- "dev": true,
- "requires": {
- "object-assign": "4.1.1",
- "prepend-http": "1.0.4",
- "query-string": "4.3.4",
- "sort-keys": "1.1.2"
- }
- },
- "npm-path": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-1.1.0.tgz",
- "integrity": "sha1-BHSuAEGcMn1UcBt88s0F3Ii+EUA=",
- "dev": true,
- "requires": {
- "which": "1.3.0"
- }
- },
- "npm-run": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/npm-run/-/npm-run-2.0.0.tgz",
- "integrity": "sha1-KN/ArV4uRv4ISOK9WN3wAue3PBU=",
- "dev": true,
- "requires": {
- "minimist": "1.2.0",
- "npm-path": "1.1.0",
- "npm-which": "2.0.0",
- "serializerr": "1.0.3",
- "spawn-sync": "1.0.15",
- "sync-exec": "0.5.0"
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "dev": true,
- "requires": {
- "path-key": "2.0.1"
- }
- },
- "npm-which": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-2.0.0.tgz",
- "integrity": "sha1-DEaYIWC3gwk2YdHQG9RJbS/qu6w=",
- "dev": true,
- "requires": {
- "commander": "2.14.1",
- "npm-path": "1.1.0",
- "which": "1.3.0"
- }
- },
- "nth-check": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
- "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
- "requires": {
- "boolbase": "1.0.0"
- }
- },
- "null-check": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
- "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=",
- "dev": true
- },
- "num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
- "dev": true
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object.omit": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
- "dev": true,
- "requires": {
- "for-own": "0.1.5",
- "is-extendable": "0.1.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1.0.2"
- }
- },
- "onetime": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
- "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
- "dev": true
- },
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
- "dev": true,
- "requires": {
- "minimist": "0.0.10",
- "wordwrap": "0.0.3"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
- "dev": true
- }
- }
- },
- "optionator": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
- "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
- "dev": true,
- "requires": {
- "deep-is": "0.1.3",
- "fast-levenshtein": "2.0.6",
- "levn": "0.3.0",
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2",
- "wordwrap": "1.0.0"
- },
- "dependencies": {
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- }
- }
- },
- "os-browserify": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz",
- "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=",
- "dev": true
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true
- },
- "os-locale": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
- "dev": true,
- "requires": {
- "execa": "0.7.0",
- "lcid": "1.0.0",
- "mem": "1.1.0"
- }
- },
- "os-shim": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz",
- "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=",
- "dev": true
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true
- },
- "p-limit": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
- "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
- "dev": true,
- "requires": {
- "p-try": "1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "1.2.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "pako": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
- "dev": true
- },
- "param-case": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
- "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
- "requires": {
- "no-case": "2.3.2"
- }
- },
- "parse-github-repo-url": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
- "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
- "dev": true
- },
- "parse-glob": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
- "dev": true,
- "requires": {
- "glob-base": "0.3.0",
- "is-dotfile": "1.0.3",
- "is-extglob": "1.0.0",
- "is-glob": "2.0.1"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "1.3.1"
- }
- },
- "path-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
- "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
- "dev": true
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "2.0.1"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
- "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
- "dev": true
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
- }
- },
- "pbkdf2-compat": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz",
- "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=",
- "dev": true
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
- "dev": true
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "dev": true,
- "requires": {
- "pinkie": "2.0.4"
- }
- },
- "pkg-config": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz",
- "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=",
- "dev": true,
- "requires": {
- "debug-log": "1.0.1",
- "find-root": "1.1.0",
- "xtend": "4.0.1"
- }
- },
- "pluralize": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
- "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=",
- "dev": true
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "js-base64": "2.4.3",
- "source-map": "0.5.7",
- "supports-color": "3.2.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "1.0.0"
- }
- }
- }
- },
- "postcss-calc": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
- "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18",
- "postcss-message-helpers": "2.0.0",
- "reduce-css-calc": "1.3.0"
- }
- },
- "postcss-colormin": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
- "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
- "dev": true,
- "requires": {
- "colormin": "1.1.2",
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
- }
- },
- "postcss-convert-values": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
- "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
- }
- },
- "postcss-discard-comments": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
- "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18"
- }
- },
- "postcss-discard-duplicates": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
- "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18"
- }
- },
- "postcss-discard-empty": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
- "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18"
- }
- },
- "postcss-discard-overridden": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
- "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18"
- }
- },
- "postcss-discard-unused": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
- "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18",
- "uniqs": "2.0.0"
- }
- },
- "postcss-filter-plugins": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz",
- "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18",
- "uniqid": "4.1.1"
- }
- },
- "postcss-merge-idents": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
- "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
- "dev": true,
- "requires": {
- "has": "1.0.1",
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
- }
- },
- "postcss-merge-longhand": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
- "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18"
- }
- },
- "postcss-merge-rules": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
- "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
- "dev": true,
- "requires": {
- "browserslist": "1.7.7",
- "caniuse-api": "1.6.1",
- "postcss": "5.2.18",
- "postcss-selector-parser": "2.2.3",
- "vendors": "1.0.1"
- }
- },
- "postcss-message-helpers": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
- "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
- "dev": true
- },
- "postcss-minify-font-values": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
- "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
- "dev": true,
- "requires": {
- "object-assign": "4.1.1",
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
- }
- },
- "postcss-minify-gradients": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
- "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
- }
- },
- "postcss-minify-params": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
- "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
- "dev": true,
- "requires": {
- "alphanum-sort": "1.0.2",
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0",
- "uniqs": "2.0.0"
- }
- },
- "postcss-minify-selectors": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
- "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
- "dev": true,
- "requires": {
- "alphanum-sort": "1.0.2",
- "has": "1.0.1",
- "postcss": "5.2.18",
- "postcss-selector-parser": "2.2.3"
- }
- },
- "postcss-modules-extract-imports": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
- "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
- "dev": true,
- "requires": {
- "postcss": "6.0.19"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
- "dev": true,
- "requires": {
- "color-convert": "1.9.1"
- }
- },
- "chalk": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
- "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
- "dev": true,
- "requires": {
- "ansi-styles": "3.2.0",
- "escape-string-regexp": "1.0.5",
- "supports-color": "5.2.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "postcss": {
- "version": "6.0.19",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz",
- "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==",
- "dev": true,
- "requires": {
- "chalk": "2.3.1",
- "source-map": "0.6.1",
- "supports-color": "5.2.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
- "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
- "dev": true,
- "requires": {
- "has-flag": "3.0.0"
- }
- }
- }
- },
- "postcss-modules-local-by-default": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
- "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
- "dev": true,
- "requires": {
- "css-selector-tokenizer": "0.7.0",
- "postcss": "6.0.19"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
- "dev": true,
- "requires": {
- "color-convert": "1.9.1"
- }
- },
- "chalk": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
- "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
- "dev": true,
- "requires": {
- "ansi-styles": "3.2.0",
- "escape-string-regexp": "1.0.5",
- "supports-color": "5.2.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "postcss": {
- "version": "6.0.19",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz",
- "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==",
- "dev": true,
- "requires": {
- "chalk": "2.3.1",
- "source-map": "0.6.1",
- "supports-color": "5.2.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
- "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
- "dev": true,
- "requires": {
- "has-flag": "3.0.0"
- }
- }
- }
- },
- "postcss-modules-scope": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
- "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
- "dev": true,
- "requires": {
- "css-selector-tokenizer": "0.7.0",
- "postcss": "6.0.19"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
- "dev": true,
- "requires": {
- "color-convert": "1.9.1"
- }
- },
- "chalk": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
- "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
- "dev": true,
- "requires": {
- "ansi-styles": "3.2.0",
- "escape-string-regexp": "1.0.5",
- "supports-color": "5.2.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "postcss": {
- "version": "6.0.19",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz",
- "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==",
- "dev": true,
- "requires": {
- "chalk": "2.3.1",
- "source-map": "0.6.1",
- "supports-color": "5.2.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
- "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
- "dev": true,
- "requires": {
- "has-flag": "3.0.0"
- }
- }
- }
- },
- "postcss-modules-values": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
- "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
- "dev": true,
- "requires": {
- "icss-replace-symbols": "1.1.0",
- "postcss": "6.0.19"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
- "dev": true,
- "requires": {
- "color-convert": "1.9.1"
- }
- },
- "chalk": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
- "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
- "dev": true,
- "requires": {
- "ansi-styles": "3.2.0",
- "escape-string-regexp": "1.0.5",
- "supports-color": "5.2.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "postcss": {
- "version": "6.0.19",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz",
- "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==",
- "dev": true,
- "requires": {
- "chalk": "2.3.1",
- "source-map": "0.6.1",
- "supports-color": "5.2.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
- "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
- "dev": true,
- "requires": {
- "has-flag": "3.0.0"
- }
- }
- }
- },
- "postcss-normalize-charset": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
- "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18"
- }
- },
- "postcss-normalize-url": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
- "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
- "dev": true,
- "requires": {
- "is-absolute-url": "2.1.0",
- "normalize-url": "1.9.1",
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
- }
- },
- "postcss-ordered-values": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
- "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
- }
- },
- "postcss-reduce-idents": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
- "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
- }
- },
- "postcss-reduce-initial": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
- "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
- "dev": true,
- "requires": {
- "postcss": "5.2.18"
- }
- },
- "postcss-reduce-transforms": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
- "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
- "dev": true,
- "requires": {
- "has": "1.0.1",
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0"
- }
- },
- "postcss-selector-parser": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
- "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
- "dev": true,
- "requires": {
- "flatten": "1.0.2",
- "indexes-of": "1.0.1",
- "uniq": "1.0.1"
- }
- },
- "postcss-svgo": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
- "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
- "dev": true,
- "requires": {
- "is-svg": "2.1.0",
- "postcss": "5.2.18",
- "postcss-value-parser": "3.3.0",
- "svgo": "0.7.2"
- }
- },
- "postcss-unique-selectors": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
- "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
- "dev": true,
- "requires": {
- "alphanum-sort": "1.0.2",
- "postcss": "5.2.18",
- "uniqs": "2.0.0"
- }
- },
- "postcss-value-parser": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
- "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
- "dev": true
- },
- "postcss-zindex": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
- "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
- "dev": true,
- "requires": {
- "has": "1.0.1",
- "postcss": "5.2.18",
- "uniqs": "2.0.0"
- }
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
- "dev": true
- },
- "preserve": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
- "dev": true
- },
- "pretty-error": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
- "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
- "requires": {
- "renderkid": "2.0.1",
- "utila": "0.4.0"
- }
- },
- "private": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
- "dev": true
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
- "dev": true
- },
- "progress": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
- "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
- "dev": true
- },
- "promise": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz",
- "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=",
- "dev": true,
- "requires": {
- "asap": "1.0.0"
- }
- },
- "proto-list": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
- "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
- "dev": true
- },
- "protochain": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/protochain/-/protochain-1.0.5.tgz",
- "integrity": "sha1-mRxAfpneJkqt+PgVBLXn+ve/omA=",
- "dev": true
- },
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
- "dev": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- },
- "q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
- "dev": true
- },
- "query-string": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
- "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
- "dev": true,
- "requires": {
- "object-assign": "4.1.1",
- "strict-uri-encode": "1.1.0"
- }
- },
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "dev": true
- },
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
- "dev": true
- },
- "randomatic": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
- "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
- "dev": true,
- "requires": {
- "is-number": "3.0.0",
- "kind-of": "4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "dev": true,
- "requires": {
- "load-json-file": "1.1.0",
- "normalize-package-data": "2.4.0",
- "path-type": "1.1.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dev": true,
- "requires": {
- "find-up": "1.1.2",
- "read-pkg": "1.1.0"
- }
- },
- "readable-stream": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
- "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "readdirp": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
- "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "minimatch": "3.0.4",
- "readable-stream": "2.3.4",
- "set-immediate-shim": "1.0.1"
- }
- },
- "readline2": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
- "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
- "dev": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "mute-stream": "0.0.5"
- }
- },
- "recast": {
- "version": "0.11.23",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
- "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
- "dev": true,
- "requires": {
- "ast-types": "0.9.6",
- "esprima": "3.1.3",
- "private": "0.1.8",
- "source-map": "0.5.7"
- },
- "dependencies": {
- "esprima": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
- "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
- "dev": true,
- "requires": {
- "indent-string": "2.1.0",
- "strip-indent": "1.0.1"
- }
- },
- "reduce-css-calc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
- "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
- "dev": true,
- "requires": {
- "balanced-match": "0.4.2",
- "math-expression-evaluator": "1.2.17",
- "reduce-function-call": "1.0.2"
- },
- "dependencies": {
- "balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
- "dev": true
- }
- }
- },
- "reduce-function-call": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
- "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
- "dev": true,
- "requires": {
- "balanced-match": "0.4.2"
- },
- "dependencies": {
- "balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
- "dev": true
- }
- }
- },
- "regenerate": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
- "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
- "dev": true
- },
- "regenerator-runtime": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
- "dev": true
- },
- "regex-cache": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
- "dev": true,
- "requires": {
- "is-equal-shallow": "0.1.3"
- }
- },
- "regexpu-core": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
- "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
- "dev": true,
- "requires": {
- "regenerate": "1.3.3",
- "regjsgen": "0.2.0",
- "regjsparser": "0.1.5"
- }
- },
- "regjsgen": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
- "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
- "dev": true
- },
- "regjsparser": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
- "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
- "dev": true,
- "requires": {
- "jsesc": "0.5.0"
- }
- },
- "relateurl": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
- "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
- },
- "renderkid": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz",
- "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=",
- "requires": {
- "css-select": "1.2.0",
- "dom-converter": "0.1.4",
- "htmlparser2": "3.3.0",
- "strip-ansi": "3.0.1",
- "utila": "0.3.3"
- },
- "dependencies": {
- "utila": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz",
- "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY="
- }
- }
- },
- "repeat-element": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
- "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
- },
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "dev": true,
- "requires": {
- "is-finite": "1.0.2"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- },
- "require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
- "dev": true,
- "requires": {
- "caller-path": "0.1.0",
- "resolve-from": "1.0.1"
- }
- },
- "resolve": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
- "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
- "dev": true,
- "requires": {
- "path-parse": "1.0.5"
- }
- },
- "resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
- "dev": true
- },
- "restore-cursor": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
- "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
- "dev": true,
- "requires": {
- "exit-hook": "1.1.1",
- "onetime": "1.1.0"
- }
- },
- "right-align": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
- "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
- "dev": true,
- "requires": {
- "align-text": "0.1.4"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
- "dev": true,
- "requires": {
- "glob": "7.1.2"
- }
- },
- "ripemd160": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz",
- "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=",
- "dev": true
- },
- "rocambole": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/rocambole/-/rocambole-0.7.0.tgz",
- "integrity": "sha1-9seVBVF9xCtvuECEK4uVOw+WhYU=",
- "dev": true,
- "requires": {
- "esprima": "2.7.3"
- }
- },
- "rocambole-indent": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/rocambole-indent/-/rocambole-indent-2.0.4.tgz",
- "integrity": "sha1-oYokl3ygQAuGHapGMehh3LUtCFw=",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "mout": "0.11.1",
- "rocambole-token": "1.2.1"
- },
- "dependencies": {
- "mout": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz",
- "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=",
- "dev": true
- }
- }
- },
- "rocambole-linebreak": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/rocambole-linebreak/-/rocambole-linebreak-1.0.2.tgz",
- "integrity": "sha1-A2IVFbQ7RyHJflocG8paA2Y2jy8=",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "rocambole-token": "1.2.1",
- "semver": "4.3.6"
- },
- "dependencies": {
- "semver": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
- "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
- "dev": true
- }
- }
- },
- "rocambole-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/rocambole-node/-/rocambole-node-1.0.0.tgz",
- "integrity": "sha1-21tJ3nQHsAgN1RSHLyjjk9D3/z8=",
- "dev": true
- },
- "rocambole-token": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/rocambole-token/-/rocambole-token-1.2.1.tgz",
- "integrity": "sha1-x4XfdCjcPLJ614lwR71SOMwHDTU=",
- "dev": true
- },
- "rocambole-whitespace": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/rocambole-whitespace/-/rocambole-whitespace-1.0.0.tgz",
- "integrity": "sha1-YzMJSSVrKZQfWbGQRZ+ZnGsdO/k=",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "repeat-string": "1.6.1",
- "rocambole-token": "1.2.1"
- }
- },
- "run-async": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
- "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
- "dev": true,
- "requires": {
- "once": "1.4.0"
- }
- },
- "run-parallel": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.7.tgz",
- "integrity": "sha512-nB641a6enJOh0fdsFHR9SiVCiOlAyjMplImDdjV3kWCzJZw9rwzvGwmpGuPmfX//Yxblh0pkzPcFcxA81iwmxA==",
- "dev": true
- },
- "rx": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/rx/-/rx-2.5.3.tgz",
- "integrity": "sha1-Ia3H2A8CACr1Da6X/Z2/JIdV9WY=",
- "dev": true
- },
- "rx-lite": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
- "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
- "dev": true
- },
- "sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
- "dev": true
- },
- "semi": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/semi/-/semi-4.0.5.tgz",
- "integrity": "sha1-S5lcDBZjkjj2rimMhAWCqL8FEe4=",
- "dev": true,
- "requires": {
- "eslint": "0.24.1",
- "findit": "2.0.0",
- "minimist": "1.2.0",
- "mkdirp": "0.5.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz",
- "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=",
- "dev": true
- },
- "cli-width": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz",
- "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=",
- "dev": true
- },
- "doctrine": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.6.4.tgz",
- "integrity": "sha1-gUKEkalC7xiwSSBW7aOADu5X1h0=",
- "dev": true,
- "requires": {
- "esutils": "1.1.6",
- "isarray": "0.0.1"
- }
- },
- "eslint": {
- "version": "0.24.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-0.24.1.tgz",
- "integrity": "sha1-VKUICYVbllVyHG8u5Xs1HtzigQE=",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "concat-stream": "1.6.0",
- "debug": "2.6.9",
- "doctrine": "0.6.4",
- "escape-string-regexp": "1.0.5",
- "escope": "3.6.0",
- "espree": "2.2.5",
- "estraverse": "4.2.0",
- "estraverse-fb": "1.3.2",
- "globals": "8.18.0",
- "inquirer": "0.8.5",
- "is-my-json-valid": "2.17.2",
- "js-yaml": "3.7.0",
- "minimatch": "2.0.10",
- "mkdirp": "0.5.1",
- "object-assign": "2.1.1",
- "optionator": "0.5.0",
- "path-is-absolute": "1.0.1",
- "strip-json-comments": "1.0.4",
- "text-table": "0.2.0",
- "user-home": "1.1.1",
- "xml-escape": "1.0.0"
- }
- },
- "espree": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/espree/-/espree-2.2.5.tgz",
- "integrity": "sha1-32kbkxCIlAKuspzAZnCMVmkLhUs=",
- "dev": true
- },
- "esutils": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz",
- "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz",
- "integrity": "sha1-AXjc3uAjuSkFGTrwlZ6KdjnP3Lk=",
- "dev": true
- },
- "globals": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-8.18.0.tgz",
- "integrity": "sha1-k9SmK9ysOM+vr8R9awNHaMsP/LQ=",
- "dev": true
- },
- "inquirer": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.8.5.tgz",
- "integrity": "sha1-29dAz2yjtzEpamPOb22WGFHzNt8=",
- "dev": true,
- "requires": {
- "ansi-regex": "1.1.1",
- "chalk": "1.1.3",
- "cli-width": "1.1.1",
- "figures": "1.7.0",
- "lodash": "3.10.1",
- "readline2": "0.1.1",
- "rx": "2.5.3",
- "through": "2.3.8"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "levn": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.2.5.tgz",
- "integrity": "sha1-uo0znQykphDjo/FFucr0iAcVUFQ=",
- "dev": true,
- "requires": {
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2"
- }
- },
- "lodash": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
- "dev": true
- },
- "minimatch": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
- "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
- "dev": true,
- "requires": {
- "brace-expansion": "1.1.11"
- }
- },
- "mute-stream": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz",
- "integrity": "sha1-qSGZYKbV1dBGWXruUSUsZlX3F34=",
- "dev": true
- },
- "object-assign": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
- "dev": true
- },
- "optionator": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.5.0.tgz",
- "integrity": "sha1-t1qJlaLUF98ltuTjhi9QqohlE2g=",
- "dev": true,
- "requires": {
- "deep-is": "0.1.3",
- "fast-levenshtein": "1.0.7",
- "levn": "0.2.5",
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2",
- "wordwrap": "0.0.3"
- }
- },
- "readline2": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/readline2/-/readline2-0.1.1.tgz",
- "integrity": "sha1-mUQ7pug7gw7zBRv9fcJBqCco1Wg=",
- "dev": true,
- "requires": {
- "mute-stream": "0.0.4",
- "strip-ansi": "2.0.1"
- }
- },
- "strip-ansi": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
- "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=",
- "dev": true,
- "requires": {
- "ansi-regex": "1.1.1"
- }
- },
- "user-home": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
- "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
- "dev": true
- }
- }
- },
- "semistandard": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/semistandard/-/semistandard-8.0.0.tgz",
- "integrity": "sha1-/YaeLk19Lr/GWwRmJcGJt4tn3R4=",
- "dev": true,
- "requires": {
- "eslint": "2.13.1",
- "eslint-config-semistandard": "6.0.2",
- "eslint-config-standard": "5.3.1",
- "eslint-config-standard-jsx": "1.2.0",
- "eslint-plugin-promise": "1.3.2",
- "eslint-plugin-react": "5.2.2",
- "eslint-plugin-standard": "1.3.3",
- "semistandard-format": "3.0.0",
- "standard-engine": "4.1.3"
- }
- },
- "semistandard-format": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/semistandard-format/-/semistandard-format-3.0.0.tgz",
- "integrity": "sha1-eF8VANyEBd1WHdC4r8GXFEj1I+s=",
- "dev": true,
- "requires": {
- "minimist": "1.2.0",
- "semi": "4.0.5",
- "standard-format": "2.2.4",
- "stdin": "0.0.1"
- }
- },
- "semver": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
- "dev": true
- },
- "serializerr": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/serializerr/-/serializerr-1.0.3.tgz",
- "integrity": "sha1-EtTFqhw/+49tHcXzlaqUVVacP5E=",
- "dev": true,
- "requires": {
- "protochain": "1.0.5"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "set-immediate-shim": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
- "dev": true
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
- "dev": true
- },
- "sha.js": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz",
- "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=",
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "shelljs": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz",
- "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=",
- "dev": true
- },
- "sigmund": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
- "dev": true
- },
- "slice-ansi": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
- "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
- "dev": true
- },
- "sort-keys": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
- "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
- "dev": true,
- "requires": {
- "is-plain-obj": "1.1.0"
- }
- },
- "source-list-map": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz",
- "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=",
- "dev": true
- },
- "source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "dev": true,
- "requires": {
- "amdefine": "1.0.1"
- }
- },
- "spawn-sync": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz",
- "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=",
- "dev": true,
- "requires": {
- "concat-stream": "1.6.0",
- "os-shim": "0.1.3"
- }
- },
- "spdx-correct": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
- "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
- "dev": true,
- "requires": {
- "spdx-license-ids": "1.2.2"
- }
- },
- "spdx-expression-parse": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
- "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
- "dev": true
- },
- "spdx-license-ids": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
- "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
- "dev": true
- },
- "split": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
- "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
- "dev": true,
- "requires": {
- "through": "2.3.8"
- }
- },
- "split2": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
- "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
- "dev": true,
- "requires": {
- "through2": "2.0.3"
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "standard-engine": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz",
- "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=",
- "dev": true,
- "requires": {
- "defaults": "1.0.3",
- "deglob": "1.1.2",
- "find-root": "1.1.0",
- "get-stdin": "5.0.1",
- "minimist": "1.2.0",
- "multiline": "1.0.2",
- "pkg-config": "1.1.1",
- "xtend": "4.0.1"
- },
- "dependencies": {
- "get-stdin": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
- "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
- "dev": true
- }
- }
- },
- "standard-format": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/standard-format/-/standard-format-2.2.4.tgz",
- "integrity": "sha1-uQ+zmmNfdJzU/RF/5HMNMRearu8=",
- "dev": true,
- "requires": {
- "deglob": "1.1.2",
- "esformatter": "0.9.6",
- "esformatter-eol-last": "1.0.0",
- "esformatter-jsx": "7.4.1",
- "esformatter-literal-notation": "1.0.1",
- "esformatter-quotes": "1.1.0",
- "esformatter-remove-trailing-commas": "1.0.1",
- "esformatter-semicolon-first": "1.2.0",
- "esformatter-spaced-lined-comment": "2.0.1",
- "minimist": "1.2.0",
- "stdin": "0.0.1"
- }
- },
- "standard-version": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-4.3.0.tgz",
- "integrity": "sha512-2UJ2BIUNa7+41PH4FvYicSQED2LCt2RXjmNFis+JZlxZtwzNnGn4uuL8WBUqHoC9b+bJ0AHIAX/bilzm+pGPeA==",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "conventional-changelog": "1.1.15",
- "conventional-recommended-bump": "1.2.1",
- "dotgitignore": "1.0.3",
- "figures": "1.7.0",
- "fs-access": "1.0.1",
- "semver": "5.5.0",
- "yargs": "8.0.2"
- }
- },
- "stdin": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz",
- "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=",
- "dev": true
- },
- "stream-browserify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
- "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.4"
- }
- },
- "stream-http": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz",
- "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==",
- "dev": true,
- "requires": {
- "builtin-status-codes": "3.0.0",
- "inherits": "2.0.3",
- "readable-stream": "2.3.4",
- "to-arraybuffer": "1.0.1",
- "xtend": "4.0.1"
- }
- },
- "strict-uri-encode": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "2.0.0",
- "strip-ansi": "4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "3.0.0"
- }
- }
- }
- },
- "string.prototype.endswith": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/string.prototype.endswith/-/string.prototype.endswith-0.2.0.tgz",
- "integrity": "sha1-oZwg3uUamHd+mkfhDwm+OTubunU=",
- "dev": true
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true,
- "requires": {
- "is-utf8": "0.2.1"
- }
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true
- },
- "strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "dev": true,
- "requires": {
- "get-stdin": "4.0.1"
- }
- },
- "strip-json-comments": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
- "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
- "dev": true
- },
- "style-loader": {
- "version": "0.13.2",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz",
- "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=",
- "dev": true,
- "requires": {
- "loader-utils": "1.1.0"
- },
- "dependencies": {
- "loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
- "dev": true,
- "requires": {
- "big.js": "3.2.0",
- "emojis-list": "2.1.0",
- "json5": "0.5.1"
- }
- }
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- },
- "svgo": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
- "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
- "dev": true,
- "requires": {
- "coa": "1.0.4",
- "colors": "1.1.2",
- "csso": "2.3.2",
- "js-yaml": "3.7.0",
- "mkdirp": "0.5.1",
- "sax": "1.2.4",
- "whet.extend": "0.9.9"
- }
- },
- "sync-exec": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/sync-exec/-/sync-exec-0.5.0.tgz",
- "integrity": "sha1-P3JY5KW6FyRTgZCfpqb2z1BuFmE=",
- "dev": true
- },
- "table": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
- "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
- "dev": true,
- "requires": {
- "ajv": "4.11.8",
- "ajv-keywords": "1.5.1",
- "chalk": "1.1.3",
- "lodash": "4.17.5",
- "slice-ansi": "0.0.4",
- "string-width": "2.1.1"
- }
- },
- "tapable": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz",
- "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg=="
- },
- "temp-fs": {
- "version": "0.9.9",
- "resolved": "https://registry.npmjs.org/temp-fs/-/temp-fs-0.9.9.tgz",
- "integrity": "sha1-gHFzBDeHByDpQxUy/igUNk+IA9c=",
- "dev": true,
- "requires": {
- "rimraf": "2.5.4"
- },
- "dependencies": {
- "rimraf": {
- "version": "2.5.4",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz",
- "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=",
- "dev": true,
- "requires": {
- "glob": "7.1.2"
- }
- }
- }
- },
- "text-extensions": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz",
- "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==",
- "dev": true
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "dev": true,
- "requires": {
- "readable-stream": "2.3.4",
- "xtend": "4.0.1"
- }
- },
- "timers-browserify": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz",
- "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==",
- "dev": true,
- "requires": {
- "setimmediate": "1.0.5"
- }
- },
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
- "dev": true
- },
- "to-fast-properties": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
- "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
- "dev": true
- },
- "toposort": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz",
- "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw="
- },
- "transformers": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz",
- "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=",
- "dev": true,
- "requires": {
- "css": "1.0.8",
- "promise": "2.0.0",
- "uglify-js": "2.2.5"
- },
- "dependencies": {
- "is-promise": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
- "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=",
- "dev": true
- },
- "optimist": {
- "version": "0.3.7",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
- "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
- "dev": true,
- "requires": {
- "wordwrap": "0.0.3"
- }
- },
- "promise": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz",
- "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=",
- "dev": true,
- "requires": {
- "is-promise": "1.0.1"
- }
- },
- "source-map": {
- "version": "0.1.43",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
- "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
- "dev": true,
- "requires": {
- "amdefine": "1.0.1"
- }
- },
- "uglify-js": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
- "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
- "dev": true,
- "requires": {
- "optimist": "0.3.7",
- "source-map": "0.1.43"
- }
- }
- }
- },
- "trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
- "dev": true
- },
- "trim-off-newlines": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
- "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
- "dev": true
- },
- "tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
- "dev": true
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "1.1.2"
- }
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "uglify-js": {
- "version": "2.8.29",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
- "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
- "dev": true,
- "requires": {
- "source-map": "0.5.7",
- "uglify-to-browserify": "1.0.2",
- "yargs": "3.10.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
- "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "yargs": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
- "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
- "dev": true,
- "requires": {
- "camelcase": "1.2.1",
- "cliui": "2.1.0",
- "decamelize": "1.2.0",
- "window-size": "0.1.0"
- }
- }
- }
- },
- "uglify-to-browserify": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
- "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
- "dev": true
- },
- "underscore": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
- "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
- "dev": true
- },
- "underscore-template-loader": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/underscore-template-loader/-/underscore-template-loader-0.7.3.tgz",
- "integrity": "sha1-HcLHN27owq6LXn3Ps2MUB5QtmQM=",
- "dev": true,
- "requires": {
- "fastparse": "1.1.1",
- "loader-utils": "0.2.17"
- }
- },
- "uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
- "dev": true
- },
- "uniqid": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz",
- "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=",
- "dev": true,
- "requires": {
- "macaddress": "0.2.8"
- }
- },
- "uniqs": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
- "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
- "dev": true
- },
- "upper-case": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
- "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- }
- }
- },
- "url-loader": {
- "version": "0.5.9",
- "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz",
- "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==",
- "dev": true,
- "requires": {
- "loader-utils": "1.1.0",
- "mime": "1.3.6"
- },
- "dependencies": {
- "loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
- "dev": true,
- "requires": {
- "big.js": "3.2.0",
- "emojis-list": "2.1.0",
- "json5": "0.5.1"
- }
- }
- }
- },
- "user-home": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
- "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
- "dev": true,
- "requires": {
- "os-homedir": "1.0.2"
- }
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dev": true,
- "requires": {
- "inherits": "2.0.1"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- }
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "utila": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
- "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw="
- },
- "validate-npm-package-license": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
- "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
- "dev": true,
- "requires": {
- "spdx-correct": "1.0.2",
- "spdx-expression-parse": "1.0.4"
- }
- },
- "vendors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz",
- "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=",
- "dev": true
- },
- "vm-browserify": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
- "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
- "dev": true,
- "requires": {
- "indexof": "0.0.1"
- }
- },
- "void-elements": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
- "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
- "dev": true
- },
- "walkdir": {
- "version": "0.0.12",
- "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.12.tgz",
- "integrity": "sha512-HFhaD4mMWPzFSqhpyDG48KDdrjfn409YQuVW7ckZYhW4sE87mYtWifdB/+73RA7+p4s4K18n5Jfx1kHthE1gBw==",
- "dev": true
- },
- "watchpack": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz",
- "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=",
- "dev": true,
- "requires": {
- "async": "0.9.2",
- "chokidar": "1.7.0",
- "graceful-fs": "4.1.11"
- },
- "dependencies": {
- "async": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
- "dev": true
- }
- }
- },
- "webpack": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz",
- "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=",
- "dev": true,
- "requires": {
- "acorn": "3.3.0",
- "async": "1.5.2",
- "clone": "1.0.3",
- "enhanced-resolve": "0.9.1",
- "interpret": "0.6.6",
- "loader-utils": "0.2.17",
- "memory-fs": "0.3.0",
- "mkdirp": "0.5.1",
- "node-libs-browser": "0.7.0",
- "optimist": "0.6.1",
- "supports-color": "3.2.3",
- "tapable": "0.1.10",
- "uglify-js": "2.7.5",
- "watchpack": "0.2.9",
- "webpack-core": "0.6.9"
- },
- "dependencies": {
- "acorn": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
- "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
- "dev": true
- },
- "camelcase": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
- "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "1.0.0"
- }
- },
- "tapable": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
- "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=",
- "dev": true
- },
- "uglify-js": {
- "version": "2.7.5",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz",
- "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=",
- "dev": true,
- "requires": {
- "async": "0.2.10",
- "source-map": "0.5.7",
- "uglify-to-browserify": "1.0.2",
- "yargs": "3.10.0"
- },
- "dependencies": {
- "async": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
- "dev": true
- }
- }
- },
- "yargs": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
- "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
- "dev": true,
- "requires": {
- "camelcase": "1.2.1",
- "cliui": "2.1.0",
- "decamelize": "1.2.0",
- "window-size": "0.1.0"
- }
- }
- }
- },
- "webpack-core": {
- "version": "0.6.9",
- "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz",
- "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=",
- "dev": true,
- "requires": {
- "source-list-map": "0.1.8",
- "source-map": "0.4.4"
- }
- },
- "webpack-recompilation-simulator": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/webpack-recompilation-simulator/-/webpack-recompilation-simulator-1.3.0.tgz",
- "integrity": "sha1-XvmDzggYUrHNirZznueoADjlh8s=",
- "dev": true,
- "requires": {
- "temp-fs": "0.9.9"
- }
- },
- "webpack-sources": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz",
- "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=",
- "dev": true,
- "requires": {
- "source-list-map": "0.1.8",
- "source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "whet.extend": {
- "version": "0.9.9",
- "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
- "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
- "dev": true
- },
- "which": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
- "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
- "dev": true,
- "requires": {
- "isexe": "2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "window-size": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
- "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
- "dev": true
- },
- "with": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz",
- "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=",
- "dev": true,
- "requires": {
- "acorn": "1.2.2",
- "acorn-globals": "1.0.9"
- },
- "dependencies": {
- "acorn": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
- "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=",
- "dev": true
- }
- }
- },
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "write": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
- "dev": true,
- "requires": {
- "mkdirp": "0.5.1"
- }
- },
- "xml-char-classes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
- "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0="
- },
- "xml-escape": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.0.0.tgz",
- "integrity": "sha1-AJY9aXsq3wwYXE4E5zF0upsojrI=",
- "dev": true
- },
- "xml2js": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
- "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
- "dev": true,
- "requires": {
- "sax": "1.2.4",
- "xmlbuilder": "9.0.7"
- }
- },
- "xmlbuilder": {
- "version": "9.0.7",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
- "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
- "dev": true
- },
- "xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
- "dev": true
- },
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
- "dev": true
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true
- },
- "yargs": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
- "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
- "dev": true,
- "requires": {
- "camelcase": "4.1.0",
- "cliui": "3.2.0",
- "decamelize": "1.2.0",
- "get-caller-file": "1.0.2",
- "os-locale": "2.1.0",
- "read-pkg-up": "2.0.0",
- "require-directory": "2.1.1",
- "require-main-filename": "1.0.1",
- "set-blocking": "2.0.0",
- "string-width": "2.1.1",
- "which-module": "2.0.0",
- "y18n": "3.2.1",
- "yargs-parser": "7.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wrap-ansi": "2.1.0"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- }
- }
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "2.0.0"
- }
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "parse-json": "2.2.0",
- "pify": "2.3.0",
- "strip-bom": "3.0.0"
- }
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "2.3.0"
- }
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "2.0.0",
- "normalize-package-data": "2.4.0",
- "path-type": "2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "dev": true,
- "requires": {
- "find-up": "2.1.0",
- "read-pkg": "2.0.0"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- }
- }
- },
- "yargs-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
- "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
- "dev": true,
- "requires": {
- "camelcase": "4.1.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- }
- }
- }
- }
-}
diff --git a/package.json b/package.json
index 16f02356..98f82524 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "html-webpack-plugin",
- "version": "3.2.0",
+ "version": "4.0.0-beta",
"license": "MIT",
"description": "Simplifies creation of HTML files to serve your webpack bundles",
"author": "Charles Blaxland (https://github.com/ampedandwired)",
@@ -12,9 +12,12 @@
],
"scripts": {
"pretest": "semistandard",
+ "posttest": "tsc",
"commit": "git-cz",
"build-examples": "node examples/build-examples.js",
- "test": "jasmine",
+ "test": "jest --runInBand --verbose --coverage",
+ "test-watch": "jest --runInBand --watch",
+ "puml": "npx puml generate flow.puml -o flow.png",
"release": "standard-version"
},
"semistandard": {
@@ -23,39 +26,38 @@
]
},
"devDependencies": {
- "appcache-webpack-plugin": "^1.3.0",
- "commitizen": "2.9.6",
- "css-loader": "^0.26.1",
+ "@types/loader-utils": "1.1.3",
+ "@types/node": "10.11.4",
+ "@types/tapable": "1.0.4",
+ "appcache-webpack-plugin": "^1.4.0",
+ "commitizen": "3.0.2",
+ "css-loader": "^1.0.0",
"cz-conventional-changelog": "2.1.0",
- "dir-compare": "1.3.0",
- "es6-promise": "^4.0.5",
- "extract-text-webpack-plugin": "^1.0.1",
- "file-loader": "^0.9.0",
- "html-loader": "^0.4.4",
- "jade": "^1.11.0",
- "jade-loader": "^0.8.0",
- "jasmine": "^2.5.2",
- "jasmine-diff-matchers": "^2.0.0",
- "rimraf": "^2.5.4",
- "semistandard": "8.0.0",
- "standard-version": "^4.3.0",
- "style-loader": "^0.13.1",
- "underscore-template-loader": "^0.7.3",
- "url-loader": "^0.5.7",
- "webpack": "^1.14.0",
- "webpack-recompilation-simulator": "^1.3.0"
+ "dir-compare": "1.4.0",
+ "file-loader": "^2.0.0",
+ "html-loader": "^0.5.5",
+ "jest": "23.6.0",
+ "mini-css-extract-plugin": "^0.4.3",
+ "pug": "2.0.3",
+ "pug-loader": "2.4.0",
+ "rimraf": "^2.6.2",
+ "semistandard": "12.0.1",
+ "standard-version": "^4.4.0",
+ "style-loader": "^0.23.0",
+ "typescript": "^2.9.2",
+ "webpack": "^4.20.2",
+ "webpack-recompilation-simulator": "^3.0.0"
},
"dependencies": {
- "html-minifier": "^3.2.3",
- "loader-utils": "^0.2.16",
- "lodash": "^4.17.3",
- "pretty-error": "^2.0.2",
- "tapable": "^1.0.0",
- "toposort": "^1.0.0",
+ "html-minifier": "^3.5.20",
+ "loader-utils": "^1.1.0",
+ "lodash": "^4.17.11",
+ "pretty-error": "^2.1.1",
+ "tapable": "^1.1.0",
"util.promisify": "1.0.0"
},
"peerDependencies": {
- "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0"
+ "webpack": "^4.0.0"
},
"keywords": [
"webpack",
@@ -73,5 +75,11 @@
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
+ },
+ "jest": {
+ "watchPathIgnorePatterns": [
+ "/dist"
+ ],
+ "testEnvironment": "node"
}
}
diff --git a/spec/CachingSpec.js b/spec/CachingSpec.js
deleted file mode 100644
index 4377f94f..00000000
--- a/spec/CachingSpec.js
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Integration tests for caching
- */
-
-/* eslint-env jasmine */
-'use strict';
-
-// Polyfill promisses for node 0.10.x
-if (!global.Promise) {
- require('es6-promise').polyfill();
-}
-
-var path = require('path');
-var webpack = require('webpack');
-var rimraf = require('rimraf');
-var WebpackRecompilationSimulator = require('webpack-recompilation-simulator');
-var HtmlWebpackPlugin = require('../index.js');
-var webpackMajorVersion = require('webpack/package.json').version.split('.')[0];
-
-var OUTPUT_DIR = path.join(__dirname, '../dist');
-
-jasmine.getEnv().defaultTimeoutInterval = 30000;
-
-function setUpCompiler (htmlWebpackPlugin) {
- spyOn(htmlWebpackPlugin, 'evaluateCompilationResult').and.callThrough();
- var webpackConfig = {
- entry: path.join(__dirname, 'fixtures/index.js'),
- output: {
- path: OUTPUT_DIR,
- filename: 'index_bundle.js'
- },
- plugins: [htmlWebpackPlugin]
- };
- if (Number(webpackMajorVersion) >= 4) {
- webpackConfig.mode = 'development';
- }
- var compiler = new WebpackRecompilationSimulator(webpack(webpackConfig));
- return compiler;
-}
-
-function getCompiledModuleCount (statsJson) {
- return statsJson.modules.filter(function (webpackModule) {
- return webpackModule.built;
- }).length + statsJson.children.reduce(function (sum, childCompilationStats) {
- return sum + getCompiledModuleCount(childCompilationStats);
- }, 0);
-}
-
-describe('HtmlWebpackPluginCaching', function () {
- beforeEach(function (done) {
- rimraf(OUTPUT_DIR, done);
- });
-
- it('should compile nothing if no file was changed', function (done) {
- var template = path.join(__dirname, 'fixtures/plain.html');
- var htmlWebpackPlugin = new HtmlWebpackPlugin({
- template: template
- });
- var childCompilerHash;
- var compiler = setUpCompiler(htmlWebpackPlugin);
- compiler.run()
- // Change the template file and compile again
- .then(function () {
- childCompilerHash = htmlWebpackPlugin.childCompilerHash;
- return compiler.run();
- })
- .then(function (stats) {
- // Verify that no file was built
- expect(getCompiledModuleCount(stats.toJson()))
- .toBe(0);
- // Verify that the html was processed only during the inital build
- expect(htmlWebpackPlugin.evaluateCompilationResult.calls.count())
- .toBe(1);
- // Verify that the child compilation was executed twice
- expect(htmlWebpackPlugin.childCompilerHash)
- .toBe(childCompilerHash);
- })
- .then(done);
- });
-
- it('should not compile the webpack html file if only a javascript file was changed', function (done) {
- var htmlWebpackPlugin = new HtmlWebpackPlugin();
- var compiler = setUpCompiler(htmlWebpackPlugin);
- var childCompilerHash;
- compiler.run()
- // Change a js file and compile again
- .then(function () {
- childCompilerHash = htmlWebpackPlugin.childCompilerHash;
- compiler.simulateFileChange(path.join(__dirname, 'fixtures/index.js'), {footer: '//1'});
- return compiler.run();
- })
- .then(function (stats) {
- // Verify that only one file was built
- expect(getCompiledModuleCount(stats.toJson()))
- .toBe(1);
- // Verify that the html was processed only during the inital build
- expect(htmlWebpackPlugin.evaluateCompilationResult.calls.count())
- .toBe(1);
- // Verify that the child compilation was executed only once
- expect(htmlWebpackPlugin.childCompilerHash)
- .toBe(childCompilerHash);
- })
- .then(done);
- });
-
- it('should compile the webpack html file even if only a javascript file was changed if caching is disabled', function (done) {
- var htmlWebpackPlugin = new HtmlWebpackPlugin({
- cache: false
- });
- var childCompilerHash;
- var compiler = setUpCompiler(htmlWebpackPlugin);
- compiler.run()
- // Change a js file and compile again
- .then(function () {
- childCompilerHash = htmlWebpackPlugin.childCompilerHash;
- compiler.simulateFileChange(path.join(__dirname, 'fixtures/index.js'), {footer: '//1'});
- return compiler.run();
- })
- .then(function (stats) {
- // Verify that only one file was built
- expect(getCompiledModuleCount(stats.toJson()))
- .toBe(1);
- // Verify that the html was processed on every run
- expect(htmlWebpackPlugin.evaluateCompilationResult.calls.count())
- .toBe(2);
- // Verify that the child compilation was executed only once
- expect(htmlWebpackPlugin.childCompilerHash)
- .toBe(childCompilerHash);
- })
- .then(done);
- });
-
- it('should compile the webpack html if the template file was changed', function (done) {
- var template = path.join(__dirname, 'fixtures/plain.html');
- var htmlWebpackPlugin = new HtmlWebpackPlugin({
- template: template
- });
- var childCompilerHash;
- var compiler = setUpCompiler(htmlWebpackPlugin);
- compiler.run()
- // Change the template file and compile again
- .then(function () {
- childCompilerHash = htmlWebpackPlugin.childCompilerHash;
- compiler.simulateFileChange(template, {footer: ''});
- return compiler.run();
- })
- .then(function (stats) {
- // Verify that only one file was built
- expect(getCompiledModuleCount(stats.toJson()))
- .toBe(1);
- // Verify that the html was processed twice
- expect(htmlWebpackPlugin.evaluateCompilationResult.calls.count())
- .toBe(2);
- // Verify that the child compilation was executed twice
- expect(htmlWebpackPlugin.childCompilerHash)
- .not.toBe(childCompilerHash);
- })
- .then(done);
- });
-});
diff --git a/spec/ExampleSpec.js b/spec/ExampleSpec.js
deleted file mode 100644
index 0d928dc2..00000000
--- a/spec/ExampleSpec.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * These integration tests compile all cases from the example folder
- * and matches them against their dist folder
- */
-
- /* eslint-env jasmine */
-'use strict';
-
-// Workaround for css-loader issue
-// https://github.com/webpack/css-loader/issues/144
-if (!global.Promise) {
- require('es6-promise').polyfill();
-}
-
-var path = require('path');
-var webpack = require('webpack');
-var rimraf = require('rimraf');
-var fs = require('fs');
-var webpackMajorVersion = require('webpack/package.json').version.split('.')[0];
-
-var OUTPUT_DIR = path.join(__dirname, '../dist');
-
-jasmine.getEnv().defaultTimeoutInterval = 30000;
-
-function runExample (exampleName, done) {
- var examplePath = path.resolve(__dirname, '..', 'examples', exampleName);
- var exampleOutput = path.join(OUTPUT_DIR, exampleName);
- var fixturePath = path.join(examplePath, 'dist', 'webpack-' + webpackMajorVersion);
- // Clear old results
- rimraf(exampleOutput, function () {
- var options = require(path.join(examplePath, 'webpack.config.js'));
- options.context = examplePath;
- options.output.path = exampleOutput;
- if (Number(webpackMajorVersion) >= 4) {
- options.plugins.unshift(new webpack.LoaderOptionsPlugin({
- options: {
- context: process.cwd() // or the same value as `context`
- }
- }));
- if (options.module && options.module.loaders) {
- options.module.rules = options.module.loaders;
- delete options.module.loaders;
- }
- options.mode = 'production';
- options.optimization = { minimizer: [] };
- }
-
- webpack(options, function (err) {
- var dircompare = require('dir-compare');
- var res = dircompare.compareSync(fixturePath, exampleOutput, {compareSize: true});
-
- res.diffSet.filter(function (diff) {
- return diff.state === 'distinct';
- }).forEach(function (diff) {
- var file1Contents = fs.readFileSync(path.join(diff.path1, diff.name1)).toString();
- var file2Contents = fs.readFileSync(path.join(diff.path2, diff.name2)).toString();
- expect(file1Contents).diffPatch(file2Contents);
- expect(file1Contents).toBe(file2Contents);
- });
-
- expect(err).toBeFalsy();
- expect(res.same).toBe(true);
- done();
- });
- });
-}
-
-describe('HtmlWebpackPlugin Examples', function () {
- beforeEach(function () {
- jasmine.addMatchers(require('jasmine-diff-matchers').diffPatch);
- });
-
- it('appcache example', function (done) {
- runExample('appcache', done);
- });
-
- it('custom-template example', function (done) {
- runExample('custom-template', done);
- });
-
- it('default example', function (done) {
- runExample('default', done);
- });
-
- it('favicon example', function (done) {
- runExample('favicon', done);
- });
-
- it('html-loader example', function (done) {
- runExample('html-loader', done);
- });
-
- it('inline example', function (done) {
- runExample('inline', done);
- });
-
- it('jade-loader example', function (done) {
- runExample('jade-loader', done);
- });
-
- it('javascript example', function (done) {
- runExample('javascript', done);
- });
-
- it('javascript-advanced example', function (done) {
- runExample('javascript-advanced', done);
- });
-
- it('sort manually example', function (done) {
- runExample('sort-manually', done);
- });
-
- it('template-parameters example', function (done) {
- runExample('template-parameters', done);
- });
-});
diff --git a/spec/BasicSpec.js b/spec/basic.spec.js
similarity index 55%
rename from spec/BasicSpec.js
rename to spec/basic.spec.js
index a5b5861a..d20ed718 100644
--- a/spec/BasicSpec.js
+++ b/spec/basic.spec.js
@@ -2,112 +2,60 @@
* Integration and unit tests for all features but caching
*/
-/* eslint-env jasmine */
+/* eslint-env jest */
'use strict';
-// Workaround for css-loader issue
-// https://github.com/webpack/css-loader/issues/144
-if (!global.Promise) {
- require('es6-promise').polyfill();
-}
-
-var path = require('path');
-var fs = require('fs');
-var webpack = require('webpack');
-var rimraf = require('rimraf');
-var _ = require('lodash');
-var ExtractTextPlugin = require('extract-text-webpack-plugin');
-var extractTextPluginMajorVersion = require('extract-text-webpack-plugin/package.json').version.split('.')[0];
-var webpackMajorVersion = Number(require('webpack/package.json').version.split('.')[0]);
+const path = require('path');
+const fs = require('fs');
+const webpack = require('webpack');
+const rimraf = require('rimraf');
+const _ = require('lodash');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+const webpackMajorVersion = Number(require('webpack/package.json').version.split('.')[0]);
if (isNaN(webpackMajorVersion)) {
throw new Error('Cannot parse webpack major version');
}
-if (webpackMajorVersion < 4) {
- var CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin');
-}
-var HtmlWebpackPlugin = require('../index.js');
-
-if (Number(extractTextPluginMajorVersion) > 1) {
- var extractOriginal = ExtractTextPlugin.extract;
- ExtractTextPlugin.extract = function (fallback, use) {
- return extractOriginal({
- fallback: fallback,
- use: use
- });
- };
-}
-var OUTPUT_DIR = path.join(__dirname, '../dist');
+const HtmlWebpackPlugin = require('../index.js');
-jasmine.getEnv().defaultTimeoutInterval = 30000;
+const OUTPUT_DIR = path.resolve(__dirname, '../dist/basic-spec');
-function transformCommonChunkConfigToOptimization (config) {
- if (config.name === 'common') {
- return {
- splitChunks: {
- cacheGroups: {
- commons: {
- chunks: 'initial',
- name: config.name,
- enforce: true
- }
- }
- }
- };
- } else {
- throw new Error('Unrecognized common chunk config');
- }
-}
+jest.setTimeout(30000);
+process.on('unhandledRejection', r => console.log(r));
+process.traceDeprecation = true;
function testHtmlPlugin (webpackConfig, expectedResults, outputFile, done, expectErrors, expectWarnings) {
- if (webpackMajorVersion >= 4) {
- webpackConfig.mode = 'development';
- if (webpackConfig.module && webpackConfig.module.loaders) {
- webpackConfig.module.rules = webpackConfig.module.loaders;
- delete webpackConfig.module.loaders;
- }
- }
- if (webpackConfig.__commonsChunk) {
- if (webpackMajorVersion < 4) {
- webpackConfig.plugins = webpackConfig.plugins || [];
- webpackConfig.plugins.unshift(new CommonsChunkPlugin(webpackConfig.__commonsChunk));
- } else {
- webpackConfig.optimization = transformCommonChunkConfigToOptimization(webpackConfig.__commonsChunk);
- }
- delete webpackConfig.__commonsChunk;
- }
outputFile = outputFile || 'index.html';
- webpack(webpackConfig, function (err, stats) {
+ webpack(webpackConfig, (err, stats) => {
expect(err).toBeFalsy();
- var compilationErrors = (stats.compilation.errors || []).join('\n');
+ const compilationErrors = (stats.compilation.errors || []).join('\n');
if (expectErrors) {
expect(compilationErrors).not.toBe('');
} else {
expect(compilationErrors).toBe('');
}
- var compilationWarnings = (stats.compilation.warnings || []).join('\n');
+ const compilationWarnings = (stats.compilation.warnings || []).join('\n');
if (expectWarnings) {
expect(compilationWarnings).not.toBe('');
} else {
expect(compilationWarnings).toBe('');
}
if (outputFile instanceof RegExp) {
- var matches = Object.keys(stats.compilation.assets).filter(function (item) {
- return outputFile.test(item);
- });
- expect(matches.length).toBe(1);
+ const fileNames = Object.keys(stats.compilation.assets);
+ const matches = Object.keys(stats.compilation.assets).filter(item => outputFile.test(item));
+ expect(matches[0] || fileNames).not.toEqual(fileNames);
outputFile = matches[0];
}
expect(outputFile.indexOf('[hash]') === -1).toBe(true);
- var outputFileExists = fs.existsSync(path.join(OUTPUT_DIR, outputFile));
+ const outputFileExists = fs.existsSync(path.join(OUTPUT_DIR, outputFile));
expect(outputFileExists).toBe(true);
if (!outputFileExists) {
return done();
}
- var htmlContent = fs.readFileSync(path.join(OUTPUT_DIR, outputFile)).toString();
- var chunksInfo;
- for (var i = 0; i < expectedResults.length; i++) {
- var expectedResult = expectedResults[i];
+ const htmlContent = fs.readFileSync(path.join(OUTPUT_DIR, outputFile)).toString();
+ let chunksInfo;
+ for (let i = 0; i < expectedResults.length; i++) {
+ const expectedResult = expectedResults[i];
if (expectedResult instanceof RegExp) {
expect(htmlContent).toMatch(expectedResult);
} else if (typeof expectedResult === 'object') {
@@ -115,7 +63,7 @@ function testHtmlPlugin (webpackConfig, expectedResults, outputFile, done, expec
if (!chunksInfo) {
chunksInfo = getChunksInfoFromStats(stats);
}
- var chunkhash = chunksInfo[expectedResult.chunkName].hash;
+ const chunkhash = chunksInfo[expectedResult.chunkName].hash;
expect(htmlContent).toContain(expectedResult.containStr.replace('%chunkhash%', chunkhash));
}
} else {
@@ -127,11 +75,11 @@ function testHtmlPlugin (webpackConfig, expectedResults, outputFile, done, expec
}
function getChunksInfoFromStats (stats) {
- var chunks = stats.compilation.getStats().toJson().chunks;
- var chunksInfo = {};
- for (var i = 0; i < chunks.length; i++) {
- var chunk = chunks[i];
- var chunkName = chunk.names[0];
+ const chunks = stats.compilation.getStats().toJson().chunks;
+ const chunksInfo = {};
+ for (let i = 0; i < chunks.length; i++) {
+ const chunk = chunks[i];
+ const chunkName = chunk.names[0];
if (chunkName) {
chunksInfo[chunkName] = chunk;
}
@@ -139,44 +87,26 @@ function getChunksInfoFromStats (stats) {
return chunksInfo;
}
-function tapCompilationEvent (compilation, eventName, handler) {
- // Webpack 4 has a new interface
- if (compilation.hooks) {
- return compilation.hooks[trainCaseToCamelCase(eventName)].tapAsync(
- 'AsyncPlugin' + tapCompilationEvent.counter++,
- handler
- );
- } else {
- return compilation.plugin(eventName, handler);
- }
-}
-// There's probably a better way to do this
-tapCompilationEvent.counter = 0;
-
-function trainCaseToCamelCase (word) {
- return word.replace(/-([\w])/g, function (match, p1) {
- return p1.toUpperCase();
- });
-}
-
-describe('HtmlWebpackPlugin', function () {
- beforeEach(function (done) {
+describe('HtmlWebpackPlugin', () => {
+ beforeEach(done => {
rimraf(OUTPUT_DIR, done);
});
- it('generates a default index.html file for a single entry point', function (done) {
+ it('generates a default index.html file for a single entry point', done => {
testHtmlPlugin({
+ mode: 'production',
entry: path.join(__dirname, 'fixtures/index.js'),
output: {
path: OUTPUT_DIR,
filename: 'index_bundle.js'
},
plugins: [new HtmlWebpackPlugin()]
- }, [/[\s]*
+
diff --git a/spec/fixtures/legacy.html b/spec/fixtures/legacy.html
index 91cb1579..3611c961 100644
--- a/spec/fixtures/legacy.html
+++ b/spec/fixtures/legacy.html
@@ -1,11 +1,11 @@
-
+
Test
Some unique text
-
+
diff --git a/spec/fixtures/template.jade b/spec/fixtures/template.jade
deleted file mode 100644
index 39aa1a97..00000000
--- a/spec/fixtures/template.jade
+++ /dev/null
@@ -1,9 +0,0 @@
-doctype html
-html
- head
- meta(http-equiv="Content-type" content="text/html; charset=utf-8")
- title Demo
- body
- p Some unique text
- each jsFile in htmlWebpackPlugin.files.js
- script(type="text/javascript" src!=jsFile)
diff --git a/spec/fixtures/template.pug b/spec/fixtures/template.pug
new file mode 100644
index 00000000..1d303ae6
--- /dev/null
+++ b/spec/fixtures/template.pug
@@ -0,0 +1,9 @@
+doctype html
+html
+ head
+ meta(charset="utf-8")
+ title Demo
+ body
+ p Some unique text
+ each jsFile in htmlWebpackPlugin.files.js
+ script(src!=jsFile)
diff --git a/spec/fixtures/test.html b/spec/fixtures/test.html
index fa8a9ec5..3f4fd9a9 100644
--- a/spec/fixtures/test.html
+++ b/spec/fixtures/test.html
@@ -1,11 +1,11 @@
-
+
Test
Some unique text
-
+
diff --git a/spec/fixtures/webpackconfig.html b/spec/fixtures/webpackconfig.html
index 3359eb7d..7d7a74f8 100644
--- a/spec/fixtures/webpackconfig.html
+++ b/spec/fixtures/webpackconfig.html
@@ -1,11 +1,11 @@
-
+
Test
Public path is <%= webpackConfig.output.publicPath %>
-
+
diff --git a/spec/hot.spec.js b/spec/hot.spec.js
new file mode 100644
index 00000000..6a2120de
--- /dev/null
+++ b/spec/hot.spec.js
@@ -0,0 +1,89 @@
+/*
+ * Integration tests for caching
+ */
+
+/* eslint-env jest */
+'use strict';
+
+const path = require('path');
+const fs = require('fs');
+const webpack = require('webpack');
+const rimraf = require('rimraf');
+const WebpackRecompilationSimulator = require('webpack-recompilation-simulator');
+const HtmlWebpackPlugin = require('../index.js');
+
+const OUTPUT_DIR = path.join(__dirname, '../dist/caching-spec');
+
+// The WebpackRecompilationSimulator uses a loader to redirect the file writes to a temp directory.
+// As this would disable the default loader behaviour by design it has to be run in force mode
+const DEFAULT_LOADER = require.resolve('../lib/loader.js') + '?force';
+const DEFAULT_TEMPLATE = DEFAULT_LOADER + '!' + require.resolve('../default_index.ejs');
+
+jest.setTimeout(30000);
+process.on('unhandledRejection', r => console.log(r));
+process.traceDeprecation = true;
+
+describe('HtmlWebpackPluginHMR', () => {
+ beforeEach(done => {
+ rimraf(OUTPUT_DIR, done);
+ });
+
+ it('should not cause errors for the main compilation if hot-reload is active', () => {
+ const config = {
+ mode: 'development',
+ entry: path.join(__dirname, 'fixtures/index.js'),
+ output: {
+ path: OUTPUT_DIR
+ },
+ plugins: [
+ new webpack.HotModuleReplacementPlugin(),
+ new HtmlWebpackPlugin({ template: DEFAULT_TEMPLATE })
+ ]
+ };
+ const compiler = new WebpackRecompilationSimulator(webpack(config));
+ const jsFileTempPath = compiler.addTestFile(path.join(__dirname, 'fixtures/index.js'));
+ fs.writeFileSync(jsFileTempPath, 'module.exports = function calc(a, b){ return a + b };');
+ return compiler.startWatching()
+ // Change the template file and compile again
+ .then(() => {
+ fs.writeFileSync(jsFileTempPath, 'module.exports = function calc(a, b){ return a - b };');
+ return compiler.waitForWatchRunComplete();
+ })
+ .then(stats => {
+ expect(stats.compilation.errors).toEqual([]);
+ })
+ .then(() => compiler.stopWatching());
+ });
+
+ it('should not cause missing hot-reloaded code of the main compilation', () => {
+ const config = {
+ mode: 'development',
+ entry: path.join(__dirname, 'fixtures/index.js'),
+ target: 'node',
+ output: {
+ path: OUTPUT_DIR
+ },
+ plugins: [
+ new webpack.HotModuleReplacementPlugin(),
+ new HtmlWebpackPlugin({ template: DEFAULT_TEMPLATE })
+ ]
+ };
+ const compiler = new WebpackRecompilationSimulator(webpack(config));
+ const jsFileTempPath = compiler.addTestFile(path.join(__dirname, 'fixtures/index.js'));
+ fs.writeFileSync(jsFileTempPath, 'global = 1; module.hot.accept();');
+ return compiler.startWatching()
+ // Change the template file and compile again
+ .then(() => {
+ fs.writeFileSync(jsFileTempPath, 'global = 2; module.hot.accept();');
+ return compiler.waitForWatchRunComplete();
+ })
+ .then(stats => {
+ const hotUpdateJsFileNames = Object.keys(stats.compilation.assets).filter((fileName) => /\.hot-update\.js$/.test(fileName));
+ expect(hotUpdateJsFileNames).not.toEqual([]);
+ expect(hotUpdateJsFileNames.length).toEqual(1);
+ const hotUpdateFileSource = stats.compilation.assets[hotUpdateJsFileNames[0]].source();
+ expect(hotUpdateFileSource).not.toEqual('');
+ })
+ .then(() => compiler.stopWatching());
+ });
+});
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..112ef7cb
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,37 @@
+{
+ "compilerOptions": {
+ /* Basic Options */
+ "allowJs": true, /* Allow javascript files to be compiled. */
+ "checkJs": true, /* Report errors in .js files. */
+ "noEmit": true, /* Do not emit outputs. */
+ "lib": ["es2017"],
+
+ /* Strict Type-Checking Options */
+ "strict": true, /* Enable all strict type-checking options. */
+ "noImplicitAny": false, /* Raise error on expressions and declarations with an implied 'any' type. */
+ // "strictNullChecks": true, /* Enable strict null checks. */
+ // "strictFunctionTypes": true, /* Enable strict checking of function types. */
+ // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
+ // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
+ // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
+
+ /* Additional Checks */
+ // "noUnusedLocals": true, /* Report errors on unused locals. */
+ // "noUnusedParameters": true, /* Report errors on unused parameters. */
+ // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
+ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
+
+ /* Module Resolution Options */
+ "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
+ "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
+ "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
+ },
+ "types": ["node"],
+ "exclude": [
+ "node_modules",
+ "spec",
+ "examples",
+ "dist",
+ "coverage"
+ ]
+}
diff --git a/typings.d.ts b/typings.d.ts
new file mode 100644
index 00000000..e5fcef72
--- /dev/null
+++ b/typings.d.ts
@@ -0,0 +1,139 @@
+
+/**
+ * The plugin options
+ */
+interface HtmlWebpackPluginOptions {
+ /**
+ * The title to use for the generated HTML document
+ */
+ title: string,
+ /**
+ * The `webpack` require path to the template.
+ * @see https://github.com/jantimon/html-webpack-plugin/blob/master/docs/template-option.md
+ */
+ template: string,
+ /**
+ * Allow to use a html string instead of reading from a file
+ */
+ templateContent:
+ false // Use the template option instead to load a file
+ | string
+ | Promise,
+ /**
+ * Allows to overwrite the parameters used in the template
+ */
+ templateParameters:
+ false // Pass an empty object to the template function
+ | ((compilation: any, assets, assetTags: { headTags: Array, bodyTags: Array }, options: HtmlWebpackPluginOptions) => {[option: string]: any})
+ | ((compilation: any, assets, assetTags: { headTags: Array, bodyTags: Array }, options: HtmlWebpackPluginOptions) => Promise<{[option: string]: any}>)
+ | {[option: string]: any}
+ /**
+ * The file to write the HTML to.
+ * Defaults to `index.html`.
+ * Supports subdirectories eg: `assets/admin.html`
+ */
+ filename: string,
+ /**
+ * If `true` then append a unique `webpack` compilation hash to all included scripts and CSS files.
+ * This is useful for cache busting
+ */
+ hash: boolean,
+ /**
+ * Inject all assets into the given `template` or `templateContent`.
+ */
+ inject: false // Don't inject scripts
+ | true // Inject scripts into body
+ | 'body' // Inject scripts into body
+ | 'head' // Inject scripts into head
+ /**
+ * Path to the favicon icon
+ */
+ favicon: false | string,
+ /**
+ * HTML Minification options
+ * @https://github.com/kangax/html-minifier#options-quick-reference
+ */
+ minify?: boolean | {},
+ cache: boolean,
+ /**
+ * Render errors into the HTML page
+ */
+ showErrors: boolean,
+ /**
+ * List all entries which should be injected
+ */
+ chunks: 'all' | string[],
+ /**
+ * List all entries which should not be injeccted
+ */
+ excludeChunks: string[],
+ chunksSortMode: 'auto' | 'manual' | (((entryNameA: string, entryNameB: string) => number)),
+ /**
+ * Inject meta tags
+ */
+ meta: false // Disable injection
+ | {
+ [name: string]: string|false // name content pair e.g. {viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no'}`
+ | {[attributeName: string]: string|boolean} // custom properties e.g. { name:"viewport" content:"width=500, initial-scale=1" }
+ },
+ /**
+ * Enforce self closing tags e.g.
+ */
+ xhtml: boolean
+
+ /**
+ * In addition to the options actually used by this plugin, you can use this hash to pass arbitrary data through
+ * to your template.
+ */
+ [option: string]: any;
+}
+
+/**
+ * A tag element according to the htmlWebpackPlugin object notation
+ */
+interface HtmlTagObject {
+ /**
+ * Attributes of the html tag
+ * E.g. `{'disabled': true, 'value': 'demo'}`
+ */
+ attributes: {
+ [attributeName: string]: string|boolean
+ },
+ /**
+ * Wether this html must not contain innerHTML
+ * @see https://www.w3.org/TR/html5/syntax.html#void-elements
+ */
+ voidTag: boolean,
+ /**
+ * The tag name e.g. `'div'`
+ */
+ tagName: string,
+ /**
+ * Inner HTML The
+ */
+ innerHTML?: string
+}
+
+/**
+ * The values which are available during template execution
+ *
+ * Please keep in mind that the `templateParameter` options allows to change them
+ */
+interface HtmlWebpackPluginTemplateParameter {
+ compilation: any,
+ webpackConfig: any
+ htmlWebpackPlugin: {
+ tags: {
+ headTags: HtmlTagObject[],
+ bodyTags: HtmlTagObject[]
+ },
+ files: {
+ publicPath: string,
+ js: Array,
+ css: Array,
+ manifest?: string,
+ favicon?: string
+ },
+ options: HtmlWebpackPluginOptions
+ }
+}